2019-03-17 14:40:57 +02:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
< html >
< head >
2021-02-06 20:00:34 +02:00
< title > Enter the S-Parser< / title >
2020-05-03 03:20:55 +03:00
< link href = "../docs-assets/Breadcrumbs.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-03-19 02:11:25 +02:00
< meta name = "viewport" content = "width=device-width initial-scale=1" >
2019-03-17 14:40:57 +02:00
< meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" >
< meta http-equiv = "Content-Language" content = "en-gb" >
2020-05-03 03:01:21 +03:00
2020-05-03 03:20:55 +03:00
< 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" >
< link href = "../docs-assets/Colours.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-05-09 01:13:45 +03:00
< link href = "../docs-assets/Preform-Colours.css" rel = "stylesheet" rev = "stylesheet" type = "text/css" >
2020-04-14 19:56:54 +03:00
2019-03-17 14:40:57 +02:00
< / head >
2020-05-03 03:01:21 +03:00
< body class = "commentary-font" >
2020-03-19 02:11:25 +02:00
< nav role = "navigation" >
2020-04-14 19:56:54 +03:00
< h1 > < a href = "../index.html" >
2020-05-03 18:34:53 +03:00
< img src = "../docs-assets/Inform.png" height = 72" >
2020-04-14 19:56:54 +03:00
< / a > < / h1 >
< ul > < li > < a href = "../compiler.html" > compiler tools< / a > < / li >
2020-03-19 02:11:25 +02:00
< 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 >
2020-04-14 19:56:54 +03:00
< / ul > < h2 > Compiler Webs< / h2 > < ul >
2020-03-19 02:11:25 +02:00
< 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 >
2020-04-14 19:56:54 +03:00
< / ul > < h2 > Inbuild Modules< / h2 > < ul >
< li > < a href = "../supervisor-module/index.html" > supervisor< / a > < / li >
< / ul > < h2 > Inform7 Modules< / h2 > < ul >
2020-08-26 12:52:50 +03:00
< li > < a href = "../core-module/index.html" > core< / a > < / li >
< li > < a href = "../assertions-module/index.html" > assertions< / a > < / li >
< li > < a href = "index.html" > < span class = "selectedlink" > values< / span > < / 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 >
2020-03-19 02:11:25 +02:00
< li > < a href = "../if-module/index.html" > if< / a > < / li >
< li > < a href = "../multimedia-module/index.html" > multimedia< / a > < / li >
< li > < a href = "../index-module/index.html" > index< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul > < h2 > Inter Modules< / h2 > < ul >
< li > < a href = "../bytecode-module/index.html" > bytecode< / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../building-module/index.html" > building< / a > < / li >
< li > < a href = "../codegen-module/index.html" > codegen< / a > < / li >
2020-05-20 02:02:28 +03:00
< / ul > < h2 > Services< / h2 > < ul >
2020-04-14 19:56:54 +03:00
< li > < a href = "../arch-module/index.html" > arch< / a > < / li >
2020-08-20 01:36:18 +03:00
< li > < a href = "../calculus-module/index.html" > calculus< / a > < / li >
2020-04-14 19:56:54 +03:00
< li > < a href = "../html-module/index.html" > html< / a > < / li >
2020-05-20 02:02:28 +03:00
< li > < a href = "../inflections-module/index.html" > inflections< / a > < / li >
2020-08-20 01:36:18 +03:00
< li > < a href = "../kinds-module/index.html" > kinds< / a > < / li >
2020-05-20 02:02:28 +03:00
< li > < a href = "../linguistics-module/index.html" > linguistics< / a > < / li >
< li > < a href = "../problems-module/index.html" > problems< / a > < / li >
2020-08-20 01:36:18 +03:00
< li > < a href = "../syntax-module/index.html" > syntax< / a > < / li >
< li > < a href = "../words-module/index.html" > words< / a > < / li >
2020-03-19 02:11:25 +02:00
< li > < a href = "../../../inweb/docs/foundation-module/index.html" > foundation< / a > < / li >
2020-04-14 19:56:54 +03:00
< / ul >
2020-03-19 02:11:25 +02:00
< / nav >
< main role = "main" >
2021-02-06 20:00:34 +02:00
<!-- Weave of 'Enter the S - Parser' generated by Inweb -->
2020-05-03 03:01:21 +03:00
< div class = "breadcrumbs" >
2021-02-06 20:00:34 +02:00
< ul class = "crumbs" > < li > < a href = "../index.html" > Home< / a > < / li > < li > < a href = "../compiler.html" > Inform7< / a > < / li > < li > < a href = "index.html" > values< / a > < / li > < li > < a href = "index.html#4" > Chapter 4: The S-Parser< / a > < / li > < li > < b > Enter the S-Parser< / b > < / li > < / ul > < / div >
< p class = "purpose" > The top-level nonterminals of the S-parser, which turns text into specifications.< / p >
2019-03-17 14:40:57 +02:00
2021-02-06 20:00:34 +02:00
< ul class = "toc" > < li > < a href = "4-ets.html#SP1" > § 1. Introduction< / a > < / li > < li > < a href = "4-ets.html#SP3" > § 3. Top-level nonterminals< / a > < / li > < li > < a href = "4-ets.html#SP10" > § 10. Void phrases< / a > < / li > < li > < a href = "4-ets.html#SP11" > § 11. Actions< / a > < / li > < / ul > < hr class = "tocbar" >
2019-03-17 14:40:57 +02:00
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP1" class = "paragraph-anchor" > < / a > < b > § 1. Introduction. < / b > The purpose of the S-parser is to turn excerpts of text into specification
2019-03-17 14:40:57 +02:00
nodes. Nonterminals here almost all have names beginning with the "s-" prefix,
2021-02-06 20:00:34 +02:00
which indicates that their results are specifications. The simplest example is:
2019-03-17 14:40:57 +02:00
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < s-plain-text> < / 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 >
2020-08-26 12:52:50 +03:00
< span class = "Preform-plain-syntax" > ==> { -, < / span > < a href = "2-spc.html#SP10" class = "function-link" > < span class = "Preform-function-syntax" > Specifications::new_UNKNOWN< / span > < / a > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > ) };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP2" class = "paragraph-anchor" > < / a > < b > § 2. < / b > And here is a curious variation, which is needed because equations are
2021-02-06 20:00:34 +02:00
parsed with completely different spacing rules, and don't respect word
boundaries. It matches any non-empty text where one of the words contains an
equals sign as one of its characters.
2019-03-17 14:40:57 +02:00
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < s-plain-text-with-equals> < / 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-identifier-syntax" > LOOP_THROUGH_WORDING< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > i< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > ) {< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > wchar_t< / span > < span class = "Preform-plain-syntax" > *< / span > < span class = "Preform-identifier-syntax" > p< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > Lexer::word_raw_text< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > i< / span > < span class = "Preform-plain-syntax" > );< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > for< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-reserved-syntax" > int< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > j< / span > < span class = "Preform-plain-syntax" > =0; < / span > < span class = "Preform-identifier-syntax" > p< / span > < span class = "Preform-plain-syntax" > [< / span > < span class = "Preform-identifier-syntax" > j< / span > < span class = "Preform-plain-syntax" > ]; < / span > < span class = "Preform-identifier-syntax" > j< / span > < span class = "Preform-plain-syntax" > ++)< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > p< / span > < span class = "Preform-plain-syntax" > [< / span > < span class = "Preform-identifier-syntax" > j< / span > < span class = "Preform-plain-syntax" > ] == < / span > < span class = "Preform-character-syntax" > '='< / span > < span class = "Preform-plain-syntax" > ) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "Preform-plain-syntax" > ==> { -, < / span > < a href = "2-spc.html#SP10" class = "function-link" > < span class = "Preform-function-syntax" > Specifications::new_UNKNOWN< / span > < / a > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > ) };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > }< / span >
< span class = "Preform-plain-syntax" > }< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP3" class = "paragraph-anchor" > < / a > < b > § 3. Top-level nonterminals. < / b > These five nonterminals are the most useful and powerful, so they're the
2019-03-17 14:40:57 +02:00
main junction between the S-parser and the rest of Inform.
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > These are coded as internals for efficiency's sake. We will often reparse the
2019-03-17 14:40:57 +02:00
same wording over and over, so we cache the results. But < s-value> matches
exactly the same text as < s-value-uncached> , and so on for the other four.
< / p >
2020-05-03 03:01:21 +03:00
< p class = "commentary" > < s-value> looks for source text which can be evaluated — a constant, a
2019-03-17 14:40:57 +02:00
variable or other storage object, or a phrase to decide a value.
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < s-value> < / 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 >
2021-02-06 20:00:34 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > parse_node< / span > < span class = "Preform-plain-syntax" > *< / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > PreformCache::parse< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-constant-syntax" > 0< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-function-syntax" > < s-value-uncached> < / span > < span class = "Preform-plain-syntax" > );< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > Node::is< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-identifier-syntax" > UNKNOWN_NT< / span > < span class = "Preform-plain-syntax" > )) { ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > }; }< / span >
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP4" class = "paragraph-anchor" > < / a > < b > § 4. < / b > < s-condition> looks for a condition — anything legal after an
2019-03-17 14:40:57 +02:00
"if", in short. This includes sentence-like excerpts such as "six
animals have been in the Stables".
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < s-condition> < / 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 >
2020-08-26 12:52:50 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > LocalVariables::make_necessary_callings< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > );< / span >
2021-02-06 20:00:34 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > parse_node< / span > < span class = "Preform-plain-syntax" > *< / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > PreformCache::parse< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-constant-syntax" > 1< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-function-syntax" > < s-condition-uncached> < / span > < span class = "Preform-plain-syntax" > );< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > Node::is< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-identifier-syntax" > UNKNOWN_NT< / span > < span class = "Preform-plain-syntax" > )) { ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > }; }< / span >
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP5" class = "paragraph-anchor" > < / a > < b > § 5. < / b > < s-non-action-condition> is the same, but disallowing action patterns
2019-03-17 14:40:57 +02:00
as conditions, so for example "taking something" would not match.
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < s-non-action-condition> < / 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 >
2020-08-26 12:52:50 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > LocalVariables::make_necessary_callings< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > );< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > #< / span > < span class = "Preform-identifier-syntax" > ifdef< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > IF_MODULE< / span >
2021-03-07 23:37:59 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > int< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > old_state< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > ParseActionPatterns::enter_mode< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > SUPPRESS_AP_PARSING< / span > < span class = "Preform-plain-syntax" > );< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > #< / span > < span class = "Preform-identifier-syntax" > endif< / span >
2021-02-06 20:00:34 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > parse_node< / span > < span class = "Preform-plain-syntax" > *< / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > PreformCache::parse< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-constant-syntax" > 2< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-function-syntax" > < s-condition-uncached> < / span > < span class = "Preform-plain-syntax" > );< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > #< / span > < span class = "Preform-identifier-syntax" > ifdef< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > IF_MODULE< / span >
2021-03-07 23:37:59 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > ParseActionPatterns::restore_mode< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > old_state< / span > < span class = "Preform-plain-syntax" > );< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > #< / span > < span class = "Preform-identifier-syntax" > endif< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > Node::is< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-identifier-syntax" > UNKNOWN_NT< / span > < span class = "Preform-plain-syntax" > )) { ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > }; }< / span >
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP6" class = "paragraph-anchor" > < / a > < b > § 6. < / b > < s-type-expression> is for where we expect to find the "type" of something
2019-03-17 14:40:57 +02:00
— for instance, the kind of value to be stored in a variable, or the
specification of a phrase argument.
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < s-type-expression> < / 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 >
2021-02-06 20:00:34 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > parse_node< / span > < span class = "Preform-plain-syntax" > *< / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > PreformCache::parse< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-constant-syntax" > 3< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-function-syntax" > < s-type-expression-uncached> < / span > < span class = "Preform-plain-syntax" > );< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > Node::is< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-identifier-syntax" > UNKNOWN_NT< / span > < span class = "Preform-plain-syntax" > )) { ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > }; }< / span >
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP7" class = "paragraph-anchor" > < / a > < b > § 7. < / b > < s-descriptive-type-expression> is the same thing, with one difference: it
2019-03-17 14:40:57 +02:00
allows nounless descriptions, such as "open opaque fixed in place", and to
this end it treats bare adjective names as descriptions rather than values. If
we have said "Colour is a kind of value. The colours are red, green and taupe.
A thing has a colour.", then "green" is parsed by < s-descriptive-type-expression>
as a description meaning "any thing which is green", but by < s-type-expression>
and < s-value> as a constant value of the kind "colour".
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < s-descriptive-type-expression> < / 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 >
2021-02-06 20:00:34 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > parse_node< / span > < span class = "Preform-plain-syntax" > *< / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > =< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > PreformCache::parse< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-constant-syntax" > 4< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-function-syntax" > < s-descriptive-type-expression-uncached> < / span > < span class = "Preform-plain-syntax" > );< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > Node::is< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-identifier-syntax" > UNKNOWN_NT< / span > < span class = "Preform-plain-syntax" > )) { ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > }; }< / span >
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > spec< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2020-08-18 00:57:45 +03:00
< p class = "commentary firstcommentary" > < a id = "SP8" class = "paragraph-anchor" > < / a > < b > § 8. < / b > The following internal is just a shell for < s-descriptive-type-expression> ,
2019-03-17 14:40:57 +02:00
but it temporarily changes the parsing mode to phrase token parsing, so that
kind variables will be read as formal prototypes.
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < s-phrase-token-type> < / 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" > int< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > s< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > kind_parsing_mode< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > kind_parsing_mode< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > PHRASE_TOKEN_KIND_PARSING< / span > < span class = "Preform-plain-syntax" > ;< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > int< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > t< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-function-syntax" > < s-descriptive-type-expression> < / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > );< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > kind_parsing_mode< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > s< / span > < span class = "Preform-plain-syntax" > ;< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > t< / span > < span class = "Preform-plain-syntax" > ) { ==> { < / span > < span class = "Preform-function-syntax" > < < r> > < / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-function-syntax" > < < rp> > < / span > < span class = "Preform-plain-syntax" > }; < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ; }< / span >
< span class = "Preform-plain-syntax" > ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2021-02-06 20:00:34 +02:00
< p class = "commentary firstcommentary" > < a id = "SP9" class = "paragraph-anchor" > < / a > < b > § 9. < / b > We will also define a convenient super-nonterminal which matches almost any
meaningful reference to data, so it's a convenient way of finding out whether
a new name will clash with some existing meaning.
2019-03-17 14:40:57 +02:00
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < s-type-expression-or-value> < / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > ::=< / span >
2020-07-28 21:19:38 +03:00
< 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" > { pass 1 }< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-function-syntax" > < s-value> < / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > ==> < / span > < span class = "Preform-plain-syntax" > { pass 1 }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2021-02-06 20:00:34 +02:00
< p class = "commentary firstcommentary" > < a id = "SP10" class = "paragraph-anchor" > < / a > < b > § 10. Void phrases. < / b > The S-parser is also used by the main code compiler to turn phrases into
S-nodes, using < s-command> and < s-say-command> . These however need a
wrapper: instead of turning text into an S-node, we take text from an
existing node (in the structural parse tree for a routine), turn that
into a new S-node with an invocation list below it, then glue the list
back into the original tree but throw away the S-node head.
< / 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" > SParser::parse_void_phrase< / 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 > < a href = "4-ets.html#SP10" class = "function-link" > < span class = "function-syntax" > SParser::parse_phrase_inner< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > , < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > );< / span >
< span class = "plain-syntax" > }< / span >
< span class = "reserved-syntax" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > SParser::parse_say_term< / 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 > < a href = "4-ets.html#SP10" class = "function-link" > < span class = "function-syntax" > SParser::parse_phrase_inner< / span > < / a > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / 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" > void< / span > < span class = "plain-syntax" > < / span > < span class = "function-syntax" > SParser::parse_phrase_inner< / 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 = "reserved-syntax" > int< / span > < span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > as_say_term< / span > < span class = "plain-syntax" > ) {< / span >
< span class = "plain-syntax" > < / span > < span class = "reserved-syntax" > if< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > == < / span > < span class = "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 node to parse"< / 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" > 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 = "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" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > ))) {< / span >
< span class = "plain-syntax" > < / span > < span class = "identifier-syntax" > parse_node< / span > < span class = "plain-syntax" > *< / span > < span class = "identifier-syntax" > results< / 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" > as_say_term< / span > < span class = "plain-syntax" > == < / span > < span class = "identifier-syntax" > FALSE< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "function-syntax" > < s-command> < / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > )))) < / span > < span class = "identifier-syntax" > results< / 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" > as_say_term< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "function-syntax" > < s-say-command> < / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > Node::get_text< / span > < span class = "plain-syntax" > (< / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > )))) < / span > < span class = "identifier-syntax" > results< / 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" > results< / span > < span class = "plain-syntax" > ) & & (< / span > < span class = "identifier-syntax" > results< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > )) < / span > < span class = "identifier-syntax" > p< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > = < / span > < span class = "identifier-syntax" > results< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > -> < / span > < span class = "identifier-syntax" > down< / span > < span class = "plain-syntax" > ;< / 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. Actions. < / b > These are meaningful only for interactive fiction, and serve the "if" module:
2019-03-17 14:40:57 +02:00
< / p >
2020-05-09 01:13:45 +03:00
< pre class = "Preform-displayed-code all-displayed-code code-font" >
< span class = "Preform-function-syntax" > < s-explicit-action> < / 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-identifier-syntax" > ifdef< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > IF_MODULE< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > parse_node< / span > < span class = "Preform-plain-syntax" > *< / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > NULL< / span > < span class = "Preform-plain-syntax" > ;< / span >
2021-03-07 23:37:59 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > int< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > saved< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > ParseActionPatterns::enter_mode< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > PERMIT_TRYING_OMISSION< / span > < span class = "Preform-plain-syntax" > );< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-function-syntax" > < s-condition-uncached> < / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > )) < / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-function-syntax" > < < rp> > < / span > < span class = "Preform-plain-syntax" > ;< / span >
2021-03-07 23:37:59 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > ParseActionPatterns::restore_mode< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > saved< / span > < span class = "Preform-plain-syntax" > );< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > ) {< / span >
2020-08-27 17:50:24 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < a href = "2-rvl.html#SP21" class = "function-link" > < span class = "Preform-function-syntax" > Rvalues::is_CONSTANT_of_kind< / span > < / a > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-identifier-syntax" > K_stored_action< / span > < span class = "Preform-plain-syntax" > )) {< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > };< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ;< / span >
2021-03-06 01:36:25 +02:00
< span class = "Preform-plain-syntax" > } < / span > < span class = "Preform-reserved-syntax" > else< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > AConditions::is_action_TEST_VALUE< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > )) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > -> < / span > < span class = "Preform-identifier-syntax" > down< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ;< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > } < / span > < span class = "Preform-reserved-syntax" > else< / span > < span class = "Preform-plain-syntax" > {< / span >
< span class = "Preform-plain-syntax" > ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > };< / span >
< span class = "Preform-plain-syntax" > }< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > }< / span >
< span class = "Preform-plain-syntax" > #< / span > < span class = "Preform-identifier-syntax" > endif< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > }< / span >
< span class = "Preform-function-syntax" > < s-constant-action> < / 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-identifier-syntax" > ifdef< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > IF_MODULE< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > parse_node< / span > < span class = "Preform-plain-syntax" > *< / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > NULL< / span > < span class = "Preform-plain-syntax" > ;< / span >
2021-03-07 23:37:59 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > int< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > was< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-identifier-syntax" > ParseActionPatterns::enter_mode< / span > < span class = "Preform-plain-syntax" > (< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > FORBID_NONCONSTANT_ACTION_PARAMETERS< / span > < span class = "Preform-plain-syntax" > + < / span > < span class = "Preform-identifier-syntax" > PERMIT_TRYING_OMISSION< / span > < span class = "Preform-plain-syntax" > );< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-function-syntax" > < s-condition-uncached> < / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > W< / span > < span class = "Preform-plain-syntax" > )) < / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > = < / span > < span class = "Preform-function-syntax" > < < rp> > < / span > < span class = "Preform-plain-syntax" > ;< / span >
2021-03-07 23:37:59 +02:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > ParseActionPatterns::restore_mode< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > was< / span > < span class = "Preform-plain-syntax" > );< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > ) {< / span >
2020-08-27 17:50:24 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < a href = "2-rvl.html#SP21" class = "function-link" > < span class = "Preform-function-syntax" > Rvalues::is_CONSTANT_of_kind< / span > < / a > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > , < / span > < span class = "Preform-identifier-syntax" > K_stored_action< / span > < span class = "Preform-plain-syntax" > )) {< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > };< / span >
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ;< / span >
2021-03-06 01:36:25 +02:00
< span class = "Preform-plain-syntax" > } < / span > < span class = "Preform-reserved-syntax" > else< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > if< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > AConditions::is_action_TEST_VALUE< / span > < span class = "Preform-plain-syntax" > (< / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > )) {< / span >
2020-08-26 12:52:50 +03:00
< span class = "Preform-plain-syntax" > ==> { -, < / span > < span class = "Preform-identifier-syntax" > S< / span > < span class = "Preform-plain-syntax" > -> < / span > < span class = "Preform-identifier-syntax" > down< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > < / span > < span class = "Preform-reserved-syntax" > return< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > TRUE< / span > < span class = "Preform-plain-syntax" > ;< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > } < / span > < span class = "Preform-reserved-syntax" > else< / span > < span class = "Preform-plain-syntax" > {< / span >
< span class = "Preform-plain-syntax" > ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > };< / span >
< span class = "Preform-plain-syntax" > }< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > }< / span >
< span class = "Preform-plain-syntax" > #< / span > < span class = "Preform-identifier-syntax" > endif< / span >
2020-07-28 21:19:38 +03:00
< span class = "Preform-plain-syntax" > ==> { < / span > < span class = "Preform-identifier-syntax" > fail< / span > < span class = "Preform-plain-syntax" > < / span > < span class = "Preform-identifier-syntax" > nonterminal< / span > < span class = "Preform-plain-syntax" > };< / span >
2020-05-09 01:13:45 +03:00
< span class = "Preform-plain-syntax" > }< / span >
2019-03-17 14:40:57 +02:00
< / pre >
2020-05-17 13:51:27 +03:00
< ul class = "endnotetexts" > < li > This is < a href = "../words-module/4-ap.html" class = "internal" > Preform grammar< / a > , not regular C code.< / li > < / ul >
2020-05-03 03:01:21 +03:00
< nav role = "progress" > < div class = "progresscontainer" >
2021-02-06 20:00:34 +02:00
< ul class = "progressbar" > < li class = "progressprev" > < a href = "3-ll.html" > ❮ < / a > < / li > < li class = "progresschapter" > < a href = "P-wtmd.html" > P< / a > < / li > < li class = "progresschapter" > < a href = "1-vm.html" > 1< / a > < / li > < li class = "progresschapter" > < a href = "2-spc.html" > 2< / a > < / li > < li class = "progresschapter" > < a href = "3-pl.html" > 3< / a > < / li > < li class = "progresscurrentchapter" > 4< / li > < li class = "progresscurrent" > ets< / li > < li class = "progresssection" > < a href = "4-cad.html" > cad< / a > < / li > < li class = "progresssection" > < a href = "4-teav.html" > teav< / a > < / li > < li class = "progresssection" > < a href = "4-varc.html" > varc< / a > < / li > < li class = "progresssection" > < a href = "4-cap.html" > cap< / a > < / li > < li class = "progressnext" > < a href = "4-cad.html" > ❯ < / a > < / li > < / ul > < / div >
2020-05-03 03:01:21 +03:00
< / nav > <!-- End of weave -->
2019-03-17 14:40:57 +02:00
2020-03-19 02:11:25 +02:00
< / main >
2019-03-17 14:40:57 +02:00
< / body >
< / html >