mirror of
https://github.com/ganelson/inform.git
synced 2024-07-02 23:14:57 +03:00
Reimplemented CG tokens
This commit is contained in:
parent
52eebfcb9b
commit
8daea041e6
|
@ -320,6 +320,7 @@ We begin with <a href="index.html" class="internal">core</a> itself.
|
|||
<span class="definition-keyword">enum</span> <span class="constant-syntax">explicit_action_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">found_in_inference_data_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">cg_line_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">cg_token_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">command_grammar_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">loop_over_scope_CLASS</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">map_data_CLASS</span>
|
||||
|
@ -352,6 +353,7 @@ We begin with <a href="index.html" class="internal">core</a> itself.
|
|||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">direction_inference_data</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">found_in_inference_data</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">cg_line</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">cg_token</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">command_grammar</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">loop_over_scope</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="identifier-syntax">map_data</span><span class="plain-syntax">)</span>
|
||||
|
|
|
@ -502,8 +502,6 @@ are made in <a href="../building-module/1-bm.html" class="internal">Building Mod
|
|||
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">creation_proposition</span><span class="plain-syntax">, </span><span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">defn_language</span><span class="plain-syntax">, </span><span class="identifier-syntax">inform_language</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">evaluation</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">grammar_token_relation</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">grammar_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">new_relation_here</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">predicate</span><span class="plain-syntax">, </span><span class="identifier-syntax">unary_predicate</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">quant</span><span class="plain-syntax">, </span><span class="identifier-syntax">quantifier</span><span class="plain-syntax">)</span>
|
||||
|
@ -515,8 +513,6 @@ are made in <a href="../building-module/1-bm.html" class="internal">Building Mod
|
|||
<span class="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">creation_proposition</span><span class="plain-syntax">, </span><span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">defn_language</span><span class="plain-syntax">, </span><span class="identifier-syntax">inform_language</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">evaluation</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">grammar_token_relation</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">grammar_value</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">new_relation_here</span><span class="plain-syntax">, </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">predicate</span><span class="plain-syntax">, </span><span class="identifier-syntax">unary_predicate</span><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">quant</span><span class="plain-syntax">, </span><span class="identifier-syntax">quantifier</span><span class="plain-syntax">)</span>
|
||||
|
@ -965,7 +961,6 @@ are made in <a href="../building-module/1-bm.html" class="internal">Building Mod
|
|||
<span class="definition-keyword">enum</span> <span class="constant-syntax">converted_SN_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">: marking descriptions</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">explicit_iname_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">inter_name</span></span><span class="comment-syntax">: is this value explicitly an iname?</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">explicit_literal_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">: my value is an explicit integer or text</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">grammar_token_code_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> int: used to identify grammar tokens</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">is_phrase_option_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">: this unparsed text is a phrase option</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">kind_of_value_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">kind</span></span><span class="comment-syntax">: for specification nodes</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">nothing_object_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">: this represents </span><span class="extract"><span class="extract-syntax">nothing</span></span><span class="comment-syntax"> at run-time</span>
|
||||
|
@ -1079,8 +1074,6 @@ are made in <a href="../building-module/1-bm.html" class="internal">Building Mod
|
|||
<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">explicit_literal_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP22" class="function-link"><span class="function-syntax">CoreSyntax::write_explicit_literal_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">grammar_token_code_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP22" class="function-link"><span class="function-syntax">CoreSyntax::write_grammar_token_code_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">is_phrase_option_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP22" class="function-link"><span class="function-syntax">CoreSyntax::write_is_phrase_option_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">kind_of_value_ANNOT</span><span class="plain-syntax">, </span><a href="1-inaa.html#SP22" class="function-link"><span class="function-syntax">CoreSyntax::write_kind_of_value_ANNOT</span></a><span class="plain-syntax">);</span>
|
||||
|
@ -1110,7 +1103,7 @@ are made in <a href="../building-module/1-bm.html" class="internal">Building Mod
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">act</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {activity: %W}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">act</span><span class="plain-syntax">-></span><span class="identifier-syntax">name</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_constant_binary_predicate_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">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_grammar_token_relation</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">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_constant_binary_predicate</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">bp</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {binary_predicate: %S}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-></span><span class="identifier-syntax">debugging_log_name</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_constant_constant_phrase_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>
|
||||
|
@ -1221,26 +1214,6 @@ are made in <a href="../building-module/1-bm.html" class="internal">Building Mod
|
|||
<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">explicit_literal_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">" {explicit literal}"</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_grammar_token_code_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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gtc</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">grammar_token_code_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</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</span><span class="plain-syntax">(</span><span class="string-syntax">" {grammar_token_code: "</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NAMED_TOKEN_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"named token"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">RELATED_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"related"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">STUFF_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"stuff"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">ANY_STUFF_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"any stuff"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">ANY_THINGS_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"any things"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NOUN_TOKEN_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"noun"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">MULTI_TOKEN_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"multi"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">MULTIINSIDE_TOKEN_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"multiinside"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">MULTIHELD_TOKEN_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"multiheld"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">HELD_TOKEN_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"held"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CREATURE_TOKEN_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"creature"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TOPIC_TOKEN_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"topic"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">MULTIEXCEPT_TOKEN_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"multiexcept"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"}"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CoreSyntax::write_is_phrase_option_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">is_phrase_option_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">" {is phrase option}"</span><span class="plain-syntax">);</span>
|
||||
|
@ -1319,7 +1292,6 @@ are made in <a href="../building-module/1-bm.html" class="internal">Building Mod
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_use_option_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_verb_form_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">explicit_literal_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_token_code_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">kind_of_value_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">nothing_object_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="constant-syntax">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">property_name_used_as_noun_ANNOT</span><span class="plain-syntax">);</span>
|
||||
|
|
|
@ -85,7 +85,8 @@ function togglePopup(material_id) {
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_pattern</span><span class="plain-syntax"> *, </span><a href="4-ap2.html#SP5" class="function-link"><span class="function-syntax">ActionPatterns::log</span></a><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *, </span><a href="5-cg.html#SP4" class="function-link"><span class="function-syntax">CommandGrammars::log</span></a><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *, </span><a href="5-cgl.html#SP7" class="function-link"><span class="function-syntax">UnderstandLines::log</span></a><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *, </span><a href="5-cgl.html#SP7" class="function-link"><span class="function-syntax">CGLines::log</span></a><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *, </span><a href="5-cgt.html#SP2" class="function-link"><span class="function-syntax">CGTokens::log</span></a><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_name_list</span><span class="plain-syntax"> *, </span><a href="4-anl.html#SP26" class="function-link"><span class="function-syntax">ActionNameLists::log</span></a><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *, </span><a href="4-anl.html#SP26" class="function-link"><span class="function-syntax">ActionNameLists::log_entry</span></a><span class="plain-syntax">)</span>
|
||||
<span class="identifier-syntax">COMPILE_WRITER</span><span class="plain-syntax">(</span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *, </span><a href="4-ann.html#SP5" class="function-link"><span class="function-syntax">ActionNameNames::log</span></a><span class="plain-syntax">)</span>
|
||||
|
@ -132,10 +133,10 @@ function togglePopup(material_id) {
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'A'</span><span class="plain-syntax">, </span><a href="4-ap2.html#SP5" class="function-link"><span class="function-syntax">ActionPatterns::log</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'c'</span><span class="plain-syntax">, </span><a href="5-cgt.html#SP2" class="function-link"><span class="function-syntax">CGTokens::log</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'G'</span><span class="plain-syntax">, </span><a href="5-cg.html#SP4" class="function-link"><span class="function-syntax">CommandGrammars::log</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'g'</span><span class="plain-syntax">, </span><a href="5-cgl.html#SP7" class="function-link"><span class="function-syntax">UnderstandLines::log</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'g'</span><span class="plain-syntax">, </span><a href="5-cgl.html#SP7" class="function-link"><span class="function-syntax">CGLines::log</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'L'</span><span class="plain-syntax">, </span><a href="4-anl.html#SP26" class="function-link"><span class="function-syntax">ActionNameLists::log</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'8'</span><span class="plain-syntax">, </span><a href="4-anl.html#SP26" class="function-link"><span class="function-syntax">ActionNameLists::log_entry</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">REGISTER_WRITER</span><span class="plain-syntax">(</span><span class="character-syntax">'l'</span><span class="plain-syntax">, </span><a href="4-ann.html#SP5" class="function-link"><span class="function-syntax">ActionNameNames::log</span></a><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="1-im.html#SP2">§2</a>.</li></ul>
|
||||
|
|
|
@ -243,7 +243,7 @@ scenes — to express which, the <a href="3-scn.html#SP10" class="internal">
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Instances::get_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">sc</span><span class="plain-syntax">-></span><span class="element-syntax">as_instance</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure scene is private to this section.</li><li>The structure scene_end is private to this section.</li><li>The structure scene_connector is accessed in 2/ri, 3/tm, 3/ts, 4/ap, 4/av, 4/anl, 4/apc, 5/us, 5/cgl and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure scene is private to this section.</li><li>The structure scene_end is private to this section.</li><li>The structure scene_connector is accessed in 2/ri, 3/tm, 3/ts, 4/ap, 4/av, 4/anl, 4/apc, 5/us and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </b>A plugin called <span class="extract"><span class="extract-syntax">xyzzy</span></span> generally has a hunk of subject data called <span class="extract"><span class="extract-syntax">xyzzy_data</span></span>,
|
||||
so we would normally have a structure called <span class="extract"><span class="extract-syntax">scenes_data</span></span>, but in fact that
|
||||
structure is just going to be <a href="3-scn.html#SP10" class="internal">scene</a>. So:
|
||||
|
|
|
@ -695,7 +695,7 @@ is no best action. (For example, in "throwing or removing something".)
|
|||
<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">ActionNameLists::log_entry</span><button class="popup" onclick="togglePopup('usagePopup37')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup37">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::log_entry</span></span>:<br/>IF Module - <a href="1-im.html#SP2">§2</a>, <a href="1-im.html#SP2_3">§2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ActionNameLists::log_entry</span><button class="popup" onclick="togglePopup('usagePopup37')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup37">Usage of <span class="code-font"><span class="function-syntax">ActionNameLists::log_entry</span></span>:<br/>IF Module - <a href="1-im.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">anl_entry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">entry</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">entry</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"<null-entry>"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
|
|
|
@ -153,7 +153,7 @@ action variable clauses.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">ap_clause</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure ap_clause is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/ap2, 4/anl, 4/pc, 4/ea, 4/gng, 5/us, 5/cgl and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure ap_clause is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/ap2, 4/anl, 4/pc, 4/ea, 4/gng, 5/us and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>This loop conveniently runs through the clauses for <span class="extract"><span class="extract-syntax">ap</span></span>:
|
||||
</p>
|
||||
|
||||
|
|
|
@ -326,7 +326,7 @@ dropping action":
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CommandGrammars::remove_action</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">CommandGrammars::remove_action</span></span>:<br/>Actions - <a href="4-act.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">an</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">cg_is</span><span class="plain-syntax"> == </span><span class="constant-syntax">CG_IS_COMMAND</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP6" class="function-link"><span class="function-syntax">UnderstandLines::list_remove</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP6" class="function-link"><span class="function-syntax">CGLines::list_remove</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="identifier-syntax">an</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. The CG_IS_TOKEN form. </b>These are like text substitutions in reverse. For instance, we could define
|
||||
|
@ -348,7 +348,7 @@ token called "[suitable colour]".
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">cg</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="function-syntax">CommandGrammars::named_token_by_name</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">CommandGrammars::named_token_by_name</span></span>:<br/><a href="5-cg.html#SP12">§12</a><br/>Grammar Tokens - <a href="5-gt.html#SP9">§9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="function-syntax">CommandGrammars::named_token_by_name</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">CommandGrammars::named_token_by_name</span></span>:<br/><a href="5-cg.html#SP12">§12</a><br/>Command Grammar Tokens - <a href="5-cgt.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">cg_is</span><span class="plain-syntax"> == </span><span class="constant-syntax">CG_IS_TOKEN</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Wordings::match</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">token_name</span><span class="plain-syntax">)))</span>
|
||||
|
@ -515,7 +515,7 @@ are not possible, but see <a href="5-cg.html#SP10" class="internal">CommandGramm
|
|||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CommandGrammars::add_line</span><button class="popup" onclick="togglePopup('usagePopup18')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup18">Usage of <span class="code-font"><span class="function-syntax">CommandGrammars::add_line</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19">§19</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR</span><span class="plain-syntax">, </span><span class="string-syntax">"$G + line: $g\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">cg_is</span><span class="plain-syntax"> == </span><span class="constant-syntax">CG_IS_COMMAND</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><a href="5-cgl.html#SP4" class="function-link"><span class="function-syntax">UnderstandLines::list_length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">) >= </span><span class="constant-syntax">MAX_LINES_PER_GRAMMAR</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> (</span><a href="5-cgl.html#SP4" class="function-link"><span class="function-syntax">CGLines::list_length</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">) >= </span><span class="constant-syntax">MAX_LINES_PER_GRAMMAR</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="identifier-syntax">PM_TooManyGrammarLines</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"this command verb now has too many Understand possibilities"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"that is, there are too many 'Understand \"whatever ...\" as ...' "</span>
|
||||
|
@ -524,7 +524,7 @@ are not possible, but see <a href="5-cg.html#SP10" class="internal">CommandGramm
|
|||
<span class="plain-syntax"> </span><span class="string-syntax">"together, perhaps by using slashes to combine alternative "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"wordings, or by defining new grammar tokens [in square brackets]."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP5" class="function-link"><span class="function-syntax">UnderstandLines::list_add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP5" class="function-link"><span class="function-syntax">CGLines::list_add</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -553,7 +553,7 @@ the buck down to <a href="5-cgl.html" class="internal">Command Grammar Lines</a>
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">slashed</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">first_line</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR_CONSTRUCTION</span><span class="plain-syntax">, </span><span class="string-syntax">"Slashing $G\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP15" class="function-link"><span class="function-syntax">UnderstandLines::slash</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP15" class="function-link"><span class="function-syntax">CGLines::slash</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">slashed</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Log::new_stage</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"Determining command grammar"</span><span class="plain-syntax">);</span>
|
||||
|
@ -575,7 +575,7 @@ recurses back here.
|
|||
</p>
|
||||
|
||||
<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">CommandGrammars::determine</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">CommandGrammars::determine</span></span>:<br/><a href="5-cg.html#SP20">§20</a><br/>Grammar Tokens - <a href="5-gt.html#SP10_1">§10.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">depth</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">CommandGrammars::determine</span><button class="popup" onclick="togglePopup('usagePopup20')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup20">Usage of <span class="code-font"><span class="function-syntax">CommandGrammars::determine</span></span>:<br/><a href="5-cg.html#SP20">§20</a><br/>Command Grammar Tokens - <a href="5-cgt.html#SP11_1">§11.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">depth</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">where_cg_created</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cg.html#SP21_1" class="named-paragraph-link"><span class="named-paragraph">If this CG produces a value we have determined already, return that</span><span class="named-paragraph-number">21.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cg.html#SP21_2" class="named-paragraph-link"><span class="named-paragraph">If recursion went impossibly deep, the CG grammar must be ill-founded</span><span class="named-paragraph-number">21.2</span></a></span><span class="plain-syntax">;</span>
|
||||
|
@ -583,7 +583,7 @@ recurses back here.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR_CONSTRUCTION</span><span class="plain-syntax">, </span><span class="string-syntax">"Determining $G\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_INDENT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_UNSORTED_CG_LINES</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP16" class="function-link"><span class="function-syntax">UnderstandLines::cgl_determine</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="identifier-syntax">depth</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP16" class="function-link"><span class="function-syntax">CGLines::cgl_determine</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="identifier-syntax">depth</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_OUTDENT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec_union</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cg.html#SP21_3" class="named-paragraph-link"><span class="named-paragraph">Take the union of the single-term results of each line</span><span class="named-paragraph-number">21.3</span></a></span><span class="plain-syntax">;</span>
|
||||
|
@ -699,11 +699,11 @@ sort once, so:
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CommandGrammars::sort_command_grammar</span><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">sorted_first_line</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">sorted_first_line</span><span class="plain-syntax"> = </span><a href="5-cgl.html#SP17" class="function-link"><span class="function-syntax">UnderstandLines::list_sort</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">sorted_first_line</span><span class="plain-syntax"> = </span><a href="5-cgl.html#SP17" class="function-link"><span class="function-syntax">CGLines::list_sort</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-us.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-pnaa.html">pnaa</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresscurrent">cg</li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-gt.html">gt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-cgl.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-us.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresscurrent">cg</li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-cgt.html">cgt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-cgl.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -121,7 +121,7 @@ removing it from action. That's a feature only seen in lines for
|
|||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">where_grammar_specified</span><span class="plain-syntax">; </span><span class="comment-syntax"> where found in source</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">original_text</span><span class="plain-syntax">; </span><span class="comment-syntax"> the word number of the double-quoted grammar text...</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">; </span><span class="comment-syntax"> ...which is parsed into this list of tokens</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">; </span><span class="comment-syntax"> ...which is parsed into this list of tokens</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">lexeme_count</span><span class="plain-syntax">; </span><span class="comment-syntax"> number of lexemes, or </span><span class="extract"><span class="extract-syntax">-1</span></span><span class="comment-syntax"> if not yet counted</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">determination_type</span><span class="plain-syntax"> </span><span class="identifier-syntax">cgl_type</span><span class="plain-syntax">; </span><span class="comment-syntax"> only correct after determination occurs</span>
|
||||
|
@ -144,8 +144,8 @@ removing it from action. That's a feature only seen in lines for
|
|||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="function-syntax">UnderstandLines::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">UnderstandLines::new</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19_10">§19.10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ac</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">token_list</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">reversed</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pluralised</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="function-syntax">CGLines::new</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">CGLines::new</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19_10">§19.10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ac</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">token_list</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">reversed</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pluralised</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">token_list</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"no token list for CGL"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax">);</span>
|
||||
|
@ -176,7 +176,7 @@ removing it from action. That's a feature only seen in lines for
|
|||
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>§2.1. </b>A command grammar has a list of CGLs. But in fact it has two lists, with the
|
||||
same contents, but in different orders. The unsorted list holds them in order
|
||||
of creation; the sorted one in order of matching priority at run-time. This
|
||||
sorting is a big issue: see <a href="5-cgl.html#SP17" class="internal">UnderstandLines::list_sort</a> below.
|
||||
sorting is a big issue: see <a href="5-cgl.html#SP17" class="internal">CGLines::list_sort</a> below.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">LOOP_THROUGH_UNSORTED_CG_LINES</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">)</span>
|
||||
|
@ -195,22 +195,18 @@ sorting is a big issue: see <a href="5-cgl.html#SP17" class="internal">Understan
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">understanding_sort_bonus</span><span class="plain-syntax"> = </span><span class="constant-syntax">UNCALCULATED_BONUS</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgl.html#SP2">§2</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>While we're talking loops... CG lines are lists of CG tokens: "[things inside]",
|
||||
FROM, and "[something]" are all tokens. But Inform does not have a <span class="extract"><span class="extract-syntax">cg_token</span></span>
|
||||
type because these are instead stored as <span class="extract"><span class="extract-syntax">TOKEN_NT</span></span> nodes in the parse tree,
|
||||
and are the children of the <span class="extract"><span class="extract-syntax">tokens</span></span> node belonging to the CG line. The
|
||||
following runs through them:
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>While we're talking loops... CG lines are lists of CG tokens:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">LOOP_THROUGH_CG_TOKENS</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">tokens</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">; </span><span class="identifier-syntax">pn</span><span class="plain-syntax">; </span><span class="identifier-syntax">pn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">)</span>
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="identifier-syntax">LOOP_THROUGH_CG_TOKENS</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</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">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">?(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">tokens</span><span class="plain-syntax">):</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">; </span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>To count how many lines a CG has so far, we use the unsorted list, since we
|
||||
don't know if the sorted one has been made yet:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandLines::list_length</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">UnderstandLines::list_length</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP18">§18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CGLines::list_length</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CGLines::list_length</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP18">§18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</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">c</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">LOOP_THROUGH_UNSORTED_CG_LINES</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">) </span><span class="identifier-syntax">c</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax">;</span>
|
||||
|
@ -221,7 +217,7 @@ don't know if the sorted one has been made yet:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandLines::list_add</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">UnderstandLines::list_add</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP18">§18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_gl</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CGLines::list_add</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">CGLines::list_add</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP18">§18</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">new_gl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">sorted_first_line</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"too late to add lines to CG"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">new_gl</span><span class="plain-syntax">-></span><span class="element-syntax">next_line</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">first_line</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
|
@ -237,7 +233,7 @@ don't know if the sorted one has been made yet:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandLines::list_remove</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">UnderstandLines::list_remove</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">find</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CGLines::list_remove</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">CGLines::list_remove</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">action_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">find</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">sorted_first_line</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"too late to remove lines from CG"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prev</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, *</span><span class="identifier-syntax">posn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="element-syntax">first_line</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">posn</span><span class="plain-syntax">) {</span>
|
||||
|
@ -257,8 +253,8 @@ log just enough to identify which one it is:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandLines::log</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">UnderstandLines::log</span></span>:<br/>IF Module - <a href="1-im.html#SP2">§2</a>, <a href="1-im.html#SP2_3">§2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</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">"<CGL%d:%W>"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">tokens</span><span class="plain-syntax">));</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CGLines::log</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">CGLines::log</span></span>:<br/>IF Module - <a href="1-im.html#SP2">§2</a>, <a href="1-im.html#SP2_3">§2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</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">"<CGL%d:%W>"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::one_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">original_text</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Relevant only for CG_IS_VALUE lines. </b>In <span class="extract"><span class="extract-syntax">CG_IS_VALUE</span></span> grammars, the lines are ways to refer to a specific value
|
||||
|
@ -266,7 +262,7 @@ which is not an object, and we record which value the line refers to here.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandLines::set_single_term</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">UnderstandLines::set_single_term</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19_11">§19.11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl_value</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CGLines::set_single_term</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">CGLines::set_single_term</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19_11">§19.11</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl_value</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="5-dt.html#SP4" class="function-link"><span class="function-syntax">DeterminationTypes::set_single_term</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">cgl_type</span><span class="plain-syntax">), </span><span class="identifier-syntax">cgl_value</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -317,10 +313,10 @@ that happens.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandLines::set_understand_when</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">UnderstandLines::set_understand_when</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19_10">§19.10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CGLines::set_understand_when</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">CGLines::set_understand_when</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19_10">§19.10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">understand_when_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">UnderstandLines::get_understand_cond</span><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">CGLines::get_understand_cond</span><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">understand_when_text</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">where_grammar_specified</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"><understand-condition>(cgl-></span><span class="element-syntax">understand_when_text</span><span class="plain-syntax">)) {</span>
|
||||
|
@ -343,7 +339,7 @@ a proposition with a single free variable.)
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandLines::set_understand_prop</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">UnderstandLines::set_understand_prop</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19_10">§19.10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CGLines::set_understand_prop</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">CGLines::set_understand_prop</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19_10">§19.10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">understand_when_prop</span><span class="plain-syntax"> = </span><span class="identifier-syntax">prop</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -351,7 +347,7 @@ a proposition with a single free variable.)
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandLines::conditional</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">UnderstandLines::conditional</span></span>:<br/><a href="5-cgl.html#SP14">§14</a>, <a href="5-cgl.html#SP19_8">§19.8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CGLines::conditional</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">CGLines::conditional</span></span>:<br/><a href="5-cgl.html#SP14">§14</a>, <a href="5-cgl.html#SP19_8">§19.8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="identifier-syntax">understand_when_text</span><span class="plain-syntax">)) || (</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">understand_when_prop</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
@ -362,7 +358,7 @@ but only in order to print nicely worded rejections.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandLines::set_mistake</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">UnderstandLines::set_mistake</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19_10">§19.10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">MW</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CGLines::set_mistake</span><button class="popup" onclick="togglePopup('usagePopup10')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup10">Usage of <span class="code-font"><span class="function-syntax">CGLines::set_mistake</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19_10">§19.10</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">MW</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">mistaken</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">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">mistake_response_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">MW</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">RTCommandGrammarLines::set_mistake</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">MW</span><span class="plain-syntax">);</span>
|
||||
|
@ -377,15 +373,14 @@ detected by the following function:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandLines::cgl_contains_single_unconditional_word</span><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">tokens</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> && (</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> && (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_class_ANNOT</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> && (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_token_literal_ANNOT</span><span class="plain-syntax">))</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CGLines::cgl_contains_single_unconditional_word</span><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">tokens</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> && (</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> && (</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">slash_class</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> && (</span><a href="5-cgt.html#SP5" class="function-link"><span class="function-syntax">CGTokens::is_literal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">tokens</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> && (</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">pluralised</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> && (</span><a href="5-cgl.html#SP12" class="function-link"><span class="function-syntax">UnderstandLines::conditional</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> && (</span><a href="5-cgl.html#SP12" class="function-link"><span class="function-syntax">CGLines::conditional</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><a href="5-cgt.html#SP1" class="function-link"><span class="function-syntax">CGTokens::text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">tokens</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -395,13 +390,12 @@ this purpose, so:
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandLines::slash</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">UnderstandLines::slash</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP20">§20</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CGLines::slash</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">CGLines::slash</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP20">§20</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_UNSORTED_CG_LINES</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">where_grammar_specified</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cgl.html#SP15_1" class="named-paragraph-link"><span class="named-paragraph">Annotate the CG tokens with slash-class and slash-dash-dash</span><span class="named-paragraph-number">15.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cgl.html#SP15_2" class="named-paragraph-link"><span class="named-paragraph">Throw a problem if slash has been used with non-literal tokens</span><span class="named-paragraph-number">15.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cgl.html#SP15_3" class="named-paragraph-link"><span class="named-paragraph">Calculate the lexeme count</span><span class="named-paragraph-number">15.3</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR_CONSTRUCTION</span><span class="plain-syntax">, </span><span class="string-syntax">"Slashed as:\n$T"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">tokens</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
|
@ -417,28 +411,27 @@ markers to indicate disjunction: thus the three tokens "up / all" intend to
|
|||
match just one word of the player's command, which can be either UP or ALL.
|
||||
</p>
|
||||
|
||||
<p class="commentary">Slashing consolidates this line to 7 CG tokens, giving each one a
|
||||
<span class="extract"><span class="extract-syntax">slash_class_ANNOT</span></span> annotation to show which group it belongs to. 0 means
|
||||
that a token is not part of a slashed group; otherwise, the group number
|
||||
should be shared by all the tokens in the group, and should be different
|
||||
from that of other groups. Thus:
|
||||
<p class="commentary">Slashing consolidates this line to 7 CG tokens, giving each one a <span class="extract"><span class="extract-syntax">slash_class</span></span>
|
||||
value to show which group it belongs to. 0 means that a token is not part of a
|
||||
slashed group; otherwise, the group number should be shared by all the tokens
|
||||
in the group, and should be different from that of other groups. Thus:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> take up in all washing laundry linen</span>
|
||||
<span class="plain-syntax">slash_class_ANNOT 0 1 1 0 2 2 2</span>
|
||||
<span class="plain-syntax">slash_class 0 1 1 0 2 2 2</span>
|
||||
</pre>
|
||||
<p class="commentary">In addition, Inform allows the syntax <span class="extract"><span class="extract-syntax">--</span></span> to mean the empty word, or rather,
|
||||
to mean that it is permissible for the player's command to miss this word out.
|
||||
If one option in a group is <span class="extract"><span class="extract-syntax">--</span></span> then this does not get a token of its own,
|
||||
but instead results in the <span class="extract"><span class="extract-syntax">slash_dash_dash_ANNOT</span></span> annotation. For example,
|
||||
but instead results in the <span class="extract"><span class="extract-syntax">slash_dash_dash</span></span> field to be set. For example,
|
||||
consider "near --/the/that tree/shrub":
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> near the that tree shrub</span>
|
||||
<span class="plain-syntax">slash_class_ANNOT 0 1 1 2 2</span>
|
||||
<span class="plain-syntax">slash_dash_dash_ANNOT FALSE TRUE FALSE FALSE FALSE</span>
|
||||
<span class="plain-syntax">slash_class 0 1 1 2 2</span>
|
||||
<span class="plain-syntax">slash_dash_dash FALSE TRUE FALSE FALSE FALSE</span>
|
||||
</pre>
|
||||
<p class="commentary">Note that <span class="extract"><span class="extract-syntax">--</span></span> occurring on its own, outside of a run of slashes, has by
|
||||
definition no effect, and disappears without trace in this process.
|
||||
|
@ -448,28 +441,27 @@ definition no effect, and disappears without trace in this process.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_CG_TOKENS</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</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">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_class_ANNOT</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">LOOP_THROUGH_CG_TOKENS</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">slash_class</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">alternatives_group</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">class_start</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_CG_TOKENS</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</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">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">))) == </span><span class="identifier-syntax">FORWARDSLASH_V</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_class_ANNOT</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">class_start</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">; </span><span class="identifier-syntax">alternatives_group</span><span class="plain-syntax">++; </span><span class="comment-syntax"> start new equiv class</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">class_start</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_dash_dash_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">class_start</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_CG_TOKENS</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><a href="5-cgt.html#SP1" class="function-link"><span class="function-syntax">CGTokens::text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</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">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><a href="5-cgt.html#SP1" class="function-link"><span class="function-syntax">CGTokens::text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">))) == </span><span class="identifier-syntax">FORWARDSLASH_V</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">slash_class</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">class_start</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">; </span><span class="identifier-syntax">alternatives_group</span><span class="plain-syntax">++; </span><span class="comment-syntax"> start new equiv class</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">class_start</span><span class="plain-syntax">-></span><span class="element-syntax">slash_dash_dash</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_class_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">alternatives_group</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</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">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_class_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">alternatives_group</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</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">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">))) == </span><span class="identifier-syntax">DOUBLEDASH_V</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">class_start</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_dash_dash_ANNOT</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">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">; </span><span class="comment-syntax"> excise slash and dash-dash</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">slash_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">alternatives_group</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_token</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_token</span><span class="plain-syntax">-></span><span class="element-syntax">slash_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">alternatives_group</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::length</span><span class="plain-syntax">(</span><a href="5-cgt.html#SP1" class="function-link"><span class="function-syntax">CGTokens::text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</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">Lexer::word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><a href="5-cgt.html#SP1" class="function-link"><span class="function-syntax">CGTokens::text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">))) == </span><span class="identifier-syntax">DOUBLEDASH_V</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">class_start</span><span class="plain-syntax">-></span><span class="element-syntax">slash_dash_dash</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">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">; </span><span class="comment-syntax"> excise slash and dash-dash</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">; </span><span class="comment-syntax"> excise the slash from the token list</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">; </span><span class="comment-syntax"> excise the slash from the token list</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
@ -479,9 +471,9 @@ definition no effect, and disappears without trace in this process.
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_CG_TOKENS</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span 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">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_class_ANNOT</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">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_token_literal_ANNOT</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_CG_TOKENS</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">slash_class</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><a href="5-cgt.html#SP5" class="function-link"><span class="function-syntax">CGTokens::is_literal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</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">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_OverAmbitiousSlash</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"the slash '/' can only be used between single literal words"</span><span class="plain-syntax">,</span>
|
||||
|
@ -497,7 +489,7 @@ of groups arising from the calculations just done. In this example there are 4:
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> take up in all washing laundry linen</span>
|
||||
<span class="plain-syntax">slash_class_ANNOT 0 1 1 0 2 2 2</span>
|
||||
<span class="plain-syntax">slash_class 0 1 1 0 2 2 2</span>
|
||||
<span class="plain-syntax">lexemes +--+ +---+ +-+ +-------------------+</span>
|
||||
</pre>
|
||||
<p class="commentary">And in this one 3:
|
||||
|
@ -505,7 +497,7 @@ of groups arising from the calculations just done. In this example there are 4:
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> near the that tree shrub</span>
|
||||
<span class="plain-syntax">slash_class_ANNOT 0 1 1 2 2</span>
|
||||
<span class="plain-syntax">slash_class 0 1 1 2 2</span>
|
||||
<span class="plain-syntax">lexemes +--+ +-------+ +---------+</span>
|
||||
</pre>
|
||||
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Calculate the lexeme count</span><span class="named-paragraph-number">15.3</span></span><span class="comment-syntax"> =</span>
|
||||
|
@ -513,12 +505,12 @@ of groups arising from the calculations just done. In this example there are 4:
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">lexeme_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_CG_TOKENS</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_class_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_CG_TOKENS</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">slash_class</span><span 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">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_class_ANNOT</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">pn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="element-syntax">next</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">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">-></span><span class="element-syntax">slash_class</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">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">lexeme_count</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
|
@ -532,19 +524,19 @@ affect how the list will be arranged when it is compiled.
|
|||
<span class="definition-keyword">define</span> <span class="constant-syntax">CGL_SCORE_BUMP</span><span class="plain-syntax"> (</span><span class="constant-syntax">CGL_SCORE_TOKEN_RANGE</span><span class="plain-syntax">*</span><span class="constant-syntax">CGL_SCORE_TOKEN_RANGE</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandLines::cgl_determine</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">UnderstandLines::cgl_determine</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP21">§21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">depth</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CGLines::cgl_determine</span><button class="popup" onclick="togglePopup('usagePopup12')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup12">Usage of <span class="code-font"><span class="function-syntax">CGLines::cgl_determine</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP21">§21</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">depth</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR_CONSTRUCTION</span><span class="plain-syntax">, </span><span class="string-syntax">"Determining $g\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_INDENT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">where_grammar_specified</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">understanding_sort_bonus</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">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">general_sort_bonus</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">tokens</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">; </span><span class="comment-syntax"> start from first token...</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">tokens</span><span class="plain-syntax">; </span><span class="comment-syntax"> start from first token...</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="5-cg.html#SP5" class="function-link"><span class="function-syntax">CommandGrammars::cg_is_genuinely_verbal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">first</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">first</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">; </span><span class="comment-syntax"> ...unless it's in a nonempty command verb grammar</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">first</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">; </span><span class="comment-syntax"> ...unless it's in a nonempty command verb grammar</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">line_length</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">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first</span><span class="plain-syntax">; </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">; </span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">) </span><span class="identifier-syntax">line_length</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">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first</span><span class="plain-syntax">; </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">; </span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">) </span><span class="identifier-syntax">line_length</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">multiples</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cgl.html#SP16_1" class="named-paragraph-link"><span class="named-paragraph">Make the actual calculations</span><span class="named-paragraph-number">16.1</span></a></span><span class="plain-syntax">;</span>
|
||||
|
@ -608,22 +600,22 @@ parsing the player's command at run-time. For the exact sorting rules, see below
|
|||
|
||||
<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">nulls_count</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">pos</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">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first</span><span class="plain-syntax">; </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">; </span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next</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">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgtt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first</span><span class="plain-syntax">; </span><span class="identifier-syntax">cgtt</span><span class="plain-syntax">; </span><span class="identifier-syntax">cgtt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgtt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</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">score</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><a href="5-gt.html#SP10" class="function-link"><span class="function-syntax">UnderstandTokens::determine</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">depth</span><span class="plain-syntax">, &</span><span class="identifier-syntax">score</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><a href="5-cgt.html#SP11" class="function-link"><span class="function-syntax">CGTokens::determine</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgtt</span><span class="plain-syntax">, </span><span class="identifier-syntax">depth</span><span class="plain-syntax">, &</span><span class="identifier-syntax">score</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR_CONSTRUCTION</span><span class="plain-syntax">, </span><span class="string-syntax">"token %d/%d: <%W> --> $P (score %d)\n"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax">+1, </span><span class="identifier-syntax">line_length</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">), </span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">score</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pos</span><span class="plain-syntax">+1, </span><span class="identifier-syntax">line_length</span><span class="plain-syntax">, </span><a href="5-cgt.html#SP1" class="function-link"><span class="function-syntax">CGTokens::text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgtt</span><span class="plain-syntax">), </span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">score</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cgl.html#SP16_1_1" class="named-paragraph-link"><span class="named-paragraph">Text tokens contribute also to the understanding sort bonus</span><span class="named-paragraph-number">16.1.1</span></a></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">score_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="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-dt.html#SP1" class="function-link"><span class="function-syntax">DeterminationTypes::get_no_values_described</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">cgl_type</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">score_multiplier</span><span class="plain-syntax"> = </span><span class="constant-syntax">CGL_SCORE_TOKEN_RANGE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="5-dt.html#SP3" class="function-link"><span class="function-syntax">DeterminationTypes::add_term</span></a><span class="plain-syntax">(&(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">cgl_type</span><span class="plain-syntax">), </span><span class="identifier-syntax">spec</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-gt.html#SP4" class="function-link"><span class="function-syntax">UnderstandTokens::is_multiple</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgt.html#SP6" class="function-link"><span class="function-syntax">CGTokens::is_multiple</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgtt</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">general_sort_bonus</span><span class="plain-syntax"> += </span><span class="identifier-syntax">score</span><span class="plain-syntax">*</span><span class="identifier-syntax">score_multiplier</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">nulls_count</span><span class="plain-syntax">++;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-gt.html#SP4" class="function-link"><span class="function-syntax">UnderstandTokens::is_multiple</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">)) </span><span class="identifier-syntax">multiples</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-cgt.html#SP6" class="function-link"><span class="function-syntax">CGTokens::is_multiple</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgtt</span><span class="plain-syntax">)) </span><span class="identifier-syntax">multiples</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pos</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">nulls_count</span><span class="plain-syntax"> == </span><span class="identifier-syntax">line_length</span><span class="plain-syntax">)</span>
|
||||
|
@ -649,12 +641,12 @@ which parses to a <span class="extract"><span class="extract-syntax">K_understan
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgl.html#SP16_1">§16.1</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>§17. Sorting the lines in a grammar. </b>The CGLs in a grammar are insertion sorted into a sorted version. This is not
|
||||
the controversial part: <a href="5-cgl.html#SP19" class="internal">UnderstandLines::cg_line_must_precede</a> is the part
|
||||
the controversial part: <a href="5-cgl.html#SP19" class="internal">CGLines::cg_line_must_precede</a> is the part
|
||||
people argued over for years.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="function-syntax">UnderstandLines::list_sort</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">UnderstandLines::list_sort</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP22">§22</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="function-syntax">CGLines::list_sort</span><button class="popup" onclick="togglePopup('usagePopup13')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup13">Usage of <span class="code-font"><span class="function-syntax">CGLines::list_sort</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP22">§22</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">unsorted_head</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="identifier-syntax">first_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">unsorted_head</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</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>
|
||||
|
||||
|
@ -665,7 +657,7 @@ people argued over for years.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">next_line</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">next_line</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">sorted_head</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-cgl.html#SP19" class="function-link"><span class="function-syntax">UnderstandLines::cg_line_must_precede</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl2</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-cgl.html#SP19" class="function-link"><span class="function-syntax">CGLines::cg_line_must_precede</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl2</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sorted_head</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">sorted_next_line</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl2</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
|
||||
|
@ -677,7 +669,7 @@ people argued over for years.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl3</span><span class="plain-syntax">-></span><span class="element-syntax">sorted_next_line</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-cgl.html#SP19" class="function-link"><span class="function-syntax">UnderstandLines::cg_line_must_precede</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl2</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-cgl.html#SP19" class="function-link"><span class="function-syntax">CGLines::cg_line_must_precede</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl2</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl3</span><span class="plain-syntax">-></span><span class="element-syntax">sorted_next_line</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="element-syntax">sorted_next_line</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl2</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
|
@ -710,14 +702,14 @@ least 2010, and will not change again.
|
|||
|
||||
<ul class="footnotetexts"><li class="footnote" id="fn:1"><p class="inwebfootnote"><sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> Well... roughly. See <a href="../CommandParserKit/S-prs.html" class="internal">Parser (in CommandParserKit)</a> for the gory details.
|
||||
<a href="#fnref:1" title="return to text"> ↩</a></p></li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>§19. </b>The code in <a href="5-cgl.html#SP16" class="internal">UnderstandLines::cgl_determine</a> looked as if we would decide
|
||||
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>§19. </b>The code in <a href="5-cgl.html#SP16" class="internal">CGLines::cgl_determine</a> looked as if we would decide
|
||||
if line <span class="extract"><span class="extract-syntax">L1</span></span> precedes <span class="extract"><span class="extract-syntax">L2</span></span> by adding up their score bonuses, and letting the
|
||||
higher scorer go first. That is in fact nearly equivalent to the following,
|
||||
but not quite.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandLines::cg_line_must_precede</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">UnderstandLines::cg_line_must_precede</span></span>:<br/><a href="5-cgl.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L1</span><span class="plain-syntax">, </span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L2</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CGLines::cg_line_must_precede</span><button class="popup" onclick="togglePopup('usagePopup14')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup14">Usage of <span class="code-font"><span class="function-syntax">CGLines::cg_line_must_precede</span></span>:<br/><a href="5-cgl.html#SP17">§17</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L1</span><span class="plain-syntax">, </span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">L2</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cgl.html#SP19_1" class="named-paragraph-link"><span class="named-paragraph">Perform some sanity checks</span><span class="named-paragraph-number">19.1</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cgl.html#SP19_2" class="named-paragraph-link"><span class="named-paragraph">Nothing precedes itself</span><span class="named-paragraph-number">19.2</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cgl.html#SP19_3" class="named-paragraph-link"><span class="named-paragraph">Lower understanding penalties precede higher ones</span><span class="named-paragraph-number">19.3</span></a></span><span class="plain-syntax">;</span>
|
||||
|
@ -825,13 +817,13 @@ after <span class="extract"><span class="extract-syntax">"look"</span></span>, o
|
|||
<p class="commentary firstcommentary"><a id="SP19_6" class="paragraph-anchor"></a><b>§19.6. </b>This next rule is a lexeme-based tiebreaker. We only get here if there
|
||||
are the same number of lexemes in the two CGLs being compared. Lines in which
|
||||
all tokens are literal words, like "tossed egg salad", are scored so highly
|
||||
that they will always come first: see <a href="5-cgl.html#SP16" class="internal">UnderstandLines::cgl_determine</a>.
|
||||
that they will always come first: see <a href="5-cgl.html#SP16" class="internal">CGLines::cgl_determine</a>.
|
||||
But if one of the tokens is not literal, then we score it in such a way that
|
||||
the specificity of the tokens is what decides. The first token is more important
|
||||
than the second, and a more specific token comes before a lower one.
|
||||
</p>
|
||||
|
||||
<p class="commentary">See <a href="5-gt.html#SP10" class="internal">UnderstandTokens::determine</a> for how the score of an individual token
|
||||
<p class="commentary">See <a href="5-cgt.html#SP11" class="internal">CGTokens::determine</a> for how the score of an individual token
|
||||
is worked out.
|
||||
</p>
|
||||
|
||||
|
@ -866,10 +858,10 @@ necessary under the strict superset principle.
|
|||
</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><a href="5-cgl.html#SP12" class="function-link"><span class="function-syntax">UnderstandLines::conditional</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L1</span><span class="plain-syntax">)) &&</span>
|
||||
<span class="plain-syntax"> (</span><a href="5-cgl.html#SP12" class="function-link"><span class="function-syntax">UnderstandLines::conditional</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L2</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="5-cgl.html#SP12" class="function-link"><span class="function-syntax">UnderstandLines::conditional</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L1</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><a href="5-cgl.html#SP12" class="function-link"><span class="function-syntax">UnderstandLines::conditional</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L2</span><span class="plain-syntax">))) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="5-cgl.html#SP12" class="function-link"><span class="function-syntax">CGLines::conditional</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L1</span><span class="plain-syntax">)) &&</span>
|
||||
<span class="plain-syntax"> (</span><a href="5-cgl.html#SP12" class="function-link"><span class="function-syntax">CGLines::conditional</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L2</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="5-cgl.html#SP12" class="function-link"><span class="function-syntax">CGLines::conditional</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L1</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><a href="5-cgl.html#SP12" class="function-link"><span class="function-syntax">CGLines::conditional</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L2</span><span class="plain-syntax">))) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgl.html#SP19">§19</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP19_9" class="paragraph-anchor"></a><b>§19.9. </b>Getting down to here looks difficult, given the number of things about <span class="extract"><span class="extract-syntax">L1</span></span>
|
||||
|
@ -901,7 +893,7 @@ TURN ON VISION ON would match both of the alternative CGLs.
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgl.html#SP19">§19</a>.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-cg.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-pnaa.html">pnaa</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresscurrent">cgl</li><li class="progresssection"><a href="5-gt.html">gt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-gt.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-cg.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresscurrent">cgl</li><li class="progresssection"><a href="5-cgt.html">cgt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-cgt.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Grammar Tokens</title>
|
||||
<title>Command Grammar Tokens</title>
|
||||
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
|
@ -68,29 +68,84 @@ function togglePopup(material_id) {
|
|||
</ul>
|
||||
</nav>
|
||||
<main role="main">
|
||||
<!--Weave of 'Grammar Tokens' generated by Inweb-->
|
||||
<!--Weave of 'Command Grammar Tokens' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#5">Chapter 5: Command Parser</a></li><li><b>Grammar Tokens</b></li></ul></div>
|
||||
<p class="purpose">To handle grammar at the level of individual tokens. I7 grammar tokens correspond in a 1-to-1 way with I6 tokens: here we determine the I7 type a token represents (if any) and compile it to its I6 grammar token equivalent as needed.</p>
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#5">Chapter 5: Command Parser</a></li><li><b>Command Grammar Tokens</b></li></ul></div>
|
||||
<p class="purpose">CGs are list of CG lines, which are lists of CG tokens.</p>
|
||||
|
||||
<ul class="toc"><li><a href="5-gt.html#SP4">§4. Multiple tokens</a></li><li><a href="5-gt.html#SP5">§5. Text</a></li><li><a href="5-gt.html#SP6">§6. The special tokens</a></li><li><a href="5-gt.html#SP10">§10. Determining</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-cgt.html#SP6">§6. Multiple tokens</a></li><li><a href="5-cgt.html#SP7">§7. The special tokens</a></li><li><a href="5-cgt.html#SP11">§11. Determining</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>I7 tokens are (at present) stored simply as parse tree nodes of type
|
||||
<span class="extract"><span class="extract-syntax">TOKEN_NT</span></span>, with meaningful information hidden in annotations. At one
|
||||
time I thought this was a simple arrangement, but it now seems obfuscatory,
|
||||
so at some point I plan to create a "grammar token" structure to avoid
|
||||
these arcane annotations of the parse tree.
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_of_token</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">is_literal</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">slash_class</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">slash_dash_dash</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">grammar_token_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">grammar_value</span><span class="plain-syntax">; </span><span class="comment-syntax"> 0 or else one of the </span><span class="extract"><span class="extract-syntax">*_GTC</span></span><span class="comment-syntax"> values</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">token_relation</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_token</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">cg_token</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="function-syntax">CGTokens::text</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">CGTokens::text</span></span>:<br/><a href="5-cgt.html#SP11">§11</a>, <a href="5-cgt.html#SP11_5">§11.5</a>, <a href="5-cgt.html#SP11_6">§11.6</a><br/>Understand Sentences - <a href="5-us.html#SP19_11">§19.11</a><br/>Command Grammar Lines - <a href="5-cgl.html#SP14">§14</a>, <a href="5-cgl.html#SP15_1">§15.1</a>, <a href="5-cgl.html#SP16_1">§16.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</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">cgt</span><span class="plain-syntax">?(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">text_of_token</span><span class="plain-syntax">):(</span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure cg_token is accessed in 5/cgl and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Tokens with a nonzero <span class="extract"><span class="extract-syntax">grammar_token_code</span></span> correspond closely to what are
|
||||
also called "tokens" in the runtime command parser.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="extract"><span class="extract-syntax">grammar_token_nonliteral_ANNOT</span></span> is clear for literal words such as <span class="extract"><span class="extract-syntax">"into"</span></span>
|
||||
and set for square-bracketed tokens such as <span class="extract"><span class="extract-syntax">"[something]"</span></span>.
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NAMED_TOKEN_GTC</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> these positive values are used only in parsing</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">RELATED_GTC</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">STUFF_GTC</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">ANY_STUFF_GTC</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">ANY_THINGS_GTC</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">NOUN_TOKEN_GTC</span><span class="plain-syntax"> -1 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">noun</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MULTI_TOKEN_GTC</span><span class="plain-syntax"> -2 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">multi</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MULTIINSIDE_TOKEN_GTC</span><span class="plain-syntax"> -3 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">multiinside</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MULTIHELD_TOKEN_GTC</span><span class="plain-syntax"> -4 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">multiheld</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">HELD_TOKEN_GTC</span><span class="plain-syntax"> -5 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">held</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">CREATURE_TOKEN_GTC</span><span class="plain-syntax"> -6 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">creature</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">TOPIC_TOKEN_GTC</span><span class="plain-syntax"> -7 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">topic</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MULTIEXCEPT_TOKEN_GTC</span><span class="plain-syntax"> -8 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">multiexcept</span></span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CGTokens::log</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">CGTokens::log</span></span>:<br/>IF Module - <a href="1-im.html#SP2">§2</a>, <a href="1-im.html#SP2_3">§2.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"<no-cgt>"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"<CGT%d:%W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">text_of_token</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">slash_class</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"/%d"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">slash_class</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">slash_dash_dash</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"/--"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">grammar_token_code</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NAMED_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" = named token"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RELATED_GTC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" = related"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">STUFF_GTC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" = stuff"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ANY_STUFF_GTC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" = any stuff"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ANY_THINGS_GTC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" = any things"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" = noun"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTI_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" = multi"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTIINSIDE_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" = multiinside"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTIHELD_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" = multiheld"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">HELD_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" = held"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CREATURE_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" = creature"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TOPIC_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" = topic"</span><span class="plain-syntax">); </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTIEXCEPT_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">" = multiexcept"</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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">">"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b></p>
|
||||
|
||||
<p class="commentary"><span class="extract"><span class="extract-syntax">is_literal</span></span> is set for literal words such as <span class="extract"><span class="extract-syntax">"into"</span></span>
|
||||
and clear for square-bracketed tokens such as <span class="extract"><span class="extract-syntax">"[something]"</span></span>.
|
||||
</p>
|
||||
|
||||
<p class="commentary"><span class="extract"><span class="extract-syntax">index</span></span> stores the GSB scoring contribution made by the token to the
|
||||
CGL sorting algorithm.
|
||||
</p>
|
||||
|
||||
<p class="commentary">The <span class="extract"><span class="extract-syntax">grammar_token_code_ANNOT</span></span> annotation is meaningful only for parse nodes
|
||||
<p class="commentary">The <span class="extract"><span class="extract-syntax">grammar_token_code</span></span> annotation is meaningful only for parse nodes
|
||||
with an evaluation of type <span class="extract"><span class="extract-syntax">DESCRIPTION</span></span>. These are tokens which describe a
|
||||
range of objects. Examples include "[open container]", which compiles to an
|
||||
I6 noun filter, "[any container]", which compiles to an I6 scope filter, or
|
||||
|
@ -107,21 +162,7 @@ preferred order.)
|
|||
that the special values below cannot arise.
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NAMED_TOKEN_GTC</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> these positive values are used only in parsing</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">RELATED_GTC</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">STUFF_GTC</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">ANY_STUFF_GTC</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">ANY_THINGS_GTC</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">NOUN_TOKEN_GTC</span><span class="plain-syntax"> -1 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">noun</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MULTI_TOKEN_GTC</span><span class="plain-syntax"> -2 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">multi</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MULTIINSIDE_TOKEN_GTC</span><span class="plain-syntax"> -3 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">multiinside</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MULTIHELD_TOKEN_GTC</span><span class="plain-syntax"> -4 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">multiheld</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">HELD_TOKEN_GTC</span><span class="plain-syntax"> -5 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">held</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">CREATURE_TOKEN_GTC</span><span class="plain-syntax"> -6 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">creature</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">TOPIC_TOKEN_GTC</span><span class="plain-syntax"> -7 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">topic</span></span>
|
||||
<span class="definition-keyword">define</span> <span class="constant-syntax">MULTIEXCEPT_TOKEN_GTC</span><span class="plain-syntax"> -8 </span><span class="comment-syntax"> I6 </span><span class="extract"><span class="extract-syntax">multiexcept</span></span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>Tokens are created when text such as "drill [something] with [something]"
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>Tokens are created when text such as "drill [something] with [something]"
|
||||
is parsed, from an Understand sentence or elsewhere. What happens is much
|
||||
the same as when text with substitutions is read: that produces
|
||||
</p>
|
||||
|
@ -141,7 +182,7 @@ four constituent tokens.
|
|||
<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"> { FALSE, - }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>We use a different punctuation set, in which forward slashes break words,
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>We use a different punctuation set, in which forward slashes break words,
|
||||
to handle such as:
|
||||
</p>
|
||||
|
||||
|
@ -158,48 +199,67 @@ out", a sequence of five lexical words.
|
|||
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="Preform-constant-syntax">GRAMMAR_PUNCTUATION_MARKS</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">L</span><span class="Preform-string-syntax">".,:;?!(){}[]/"</span><span class="Preform-plain-syntax"> </span><span class="Preform-comment-syntax"> note the slash...</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandTokens::break_into_tokens</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">UnderstandTokens::break_into_tokens</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19_9">§19.9</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="function-syntax">CGTokens::break_into_tokens</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">CGTokens::break_into_tokens</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19_9">§19.9</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="function-syntax"><grammar-token-breaking></span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="function-syntax"><<r>></span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOT_APPLICABLE:</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">LW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><grammar-token-breaking></span><span class="plain-syntax">, </span><span class="constant-syntax">1</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">RW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><grammar-token-breaking></span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-gt.html#SP3" class="function-link"><span class="function-syntax">UnderstandTokens::break_into_tokens</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">LW</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-gt.html#SP3" class="function-link"><span class="function-syntax">UnderstandTokens::break_into_tokens</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">RW</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><a href="5-cgt.html#SP5" class="function-link"><span class="function-syntax">CGTokens::break_into_tokens</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">LW</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><a href="5-cgt.html#SP5" class="function-link"><span class="function-syntax">CGTokens::break_into_tokens</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="identifier-syntax">RW</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Word::dequote</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (*(</span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">))) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (*(</span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">))) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Feeds::feed_C_string_full</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">)), </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="constant-syntax">GRAMMAR_PUNCTUATION_MARKS</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_WORDING</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</span><span class="plain-syntax">, </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">newpn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Diagrams::new_UNPARSED_NOUN</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::one_word</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">Node::set_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">newpn</span><span class="plain-syntax">, </span><span class="constant-syntax">TOKEN_NT</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">newpn</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_token_literal_ANNOT</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">SyntaxTree::graft</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">newpn</span><span class="plain-syntax">, </span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><a href="5-cgt.html#SP5" class="function-link"><span class="function-syntax">CGTokens::cgt_of</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::one_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">i</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">from</span><span class="plain-syntax"> = </span><a href="5-cgt.html#SP5" class="function-link"><span class="function-syntax">CGTokens::graft</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</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">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">newpn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Diagrams::new_UNPARSED_NOUN</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">newpn</span><span class="plain-syntax">, </span><span class="constant-syntax">TOKEN_NT</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">newpn</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_token_literal_ANNOT</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">SyntaxTree::graft</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><span class="identifier-syntax">newpn</span><span class="plain-syntax">, </span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><a href="5-cgt.html#SP5" class="function-link"><span class="function-syntax">CGTokens::cgt_of</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><a href="5-cgt.html#SP5" class="function-link"><span class="function-syntax">CGTokens::graft</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandTokens::is_literal</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">UnderstandTokens::is_literal</span></span>:<br/>Understand Sentences - <a href="5-us.html#SP19_11">§19.11</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_token_literal_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="function-syntax">CGTokens::cgt_of</span><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">lit</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">cg_token</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">text_of_token</span><span class="plain-syntax"> = </span><span class="identifier-syntax">W</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">is_literal</span><span class="plain-syntax"> = </span><span class="identifier-syntax">lit</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">slash_dash_dash</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">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">slash_class</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">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">grammar_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">grammar_token_code</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">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">token_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="function-syntax">CGTokens::graft</span><span class="plain-syntax">(</span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">list</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">list</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">list</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">x</span><span class="plain-syntax"> = </span><span class="identifier-syntax">list</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">x</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax">) </span><span class="identifier-syntax">x</span><span class="plain-syntax"> = </span><span class="identifier-syntax">x</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_token</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">x</span><span class="plain-syntax">-></span><span class="element-syntax">next_token</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</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">list</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CGTokens::is_literal</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">CGTokens::is_literal</span></span>:<br/><a href="5-cgt.html#SP11">§11</a><br/>Understand Sentences - <a href="5-us.html#SP19_11">§19.11</a><br/>Command Grammar Lines - <a href="5-cgl.html#SP14">§14</a>, <a href="5-cgl.html#SP15_2">§15.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</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">cgt</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">is_literal</span><span class="plain-syntax">):</span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Multiple tokens. </b>A multiple token is one which permits multiple matches in the I6 parser: for
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. Multiple tokens. </b>A multiple token is one which permits multiple matches in the I6 parser: for
|
||||
instance, permits the use of "all".
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandTokens::is_multiple</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">UnderstandTokens::is_multiple</span></span>:<br/>Command Grammar Lines - <a href="5-cgl.html#SP16_1">§16.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">grammar_token_code_ANNOT</span><span class="plain-syntax">)) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CGTokens::is_multiple</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">CGTokens::is_multiple</span></span>:<br/>Command Grammar Lines - <a href="5-cgl.html#SP16_1">§16.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</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">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">grammar_token_code</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTI_TOKEN_GTC:</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTIINSIDE_TOKEN_GTC:</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTIHELD_TOKEN_GTC:</span>
|
||||
|
@ -209,23 +269,12 @@ instance, permits the use of "all".
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. Text. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandTokens::is_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">grammar_token_code_ANNOT</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TOPIC_TOKEN_GTC:</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. The special tokens. </b>Do not change any of these GTC numbers without first checking and updating
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. The special tokens. </b>Do not change any of these GTC numbers without first checking and updating
|
||||
the discussion of CGL sorting in <a href="5-cgl.html" class="internal">Command Grammar Lines</a>:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandTokens::gsb_for_special_token</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">UnderstandTokens::gsb_for_special_token</span></span>:<br/><a href="5-gt.html#SP10_5">§10.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gtc</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">CGTokens::gsb_for_special_token</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">CGTokens::gsb_for_special_token</span></span>:<br/><a href="5-cgt.html#SP11_5">§11.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gtc</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">gtc</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTI_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
|
@ -240,11 +289,11 @@ the discussion of CGL sorting in <a href="5-cgl.html" class="internal">Command G
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="comment-syntax"> to prevent a gcc error: never reached</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b>These translate into I6 as follows:
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b>These translate into I6 as follows:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="function-syntax">UnderstandTokens::i6_token_for_special_token</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gtc</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="function-syntax">CGTokens::i6_token_for_special_token</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gtc</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">gtc</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"noun"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTI_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"multi"</span><span class="plain-syntax">;</span>
|
||||
|
@ -259,7 +308,7 @@ the discussion of CGL sorting in <a href="5-cgl.html" class="internal">Command G
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">""</span><span class="plain-syntax">; </span><span class="comment-syntax"> to prevent a gcc error: never reached</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">UnderstandTokens::iname_for_special_token</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gtc</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="function-syntax">CGTokens::iname_for_special_token</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gtc</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">gtc</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERB_DIRECTIVE_NOUN_iname</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTI_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">VERB_DIRECTIVE_MULTI_iname</span><span class="plain-syntax">;</span>
|
||||
|
@ -274,7 +323,7 @@ the discussion of CGL sorting in <a href="5-cgl.html" class="internal">Command G
|
|||
<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><span class="comment-syntax"> to prevent a gcc error: never reached</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="function-syntax">UnderstandTokens::i6_constant_for_special_token</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gtc</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="function-syntax">CGTokens::i6_constant_for_special_token</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gtc</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">gtc</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NOUN_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"NOUN_TOKEN"</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MULTI_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">"MULTI_TOKEN"</span><span class="plain-syntax">;</span>
|
||||
|
@ -289,17 +338,17 @@ the discussion of CGL sorting in <a href="5-cgl.html" class="internal">Command G
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="string-syntax">""</span><span class="plain-syntax">; </span><span class="comment-syntax"> to prevent a gcc error: never reached</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. </b>The special tokens all return a value in I6 which needs a kind
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>The special tokens all return a value in I6 which needs a kind
|
||||
to be used in I7: these are defined by the following routine.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">UnderstandTokens::kind_for_special_token</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">UnderstandTokens::kind_for_special_token</span></span>:<br/><a href="5-gt.html#SP10_5">§10.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gtc</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">CGTokens::kind_for_special_token</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">CGTokens::kind_for_special_token</span></span>:<br/><a href="5-cgt.html#SP11_5">§11.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gtc</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="constant-syntax">TOPIC_TOKEN_GTC</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K_understanding</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">K_object</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. </b>The tokens which aren't literal words in double-quotes are parsed as follows:
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>The tokens which aren't literal words in double-quotes are parsed as follows:
|
||||
</p>
|
||||
|
||||
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||||
|
@ -313,12 +362,12 @@ to be used in I7: these are defined by the following routine.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">anywhere</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"> { ANY_STUFF_GTC, -, <<parse_node:s>> = Specifications::from_kind(K_room) }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">related</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">reversed</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><relation-name></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"> { RELATED_GTC, BinaryPredicates::get_reversal(RP[1]) }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">related</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><relation-name></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"> { RELATED_GTC, RP[1] }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">related</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</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"> </span><span class="named-paragraph-container code-font"><a href="5-gt.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_GrammarBadRelation problem</span><span class="named-paragraph-number">9.1</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">related</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">by</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"> </span><span class="named-paragraph-container code-font"><a href="5-cgt.html#SP10_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_GrammarBadRelation problem</span><span class="named-paragraph-number">10.1</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><standard-grammar-token></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { R[1], NULL }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><definite-article></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><k-kind></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"> { STUFF_GTC, -, <<parse_node:s>> = Specifications::from_kind(RP[2]) }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><s-description></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"> { STUFF_GTC, -, <<parse_node:s>> = RP[1] }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><s-type-expression></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="5-gt.html#SP9_7" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BizarreToken problem</span><span class="named-paragraph-number">9.7</span></a></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="5-gt.html#SP9_8" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UnknownToken problem</span><span class="named-paragraph-number">9.8</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><s-type-expression></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="5-cgt.html#SP10_7" class="named-paragraph-link"><span class="named-paragraph">Issue PM_BizarreToken problem</span><span class="named-paragraph-number">10.7</span></a></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="5-cgt.html#SP10_8" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UnknownToken problem</span><span class="named-paragraph-number">10.8</span></a></span>
|
||||
|
||||
<span class="Preform-function-syntax"><standard-grammar-token></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something</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"> { NOUN_TOKEN_GTC, - }</span>
|
||||
|
@ -330,12 +379,12 @@ to be used in I7: these are defined by the following routine.
|
|||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">someone</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"> { CREATURE_TOKEN_GTC, - }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">somebody</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"> { CREATURE_TOKEN_GTC, - }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">text</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { TOPIC_TOKEN_GTC, - }</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">topic</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="5-gt.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UseTextNotTopic problem</span><span class="named-paragraph-number">9.2</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">topic</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="5-gt.html#SP9_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UseTextNotTopic problem</span><span class="named-paragraph-number">9.2</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">object</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="5-gt.html#SP9_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UseThingNotObject problem</span><span class="named-paragraph-number">9.3</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">an</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">object</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="5-gt.html#SP9_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UseThingNotObject problem</span><span class="named-paragraph-number">9.3</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">held</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="5-gt.html#SP9_4" class="named-paragraph-link"><span class="named-paragraph">Issue something held problem message</span><span class="named-paragraph-number">9.4</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">things</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">held</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="5-gt.html#SP9_5" class="named-paragraph-link"><span class="named-paragraph">Issue things held problem message</span><span class="named-paragraph-number">9.5</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">topic</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="5-cgt.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UseTextNotTopic problem</span><span class="named-paragraph-number">10.2</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">a</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">topic</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="5-cgt.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UseTextNotTopic problem</span><span class="named-paragraph-number">10.2</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">object</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="5-cgt.html#SP10_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UseThingNotObject problem</span><span class="named-paragraph-number">10.3</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">an</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">object</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="5-cgt.html#SP10_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_UseThingNotObject problem</span><span class="named-paragraph-number">10.3</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">something</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">held</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="5-cgt.html#SP10_4" class="named-paragraph-link"><span class="named-paragraph">Issue something held problem message</span><span class="named-paragraph-number">10.4</span></a></span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">things</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">held</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="5-cgt.html#SP10_5" class="named-paragraph-link"><span class="named-paragraph">Issue things held problem message</span><span class="named-paragraph-number">10.5</span></a></span>
|
||||
|
||||
<span class="Preform-function-syntax"><named-grammar-token></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
|
||||
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">command_grammar</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">cg</span><span class="Preform-plain-syntax"> = </span><a href="5-cg.html#SP11" class="function-link"><span class="Preform-function-syntax">CommandGrammars::named_token_by_name</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">);</span>
|
||||
|
@ -347,7 +396,7 @@ to be used in I7: these are defined by the following routine.
|
|||
<span class="Preform-plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_1" class="paragraph-anchor"></a><b>§9.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_GrammarBadRelation problem</span><span class="named-paragraph-number">9.1</span></span><span class="Preform-comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP10_1" class="paragraph-anchor"></a><b>§10.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_GrammarBadRelation problem</span><span class="named-paragraph-number">10.1</span></span><span class="Preform-comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -361,8 +410,8 @@ to be used in I7: these are defined by the following routine.
|
|||
<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="constant-syntax">RELATED_GTC</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> };</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-gt.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_2" class="paragraph-anchor"></a><b>§9.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_UseTextNotTopic problem</span><span class="named-paragraph-number">9.2</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgt.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_2" class="paragraph-anchor"></a><b>§10.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_UseTextNotTopic problem</span><span class="named-paragraph-number">10.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -382,8 +431,8 @@ to be used in I7: these are defined by the following routine.
|
|||
<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="constant-syntax">TOPIC_TOKEN_GTC</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> };</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-gt.html#SP9">§9</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_3" class="paragraph-anchor"></a><b>§9.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_UseThingNotObject problem</span><span class="named-paragraph-number">9.3</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgt.html#SP10">§10</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_3" class="paragraph-anchor"></a><b>§10.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_UseThingNotObject problem</span><span class="named-paragraph-number">10.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -398,31 +447,31 @@ to be used in I7: these are defined by the following routine.
|
|||
<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="constant-syntax">MULTI_TOKEN_GTC</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> };</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-gt.html#SP9">§9</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_4" class="paragraph-anchor"></a><b>§9.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue something held problem message</span><span class="named-paragraph-number">9.4</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgt.html#SP10">§10</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_4" class="paragraph-anchor"></a><b>§10.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue something held problem message</span><span class="named-paragraph-number">10.4</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><a href="5-gt.html#SP9_6" class="function-link"><span class="function-syntax">UnderstandTokens::incompatible_change_problem</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgt.html#SP10_6" class="function-link"><span class="function-syntax">CGTokens::incompatible_change_problem</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"something held"</span><span class="plain-syntax">, </span><span class="string-syntax">"something"</span><span class="plain-syntax">, </span><span class="string-syntax">"something preferably held"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> ==> { </span><span class="constant-syntax">HELD_TOKEN_GTC</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> };</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-gt.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_5" class="paragraph-anchor"></a><b>§9.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue things held problem message</span><span class="named-paragraph-number">9.5</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgt.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_5" class="paragraph-anchor"></a><b>§10.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue things held problem message</span><span class="named-paragraph-number">10.5</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><a href="5-gt.html#SP9_6" class="function-link"><span class="function-syntax">UnderstandTokens::incompatible_change_problem</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgt.html#SP10_6" class="function-link"><span class="function-syntax">CGTokens::incompatible_change_problem</span></a><span class="plain-syntax">(</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"things held"</span><span class="plain-syntax">, </span><span class="string-syntax">"things"</span><span class="plain-syntax">, </span><span class="string-syntax">"things preferably held"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> ==> { </span><span class="constant-syntax">MULTIHELD_TOKEN_GTC</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax"> };</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-gt.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_6" class="paragraph-anchor"></a><b>§9.6. </b>Something of an extended mea culpa: but it had the desired effect, in
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgt.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_6" class="paragraph-anchor"></a><b>§10.6. </b>Something of an extended mea culpa: but it had the desired effect, in
|
||||
that nobody complained about what might have been a controversial change.
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandTokens::incompatible_change_problem</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">UnderstandTokens::incompatible_change_problem</span></span>:<br/><a href="5-gt.html#SP9_4">§9.4</a>, <a href="5-gt.html#SP9_5">§9.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">token_tried</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">token_instead</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">CGTokens::incompatible_change_problem</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">CGTokens::incompatible_change_problem</span></span>:<br/><a href="5-cgt.html#SP10_4">§10.4</a>, <a href="5-cgt.html#SP10_5">§10.5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">token_tried</span><span class="plain-syntax">, </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">token_instead</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">token_better</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_text</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">token_tried</span><span class="plain-syntax">);</span>
|
||||
|
@ -448,7 +497,7 @@ that nobody complained about what might have been a controversial change.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::issue_problem_end</span><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP9_7" class="paragraph-anchor"></a><b>§9.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BizarreToken problem</span><span class="named-paragraph-number">9.7</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP10_7" class="paragraph-anchor"></a><b>§10.7. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_BizarreToken problem</span><span class="named-paragraph-number">10.7</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -464,8 +513,8 @@ that nobody complained about what might have been a controversial change.
|
|||
<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="constant-syntax">STUFF_GTC</span><span class="plain-syntax">, - };</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-gt.html#SP9">§9</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP9_8" class="paragraph-anchor"></a><b>§9.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_UnknownToken problem</span><span class="named-paragraph-number">9.8</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgt.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_8" class="paragraph-anchor"></a><b>§10.8. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_UnknownToken problem</span><span class="named-paragraph-number">10.8</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -479,36 +528,36 @@ that nobody complained about what might have been a controversial change.
|
|||
<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="constant-syntax">STUFF_GTC</span><span class="plain-syntax">, - };</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-gt.html#SP9">§9</a>.</li></ul>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgt.html#SP10">§10</a>.</li></ul>
|
||||
<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">UnderstandTokens::determine</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">UnderstandTokens::determine</span></span>:<br/>Command Grammar Lines - <a href="5-cgl.html#SP16_1">§16.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">depth</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">score</span><span 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">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_token_literal_ANNOT</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>
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">CGTokens::determine</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">CGTokens::determine</span></span>:<br/>Command Grammar Lines - <a href="5-cgl.html#SP16_1">§16.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">depth</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">score</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-cgt.html#SP5" class="function-link"><span class="function-syntax">CGTokens::is_literal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</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>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="function-syntax"><<command_grammar:named>></span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="function-syntax"><grammar-token></span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="function-syntax"><grammar-token></span><span class="plain-syntax">(</span><a href="5-cgt.html#SP1" class="function-link"><span class="function-syntax">CGTokens::text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="function-syntax"><<r>></span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NAMED_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-gt.html#SP10_1" class="named-paragraph-link"><span class="named-paragraph">Determine a named grammar token</span><span class="named-paragraph-number">10.1</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ANY_STUFF_GTC:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-gt.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">Determine an any grammar token</span><span class="named-paragraph-number">10.2</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ANY_THINGS_GTC:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-gt.html#SP10_2" class="named-paragraph-link"><span class="named-paragraph">Determine an any grammar token</span><span class="named-paragraph-number">10.2</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RELATED_GTC:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-gt.html#SP10_3" class="named-paragraph-link"><span class="named-paragraph">Determine a related grammar token</span><span class="named-paragraph-number">10.3</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">STUFF_GTC:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-gt.html#SP10_4" class="named-paragraph-link"><span class="named-paragraph">Determine a kind grammar token</span><span class="named-paragraph-number">10.4</span></a></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="named-paragraph-container code-font"><a href="5-gt.html#SP10_5" class="named-paragraph-link"><span class="named-paragraph">Determine a special grammar token</span><span class="named-paragraph-number">10.5</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">NAMED_TOKEN_GTC:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cgt.html#SP11_1" class="named-paragraph-link"><span class="named-paragraph">Determine a named grammar token</span><span class="named-paragraph-number">11.1</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ANY_STUFF_GTC:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cgt.html#SP11_2" class="named-paragraph-link"><span class="named-paragraph">Determine an any grammar token</span><span class="named-paragraph-number">11.2</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ANY_THINGS_GTC:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cgt.html#SP11_2" class="named-paragraph-link"><span class="named-paragraph">Determine an any grammar token</span><span class="named-paragraph-number">11.2</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RELATED_GTC:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cgt.html#SP11_3" class="named-paragraph-link"><span class="named-paragraph">Determine a related grammar token</span><span class="named-paragraph-number">11.3</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">STUFF_GTC:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-cgt.html#SP11_4" class="named-paragraph-link"><span class="named-paragraph">Determine a kind grammar token</span><span class="named-paragraph-number">11.4</span></a></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="named-paragraph-container code-font"><a href="5-cgt.html#SP11_5" class="named-paragraph-link"><span class="named-paragraph">Determine a special grammar token</span><span class="named-paragraph-number">11.5</span></a></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="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-gt.html#SP10_6" class="named-paragraph-link"><span class="named-paragraph">Vet the grammar token determination for parseability at run-time</span><span class="named-paragraph-number">10.6</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">spec</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="5-cgt.html#SP11_6" class="named-paragraph-link"><span class="named-paragraph">Vet the grammar token determination for parseability at run-time</span><span class="named-paragraph-number">11.6</span></a></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">spec</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP10_1" class="paragraph-anchor"></a><b>§10.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine a named grammar token</span><span class="named-paragraph-number">10.1</span></span><span class="comment-syntax"> =</span>
|
||||
<p class="commentary firstcommentary"><a id="SP11_1" class="paragraph-anchor"></a><b>§11.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine a named grammar token</span><span class="named-paragraph-number">11.1</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax"> = </span><a href="5-pp.html#SP4" class="function-link"><span class="function-syntax">ParsingPlugin::rvalue_from_command_grammar</span></a><span class="plain-syntax">(</span><span class="function-syntax"><<command_grammar:named>></span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><a href="5-cg.html#SP21" class="function-link"><span class="function-syntax">CommandGrammars::determine</span></a><span class="plain-syntax">(</span><span class="function-syntax"><<command_grammar:named>></span><span class="plain-syntax">, </span><span class="identifier-syntax">depth</span><span class="plain-syntax">+1);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_grammar_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">grammar_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-gt.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_2" class="paragraph-anchor"></a><b>§10.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine an any grammar token</span><span class="named-paragraph-number">10.2</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgt.html#SP11">§11</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_2" class="paragraph-anchor"></a><b>§11.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine an any grammar token</span><span class="named-paragraph-number">11.2</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -516,47 +565,45 @@ that nobody complained about what might have been a controversial change.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Specifications::is_description</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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">any_things</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><<r>></span><span class="plain-syntax"> == </span><span class="constant-syntax">ANY_THINGS_GTC</span><span class="plain-syntax">) </span><span class="identifier-syntax">any_things</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">Annotations::write_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">grammar_token_code_ANNOT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-nft.html#SP3" class="function-link"><span class="function-syntax">UnderstandFilterTokens::new_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">any_things</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_grammar_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">grammar_token_code</span><span class="plain-syntax"> = </span><a href="5-nft.html#SP3" class="function-link"><span class="function-syntax">UnderstandFilterTokens::new_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">any_things</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">grammar_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spec</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-gt.html#SP10">§10</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_3" class="paragraph-anchor"></a><b>§10.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine a related grammar token</span><span class="named-paragraph-number">10.3</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgt.html#SP11">§11</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_3" class="paragraph-anchor"></a><b>§11.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine a related grammar token</span><span class="named-paragraph-number">11.3</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="function-syntax"><<rp>></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) </span><span class="identifier-syntax">Node::set_grammar_token_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">token_relation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">bp</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-gt.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_4" class="paragraph-anchor"></a><b>§10.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine a kind grammar token</span><span class="named-paragraph-number">10.4</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgt.html#SP11">§11</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_4" class="paragraph-anchor"></a><b>§11.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine a kind grammar token</span><span class="named-paragraph-number">11.4</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="function-syntax"><<parse_node:s>></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_grammar_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">grammar_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spec</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Specifications::is_description_like</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">score</span><span class="plain-syntax"> = </span><span class="constant-syntax">5</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">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">grammar_token_code_ANNOT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-nft.html#SP3" class="function-link"><span class="function-syntax">UnderstandFilterTokens::new_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">grammar_token_code</span><span class="plain-syntax"> = </span><a href="5-nft.html#SP3" class="function-link"><span class="function-syntax">UnderstandFilterTokens::new_id</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-gt.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_5" class="paragraph-anchor"></a><b>§10.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine a special grammar token</span><span class="named-paragraph-number">10.5</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgt.html#SP11">§11</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_5" class="paragraph-anchor"></a><b>§11.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine a special grammar token</span><span class="named-paragraph-number">11.5</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="function-syntax"><<r>></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="5-gt.html#SP8" class="function-link"><span class="function-syntax">UnderstandTokens::kind_for_special_token</span></a><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">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><a href="5-cgt.html#SP9" class="function-link"><span class="function-syntax">CGTokens::kind_for_special_token</span></a><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">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Specifications::from_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::set_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">score</span><span class="plain-syntax"> = </span><a href="5-gt.html#SP6" class="function-link"><span class="function-syntax">UnderstandTokens::gsb_for_special_token</span></a><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">Node::set_grammar_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">spec</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">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">grammar_token_code_ANNOT</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">Node::set_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><a href="5-cgt.html#SP1" class="function-link"><span class="function-syntax">CGTokens::text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> *</span><span class="identifier-syntax">score</span><span class="plain-syntax"> = </span><a href="5-cgt.html#SP7" class="function-link"><span class="function-syntax">CGTokens::gsb_for_special_token</span></a><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">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">grammar_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">spec</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="element-syntax">grammar_token_code</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">;</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-gt.html#SP10">§10</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10_6" class="paragraph-anchor"></a><b>§10.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Vet the grammar token determination for parseability at run-time</span><span class="named-paragraph-number">10.6</span></span><span class="comment-syntax"> =</span>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgt.html#SP11">§11</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP11_6" class="paragraph-anchor"></a><b>§11.6. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Vet the grammar token determination for parseability at run-time</span><span class="named-paragraph-number">11.6</span></span><span class="comment-syntax"> =</span>
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
@ -567,7 +614,7 @@ that nobody complained about what might have been a controversial change.
|
|||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::eq</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_understanding</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">Kinds::Behaviour::request_I6_GPR</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</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">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">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_wording</span><span class="plain-syntax">(2, </span><a href="5-cgt.html#SP1" class="function-link"><span class="function-syntax">CGTokens::text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</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="plain-syntax"> </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_UnparsableKind</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>
|
||||
|
@ -582,9 +629,9 @@ that nobody complained about what might have been a controversial change.
|
|||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-gt.html#SP10">§10</a>.</li></ul>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-cgt.html#SP11">§11</a>.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-cgl.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-pnaa.html">pnaa</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresscurrent">gt</li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-dt.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-cgl.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresscurrent">cgt</li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-dt.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
|
@ -200,7 +200,7 @@ of CGL sorting in <a href="5-cgl.html" class="internal">Command Grammar Lines</a
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-gt.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-pnaa.html">pnaa</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-gt.html">gt</a></li><li class="progresscurrent">dt</li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-gp.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-cgt.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-cgt.html">cgt</a></li><li class="progresscurrent">dt</li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-gp.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -192,7 +192,7 @@ depends on a property permission and not a mere property.
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-dt.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-pnaa.html">pnaa</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-gt.html">gt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresscurrent">gp</li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-nft.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-dt.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-cgt.html">cgt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresscurrent">gp</li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-nft.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -1326,7 +1326,7 @@ alter the value of <span class="extract"><span class="extract-syntax">self</span
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-tpv.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-pnaa.html">pnaa</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-gt.html">gt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresscurrent">gpr</li><li class="progressnextoff">❯</li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-tpv.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-cgt.html">cgt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresscurrent">gpr</li><li class="progressnextoff">❯</li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -324,7 +324,7 @@ that's why.)
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">too_late_for_further_NFTs</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandFilterTokens::new_id</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">UnderstandFilterTokens::new_id</span></span>:<br/>Grammar Tokens - <a href="5-gt.html#SP10_2">§10.2</a>, <a href="5-gt.html#SP10_4">§10.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">global_scope</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">any_things</span><span class="plain-syntax">) {</span>
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">UnderstandFilterTokens::new_id</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">UnderstandFilterTokens::new_id</span></span>:<br/>Command Grammar Tokens - <a href="5-cgt.html#SP11_2">§11.2</a>, <a href="5-cgt.html#SP11_4">§11.4</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">global_scope</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">any_things</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">too_late_for_further_NFTs</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="identifier-syntax">BelievedImpossible</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"complicated instructions on understanding the player's command "</span>
|
||||
|
@ -384,7 +384,7 @@ that's why.)
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-gp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-pnaa.html">pnaa</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-gt.html">gt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresscurrent">nft</li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-tpv.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-gp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-cgt.html">cgt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresscurrent">nft</li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-tpv.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -1,155 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Parsing-Only Nodes and Annotations</title>
|
||||
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
|
||||
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<script>
|
||||
function togglePopup(material_id) {
|
||||
var popup = document.getElementById(material_id);
|
||||
popup.classList.toggle("show");
|
||||
}
|
||||
</script>
|
||||
|
||||
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
|
||||
</head>
|
||||
<body class="commentary-font">
|
||||
<nav role="navigation">
|
||||
<h1><a href="../index.html">
|
||||
<img src="../docs-assets/Inform.png" height=72">
|
||||
</a></h1>
|
||||
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
||||
<li><a href="../other.html">other tools</a></li>
|
||||
<li><a href="../extensions.html">extensions and kits</a></li>
|
||||
<li><a href="../units.html">unit test tools</a></li>
|
||||
</ul><h2>Compiler Webs</h2><ul>
|
||||
<li><a href="../inbuild/index.html">inbuild</a></li>
|
||||
<li><a href="../inform7/index.html">inform7</a></li>
|
||||
<li><a href="../inter/index.html">inter</a></li>
|
||||
</ul><h2>Inbuild Modules</h2><ul>
|
||||
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
||||
</ul><h2>Inform7 Modules</h2><ul>
|
||||
<li><a href="../core-module/index.html">core</a></li>
|
||||
<li><a href="../assertions-module/index.html">assertions</a></li>
|
||||
<li><a href="../values-module/index.html">values</a></li>
|
||||
<li><a href="../knowledge-module/index.html">knowledge</a></li>
|
||||
<li><a href="../imperative-module/index.html">imperative</a></li>
|
||||
<li><a href="../runtime-module/index.html">runtime</a></li>
|
||||
<li><a href="index.html"><span class="selectedlink">if</span></a></li>
|
||||
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
||||
<li><a href="../index-module/index.html">index</a></li>
|
||||
</ul><h2>Inter Modules</h2><ul>
|
||||
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
||||
<li><a href="../building-module/index.html">building</a></li>
|
||||
<li><a href="../codegen-module/index.html">codegen</a></li>
|
||||
</ul><h2>Services</h2><ul>
|
||||
<li><a href="../arch-module/index.html">arch</a></li>
|
||||
<li><a href="../calculus-module/index.html">calculus</a></li>
|
||||
<li><a href="../html-module/index.html">html</a></li>
|
||||
<li><a href="../inflections-module/index.html">inflections</a></li>
|
||||
<li><a href="../kinds-module/index.html">kinds</a></li>
|
||||
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
||||
<li><a href="../problems-module/index.html">problems</a></li>
|
||||
<li><a href="../syntax-module/index.html">syntax</a></li>
|
||||
<li><a href="../words-module/index.html">words</a></li>
|
||||
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
||||
|
||||
</ul>
|
||||
</nav>
|
||||
<main role="main">
|
||||
<!--Weave of 'Parsing-Only Nodes and Annotations' generated by Inweb-->
|
||||
<div class="breadcrumbs">
|
||||
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#5">Chapter 5: Command Parser</a></li><li><b>Parsing-Only Nodes and Annotations</b></li></ul></div>
|
||||
<p class="purpose">Additional syntax tree node and annotation types used by the parsing plugin.</p>
|
||||
|
||||
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>There is just one additional node type, used for tokens in Understand grammar,
|
||||
but there are also several new annotations:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">TOKEN_NT</span><span class="plain-syntax"> </span><span class="comment-syntax"> used for tokens in grammar</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">constant_command_grammar_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">command_grammar</span></span><span class="comment-syntax">: for constant values</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">grammar_token_literal_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> int: for grammar tokens which are literal words</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">grammar_token_relation_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">: for relation tokens</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">grammar_value_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">: used as a marker when evaluating Understand grammar</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">slash_class_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> int: used when partitioning grammar tokens</span>
|
||||
<span class="definition-keyword">enum</span> <span class="constant-syntax">slash_dash_dash_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 when partitioning grammar tokens</span>
|
||||
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">constant_command_grammar</span><span class="plain-syntax">, </span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">constant_command_grammar</span><span class="plain-syntax">, </span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax">)</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingNodes::nodes_and_annotations</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ParsingNodes::nodes_and_annotations</span></span>:<br/>Parsing Plugin - <a href="5-pp.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">NodeType::new</span><span class="plain-syntax">(</span><span class="constant-syntax">TOKEN_NT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"TOKEN_NT"</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">INFTY</span><span class="plain-syntax">, </span><span class="identifier-syntax">L3_NCAT</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span><span class="constant-syntax">constant_command_grammar_ANNOT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-pnaa.html#SP3" class="function-link"><span class="function-syntax">ParsingNodes::write_constant_grammar_verb_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="constant-syntax">grammar_token_literal_ANNOT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-pnaa.html#SP3" class="function-link"><span class="function-syntax">ParsingNodes::write_grammar_token_literal_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="constant-syntax">grammar_token_relation_ANNOT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-pnaa.html#SP3" class="function-link"><span class="function-syntax">ParsingNodes::write_grammar_token_relation_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="constant-syntax">grammar_value_ANNOT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-pnaa.html#SP3" class="function-link"><span class="function-syntax">ParsingNodes::write_grammar_value_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="constant-syntax">slash_class_ANNOT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-pnaa.html#SP3" class="function-link"><span class="function-syntax">ParsingNodes::write_slash_class_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="constant-syntax">slash_dash_dash_ANNOT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-pnaa.html#SP3" class="function-link"><span class="function-syntax">ParsingNodes::write_slash_dash_dash_ANNOT</span></a><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">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_command_grammar_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="constant-syntax">TOKEN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_token_literal_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="constant-syntax">TOKEN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_token_relation_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="constant-syntax">TOKEN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">grammar_value_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::allow</span><span class="plain-syntax">(</span><span class="constant-syntax">TOKEN_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">slash_class_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">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">slash_dash_dash_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>And for the debugging log:
|
||||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingNodes::write_constant_grammar_verb_ANNOT</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">ParsingNodes::write_constant_grammar_verb_ANNOT</span></span>:<br/><a href="5-pnaa.html#SP2">§2</a></span></button><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">Node::get_constant_command_grammar</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">" {command grammar: CG%d}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_constant_command_grammar</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">)-></span><span class="identifier-syntax">allocation_id</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">ParsingNodes::write_grammar_token_literal_ANNOT</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">ParsingNodes::write_grammar_token_literal_ANNOT</span></span>:<br/><a href="5-pnaa.html#SP2">§2</a></span></button><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">" {grammar token literal: %d}"</span><span class="plain-syntax">,</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">grammar_token_literal_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">ParsingNodes::write_grammar_token_relation_ANNOT</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">ParsingNodes::write_grammar_token_relation_ANNOT</span></span>:<br/><a href="5-pnaa.html#SP2">§2</a></span></button><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">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_grammar_token_relation</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">bp</span><span class="plain-syntax">) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">" {grammar token relation: %S}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</span><span class="plain-syntax">-></span><span class="identifier-syntax">debugging_log_name</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">ParsingNodes::write_grammar_value_ANNOT</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">ParsingNodes::write_grammar_value_ANNOT</span></span>:<br/><a href="5-pnaa.html#SP2">§2</a></span></button><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">" {grammar value: $P}"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_grammar_value</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingNodes::write_slash_class_ANNOT</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">ParsingNodes::write_slash_class_ANNOT</span></span>:<br/><a href="5-pnaa.html#SP2">§2</a></span></button><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">slash_class_ANNOT</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</span><span class="plain-syntax">(</span><span class="string-syntax">" {slash: %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">slash_class_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">ParsingNodes::write_slash_dash_dash_ANNOT</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">ParsingNodes::write_slash_dash_dash_ANNOT</span></span>:<br/><a href="5-pnaa.html#SP2">§2</a></span></button><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">slash_dash_dash_ANNOT</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</span><span class="plain-syntax">(</span><span class="string-syntax">" {slash-dash-dash: %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">slash_dash_dash_ANNOT</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-pp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresscurrent">pnaa</li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-gt.html">gt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-us.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -85,7 +85,7 @@ chapter.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingPlugin::start</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">ParsingPlugin::start</span></span>:<br/>IF Module - <a href="1-im.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="5-pnaa.html#SP2" class="function-link"><span class="function-syntax">ParsingNodes::nodes_and_annotations</span></a><span class="plain-syntax">();</span>
|
||||
<span class="plain-syntax"> </span><a href="5-pp.html#SP11" class="function-link"><span class="function-syntax">ParsingPlugin::nodes_and_annotations</span></a><span class="plain-syntax">();</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">PRODUCTION_LINE_PLUG</span><span class="plain-syntax">, </span><a href="5-pp.html#SP2" class="function-link"><span class="function-syntax">ParsingPlugin::production_line</span></a><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">PluginManager::plug</span><span class="plain-syntax">(</span><span class="identifier-syntax">MAKE_SPECIAL_MEANINGS_PLUG</span><span class="plain-syntax">, </span><a href="5-us.html#SP1" class="function-link"><span class="function-syntax">Understand::make_special_meanings</span></a><span class="plain-syntax">);</span>
|
||||
|
@ -170,7 +170,7 @@ the following functions to handle its constant rvalues. These correspond to
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">ParsingPlugin::rvalue_from_command_grammar</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">ParsingPlugin::rvalue_from_command_grammar</span></span>:<br/>Parse Clauses - <a href="4-pc.html#SP1_1_1">§1.1.1</a><br/>Grammar Tokens - <a href="5-gt.html#SP10_1">§10.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
|
||||
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="function-syntax">ParsingPlugin::rvalue_from_command_grammar</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">ParsingPlugin::rvalue_from_command_grammar</span></span>:<br/>Parse Clauses - <a href="4-pc.html#SP1_1_1">§1.1.1</a><br/>Command Grammar Tokens - <a href="5-cgt.html#SP11_1">§11.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_FROM</span><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_understanding</span><span class="plain-syntax">) }</span>
|
||||
<span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="function-syntax">ParsingPlugin::rvalue_to_command_grammar</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CONV_TO</span><span class="plain-syntax">(</span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax">) }</span>
|
||||
|
@ -308,8 +308,34 @@ where grammar has specified a need. (By default, this will not happen.)
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Rvalues::from_iname</span><span class="plain-syntax">(</span><span class="identifier-syntax">S</span><span class="plain-syntax">), </span><span class="identifier-syntax">CERTAIN_CE</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-pp.html#SP9">§9</a> (twice).</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>Finally, this plugin needs just one new annotation for the parse tree:
|
||||
</p>
|
||||
|
||||
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">constant_command_grammar_ANNOT</span><span class="plain-syntax"> </span><span class="comment-syntax"> </span><span class="extract"><span class="extract-syntax">command_grammar</span></span><span class="comment-syntax">: for constant values</span>
|
||||
</pre>
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">DECLARE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">constant_command_grammar</span><span class="plain-syntax">, </span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax">)</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="identifier-syntax">MAKE_ANNOTATION_FUNCTIONS</span><span class="plain-syntax">(</span><span class="identifier-syntax">constant_command_grammar</span><span class="plain-syntax">, </span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax">)</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">ParsingPlugin::nodes_and_annotations</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">ParsingPlugin::nodes_and_annotations</span></span>:<br/><a href="5-pp.html#SP1">§1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">void</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::declare_type</span><span class="plain-syntax">(</span><span class="constant-syntax">constant_command_grammar_ANNOT</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-pp.html#SP11" class="function-link"><span class="function-syntax">ParsingPlugin::write_constant_grammar_verb_ANNOT</span></a><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">CONSTANT_NT</span><span class="plain-syntax">, </span><span class="constant-syntax">constant_command_grammar_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">ParsingPlugin::write_constant_grammar_verb_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">Node::get_constant_command_grammar</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">" {command grammar: CG%d}"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Node::get_constant_command_grammar</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">)-></span><span class="identifier-syntax">allocation_id</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="4-gng.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresscurrent">pp</li><li class="progresssection"><a href="5-pnaa.html">pnaa</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-gt.html">gt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-pnaa.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="4-gng.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresscurrent">pp</li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-cgt.html">cgt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-us.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -384,7 +384,7 @@ function togglePopup(material_id) {
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-tpv.html#SP1_1">§1.1</a> (three times).</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-nft.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-pnaa.html">pnaa</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-gt.html">gt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresscurrent">tpv</li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-gpr.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-nft.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-us.html">us</a></li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-cgt.html">cgt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresscurrent">tpv</li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-gpr.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -196,7 +196,7 @@ objects, which are really just unions of being a text in quotes or a property na
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">ui1</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure understanding_item is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/anl, 4/apc, 5/cgl and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure understanding_item is accessed in 2/ri, 3/tm, 3/scn, 3/ts, 4/ap, 4/av, 4/anl, 4/apc and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>So, then, the Preform for the subject phrase is as follows:
|
||||
</p>
|
||||
|
||||
|
@ -874,7 +874,7 @@ we simply make any double-quoted text in <span class="extract"><span class="extr
|
|||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>§19. Text blocks. </b>And finally, here we perform a lengthy shopping list of checks for validity, but
|
||||
then in all cases we create a single new CG line with <a href="5-cgl.html#SP2" class="internal">UnderstandLines::new</a>
|
||||
then in all cases we create a single new CG line with <a href="5-cgl.html#SP2" class="internal">CGLines::new</a>
|
||||
and add it to a suitably chosen CG with <a href="5-cg.html#SP18" class="internal">CommandGrammars::add_line</a>.
|
||||
</p>
|
||||
|
||||
|
@ -893,7 +893,7 @@ and add it to a suitably chosen CG with <a href="5-cg.html#SP18" class="internal
|
|||
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-us.html#SP19_8" class="named-paragraph-link"><span class="named-paragraph">Only objects can be understood in the plural</span><span class="named-paragraph-number">19.8</span></a></span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">; </span><span class="reserved-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-us.html#SP19_9" class="named-paragraph-link"><span class="named-paragraph">Tokenise the quoted text W into the raw tokens for a CG line</span><span class="named-paragraph-number">19.9</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-us.html#SP19_10" class="named-paragraph-link"><span class="named-paragraph">Make the new CG line</span><span class="named-paragraph-number">19.10</span></a></span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-us.html#SP19_11" class="named-paragraph-link"><span class="named-paragraph">Decide which command grammar the new line should go to</span><span class="named-paragraph-number">19.11</span></a></span><span class="plain-syntax">;</span>
|
||||
|
@ -1095,9 +1095,8 @@ and add it to a suitably chosen CG with <a href="5-cg.html#SP18" class="internal
|
|||
<span class="plain-syntax"> </span><span class="constant-syntax">GRAMMAR_PUNCTUATION_MARKS</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-us.html#SP19_9_2" class="named-paragraph-link"><span class="named-paragraph">Reject this if it contains two consecutive commas</span><span class="named-paragraph-number">19.9.2</span></a></span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Diagrams::new_UNPARSED_NOUN</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-gt.html#SP3" class="function-link"><span class="function-syntax">UnderstandTokens::break_into_tokens</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">, </span><span class="identifier-syntax">tokenised</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax"> = </span><a href="5-cgt.html#SP5" class="function-link"><span class="function-syntax">CGTokens::break_into_tokens</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">tokenised</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">tokens</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::sentence_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(),</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_UnderstandEmptyText</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"'understand' should be followed by text which contains at least "</span>
|
||||
|
@ -1108,7 +1107,6 @@ and add it to a suitably chosen CG with <a href="5-cg.html#SP18" class="internal
|
|||
<span class="plain-syntax"> </span><span class="string-syntax">"understanding."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR_CONSTRUCTION</span><span class="plain-syntax">, </span><span class="string-syntax">"Tokenised: $T\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-us.html#SP19">§19</a>.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP19_9_1" class="paragraph-anchor"></a><b>§19.9.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Reject this if it contains punctuation</span><span class="named-paragraph-number">19.9.1</span></span><span class="comment-syntax"> =</span>
|
||||
|
@ -1162,13 +1160,13 @@ and add it to a suitably chosen CG with <a href="5-cg.html#SP18" class="internal
|
|||
</p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax"> = </span><a href="5-cgl.html#SP2" class="function-link"><span class="function-syntax">UnderstandLines::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">an_reference</span><span class="plain-syntax">, </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgl</span><span class="plain-syntax"> = </span><a href="5-cgl.html#SP2" class="function-link"><span class="function-syntax">CGLines::new</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">an_reference</span><span class="plain-syntax">, </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">reversed_reference</span><span class="plain-syntax">, </span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">pluralised_reference</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">mistaken</span><span class="plain-syntax">) </span><a href="5-cgl.html#SP13" class="function-link"><span class="function-syntax">UnderstandLines::set_mistake</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">mistake_text</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">mistaken</span><span class="plain-syntax">) </span><a href="5-cgl.html#SP13" class="function-link"><span class="function-syntax">CGLines::set_mistake</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">mistake_text</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Wordings::nonempty</span><span class="plain-syntax">(</span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">when_text</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP10" class="function-link"><span class="function-syntax">UnderstandLines::set_understand_when</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">when_text</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP10" class="function-link"><span class="function-syntax">CGLines::set_understand_when</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">when_text</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Descriptions::is_qualified</span><span class="plain-syntax">(</span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">spec_reference</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP11" class="function-link"><span class="function-syntax">UnderstandLines::set_understand_prop</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP11" class="function-link"><span class="function-syntax">CGLines::set_understand_prop</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Propositions::copy</span><span class="plain-syntax">(</span><span class="identifier-syntax">Descriptions::to_proposition</span><span class="plain-syntax">(</span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">spec_reference</span><span class="plain-syntax">)));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR_CONSTRUCTION</span><span class="plain-syntax">, </span><span class="string-syntax">"Line: $g\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">);</span>
|
||||
</pre>
|
||||
|
@ -1185,8 +1183,8 @@ and add it to a suitably chosen CG with <a href="5-cg.html#SP18" class="internal
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CG_IS_COMMAND:</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">command_W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">EMPTY_WORDING</span><span class="plain-syntax">; </span><span class="comment-syntax"> implies the no verb verb</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-gt.html#SP3" class="function-link"><span class="function-syntax">UnderstandTokens::is_literal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">command_W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="5-cgt.html#SP5" class="function-link"><span class="function-syntax">CGTokens::is_literal</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">command_W</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_word</span><span class="plain-syntax">(</span><a href="5-cgt.html#SP1" class="function-link"><span class="function-syntax">CGTokens::text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR_CONSTRUCTION</span><span class="plain-syntax">, </span><span class="string-syntax">"Add to command grammar of command '%W': "</span><span class="plain-syntax">, </span><span class="identifier-syntax">command_W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cg</span><span class="plain-syntax"> = </span><a href="5-cg.html#SP7" class="function-link"><span class="function-syntax">CommandGrammars::for_command_verb_creating</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">command_W</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
|
@ -1209,7 +1207,7 @@ and add it to a suitably chosen CG with <a href="5-cg.html#SP18" class="internal
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CG_IS_VALUE:</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR_CONSTRUCTION</span><span class="plain-syntax">, </span><span class="string-syntax">"Add to command grammar of value $P: "</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">spec_reference</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP8" class="function-link"><span class="function-syntax">UnderstandLines::set_single_term</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">spec_reference</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP8" class="function-link"><span class="function-syntax">CGLines::set_single_term</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">spec_reference</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cg</span><span class="plain-syntax"> = </span><a href="5-cg.html#SP15" class="function-link"><span class="function-syntax">CommandGrammars::for_kind</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">ur</span><span class="plain-syntax">-></span><span class="element-syntax">spec_reference</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CG_IS_PROPERTY_NAME:</span>
|
||||
|
@ -1226,7 +1224,7 @@ and add it to a suitably chosen CG with <a href="5-cg.html#SP18" class="internal
|
|||
</pre>
|
||||
<ul class="endnotetexts"><li>This code is used in <a href="5-us.html#SP19">§19</a>.</li></ul>
|
||||
<nav role="progress"><div class="progresscontainer">
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-pnaa.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresssection"><a href="5-pnaa.html">pnaa</a></li><li class="progresscurrent">us</li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-gt.html">gt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-cg.html">❯</a></li></ul></div>
|
||||
<ul class="progressbar"><li class="progressprev"><a href="5-pp.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresscurrentchapter">5</li><li class="progresssection"><a href="5-pp.html">pp</a></li><li class="progresscurrent">us</li><li class="progresssection"><a href="5-cg.html">cg</a></li><li class="progresssection"><a href="5-cgl.html">cgl</a></li><li class="progresssection"><a href="5-cgt.html">cgt</a></li><li class="progresssection"><a href="5-dt.html">dt</a></li><li class="progresssection"><a href="5-gp.html">gp</a></li><li class="progresssection"><a href="5-nft.html">nft</a></li><li class="progresssection"><a href="5-tpv.html">tpv</a></li><li class="progresssection"><a href="5-gpr.html">gpr</a></li><li class="progressnext"><a href="5-cg.html">❯</a></li></ul></div>
|
||||
</nav><!--End of weave-->
|
||||
|
||||
</main>
|
||||
|
|
|
@ -280,11 +280,6 @@
|
|||
<spon class="sectiontitle">Parsing Plugin</span></a> -
|
||||
<span class="sectionpurpose">A plugin for command-parser support.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="5-pnaa.html">
|
||||
<spon class="sectiontitle">Parsing-Only Nodes and Annotations</span></a> -
|
||||
<span class="sectionpurpose">Additional syntax tree node and annotation types used by the parsing plugin.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="5-us.html">
|
||||
<spon class="sectiontitle">Understand Sentences</span></a> -
|
||||
|
@ -301,9 +296,9 @@
|
|||
<span class="sectionpurpose">A CG line is a list of CG tokens to specify a textual pattern. For example, "take [something] out" is a CG line of three tokens.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="5-gt.html">
|
||||
<spon class="sectiontitle">Grammar Tokens</span></a> -
|
||||
<span class="sectionpurpose">To handle grammar at the level of individual tokens. I7 grammar tokens correspond in a 1-to-1 way with I6 tokens: here we determine the I7 type a token represents (if any) and compile it to its I6 grammar token equivalent as needed.</span></p>
|
||||
<p class="sectionentry"><a href="5-cgt.html">
|
||||
<spon class="sectiontitle">Command Grammar Tokens</span></a> -
|
||||
<span class="sectionpurpose">CGs are list of CG lines, which are lists of CG tokens.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p class="sectionentry"><a href="5-dt.html">
|
||||
|
|
|
@ -730,7 +730,7 @@ insert them into the Inter stream close to the top.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::guard</span><span class="plain-syntax">(</span><span class="identifier-syntax">Inter::Link::new</span><span class="plain-syntax">(</span><span class="identifier-syntax">Packaging::at</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">()), (</span><span class="identifier-syntax">inter_ti</span><span class="plain-syntax">) </span><span class="identifier-syntax">stage</span><span class="plain-syntax">, </span><span class="identifier-syntax">ID1</span><span class="plain-syntax">, </span><span class="identifier-syntax">ID2</span><span class="plain-syntax">, </span><span class="identifier-syntax">ID3</span><span class="plain-syntax">, </span><span class="identifier-syntax">ID4</span><span class="plain-syntax">, </span><span class="identifier-syntax">ref</span><span class="plain-syntax">, </span><span class="identifier-syntax">Produce::baseline</span><span class="plain-syntax">(</span><span class="identifier-syntax">Packaging::at</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">())), </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<ul class="endnotetexts"><li>The structure dval_written is private to this section.</li><li>The structure nascent_array is accessed in 2/cu, 3/ad, 4/ts, 4/cl, 4/itc, 4/ni, 4/rsft, 5/los, 5/ap, 5/cgl and here.</li></ul>
|
||||
<ul class="endnotetexts"><li>The structure dval_written is private to this section.</li><li>The structure nascent_array is accessed in 2/cu, 3/ad, 4/ts, 4/cl, 4/itc, 4/ni, 4/rsft, 5/los, 5/ap and here.</li></ul>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
|
|
|
@ -236,7 +236,7 @@ by exploring each CG in turn.
|
|||
<span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="function-syntax">RTCommandGrammars::cg_compile_Verb_directive_header</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">RTCommandGrammars::cg_compile_Verb_directive_header</span></span>:<br/><a href="5-cg.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">array_iname</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="identifier-syntax">cg_is</span><span class="plain-syntax"> != </span><span class="identifier-syntax">CG_IS_COMMAND</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"tried to compile Verb from non-command CG"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">UnderstandLines::list_length</span><span class="plain-syntax">(</span><span class="identifier-syntax">cg</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">CGLines::list_length</span><span class="plain-syntax">(</span><span class="identifier-syntax">cg</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">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"compiling Verb for empty grammar"</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::named_verb_array_begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">array_iname</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_value</span><span class="plain-syntax">);</span>
|
||||
|
@ -314,7 +314,7 @@ next priority, and so on up the hierarchy.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTCommandGrammars::compile</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">RTCommandGrammars::compile</span></span>:<br/><a href="5-cg.html#SP2">§2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">UnderstandLines::list_length</span><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CGLines::list_length</span><span class="plain-syntax">(</span><span class="identifier-syntax">cg</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR</span><span class="plain-syntax">, </span><span class="string-syntax">"Compiling command grammar $G\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">);</span>
|
||||
|
||||
|
@ -425,7 +425,7 @@ next priority, and so on up the hierarchy.
|
|||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTCommandGrammars::compile_iv</span><span class="plain-syntax">(</span><span class="identifier-syntax">gpr_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="identifier-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">UnderstandLines::list_length</span><span class="plain-syntax">(</span><span class="identifier-syntax">cg</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">CGLines::list_length</span><span class="plain-syntax">(</span><span class="identifier-syntax">cg</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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR</span><span class="plain-syntax">, </span><span class="string-syntax">"Compiling command grammar $G\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cg</span><span class="plain-syntax">-></span><span class="identifier-syntax">where_cg_created</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP4" class="function-link"><span class="function-syntax">RTCommandGrammarLines::reset_labels</span></a><span class="plain-syntax">();</span>
|
||||
|
|
|
@ -239,7 +239,7 @@ the mistake.
|
|||
<span class="plain-syntax">}</span>
|
||||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTCommandGrammarLines::cgl_compile_condition_token_as_needed</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">RTCommandGrammarLines::cgl_compile_condition_token_as_needed</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">UnderstandLines::conditional</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CGLines::conditional</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="identifier-syntax">where_grammar_specified</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PR</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::local_package</span></a><span class="plain-syntax">(</span><span class="constant-syntax">COND_TOKENS_HAP</span><span class="plain-syntax">);</span>
|
||||
|
@ -247,7 +247,7 @@ the mistake.
|
|||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">packaging_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">save</span><span class="plain-syntax"> = </span><a href="4-rtn.html#SP1" class="function-link"><span class="function-syntax">Routines::begin</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">cond_token_iname</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">UnderstandLines::get_understand_cond</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CGLines::get_understand_cond</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pcalc_prop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prop</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="identifier-syntax">understand_when_prop</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">spec</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">prop</span><span class="plain-syntax">)) {</span>
|
||||
|
@ -282,7 +282,7 @@ the mistake.
|
|||
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTCommandGrammarLines::cgl_compile_extra_token_for_condition</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">RTCommandGrammarLines::cgl_compile_extra_token_for_condition</span></span>:<br/><a href="5-cgl.html#SP5">§5</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">gpr_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</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">cg_is</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_label</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">UnderstandLines::conditional</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CGLines::conditional</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">cond_token_iname</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"CGL cond token not ready"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cg_is</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CG_IS_COMMAND</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_iname_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">cond_token_iname</span><span class="plain-syntax">);</span>
|
||||
|
@ -324,9 +324,11 @@ of the <span class="extract"><span class="extract-syntax">name</span></span> pro
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTCommandGrammarLines::sorted_line_list_compile</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">RTCommandGrammarLines::sorted_line_list_compile</span></span>:<br/>Command Grammars - <a href="5-cg.html#SP6">§6</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">gpr_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gprk</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">cg_is</span><span class="plain-syntax">, </span><span class="identifier-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">genuinely_verbal</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_INDENT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_SORTED_CG_LINES</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="identifier-syntax">compilation_data</span><span class="plain-syntax">.</span><span class="element-syntax">suppress_compilation</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP5" class="function-link"><span class="function-syntax">RTCommandGrammarLines::compile_cg_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg_is</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">, </span><span class="identifier-syntax">genuinely_verbal</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_OUTDENT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>The following apparently global variables are used to provide a persistent
|
||||
|
@ -355,7 +357,6 @@ command CGs) have not yet been type-checked, whereas all others have.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTCommandGrammarLines::compile_cg_line</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">RTCommandGrammarLines::compile_cg_line</span></span>:<br/><a href="5-cgl.html#SP3">§3</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">gpr_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg_line</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cg_is</span><span class="plain-syntax">, </span><span class="identifier-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</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">genuinely_verbal</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">token_values</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">token_value_kinds</span><span class="plain-syntax">[2];</span>
|
||||
|
@ -397,16 +398,16 @@ command CGs) have not yet been type-checked, whereas all others have.
|
|||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP2" class="function-link"><span class="function-syntax">RTCommandGrammarLines::cgl_compile_extra_token_for_condition</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg_is</span><span class="plain-syntax">, </span><span class="identifier-syntax">fail_label</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP2" class="function-link"><span class="function-syntax">RTCommandGrammarLines::cgl_compile_extra_token_for_mistake</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg_is</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="identifier-syntax">tokens</span><span class="plain-syntax">-></span><span class="element-syntax">down</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">genuinely_verbal</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">slash_class_ANNOT</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">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgl</span><span class="plain-syntax">-></span><span class="identifier-syntax">tokens</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">genuinely_verbal</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">slash_class</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><span class="identifier-syntax">PM_SlashedCommand</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"at present you're not allowed to use a / between command "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"words at the start of a line"</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"so 'put/interpose/insert [something]' is out."</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">pn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</span><span class="plain-syntax">; </span><span class="comment-syntax"> skip command word: the </span><span class="extract"><span class="extract-syntax">Verb</span></span><span class="comment-syntax"> header contains it already</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_token</span><span class="plain-syntax">; </span><span class="comment-syntax"> skip command word: the </span><span class="extract"><span class="extract-syntax">Verb</span></span><span class="comment-syntax"> header contains it already</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">cg_is</span><span class="plain-syntax"> == </span><span class="identifier-syntax">CG_IS_VALUE</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">GV_IS_VALUE_instance_mode</span><span class="plain-syntax">)) {</span>
|
||||
|
@ -421,10 +422,9 @@ command CGs) have not yet been type-checked, whereas all others have.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">, *</span><span class="identifier-syntax">pn_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn_from</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">pn</span><span class="plain-syntax">; </span><span class="identifier-syntax">pn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</span><span class="plain-syntax">) </span><span class="identifier-syntax">pn_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP7" class="function-link"><span class="function-syntax">RTCommandGrammarLines::compile_token_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="identifier-syntax">code_mode</span><span class="plain-syntax">, </span><span class="identifier-syntax">pn_from</span><span class="plain-syntax">, </span><span class="identifier-syntax">pn_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg_is</span><span class="plain-syntax">, </span><span class="identifier-syntax">consult_mode</span><span class="plain-syntax">, &</span><span class="identifier-syntax">token_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">token_value_kinds</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">fail_label</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, *</span><span class="identifier-syntax">cgt_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt_from</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">cgt</span><span class="plain-syntax">; </span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_token</span><span class="plain-syntax">) </span><span class="identifier-syntax">cgt_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP7" class="function-link"><span class="function-syntax">RTCommandGrammarLines::compile_token_line</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="identifier-syntax">code_mode</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgt_from</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgt_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg_is</span><span class="plain-syntax">, </span><span class="identifier-syntax">consult_mode</span><span class="plain-syntax">, &</span><span class="identifier-syntax">token_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">token_value_kinds</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">fail_label</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">cg_is</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">CG_IS_COMMAND:</span>
|
||||
|
@ -542,8 +542,8 @@ command CGs) have not yet been type-checked, whereas all others have.
|
|||
|
||||
<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">slash_gpr</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_choice</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">last_choice</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first_choice</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">last_choice</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sgpr_iname</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||||
<span class="plain-syntax">} </span><span class="reserved-syntax">slash_gpr</span><span class="plain-syntax">;</span>
|
||||
|
@ -552,17 +552,19 @@ command CGs) have not yet been type-checked, whereas all others have.
|
|||
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b></p>
|
||||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTCommandGrammarLines::compile_token_line</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">RTCommandGrammarLines::compile_token_line</span></span>:<br/><a href="5-cgl.html#SP5">§5</a>, <a href="5-cgl.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">gpr_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">code_mode</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn_to</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cg_is</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">consult_mode</span><span class="plain-syntax">,</span>
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTCommandGrammarLines::compile_token_line</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">RTCommandGrammarLines::compile_token_line</span></span>:<br/><a href="5-cgl.html#SP5">§5</a>, <a href="5-cgl.html#SP8">§8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">gpr_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">code_mode</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt_to</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">cg_is</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">consult_mode</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">token_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> **</span><span class="identifier-syntax">token_value_kinds</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">group_wn_s</span><span class="plain-syntax">, </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">fail_label</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">lexeme_equivalence_class</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">alternative_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">empty_text_allowed_in_lexeme</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">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">next_reserved_label</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eog_reserved_label</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">pn</span><span class="plain-syntax">; </span><span class="identifier-syntax">pn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">UnderstandTokens::is_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">UnderstandTokens::is_literal</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</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">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR_CONSTRUCTION</span><span class="plain-syntax">, </span><span class="string-syntax">"Compiling token range $c -> $c\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgt_to</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG_INDENT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (; </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">; </span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_token</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">GRAMMAR_CONSTRUCTION</span><span class="plain-syntax">, </span><span class="string-syntax">"Compiling token $c\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">grammar_token_code</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TOPIC_TOKEN_GTC</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_token</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">CGTokens::is_literal</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_token</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">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="identifier-syntax">PM_TextFollowedBy</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"a '[text]' token must either match the end of some text, or "</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"be followed by definitely known wording"</span><span class="plain-syntax">,</span>
|
||||
|
@ -570,7 +572,7 @@ command CGs) have not yet been type-checked, whereas all others have.
|
|||
<span class="plain-syntax"> </span><span class="string-syntax">"make sense of things."</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">Node::get_grammar_token_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">)) && (</span><span class="identifier-syntax">cg_is</span><span class="plain-syntax"> != </span><span class="identifier-syntax">CG_IS_SUBJECT</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">token_relation</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">cg_is</span><span class="plain-syntax"> != </span><span class="identifier-syntax">CG_IS_SUBJECT</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">problem_count</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">)</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">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="identifier-syntax">PM_GrammarObjectlessRelation</span><span class="plain-syntax">),</span>
|
||||
<span class="plain-syntax"> </span><span class="string-syntax">"a grammar token in an 'Understand...' can only be based "</span>
|
||||
|
@ -581,17 +583,15 @@ command CGs) have not yet been type-checked, whereas all others have.
|
|||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">first_token_in_lexeme</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="identifier-syntax">last_token_in_lexeme</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">slash_class_ANNOT</span><span class="plain-syntax">) != </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="comment-syntax"> in a multi-token lexeme</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) ||</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</span><span class="plain-syntax">, </span><span class="identifier-syntax">slash_class_ANNOT</span><span class="plain-syntax">) !=</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">slash_class_ANNOT</span><span class="plain-syntax">)))</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">slash_class</span><span class="plain-syntax"> != </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="comment-syntax"> in a multi-token lexeme</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_token</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) ||</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_token</span><span class="plain-syntax">-></span><span class="identifier-syntax">slash_class</span><span class="plain-syntax"> != </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">slash_class</span><span class="plain-syntax">))</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">last_token_in_lexeme</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">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">slash_class_ANNOT</span><span class="plain-syntax">) != </span><span class="identifier-syntax">lexeme_equivalence_class</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">slash_class</span><span class="plain-syntax"> != </span><span class="identifier-syntax">lexeme_equivalence_class</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">first_token_in_lexeme</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">empty_text_allowed_in_lexeme</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">slash_dash_dash_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">empty_text_allowed_in_lexeme</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">slash_dash_dash</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lexeme_equivalence_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">slash_class_ANNOT</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">lexeme_equivalence_class</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">slash_class</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">first_token_in_lexeme</span><span class="plain-syntax">) </span><span class="identifier-syntax">alternative_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">alternative_number</span><span class="plain-syntax">++;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> { </span><span class="comment-syntax"> in a single-token lexeme</span>
|
||||
|
@ -602,6 +602,8 @@ command CGs) have not yet been type-checked, whereas all others have.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">alternative_number</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">empty_text_allowed_in_lexeme</span><span class="plain-syntax">) </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"empty_text_allowed_in_lexeme!\n"</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">jump_on_fail</span><span class="plain-syntax"> = </span><span class="identifier-syntax">fail_label</span><span class="plain-syntax">;</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">lexeme_equivalence_class</span><span class="plain-syntax"> > </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
|
||||
|
@ -633,18 +635,18 @@ command CGs) have not yet been type-checked, whereas all others have.
|
|||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">empty_text_allowed_in_lexeme</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">code_mode</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">slash_gpr</span><span class="plain-syntax"> *</span><span class="identifier-syntax">sgpr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">slash_gpr</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sgpr</span><span class="plain-syntax">-></span><span class="element-syntax">first_choice</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</span><span class="plain-syntax">, </span><span class="identifier-syntax">slash_class_ANNOT</span><span class="plain-syntax">) ==</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">slash_class_ANNOT</span><span class="plain-syntax">))) </span><span class="identifier-syntax">pn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">-></span><span class="identifier-syntax">next</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sgpr</span><span class="plain-syntax">-></span><span class="element-syntax">last_choice</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pn</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sgpr</span><span class="plain-syntax">-></span><span class="element-syntax">first_choice</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</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">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_token</span><span class="plain-syntax">) &&</span>
|
||||
<span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_token</span><span class="plain-syntax">-></span><span class="identifier-syntax">slash_class</span><span class="plain-syntax"> ==</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">slash_class</span><span class="plain-syntax">)) </span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">next_token</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sgpr</span><span class="plain-syntax">-></span><span class="element-syntax">last_choice</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">package_request</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PR</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::local_package</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SLASH_TOKENS_HAP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">sgpr</span><span class="plain-syntax">-></span><span class="element-syntax">sgpr_iname</span><span class="plain-syntax"> = </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::make_iname_in</span></a><span class="plain-syntax">(</span><span class="constant-syntax">SLASH_FN_HL</span><span class="plain-syntax">, </span><span class="identifier-syntax">PR</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="2-emt.html#SP3" class="function-link"><span class="function-syntax">Emit::array_iname_entry</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">sgpr</span><span class="plain-syntax">-></span><span class="element-syntax">sgpr_iname</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">last_token_in_lexeme</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">grammar_token_kind</span><span class="plain-syntax"> =</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP10" class="function-link"><span class="function-syntax">RTCommandGrammarLines::compile_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">code_mode</span><span class="plain-syntax">, </span><span class="identifier-syntax">jump_on_fail</span><span class="plain-syntax">, </span><span class="identifier-syntax">consult_mode</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><a href="5-cgl.html#SP10" class="function-link"><span class="function-syntax">RTCommandGrammarLines::compile_token</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="identifier-syntax">code_mode</span><span class="plain-syntax">, </span><span class="identifier-syntax">jump_on_fail</span><span class="plain-syntax">, </span><span class="identifier-syntax">consult_mode</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">grammar_token_kind</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">token_values</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (*</span><span class="identifier-syntax">token_values</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">) {</span>
|
||||
|
@ -682,8 +684,9 @@ command CGs) have not yet been type-checked, whereas all others have.
|
|||
<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">pn</span><span class="plain-syntax"> == </span><span class="identifier-syntax">pn_to</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">cgt</span><span class="plain-syntax"> == </span><span class="identifier-syntax">cgt_to</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">LOG_OUTDENT</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax">}</span>
|
||||
</pre>
|
||||
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>§7.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Jump to end of group</span><span class="named-paragraph-number">7.1</span></span><span class="comment-syntax"> =</span>
|
||||
|
@ -735,7 +738,7 @@ affected CGLs.
|
|||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">RTCommandGrammarLines::list_take_out_one_word_grammar</span><span class="plain-syntax">(</span><span class="identifier-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_UNSORTED_CG_LINES</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">UnderstandLines::cgl_contains_single_unconditional_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CGLines::cgl_contains_single_unconditional_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgl</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">wn</span><span class="plain-syntax"> >= </span><span class="constant-syntax">0</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">content</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">content</span><span class="plain-syntax">, </span><span class="string-syntax">"%w"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">wn</span><span class="plain-syntax">));</span>
|
||||
|
@ -755,14 +758,13 @@ nothing else.
|
|||
|
||||
<pre class="displayed-code all-displayed-code code-font">
|
||||
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ol_loop_counter</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||||
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">RTCommandGrammarLines::compile_token</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">RTCommandGrammarLines::compile_token</span></span>:<br/><a href="5-cgl.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">gpr_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">code_mode</span><span class="plain-syntax">,</span>
|
||||
<span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="function-syntax">RTCommandGrammarLines::compile_token</span><button class="popup" onclick="togglePopup('usagePopup11')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup11">Usage of <span class="code-font"><span class="function-syntax">RTCommandGrammarLines::compile_token</span></span>:<br/><a href="5-cgl.html#SP7">§7</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">gpr_kit</span><span class="plain-syntax"> *</span><span class="identifier-syntax">gprk</span><span class="plain-syntax">, </span><span class="identifier-syntax">cg_token</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">code_mode</span><span class="plain-syntax">,</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_symbol</span><span class="plain-syntax"> *</span><span class="identifier-syntax">failure_label</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">consult_mode</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wn</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">CGTokens::text</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">spec</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">binary_predicate</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bp</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">command_grammar</span><span class="plain-syntax"> *</span><span class="identifier-syntax">cg</span><span 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">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">grammar_token_literal_ANNOT</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">CGTokens::is_literal</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">code_mode</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">IF_BIP</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::down</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">());</span>
|
||||
|
@ -785,7 +787,7 @@ nothing else.
|
|||
<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>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_grammar_token_relation</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">bp</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">token_relation</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">bp</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_call_iname</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><a href="2-hrr.html#SP4" class="function-link"><span class="function-syntax">Hierarchy::find</span></a><span class="plain-syntax">(</span><span class="constant-syntax">ARTICLEDESCRIPTORS_HL</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::inv_primitive</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><span class="plain-syntax">(), </span><span class="identifier-syntax">STORE_BIP</span><span class="plain-syntax">);</span>
|
||||
|
@ -1012,7 +1014,7 @@ nothing else.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">Produce::up</span><span class="plain-syntax">(</span><a href="2-emt.html#SP2" class="function-link"><span class="function-syntax">Emit::tree</span></a><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">bp</span><span class="plain-syntax"> == </span><span class="identifier-syntax">R_equality</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_source</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">pn</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">CGTokens::text</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</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_RelatedByEquality</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">"The grammar you give in %1 contains a token %2 which would "</span>
|
||||
|
@ -1161,7 +1163,7 @@ nothing else.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">continue_loop_on_fail</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="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_source</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">pn</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">CGTokens::text</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</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_GrammarValueRelation</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">"The grammar you give in %1 contains a token "</span>
|
||||
|
@ -1210,7 +1212,7 @@ nothing else.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">BinaryPredicates::term_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</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">Kinds::Behaviour::is_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">K</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">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_source</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">pn</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">CGTokens::text</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">));</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">Problems::quote_kind</span><span class="plain-syntax">(3, </span><span class="identifier-syntax">K</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_GrammarValueRelation2</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>
|
||||
|
@ -1256,7 +1258,7 @@ nothing else.
|
|||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Trouble with: $2\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">bp</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">"Whose reversal is: $2\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">BinaryPredicates::get_reversal</span><span class="plain-syntax">(</span><span class="identifier-syntax">bp</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_source</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">pn</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">CGTokens::text</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</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_GrammarTokenCowardice</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">"The grammar you give in %1 contains a token "</span>
|
||||
|
@ -1336,13 +1338,10 @@ nothing else.
|
|||
<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>
|
||||
<span class="plain-syntax"> }</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_grammar_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">UnderstandTokens::determine</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="constant-syntax">10</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_grammar_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"$T"</span><span class="plain-syntax">, </span><span class="identifier-syntax">pn</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"NULL result of non-preposition token"</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> }</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">grammar_value</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">CGTokens::determine</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</span><span class="plain-syntax">, </span><span class="constant-syntax">10</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">spec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">grammar_value</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">spec</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"NULL result of non-preposition token"</span><span class="plain-syntax">);</span>
|
||||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Specifications::is_kind_like</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">)) {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Node::get_kind_of_value</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</span><span class="plain-syntax">);</span>
|
||||
|
@ -1392,7 +1391,7 @@ nothing else.
|
|||
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Descriptions::is_complex</span><span class="plain-syntax">(</span><span class="identifier-syntax">spec</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_source</span><span class="plain-syntax">(2, </span><span class="identifier-syntax">pn</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">CGTokens::text</span><span class="plain-syntax">(</span><span class="identifier-syntax">cgt</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_OverComplexToken</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">"The grammar you give in %1 contains a token "</span>
|
||||
|
@ -1403,10 +1402,10 @@ nothing else.
|
|||
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">K_object</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Annotations::read_int</span><span class="plain-syntax">(</span><span class="identifier-syntax">pn</span><span class="plain-syntax">, </span><span class="identifier-syntax">grammar_token_code_ANNOT</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">gtc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">cgt</span><span class="plain-syntax">-></span><span class="identifier-syntax">grammar_token_code</span><span class="plain-syntax">;</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">gtc</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_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i6_token_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">UnderstandTokens::iname_for_special_token</span><span class="plain-syntax">(</span><span class="identifier-syntax">gtc</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">UnderstandTokens::kind_for_special_token</span><span class="plain-syntax">(</span><span class="identifier-syntax">gtc</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">inter_name</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i6_token_iname</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CGTokens::iname_for_special_token</span><span class="plain-syntax">(</span><span class="identifier-syntax">gtc</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="identifier-syntax">K</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CGTokens::kind_for_special_token</span><span class="plain-syntax">(</span><span class="identifier-syntax">gtc</span><span class="plain-syntax">);</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">code_mode</span><span class="plain-syntax">) {</span>
|
||||
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">consult_mode</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">gtc</span><span class="plain-syntax"> == </span><span class="identifier-syntax">TOPIC_TOKEN_GTC</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="identifier-syntax">PM_TextTokenRestricted</span><span class="plain-syntax">),</span>
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
Total memory consumption was 259376K = 253 MB
|
||||
Total memory consumption was 259375K = 253 MB
|
||||
|
||||
62.6% was used for 1340372 objects, in 278898 frames in 203 x 800K = 162400K = 158 MB:
|
||||
62.6% was used for 1338636 objects, in 278659 frames in 203 x 800K = 162400K = 158 MB:
|
||||
|
||||
9.7% inter_tree_node_array 36 x 8192 = 294912 objects, 25953408 bytes
|
||||
5.5% text_stream_array 2595 x 100 = 259500 objects, 14615040 bytes
|
||||
3.9% parse_node 130236 objects, 10418880 bytes
|
||||
3.8% parse_node 129403 objects, 10352240 bytes
|
||||
2.7% verb_conjugation 160 objects, 7425280 bytes
|
||||
2.6% parse_node_annotation_array 432 x 500 = 216000 objects, 6925824 bytes
|
||||
2.5% parse_node_annotation_array 429 x 500 = 214500 objects, 6877728 bytes
|
||||
2.4% linked_list 11793 objects, 6604080 bytes
|
||||
2.3% inter_symbol_array 70 x 1024 = 71680 objects, 6310080 bytes
|
||||
1.2% pcalc_prop_array 24 x 1000 = 24000 objects, 3264768 bytes
|
||||
|
@ -29,8 +29,8 @@ Total memory consumption was 259376K = 253 MB
|
|||
0.2% dictionary 16372 objects, 785856 bytes
|
||||
0.2% dict_entry_array 232 x 100 = 23200 objects, 749824 bytes
|
||||
0.2% package_request 7954 objects, 699952 bytes
|
||||
0.2% inter_name_generator_array 16 x 1000 = 16000 objects, 640512 bytes
|
||||
0.2% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes
|
||||
0.2% inter_name_generator_array 16 x 1000 = 16000 objects, 640512 bytes
|
||||
0.1% local_variable_array 45 x 100 = 4500 objects, 505440 bytes
|
||||
0.1% verb_usage 1128 objects, 388032 bytes
|
||||
0.1% rule 469 objects, 363944 bytes
|
||||
|
@ -69,9 +69,10 @@ Total memory consumption was 259376K = 253 MB
|
|||
---- text_substitution 436 objects, 48832 bytes
|
||||
---- cg_line 230 objects, 47840 bytes
|
||||
---- table 7 objects, 45528 bytes
|
||||
---- cg_token 603 objects, 43416 bytes
|
||||
---- inter_node_list 750 objects, 42000 bytes
|
||||
---- anl_clause_array 1 x 1000 objects, 40032 bytes
|
||||
---- activity_list_array 1 x 1000 objects, 40032 bytes
|
||||
---- anl_clause_array 1 x 1000 objects, 40032 bytes
|
||||
---- response_message 407 objects, 35816 bytes
|
||||
---- production_list 618 objects, 34608 bytes
|
||||
---- regions_data 670 objects, 32160 bytes
|
||||
|
@ -91,8 +92,8 @@ Total memory consumption was 259376K = 253 MB
|
|||
---- action_name 90 objects, 18000 bytes
|
||||
---- parse_node_tree 20 objects, 17280 bytes
|
||||
---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes
|
||||
---- linked_list_item_array 1 x 1000 objects, 16032 bytes
|
||||
---- match_avinue_array 1 x 1000 objects, 16032 bytes
|
||||
---- linked_list_item_array 1 x 1000 objects, 16032 bytes
|
||||
---- action_name_list_array 1 x 1000 objects, 16032 bytes
|
||||
---- to_phrase_request 59 objects, 15576 bytes
|
||||
---- method 323 objects, 15504 bytes
|
||||
|
@ -116,26 +117,26 @@ Total memory consumption was 259376K = 253 MB
|
|||
---- parsing_pp_data 96 objects, 4608 bytes
|
||||
---- build_vertex 40 objects, 4480 bytes
|
||||
---- hierarchy_attachment_point 48 objects, 4224 bytes
|
||||
---- stacked_variable_list_array 1 x 100 objects, 4032 bytes
|
||||
---- placement_affecting_array 1 x 100 objects, 4032 bytes
|
||||
---- stacked_variable_list_array 1 x 100 objects, 4032 bytes
|
||||
---- activity 35 objects, 3920 bytes
|
||||
---- inbuild_edition 54 objects, 3888 bytes
|
||||
---- parse_node_annotation_type 119 objects, 3808 bytes
|
||||
---- inbuild_copy 35 objects, 3640 bytes
|
||||
---- parse_node_annotation_type 113 objects, 3616 bytes
|
||||
---- command_line_switch 43 objects, 3440 bytes
|
||||
---- property_setting_bp_data 84 objects, 3360 bytes
|
||||
---- instance_usage_array 1 x 200 objects, 3232 bytes
|
||||
---- kind_constructor_comparison_schema_array 1 x 100 objects, 3232 bytes
|
||||
---- instance_usage_array 1 x 200 objects, 3232 bytes
|
||||
---- method_set 100 objects, 3200 bytes
|
||||
---- definition 44 objects, 3168 bytes
|
||||
---- compatibility_specification 66 objects, 3168 bytes
|
||||
---- definition 44 objects, 3168 bytes
|
||||
---- inform_extension 19 objects, 3040 bytes
|
||||
---- property_of_value_storage 93 objects, 2976 bytes
|
||||
---- either_or_property_data 62 objects, 2976 bytes
|
||||
---- submodule_request 72 objects, 2880 bytes
|
||||
---- inter_construct 32 objects, 2560 bytes
|
||||
---- parentage_inference_data 79 objects, 2528 bytes
|
||||
---- part_of_inference_data 79 objects, 2528 bytes
|
||||
---- parentage_inference_data 79 objects, 2528 bytes
|
||||
---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes
|
||||
---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes
|
||||
---- equation_symbol 30 objects, 2400 bytes
|
||||
|
@ -171,8 +172,8 @@ Total memory consumption was 259376K = 253 MB
|
|||
---- submodule_identity 23 objects, 736 bytes
|
||||
---- rulebook_outcome 17 objects, 680 bytes
|
||||
---- inform_language 6 objects, 672 bytes
|
||||
---- inter_warehouse_room 10 objects, 640 bytes
|
||||
---- relation_guard 5 objects, 640 bytes
|
||||
---- inter_warehouse_room 10 objects, 640 bytes
|
||||
---- I6T_intervention 8 objects, 640 bytes
|
||||
---- nascent_array 7 objects, 616 bytes
|
||||
---- inbuild_search_result 15 objects, 600 bytes
|
||||
|
@ -186,13 +187,13 @@ Total memory consumption was 259376K = 253 MB
|
|||
---- i6_memory_setting 13 objects, 416 bytes
|
||||
---- module_package 10 objects, 400 bytes
|
||||
---- dval_written 10 objects, 400 bytes
|
||||
---- article_usage 8 objects, 384 bytes
|
||||
---- bp_family 12 objects, 384 bytes
|
||||
---- article_usage 8 objects, 384 bytes
|
||||
---- source_file 5 objects, 360 bytes
|
||||
---- inbuild_genre 7 objects, 336 bytes
|
||||
---- door_dir_notice 5 objects, 320 bytes
|
||||
---- grammatical_category 8 objects, 320 bytes
|
||||
---- pronoun 8 objects, 320 bytes
|
||||
---- grammatical_category 8 objects, 320 bytes
|
||||
---- up_family 9 objects, 288 bytes
|
||||
---- build_step 4 objects, 288 bytes
|
||||
---- explicit_bp_data 5 objects, 280 bytes
|
||||
|
@ -202,36 +203,36 @@ Total memory consumption was 259376K = 253 MB
|
|||
---- adjective_meaning_family 7 objects, 224 bytes
|
||||
---- release_instructions 1 object, 208 bytes
|
||||
---- test_scenario 1 object, 208 bytes
|
||||
---- compilation_unit 5 objects, 200 bytes
|
||||
---- build_skill 5 objects, 200 bytes
|
||||
---- compilation_unit 5 objects, 200 bytes
|
||||
---- plural_dictionary_entry 4 objects, 192 bytes
|
||||
---- kit_dependency 4 objects, 192 bytes
|
||||
---- inform_project 1 object, 176 bytes
|
||||
---- link_instruction 4 objects, 160 bytes
|
||||
---- code_generation_target 4 objects, 160 bytes
|
||||
---- inference_subject_family 5 objects, 160 bytes
|
||||
---- link_instruction 4 objects, 160 bytes
|
||||
---- inter_architecture 4 objects, 160 bytes
|
||||
---- pointer_allocation 2 objects, 160 bytes
|
||||
---- element_activation 4 objects, 128 bytes
|
||||
---- codegen_pipeline 1 object, 128 bytes
|
||||
---- element_activation 4 objects, 128 bytes
|
||||
---- inbuild_nest 3 objects, 120 bytes
|
||||
---- inform_kit_ittt 2 objects, 96 bytes
|
||||
---- list_together_routine 2 objects, 80 bytes
|
||||
---- article 2 objects, 80 bytes
|
||||
---- compile_task_data 1 object, 80 bytes
|
||||
---- inter_warehouse 1 object, 56 bytes
|
||||
---- article 2 objects, 80 bytes
|
||||
---- list_together_routine 2 objects, 80 bytes
|
||||
---- build_methodology 1 object, 56 bytes
|
||||
---- inter_warehouse 1 object, 56 bytes
|
||||
---- figures_data 1 object, 48 bytes
|
||||
---- HTML_file_state 1 object, 48 bytes
|
||||
---- star_invention 1 object, 48 bytes
|
||||
---- kind_template_definition 1 object, 40 bytes
|
||||
---- HTML_file_state 1 object, 48 bytes
|
||||
---- parse_name_notice 1 object, 40 bytes
|
||||
---- loop_over_scope 1 object, 40 bytes
|
||||
---- kind_template_definition 1 object, 40 bytes
|
||||
---- by_routine_bp_data 1 object, 40 bytes
|
||||
---- loop_over_scope 1 object, 40 bytes
|
||||
|
||||
37.3% was used for memory not allocated for objects:
|
||||
|
||||
15.9% text stream storage 42247980 bytes in 265818 claims
|
||||
15.9% text stream storage 42247756 bytes in 265816 claims
|
||||
3.4% dictionary storage 9278976 bytes in 16372 claims
|
||||
---- sorting 1056 bytes in 3 claims
|
||||
2.7% source text 7200000 bytes in 3 claims
|
||||
|
@ -247,5 +248,5 @@ Total memory consumption was 259376K = 253 MB
|
|||
---- emitter array storage 12320 bytes in 8 claims
|
||||
---- code generation workspace for objects 9200 bytes in 9 claims
|
||||
|
||||
20.2% was overhead - 53880256 bytes = 52617K = 51 MB
|
||||
20.3% was overhead - 53951768 bytes = 52687K = 51 MB
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
100.0% in inform7 run
|
||||
66.9% in compilation to Inter
|
||||
25.7% in //Phrases::Manager::compile_first_block//
|
||||
8.5% in //Phrases::Manager::compile_as_needed//
|
||||
6.9% in //Strings::compile_responses//
|
||||
6.0% in //InferenceSubjects::emit_all//
|
||||
4.1% in //MajorNodes::pre_pass//
|
||||
3.4% in //MajorNodes::pass_1//
|
||||
67.1% in compilation to Inter
|
||||
25.6% in //Phrases::Manager::compile_first_block//
|
||||
8.7% in //Phrases::Manager::compile_as_needed//
|
||||
6.8% in //Strings::compile_responses//
|
||||
6.3% in //InferenceSubjects::emit_all//
|
||||
4.2% in //MajorNodes::pre_pass//
|
||||
3.3% in //MajorNodes::pass_1//
|
||||
2.0% in //Phrases::Manager::RulePrintingRule_routine//
|
||||
2.0% in //Phrases::Manager::rulebooks_array//
|
||||
1.8% in //Phrases::Manager::rulebooks_array//
|
||||
0.9% in //RTVerbs::ConjugateVerb//
|
||||
0.7% in //Phrases::Manager::traverse//
|
||||
0.5% in //World::stage_V//
|
||||
|
@ -19,11 +19,11 @@
|
|||
0.1% in //RTKinds::compile_data_type_support_routines//
|
||||
0.1% in //Task::make_built_in_kind_constructors//
|
||||
0.1% in //World::stages_II_and_III//
|
||||
3.4% not specifically accounted for
|
||||
30.6% in running Inter pipeline
|
||||
3.7% not specifically accounted for
|
||||
30.4% in running Inter pipeline
|
||||
10.0% in step preparation
|
||||
9.8% in inter step 2/12: link
|
||||
7.1% in inter step 12/12: generate inform6 -> auto.inf
|
||||
9.6% in inter step 2/12: link
|
||||
7.2% in inter step 12/12: generate inform6 -> auto.inf
|
||||
0.3% in inter step 9/12: make-identifiers-unique
|
||||
0.1% in inter step 10/12: reconcile-verbs
|
||||
0.1% in inter step 11/12: eliminate-redundant-labels
|
||||
|
@ -32,5 +32,5 @@
|
|||
0.1% in inter step 7/12: resolve-external-symbols
|
||||
0.1% in inter step 8/12: inspect-plugs
|
||||
2.1% not specifically accounted for
|
||||
1.8% in supervisor
|
||||
0.6% not specifically accounted for
|
||||
2.0% in supervisor
|
||||
0.4% not specifically accounted for
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
InstanceParsing
|
||||
SilentMistake
|
||||
SlashDashDash
|
||||
PM_BadReferringProperty
|
||||
PM_BadUnderstandProperty
|
||||
PM_BadUnderstandPropertyAs
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Kitchen
|
||||
Welcome
|
||||
An Interactive Fiction
|
||||
Release 1 / Serial number 150512 / Inform 7 build 6M22 (I6/v6.33 lib 6/12N) SD
|
||||
Release 1 / Serial number 160428 / Inform 7 build 9Z99 (I6/v6.34) SD
|
||||
|
||||
Kitchen
|
||||
You can see a light blue cube and a dark green ball here.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Kitchen
|
||||
Welcome
|
||||
An Interactive Fiction
|
||||
Release 1 / Serial number 150512 / Inform 7 build 6M22 (I6/v6.33 lib 6/12N) SD
|
||||
Release 1 / Serial number 160428 / Inform 7 build 9Z99 (I6/v6.34) SD
|
||||
|
||||
Kitchen
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 24 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_BadReferringProperty
|
||||
>--> You wrote 'Understand the banana rating property as describing a person'
|
||||
(source text, line 3): but that property is of a kind which I can't
|
||||
|
@ -10,4 +11,4 @@ Problem__ PM_BadReferringProperty
|
|||
properties with a limited list of named possible values, numbers, times of
|
||||
day, or units; but certain built-into-Inform kinds of value (like snippet
|
||||
or rulebook, for instance) I can't use.
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 21 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_BadUnderstandProperty
|
||||
>--> You wrote 'Understand the transparent property as leading to blatant
|
||||
impropriety' (source text, line 3): but 'understand the ... property as
|
||||
...' is only allowed if followed by 'describing ...' or 'referring to ...',
|
||||
so for instance 'understand the transparent property as describing a
|
||||
container.'
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 43 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_BadVisibilityWhen
|
||||
>--> You wrote 'Understand the colour property as referring to a thing when
|
||||
hell freezes over' (source text, line 7): but the condition after 'when'
|
||||
makes no sense to me, although otherwise this worked - it is only the part
|
||||
after 'when' which I can't follow.
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 21 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_BadWhen
|
||||
>--> You wrote 'Understand "sculpture" as the statue when hell freezes over' (source
|
||||
text, line 3): but the condition after 'when' makes no sense to me,
|
||||
although otherwise this worked - it is only the part after 'when' which I
|
||||
can't follow.
|
||||
Inform 7 has finished: 55 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 17 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_BizarreToken
|
||||
>--> The grammar token '101' in the sentence 'Understand "blob [101]" as
|
||||
examining' (source text, line 3) looked to me as if it might be a number,
|
||||
but this isn't something allowed in parsing grammar.
|
||||
Inform 7 has finished: 43 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
Inform 7 build 6M37 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 10 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42506 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_FilterQuantified
|
||||
>--> You wrote 'Understand "[any any thing]" as examining' (source text, line 2):
|
||||
but the [any ...] doesn't clearly give a description in the '...' part,
|
||||
where I was expecting something like '[any vehicle]'.
|
||||
Inform 7 has finished: 75 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 21 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_GrammarBadRelation
|
||||
>--> The grammar token 'something related by grobble' in the sentence
|
||||
'Understand "box of [something related by grobble]" as a box' (source text, line 3)
|
||||
invites me to understand names of related things, but the relation is not
|
||||
one that I know.
|
||||
Inform 7 has finished: 43 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
Inform 7.10.1 build 6P78 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 22 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 43240 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_GrammarIllFounded
|
||||
>--> You wrote 'Understand "left [splodge]" as "[spladge]"' (source text, line 3):
|
||||
but grammar tokens are not allowed to be defined in terms of themselves,
|
||||
either directly or indirectly.
|
||||
Inform 7 has finished: 181 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
Inform 7 build 6M36 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 19 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42506 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_GrammarTokenCowardice
|
||||
>--> The grammar you give in 'Understand "in [something related by reversed
|
||||
room-containment]" as a thing' (source text, line 2) contains a token which
|
||||
uses a relation I'm unable to test - 'something related by reversed
|
||||
room-containment' (source text, line 1).
|
||||
uses a relation I'm unable to test - something related by reversed
|
||||
room-containment.
|
||||
Problem__ PM_GrammarTokenCowardice
|
||||
>--> The grammar you give in 'Understand "in [something related by reversed
|
||||
room-containment]" as a thing' (source text, line 2) contains a token which
|
||||
uses a relation I'm unable to test - 'something related by reversed
|
||||
room-containment' (source text, line 1).
|
||||
Inform 7 has finished: 99 centiseconds used.
|
||||
uses a relation I'm unable to test - something related by reversed
|
||||
room-containment.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 22 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_GrammarTranslatedAlready
|
||||
>--> You wrote 'The Understand token squiggle translates into I6 as
|
||||
"SQUAGGLE_TOKEN"' (source text, line 5): but this grammar token has already
|
||||
been translated, so there must be some duplication somewhere.
|
||||
Inform 7 has finished: 16 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 39 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_GrammarValueRelation
|
||||
>--> The grammar you give in 'Understand "box of [something related by
|
||||
slyness]" as a box' (source text, line 7) contains a token which relates
|
||||
things to values - 'something related by slyness' (source text, line 1). At
|
||||
present, this is not allowed: only relations between kinds of object can be
|
||||
used in 'Understand' tokens.
|
||||
Inform 7 has finished: 56 centiseconds used.
|
||||
things to values - something related by slyness. At present, this is not
|
||||
allowed: only relations between kinds of object can be used in 'Understand'
|
||||
tokens.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,19 +1,20 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 82 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_GrammarValueRelation2
|
||||
>--> The grammar you give in 'Understand "[something related by
|
||||
possibilizing]" as a thing' (source text, line 13) contains a token which
|
||||
relates things to values - 'something related by possibilizing' (source
|
||||
text, line 1). (It would need to match the name of a temperature, which
|
||||
isn't a kind of thing.) At present, this is not allowed: only relations
|
||||
between kinds of object can be used in 'Understand' tokens.
|
||||
relates things to values - something related by possibilizing. (It would
|
||||
need to match the name of a temperature, which isn't a kind of thing.) At
|
||||
present, this is not allowed: only relations between kinds of object can be
|
||||
used in 'Understand' tokens.
|
||||
Problem__ PM_GrammarValueRelation2
|
||||
>--> The grammar you give in 'Understand "[something related by
|
||||
possibilizing]" as a thing' (source text, line 13) contains a token which
|
||||
relates things to values - 'something related by possibilizing' (source
|
||||
text, line 1). (It would need to match the name of a temperature, which
|
||||
isn't a kind of thing.) At present, this is not allowed: only relations
|
||||
between kinds of object can be used in 'Understand' tokens.
|
||||
Inform 7 has finished: 56 centiseconds used.
|
||||
relates things to values - something related by possibilizing. (It would
|
||||
need to match the name of a temperature, which isn't a kind of thing.) At
|
||||
present, this is not allowed: only relations between kinds of object can be
|
||||
used in 'Understand' tokens.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 54 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_LiteralPunctuation
|
||||
>--> You wrote 'Understand "note: [text]" as a mistake ("Noted.")' (source
|
||||
text, line 3): but 'understand' text cannot contain literal punctuation, or
|
||||
|
@ -21,4 +22,4 @@ Problem__ PM_LiteralPunctuation
|
|||
>--> You wrote 'Understand "note. [text]" as a mistake ("Noted.")' (source
|
||||
text, line 11): again, 'understand' text cannot contain literal
|
||||
punctuation.
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 20 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_MixedOutcome
|
||||
>--> You wrote 'Understand "bibble" or "bibble [something]" as "[pork
|
||||
chops]"' (source text, line 3): but grammar tokens must have the same
|
||||
outcome whatever the way they are reached, so writing a line like
|
||||
'Understand "within" or "next to [something]" as "[my token]" must be
|
||||
wrong: one way it produces a thing, the other way it doesn't.
|
||||
Inform 7 has finished: 44 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 43 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_MultipleMultiples
|
||||
>--> You wrote 'Understand "put [things] in [things]" as inserting it into' (source
|
||||
text, line 4): but there can be at most one token in any line which can
|
||||
match multiple things, so you'll have to remove one of the 'things' tokens
|
||||
and make it a 'something' instead.
|
||||
Inform 7 has finished: 44 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 16 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_NontextualUnderstand
|
||||
>--> You wrote 'Understand frogspawn as taking' (source text, line 3): but
|
||||
'understand' should be followed by a textual description, as in 'understand
|
||||
"take [something]" as taking the noun'.
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 18 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_NotNewCommand
|
||||
>--> You wrote 'Understand the command "take" as "drop"' (source text, line 3):
|
||||
but 'understand the command ... as ...' is only allowed when the new
|
||||
command has no meaning already, so for instance 'understand "drop" as
|
||||
"throw"' is not allowed because "drop" already has a meaning.
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 18 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_NotOldCommand
|
||||
>--> You wrote 'Understand the command "flibble" as "woogie"' (source text, line 3):
|
||||
but 'understand the command ... as ...' should end with a command already
|
||||
|
@ -11,4 +12,4 @@ Problem__ PM_NotOldCommand
|
|||
STEAL as a synonym for TAKE when reading the player's commands, whereas
|
||||
'Understand "steal [something]" as taking.' tells me that here is a
|
||||
specific grammar for what can be said using the STEAL command.)
|
||||
Inform 7 has finished: 18 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 24 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_ObsoleteHeldTokens
|
||||
>--> In the sentence 'Understand "button [something held]" as taking' (source
|
||||
text, line 3), you used the '[something held]' as a token, which was
|
||||
|
@ -24,4 +25,4 @@ Problem__ PM_ObsoleteHeldTokens
|
|||
text, line 5), you used the '[things held]' as a token, which was allowed
|
||||
in the early Public Beta versions of Inform 7, but became out of date in
|
||||
August 2006.
|
||||
Inform 7 has finished: 44 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 12 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_OldVerbUsage
|
||||
>--> You wrote 'Understand the verb "wibble" as "push"' (source text, line 3):
|
||||
but this is an outdated form of words, and Inform now prefers 'Understand
|
||||
the command ...' rather than 'Understand the verb ...'. (Since this change
|
||||
was made in beta-testing, quite a few old source texts still use the old
|
||||
form: the authors of Inform apologise for any nuisance incurred.)
|
||||
Inform 7 has finished: 18 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 17 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_OverAmbitiousSlash
|
||||
>--> You wrote 'Understand "bibble sculpture/[number]" as taking' (source
|
||||
text, line 3): but the slash '/' can only be used between single literal
|
||||
words, so 'underneath/under/beneath' is allowed but 'beneath/[florid ways
|
||||
to say under]/under' isn't.
|
||||
Inform 7 has finished: 44 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 22 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_OverComplexToken
|
||||
>--> The grammar you give in 'Understand "blob [something which can see the
|
||||
player]" as examining' (source text, line 3) contains a token which is just
|
||||
too complicated - 'something which can see the player' (source text, line 1).
|
||||
For instance, a token using subordinate clauses - such as '[a person who
|
||||
can see the player]' will probably not be allowed.
|
||||
Inform 7 has finished: 56 centiseconds used.
|
||||
too complicated - something which can see the player. For instance, a
|
||||
token using subordinate clauses - such as '[a person who can see the
|
||||
player]' will probably not be allowed.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,15 +1,16 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 21 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_RelatedByEquality
|
||||
>--> The grammar you give in 'Understand "[something related by equality]'s"
|
||||
as a person' (source text, line 5) contains a token 'something related by
|
||||
equality' (source text, line 1) which would create a circularity. To follow
|
||||
this, I'd have to compute forever.
|
||||
as a person' (source text, line 5) contains a token something related by
|
||||
equality which would create a circularity. To follow this, I'd have to
|
||||
compute forever.
|
||||
Problem__ PM_RelatedByEquality
|
||||
>--> The grammar you give in 'Understand "[something related by equality]'s"
|
||||
as a person' (source text, line 5) contains a token 'something related by
|
||||
equality' (source text, line 1) which would create a circularity. To follow
|
||||
this, I'd have to compute forever.
|
||||
Inform 7 has finished: 56 centiseconds used.
|
||||
as a person' (source text, line 5) contains a token something related by
|
||||
equality which would create a circularity. To follow this, I'd have to
|
||||
compute forever.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 12 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_SpacyCommand
|
||||
>--> You wrote 'Understand the command "two words" as something new' (source
|
||||
text, line 3): but 'understand the command ... as ...' is only allowed when
|
||||
the old command is a single word, so for instance 'understand the command
|
||||
"capture" as "get"' is okay, but 'understand the command "capture the flag"
|
||||
as "get"' is not.
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
Inform 7 build 6L49 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 23 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42523 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_TextTokenRestricted
|
||||
>--> You wrote 'if the player's command matches "frog [text]"' (source text, line 3):
|
||||
but the '[text]' token is not allowed with 'matches' or in table columns,
|
||||
as it is just too complicated to sort out: a '[text]' is supposed to
|
||||
extract a snippet from the player's command, but here we already have a
|
||||
snippet, and don't want to snip it further.
|
||||
Inform 7 has finished: 68 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 27 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_TextlessMistake
|
||||
>--> You wrote 'Understand "look frog" as a mistake of sorts' (source text, line 3):
|
||||
but when 'understand' results in a mistake it can only be followed by a
|
||||
|
@ -11,4 +12,4 @@ Problem__ PM_TextlessMistake
|
|||
>--> You wrote 'Understand "look frog" as a mistake (statue)' (source text, line 5):
|
||||
again, when 'understand' results in a mistake it can only be followed by a
|
||||
textual message in brackets.
|
||||
Inform 7 has finished: 18 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 21 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_ThreeValuedLine
|
||||
>--> You wrote 'Understand "button [something] on [something] with
|
||||
[something]" as taking' (source text, line 3): but there can be at most two
|
||||
varying parts to a line of grammar, so 'put [something] in [a container]'
|
||||
is allowed but 'put [something] in [something] beside [a door]' is not.
|
||||
Inform 7 has finished: 44 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 198 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_TooManyAliases
|
||||
>--> You wrote 'Understand the command "Cameroon" as "take"' (source text, line 34):
|
||||
but this 'understand the command ... as ...' makes too many aliases for the
|
||||
same command, exceeding the limit of 32.
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 868 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_TooManyGrammarLines
|
||||
>--> You wrote 'Understand "hit 3" as a mistake ("You shouldn't hit someone
|
||||
while Beth is in the room.") when the location of the player is the
|
||||
|
@ -11,4 +12,4 @@ Problem__ PM_TooManyGrammarLines
|
|||
best way to get around this is to try to consolidate some of those lines
|
||||
together, perhaps by using slashes to combine alternative wordings, or by
|
||||
defining new grammar tokens [in square brackets].
|
||||
Inform 7 has finished: 18 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 21 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_TwoValuedToken
|
||||
>--> You wrote 'Understand "button [a number] on [something]" as "[button
|
||||
indication]"' (source text, line 3): but there can be at most one varying
|
||||
part in the definition of a named token, so 'Understand "button [a number]"
|
||||
as "[button indication]"' is allowed but 'Understand "button [a number] on
|
||||
[something]" as "[button indication]"' is not.
|
||||
Inform 7 has finished: 44 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 19 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnderstandAsActivity
|
||||
>--> You wrote 'Understand "think about [noun]" as thinking about' (source
|
||||
text, line 4): but this 'understand ... as ...' gives text meaning an
|
||||
activity, rather than an action. Since activities happen when Inform
|
||||
decides they need to happen, not in response to typed commands, this
|
||||
doesn't make sense.
|
||||
Inform 7 has finished: 18 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 19 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnderstandAsBadValue
|
||||
>--> You wrote 'Understand "look frog" as the instead rules' (source text, line 3):
|
||||
but 'understand ... as ...' gives text meaning a value whose kind is not
|
||||
allowed, and should be a value such as 100.
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 13 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnderstandAsCompoundText
|
||||
>--> You wrote 'Understand "burn [something]" as "burn [something preferably
|
||||
held]"' (source text, line 3): but if 'understand ... as ...' gives the
|
||||
|
@ -11,4 +12,4 @@ Problem__ PM_UnderstandAsCompoundText
|
|||
existed) but 'Understand "take [thing]" as "drop [thing]"' is not allowed,
|
||||
and would not make sense, because "drop [thing]" is a combination of two
|
||||
existing tokens - not a single new one.
|
||||
Inform 7 has finished: 18 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 10 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnderstandAsQualified
|
||||
>--> You wrote 'Understand "dome" as the lighted Xanadu' (source text, line 3):
|
||||
but I cannot understand text as meaning an object qualified by relative
|
||||
|
@ -10,4 +11,4 @@ Problem__ PM_UnderstandAsQualified
|
|||
instance, although 'Understand "bad luck" as the broken mirror' is not
|
||||
allowed, 'Understand "bad luck" as the mirror when the mirror is broken'
|
||||
produces the desired effect.)
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 11 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnderstandCommaCommand
|
||||
>--> You wrote 'Understand "take []" as taking' (source text, line 1): but
|
||||
'understand' as an action cannot involve a comma, since a command leading
|
||||
|
@ -11,4 +12,4 @@ Problem__ PM_UnderstandCommaCommand
|
|||
rules for parsing a name.) Because of the way Inform processes text with
|
||||
square brackets, this problem message is also sometimes seen if empty
|
||||
square brackets are used, as in 'Understand "bless []" as blessing.'
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 25 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnderstandCommandWhen
|
||||
>--> You wrote 'Understand the command "snatch" as "take" when the statue is
|
||||
in the Memorial' (source text, line 3): but 'understand the command ... as
|
||||
...' is not allowed to have a '... when ...' clause, for the moment at any
|
||||
rate.
|
||||
Inform 7 has finished: 18 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 14 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnderstandEmptyText
|
||||
>--> You wrote 'Understand "" as the artifact' (source text, line 3): but
|
||||
'understand' should be followed by text which contains at least one word or
|
||||
|
@ -9,4 +10,4 @@ Problem__ PM_UnderstandEmptyText
|
|||
taking' is fine, but 'understand "" as the fog' is not. The same applies to
|
||||
the contents of 'topic' columns in tables, since those are also
|
||||
instructions for understanding.
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 18 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnderstandMismatch
|
||||
>--> You wrote 'Understand "look [frog" as the statue' (source text, line 3):
|
||||
but 'understand' should be followed by text in which brackets '[' and ']'
|
||||
match, so for instance 'understand "take [something]" as taking the noun'
|
||||
is fine, but 'understand "take]" as taking' is not.
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 21 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnderstandNothingNonAction
|
||||
>--> You wrote 'Understand nothing as 12' (source text, line 4): but
|
||||
'Understand nothing as ...' must be followed by an action, such as
|
||||
|
@ -12,4 +13,4 @@ Problem__ PM_UnderstandNothingNonAction
|
|||
Problem__ PM_UnderstandNothingNonAction
|
||||
>--> You wrote 'Understand nothing as "[frog]"' (source text, line 6): again,
|
||||
'Understand nothing as ...' must be followed by an action.
|
||||
Inform 7 has finished: 18 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 19 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnderstandNothingWhen
|
||||
>--> You wrote 'Understand nothing as mumbling when 1 is 2' (source text, line 5):
|
||||
but 'Understand nothing as ...' must be unconditional, so your 'when' or
|
||||
'while' condition will have to go.
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 11 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnderstandPluralValue
|
||||
>--> You wrote 'Understand "twos" as the plural of 2' (source text, line 3):
|
||||
but 'understand' as a plural can only apply to things, rooms or kinds of
|
||||
things or rooms, so 'Understand "paperwork" as the plural of a document.'
|
||||
is fine (assuming a document is a kind of thing), but 'Understand "dozens"
|
||||
as the plural of 12' is not.
|
||||
Inform 7 has finished: 18 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 18 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnderstandVague
|
||||
>--> You wrote 'Understand "look frog" as a number' (source text, line 3):
|
||||
but 'understand ... as ...' should be followed by a meaning, which might be
|
||||
|
@ -11,4 +12,4 @@ Problem__ PM_UnderstandVague
|
|||
('understand "near [something]" as "[location phrase]"'). Also, the meaning
|
||||
needs to be precise, so 'understand "x" as a number' is not allowed - it
|
||||
does not say which number.
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 11 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnderstandVariable
|
||||
>--> You wrote 'Understand "fooble" as the player' (source text, line 3): but
|
||||
this meaning is a value that varies, whereas I need something fixed. (The
|
||||
most common case of this is saying that something should be understood as
|
||||
'the player', which is actually a variable, because the perspective of play
|
||||
can change. Writing 'yourself' instead will usually do.)
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 17 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnknownToken
|
||||
>--> I was unable to understand what you meant by the grammar token
|
||||
'zxcvzcvzcv' in the sentence 'Understand "blob [zxcvzcvzcv]" as examining' (source
|
||||
text, line 3).
|
||||
Inform 7 has finished: 44 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 19 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnknownUnderstandProperty
|
||||
>--> You wrote 'Understand the morbidity property as the statue' (source text, line 3):
|
||||
but I don't understand what property that refers to, but it doesn't seem to
|
||||
be a property I know. An example of correct usage is 'understand the
|
||||
transparent property as describing a container.'
|
||||
Inform 7 has finished: 18 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 21 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnknownUnpermittedProperty
|
||||
>--> You wrote 'Understand the transparent property as referring to the
|
||||
Memorial' (source text, line 3): but that property is not allowed for the
|
||||
thing or kind in question, just as (ordinarily) 'understand the open
|
||||
property as describing a device' would not be allowed because it makes no
|
||||
sense to call a device 'open'.
|
||||
Inform 7 has finished: 17 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 17 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UnparsableKind
|
||||
>--> The grammar token 'snippet' in the sentence 'Understand "blob [snippet]"
|
||||
as examining' (source text, line 3) invites me to understand values typed
|
||||
|
@ -9,4 +10,4 @@ Problem__ PM_UnparsableKind
|
|||
ability. Generally speaking, the allowable kinds of value are number, time,
|
||||
text and any new kind of value you may have created - but not, for
|
||||
instance, scene or rule.
|
||||
Inform 7 has finished: 44 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 24 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UseTextNotTopic
|
||||
>--> The grammar token 'a topic' in the sentence 'Understand "t [a person]
|
||||
about [a topic]" as telling it about' (source text, line 3) would in some
|
||||
|
@ -11,4 +12,4 @@ Problem__ PM_UseTextNotTopic
|
|||
can't be used in every sort of Understand grammar - for example, it can't
|
||||
be used with 'matches' or in descriptions of actions or in table columns;
|
||||
it's really intended only for defining new commands.
|
||||
Inform 7 has finished: 44 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 11 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_UseThingNotObject
|
||||
>--> The grammar token 'object' in the sentence 'Understand "take [object]"
|
||||
as taking' (source text, line 1) would in some ways be the right logical
|
||||
way to suggest 'any object at all here', but Inform uses the special syntax
|
||||
'[thing]' for that. (Or '[things]' if multiple objects are allowed.)
|
||||
Inform 7 has finished: 44 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Inform 7 build 6L26 has started.
|
||||
Inform 7 v10.1.0 has started.
|
||||
I've now read your source text, which is 27 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 42597 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2288 words long.
|
||||
I've also read Basic Inform by Graham Nelson, which is 7687 words long.
|
||||
I've also read English Language by Graham Nelson, which is 2328 words long.
|
||||
I've also read Standard Rules by Graham Nelson, which is 32067 words long.
|
||||
Problem__ PM_WhenAction
|
||||
>--> You wrote 'Understand "mumble [thing]" as mumbling when taking' (source
|
||||
text, line 5): but the condition after 'when' involves the current action,
|
||||
but this can never work, because when Inform is still trying to understand
|
||||
a command, the current action isn't yet decided on.
|
||||
Inform 7 has finished: 56 centiseconds used.
|
||||
Inform 7 has finished.
|
||||
|
|
|
@ -249,6 +249,7 @@ DECLARE_CLASS(rubric_holder)
|
|||
@e explicit_action_CLASS
|
||||
@e found_in_inference_data_CLASS
|
||||
@e cg_line_CLASS
|
||||
@e cg_token_CLASS
|
||||
@e command_grammar_CLASS
|
||||
@e loop_over_scope_CLASS
|
||||
@e map_data_CLASS
|
||||
|
@ -282,6 +283,7 @@ DECLARE_CLASS(cached_understanding)
|
|||
DECLARE_CLASS(direction_inference_data)
|
||||
DECLARE_CLASS(found_in_inference_data)
|
||||
DECLARE_CLASS(cg_line)
|
||||
DECLARE_CLASS(cg_token)
|
||||
DECLARE_CLASS(command_grammar)
|
||||
DECLARE_CLASS(loop_over_scope)
|
||||
DECLARE_CLASS(map_data)
|
||||
|
|
|
@ -377,8 +377,6 @@ void CoreSyntax::grant_L2_permissions(void) {
|
|||
DECLARE_ANNOTATION_FUNCTIONS(creation_proposition, pcalc_prop)
|
||||
DECLARE_ANNOTATION_FUNCTIONS(defn_language, inform_language)
|
||||
DECLARE_ANNOTATION_FUNCTIONS(evaluation, parse_node)
|
||||
DECLARE_ANNOTATION_FUNCTIONS(grammar_token_relation, binary_predicate)
|
||||
DECLARE_ANNOTATION_FUNCTIONS(grammar_value, parse_node)
|
||||
DECLARE_ANNOTATION_FUNCTIONS(new_relation_here, binary_predicate)
|
||||
DECLARE_ANNOTATION_FUNCTIONS(predicate, unary_predicate)
|
||||
DECLARE_ANNOTATION_FUNCTIONS(quant, quantifier)
|
||||
|
@ -388,8 +386,6 @@ DECLARE_ANNOTATION_FUNCTIONS(subject, inference_subject)
|
|||
MAKE_ANNOTATION_FUNCTIONS(creation_proposition, pcalc_prop)
|
||||
MAKE_ANNOTATION_FUNCTIONS(defn_language, inform_language)
|
||||
MAKE_ANNOTATION_FUNCTIONS(evaluation, parse_node)
|
||||
MAKE_ANNOTATION_FUNCTIONS(grammar_token_relation, binary_predicate)
|
||||
MAKE_ANNOTATION_FUNCTIONS(grammar_value, parse_node)
|
||||
MAKE_ANNOTATION_FUNCTIONS(new_relation_here, binary_predicate)
|
||||
MAKE_ANNOTATION_FUNCTIONS(predicate, unary_predicate)
|
||||
MAKE_ANNOTATION_FUNCTIONS(quant, quantifier)
|
||||
|
@ -832,7 +828,6 @@ void CoreSyntax::grant_code_permissions(void) {
|
|||
@e converted_SN_ANNOT /* |int|: marking descriptions */
|
||||
@e explicit_iname_ANNOT /* |inter_name|: is this value explicitly an iname? */
|
||||
@e explicit_literal_ANNOT /* |int|: my value is an explicit integer or text */
|
||||
@e grammar_token_code_ANNOT /* int: used to identify grammar tokens */
|
||||
@e is_phrase_option_ANNOT /* |int|: this unparsed text is a phrase option */
|
||||
@e kind_of_value_ANNOT /* |kind|: for specification nodes */
|
||||
@e nothing_object_ANNOT /* |int|: this represents |nothing| at run-time */
|
||||
|
@ -944,8 +939,6 @@ void CoreSyntax::declare_spec_annotations(void) {
|
|||
explicit_iname_ANNOT, CoreSyntax::write_explicit_iname_ANNOT);
|
||||
Annotations::declare_type(
|
||||
explicit_literal_ANNOT, CoreSyntax::write_explicit_literal_ANNOT);
|
||||
Annotations::declare_type(
|
||||
grammar_token_code_ANNOT, CoreSyntax::write_grammar_token_code_ANNOT);
|
||||
Annotations::declare_type(
|
||||
is_phrase_option_ANNOT, CoreSyntax::write_is_phrase_option_ANNOT);
|
||||
Annotations::declare_type(
|
||||
|
@ -976,7 +969,7 @@ void CoreSyntax::write_constant_activity_ANNOT(text_stream *OUT, parse_node *p)
|
|||
if (act) WRITE(" {activity: %W}", act->name);
|
||||
}
|
||||
void CoreSyntax::write_constant_binary_predicate_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
binary_predicate *bp = Node::get_grammar_token_relation(p);
|
||||
binary_predicate *bp = Node::get_constant_binary_predicate(p);
|
||||
if (bp) WRITE(" {binary_predicate: %S}", bp->debugging_log_name);
|
||||
}
|
||||
void CoreSyntax::write_constant_constant_phrase_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
|
@ -1087,26 +1080,6 @@ void CoreSyntax::write_explicit_literal_ANNOT(text_stream *OUT, parse_node *p) {
|
|||
if (Annotations::read_int(p, explicit_literal_ANNOT))
|
||||
WRITE(" {explicit literal}");
|
||||
}
|
||||
void CoreSyntax::write_grammar_token_code_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
int gtc = Annotations::read_int(p, grammar_token_code_ANNOT);
|
||||
if (gtc != 0) {
|
||||
WRITE(" {grammar_token_code: ");
|
||||
if (gtc == NAMED_TOKEN_GTC) WRITE("named token");
|
||||
if (gtc == RELATED_GTC) WRITE("related");
|
||||
if (gtc == STUFF_GTC) WRITE("stuff");
|
||||
if (gtc == ANY_STUFF_GTC) WRITE("any stuff");
|
||||
if (gtc == ANY_THINGS_GTC) WRITE("any things");
|
||||
if (gtc == NOUN_TOKEN_GTC) WRITE("noun");
|
||||
if (gtc == MULTI_TOKEN_GTC) WRITE("multi");
|
||||
if (gtc == MULTIINSIDE_TOKEN_GTC) WRITE("multiinside");
|
||||
if (gtc == MULTIHELD_TOKEN_GTC) WRITE("multiheld");
|
||||
if (gtc == HELD_TOKEN_GTC) WRITE("held");
|
||||
if (gtc == CREATURE_TOKEN_GTC) WRITE("creature");
|
||||
if (gtc == TOPIC_TOKEN_GTC) WRITE("topic");
|
||||
if (gtc == MULTIEXCEPT_TOKEN_GTC) WRITE("multiexcept");
|
||||
WRITE("}");
|
||||
}
|
||||
}
|
||||
void CoreSyntax::write_is_phrase_option_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
if (Annotations::read_int(p, is_phrase_option_ANNOT))
|
||||
WRITE(" {is phrase option}");
|
||||
|
@ -1185,7 +1158,6 @@ void CoreSyntax::grant_spec_permissions(void) {
|
|||
Annotations::allow(CONSTANT_NT, constant_use_option_ANNOT);
|
||||
Annotations::allow(CONSTANT_NT, constant_verb_form_ANNOT);
|
||||
Annotations::allow(CONSTANT_NT, explicit_literal_ANNOT);
|
||||
Annotations::allow(CONSTANT_NT, grammar_token_code_ANNOT);
|
||||
Annotations::allow(CONSTANT_NT, kind_of_value_ANNOT);
|
||||
Annotations::allow(CONSTANT_NT, nothing_object_ANNOT);
|
||||
Annotations::allow(CONSTANT_NT, property_name_used_as_noun_ANNOT);
|
||||
|
|
|
@ -11,7 +11,8 @@ Setting up the use of this module.
|
|||
=
|
||||
COMPILE_WRITER(action_pattern *, ActionPatterns::log)
|
||||
COMPILE_WRITER(command_grammar *, CommandGrammars::log)
|
||||
COMPILE_WRITER(cg_line *, UnderstandLines::log)
|
||||
COMPILE_WRITER(cg_line *, CGLines::log)
|
||||
COMPILE_WRITER(cg_token *, CGTokens::log)
|
||||
COMPILE_WRITER(action_name_list *, ActionNameLists::log)
|
||||
COMPILE_WRITER(anl_entry *, ActionNameLists::log_entry)
|
||||
COMPILE_WRITER(action_name *, ActionNameNames::log)
|
||||
|
@ -51,10 +52,10 @@ void IFModule::start(void) {
|
|||
|
||||
@<Register this module's debugging log writers@> =
|
||||
REGISTER_WRITER('A', ActionPatterns::log);
|
||||
REGISTER_WRITER('c', CGTokens::log);
|
||||
REGISTER_WRITER('G', CommandGrammars::log);
|
||||
REGISTER_WRITER('g', UnderstandLines::log);
|
||||
REGISTER_WRITER('g', CGLines::log);
|
||||
REGISTER_WRITER('L', ActionNameLists::log);
|
||||
REGISTER_WRITER('8', ActionNameLists::log_entry);
|
||||
REGISTER_WRITER('l', ActionNameNames::log);
|
||||
|
||||
@
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[UnderstandLines::] Command Grammar Lines.
|
||||
[CGLines::] Command Grammar Lines.
|
||||
|
||||
A CG line is a list of CG tokens to specify a textual pattern. For example,
|
||||
"take [something] out" is a CG line of three tokens.
|
||||
|
@ -24,7 +24,7 @@ typedef struct cg_line {
|
|||
|
||||
struct parse_node *where_grammar_specified; /* where found in source */
|
||||
int original_text; /* the word number of the double-quoted grammar text... */
|
||||
struct parse_node *tokens; /* ...which is parsed into this list of tokens */
|
||||
struct cg_token *tokens; /* ...which is parsed into this list of tokens */
|
||||
int lexeme_count; /* number of lexemes, or |-1| if not yet counted */
|
||||
|
||||
struct determination_type cgl_type; /* only correct after determination occurs */
|
||||
|
@ -44,8 +44,8 @@ typedef struct cg_line {
|
|||
} cg_line;
|
||||
|
||||
@ =
|
||||
cg_line *UnderstandLines::new(wording W, action_name *ac,
|
||||
parse_node *token_list, int reversed, int pluralised) {
|
||||
cg_line *CGLines::new(wording W, action_name *ac,
|
||||
cg_token *token_list, int reversed, int pluralised) {
|
||||
if (token_list == NULL) internal_error("no token list for CGL");
|
||||
cg_line *cgl;
|
||||
cgl = CREATE(cg_line);
|
||||
|
@ -76,7 +76,7 @@ cg_line *UnderstandLines::new(wording W, action_name *ac,
|
|||
@ A command grammar has a list of CGLs. But in fact it has two lists, with the
|
||||
same contents, but in different orders. The unsorted list holds them in order
|
||||
of creation; the sorted one in order of matching priority at run-time. This
|
||||
sorting is a big issue: see //UnderstandLines::list_sort// below.
|
||||
sorting is a big issue: see //CGLines::list_sort// below.
|
||||
|
||||
@d LOOP_THROUGH_UNSORTED_CG_LINES(cgl, cg)
|
||||
for (cg_line *cgl = cg->first_line; cgl; cgl = cgl->next_line)
|
||||
|
@ -91,20 +91,16 @@ sorting is a big issue: see //UnderstandLines::list_sort// below.
|
|||
cgl->general_sort_bonus = UNCALCULATED_BONUS;
|
||||
cgl->understanding_sort_bonus = UNCALCULATED_BONUS;
|
||||
|
||||
@ While we're talking loops... CG lines are lists of CG tokens: "[things inside]",
|
||||
FROM, and "[something]" are all tokens. But Inform does not have a |cg_token|
|
||||
type because these are instead stored as |TOKEN_NT| nodes in the parse tree,
|
||||
and are the children of the |tokens| node belonging to the CG line. The
|
||||
following runs through them:
|
||||
@ While we're talking loops... CG lines are lists of CG tokens:
|
||||
|
||||
@d LOOP_THROUGH_CG_TOKENS(pn, cgl)
|
||||
for (parse_node *pn = cgl->tokens->down; pn; pn = pn->next)
|
||||
@d LOOP_THROUGH_CG_TOKENS(cgt, cgl)
|
||||
for (cg_token *cgt = cgl?(cgl->tokens):NULL; cgt; cgt = cgt->next_token)
|
||||
|
||||
@ To count how many lines a CG has so far, we use the unsorted list, since we
|
||||
don't know if the sorted one has been made yet:
|
||||
|
||||
=
|
||||
int UnderstandLines::list_length(command_grammar *cg) {
|
||||
int CGLines::list_length(command_grammar *cg) {
|
||||
int c = 0;
|
||||
LOOP_THROUGH_UNSORTED_CG_LINES(cgl, cg) c++;
|
||||
return c;
|
||||
|
@ -114,7 +110,7 @@ int UnderstandLines::list_length(command_grammar *cg) {
|
|||
(Once sorting has occurred, it is too late.)
|
||||
|
||||
=
|
||||
void UnderstandLines::list_add(command_grammar *cg, cg_line *new_gl) {
|
||||
void CGLines::list_add(command_grammar *cg, cg_line *new_gl) {
|
||||
if (cg->sorted_first_line) internal_error("too late to add lines to CG");
|
||||
new_gl->next_line = NULL;
|
||||
if (cg->first_line == NULL) {
|
||||
|
@ -129,7 +125,7 @@ void UnderstandLines::list_add(command_grammar *cg, cg_line *new_gl) {
|
|||
@ In rare cases CG lines are also removed, but again, before sorting occurs.
|
||||
|
||||
=
|
||||
void UnderstandLines::list_remove(command_grammar *cg, action_name *find) {
|
||||
void CGLines::list_remove(command_grammar *cg, action_name *find) {
|
||||
if (cg->sorted_first_line) internal_error("too late to remove lines from CG");
|
||||
cg_line *prev = NULL, *posn = cg->first_line;
|
||||
while (posn) {
|
||||
|
@ -148,8 +144,8 @@ void UnderstandLines::list_remove(command_grammar *cg, action_name *find) {
|
|||
log just enough to identify which one it is:
|
||||
|
||||
=
|
||||
void UnderstandLines::log(cg_line *cgl) {
|
||||
LOG("<CGL%d:%W>", cgl->allocation_id, Node::get_text(cgl->tokens));
|
||||
void CGLines::log(cg_line *cgl) {
|
||||
LOG("<CGL%d:%W>", cgl->allocation_id, Wordings::one_word(cgl->original_text));
|
||||
}
|
||||
|
||||
@h Relevant only for CG_IS_VALUE lines.
|
||||
|
@ -157,7 +153,7 @@ In |CG_IS_VALUE| grammars, the lines are ways to refer to a specific value
|
|||
which is not an object, and we record which value the line refers to here.
|
||||
|
||||
=
|
||||
void UnderstandLines::set_single_term(cg_line *cgl, parse_node *cgl_value) {
|
||||
void CGLines::set_single_term(cg_line *cgl, parse_node *cgl_value) {
|
||||
DeterminationTypes::set_single_term(&(cgl->cgl_type), cgl_value);
|
||||
}
|
||||
|
||||
|
@ -195,10 +191,10 @@ typecheck it with Dash only when it will actually be used; this is where
|
|||
that happens.
|
||||
|
||||
=
|
||||
void UnderstandLines::set_understand_when(cg_line *cgl, wording W) {
|
||||
void CGLines::set_understand_when(cg_line *cgl, wording W) {
|
||||
cgl->understand_when_text = W;
|
||||
}
|
||||
parse_node *UnderstandLines::get_understand_cond(cg_line *cgl) {
|
||||
parse_node *CGLines::get_understand_cond(cg_line *cgl) {
|
||||
if (Wordings::nonempty(cgl->understand_when_text)) {
|
||||
current_sentence = cgl->where_grammar_specified;
|
||||
if (<understand-condition>(cgl->understand_when_text)) {
|
||||
|
@ -220,14 +216,14 @@ matches an object $x$ only when this proposition holds. (It must always be
|
|||
a proposition with a single free variable.)
|
||||
|
||||
=
|
||||
void UnderstandLines::set_understand_prop(cg_line *cgl, pcalc_prop *prop) {
|
||||
void CGLines::set_understand_prop(cg_line *cgl, pcalc_prop *prop) {
|
||||
cgl->understand_when_prop = prop;
|
||||
}
|
||||
|
||||
@ Use of either feature makes a CGL "conditional":
|
||||
|
||||
=
|
||||
int UnderstandLines::conditional(cg_line *cgl) {
|
||||
int CGLines::conditional(cg_line *cgl) {
|
||||
if ((Wordings::nonempty(cgl->understand_when_text)) || (cgl->understand_when_prop))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
|
@ -238,7 +234,7 @@ These are grammar lines used in command CGs for commands which are accepted
|
|||
but only in order to print nicely worded rejections.
|
||||
|
||||
=
|
||||
void UnderstandLines::set_mistake(cg_line *cgl, wording MW) {
|
||||
void CGLines::set_mistake(cg_line *cgl, wording MW) {
|
||||
cgl->mistaken = TRUE;
|
||||
cgl->mistake_response_text = MW;
|
||||
RTCommandGrammarLines::set_mistake(cgl, MW);
|
||||
|
@ -253,15 +249,14 @@ for that are grammar lines consisting of single unconditional words, as
|
|||
detected by the following function:
|
||||
|
||||
=
|
||||
int UnderstandLines::cgl_contains_single_unconditional_word(cg_line *cgl) {
|
||||
parse_node *pn = cgl->tokens->down;
|
||||
if ((pn)
|
||||
&& (pn->next == NULL)
|
||||
&& (Annotations::read_int(pn, slash_class_ANNOT) == 0)
|
||||
&& (Annotations::read_int(pn, grammar_token_literal_ANNOT))
|
||||
int CGLines::cgl_contains_single_unconditional_word(cg_line *cgl) {
|
||||
if ((cgl->tokens)
|
||||
&& (cgl->tokens->next_token == NULL)
|
||||
&& (cgl->tokens->slash_class == 0)
|
||||
&& (CGTokens::is_literal(cgl->tokens))
|
||||
&& (cgl->pluralised == FALSE)
|
||||
&& (UnderstandLines::conditional(cgl) == FALSE))
|
||||
return Wordings::first_wn(Node::get_text(pn));
|
||||
&& (CGLines::conditional(cgl) == FALSE))
|
||||
return Wordings::first_wn(CGTokens::text(cgl->tokens));
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -271,13 +266,12 @@ It's done one line at a time, each line being independent of all others for
|
|||
this purpose, so:
|
||||
|
||||
=
|
||||
void UnderstandLines::slash(command_grammar *cg) {
|
||||
void CGLines::slash(command_grammar *cg) {
|
||||
LOOP_THROUGH_UNSORTED_CG_LINES(cgl, cg) {
|
||||
current_sentence = cgl->where_grammar_specified;
|
||||
@<Annotate the CG tokens with slash-class and slash-dash-dash@>;
|
||||
@<Throw a problem if slash has been used with non-literal tokens@>;
|
||||
@<Calculate the lexeme count@>;
|
||||
LOGIF(GRAMMAR_CONSTRUCTION, "Slashed as:\n$T", cgl->tokens);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -290,59 +284,57 @@ This is a run of 10 CG tokens, three of them forward slashes which are actually
|
|||
markers to indicate disjunction: thus the three tokens "up / all" intend to
|
||||
match just one word of the player's command, which can be either UP or ALL.
|
||||
|
||||
Slashing consolidates this line to 7 CG tokens, giving each one a
|
||||
|slash_class_ANNOT| annotation to show which group it belongs to. 0 means
|
||||
that a token is not part of a slashed group; otherwise, the group number
|
||||
should be shared by all the tokens in the group, and should be different
|
||||
from that of other groups. Thus:
|
||||
Slashing consolidates this line to 7 CG tokens, giving each one a |slash_class|
|
||||
value to show which group it belongs to. 0 means that a token is not part of a
|
||||
slashed group; otherwise, the group number should be shared by all the tokens
|
||||
in the group, and should be different from that of other groups. Thus:
|
||||
= (text)
|
||||
take up in all washing laundry linen
|
||||
slash_class_ANNOT 0 1 1 0 2 2 2
|
||||
slash_class 0 1 1 0 2 2 2
|
||||
=
|
||||
In addition, Inform allows the syntax |--| to mean the empty word, or rather,
|
||||
to mean that it is permissible for the player's command to miss this word out.
|
||||
If one option in a group is |--| then this does not get a token of its own,
|
||||
but instead results in the |slash_dash_dash_ANNOT| annotation. For example,
|
||||
but instead results in the |slash_dash_dash| field to be set. For example,
|
||||
consider "near --/the/that tree/shrub":
|
||||
= (text)
|
||||
near the that tree shrub
|
||||
slash_class_ANNOT 0 1 1 2 2
|
||||
slash_dash_dash_ANNOT FALSE TRUE FALSE FALSE FALSE
|
||||
slash_class 0 1 1 2 2
|
||||
slash_dash_dash FALSE TRUE FALSE FALSE FALSE
|
||||
=
|
||||
Note that |--| occurring on its own, outside of a run of slashes, has by
|
||||
definition no effect, and disappears without trace in this process.
|
||||
|
||||
@<Annotate the CG tokens with slash-class and slash-dash-dash@> =
|
||||
LOOP_THROUGH_CG_TOKENS(pn, cgl)
|
||||
Annotations::write_int(pn, slash_class_ANNOT, 0);
|
||||
LOOP_THROUGH_CG_TOKENS(cgt, cgl) cgt->slash_class = 0;
|
||||
|
||||
int alternatives_group = 0;
|
||||
parse_node *class_start = NULL;
|
||||
LOOP_THROUGH_CG_TOKENS(pn, cgl) {
|
||||
if ((pn->next) && (Wordings::length(Node::get_text(pn->next)) == 1) &&
|
||||
(Lexer::word(Wordings::first_wn(Node::get_text(pn->next))) == FORWARDSLASH_V)) {
|
||||
if (Annotations::read_int(pn, slash_class_ANNOT) == 0) {
|
||||
class_start = pn; alternatives_group++; /* start new equiv class */
|
||||
Annotations::write_int(class_start, slash_dash_dash_ANNOT, FALSE);
|
||||
cg_token *class_start = NULL;
|
||||
LOOP_THROUGH_CG_TOKENS(cgt, cgl) {
|
||||
if ((cgt->next_token) && (Wordings::length(CGTokens::text(cgt->next_token)) == 1) &&
|
||||
(Lexer::word(Wordings::first_wn(CGTokens::text(cgt->next_token))) == FORWARDSLASH_V)) {
|
||||
if (cgt->slash_class == 0) {
|
||||
class_start = cgt; alternatives_group++; /* start new equiv class */
|
||||
class_start->slash_dash_dash = FALSE;
|
||||
}
|
||||
Annotations::write_int(pn, slash_class_ANNOT, alternatives_group);
|
||||
if (pn->next->next)
|
||||
Annotations::write_int(pn->next->next, slash_class_ANNOT, alternatives_group);
|
||||
if ((pn->next->next) &&
|
||||
(Wordings::length(Node::get_text(pn->next->next)) == 1) &&
|
||||
(Lexer::word(Wordings::first_wn(Node::get_text(pn->next->next))) == DOUBLEDASH_V)) {
|
||||
Annotations::write_int(class_start, slash_dash_dash_ANNOT, TRUE);
|
||||
pn->next = pn->next->next->next; /* excise slash and dash-dash */
|
||||
cgt->slash_class = alternatives_group;
|
||||
if (cgt->next_token->next_token)
|
||||
cgt->next_token->next_token->slash_class = alternatives_group;
|
||||
if ((cgt->next_token->next_token) &&
|
||||
(Wordings::length(CGTokens::text(cgt->next_token->next_token)) == 1) &&
|
||||
(Lexer::word(Wordings::first_wn(CGTokens::text(cgt->next_token->next_token))) == DOUBLEDASH_V)) {
|
||||
class_start->slash_dash_dash = TRUE;
|
||||
cgt->next_token = cgt->next_token->next_token->next_token; /* excise slash and dash-dash */
|
||||
} else {
|
||||
pn->next = pn->next->next; /* excise the slash from the token list */
|
||||
cgt->next_token = cgt->next_token->next_token; /* excise the slash from the token list */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@<Throw a problem if slash has been used with non-literal tokens@> =
|
||||
LOOP_THROUGH_CG_TOKENS(pn, cgl)
|
||||
if ((Annotations::read_int(pn, slash_class_ANNOT) > 0) &&
|
||||
(Annotations::read_int(pn, grammar_token_literal_ANNOT) == FALSE)) {
|
||||
LOOP_THROUGH_CG_TOKENS(cgt, cgl)
|
||||
if ((cgt->slash_class > 0) &&
|
||||
(CGTokens::is_literal(cgt) == FALSE)) {
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(),
|
||||
_p_(PM_OverAmbitiousSlash),
|
||||
"the slash '/' can only be used between single literal words",
|
||||
|
@ -355,24 +347,24 @@ definition no effect, and disappears without trace in this process.
|
|||
of groups arising from the calculations just done. In this example there are 4:
|
||||
= (text)
|
||||
take up in all washing laundry linen
|
||||
slash_class_ANNOT 0 1 1 0 2 2 2
|
||||
slash_class 0 1 1 0 2 2 2
|
||||
lexemes +--+ +---+ +-+ +-------------------+
|
||||
=
|
||||
And in this one 3:
|
||||
= (text)
|
||||
near the that tree shrub
|
||||
slash_class_ANNOT 0 1 1 2 2
|
||||
slash_class 0 1 1 2 2
|
||||
lexemes +--+ +-------+ +---------+
|
||||
=
|
||||
|
||||
@<Calculate the lexeme count@> =
|
||||
cgl->lexeme_count = 0;
|
||||
LOOP_THROUGH_CG_TOKENS(pn, cgl) {
|
||||
int i = Annotations::read_int(pn, slash_class_ANNOT);
|
||||
LOOP_THROUGH_CG_TOKENS(cgt, cgl) {
|
||||
int i = cgt->slash_class;
|
||||
if (i > 0)
|
||||
while ((pn->next) &&
|
||||
(Annotations::read_int(pn->next, slash_class_ANNOT) == i))
|
||||
pn = pn->next;
|
||||
while ((cgt->next_token) &&
|
||||
(cgt->next_token->slash_class == i))
|
||||
cgt = cgt->next_token;
|
||||
cgl->lexeme_count++;
|
||||
}
|
||||
|
||||
|
@ -385,19 +377,19 @@ affect how the list will be arranged when it is compiled.
|
|||
@d CGL_SCORE_BUMP (CGL_SCORE_TOKEN_RANGE*CGL_SCORE_TOKEN_RANGE)
|
||||
|
||||
=
|
||||
void UnderstandLines::cgl_determine(cg_line *cgl, command_grammar *cg, int depth) {
|
||||
void CGLines::cgl_determine(cg_line *cgl, command_grammar *cg, int depth) {
|
||||
LOGIF(GRAMMAR_CONSTRUCTION, "Determining $g\n", cgl);
|
||||
LOG_INDENT;
|
||||
current_sentence = cgl->where_grammar_specified;
|
||||
cgl->understanding_sort_bonus = 0;
|
||||
cgl->general_sort_bonus = 0;
|
||||
|
||||
parse_node *first = cgl->tokens->down; /* start from first token... */
|
||||
cg_token *first = cgl->tokens; /* start from first token... */
|
||||
if ((CommandGrammars::cg_is_genuinely_verbal(cg)) && (first))
|
||||
first = first->next; /* ...unless it's in a nonempty command verb grammar */
|
||||
first = first->next_token; /* ...unless it's in a nonempty command verb grammar */
|
||||
|
||||
int line_length = 0;
|
||||
for (parse_node *cgt = first; cgt; cgt = cgt->next) line_length++;
|
||||
for (cg_token *cgt = first; cgt; cgt = cgt->next_token) line_length++;
|
||||
|
||||
int multiples = 0;
|
||||
@<Make the actual calculations@>;
|
||||
|
@ -453,22 +445,22 @@ parsing the player's command at run-time. For the exact sorting rules, see below
|
|||
|
||||
@<Make the actual calculations@> =
|
||||
int nulls_count = 0, pos = 0;
|
||||
for (parse_node *cgt = first; cgt; cgt = cgt->next) {
|
||||
for (cg_token *cgtt = first; cgtt; cgtt = cgtt->next_token) {
|
||||
int score = 0;
|
||||
parse_node *spec = UnderstandTokens::determine(cgt, depth, &score);
|
||||
parse_node *spec = CGTokens::determine(cgtt, depth, &score);
|
||||
LOGIF(GRAMMAR_CONSTRUCTION, "token %d/%d: <%W> --> $P (score %d)\n",
|
||||
pos+1, line_length, Node::get_text(cgt), spec, score);
|
||||
pos+1, line_length, CGTokens::text(cgtt), spec, score);
|
||||
if (spec) {
|
||||
@<Text tokens contribute also to the understanding sort bonus@>;
|
||||
int score_multiplier = 1;
|
||||
if (DeterminationTypes::get_no_values_described(&(cgl->cgl_type)) == 0)
|
||||
score_multiplier = CGL_SCORE_TOKEN_RANGE;
|
||||
DeterminationTypes::add_term(&(cgl->cgl_type), spec,
|
||||
UnderstandTokens::is_multiple(cgt));
|
||||
CGTokens::is_multiple(cgtt));
|
||||
cgl->general_sort_bonus += score*score_multiplier;
|
||||
} else nulls_count++;
|
||||
|
||||
if (UnderstandTokens::is_multiple(cgt)) multiples++;
|
||||
if (CGTokens::is_multiple(cgtt)) multiples++;
|
||||
pos++;
|
||||
}
|
||||
if (nulls_count == line_length)
|
||||
|
@ -490,11 +482,11 @@ which parses to a |K_understanding| match.
|
|||
|
||||
@h Sorting the lines in a grammar.
|
||||
The CGLs in a grammar are insertion sorted into a sorted version. This is not
|
||||
the controversial part: //UnderstandLines::cg_line_must_precede// is the part
|
||||
the controversial part: //CGLines::cg_line_must_precede// is the part
|
||||
people argued over for years.
|
||||
|
||||
=
|
||||
cg_line *UnderstandLines::list_sort(command_grammar *cg) {
|
||||
cg_line *CGLines::list_sort(command_grammar *cg) {
|
||||
cg_line *unsorted_head = cg->first_line;
|
||||
if (unsorted_head == NULL) return NULL;
|
||||
|
||||
|
@ -505,7 +497,7 @@ cg_line *UnderstandLines::list_sort(command_grammar *cg) {
|
|||
while (cgl->next_line) {
|
||||
cgl = cgl->next_line;
|
||||
cg_line *cgl2 = sorted_head;
|
||||
if (UnderstandLines::cg_line_must_precede(cg, cgl, cgl2)) {
|
||||
if (CGLines::cg_line_must_precede(cg, cgl, cgl2)) {
|
||||
sorted_head = cgl;
|
||||
cgl->sorted_next_line = cgl2;
|
||||
continue;
|
||||
|
@ -517,7 +509,7 @@ cg_line *UnderstandLines::list_sort(command_grammar *cg) {
|
|||
cgl3->sorted_next_line = cgl;
|
||||
break;
|
||||
}
|
||||
if (UnderstandLines::cg_line_must_precede(cg, cgl, cgl2)) {
|
||||
if (CGLines::cg_line_must_precede(cg, cgl, cgl2)) {
|
||||
cgl3->sorted_next_line = cgl;
|
||||
cgl->sorted_next_line = cgl2;
|
||||
break;
|
||||
|
@ -547,13 +539,13 @@ least 2010, and will not change again.
|
|||
|
||||
[1] Well... roughly. See //CommandParserKit: Parser// for the gory details.
|
||||
|
||||
@ The code in //UnderstandLines::cgl_determine// looked as if we would decide
|
||||
@ The code in //CGLines::cgl_determine// looked as if we would decide
|
||||
if line |L1| precedes |L2| by adding up their score bonuses, and letting the
|
||||
higher scorer go first. That is in fact nearly equivalent to the following,
|
||||
but not quite.
|
||||
|
||||
=
|
||||
int UnderstandLines::cg_line_must_precede(command_grammar *cg, cg_line *L1, cg_line *L2) {
|
||||
int CGLines::cg_line_must_precede(command_grammar *cg, cg_line *L1, cg_line *L2) {
|
||||
@<Perform some sanity checks@>;
|
||||
@<Nothing precedes itself@>;
|
||||
@<Lower understanding penalties precede higher ones@>;
|
||||
|
@ -634,12 +626,12 @@ after |"look"|, or else the command parser will respond to LOOK by replying
|
|||
@ This next rule is a lexeme-based tiebreaker. We only get here if there
|
||||
are the same number of lexemes in the two CGLs being compared. Lines in which
|
||||
all tokens are literal words, like "tossed egg salad", are scored so highly
|
||||
that they will always come first: see //UnderstandLines::cgl_determine//.
|
||||
that they will always come first: see //CGLines::cgl_determine//.
|
||||
But if one of the tokens is not literal, then we score it in such a way that
|
||||
the specificity of the tokens is what decides. The first token is more important
|
||||
than the second, and a more specific token comes before a lower one.
|
||||
|
||||
See //UnderstandTokens::determine// for how the score of an individual token
|
||||
See //CGTokens::determine// for how the score of an individual token
|
||||
is worked out.
|
||||
|
||||
@<Higher sort bonuses precede lower ones@> =
|
||||
|
@ -660,10 +652,10 @@ condition holds beats a match of |"draw [thing]"| at any time, and this is
|
|||
necessary under the strict superset principle.
|
||||
|
||||
@<Conditional readings precede unconditional readings@> =
|
||||
if ((UnderstandLines::conditional(L1)) &&
|
||||
(UnderstandLines::conditional(L2) == FALSE)) return TRUE;
|
||||
if ((UnderstandLines::conditional(L1) == FALSE) &&
|
||||
(UnderstandLines::conditional(L2))) return FALSE;
|
||||
if ((CGLines::conditional(L1)) &&
|
||||
(CGLines::conditional(L2) == FALSE)) return TRUE;
|
||||
if ((CGLines::conditional(L1) == FALSE) &&
|
||||
(CGLines::conditional(L2))) return FALSE;
|
||||
|
||||
@ Getting down to here looks difficult, given the number of things about |L1|
|
||||
and |L2| which have to match up -- same USB, GSB, number of lexemes,
|
||||
|
|
|
@ -1,23 +1,75 @@
|
|||
[UnderstandTokens::] Grammar Tokens.
|
||||
[CGTokens::] Command Grammar Tokens.
|
||||
|
||||
To handle grammar at the level of individual tokens. I7 grammar
|
||||
tokens correspond in a 1-to-1 way with I6 tokens: here we determine the I7
|
||||
type a token represents (if any) and compile it to its I6 grammar token
|
||||
equivalent as needed.
|
||||
CGs are list of CG lines, which are lists of CG tokens.
|
||||
|
||||
@ I7 tokens are (at present) stored simply as parse tree nodes of type
|
||||
|TOKEN_NT|, with meaningful information hidden in annotations. At one
|
||||
time I thought this was a simple arrangement, but it now seems obfuscatory,
|
||||
so at some point I plan to create a "grammar token" structure to avoid
|
||||
these arcane annotations of the parse tree.
|
||||
@
|
||||
|
||||
|grammar_token_nonliteral_ANNOT| is clear for literal words such as |"into"|
|
||||
and set for square-bracketed tokens such as |"[something]"|.
|
||||
=
|
||||
typedef struct cg_token {
|
||||
struct wording text_of_token;
|
||||
int is_literal;
|
||||
int slash_class;
|
||||
int slash_dash_dash;
|
||||
int grammar_token_code;
|
||||
struct parse_node *grammar_value; /* 0 or else one of the |*_GTC| values */
|
||||
struct binary_predicate *token_relation;
|
||||
struct cg_token *next_token;
|
||||
CLASS_DEFINITION
|
||||
} cg_token;
|
||||
|
||||
|index| stores the GSB scoring contribution made by the token to the
|
||||
CGL sorting algorithm.
|
||||
wording CGTokens::text(cg_token *cgt) {
|
||||
return cgt?(cgt->text_of_token):(EMPTY_WORDING);
|
||||
}
|
||||
|
||||
The |grammar_token_code_ANNOT| annotation is meaningful only for parse nodes
|
||||
@ Tokens with a nonzero |grammar_token_code| correspond closely to what are
|
||||
also called "tokens" in the runtime command parser.
|
||||
|
||||
@d NAMED_TOKEN_GTC 1 /* these positive values are used only in parsing */
|
||||
@d RELATED_GTC 2
|
||||
@d STUFF_GTC 3
|
||||
@d ANY_STUFF_GTC 4
|
||||
@d ANY_THINGS_GTC 5
|
||||
@d NOUN_TOKEN_GTC -1 /* I6 |noun| */
|
||||
@d MULTI_TOKEN_GTC -2 /* I6 |multi| */
|
||||
@d MULTIINSIDE_TOKEN_GTC -3 /* I6 |multiinside| */
|
||||
@d MULTIHELD_TOKEN_GTC -4 /* I6 |multiheld| */
|
||||
@d HELD_TOKEN_GTC -5 /* I6 |held| */
|
||||
@d CREATURE_TOKEN_GTC -6 /* I6 |creature| */
|
||||
@d TOPIC_TOKEN_GTC -7 /* I6 |topic| */
|
||||
@d MULTIEXCEPT_TOKEN_GTC -8 /* I6 |multiexcept| */
|
||||
|
||||
=
|
||||
void CGTokens::log(cg_token *cgt) {
|
||||
if (cgt == NULL) LOG("<no-cgt>");
|
||||
else {
|
||||
LOG("<CGT%d:%W", cgt->allocation_id, cgt->text_of_token);
|
||||
if (cgt->slash_class != 0) LOG("/%d", cgt->slash_class);
|
||||
if (cgt->slash_dash_dash) LOG("/--");
|
||||
switch (cgt->grammar_token_code) {
|
||||
case NAMED_TOKEN_GTC: LOG(" = named token"); break;
|
||||
case RELATED_GTC: LOG(" = related"); break;
|
||||
case STUFF_GTC: LOG(" = stuff"); break;
|
||||
case ANY_STUFF_GTC: LOG(" = any stuff"); break;
|
||||
case ANY_THINGS_GTC: LOG(" = any things"); break;
|
||||
case NOUN_TOKEN_GTC: LOG(" = noun"); break;
|
||||
case MULTI_TOKEN_GTC: LOG(" = multi"); break;
|
||||
case MULTIINSIDE_TOKEN_GTC: LOG(" = multiinside"); break;
|
||||
case MULTIHELD_TOKEN_GTC: LOG(" = multiheld"); break;
|
||||
case HELD_TOKEN_GTC: LOG(" = held"); break;
|
||||
case CREATURE_TOKEN_GTC: LOG(" = creature"); break;
|
||||
case TOPIC_TOKEN_GTC: LOG(" = topic"); break;
|
||||
case MULTIEXCEPT_TOKEN_GTC: LOG(" = multiexcept"); break;
|
||||
}
|
||||
LOG(">");
|
||||
}
|
||||
}
|
||||
|
||||
@
|
||||
|
||||
|is_literal| is set for literal words such as |"into"|
|
||||
and clear for square-bracketed tokens such as |"[something]"|.
|
||||
|
||||
The |grammar_token_code| annotation is meaningful only for parse nodes
|
||||
with an evaluation of type |DESCRIPTION|. These are tokens which describe a
|
||||
range of objects. Examples include "[open container]", which compiles to an
|
||||
I6 noun filter, "[any container]", which compiles to an I6 scope filter, or
|
||||
|
@ -32,20 +84,6 @@ preferred order.)
|
|||
For tokens with any other evaluation, |general_purpose| is always 0, so
|
||||
that the special values below cannot arise.
|
||||
|
||||
@d NAMED_TOKEN_GTC 1 /* these positive values are used only in parsing */
|
||||
@d RELATED_GTC 2
|
||||
@d STUFF_GTC 3
|
||||
@d ANY_STUFF_GTC 4
|
||||
@d ANY_THINGS_GTC 5
|
||||
@d NOUN_TOKEN_GTC -1 /* I6 |noun| */
|
||||
@d MULTI_TOKEN_GTC -2 /* I6 |multi| */
|
||||
@d MULTIINSIDE_TOKEN_GTC -3 /* I6 |multiinside| */
|
||||
@d MULTIHELD_TOKEN_GTC -4 /* I6 |multiheld| */
|
||||
@d HELD_TOKEN_GTC -5 /* I6 |held| */
|
||||
@d CREATURE_TOKEN_GTC -6 /* I6 |creature| */
|
||||
@d TOPIC_TOKEN_GTC -7 /* I6 |topic| */
|
||||
@d MULTIEXCEPT_TOKEN_GTC -8 /* I6 |multiexcept| */
|
||||
|
||||
@ Tokens are created when text such as "drill [something] with [something]"
|
||||
is parsed, from an Understand sentence or elsewhere. What happens is much
|
||||
the same as when text with substitutions is read: that produces
|
||||
|
@ -74,39 +112,58 @@ out", a sequence of five lexical words.
|
|||
@d GRAMMAR_PUNCTUATION_MARKS L".,:;?!(){}[]/" /* note the slash... */
|
||||
|
||||
=
|
||||
void UnderstandTokens::break_into_tokens(parse_node *pn, wording W) {
|
||||
cg_token *CGTokens::break_into_tokens(cg_token *from, wording W) {
|
||||
<grammar-token-breaking>(W);
|
||||
switch (<<r>>) {
|
||||
case NOT_APPLICABLE: {
|
||||
wording LW = GET_RW(<grammar-token-breaking>, 1);
|
||||
wording RW = GET_RW(<grammar-token-breaking>, 2);
|
||||
UnderstandTokens::break_into_tokens(pn, LW);
|
||||
UnderstandTokens::break_into_tokens(pn, RW);
|
||||
from = CGTokens::break_into_tokens(from, LW);
|
||||
from = CGTokens::break_into_tokens(from, RW);
|
||||
break;
|
||||
}
|
||||
case TRUE:
|
||||
Word::dequote(Wordings::first_wn(W));
|
||||
if (*(Lexer::word_text(Wordings::first_wn(W))) == 0) return;
|
||||
if (*(Lexer::word_text(Wordings::first_wn(W))) == 0) return from;
|
||||
W = Feeds::feed_C_string_full(Lexer::word_text(Wordings::first_wn(W)), FALSE, GRAMMAR_PUNCTUATION_MARKS);
|
||||
LOOP_THROUGH_WORDING(i, W) {
|
||||
parse_node *newpn = Diagrams::new_UNPARSED_NOUN(Wordings::one_word(i));
|
||||
Node::set_type(newpn, TOKEN_NT);
|
||||
Annotations::write_int(newpn, grammar_token_literal_ANNOT, TRUE);
|
||||
SyntaxTree::graft(Task::syntax_tree(), newpn, pn);
|
||||
cg_token *cgt = CGTokens::cgt_of(Wordings::one_word(i), TRUE);
|
||||
from = CGTokens::graft(cgt, from);
|
||||
}
|
||||
break;
|
||||
case FALSE: {
|
||||
parse_node *newpn = Diagrams::new_UNPARSED_NOUN(W);
|
||||
Node::set_type(newpn, TOKEN_NT);
|
||||
Annotations::write_int(newpn, grammar_token_literal_ANNOT, FALSE);
|
||||
SyntaxTree::graft(Task::syntax_tree(), newpn, pn);
|
||||
cg_token *cgt = CGTokens::cgt_of(W, FALSE);
|
||||
from = CGTokens::graft(cgt, from);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return from;
|
||||
}
|
||||
|
||||
int UnderstandTokens::is_literal(parse_node *pn) {
|
||||
return Annotations::read_int(pn, grammar_token_literal_ANNOT);
|
||||
cg_token *CGTokens::cgt_of(wording W, int lit) {
|
||||
cg_token *cgt = CREATE(cg_token);
|
||||
cgt->text_of_token = W;
|
||||
cgt->is_literal = lit;
|
||||
cgt->slash_dash_dash = FALSE;
|
||||
cgt->slash_class = 0;
|
||||
cgt->grammar_value = NULL;
|
||||
cgt->grammar_token_code = 0;
|
||||
cgt->token_relation = NULL;
|
||||
cgt->next_token = NULL;
|
||||
return cgt;
|
||||
}
|
||||
|
||||
cg_token *CGTokens::graft(cg_token *cgt, cg_token *list) {
|
||||
if (list == NULL) return cgt;
|
||||
if (cgt == NULL) return list;
|
||||
cg_token *x = list;
|
||||
while (x->next_token) x = x->next_token;
|
||||
x->next_token = cgt;
|
||||
return list;
|
||||
}
|
||||
|
||||
int CGTokens::is_literal(cg_token *cgt) {
|
||||
return (cgt)?(cgt->is_literal):FALSE;
|
||||
}
|
||||
|
||||
@h Multiple tokens.
|
||||
|
@ -114,8 +171,8 @@ A multiple token is one which permits multiple matches in the I6 parser: for
|
|||
instance, permits the use of "all".
|
||||
|
||||
=
|
||||
int UnderstandTokens::is_multiple(parse_node *pn) {
|
||||
switch (Annotations::read_int(pn, grammar_token_code_ANNOT)) {
|
||||
int CGTokens::is_multiple(cg_token *cgt) {
|
||||
switch (cgt->grammar_token_code) {
|
||||
case MULTI_TOKEN_GTC:
|
||||
case MULTIINSIDE_TOKEN_GTC:
|
||||
case MULTIHELD_TOKEN_GTC:
|
||||
|
@ -125,23 +182,12 @@ int UnderstandTokens::is_multiple(parse_node *pn) {
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
@h Text.
|
||||
|
||||
=
|
||||
int UnderstandTokens::is_text(parse_node *pn) {
|
||||
switch (Annotations::read_int(pn, grammar_token_code_ANNOT)) {
|
||||
case TOPIC_TOKEN_GTC:
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@h The special tokens.
|
||||
Do not change any of these GTC numbers without first checking and updating
|
||||
the discussion of CGL sorting in //Command Grammar Lines//:
|
||||
|
||||
=
|
||||
int UnderstandTokens::gsb_for_special_token(int gtc) {
|
||||
int CGTokens::gsb_for_special_token(int gtc) {
|
||||
switch(gtc) {
|
||||
case NOUN_TOKEN_GTC: return 0;
|
||||
case MULTI_TOKEN_GTC: return 0;
|
||||
|
@ -159,7 +205,7 @@ int UnderstandTokens::gsb_for_special_token(int gtc) {
|
|||
@ These translate into I6 as follows:
|
||||
|
||||
=
|
||||
char *UnderstandTokens::i6_token_for_special_token(int gtc) {
|
||||
char *CGTokens::i6_token_for_special_token(int gtc) {
|
||||
switch(gtc) {
|
||||
case NOUN_TOKEN_GTC: return "noun";
|
||||
case MULTI_TOKEN_GTC: return "multi";
|
||||
|
@ -174,7 +220,7 @@ char *UnderstandTokens::i6_token_for_special_token(int gtc) {
|
|||
return ""; /* to prevent a gcc error: never reached */
|
||||
}
|
||||
|
||||
inter_name *UnderstandTokens::iname_for_special_token(int gtc) {
|
||||
inter_name *CGTokens::iname_for_special_token(int gtc) {
|
||||
switch(gtc) {
|
||||
case NOUN_TOKEN_GTC: return VERB_DIRECTIVE_NOUN_iname;
|
||||
case MULTI_TOKEN_GTC: return VERB_DIRECTIVE_MULTI_iname;
|
||||
|
@ -189,7 +235,7 @@ inter_name *UnderstandTokens::iname_for_special_token(int gtc) {
|
|||
return NULL; /* to prevent a gcc error: never reached */
|
||||
}
|
||||
|
||||
char *UnderstandTokens::i6_constant_for_special_token(int gtc) {
|
||||
char *CGTokens::i6_constant_for_special_token(int gtc) {
|
||||
switch(gtc) {
|
||||
case NOUN_TOKEN_GTC: return "NOUN_TOKEN";
|
||||
case MULTI_TOKEN_GTC: return "MULTI_TOKEN";
|
||||
|
@ -208,7 +254,7 @@ char *UnderstandTokens::i6_constant_for_special_token(int gtc) {
|
|||
to be used in I7: these are defined by the following routine.
|
||||
|
||||
=
|
||||
kind *UnderstandTokens::kind_for_special_token(int gtc) {
|
||||
kind *CGTokens::kind_for_special_token(int gtc) {
|
||||
if ((K_understanding) && (gtc == TOPIC_TOKEN_GTC)) return K_understanding;
|
||||
return K_object;
|
||||
}
|
||||
|
@ -300,12 +346,12 @@ kind *UnderstandTokens::kind_for_special_token(int gtc) {
|
|||
==> { MULTI_TOKEN_GTC, NULL };
|
||||
|
||||
@<Issue something held problem message@> =
|
||||
UnderstandTokens::incompatible_change_problem(
|
||||
CGTokens::incompatible_change_problem(
|
||||
"something held", "something", "something preferably held");
|
||||
==> { HELD_TOKEN_GTC, NULL };
|
||||
|
||||
@<Issue things held problem message@> =
|
||||
UnderstandTokens::incompatible_change_problem(
|
||||
CGTokens::incompatible_change_problem(
|
||||
"things held", "things", "things preferably held");
|
||||
==> { MULTIHELD_TOKEN_GTC, NULL };
|
||||
|
||||
|
@ -313,7 +359,7 @@ kind *UnderstandTokens::kind_for_special_token(int gtc) {
|
|||
that nobody complained about what might have been a controversial change.
|
||||
|
||||
=
|
||||
void UnderstandTokens::incompatible_change_problem(char *token_tried, char *token_instead,
|
||||
void CGTokens::incompatible_change_problem(char *token_tried, char *token_instead,
|
||||
char *token_better) {
|
||||
Problems::quote_source(1, current_sentence);
|
||||
Problems::quote_text(2, token_tried);
|
||||
|
@ -367,12 +413,12 @@ void UnderstandTokens::incompatible_change_problem(char *token_tried, char *toke
|
|||
|
||||
|
||||
=
|
||||
parse_node *UnderstandTokens::determine(parse_node *pn, int depth, int *score) {
|
||||
if (Annotations::read_int(pn, grammar_token_literal_ANNOT)) return NULL;
|
||||
parse_node *CGTokens::determine(cg_token *cgt, int depth, int *score) {
|
||||
if (CGTokens::is_literal(cgt)) return NULL;
|
||||
|
||||
<<command_grammar:named>> = NULL;
|
||||
parse_node *spec = NULL;
|
||||
<grammar-token>(Node::get_text(pn));
|
||||
<grammar-token>(CGTokens::text(cgt));
|
||||
switch (<<r>>) {
|
||||
case NAMED_TOKEN_GTC: @<Determine a named grammar token@>; break;
|
||||
case ANY_STUFF_GTC: @<Determine an any grammar token@>; break;
|
||||
|
@ -388,39 +434,37 @@ parse_node *UnderstandTokens::determine(parse_node *pn, int depth, int *score) {
|
|||
@<Determine a named grammar token@> =
|
||||
parse_node *val = ParsingPlugin::rvalue_from_command_grammar(<<command_grammar:named>>);
|
||||
spec = CommandGrammars::determine(<<command_grammar:named>>, depth+1);
|
||||
Node::set_grammar_value(pn, val);
|
||||
cgt->grammar_value = val;
|
||||
|
||||
@<Determine an any grammar token@> =
|
||||
spec = <<parse_node:s>>;
|
||||
if (Specifications::is_description(spec)) {
|
||||
int any_things = FALSE;
|
||||
if (<<r>> == ANY_THINGS_GTC) any_things = TRUE;
|
||||
Annotations::write_int(pn, grammar_token_code_ANNOT,
|
||||
UnderstandFilterTokens::new_id(spec, TRUE, any_things));
|
||||
Node::set_grammar_value(pn, spec);
|
||||
cgt->grammar_token_code = UnderstandFilterTokens::new_id(spec, TRUE, any_things);
|
||||
cgt->grammar_value = spec;
|
||||
}
|
||||
|
||||
@<Determine a related grammar token@> =
|
||||
binary_predicate *bp = <<rp>>;
|
||||
if (bp) Node::set_grammar_token_relation(pn, bp);
|
||||
if (bp) cgt->token_relation = bp;
|
||||
|
||||
@<Determine a kind grammar token@> =
|
||||
spec = <<parse_node:s>>;
|
||||
Node::set_grammar_value(pn, spec);
|
||||
cgt->grammar_value = spec;
|
||||
if (Specifications::is_description_like(spec)) {
|
||||
*score = 5;
|
||||
Annotations::write_int(pn, grammar_token_code_ANNOT,
|
||||
UnderstandFilterTokens::new_id(spec, FALSE, FALSE));
|
||||
cgt->grammar_token_code = UnderstandFilterTokens::new_id(spec, FALSE, FALSE);
|
||||
}
|
||||
|
||||
@<Determine a special grammar token@> =
|
||||
int p = <<r>>;
|
||||
kind *K = UnderstandTokens::kind_for_special_token(p);
|
||||
kind *K = CGTokens::kind_for_special_token(p);
|
||||
spec = Specifications::from_kind(K);
|
||||
Node::set_text(spec, Node::get_text(pn));
|
||||
*score = UnderstandTokens::gsb_for_special_token(p);
|
||||
Node::set_grammar_value(pn, spec);
|
||||
Annotations::write_int(pn, grammar_token_code_ANNOT, p);
|
||||
Node::set_text(spec, CGTokens::text(cgt));
|
||||
*score = CGTokens::gsb_for_special_token(p);
|
||||
cgt->grammar_value = spec;
|
||||
cgt->grammar_token_code = p;
|
||||
|
||||
@<Vet the grammar token determination for parseability at run-time@> =
|
||||
if (Specifications::is_description(spec)) {
|
||||
|
@ -430,7 +474,7 @@ parse_node *UnderstandTokens::determine(parse_node *pn, int depth, int *score) {
|
|||
(Kinds::eq(K, K_understanding) == FALSE) &&
|
||||
(Kinds::Behaviour::request_I6_GPR(K) == FALSE)) {
|
||||
Problems::quote_source(1, current_sentence);
|
||||
Problems::quote_wording(2, Node::get_text(pn));
|
||||
Problems::quote_wording(2, CGTokens::text(cgt));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(),
|
||||
_p_(PM_UnparsableKind));
|
||||
Problems::issue_problem_segment(
|
|
@ -236,7 +236,7 @@ dropping action":
|
|||
=
|
||||
void CommandGrammars::remove_action(command_grammar *cg, action_name *an) {
|
||||
if (cg->cg_is == CG_IS_COMMAND)
|
||||
UnderstandLines::list_remove(cg, an);
|
||||
CGLines::list_remove(cg, an);
|
||||
}
|
||||
|
||||
@h The CG_IS_TOKEN form.
|
||||
|
@ -415,7 +415,7 @@ int CommandGrammars::is_empty(command_grammar *cg) {
|
|||
void CommandGrammars::add_line(command_grammar *cg, cg_line *cgl) {
|
||||
LOGIF(GRAMMAR, "$G + line: $g\n", cg, cgl);
|
||||
if ((cg->cg_is == CG_IS_COMMAND) &&
|
||||
(UnderstandLines::list_length(cg) >= MAX_LINES_PER_GRAMMAR)) {
|
||||
(CGLines::list_length(cg) >= MAX_LINES_PER_GRAMMAR)) {
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_TooManyGrammarLines),
|
||||
"this command verb now has too many Understand possibilities",
|
||||
"that is, there are too many 'Understand \"whatever ...\" as ...' "
|
||||
|
@ -424,7 +424,7 @@ void CommandGrammars::add_line(command_grammar *cg, cg_line *cgl) {
|
|||
"together, perhaps by using slashes to combine alternative "
|
||||
"wordings, or by defining new grammar tokens [in square brackets].");
|
||||
} else {
|
||||
UnderstandLines::list_add(cg, cgl);
|
||||
CGLines::list_add(cg, cgl);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -451,7 +451,7 @@ void CommandGrammars::prepare(void) {
|
|||
LOOP_OVER(cg, command_grammar)
|
||||
if ((cg->slashed == FALSE) && (cg->first_line)) {
|
||||
LOGIF(GRAMMAR_CONSTRUCTION, "Slashing $G\n", cg);
|
||||
UnderstandLines::slash(cg);
|
||||
CGLines::slash(cg);
|
||||
cg->slashed = TRUE;
|
||||
}
|
||||
Log::new_stage(I"Determining command grammar");
|
||||
|
@ -479,7 +479,7 @@ parse_node *CommandGrammars::determine(command_grammar *cg, int depth) {
|
|||
LOGIF(GRAMMAR_CONSTRUCTION, "Determining $G\n", cg);
|
||||
LOG_INDENT;
|
||||
LOOP_THROUGH_UNSORTED_CG_LINES(cgl, cg)
|
||||
UnderstandLines::cgl_determine(cgl, cg, depth);
|
||||
CGLines::cgl_determine(cgl, cg, depth);
|
||||
LOG_OUTDENT;
|
||||
parse_node *spec_union = NULL;
|
||||
@<Take the union of the single-term results of each line@>;
|
||||
|
@ -571,5 +571,5 @@ sort once, so:
|
|||
=
|
||||
void CommandGrammars::sort_command_grammar(command_grammar *cg) {
|
||||
if (cg->sorted_first_line == NULL)
|
||||
cg->sorted_first_line = UnderstandLines::list_sort(cg);
|
||||
cg->sorted_first_line = CGLines::list_sort(cg);
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ chapter.
|
|||
|
||||
=
|
||||
void ParsingPlugin::start(void) {
|
||||
ParsingNodes::nodes_and_annotations();
|
||||
ParsingPlugin::nodes_and_annotations();
|
||||
|
||||
PluginManager::plug(PRODUCTION_LINE_PLUG, ParsingPlugin::production_line);
|
||||
PluginManager::plug(MAKE_SPECIAL_MEANINGS_PLUG, Understand::make_special_meanings);
|
||||
|
@ -210,3 +210,26 @@ where grammar has specified a need. (By default, this will not happen.)
|
|||
if (S)
|
||||
ValueProperties::assert(P_parse_name, subj,
|
||||
Rvalues::from_iname(S), CERTAIN_CE);
|
||||
|
||||
@ Finally, this plugin needs just one new annotation for the parse tree:
|
||||
|
||||
@e constant_command_grammar_ANNOT /* |command_grammar|: for constant values */
|
||||
|
||||
= (early code)
|
||||
DECLARE_ANNOTATION_FUNCTIONS(constant_command_grammar, command_grammar)
|
||||
|
||||
@ =
|
||||
MAKE_ANNOTATION_FUNCTIONS(constant_command_grammar, command_grammar)
|
||||
|
||||
void ParsingPlugin::nodes_and_annotations(void) {
|
||||
Annotations::declare_type(constant_command_grammar_ANNOT,
|
||||
ParsingPlugin::write_constant_grammar_verb_ANNOT);
|
||||
|
||||
Annotations::allow(CONSTANT_NT, constant_command_grammar_ANNOT);
|
||||
}
|
||||
|
||||
void ParsingPlugin::write_constant_grammar_verb_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
if (Node::get_constant_command_grammar(p))
|
||||
WRITE(" {command grammar: CG%d}",
|
||||
Node::get_constant_command_grammar(p)->allocation_id);
|
||||
}
|
||||
|
|
|
@ -1,72 +0,0 @@
|
|||
[ParsingNodes::] Parsing-Only Nodes and Annotations.
|
||||
|
||||
Additional syntax tree node and annotation types used by the parsing plugin.
|
||||
|
||||
@ There is just one additional node type, used for tokens in Understand grammar,
|
||||
but there are also several new annotations:
|
||||
|
||||
@e TOKEN_NT /* used for tokens in grammar */
|
||||
|
||||
@e constant_command_grammar_ANNOT /* |command_grammar|: for constant values */
|
||||
@e grammar_token_literal_ANNOT /* int: for grammar tokens which are literal words */
|
||||
@e grammar_token_relation_ANNOT /* |binary_predicate|: for relation tokens */
|
||||
@e grammar_value_ANNOT /* |parse_node|: used as a marker when evaluating Understand grammar */
|
||||
@e slash_class_ANNOT /* int: used when partitioning grammar tokens */
|
||||
@e slash_dash_dash_ANNOT /* |int|: used when partitioning grammar tokens */
|
||||
|
||||
= (early code)
|
||||
DECLARE_ANNOTATION_FUNCTIONS(constant_command_grammar, command_grammar)
|
||||
|
||||
@ =
|
||||
MAKE_ANNOTATION_FUNCTIONS(constant_command_grammar, command_grammar)
|
||||
|
||||
void ParsingNodes::nodes_and_annotations(void) {
|
||||
NodeType::new(TOKEN_NT, I"TOKEN_NT", 0, INFTY, L3_NCAT, 0);
|
||||
|
||||
Annotations::declare_type(constant_command_grammar_ANNOT,
|
||||
ParsingNodes::write_constant_grammar_verb_ANNOT);
|
||||
Annotations::declare_type(grammar_token_literal_ANNOT,
|
||||
ParsingNodes::write_grammar_token_literal_ANNOT);
|
||||
Annotations::declare_type(grammar_token_relation_ANNOT,
|
||||
ParsingNodes::write_grammar_token_relation_ANNOT);
|
||||
Annotations::declare_type(grammar_value_ANNOT,
|
||||
ParsingNodes::write_grammar_value_ANNOT);
|
||||
Annotations::declare_type(slash_class_ANNOT,
|
||||
ParsingNodes::write_slash_class_ANNOT);
|
||||
Annotations::declare_type(slash_dash_dash_ANNOT,
|
||||
ParsingNodes::write_slash_dash_dash_ANNOT);
|
||||
|
||||
Annotations::allow(CONSTANT_NT, constant_command_grammar_ANNOT);
|
||||
Annotations::allow(TOKEN_NT, grammar_token_literal_ANNOT);
|
||||
Annotations::allow(TOKEN_NT, grammar_token_relation_ANNOT);
|
||||
Annotations::allow(TOKEN_NT, grammar_value_ANNOT);
|
||||
Annotations::allow(TOKEN_NT, slash_class_ANNOT);
|
||||
Annotations::allow(PROPER_NOUN_NT, slash_dash_dash_ANNOT);
|
||||
}
|
||||
|
||||
@ And for the debugging log:
|
||||
|
||||
=
|
||||
void ParsingNodes::write_constant_grammar_verb_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
if (Node::get_constant_command_grammar(p))
|
||||
WRITE(" {command grammar: CG%d}", Node::get_constant_command_grammar(p)->allocation_id);
|
||||
}
|
||||
void ParsingNodes::write_grammar_token_literal_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
WRITE(" {grammar token literal: %d}",
|
||||
Annotations::read_int(p, grammar_token_literal_ANNOT));
|
||||
}
|
||||
void ParsingNodes::write_grammar_token_relation_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
binary_predicate *bp = Node::get_grammar_token_relation(p);
|
||||
if (bp) WRITE(" {grammar token relation: %S}", bp->debugging_log_name);
|
||||
}
|
||||
void ParsingNodes::write_grammar_value_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
WRITE(" {grammar value: $P}", Node::get_grammar_value(p));
|
||||
}
|
||||
void ParsingNodes::write_slash_class_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
if (Annotations::read_int(p, slash_class_ANNOT) > 0)
|
||||
WRITE(" {slash: %d}", Annotations::read_int(p, slash_class_ANNOT));
|
||||
}
|
||||
void ParsingNodes::write_slash_dash_dash_ANNOT(text_stream *OUT, parse_node *p) {
|
||||
if (Annotations::read_int(p, slash_dash_dash_ANNOT) > 0)
|
||||
WRITE(" {slash-dash-dash: %d}", Annotations::read_int(p, slash_dash_dash_ANNOT));
|
||||
}
|
|
@ -662,7 +662,7 @@ command_grammar *Understand::consultation(wording W) {
|
|||
|
||||
@h Text blocks.
|
||||
And finally, here we perform a lengthy shopping list of checks for validity, but
|
||||
then in all cases we create a single new CG line with //UnderstandLines::new//
|
||||
then in all cases we create a single new CG line with //CGLines::new//
|
||||
and add it to a suitably chosen CG with //CommandGrammars::add_line//.
|
||||
|
||||
=
|
||||
|
@ -680,7 +680,7 @@ void Understand::text_block(wording W, understanding_reference *ur) {
|
|||
|
||||
@<Only objects can be understood in the plural@>;
|
||||
|
||||
parse_node *tokens = NULL; cg_line *cgl = NULL; command_grammar *cg = NULL;
|
||||
cg_token *tokens = NULL; cg_line *cgl = NULL; command_grammar *cg = NULL;
|
||||
@<Tokenise the quoted text W into the raw tokens for a CG line@>;
|
||||
@<Make the new CG line@>;
|
||||
@<Decide which command grammar the new line should go to@>;
|
||||
|
@ -839,9 +839,8 @@ void Understand::text_block(wording W, understanding_reference *ur) {
|
|||
GRAMMAR_PUNCTUATION_MARKS);
|
||||
@<Reject this if it contains two consecutive commas@>;
|
||||
|
||||
tokens = Diagrams::new_UNPARSED_NOUN(W);
|
||||
UnderstandTokens::break_into_tokens(tokens, tokenised);
|
||||
if (tokens->down == NULL) {
|
||||
tokens = CGTokens::break_into_tokens(NULL, tokenised);
|
||||
if (tokens == NULL) {
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(),
|
||||
_p_(PM_UnderstandEmptyText),
|
||||
"'understand' should be followed by text which contains at least "
|
||||
|
@ -852,7 +851,6 @@ void Understand::text_block(wording W, understanding_reference *ur) {
|
|||
"understanding.");
|
||||
return;
|
||||
}
|
||||
LOGIF(GRAMMAR_CONSTRUCTION, "Tokenised: $T\n", tokens);
|
||||
|
||||
@<Reject this if it contains punctuation@> =
|
||||
int skip = FALSE, literal_punct = FALSE;
|
||||
|
@ -894,13 +892,13 @@ void Understand::text_block(wording W, understanding_reference *ur) {
|
|||
}
|
||||
|
||||
@<Make the new CG line@> =
|
||||
cgl = UnderstandLines::new(W, ur->an_reference, tokens,
|
||||
cgl = CGLines::new(W, ur->an_reference, tokens,
|
||||
ur->reversed_reference, ur->pluralised_reference);
|
||||
if (ur->mistaken) UnderstandLines::set_mistake(cgl, ur->mistake_text);
|
||||
if (ur->mistaken) CGLines::set_mistake(cgl, ur->mistake_text);
|
||||
if (Wordings::nonempty(ur->when_text))
|
||||
UnderstandLines::set_understand_when(cgl, ur->when_text);
|
||||
CGLines::set_understand_when(cgl, ur->when_text);
|
||||
if (Descriptions::is_qualified(ur->spec_reference))
|
||||
UnderstandLines::set_understand_prop(cgl,
|
||||
CGLines::set_understand_prop(cgl,
|
||||
Propositions::copy(Descriptions::to_proposition(ur->spec_reference)));
|
||||
LOGIF(GRAMMAR_CONSTRUCTION, "Line: $g\n", cgl);
|
||||
|
||||
|
@ -913,8 +911,8 @@ void Understand::text_block(wording W, understanding_reference *ur) {
|
|||
break;
|
||||
case CG_IS_COMMAND: {
|
||||
wording command_W = EMPTY_WORDING; /* implies the no verb verb */
|
||||
if (UnderstandTokens::is_literal(tokens->down))
|
||||
command_W = Wordings::first_word(Node::get_text(tokens->down));
|
||||
if (CGTokens::is_literal(tokens))
|
||||
command_W = Wordings::first_word(CGTokens::text(tokens));
|
||||
LOGIF(GRAMMAR_CONSTRUCTION, "Add to command grammar of command '%W': ", command_W);
|
||||
cg = CommandGrammars::for_command_verb_creating(command_W);
|
||||
break;
|
||||
|
@ -937,7 +935,7 @@ void Understand::text_block(wording W, understanding_reference *ur) {
|
|||
case CG_IS_VALUE:
|
||||
LOGIF(GRAMMAR_CONSTRUCTION, "Add to command grammar of value $P: ",
|
||||
ur->spec_reference);
|
||||
UnderstandLines::set_single_term(cgl, ur->spec_reference);
|
||||
CGLines::set_single_term(cgl, ur->spec_reference);
|
||||
cg = CommandGrammars::for_kind(Node::get_kind_of_value(ur->spec_reference));
|
||||
break;
|
||||
case CG_IS_PROPERTY_NAME:
|
||||
|
|
|
@ -55,11 +55,10 @@ Chapter 4: Actions
|
|||
Chapter 5: Command Parser
|
||||
"Understand... sentences become a grammar for the command parser to use at run-time."
|
||||
Parsing Plugin
|
||||
Parsing-Only Nodes and Annotations
|
||||
Understand Sentences
|
||||
Command Grammars
|
||||
Command Grammar Lines
|
||||
Grammar Tokens
|
||||
Command Grammar Tokens
|
||||
Determination Types
|
||||
Grammar Properties
|
||||
Noun Filter Tokens
|
||||
|
|
|
@ -163,7 +163,7 @@ void RTCommandGrammarLines::MistakeActionSub_routine(void) {
|
|||
}
|
||||
|
||||
void RTCommandGrammarLines::cgl_compile_condition_token_as_needed(cg_line *cgl) {
|
||||
if (UnderstandLines::conditional(cgl)) {
|
||||
if (CGLines::conditional(cgl)) {
|
||||
current_sentence = cgl->where_grammar_specified;
|
||||
|
||||
package_request *PR = Hierarchy::local_package(COND_TOKENS_HAP);
|
||||
|
@ -171,7 +171,7 @@ void RTCommandGrammarLines::cgl_compile_condition_token_as_needed(cg_line *cgl)
|
|||
|
||||
packaging_state save = Routines::begin(cgl->compilation_data.cond_token_iname);
|
||||
|
||||
parse_node *spec = UnderstandLines::get_understand_cond(cgl);
|
||||
parse_node *spec = CGLines::get_understand_cond(cgl);
|
||||
pcalc_prop *prop = cgl->understand_when_prop;
|
||||
|
||||
if ((spec) || (prop)) {
|
||||
|
@ -206,7 +206,7 @@ void RTCommandGrammarLines::cgl_compile_condition_token_as_needed(cg_line *cgl)
|
|||
|
||||
void RTCommandGrammarLines::cgl_compile_extra_token_for_condition(gpr_kit *gprk, cg_line *cgl,
|
||||
int cg_is, inter_symbol *current_label) {
|
||||
if (UnderstandLines::conditional(cgl)) {
|
||||
if (CGLines::conditional(cgl)) {
|
||||
if (cgl->compilation_data.cond_token_iname == NULL) internal_error("CGL cond token not ready");
|
||||
if (cg_is == CG_IS_COMMAND) {
|
||||
Emit::array_iname_entry(cgl->compilation_data.cond_token_iname);
|
||||
|
@ -247,9 +247,11 @@ of the |name| property accumulate from class to instance in I6, since
|
|||
=
|
||||
void RTCommandGrammarLines::sorted_line_list_compile(gpr_kit *gprk,
|
||||
int cg_is, command_grammar *cg, int genuinely_verbal) {
|
||||
LOG_INDENT;
|
||||
LOOP_THROUGH_SORTED_CG_LINES(cgl, cg)
|
||||
if (cgl->compilation_data.suppress_compilation == FALSE)
|
||||
RTCommandGrammarLines::compile_cg_line(gprk, cgl, cg_is, cg, genuinely_verbal);
|
||||
LOG_OUTDENT;
|
||||
}
|
||||
|
||||
@ The following apparently global variables are used to provide a persistent
|
||||
|
@ -276,7 +278,6 @@ command CGs) have not yet been type-checked, whereas all others have.
|
|||
=
|
||||
void RTCommandGrammarLines::compile_cg_line(gpr_kit *gprk, cg_line *cgl, int cg_is, command_grammar *cg,
|
||||
int genuinely_verbal) {
|
||||
parse_node *pn;
|
||||
int i;
|
||||
int token_values;
|
||||
kind *token_value_kinds[2];
|
||||
|
@ -318,16 +319,16 @@ void RTCommandGrammarLines::compile_cg_line(gpr_kit *gprk, cg_line *cgl, int cg_
|
|||
RTCommandGrammarLines::cgl_compile_extra_token_for_condition(gprk, cgl, cg_is, fail_label);
|
||||
RTCommandGrammarLines::cgl_compile_extra_token_for_mistake(cgl, cg_is);
|
||||
|
||||
pn = cgl->tokens->down;
|
||||
if ((genuinely_verbal) && (pn)) {
|
||||
if (Annotations::read_int(pn, slash_class_ANNOT) != 0) {
|
||||
cg_token *cgt = cgl->tokens;
|
||||
if ((genuinely_verbal) && (cgt)) {
|
||||
if (cgt->slash_class != 0) {
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_SlashedCommand),
|
||||
"at present you're not allowed to use a / between command "
|
||||
"words at the start of a line",
|
||||
"so 'put/interpose/insert [something]' is out.");
|
||||
return;
|
||||
}
|
||||
pn = pn->next; /* skip command word: the |Verb| header contains it already */
|
||||
cgt = cgt->next_token; /* skip command word: the |Verb| header contains it already */
|
||||
}
|
||||
|
||||
if ((cg_is == CG_IS_VALUE) && (GV_IS_VALUE_instance_mode)) {
|
||||
|
@ -342,10 +343,9 @@ void RTCommandGrammarLines::compile_cg_line(gpr_kit *gprk, cg_line *cgl, int cg_
|
|||
Produce::down(Emit::tree());
|
||||
}
|
||||
|
||||
parse_node *pn_from = pn, *pn_to = pn_from;
|
||||
for (; pn; pn = pn->next) pn_to = pn;
|
||||
|
||||
RTCommandGrammarLines::compile_token_line(gprk, code_mode, pn_from, pn_to, cg_is, consult_mode, &token_values, token_value_kinds, NULL, fail_label);
|
||||
cg_token *cgt_from = cgt, *cgt_to = cgt_from;
|
||||
for (; cgt; cgt = cgt->next_token) cgt_to = cgt;
|
||||
RTCommandGrammarLines::compile_token_line(gprk, code_mode, cgt_from, cgt_to, cg_is, consult_mode, &token_values, token_value_kinds, NULL, fail_label);
|
||||
|
||||
switch (cg_is) {
|
||||
case CG_IS_COMMAND:
|
||||
|
@ -461,24 +461,26 @@ void RTCommandGrammarLines::compile_cg_line(gpr_kit *gprk, cg_line *cgl, int cg_
|
|||
|
||||
@ =
|
||||
typedef struct slash_gpr {
|
||||
struct parse_node *first_choice;
|
||||
struct parse_node *last_choice;
|
||||
struct cg_token *first_choice;
|
||||
struct cg_token *last_choice;
|
||||
struct inter_name *sgpr_iname;
|
||||
CLASS_DEFINITION
|
||||
} slash_gpr;
|
||||
|
||||
@ =
|
||||
void RTCommandGrammarLines::compile_token_line(gpr_kit *gprk, int code_mode, parse_node *pn, parse_node *pn_to, int cg_is, int consult_mode,
|
||||
void RTCommandGrammarLines::compile_token_line(gpr_kit *gprk, int code_mode, cg_token *cgt, cg_token *cgt_to, int cg_is, int consult_mode,
|
||||
int *token_values, kind **token_value_kinds, inter_symbol *group_wn_s, inter_symbol *fail_label) {
|
||||
int lexeme_equivalence_class = 0;
|
||||
int alternative_number = 0;
|
||||
int empty_text_allowed_in_lexeme = FALSE;
|
||||
|
||||
inter_symbol *next_reserved_label = NULL;
|
||||
inter_symbol *eog_reserved_label = NULL;
|
||||
for (; pn; pn = pn->next) {
|
||||
if ((UnderstandTokens::is_text(pn)) && (pn->next) &&
|
||||
(UnderstandTokens::is_literal(pn->next) == FALSE)) {
|
||||
LOGIF(GRAMMAR_CONSTRUCTION, "Compiling token range $c -> $c\n", cgt, cgt_to);
|
||||
LOG_INDENT;
|
||||
for (; cgt; cgt = cgt->next_token) {
|
||||
LOGIF(GRAMMAR_CONSTRUCTION, "Compiling token $c\n", cgt);
|
||||
if ((cgt->grammar_token_code == TOPIC_TOKEN_GTC) && (cgt->next_token) &&
|
||||
(CGTokens::is_literal(cgt->next_token) == FALSE)) {
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_TextFollowedBy),
|
||||
"a '[text]' token must either match the end of some text, or "
|
||||
"be followed by definitely known wording",
|
||||
|
@ -486,7 +488,7 @@ void RTCommandGrammarLines::compile_token_line(gpr_kit *gprk, int code_mode, par
|
|||
"make sense of things.");
|
||||
}
|
||||
|
||||
if ((Node::get_grammar_token_relation(pn)) && (cg_is != CG_IS_SUBJECT)) {
|
||||
if ((cgt->token_relation) && (cg_is != CG_IS_SUBJECT)) {
|
||||
if (problem_count == 0)
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_GrammarObjectlessRelation),
|
||||
"a grammar token in an 'Understand...' can only be based "
|
||||
|
@ -497,17 +499,15 @@ void RTCommandGrammarLines::compile_token_line(gpr_kit *gprk, int code_mode, par
|
|||
|
||||
int first_token_in_lexeme = FALSE, last_token_in_lexeme = FALSE;
|
||||
|
||||
if (Annotations::read_int(pn, slash_class_ANNOT) != 0) { /* in a multi-token lexeme */
|
||||
if ((pn->next == NULL) ||
|
||||
(Annotations::read_int(pn->next, slash_class_ANNOT) !=
|
||||
Annotations::read_int(pn, slash_class_ANNOT)))
|
||||
if (cgt->slash_class != 0) { /* in a multi-token lexeme */
|
||||
if ((cgt->next_token == NULL) ||
|
||||
(cgt->next_token->slash_class != cgt->slash_class))
|
||||
last_token_in_lexeme = TRUE;
|
||||
if (Annotations::read_int(pn, slash_class_ANNOT) != lexeme_equivalence_class) {
|
||||
if (cgt->slash_class != lexeme_equivalence_class) {
|
||||
first_token_in_lexeme = TRUE;
|
||||
empty_text_allowed_in_lexeme =
|
||||
Annotations::read_int(pn, slash_dash_dash_ANNOT);
|
||||
empty_text_allowed_in_lexeme = cgt->slash_dash_dash;
|
||||
}
|
||||
lexeme_equivalence_class = Annotations::read_int(pn, slash_class_ANNOT);
|
||||
lexeme_equivalence_class = cgt->slash_class;
|
||||
if (first_token_in_lexeme) alternative_number = 1;
|
||||
else alternative_number++;
|
||||
} else { /* in a single-token lexeme */
|
||||
|
@ -518,6 +518,8 @@ void RTCommandGrammarLines::compile_token_line(gpr_kit *gprk, int code_mode, par
|
|||
alternative_number = 1;
|
||||
}
|
||||
|
||||
if (empty_text_allowed_in_lexeme) LOG("empty_text_allowed_in_lexeme!\n");
|
||||
|
||||
inter_symbol *jump_on_fail = fail_label;
|
||||
|
||||
if (lexeme_equivalence_class > 0) {
|
||||
|
@ -549,18 +551,18 @@ void RTCommandGrammarLines::compile_token_line(gpr_kit *gprk, int code_mode, par
|
|||
|
||||
if ((empty_text_allowed_in_lexeme) && (code_mode == FALSE)) {
|
||||
slash_gpr *sgpr = CREATE(slash_gpr);
|
||||
sgpr->first_choice = pn;
|
||||
while ((pn->next) &&
|
||||
(Annotations::read_int(pn->next, slash_class_ANNOT) ==
|
||||
Annotations::read_int(pn, slash_class_ANNOT))) pn = pn->next;
|
||||
sgpr->last_choice = pn;
|
||||
sgpr->first_choice = cgt;
|
||||
while ((cgt->next_token) &&
|
||||
(cgt->next_token->slash_class ==
|
||||
cgt->slash_class)) cgt = cgt->next_token;
|
||||
sgpr->last_choice = cgt;
|
||||
package_request *PR = Hierarchy::local_package(SLASH_TOKENS_HAP);
|
||||
sgpr->sgpr_iname = Hierarchy::make_iname_in(SLASH_FN_HL, PR);
|
||||
Emit::array_iname_entry(sgpr->sgpr_iname);
|
||||
last_token_in_lexeme = TRUE;
|
||||
} else {
|
||||
kind *grammar_token_kind =
|
||||
RTCommandGrammarLines::compile_token(gprk, pn, code_mode, jump_on_fail, consult_mode);
|
||||
RTCommandGrammarLines::compile_token(gprk, cgt, code_mode, jump_on_fail, consult_mode);
|
||||
if (grammar_token_kind) {
|
||||
if (token_values) {
|
||||
if (*token_values == 2) {
|
||||
|
@ -598,8 +600,9 @@ void RTCommandGrammarLines::compile_token_line(gpr_kit *gprk, int code_mode, par
|
|||
}
|
||||
}
|
||||
|
||||
if (pn == pn_to) break;
|
||||
if (cgt == cgt_to) break;
|
||||
}
|
||||
LOG_OUTDENT;
|
||||
}
|
||||
|
||||
@<Jump to end of group@> =
|
||||
|
@ -644,7 +647,7 @@ affected CGLs.
|
|||
=
|
||||
void RTCommandGrammarLines::list_take_out_one_word_grammar(command_grammar *cg) {
|
||||
LOOP_THROUGH_UNSORTED_CG_LINES(cgl, cg) {
|
||||
int wn = UnderstandLines::cgl_contains_single_unconditional_word(cgl);
|
||||
int wn = CGLines::cgl_contains_single_unconditional_word(cgl);
|
||||
if (wn >= 0) {
|
||||
TEMPORARY_TEXT(content)
|
||||
WRITE_TO(content, "%w", Lexer::word_text(wn));
|
||||
|
@ -665,14 +668,13 @@ nothing else.
|
|||
|
||||
=
|
||||
int ol_loop_counter = 0;
|
||||
kind *RTCommandGrammarLines::compile_token(gpr_kit *gprk, parse_node *pn, int code_mode,
|
||||
kind *RTCommandGrammarLines::compile_token(gpr_kit *gprk, cg_token *cgt, int code_mode,
|
||||
inter_symbol *failure_label, int consult_mode) {
|
||||
int wn = Wordings::first_wn(Node::get_text(pn));
|
||||
int wn = Wordings::first_wn(CGTokens::text(cgt));
|
||||
parse_node *spec;
|
||||
binary_predicate *bp;
|
||||
command_grammar *cg;
|
||||
|
||||
if (Annotations::read_int(pn, grammar_token_literal_ANNOT)) {
|
||||
if (CGTokens::is_literal(cgt)) {
|
||||
if (code_mode) {
|
||||
Produce::inv_primitive(Emit::tree(), IF_BIP);
|
||||
Produce::down(Emit::tree());
|
||||
|
@ -695,7 +697,7 @@ kind *RTCommandGrammarLines::compile_token(gpr_kit *gprk, parse_node *pn, int co
|
|||
return NULL;
|
||||
}
|
||||
|
||||
bp = Node::get_grammar_token_relation(pn);
|
||||
bp = cgt->token_relation;
|
||||
if (bp) {
|
||||
Produce::inv_call_iname(Emit::tree(), Hierarchy::find(ARTICLEDESCRIPTORS_HL));
|
||||
Produce::inv_primitive(Emit::tree(), STORE_BIP);
|
||||
|
@ -922,7 +924,7 @@ kind *RTCommandGrammarLines::compile_token(gpr_kit *gprk, parse_node *pn, int co
|
|||
Produce::up(Emit::tree());
|
||||
} else if (bp == R_equality) {
|
||||
Problems::quote_source(1, current_sentence);
|
||||
Problems::quote_source(2, pn);
|
||||
Problems::quote_wording(2, CGTokens::text(cgt));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_RelatedByEquality));
|
||||
Problems::issue_problem_segment(
|
||||
"The grammar you give in %1 contains a token %2 which would "
|
||||
|
@ -1071,7 +1073,7 @@ kind *RTCommandGrammarLines::compile_token(gpr_kit *gprk, parse_node *pn, int co
|
|||
continue_loop_on_fail = TRUE;
|
||||
} else {
|
||||
Problems::quote_source(1, current_sentence);
|
||||
Problems::quote_source(2, pn);
|
||||
Problems::quote_wording(2, CGTokens::text(cgt));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_GrammarValueRelation));
|
||||
Problems::issue_problem_segment(
|
||||
"The grammar you give in %1 contains a token "
|
||||
|
@ -1120,7 +1122,7 @@ kind *RTCommandGrammarLines::compile_token(gpr_kit *gprk, parse_node *pn, int co
|
|||
kind *K = BinaryPredicates::term_kind(bp, 1);
|
||||
if (Kinds::Behaviour::is_object(K) == FALSE) {
|
||||
Problems::quote_source(1, current_sentence);
|
||||
Problems::quote_source(2, pn);
|
||||
Problems::quote_wording(2, CGTokens::text(cgt));
|
||||
Problems::quote_kind(3, K);
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_GrammarValueRelation2));
|
||||
Problems::issue_problem_segment(
|
||||
|
@ -1166,7 +1168,7 @@ kind *RTCommandGrammarLines::compile_token(gpr_kit *gprk, parse_node *pn, int co
|
|||
LOG("Trouble with: $2\n", bp);
|
||||
LOG("Whose reversal is: $2\n", BinaryPredicates::get_reversal(bp));
|
||||
Problems::quote_source(1, current_sentence);
|
||||
Problems::quote_source(2, pn);
|
||||
Problems::quote_wording(2, CGTokens::text(cgt));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_GrammarTokenCowardice));
|
||||
Problems::issue_problem_segment(
|
||||
"The grammar you give in %1 contains a token "
|
||||
|
@ -1246,13 +1248,10 @@ kind *RTCommandGrammarLines::compile_token(gpr_kit *gprk, parse_node *pn, int co
|
|||
return NULL;
|
||||
}
|
||||
|
||||
spec = Node::get_grammar_value(pn);
|
||||
if (spec == NULL) UnderstandTokens::determine(pn, 10, NULL);
|
||||
spec = Node::get_grammar_value(pn);
|
||||
if (spec == NULL) {
|
||||
LOG("$T", pn);
|
||||
internal_error("NULL result of non-preposition token");
|
||||
}
|
||||
spec = cgt->grammar_value;
|
||||
if (spec == NULL) CGTokens::determine(cgt, 10, NULL);
|
||||
spec = cgt->grammar_value;
|
||||
if (spec == NULL) internal_error("NULL result of non-preposition token");
|
||||
|
||||
if (Specifications::is_kind_like(spec)) {
|
||||
kind *K = Node::get_kind_of_value(spec);
|
||||
|
@ -1302,7 +1301,7 @@ kind *RTCommandGrammarLines::compile_token(gpr_kit *gprk, parse_node *pn, int co
|
|||
|
||||
if (Descriptions::is_complex(spec)) {
|
||||
Problems::quote_source(1, current_sentence);
|
||||
Problems::quote_source(2, pn);
|
||||
Problems::quote_wording(2, CGTokens::text(cgt));
|
||||
StandardProblems::handmade_problem(Task::syntax_tree(), _p_(PM_OverComplexToken));
|
||||
Problems::issue_problem_segment(
|
||||
"The grammar you give in %1 contains a token "
|
||||
|
@ -1313,10 +1312,10 @@ kind *RTCommandGrammarLines::compile_token(gpr_kit *gprk, parse_node *pn, int co
|
|||
return K_object;
|
||||
} else {
|
||||
kind *K = NULL;
|
||||
int gtc = Annotations::read_int(pn, grammar_token_code_ANNOT);
|
||||
int gtc = cgt->grammar_token_code;
|
||||
if (gtc < 0) {
|
||||
inter_name *i6_token_iname = UnderstandTokens::iname_for_special_token(gtc);
|
||||
K = UnderstandTokens::kind_for_special_token(gtc);
|
||||
inter_name *i6_token_iname = CGTokens::iname_for_special_token(gtc);
|
||||
K = CGTokens::kind_for_special_token(gtc);
|
||||
if (code_mode) {
|
||||
if ((consult_mode) && (gtc == TOPIC_TOKEN_GTC)) {
|
||||
StandardProblems::sentence_problem(Task::syntax_tree(), _p_(PM_TextTokenRestricted),
|
||||
|
|
|
@ -158,7 +158,7 @@ void RTCommandGrammars::compile_conditions(void) {
|
|||
packaging_state RTCommandGrammars::cg_compile_Verb_directive_header(command_grammar *cg, inter_name *array_iname) {
|
||||
if (cg->cg_is != CG_IS_COMMAND)
|
||||
internal_error("tried to compile Verb from non-command CG");
|
||||
if (UnderstandLines::list_length(cg) == 0)
|
||||
if (CGLines::list_length(cg) == 0)
|
||||
internal_error("compiling Verb for empty grammar");
|
||||
|
||||
packaging_state save = Emit::named_verb_array_begin(array_iname, K_value);
|
||||
|
@ -232,7 +232,7 @@ next priority, and so on up the hierarchy.
|
|||
|
||||
=
|
||||
void RTCommandGrammars::compile(command_grammar *cg) {
|
||||
if (UnderstandLines::list_length(cg) == 0) return;
|
||||
if (CGLines::list_length(cg) == 0) return;
|
||||
|
||||
LOGIF(GRAMMAR, "Compiling command grammar $G\n", cg);
|
||||
|
||||
|
@ -343,7 +343,7 @@ void RTCommandGrammars::compile(command_grammar *cg) {
|
|||
}
|
||||
|
||||
void RTCommandGrammars::compile_iv(gpr_kit *gprk, command_grammar *cg) {
|
||||
if (UnderstandLines::list_length(cg) > 0) {
|
||||
if (CGLines::list_length(cg) > 0) {
|
||||
LOGIF(GRAMMAR, "Compiling command grammar $G\n", cg);
|
||||
current_sentence = cg->where_cg_created;
|
||||
RTCommandGrammarLines::reset_labels();
|
||||
|
|
Loading…
Reference in a new issue