mirror of
https://github.com/ganelson/inform.git
synced 2024-06-26 04:00:43 +03:00
Ranges for literal notation parts not starting from 0
This commit is contained in:
parent
70c0e97e80
commit
ed743bbcb6
|
@ -1,6 +1,6 @@
|
|||
# Inform 7
|
||||
|
||||
[Version](notes/versioning.md): 10.2.0-beta+6W80 'Krypton' (13 July 2023)
|
||||
[Version](notes/versioning.md): 10.2.0-beta+6W81 'Krypton' (14 July 2023)
|
||||
|
||||
## About Inform
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
Prerelease: beta
|
||||
Build Date: 13 July 2023
|
||||
Build Number: 6W80
|
||||
Build Date: 14 July 2023
|
||||
Build Number: 6W81
|
||||
|
|
|
@ -413,7 +413,7 @@ by a bracketed list of up to three options in any order.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><lp-part></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { 0, RP[1] }</span>
|
||||
|
||||
<span class="Preform-function-syntax"><lp-part></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-unparsed-bal></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><lp-part-option-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"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { 0, LPRequests::mark(RP[1], R[2], <<max_part_val>>) }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-unparsed-bal></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">(</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><lp-part-option-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"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { 0, LPRequests::mark(RP[1], R[2], <<min_part_val>>, <<max_part_val>>) }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><np-unparsed-bal></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { 0, RP[1] }</span>
|
||||
|
||||
<span class="Preform-function-syntax"><lp-part-option-list></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
|
@ -430,7 +430,7 @@ by a bracketed list of up to three options in any order.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">with</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">leading</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">zeros</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"> { WITH_LEADING_ZEROS_LSO, - }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">without</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">leading</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">zeros</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"> { WITHOUT_LEADING_ZEROS_LSO, - }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">in</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><number-base></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"> { BASE_LSO*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-constant-syntax">to</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"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> <<max_part_val>> = R[2]; </span><span class="named-paragraph-container code-font"><a href="3-nlpr.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Apply range</span><span class="named-paragraph-number">8.1</span></a></span><span class="Preform-constant-syntax">;</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><cardinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</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"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> <<min_part_val>> = R[1]; <<max_part_val>> = R[2]; </span><span class="named-paragraph-container code-font"><a href="3-nlpr.html#SP8_1" class="named-paragraph-link"><span class="named-paragraph">Apply range</span><span class="named-paragraph-number">8.1</span></a></span><span class="Preform-constant-syntax">;</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">up</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><cardinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><number-base></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">digit/digits</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="named-paragraph-container code-font"><a href="3-nlpr.html#SP8_4" class="named-paragraph-link"><span class="named-paragraph">Apply based max digit count</span><span class="named-paragraph-number">8.4</span></a></span><span class="Preform-constant-syntax">;</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">up</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><cardinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">digit/digits</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="named-paragraph-container code-font"><a href="3-nlpr.html#SP8_2" class="named-paragraph-link"><span class="named-paragraph">Apply max digit count</span><span class="named-paragraph-number">8.2</span></a></span><span class="Preform-constant-syntax">;</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><cardinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><number-base></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">digit/digits</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="named-paragraph-container code-font"><a href="3-nlpr.html#SP8_5" class="named-paragraph-link"><span class="named-paragraph">Apply based digit count</span><span class="named-paragraph-number">8.5</span></a></span><span class="Preform-constant-syntax">;</span>
|
||||
|
@ -442,11 +442,11 @@ by a bracketed list of up to three options in any order.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">R</span><span class="plain-syntax">[1] != </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">R</span><span class="plain-syntax">[1] > </span><span class="identifier-syntax">R</span><span class="plain-syntax">[2])</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(...),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the range in a named part has to begin at 0"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"for the moment at least."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> ==> { </span><span class="constant-syntax">MAXIMUM_LSO</span><span class="plain-syntax">, - };</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the minimum value for a named part cannot be greater than the maximum"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"or it would be impossible for any value of this kind to exist."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> ==> { </span><span class="constant-syntax">MINIMUM_LSO</span><span class="plain-syntax"> + </span><span class="constant-syntax">MAXIMUM_LSO</span><span class="plain-syntax">, - };</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-nlpr.html#SP8">§8</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP8_2" class="paragraph-anchor"></a><b>§8.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Apply max digit count</span><span class="named-paragraph-number">8.2</span></span><span class="comment-syntax"> =</span>
|
||||
|
@ -527,6 +527,7 @@ by a bracketed list of up to three options in any order.
|
|||
<span class="definition-keyword">define</span> <span class="constant-syntax">WITH_LEADING_ZEROS_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000004</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">WITHOUT_LEADING_ZEROS_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000008</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MAXIMUM_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000010</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MINIMUM_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000020</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">BASE_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00000100</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">BASE_MASK_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x0000ff00</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MIN_DIGITS_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x00010000</span>
|
||||
|
@ -535,10 +536,11 @@ by a bracketed list of up to three options in any order.
|
|||
<span class="definition-keyword">define</span> <span class="constant-syntax">MAX_DIGITS_MASK_LSO</span><span class="plain-syntax"> </span><span class="constant-syntax">0x7f000000</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">LPRequests::mark</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">LPRequests::mark</span></span>:<br/><a href="3-nlpr.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">M</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">LPRequests::mark</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">LPRequests::mark</span></span>:<br/><a href="3-nlpr.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">MI</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">MA</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">A</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe_options_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-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">N</span><span class="plain-syntax"> & </span><span class="constant-syntax">MAXIMUM_LSO</span><span class="plain-syntax">) </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe_max_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">M</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">MINIMUM_LSO</span><span class="plain-syntax">) </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe_min_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">MI</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">MAXIMUM_LSO</span><span class="plain-syntax">) </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe_max_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">MA</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">A</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
|
|
@ -528,6 +528,7 @@ which compilation unit the node belongs.
|
|||
<span class="definition-keyword">enum</span> <span class="constant-syntax">evaluation_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">parse_node</span></span><span class="comment-syntax">: result of evaluating the text</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">explicit_gender_marker_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: used by PROPER NOUN nodes for evident genders</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">lpe_options_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: options set for a literal pattern part</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">lpe_min_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: value offset for a literal pattern part</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">lpe_max_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: maximum value for a literal pattern part</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">int</span></span><span class="comment-syntax">: e.g., 5 for "five gold rings"</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">new_relation_here_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">binary_predicate</span></span><span class="comment-syntax">: new relation as subject of "relates" sentence</span>
|
||||
|
@ -583,6 +584,8 @@ which compilation unit the node belongs.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">lpe_max_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP16" class="function-link"><span class="function-syntax">CoreSyntax::write_lpe_max_ANNOT</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">lpe_min_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP16" class="function-link"><span class="function-syntax">CoreSyntax::write_lpe_min_ANNOT</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP16" class="function-link"><span class="function-syntax">CoreSyntax::write_multiplicity_ANNOT</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="constant-syntax">new_relation_here_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP16" class="function-link"><span class="function-syntax">CoreSyntax::write_new_relation_here_ANNOT</span></a><span class="plain-syntax">);</span>
|
||||
|
@ -637,6 +640,9 @@ which compilation unit the node belongs.
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CoreSyntax::write_lpe_max_ANNOT</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {lpe max: %d}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_max_ANNOT</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CoreSyntax::write_lpe_min_ANNOT</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {lpe offset: %d}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_min_ANNOT</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CoreSyntax::write_multiplicity_ANNOT</span><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {multiplicity %d}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax">));</span>
|
||||
|
@ -713,6 +719,7 @@ which compilation unit the node belongs.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">defn_language_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_options_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_max_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">lpe_min_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">multiplicity_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">UNPARSED_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">new_relation_here_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="identifier-syntax">PROPER_NOUN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">new_relation_here_ANNOT</span><span class="plain-syntax">);</span>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -232,11 +232,7 @@ the first function appears.)
|
|||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">EQ_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DIVIDE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">value_s</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_multiplier</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">(0);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
|
@ -256,11 +252,7 @@ the first function appears.)
|
|||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PRINTNUMBER_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DIVIDE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">value_s</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_multiplier</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.2</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">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">number_base</span><span class="plain-syntax"> != </span><span class="constant-syntax">10</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">number_base</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
|
@ -294,15 +286,7 @@ the first function appears.)
|
|||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PRINTNUMBER_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">MODULO_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DIVIDE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">value_s</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_multiplier</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_range</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.2</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">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">number_base</span><span class="plain-syntax"> != </span><span class="constant-syntax">10</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">number_base</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
|
@ -316,23 +300,23 @@ the first function appears.)
|
|||
|
||||
<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">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">print_with_leading_zeros</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">max_printable</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_range</span><span class="plain-syntax"> + </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_offset</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">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_digits</span><span class="plain-syntax"> < </span><span class="constant-syntax">1000000</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">1</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">d</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">; </span><span class="identifier-syntax">d</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">max_digits</span><span class="plain-syntax">; </span><span class="identifier-syntax">d</span><span class="plain-syntax">++)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">b</span><span class="plain-syntax"> = </span><span class="identifier-syntax">b</span><span class="plain-syntax"> * </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">number_base</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">max_printable</span><span class="plain-syntax"> = </span><span class="identifier-syntax">b</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pow</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">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_range</span><span class="plain-syntax"> > </span><span class="identifier-syntax">pow</span><span class="plain-syntax">) </span><span class="identifier-syntax">pow</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pow</span><span class="plain-syntax"> * </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">number_base</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">max_printable</span><span class="plain-syntax"> > </span><span class="identifier-syntax">pow</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pow</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pow</span><span class="plain-syntax"> * </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">number_base</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">pow</span><span class="plain-syntax">>1; </span><span class="identifier-syntax">pow</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pow</span><span class="plain-syntax">/</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">number_base</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">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_range</span><span class="plain-syntax"> > </span><span class="identifier-syntax">pow</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_printable</span><span class="plain-syntax"> > </span><span class="identifier-syntax">pow</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IF_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">LT_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">MODULO_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DIVIDE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">value_s</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_multiplier</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_range</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">pow</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP5" class="function-link"><span class="function-syntax">EmitCode::code</span></a><span class="plain-syntax">();</span>
|
||||
|
@ -347,21 +331,45 @@ the first function appears.)
|
|||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-lp.html#SP4_1_1_3">§4.1.1.3</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_1_1_3_2" class="paragraph-anchor"></a><b>§4.1.1.3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_offset</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">PLUS_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><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">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_range</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">MODULO_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DIVIDE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">value_s</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_multiplier</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><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">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_range</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_range</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><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">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_offset</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_offset</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-lp.html#SP4_1_1_3">§4.1.1.3</a> (three times), <a href="5-lp.html#SP4_1_1_3_1">§4.1.1.3.1</a>, <a href="5-lp.html#SP4_1_1_4">§4.1.1.4</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4_1_1_4" class="paragraph-anchor"></a><b>§4.1.1.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Truncate the printed form here if subsequent numerical parts are zero</span><span class="named-paragraph-number">4.1.1.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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">oc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">ec</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">literal_pattern_element</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lpe</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">lp</span><span class="plain-syntax">-></span><span class="identifier-syntax">lp_elements</span><span class="plain-syntax">[</span><span class="identifier-syntax">ec</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">ec</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IF_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">EQ_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DIVIDE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">value_s</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lp</span><span class="plain-syntax">-></span><span class="identifier-syntax">lp_elements</span><span class="plain-syntax">[</span><span class="identifier-syntax">ec</span><span class="plain-syntax">].</span><span class="identifier-syntax">element_multiplier</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">(0);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP5" class="function-link"><span class="function-syntax">EmitCode::code</span></a><span class="plain-syntax">();</span>
|
||||
|
@ -374,15 +382,7 @@ the first function appears.)
|
|||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">EQ_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">MODULO_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">DIVIDE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">value_s</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lp</span><span class="plain-syntax">-></span><span class="identifier-syntax">lp_elements</span><span class="plain-syntax">[</span><span class="identifier-syntax">ec</span><span class="plain-syntax">].</span><span class="identifier-syntax">element_multiplier</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lp</span><span class="plain-syntax">-></span><span class="identifier-syntax">lp_elements</span><span class="plain-syntax">[</span><span class="identifier-syntax">ec</span><span class="plain-syntax">].</span><span class="identifier-syntax">element_range</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-lp.html#SP4_1_1_3_2" class="named-paragraph-link"><span class="named-paragraph">Evaluate LPE value to be printed</span><span class="named-paragraph-number">4.1.1.3.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">(0);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP5" class="function-link"><span class="function-syntax">EmitCode::code</span></a><span class="plain-syntax">();</span>
|
||||
|
@ -1289,13 +1289,42 @@ sets the <span class="extract"><span class="extract-syntax">parsed_number</span>
|
|||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><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">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_index</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">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_offset</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP13" class="function-link"><span class="function-syntax">EmitCode::ref_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">gprk</span><span class="plain-syntax">.</span><span class="element-syntax">tot_s</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">MINUS_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">gprk</span><span class="plain-syntax">.</span><span class="element-syntax">tot_s</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_offset</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><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">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_range</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">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">min_val</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">inter_ti</span><span class="plain-syntax"> </span><span class="identifier-syntax">max_val</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_range</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IF_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">LT_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">gprk</span><span class="plain-syntax">.</span><span class="element-syntax">tot_s</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">min_val</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP5" class="function-link"><span class="function-syntax">EmitCode::code</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">JUMP_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP17" class="function-link"><span class="function-syntax">EmitCode::lab</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">failed_label</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">IF_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP14" class="function-link"><span class="function-syntax">EmitCode::inv</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">GE_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_symbol</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">K_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">gprk</span><span class="plain-syntax">.</span><span class="element-syntax">tot_s</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">((</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_range</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP8" class="function-link"><span class="function-syntax">EmitCode::val_number</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">max_val</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::up</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP5" class="function-link"><span class="function-syntax">EmitCode::code</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="2-ec.html#SP3" class="function-link"><span class="function-syntax">EmitCode::down</span></a><span class="plain-syntax">();</span>
|
||||
|
|
|
@ -202,6 +202,7 @@ The rightmost element \(e_{n-1}\) is the least significant numerically.
|
|||
<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">literal_pattern_element</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">element_index</span><span class="plain-syntax">; </span><span class="comment-syntax"> the value </span>\(i\)<span class="comment-syntax"> placing this within its LP, where </span>\(0\leq i<n\)
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">element_offset</span><span class="plain-syntax">; </span><span class="comment-syntax"> amount by which outward values differ from stored ones</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">element_range</span><span class="plain-syntax">; </span><span class="comment-syntax"> the value </span>\(r_i\)<span class="comment-syntax"> for this LP</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">element_multiplier</span><span class="plain-syntax">; </span><span class="comment-syntax"> the value </span>\(m_i\)<span class="comment-syntax"> for this LP</span>
|
||||
|
||||
|
@ -292,6 +293,7 @@ mass might also support "in kilograms" and "in grams", for instance.
|
|||
<span class="reserved-syntax">literal_pattern_element</span><span class="plain-syntax"> </span><span class="function-syntax">LiteralPatterns::lpe_new</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">LiteralPatterns::lpe_new</span></span>:<br/><a href="3-lp.html#SP25_7_2_1_1">§25.7.2.1.1</a></span></button><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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">sgn</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">literal_pattern_element</span><span class="plain-syntax"> </span><span class="identifier-syntax">lpe</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">i</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">.</span><span class="element-syntax">element_range</span><span class="plain-syntax"> = -1; </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">.</span><span class="element-syntax">element_range</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">lpe</span><span class="plain-syntax">.</span><span class="element-syntax">element_offset</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">lpe</span><span class="plain-syntax">.</span><span class="element-syntax">element_multiplier</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">lpe</span><span class="plain-syntax">.</span><span class="element-syntax">element_index</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">lpe</span><span class="plain-syntax">.</span><span class="element-syntax">element_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">;</span>
|
||||
|
@ -660,8 +662,11 @@ on unusual platforms.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">point_at</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">point_at</span><span class="plain-syntax"> < </span><span class="identifier-syntax">digits_found</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">matched_scaledown</span><span class="plain-syntax"> *= </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">number_base</span><span class="plain-syntax">; </span><span class="identifier-syntax">point_at</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">tot</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_index</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">)) </span><span class="identifier-syntax">element_overflow_at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tot</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</span><span class="plain-syntax">)*</span><span class="identifier-syntax">tot</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">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</span><span class="plain-syntax"> != -1) { </span><span class="comment-syntax"> i.e., if the range of this LPE is finite</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">tot</span><span class="plain-syntax"> < </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">tot</span><span class="plain-syntax"> >= </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</span><span class="plain-syntax"> + </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">element_overflow_at</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tot</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</span><span class="plain-syntax">)*(</span><span class="identifier-syntax">tot</span><span class="plain-syntax"> - </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</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">tot</span><span class="plain-syntax"> > </span><span class="identifier-syntax">max_16_bit</span><span class="plain-syntax">) </span><span class="identifier-syntax">overflow_16_bit_flag</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">tot</span><span class="plain-syntax"> > </span><span class="identifier-syntax">max_32_bit</span><span class="plain-syntax">) </span><span class="identifier-syntax">overflow_32_bit_flag</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">tot</span><span class="plain-syntax"> = </span><span class="identifier-syntax">matched_number</span><span class="plain-syntax"> + </span><span class="identifier-syntax">tot</span><span class="plain-syntax">;</span>
|
||||
|
@ -789,29 +794,31 @@ which is annoying. So we have a mechanism to suppress duplicates:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">max</span><span class="plain-syntax"> = </span><span class="identifier-syntax">element_overflow_at</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</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">min_val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">element_overflow_at</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">max_val</span><span class="plain-syntax"> = </span><span class="identifier-syntax">element_overflow_at</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</span><span class="plain-syntax"> + </span><span class="identifier-syntax">element_overflow_at</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</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">Problems::quote_source</span><span class="plain-syntax">(1, </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">lp</span><span class="plain-syntax">-></span><span class="element-syntax">prototype_text</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(4, &</span><span class="identifier-syntax">max</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(4, &</span><span class="identifier-syntax">min_val</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_number</span><span class="plain-syntax">(5, &</span><span class="identifier-syntax">max_val</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">element_overflow_at</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_index</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(5, </span><span class="string-syntax">"first"</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="constant-syntax">1</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(5, </span><span class="string-syntax">"second"</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="constant-syntax">2</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(5, </span><span class="string-syntax">"third"</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="constant-syntax">3</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(5, </span><span class="string-syntax">"fourth"</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="constant-syntax">4</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(5, </span><span class="string-syntax">"fifth"</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="constant-syntax">5</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(5, </span><span class="string-syntax">"sixth"</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="constant-syntax">6</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(5, </span><span class="string-syntax">"seventh"</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="constant-syntax">7</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(5, </span><span class="string-syntax">"eighth"</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="constant-syntax">8</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(5, </span><span class="string-syntax">"ninth"</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="constant-syntax">9</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(5, </span><span class="string-syntax">"tenth"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(5, </span><span class="string-syntax">"eventual"</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="constant-syntax">0</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(6, </span><span class="string-syntax">"first"</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="constant-syntax">1</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(6, </span><span class="string-syntax">"second"</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="constant-syntax">2</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(6, </span><span class="string-syntax">"third"</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="constant-syntax">3</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(6, </span><span class="string-syntax">"fourth"</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="constant-syntax">4</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(6, </span><span class="string-syntax">"fifth"</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="constant-syntax">5</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(6, </span><span class="string-syntax">"sixth"</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="constant-syntax">6</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(6, </span><span class="string-syntax">"seventh"</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="constant-syntax">7</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(6, </span><span class="string-syntax">"eighth"</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="constant-syntax">8</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(6, </span><span class="string-syntax">"ninth"</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="constant-syntax">9</span><span class="plain-syntax">: </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(6, </span><span class="string-syntax">"tenth"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_text</span><span class="plain-syntax">(6, </span><span class="string-syntax">"eventual"</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="identifier-syntax">StandardProblems::handmade_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_ElementOverflow</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_segment</span><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"In the sentence %1, you use the notation '%2' to write a constant value. "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"But the notation was specified as '%3', which means that the %5 numerical "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"part should range between 0 and %4."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"But the notation was specified as '%3', which means that the %6 numerical "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"part should range between %4 and %5."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</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">NULL</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
|
@ -1100,7 +1107,8 @@ note that the following uses the raw text of the word.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">literal_pattern_element</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lpe</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">lp</span><span class="plain-syntax">-></span><span class="element-syntax">lp_elements</span><span class="plain-syntax">[</span><span class="identifier-syntax">ec</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">m</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="3-lp.html#SP24" class="function-link"><span class="function-syntax">LiteralPatterns::write_val</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">m</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">v</span><span class="plain-syntax">/(</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</span><span class="plain-syntax">)) % </span><span class="identifier-syntax">m</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">number_base</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">print_with_leading_zeros</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">v</span><span class="plain-syntax">/(</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</span><span class="plain-syntax">)) % </span><span class="identifier-syntax">m</span><span class="plain-syntax"> + </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">number_base</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">print_with_leading_zeros</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">ec</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="3-lp.html#SP23_3_1" class="named-paragraph-link"><span class="named-paragraph">Index the fractional part of the value</span><span class="named-paragraph-number">23.3.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ec</span><span class="plain-syntax">++;</span>
|
||||
|
@ -1399,7 +1407,7 @@ middle of either angle-escapes or the material in between.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">j</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">i</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">lpe_notation_pos</span><span class="plain-syntax"> </span><span class="identifier-syntax">to</span><span class="plain-syntax"> = { </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">NW</span><span class="plain-syntax">)+</span><span class="identifier-syntax">i</span><span class="plain-syntax">-1,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Wide::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lexer::word_raw_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">NW</span><span class="plain-syntax">)+</span><span class="identifier-syntax">i</span><span class="plain-syntax">-1)) - </span><span class="constant-syntax">1</span><span class="plain-syntax"> };</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Wide::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lexer::word_raw_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">NW</span><span class="plain-syntax">)+</span><span class="identifier-syntax">i</span><span class="plain-syntax">-1)) - </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="3-lp.html#SP25_7_2_2" class="named-paragraph-link"><span class="named-paragraph">Compile unescaped notation between from and to</span><span class="named-paragraph-number">25.7.2.2</span></a></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>
|
||||
|
@ -1450,6 +1458,7 @@ material or else names for parts about which nothing else is said.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax"> LOG("Scan escape <%S>\n", angles);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Str::trim_white_space</span><span class="plain-syntax">(</span><span class="identifier-syntax">angles</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">AW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">angles</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"><quoted-text></span><span class="plain-syntax">(</span><span class="identifier-syntax">AW</span><span class="plain-syntax">)) {</span>
|
||||
|
@ -1485,7 +1494,9 @@ character ones.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">from</span><span class="plain-syntax">.</span><span class="element-syntax">wn</span><span class="plain-syntax"> < </span><span class="identifier-syntax">to</span><span class="plain-syntax">.</span><span class="element-syntax">wn</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">from</span><span class="plain-syntax">.</span><span class="element-syntax">char_pos</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">to</span><span class="plain-syntax">.</span><span class="element-syntax">char_pos</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax"> LOG("Scan word %W, %d to %W, %d\n",</span>
|
||||
<span class="plain-syntax"> </span><span class="comment-syntax"> Wordings::one_word(from.wn), from.char_pos, Wordings::one_word(to.wn), to.char_pos);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">from</span><span class="plain-syntax">.</span><span class="element-syntax">wn</span><span class="plain-syntax"> < </span><span class="identifier-syntax">to</span><span class="plain-syntax">.</span><span class="element-syntax">wn</span><span class="plain-syntax">) || ((</span><span class="identifier-syntax">from</span><span class="plain-syntax">.</span><span class="element-syntax">wn</span><span class="plain-syntax"> == </span><span class="identifier-syntax">to</span><span class="plain-syntax">.</span><span class="element-syntax">wn</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">from</span><span class="plain-syntax">.</span><span class="element-syntax">char_pos</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">to</span><span class="plain-syntax">.</span><span class="element-syntax">char_pos</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">NW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">.</span><span class="element-syntax">wn</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">.</span><span class="element-syntax">wn</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="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">NW</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">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text_of_word</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lexer::word_raw_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">NW</span><span class="plain-syntax">)+</span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
|
||||
|
@ -1634,7 +1645,8 @@ this is deferred until all elements exist, at which point we —
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::empty</span><span class="plain-syntax">(</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="identifier-syntax">element_name</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_text</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">Wordings::match</span><span class="plain-syntax">(</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</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">"Want %W have %W\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="3-lp.html#SP25_12" class="named-paragraph-link"><span class="named-paragraph">Log this literal pattern in full</span><span class="named-paragraph-number">25.12</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">"Here, want %W have %W\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(...),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the part names after 'with' do not exactly match those named "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"in the specification itself"</span><span class="plain-syntax">,</span>
|
||||
|
@ -1656,9 +1668,10 @@ this is deferred until all elements exist, at which point we —
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">O</span><span class="plain-syntax"> & </span><span class="identifier-syntax">MAX_DIGITS_MASK_LSO</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">max_digits</span><span class="plain-syntax"> = ((</span><span class="identifier-syntax">O</span><span class="plain-syntax"> & </span><span class="identifier-syntax">MAX_DIGITS_MASK_LSO</span><span class="plain-syntax">) / </span><span class="identifier-syntax">MAX_DIGITS_LSO</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">O</span><span class="plain-syntax"> & </span><span class="identifier-syntax">MAXIMUM_LSO</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe_max_ANNOT</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">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe_min_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe_max_ANNOT</span><span class="plain-syntax">) - </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</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">O</span><span class="plain-syntax"> & </span><span class="identifier-syntax">MAX_DIGITS_MASK_LSO</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="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</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">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</span><span class="plain-syntax"> + </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</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">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">=1; </span><span class="identifier-syntax">i</span><span class="function-syntax"><=lpe-></span><span class="element-syntax">max_digits</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">/</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">number_base</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">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(...),</span>
|
||||
|
@ -1753,7 +1766,8 @@ optional, and it must not be the first.
|
|||
<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">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">min_digits</span><span class="plain-syntax"> > </span><span class="constant-syntax">1</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">max_digits</span><span class="plain-syntax"> < </span><span class="constant-syntax">1000000</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 to %d digits "</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">min_digits</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">max_digits</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">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">print_with_leading_zeros</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"printed with leading zeros "</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">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</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">"range 0 to %d "</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</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">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</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">"range %d to %d "</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</span><span class="plain-syntax"> + </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</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">"range unlimited "</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">"(base %d) "</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">number_base</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">"- multiplier %d\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</span><span class="plain-syntax">);</span>
|
||||
|
@ -1764,7 +1778,7 @@ optional, and it must not be the first.
|
|||
<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>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-lp.html#SP25">§25</a>.</li></ul>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-lp.html#SP25">§25</a>, <a href="3-lp.html#SP25_10">§25.10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>§26. </b>Group names are created when first seen; the following recognises one which
|
||||
has been seen before.
|
||||
</p>
|
||||
|
@ -1921,13 +1935,18 @@ For instance, defining:
|
|||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">id</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::begin</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">print_rule_buff</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">offset_addition</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">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</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">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">offset_addition</span><span class="plain-syntax">, </span><span class="string-syntax">" + %d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</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">i</span><span class="plain-syntax">==0)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">print_rule_buff</span><span class="plain-syntax">, </span><span class="string-syntax">" (- ({full}/%d) -) "</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</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">print_rule_buff</span><span class="plain-syntax">, </span><span class="string-syntax">" (- ({full}/%d%S) -) "</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</span><span class="plain-syntax">, </span><span class="identifier-syntax">offset_addition</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">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</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">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">print_rule_buff</span><span class="plain-syntax">, </span><span class="string-syntax">" (- (({full}/%d)%%%d) -) "</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</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">print_rule_buff</span><span class="plain-syntax">, </span><span class="string-syntax">" (- (({full}/%d)%%%d%S) -) "</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</span><span class="plain-syntax">, </span><span class="identifier-syntax">offset_addition</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">print_rule_buff</span><span class="plain-syntax">, </span><span class="string-syntax">" (- ({full}%%%d) -) "</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</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">print_rule_buff</span><span class="plain-syntax">, </span><span class="string-syntax">" (- ({full}%%%d%S) -) "</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_range</span><span class="plain-syntax">, </span><span class="identifier-syntax">offset_addition</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">print_rule_buff</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">XW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::end</span><span class="plain-syntax">(</span><span class="identifier-syntax">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">Wordings::phrasual_length</span><span class="plain-syntax">(</span><span class="identifier-syntax">XW</span><span class="plain-syntax">) >= </span><span class="identifier-syntax">MAX_WORDS_PER_PHRASE</span><span class="plain-syntax"> + </span><span class="constant-syntax">5</span><span class="plain-syntax">)</span>
|
||||
|
@ -1935,6 +1954,7 @@ For instance, defining:
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Sentences::make_node</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">XW</span><span class="plain-syntax">, </span><span class="character-syntax">'.'</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">print_rule_buff</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">offset_addition</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="3-lp.html#SP29">§29</a>.</li></ul>
|
||||
|
@ -1977,10 +1997,14 @@ For instance, the dollars-and-cents example compiles:
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">print_rule_buff</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">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"><lp-></span><span class="element-syntax">no_lp_elements</span><span class="plain-syntax">; </span><span class="identifier-syntax">i</span><span class="plain-syntax">++) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">literal_pattern_element</span><span class="plain-syntax"> *</span><span class="identifier-syntax">lpe</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">lp</span><span class="plain-syntax">-></span><span class="element-syntax">lp_elements</span><span class="plain-syntax">[</span><span class="identifier-syntax">i</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">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</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">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">print_rule_buff</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">i</span><span class="plain-syntax">>0) </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">print_rule_buff</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">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</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">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">print_rule_buff</span><span class="plain-syntax">, </span><span class="string-syntax">"%d*"</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_multiplier</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">print_rule_buff</span><span class="plain-syntax">, </span><span class="string-syntax">"{part%d}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</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">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</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">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">print_rule_buff</span><span class="plain-syntax">, </span><span class="string-syntax">" - %d)"</span><span class="plain-syntax">, </span><span class="identifier-syntax">lpe</span><span class="plain-syntax">-></span><span class="element-syntax">element_offset</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">print_rule_buff</span><span class="plain-syntax">, </span><span class="string-syntax">") -) "</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Feeds::feed_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">print_rule_buff</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Total memory consumption was 138261K = 135 MB
|
||||
|
||||
---- was used for 2115190 objects, in 374468 frames in 0 x 800K = 0K = 0 MB:
|
||||
---- was used for 2115191 objects, in 374469 frames in 0 x 800K = 0K = 0 MB:
|
||||
|
||||
30.5% inter_tree_node_array 60 x 8192 = 491520 objects, 43255680 bytes
|
||||
19.1% text_stream_array 4813 x 100 = 481300 objects, 27106816 bytes
|
||||
|
@ -143,7 +143,7 @@ Total memory consumption was 138261K = 135 MB
|
|||
---- semver_range 42 objects, 4368 bytes
|
||||
---- use_option 32 objects, 4352 bytes
|
||||
---- either_or_property_data 62 objects, 3968 bytes
|
||||
---- parse_node_annotation_type 120 objects, 3840 bytes
|
||||
---- parse_node_annotation_type 121 objects, 3872 bytes
|
||||
---- method_set 108 objects, 3456 bytes
|
||||
---- definition 48 objects, 3456 bytes
|
||||
---- property_setting_bp_data 86 objects, 3440 bytes
|
||||
|
@ -269,5 +269,5 @@ Total memory consumption was 138261K = 135 MB
|
|||
---- code generation workspace for objects 3488 bytes in 19 claims
|
||||
0.1% emitter array storage 281184 bytes in 2006 claims
|
||||
|
||||
-137.-4% was overhead - -194581688 bytes = -190021K = -185 MB
|
||||
-137.-4% was overhead - -194581720 bytes = -190021K = -185 MB
|
||||
|
||||
|
|
|
@ -1,29 +1,29 @@
|
|||
100.0% in inform7 run
|
||||
67.5% in compilation to Inter
|
||||
44.6% in //Sequence::undertake_queued_tasks//
|
||||
67.9% in compilation to Inter
|
||||
45.0% in //Sequence::undertake_queued_tasks//
|
||||
4.9% in //MajorNodes::pre_pass//
|
||||
3.4% in //MajorNodes::pass_1//
|
||||
1.9% in //ImperativeDefinitions::assess_all//
|
||||
1.9% in //RTPhrasebook::compile_entries//
|
||||
1.5% in //RTKindConstructors::compile//
|
||||
1.1% in //Sequence::lint_inter//
|
||||
0.7% in //ImperativeDefinitions::compile_first_block//
|
||||
0.7% in //Sequence::undertake_queued_tasks//
|
||||
0.3% in //CompletionModule::compile//
|
||||
0.3% in //ImperativeDefinitions::compile_first_block//
|
||||
0.3% in //InferenceSubjects::emit_all//
|
||||
0.3% in //MajorNodes::pass_2//
|
||||
0.3% in //Sequence::undertake_queued_tasks//
|
||||
0.3% in //Sequence::undertake_queued_tasks//
|
||||
0.3% in //World::stage_V//
|
||||
5.0% not specifically accounted for
|
||||
28.2% in running Inter pipeline
|
||||
9.5% in step 14/15: generate inform6 -> auto.inf
|
||||
6.8% in step 5/15: load-binary-kits
|
||||
7.2% in step 5/15: load-binary-kits
|
||||
6.1% in step 6/15: make-synoptic-module
|
||||
1.9% in step 9/15: make-identifiers-unique
|
||||
0.3% in step 12/15: eliminate-redundant-operations
|
||||
0.3% in step 4/15: compile-splats
|
||||
0.3% in step 7/15: shorten-wiring
|
||||
0.3% in step 8/15: detect-indirect-calls
|
||||
2.3% not specifically accounted for
|
||||
1.9% not specifically accounted for
|
||||
3.4% in supervisor
|
||||
0.8% not specifically accounted for
|
||||
0.4% not specifically accounted for
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "Architecture16Kit",
|
||||
"version": "10.2.0-beta+6W80"
|
||||
"version": "10.2.0-beta+6W81"
|
||||
},
|
||||
"compatibility": "16-bit",
|
||||
"kit-details": {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "Architecture32Kit",
|
||||
"version": "10.2.0-beta+6W80"
|
||||
"version": "10.2.0-beta+6W81"
|
||||
},
|
||||
"compatibility": "32-bit",
|
||||
"kit-details": {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "BasicInformKit",
|
||||
"version": "10.2.0-beta+6W80"
|
||||
"version": "10.2.0-beta+6W81"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "CommandParserKit",
|
||||
"version": "10.2.0-beta+6W80"
|
||||
"version": "10.2.0-beta+6W81"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "EnglishLanguageKit",
|
||||
"version": "10.2.0-beta+6W80"
|
||||
"version": "10.2.0-beta+6W81"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"is": {
|
||||
"type": "kit",
|
||||
"title": "WorldModelKit",
|
||||
"version": "10.2.0-beta+6W80"
|
||||
"version": "10.2.0-beta+6W81"
|
||||
},
|
||||
"needs": [ {
|
||||
"need": {
|
||||
|
|
|
@ -284,7 +284,7 @@ by a bracketed list of up to three options in any order.
|
|||
<lp-part> ==> { 0, RP[1] }
|
||||
|
||||
<lp-part> ::=
|
||||
<np-unparsed-bal> ( <lp-part-option-list> ) | ==> { 0, LPRequests::mark(RP[1], R[2], <<max_part_val>>) }
|
||||
<np-unparsed-bal> ( <lp-part-option-list> ) | ==> { 0, LPRequests::mark(RP[1], R[2], <<min_part_val>>, <<max_part_val>>) }
|
||||
<np-unparsed-bal> ==> { 0, RP[1] }
|
||||
|
||||
<lp-part-option-list> ::=
|
||||
|
@ -301,7 +301,7 @@ by a bracketed list of up to three options in any order.
|
|||
with leading zeros | ==> { WITH_LEADING_ZEROS_LSO, - }
|
||||
without leading zeros | ==> { WITHOUT_LEADING_ZEROS_LSO, - }
|
||||
in <number-base> | ==> { BASE_LSO*R[1], - }
|
||||
<cardinal-number> to <cardinal-number> | ==> <<max_part_val>> = R[2]; @<Apply range@>;
|
||||
<cardinal-number> to <cardinal-number> | ==> <<min_part_val>> = R[1]; <<max_part_val>> = R[2]; @<Apply range@>;
|
||||
up to <cardinal-number> <number-base> digit/digits | ==> @<Apply based max digit count@>;
|
||||
up to <cardinal-number> digit/digits | ==> @<Apply max digit count@>;
|
||||
<cardinal-number> <number-base> digit/digits | ==> @<Apply based digit count@>;
|
||||
|
@ -309,11 +309,11 @@ by a bracketed list of up to three options in any order.
|
|||
...... ==> @<Issue PM_BadLPPartOption problem@>
|
||||
|
||||
@<Apply range@> =
|
||||
if (R[1] != 0)
|
||||
if (R[1] > R[2])
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(...),
|
||||
"the range in a named part has to begin at 0",
|
||||
"for the moment at least.");
|
||||
==> { MAXIMUM_LSO, - };
|
||||
"the minimum value for a named part cannot be greater than the maximum",
|
||||
"or it would be impossible for any value of this kind to exist.");
|
||||
==> { MINIMUM_LSO + MAXIMUM_LSO, - };
|
||||
|
||||
@<Apply max digit count@> =
|
||||
if (R[1] < 1)
|
||||
|
@ -370,6 +370,7 @@ literal_pattern_name *LPRequests::compose(literal_pattern_name *A, literal_patte
|
|||
@d WITH_LEADING_ZEROS_LSO 0x00000004
|
||||
@d WITHOUT_LEADING_ZEROS_LSO 0x00000008
|
||||
@d MAXIMUM_LSO 0x00000010
|
||||
@d MINIMUM_LSO 0x00000020
|
||||
@d BASE_LSO 0x00000100
|
||||
@d BASE_MASK_LSO 0x0000ff00
|
||||
@d MIN_DIGITS_LSO 0x00010000
|
||||
|
@ -378,10 +379,11 @@ literal_pattern_name *LPRequests::compose(literal_pattern_name *A, literal_patte
|
|||
@d MAX_DIGITS_MASK_LSO 0x7f000000
|
||||
|
||||
=
|
||||
parse_node *LPRequests::mark(parse_node *A, int N, int M) {
|
||||
parse_node *LPRequests::mark(parse_node *A, int N, int MI, int MA) {
|
||||
if (A) {
|
||||
Annotations::write_int(A, lpe_options_ANNOT, N);
|
||||
if (N & MAXIMUM_LSO) Annotations::write_int(A, lpe_max_ANNOT, M);
|
||||
if (N & MINIMUM_LSO) Annotations::write_int(A, lpe_min_ANNOT, MI);
|
||||
if (N & MAXIMUM_LSO) Annotations::write_int(A, lpe_max_ANNOT, MA);
|
||||
}
|
||||
return A;
|
||||
}
|
||||
|
|
|
@ -416,6 +416,7 @@ void CoreSyntax::grant_L2_permissions(void) {
|
|||
@e evaluation_ANNOT /* |parse_node|: result of evaluating the text */
|
||||
@e explicit_gender_marker_ANNOT /* |int|: used by PROPER NOUN nodes for evident genders */
|
||||
@e lpe_options_ANNOT /* |int|: options set for a literal pattern part */
|
||||
@e lpe_min_ANNOT /* |int|: value offset for a literal pattern part */
|
||||
@e lpe_max_ANNOT /* |int|: maximum value for a literal pattern part */
|
||||
@e multiplicity_ANNOT /* |int|: e.g., 5 for "five gold rings" */
|
||||
@e new_relation_here_ANNOT /* |binary_predicate|: new relation as subject of "relates" sentence */
|
||||
|
@ -466,6 +467,8 @@ void CoreSyntax::declare_L3_annotations(void) {
|
|||
lpe_options_ANNOT, CoreSyntax::write_lpe_options_ANNOT);
|
||||
Annotations::declare_type(
|
||||
lpe_max_ANNOT, CoreSyntax::write_lpe_max_ANNOT);
|
||||
Annotations::declare_type(
|
||||
lpe_min_ANNOT, CoreSyntax::write_lpe_min_ANNOT);
|
||||
Annotations::declare_type(
|
||||
multiplicity_ANNOT, CoreSyntax::write_multiplicity_ANNOT);
|
||||
Annotations::declare_type(
|
||||
|
@ -521,6 +524,9 @@ void CoreSyntax::write_lpe_options_ANNOT(text_stream *OUT, parse_node *p) {
|
|||
void CoreSyntax::write_lpe_max_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
WRITE(" {lpe max: %d}", Annotations::read_int(p, lpe_max_ANNOT));
|
||||
}
|
||||
void CoreSyntax::write_lpe_min_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
WRITE(" {lpe offset: %d}", Annotations::read_int(p, lpe_min_ANNOT));
|
||||
}
|
||||
void CoreSyntax::write_multiplicity_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
if (Annotations::read_int(p, multiplicity_ANNOT))
|
||||
WRITE(" {multiplicity %d}", Annotations::read_int(p, multiplicity_ANNOT));
|
||||
|
@ -597,6 +603,7 @@ void CoreSyntax::grant_L3_permissions(void) {
|
|||
Annotations::allow(PROPER_NOUN_NT, defn_language_ANNOT);
|
||||
Annotations::allow(PROPER_NOUN_NT, lpe_options_ANNOT);
|
||||
Annotations::allow(PROPER_NOUN_NT, lpe_max_ANNOT);
|
||||
Annotations::allow(PROPER_NOUN_NT, lpe_min_ANNOT);
|
||||
Annotations::allow(PROPER_NOUN_NT, multiplicity_ANNOT);
|
||||
Annotations::allow(UNPARSED_NOUN_NT, new_relation_here_ANNOT);
|
||||
Annotations::allow(PROPER_NOUN_NT, new_relation_here_ANNOT);
|
||||
|
|
|
@ -151,11 +151,7 @@ void RTLiteralPatterns::compilation_agent(compilation_subtask *t) {
|
|||
EmitCode::up();
|
||||
EmitCode::inv(EQ_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::inv(DIVIDE_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::val_symbol(K_value, value_s);
|
||||
EmitCode::val_number((inter_ti) (lpe->element_multiplier));
|
||||
EmitCode::up();
|
||||
@<Evaluate LPE value to be printed@>;
|
||||
EmitCode::val_number(0);
|
||||
EmitCode::up();
|
||||
EmitCode::up();
|
||||
|
@ -175,11 +171,7 @@ void RTLiteralPatterns::compilation_agent(compilation_subtask *t) {
|
|||
EmitCode::inv(PRINTNUMBER_BIP);
|
||||
}
|
||||
EmitCode::down();
|
||||
EmitCode::inv(DIVIDE_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::val_symbol(K_value, value_s);
|
||||
EmitCode::val_number((inter_ti) (lpe->element_multiplier));
|
||||
EmitCode::up();
|
||||
@<Evaluate LPE value to be printed@>;
|
||||
if (lpe->number_base != 10)
|
||||
EmitCode::val_number((inter_ti) (lpe->number_base));
|
||||
EmitCode::up();
|
||||
|
@ -213,15 +205,7 @@ void RTLiteralPatterns::compilation_agent(compilation_subtask *t) {
|
|||
EmitCode::inv(PRINTNUMBER_BIP);
|
||||
}
|
||||
EmitCode::down();
|
||||
EmitCode::inv(MODULO_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::inv(DIVIDE_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::val_symbol(K_value, value_s);
|
||||
EmitCode::val_number((inter_ti) (lpe->element_multiplier));
|
||||
EmitCode::up();
|
||||
EmitCode::val_number((inter_ti) (lpe->element_range));
|
||||
EmitCode::up();
|
||||
@<Evaluate LPE value to be printed@>;
|
||||
if (lpe->number_base != 10)
|
||||
EmitCode::val_number((inter_ti) (lpe->number_base));
|
||||
EmitCode::up();
|
||||
|
@ -231,23 +215,23 @@ void RTLiteralPatterns::compilation_agent(compilation_subtask *t) {
|
|||
|
||||
@<Print leading zeros@> =
|
||||
if (lpe->print_with_leading_zeros) {
|
||||
int max_printable = lpe->element_range + lpe->element_offset;
|
||||
if (lpe->max_digits < 1000000) {
|
||||
int b = 1;
|
||||
for (int d = 1; d <= lpe->max_digits; d++)
|
||||
b = b * lpe->number_base;
|
||||
max_printable = b - 1;
|
||||
}
|
||||
int pow = 1;
|
||||
while (lpe->element_range > pow) pow = pow * lpe->number_base;
|
||||
while (max_printable > pow)
|
||||
pow = pow * lpe->number_base;
|
||||
for (; pow>1; pow = pow/lpe->number_base)
|
||||
if (lpe->element_range > pow) {
|
||||
if (max_printable > pow) {
|
||||
EmitCode::inv(IF_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::inv(LT_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::inv(MODULO_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::inv(DIVIDE_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::val_symbol(K_value, value_s);
|
||||
EmitCode::val_number((inter_ti) (lpe->element_multiplier));
|
||||
EmitCode::up();
|
||||
EmitCode::val_number((inter_ti) (lpe->element_range));
|
||||
EmitCode::up();
|
||||
@<Evaluate LPE value to be printed@>;
|
||||
EmitCode::val_number((inter_ti) (pow));
|
||||
EmitCode::up();
|
||||
EmitCode::code();
|
||||
|
@ -261,18 +245,38 @@ void RTLiteralPatterns::compilation_agent(compilation_subtask *t) {
|
|||
}
|
||||
}
|
||||
|
||||
@<Evaluate LPE value to be printed@> =
|
||||
if (lpe->element_offset != 0) {
|
||||
EmitCode::inv(PLUS_BIP);
|
||||
EmitCode::down();
|
||||
}
|
||||
if (lpe->element_range >= 0) {
|
||||
EmitCode::inv(MODULO_BIP);
|
||||
EmitCode::down();
|
||||
}
|
||||
EmitCode::inv(DIVIDE_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::val_symbol(K_value, value_s);
|
||||
EmitCode::val_number((inter_ti) (lpe->element_multiplier));
|
||||
EmitCode::up();
|
||||
if (lpe->element_range >= 0) {
|
||||
EmitCode::val_number((inter_ti) (lpe->element_range));
|
||||
EmitCode::up();
|
||||
}
|
||||
if (lpe->element_offset != 0) {
|
||||
EmitCode::val_number((inter_ti) (lpe->element_offset));
|
||||
EmitCode::up();
|
||||
}
|
||||
|
||||
@<Truncate the printed form here if subsequent numerical parts are zero@> =
|
||||
if (oc == ec) {
|
||||
literal_pattern_element *lpe = &(lp->lp_elements[ec]);
|
||||
if (ec == 0) {
|
||||
EmitCode::inv(IF_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::inv(EQ_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::inv(DIVIDE_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::val_symbol(K_value, value_s);
|
||||
EmitCode::val_number((inter_ti) (lp->lp_elements[ec].element_multiplier));
|
||||
EmitCode::up();
|
||||
@<Evaluate LPE value to be printed@>;
|
||||
EmitCode::val_number(0);
|
||||
EmitCode::up();
|
||||
EmitCode::code();
|
||||
|
@ -285,15 +289,7 @@ void RTLiteralPatterns::compilation_agent(compilation_subtask *t) {
|
|||
EmitCode::down();
|
||||
EmitCode::inv(EQ_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::inv(MODULO_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::inv(DIVIDE_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::val_symbol(K_value, value_s);
|
||||
EmitCode::val_number((inter_ti) (lp->lp_elements[ec].element_multiplier));
|
||||
EmitCode::up();
|
||||
EmitCode::val_number((inter_ti) (lp->lp_elements[ec].element_range));
|
||||
EmitCode::up();
|
||||
@<Evaluate LPE value to be printed@>;
|
||||
EmitCode::val_number(0);
|
||||
EmitCode::up();
|
||||
EmitCode::code();
|
||||
|
@ -1168,13 +1164,42 @@ sets the |parsed_number| global to the value matched.
|
|||
EmitCode::up();
|
||||
}
|
||||
|
||||
if (lpe->element_index > 0) {
|
||||
if (lpe->element_offset != 0) {
|
||||
EmitCode::inv(STORE_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::ref_symbol(K_value, gprk.tot_s);
|
||||
EmitCode::inv(MINUS_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::val_symbol(K_value, gprk.tot_s);
|
||||
EmitCode::val_number((inter_ti) lpe->element_offset);
|
||||
EmitCode::up();
|
||||
EmitCode::up();
|
||||
}
|
||||
|
||||
if (lpe->element_range > 0) {
|
||||
inter_ti min_val = 0;
|
||||
inter_ti max_val = (inter_ti) (lpe->element_range);
|
||||
EmitCode::inv(IF_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::inv(LT_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::val_symbol(K_value, gprk.tot_s);
|
||||
EmitCode::val_number(min_val);
|
||||
EmitCode::up();
|
||||
EmitCode::code();
|
||||
EmitCode::down();
|
||||
EmitCode::inv(JUMP_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::lab(failed_label);
|
||||
EmitCode::up();
|
||||
EmitCode::up();
|
||||
EmitCode::up();
|
||||
EmitCode::inv(IF_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::inv(GE_BIP);
|
||||
EmitCode::down();
|
||||
EmitCode::val_symbol(K_value, gprk.tot_s);
|
||||
EmitCode::val_number((inter_ti) lpe->element_range);
|
||||
EmitCode::val_number(max_val);
|
||||
EmitCode::up();
|
||||
EmitCode::code();
|
||||
EmitCode::down();
|
||||
|
|
|
@ -112,6 +112,7 @@ The rightmost element $e_{n-1}$ is the least significant numerically.
|
|||
=
|
||||
typedef struct literal_pattern_element {
|
||||
int element_index; /* the value $i$ placing this within its LP, where $0\leq i<n$ */
|
||||
int element_offset; /* amount by which outward values differ from stored ones */
|
||||
int element_range; /* the value $r_i$ for this LP */
|
||||
int element_multiplier; /* the value $m_i$ for this LP */
|
||||
|
||||
|
@ -189,6 +190,7 @@ literal_pattern_element *parsing_new_element = NULL;
|
|||
literal_pattern_element LiteralPatterns::lpe_new(int i, int r, int sgn) {
|
||||
literal_pattern_element lpe;
|
||||
if (i == 0) lpe.element_range = -1; else lpe.element_range = r;
|
||||
lpe.element_offset = 0;
|
||||
lpe.element_multiplier = 1;
|
||||
lpe.element_index = i;
|
||||
lpe.element_name = EMPTY_WORDING;
|
||||
|
@ -508,8 +510,11 @@ on unusual platforms.
|
|||
while ((point_at > 0) && (point_at < digits_found)) {
|
||||
matched_scaledown *= lpe->number_base; point_at++;
|
||||
}
|
||||
if ((tot >= lpe->element_range) && (lpe->element_index > 0)) element_overflow_at = lpe;
|
||||
tot = (lpe->element_multiplier)*tot;
|
||||
if (lpe->element_range != -1) { /* i.e., if the range of this LPE is finite */
|
||||
if ((tot < lpe->element_offset) || (tot >= lpe->element_offset + lpe->element_range))
|
||||
element_overflow_at = lpe;
|
||||
}
|
||||
tot = (lpe->element_multiplier)*(tot - lpe->element_offset);
|
||||
if (tot > max_16_bit) overflow_16_bit_flag = TRUE;
|
||||
if (tot > max_32_bit) overflow_32_bit_flag = TRUE;
|
||||
tot = matched_number + tot;
|
||||
|
@ -617,29 +622,31 @@ which is annoying. So we have a mechanism to suppress duplicates:
|
|||
@ The more specific problem of an internal overflow:
|
||||
|
||||
@<Report a problem because one element in the notation overflows@> =
|
||||
int max = element_overflow_at->element_range - 1;
|
||||
int min_val = element_overflow_at->element_offset;
|
||||
int max_val = element_overflow_at->element_offset + element_overflow_at->element_range - 1;
|
||||
Problems::quote_source(1, current_sentence);
|
||||
Problems::quote_wording(2, W);
|
||||
Problems::quote_wording(3, lp->prototype_text);
|
||||
Problems::quote_number(4, &max);
|
||||
Problems::quote_number(4, &min_val);
|
||||
Problems::quote_number(5, &max_val);
|
||||
switch (element_overflow_at->element_index) {
|
||||
case 0: Problems::quote_text(5, "first"); break;
|
||||
case 1: Problems::quote_text(5, "second"); break;
|
||||
case 2: Problems::quote_text(5, "third"); break;
|
||||
case 3: Problems::quote_text(5, "fourth"); break;
|
||||
case 4: Problems::quote_text(5, "fifth"); break;
|
||||
case 5: Problems::quote_text(5, "sixth"); break;
|
||||
case 6: Problems::quote_text(5, "seventh"); break;
|
||||
case 7: Problems::quote_text(5, "eighth"); break;
|
||||
case 8: Problems::quote_text(5, "ninth"); break;
|
||||
case 9: Problems::quote_text(5, "tenth"); break;
|
||||
default: Problems::quote_text(5, "eventual"); break;
|
||||
case 0: Problems::quote_text(6, "first"); break;
|
||||
case 1: Problems::quote_text(6, "second"); break;
|
||||
case 2: Problems::quote_text(6, "third"); break;
|
||||
case 3: Problems::quote_text(6, "fourth"); break;
|
||||
case 4: Problems::quote_text(6, "fifth"); break;
|
||||
case 5: Problems::quote_text(6, "sixth"); break;
|
||||
case 6: Problems::quote_text(6, "seventh"); break;
|
||||
case 7: Problems::quote_text(6, "eighth"); break;
|
||||
case 8: Problems::quote_text(6, "ninth"); break;
|
||||
case 9: Problems::quote_text(6, "tenth"); break;
|
||||
default: Problems::quote_text(6, "eventual"); break;
|
||||
}
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_ElementOverflow));
|
||||
Problems::issue_problem_segment(
|
||||
"In the sentence %1, you use the notation '%2' to write a constant value. "
|
||||
"But the notation was specified as '%3', which means that the %5 numerical "
|
||||
"part should range between 0 and %4.");
|
||||
"But the notation was specified as '%3', which means that the %6 numerical "
|
||||
"part should range between %4 and %5.");
|
||||
Problems::issue_problem_end();
|
||||
return NULL;
|
||||
|
||||
|
@ -893,7 +900,8 @@ note that the following uses the raw text of the word.
|
|||
literal_pattern_element *lpe = &(lp->lp_elements[ec]);
|
||||
int m = lpe->element_range;
|
||||
LiteralPatterns::write_val(OUT, m,
|
||||
(v/(lpe->element_multiplier)) % m, lpe->number_base, lpe->print_with_leading_zeros);
|
||||
(v/(lpe->element_multiplier)) % m + lpe->element_offset,
|
||||
lpe->number_base, lpe->print_with_leading_zeros);
|
||||
if (ec == 0) @<Index the fractional part of the value@>;
|
||||
}
|
||||
ec++;
|
||||
|
@ -1145,7 +1153,7 @@ middle of either angle-escapes or the material in between.
|
|||
if (j == 0) {
|
||||
if (i > 0) {
|
||||
lpe_notation_pos to = { Wordings::first_wn(NW)+i-1,
|
||||
Wide::len(Lexer::word_raw_text(Wordings::last_wn(NW)+i-1)) - 1 };
|
||||
Wide::len(Lexer::word_raw_text(Wordings::first_wn(NW)+i-1)) - 1 };
|
||||
@<Compile unescaped notation between from and to@>;
|
||||
}
|
||||
} else {
|
||||
|
@ -1191,6 +1199,7 @@ middle of either angle-escapes or the material in between.
|
|||
material or else names for parts about which nothing else is said.
|
||||
|
||||
@<Act on angle-bracketed escape@> =
|
||||
// LOG("Scan escape <%S>\n", angles);
|
||||
Str::trim_white_space(angles);
|
||||
wording AW = Feeds::feed_text(angles);
|
||||
if (<quoted-text>(AW)) {
|
||||
|
@ -1221,7 +1230,9 @@ word to play with, we optimise by making a word token instead of a run of
|
|||
character ones.
|
||||
|
||||
@<Compile unescaped notation between from and to@> =
|
||||
if ((from.wn < to.wn) || (from.char_pos <= to.char_pos)) {
|
||||
// LOG("Scan word %W, %d to %W, %d\n",
|
||||
// Wordings::one_word(from.wn), from.char_pos, Wordings::one_word(to.wn), to.char_pos);
|
||||
if ((from.wn < to.wn) || ((from.wn == to.wn) && (from.char_pos <= to.char_pos))) {
|
||||
wording NW = Wordings::new(from.wn, to.wn);
|
||||
for (int i=0; i<Wordings::length(NW); i++) {
|
||||
wchar_t *text_of_word = Lexer::word_raw_text(Wordings::first_wn(NW)+i);
|
||||
|
@ -1342,7 +1353,8 @@ this is deferred until all elements exist, at which point we --
|
|||
if (Wordings::empty(lpe->element_name)) {
|
||||
lpe->element_name = Node::get_text(p);
|
||||
} else if (Wordings::match(lpe->element_name, Node::get_text(p)) == FALSE) {
|
||||
LOG("Want %W have %W\n", lpe->element_name, Node::get_text(p));
|
||||
@<Log this literal pattern in full@>;
|
||||
LOG("Here, want %W have %W\n", lpe->element_name, Node::get_text(p));
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(...),
|
||||
"the part names after 'with' do not exactly match those named "
|
||||
"in the specification itself",
|
||||
|
@ -1364,9 +1376,10 @@ this is deferred until all elements exist, at which point we --
|
|||
if (O & MAX_DIGITS_MASK_LSO)
|
||||
lpe->max_digits = ((O & MAX_DIGITS_MASK_LSO) / MAX_DIGITS_LSO);
|
||||
if (O & MAXIMUM_LSO) {
|
||||
lpe->element_range = Annotations::read_int(p, lpe_max_ANNOT) + 1;
|
||||
lpe->element_offset = Annotations::read_int(p, lpe_min_ANNOT);
|
||||
lpe->element_range = Annotations::read_int(p, lpe_max_ANNOT) - lpe->element_offset + 1;
|
||||
if (O & MAX_DIGITS_MASK_LSO) {
|
||||
int n = lpe->element_range - 1;
|
||||
int n = lpe->element_offset + lpe->element_range - 1;
|
||||
for (int i=1; i<=lpe->max_digits; i++) n = n/lpe->number_base;
|
||||
if (n != 0)
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(...),
|
||||
|
@ -1452,7 +1465,8 @@ optional, and it must not be the first.
|
|||
else if ((lpe->min_digits > 1) || (lpe->max_digits < 1000000))
|
||||
LOG("%d to %d digits ", lpe->min_digits, lpe->max_digits);
|
||||
if (lpe->print_with_leading_zeros) LOG("printed with leading zeros ");
|
||||
if (lpe->element_range >= 0) LOG("range 0 to %d ", lpe->element_range);
|
||||
if (lpe->element_range >= 0) LOG("range %d to %d ",
|
||||
lpe->element_offset, lpe->element_offset + lpe->element_range);
|
||||
else LOG("range unlimited ");
|
||||
LOG("(base %d) ", lpe->number_base);
|
||||
LOG("- multiplier %d\n", lpe->element_multiplier);
|
||||
|
@ -1600,13 +1614,18 @@ To define which number is cents part of ( full - price ) : |(- ({full}%100) -)|.
|
|||
|
||||
id = Feeds::begin();
|
||||
TEMPORARY_TEXT(print_rule_buff)
|
||||
TEMPORARY_TEXT(offset_addition)
|
||||
if (lpe->element_offset != 0)
|
||||
WRITE_TO(offset_addition, " + %d", lpe->element_offset);
|
||||
if (i==0)
|
||||
WRITE_TO(print_rule_buff, " (- ({full}/%d) -) ", lpe->element_multiplier);
|
||||
WRITE_TO(print_rule_buff, " (- ({full}/%d%S) -) ",
|
||||
lpe->element_multiplier, offset_addition);
|
||||
else if (lpe->element_multiplier > 1)
|
||||
WRITE_TO(print_rule_buff, " (- (({full}/%d)%%%d) -) ",
|
||||
lpe->element_multiplier, lpe->element_range);
|
||||
WRITE_TO(print_rule_buff, " (- (({full}/%d)%%%d%S) -) ",
|
||||
lpe->element_multiplier, lpe->element_range, offset_addition);
|
||||
else
|
||||
WRITE_TO(print_rule_buff, " (- ({full}%%%d) -) ", lpe->element_range);
|
||||
WRITE_TO(print_rule_buff, " (- ({full}%%%d%S) -) ",
|
||||
lpe->element_range, offset_addition);
|
||||
Feeds::feed_text(print_rule_buff);
|
||||
XW = Feeds::end(id);
|
||||
if (Wordings::phrasual_length(XW) >= MAX_WORDS_PER_PHRASE + 5)
|
||||
|
@ -1614,6 +1633,7 @@ To define which number is cents part of ( full - price ) : |(- ({full}%100) -)|.
|
|||
else
|
||||
Sentences::make_node(Task::syntax_tree(), XW, '.');
|
||||
DISCARD_TEXT(print_rule_buff)
|
||||
DISCARD_TEXT(offset_addition)
|
||||
}
|
||||
|
||||
@ And similarly, a packing phrase to calculate the value given its elements.
|
||||
|
@ -1651,10 +1671,14 @@ To decide which price is price with dollars part ( part0 - a number ) cents part
|
|||
WRITE_TO(print_rule_buff, " (- (");
|
||||
for (int i=0; i<lp->no_lp_elements; i++) {
|
||||
literal_pattern_element *lpe = &(lp->lp_elements[i]);
|
||||
if (lpe->element_offset != 0)
|
||||
WRITE_TO(print_rule_buff, "(");
|
||||
if (i>0) WRITE_TO(print_rule_buff, "+");
|
||||
if (lpe->element_multiplier != 1)
|
||||
WRITE_TO(print_rule_buff, "%d*", lpe->element_multiplier);
|
||||
WRITE_TO(print_rule_buff, "{part%d}", i);
|
||||
if (lpe->element_offset != 0)
|
||||
WRITE_TO(print_rule_buff, " - %d)", lpe->element_offset);
|
||||
}
|
||||
WRITE_TO(print_rule_buff, ") -) ");
|
||||
Feeds::feed_text(print_rule_buff);
|
||||
|
|
Loading…
Reference in a new issue