mirror of
https://github.com/ganelson/inform.git
synced 2024-07-08 18:14:21 +03:00
245 lines
27 KiB
HTML
245 lines
27 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>26/rt</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
</head>
|
|
<body>
|
|
|
|
<!--Weave of '26/tti' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">core</a></li><li><a href="index.html#26">Chapter 26: Compilation Utilities</a></li><li><b>Translate to Identifiers</b></li></ul><p class="purpose">To provide a way to map high-level I7 constructs onto explicitly named identifiers in I6 code.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Definitions. </b></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>Translations can be made in a number of contexts:
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">INVALID_I6TR</span><span class="plain"> -1</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">PROPERTY_I6TR</span><span class="plain"> 0 </span> <span class="comment">"The open property translates into I6 as "open"."</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">NOUN_I6TR</span><span class="plain"> 1 </span> <span class="comment">"The north object translates into I6 as "n\_obj"."</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">RULE_I6TR</span><span class="plain"> 2 </span> <span class="comment">"The baffling rule translates into I6 as "BAFFLING\_R"."</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">VARIABLE_I6TR</span><span class="plain"> 3 </span> <span class="comment">"The sludge count variable translates into I6 as "sldgc".</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">ACTION_I6TR</span><span class="plain"> 4 </span> <span class="comment">"The taking action translates into I6 as "Take".</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">GRAMMAR_TOKEN_I6TR</span><span class="plain"> 5 </span> <span class="comment">"The grammar token "[whatever]" translates into I6 as "WHATEVER".</span>
|
|
</pre>
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>I7 provides the ability for the user to specify exactly what identifier name
|
|
to use as the I6 image of something, overriding the automatically composed
|
|
name above, in some cases. The following routine parses, tidies up and acts
|
|
on "... translates into I6 as ..." sentences; it gives their sentence
|
|
nodes an annotation marking what sort of thing is being translated.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">This parses the subject of "... translates into I6 as ..." sentences,
|
|
such as "The yourself object" in
|
|
</p>
|
|
|
|
<blockquote>
|
|
<p>The yourself object translates into I6 as "selfobj".</p>
|
|
|
|
</blockquote>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">translates</span><span class="plain">-</span><span class="identifier">into</span><span class="plain">-</span><span class="identifier">i6</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">> ::=</span>
|
|
<span class="plain">... </span><span class="reserved">property</span><span class="plain"> | ==> </span><span class="constant">PROPERTY_I6TR</span>
|
|
<span class="plain">... </span><span class="identifier">object</span><span class="plain">/</span><span class="identifier">kind</span><span class="plain"> | ==> </span><span class="constant">NOUN_I6TR</span>
|
|
<span class="plain">{... </span><span class="reserved">rule</span><span class="plain">} | ==> </span><span class="constant">RULE_I6TR</span>
|
|
<span class="plain">...</span><span class="element"> variable</span><span class="plain"> | ==> </span><span class="constant">VARIABLE_I6TR</span>
|
|
<span class="plain">... </span><span class="identifier">action</span><span class="plain"> | ==> </span><span class="constant">ACTION_I6TR</span>
|
|
<span class="identifier">understand</span><span class="plain"> </span><span class="identifier">token</span><span class="plain"> ... | ==> </span><span class="constant">GRAMMAR_TOKEN_I6TR</span>
|
|
<span class="plain">... ==> </span><<span class="cwebmacro">Issue PM_TranslatedUnknownCategory problem</span> <span class="cwebmacronumber">3.1</span>>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3_1"></a><b>§3.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_TranslatedUnknownCategory problem</span> <span class="cwebmacronumber">3.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="constant">INVALID_I6TR</span><span class="plain">;</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_TranslatedUnknownCategory</span><span class="plain">),</span>
|
|
<span class="string">"that isn't one of the things which can be translated to I6"</span><span class="plain">,</span>
|
|
<span class="string">"and should be '... variable', '... property', '... object', "</span>
|
|
<span class="string">"'... kind', '... rule', or '... action'. For instance, 'The yourself "</span>
|
|
<span class="string">"object translates into I6 as \</span><span class="plain">"</span><span class="string">selfobj\</span><span class="plain">"</span><span class="string">.'"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP3">§3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>The object noun phrase is usually just an I6 identifier in quotation marks,
|
|
but it's also possible to list literal texts (for the benefit of rules).
|
|
Following the optional "with" is an articled list, each entry of which
|
|
will be required to pass <code class="display"><span class="extract"><extra-response></span></code>.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">translates</span><span class="plain">-</span><span class="identifier">into</span><span class="plain">-</span><span class="identifier">i6</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">> ::=</span>
|
|
<span class="plain"><</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">> </span><span class="identifier">with</span><span class="plain"> <</span><span class="identifier">nounphrase</span><span class="plain">-</span><span class="identifier">articled</span><span class="plain">-</span><span class="identifier">list</span><span class="plain">> | ==> </span><span class="identifier">R</span><span class="plain">[1]; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">RP</span><span class="plain">[2];</span>
|
|
<span class="plain"><</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">> ==> </span><span class="identifier">R</span><span class="plain">[1]; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">IdentifierTranslations::as</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">pn</span><span class="plain">) {</span>
|
|
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p1</span><span class="plain"> = </span><span class="identifier">pn</span><span class="plain">-</span><span class="element">>next</span><span class="plain">;</span>
|
|
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p2</span><span class="plain"> = </span><span class="identifier">pn</span><span class="plain">-</span><span class="element">>next</span><span class="plain">-</span><span class="element">>next</span><span class="plain">;</span>
|
|
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">responses_list</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">category</span><span class="plain"> = </span><span class="constant">INVALID_I6TR</span><span class="plain">;</span>
|
|
<span class="plain"><</span><span class="identifier">translates</span><span class="plain">-</span><span class="identifier">into</span><span class="plain">-</span><span class="identifier">i6</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p1</span><span class="plain">));</span>
|
|
<span class="identifier">category</span><span class="plain"> = <<</span><span class="identifier">r</span><span class="plain">>>;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">category</span><span class="plain"> == </span><span class="constant">INVALID_I6TR</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">translates</span><span class="plain">-</span><span class="identifier">into</span><span class="plain">-</span><span class="identifier">i6</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">>, 1);</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">traverse</span><span class="plain"> == 1) {</span>
|
|
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">, </span><span class="constant">category_of_I6_translation_ANNOT</span><span class="plain">, </span><span class="constant">INVALID_I6TR</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Ensure that we are translating to a quoted I6 identifier</span> <span class="cwebmacronumber">5.2</span>><span class="plain">;</span>
|
|
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">, </span><span class="constant">category_of_I6_translation_ANNOT</span><span class="plain">, </span><span class="identifier">category</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">responses_list</span><span class="plain">) </span><span class="identifier">ParseTree::graft</span><span class="plain">(</span><span class="identifier">responses_list</span><span class="plain">, </span><span class="identifier">p2</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">category</span><span class="plain"> = </span><span class="identifier">ParseTree::int_annotation</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">, </span><span class="constant">category_of_I6_translation_ANNOT</span><span class="plain">);</span>
|
|
|
|
<<span class="cwebmacro">Take immediate action on the translation where possible</span> <span class="cwebmacronumber">5.1</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function IdentifierTranslations::as is used in 7/ns (<a href="7-ns.html#SP18">§18</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5_1"></a><b>§5.1. </b>In some cases, we might as well act now; but in others we will act later,
|
|
traversing the parse tree to look for translation sentences of the right sort.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Take immediate action on the translation where possible</span> <span class="cwebmacronumber">5.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">category</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROPERTY_I6TR</span><span class="plain">:</span>
|
|
<span class="functiontext">Properties::translates</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">p2</span><span class="plain">);</span>
|
|
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">pn</span><span class="plain">, </span><span class="constant">category_of_I6_translation_ANNOT</span><span class="plain">, </span><span class="constant">INVALID_I6TR</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">NOUN_I6TR</span><span class="plain">: </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RULE_I6TR</span><span class="plain">:</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">traverse</span><span class="plain"> == 1) </span><span class="functiontext">Rules::Placement::declare_I6_written_rule</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">p2</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">traverse</span><span class="plain"> == 2) && (</span><span class="identifier">p2</span><span class="plain">-</span><span class="element">>down</span><span class="plain">) && (<</span><span class="reserved">rule</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">>(</span><span class="identifier">W</span><span class="plain">)))</span>
|
|
<span class="functiontext">IdentifierTranslations::plus_responses</span><span class="plain">(</span><span class="identifier">p2</span><span class="plain">-</span><span class="element">>down</span><span class="plain">, <<</span><span class="identifier">rp</span><span class="plain">>>);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">VARIABLE_I6TR</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">traverse</span><span class="plain"> == 2) </span><span class="functiontext">NonlocalVariables::translates</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">p2</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">ifdef</span><span class="plain"> </span><span class="identifier">IF_MODULE</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">ACTION_I6TR</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">traverse</span><span class="plain"> == 2) </span><span class="identifier">PL::Actions::translates</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">p2</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">GRAMMAR_TOKEN_I6TR</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">traverse</span><span class="plain"> == 2) </span><span class="identifier">PL::Parsing::Verbs::translates</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">p2</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">#</span><span class="identifier">endif</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP5">§5</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5_2"></a><b>§5.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Ensure that we are translating to a quoted I6 identifier</span> <span class="cwebmacronumber">5.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">valid</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">translates</span><span class="plain">-</span><span class="identifier">into</span><span class="plain">-</span><span class="identifier">i6</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p2</span><span class="plain">)) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">valid</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">responses_list</span><span class="plain"> = <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">valid</span><span class="plain">) </span><<span class="cwebmacro">Dequote it and see if it's valid</span> <span class="cwebmacronumber">5.2.1</span>><span class="character">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">valid</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_TranslatedToNonIdentifier</span><span class="plain">),</span>
|
|
<span class="string">"Inform 7 constructions can only translate into quoted I6 identifiers"</span><span class="plain">,</span>
|
|
<span class="string">"which must be strings of 1 to 31 characters drawn from 1, 2, ..., 9, "</span>
|
|
<span class="string">"a or A, b or B, ..., z or Z, or underscore '_', except that the "</span>
|
|
<span class="string">"first character is not allowed to be a digit."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP5">§5</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5_2_1"></a><b>§5.2.1. </b>If it turns out not to be, we simply set <code class="display"><span class="extract">valid</span></code> to false.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Dequote it and see if it's valid</span> <span class="cwebmacronumber">5.2.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">wn</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p2</span><span class="plain">));</span>
|
|
<span class="identifier">ParseTree::set_text</span><span class="plain">(</span><span class="identifier">p2</span><span class="plain">, </span><span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">));</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">valid</span><span class="plain">) </span><span class="identifier">valid</span><span class="plain"> = </span><span class="identifier">Identifiers::valid</span><span class="plain">(</span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">));</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP5_2">§5.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>Extra responses look just as they would in running code.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">extra</span><span class="plain">-</span><span class="identifier">response</span><span class="plain">> ::=</span>
|
|
<span class="plain"><</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">> ( <</span><span class="identifier">response</span><span class="plain">-</span><span class="identifier">letter</span><span class="plain">> ) ==> </span><span class="identifier">R</span><span class="plain">[2];</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">IdentifierTranslations::plus_responses</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">rule</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">) == </span><span class="identifier">AND_NT</span><span class="plain">) {</span>
|
|
<span class="functiontext">IdentifierTranslations::plus_responses</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-</span><span class="element">>down</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">);</span>
|
|
<span class="functiontext">IdentifierTranslations::plus_responses</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">-</span><span class="element">>down</span><span class="plain">-</span><span class="element">>next</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">extra</span><span class="plain">-</span><span class="identifier">response</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">))) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">code</span><span class="plain"> = <<</span><span class="identifier">r</span><span class="plain">>>;</span>
|
|
<span class="reserved">response_message</span><span class="plain"> *</span><span class="identifier">resp</span><span class="plain"> = </span><span class="functiontext">Strings::response_cue</span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">,</span>
|
|
<span class="identifier">code</span><span class="plain">, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="functiontext">Rules::now_rule_defines_response</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">code</span><span class="plain">, </span><span class="identifier">resp</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_I6ResponsesAwry</span><span class="plain">),</span>
|
|
<span class="string">"additional information about I6 translation of a rule can "</span>
|
|
<span class="string">"only take the form of a list of responses"</span><span class="plain">,</span>
|
|
<span class="string">"each quoted and followed by a bracketed letter."</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function IdentifierTranslations::plus_responses is used in <a href="#SP5_1">§5.1</a>.</p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="26-rt.html">Back to 'Routines'</a></li><li><a href="26-iti.html">Continue with 'I6 Template Interpreter'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
</body>
|
|
</html>
|
|
|