1 /++
2 This module was automatically generated from the following grammar:
3 
4 #; This is a slightly modified copy of https://github.com/toml-lang/toml/blob/master/toml.abnf
5 #;
6 #; - '=/' has been removed, so all alternatives are defined using regular '/'.
7 #;
8 #; - Rules that share their names with keywords in D have their names appended
9 #;   with a hyphen (e.g., "float" becomes "float-"), which gets translated to an
10 #;   underscore in PEG.
11 #;
12 #; - https://github.com/sanjayss/abnf2peg has been used to translate the ABNF to
13 #;   PEG.
14 #;
15 #; - The PEG version also has `TomlGrammar:` added before the first rule.
16 
17 #; WARNING: This document is a work-in-progress and should not be considered
18 #; authoritative until further notice.
19 
20 #; This is an attempt to define TOML in ABNF according to the grammar defined
21 #; in RFC 5234 (http://www.ietf.org/rfc/rfc5234.txt).
22 
23 #; You can try out this grammar using http://instaparse.mojombo.com/
24 #; To do so, in the lower right, click on Options and change `:input-format` to
25 #; ':abnf'. Then paste this entire ABNF document into the grammar entry box
26 #; (above the options). Then you can type or paste a sample TOML document into
27 #; the beige box on the left. Tada!
28 
29 #; Overall Structure
30 
31 
32 TomlGrammar:
33 
34 
35 toml             <  expression+ :eoi
36 expression       <- ws (table / keyval)? ws comment?
37 
38 # expression       <- ws ( comment )? / ws keyval ws ( comment )? / ws table ws ( comment )?
39 
40 #; Whitespace
41 
42 ws               <- wschar*
43 wschar           <-  [ \t]   # Space / Horizontal tab
44 
45 #; Newline
46 
47 newline          <-  "\r"? "\n"   # LF / CRLF
48 
49 #; Comment
50 
51 comment_start_symbol <-  [#]  # #
52 non_ascii        <-  [\x80-\uD7FF\uE000-\U0010FFFF]
53 non_eol          <-  [\t -\x7F]  / non_ascii
54 
55 comment          <- comment_start_symbol non_eol*
56 
57 #; Key-Value pairs
58 
59 keyval           <- key keyval_sep val
60 
61 key              <- dotted_key / simple_key
62 simple_key       <- quoted_key / unquoted_key
63 
64 unquoted_key     <- ( ALPHA / DIGIT /  [-_]  )+ # A-Z / a-z / 0-9 / - / _
65 quoted_key       <- basic_string / literal_string
66 dotted_key       <- simple_key ( dot_sep simple_key )+
67 
68 dot_sep          <- ws  [.]  ws  # . Period
69 keyval_sep       <- ws  [=]  ws # =
70 
71 val              <- string_ / boolean / array / inline_table / date_time / float_ / integer
72 
73 #; String
74 
75 string_          <- ml_basic_string / basic_string / ml_literal_string / literal_string
76 
77 #; Basic String
78 
79 basic_string     <- quotation_mark basic_char* quotation_mark
80 
81 quotation_mark   <-  ["]             # "
82 
83 basic_char       <- basic_unescaped / escaped
84 basic_unescaped  <- wschar /  [!#-\[\]-~]  / non_ascii
85 escaped          <- escape escape_seq_char
86 
87 escape           <-  [\\]                    # \ backslash
88 # " / \ / b / f / n / r / t / uXXXX / UXXXXXXXX
89 
90 escape_seq_char  <-  ["\\bfnrt]  /  [u]  HEXDIG HEXDIG HEXDIG HEXDIG /  [U]  HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG HEXDIG
91 
92 #; Multiline Basic String
93 
94 ml_basic_string  <- ml_basic_string_delim ml_basic_body ml_basic_string_delim
95 ml_basic_string_delim <- quotation_mark quotation_mark quotation_mark
96 ml_basic_body    <- mlb_content* ( mlb_quotes mlb_content+ )* ( mlb_quotes )?
97 
98 mlb_content      <- mlb_char / newline / mlb_escaped_nl
99 mlb_char         <- mlb_unescaped / escaped
100 mlb_quotes       <- quotation_mark quotation_mark? !quotation_mark
101 mlb_unescaped    <- wschar /  [!#-\[\]-~]  / non_ascii
102 mlb_escaped_nl   <- escape ws newline ( wschar / newline )*
103 
104 #; Literal String
105 
106 literal_string   <- apostrophe literal_char* apostrophe
107 
108 apostrophe       <-  [']  # ' apostrophe
109 
110 literal_char     <-  [\t -&(-~]  / non_ascii
111 
112 #; Multiline Literal String
113 
114 ml_literal_string <- ml_literal_string_delim ml_literal_body ml_literal_string_delim
115 ml_literal_string_delim <- apostrophe apostrophe apostrophe
116 ml_literal_body  <- mll_content* ( mll_quotes mll_content+ )* ( mll_quotes )?
117 
118 mll_content      <- mll_char / newline
119 mll_char         <-  [\t -&(-~]  / non_ascii
120 mll_quotes       <- apostrophe apostrophe? !apostrophe
121 
122 #; Integer
123 
124 integer          <- hex_int / oct_int / bin_int / dec_int
125 
126 minus            <-  [-]                        # -
127 plus             <-  [+]                         # +
128 underscore       <-  [_]                   # _
129 digit1_9         <-  [1-9]                  # 1-9
130 digit0_7         <-  [0-7]                  # 0-7
131 digit0_1         <-  [0-1]                  # 0-1
132 
133 hex_prefix       <- "0x"               # 0x
134 oct_prefix       <- "0o"               # 0o
135 bin_prefix       <- "0b"               # 0b
136 
137 dec_int          <- ( minus / plus )? unsigned_dec_int
138 unsigned_dec_int <- digit1_9 ( DIGIT / underscore DIGIT )+ / DIGIT
139 
140 hex_int          <- hex_prefix HEXDIG ( HEXDIG / underscore HEXDIG )*
141 oct_int          <- oct_prefix digit0_7 ( digit0_7 / underscore digit0_7 )*
142 bin_int          <- bin_prefix digit0_1 ( digit0_1 / underscore digit0_1 )*
143 
144 #; Float
145 
146 float_           <- float_int_part ( exp / frac ( exp )? ) / special_float
147 
148 float_int_part   <- dec_int
149 frac             <- decimal_point zero_prefixable_int
150 decimal_point    <-  [.]                # .
151 zero_prefixable_int <- DIGIT ( DIGIT / underscore DIGIT )*
152 
153 exp              <- "e" float_exp_part
154 float_exp_part   <- ( minus / plus )? zero_prefixable_int
155 
156 special_float    <- ( minus / plus )? ( inf / nan )
157 inf              <- "inf"  # inf
158 nan              <- "nan"  # nan
159 
160 #; Boolean
161 
162 boolean          <- true_ / false_
163 
164 true_            <- "true"     # true
165 false_           <- "false"  # false
166 
167 #; Date and Time (as defined in RFC 3339)
168 
169 date_time        <- offset_date_time / local_date_time / local_date / local_time
170 
171 date_fullyear    <- DIGIT DIGIT DIGIT DIGIT
172 date_month       <- DIGIT DIGIT  # 01-12
173 date_mday        <- DIGIT DIGIT  # 01-28, 01-29, 01-30, 01-31 based on month/year
174 time_delim       <- "T" /  [ ]  # T, t, or space
175 time_hour        <- DIGIT DIGIT  # 00-23
176 time_minute      <- DIGIT DIGIT  # 00-59
177 time_second      <- DIGIT DIGIT  # 00-58, 00-59, 00-60 based on leap second rules
178 time_secfrac     <- "." DIGIT+
179 time_numoffset   <- ( "+" / "-" ) time_hour ":" time_minute
180 time_offset      <- "Z" / time_numoffset
181 
182 partial_time     <- time_hour ":" time_minute ":" time_second ( time_secfrac )?
183 full_date        <- date_fullyear "-" date_month "-" date_mday
184 full_time        <- partial_time time_offset
185 
186 #; Offset Date-Time
187 
188 offset_date_time <- full_date time_delim full_time
189 
190 #; Local Date-Time
191 
192 local_date_time  <- full_date time_delim partial_time
193 
194 #; Local Date
195 
196 local_date       <- full_date
197 
198 #; Local Time
199 
200 local_time       <- partial_time
201 
202 #; Array
203 
204 array            <- array_open ( array_values )? ws_comment_newline array_close
205 
206 array_open       <-  [\[]  # [
207 array_close      <-  [\]]  # ]
208 
209 array_values     <- ws_comment_newline val ws array_sep array_values / ws_comment_newline val ws ( array_sep )?
210 
211 array_sep        <-  [,]   # , Comma
212 
213 ws_comment_newline <- ( wschar / ( comment )? newline )*
214 
215 #; Table
216 
217 table            <- std_table / array_table
218 
219 #; Standard Table
220 
221 std_table        <- std_table_open key std_table_close
222 
223 std_table_open   <-  [\[]  ws     # [ Left square bracket
224 std_table_close  <- ws  [\]]      # ] Right square bracket
225 
226 #; Inline Table
227 
228 inline_table     <- inline_table_open ( inline_table_keyvals )? inline_table_close
229 
230 inline_table_open <-  [{]  ws     # {
231 inline_table_close <- ws  [}]      # }
232 inline_table_sep <- ws  [,]  ws  # , Comma
233 
234 inline_table_keyvals <- keyval ( inline_table_sep inline_table_keyvals )?
235 
236 #; Array Table
237 
238 array_table      <- array_table_open key array_table_close
239 
240 array_table_open <- "[[" ws  # [[ Double left square bracket
241 array_table_close <- ws "]]"  # ]] Double right square bracket
242 
243 #; Built-in ABNF terms, reproduced here for clarity
244 
245 ALPHA            <-  [A-Za-z]  # A-Z / a-z
246 DIGIT            <-  [0-9]  # 0-9
247 HEXDIG           <- DIGIT / [A-Fa-f]
248 
249 
250 +/
251 module toml_foolery.decode.peg_grammar;
252 
253 package import pegged.peg;
254 import std.algorithm: startsWith;
255 import std.functional: toDelegate;
256 
257 package struct GenericTomlGrammar(TParseTree)
258 {
259     import std.functional : toDelegate;
260     import pegged.dynamic.grammar;
261     static import pegged.peg;
262     struct TomlGrammar
263     {
264     enum name = "TomlGrammar";
265     static ParseTree delegate(ParseTree)[string] before;
266     static ParseTree delegate(ParseTree)[string] after;
267     static ParseTree delegate(ParseTree)[string] rules;
268     import std.typecons:Tuple, tuple;
269     static TParseTree[Tuple!(string, size_t)] memo;
270     static this()
271     {
272         rules["toml"] = toDelegate(&toml);
273         rules["expression"] = toDelegate(&expression);
274         rules["ws"] = toDelegate(&ws);
275         rules["wschar"] = toDelegate(&wschar);
276         rules["newline"] = toDelegate(&newline);
277         rules["comment_start_symbol"] = toDelegate(&comment_start_symbol);
278         rules["non_ascii"] = toDelegate(&non_ascii);
279         rules["non_eol"] = toDelegate(&non_eol);
280         rules["comment"] = toDelegate(&comment);
281         rules["keyval"] = toDelegate(&keyval);
282         rules["key"] = toDelegate(&key);
283         rules["simple_key"] = toDelegate(&simple_key);
284         rules["unquoted_key"] = toDelegate(&unquoted_key);
285         rules["quoted_key"] = toDelegate(&quoted_key);
286         rules["dotted_key"] = toDelegate(&dotted_key);
287         rules["dot_sep"] = toDelegate(&dot_sep);
288         rules["keyval_sep"] = toDelegate(&keyval_sep);
289         rules["val"] = toDelegate(&val);
290         rules["string_"] = toDelegate(&string_);
291         rules["basic_string"] = toDelegate(&basic_string);
292         rules["quotation_mark"] = toDelegate(&quotation_mark);
293         rules["basic_char"] = toDelegate(&basic_char);
294         rules["basic_unescaped"] = toDelegate(&basic_unescaped);
295         rules["escaped"] = toDelegate(&escaped);
296         rules["escape"] = toDelegate(&escape);
297         rules["escape_seq_char"] = toDelegate(&escape_seq_char);
298         rules["ml_basic_string"] = toDelegate(&ml_basic_string);
299         rules["ml_basic_string_delim"] = toDelegate(&ml_basic_string_delim);
300         rules["ml_basic_body"] = toDelegate(&ml_basic_body);
301         rules["mlb_content"] = toDelegate(&mlb_content);
302         rules["mlb_char"] = toDelegate(&mlb_char);
303         rules["mlb_quotes"] = toDelegate(&mlb_quotes);
304         rules["mlb_unescaped"] = toDelegate(&mlb_unescaped);
305         rules["mlb_escaped_nl"] = toDelegate(&mlb_escaped_nl);
306         rules["literal_string"] = toDelegate(&literal_string);
307         rules["apostrophe"] = toDelegate(&apostrophe);
308         rules["literal_char"] = toDelegate(&literal_char);
309         rules["ml_literal_string"] = toDelegate(&ml_literal_string);
310         rules["ml_literal_string_delim"] = toDelegate(&ml_literal_string_delim);
311         rules["ml_literal_body"] = toDelegate(&ml_literal_body);
312         rules["mll_content"] = toDelegate(&mll_content);
313         rules["mll_char"] = toDelegate(&mll_char);
314         rules["mll_quotes"] = toDelegate(&mll_quotes);
315         rules["integer"] = toDelegate(&integer);
316         rules["minus"] = toDelegate(&minus);
317         rules["plus"] = toDelegate(&plus);
318         rules["underscore"] = toDelegate(&underscore);
319         rules["digit1_9"] = toDelegate(&digit1_9);
320         rules["digit0_7"] = toDelegate(&digit0_7);
321         rules["digit0_1"] = toDelegate(&digit0_1);
322         rules["hex_prefix"] = toDelegate(&hex_prefix);
323         rules["oct_prefix"] = toDelegate(&oct_prefix);
324         rules["bin_prefix"] = toDelegate(&bin_prefix);
325         rules["dec_int"] = toDelegate(&dec_int);
326         rules["unsigned_dec_int"] = toDelegate(&unsigned_dec_int);
327         rules["hex_int"] = toDelegate(&hex_int);
328         rules["oct_int"] = toDelegate(&oct_int);
329         rules["bin_int"] = toDelegate(&bin_int);
330         rules["float_"] = toDelegate(&float_);
331         rules["float_int_part"] = toDelegate(&float_int_part);
332         rules["frac"] = toDelegate(&frac);
333         rules["decimal_point"] = toDelegate(&decimal_point);
334         rules["zero_prefixable_int"] = toDelegate(&zero_prefixable_int);
335         rules["exp"] = toDelegate(&exp);
336         rules["float_exp_part"] = toDelegate(&float_exp_part);
337         rules["special_float"] = toDelegate(&special_float);
338         rules["inf"] = toDelegate(&inf);
339         rules["nan"] = toDelegate(&nan);
340         rules["boolean"] = toDelegate(&boolean);
341         rules["true_"] = toDelegate(&true_);
342         rules["false_"] = toDelegate(&false_);
343         rules["date_time"] = toDelegate(&date_time);
344         rules["date_fullyear"] = toDelegate(&date_fullyear);
345         rules["date_month"] = toDelegate(&date_month);
346         rules["date_mday"] = toDelegate(&date_mday);
347         rules["time_delim"] = toDelegate(&time_delim);
348         rules["time_hour"] = toDelegate(&time_hour);
349         rules["time_minute"] = toDelegate(&time_minute);
350         rules["time_second"] = toDelegate(&time_second);
351         rules["time_secfrac"] = toDelegate(&time_secfrac);
352         rules["time_numoffset"] = toDelegate(&time_numoffset);
353         rules["time_offset"] = toDelegate(&time_offset);
354         rules["partial_time"] = toDelegate(&partial_time);
355         rules["full_date"] = toDelegate(&full_date);
356         rules["full_time"] = toDelegate(&full_time);
357         rules["offset_date_time"] = toDelegate(&offset_date_time);
358         rules["local_date_time"] = toDelegate(&local_date_time);
359         rules["local_date"] = toDelegate(&local_date);
360         rules["local_time"] = toDelegate(&local_time);
361         rules["array"] = toDelegate(&array);
362         rules["array_open"] = toDelegate(&array_open);
363         rules["array_close"] = toDelegate(&array_close);
364         rules["array_values"] = toDelegate(&array_values);
365         rules["array_sep"] = toDelegate(&array_sep);
366         rules["ws_comment_newline"] = toDelegate(&ws_comment_newline);
367         rules["table"] = toDelegate(&table);
368         rules["std_table"] = toDelegate(&std_table);
369         rules["std_table_open"] = toDelegate(&std_table_open);
370         rules["std_table_close"] = toDelegate(&std_table_close);
371         rules["inline_table"] = toDelegate(&inline_table);
372         rules["inline_table_open"] = toDelegate(&inline_table_open);
373         rules["inline_table_close"] = toDelegate(&inline_table_close);
374         rules["inline_table_sep"] = toDelegate(&inline_table_sep);
375         rules["inline_table_keyvals"] = toDelegate(&inline_table_keyvals);
376         rules["array_table"] = toDelegate(&array_table);
377         rules["array_table_open"] = toDelegate(&array_table_open);
378         rules["array_table_close"] = toDelegate(&array_table_close);
379         rules["ALPHA"] = toDelegate(&ALPHA);
380         rules["DIGIT"] = toDelegate(&DIGIT);
381         rules["HEXDIG"] = toDelegate(&HEXDIG);
382         rules["Spacing"] = toDelegate(&Spacing);
383     }
384 
385     template hooked(alias r, string name)
386     {
387         static ParseTree hooked(ParseTree p)
388         {
389             ParseTree result;
390 
391             if (name in before)
392             {
393                 result = before[name](p);
394                 if (result.successful)
395                     return result;
396             }
397 
398             result = r(p);
399             if (result.successful || name !in after)
400                 return result;
401 
402             result = after[name](p);
403             return result;
404         }
405 
406         static ParseTree hooked(string input)
407         {
408             return hooked!(r, name)(ParseTree("",false,[],input));
409         }
410     }
411 
412     static void addRuleBefore(string parentRule, string ruleSyntax)
413     {
414         // enum name is the current grammar name
415         DynamicGrammar dg = pegged.dynamic.grammar.grammar(name ~ ": " ~ ruleSyntax, rules);
416         foreach(ruleName,rule; dg.rules)
417             if (ruleName != "Spacing") // Keep the local Spacing rule, do not overwrite it
418                 rules[ruleName] = rule;
419         before[parentRule] = rules[dg.startingRule];
420     }
421 
422     static void addRuleAfter(string parentRule, string ruleSyntax)
423     {
424         // enum name is the current grammar named
425         DynamicGrammar dg = pegged.dynamic.grammar.grammar(name ~ ": " ~ ruleSyntax, rules);
426         foreach(name,rule; dg.rules)
427         {
428             if (name != "Spacing")
429                 rules[name] = rule;
430         }
431         after[parentRule] = rules[dg.startingRule];
432     }
433 
434     static bool isRule(string s)
435     {
436 		import std.algorithm : startsWith;
437         return s.startsWith("TomlGrammar.");
438     }
439     mixin decimateTree;
440 
441     alias spacing Spacing;
442 
443     static TParseTree toml(TParseTree p)
444     {
445         if(__ctfe)
446         {
447             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, expression, Spacing)), pegged.peg.discard!(pegged.peg.wrapAround!(Spacing, eoi, Spacing))), "TomlGrammar.toml")(p);
448         }
449         else
450         {
451             if (auto m = tuple(`toml`, p.end) in memo)
452                 return *m;
453             else
454             {
455                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, expression, Spacing)), pegged.peg.discard!(pegged.peg.wrapAround!(Spacing, eoi, Spacing))), "TomlGrammar.toml"), "toml")(p);
456                 memo[tuple(`toml`, p.end)] = result;
457                 return result;
458             }
459         }
460     }
461 
462     static TParseTree toml(string s)
463     {
464         if(__ctfe)
465         {
466             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, expression, Spacing)), pegged.peg.discard!(pegged.peg.wrapAround!(Spacing, eoi, Spacing))), "TomlGrammar.toml")(TParseTree("", false,[], s));
467         }
468         else
469         {
470             forgetMemo();
471             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.oneOrMore!(pegged.peg.wrapAround!(Spacing, expression, Spacing)), pegged.peg.discard!(pegged.peg.wrapAround!(Spacing, eoi, Spacing))), "TomlGrammar.toml"), "toml")(TParseTree("", false,[], s));
472         }
473     }
474     static string toml(GetName g)
475     {
476         return "TomlGrammar.toml";
477     }
478 
479     static TParseTree expression(TParseTree p)
480     {
481         if(__ctfe)
482         {
483             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.option!(pegged.peg.or!(table, keyval)), ws, pegged.peg.option!(comment)), "TomlGrammar.expression")(p);
484         }
485         else
486         {
487             if (auto m = tuple(`expression`, p.end) in memo)
488                 return *m;
489             else
490             {
491                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.option!(pegged.peg.or!(table, keyval)), ws, pegged.peg.option!(comment)), "TomlGrammar.expression"), "expression")(p);
492                 memo[tuple(`expression`, p.end)] = result;
493                 return result;
494             }
495         }
496     }
497 
498     static TParseTree expression(string s)
499     {
500         if(__ctfe)
501         {
502             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.option!(pegged.peg.or!(table, keyval)), ws, pegged.peg.option!(comment)), "TomlGrammar.expression")(TParseTree("", false,[], s));
503         }
504         else
505         {
506             forgetMemo();
507             return hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.option!(pegged.peg.or!(table, keyval)), ws, pegged.peg.option!(comment)), "TomlGrammar.expression"), "expression")(TParseTree("", false,[], s));
508         }
509     }
510     static string expression(GetName g)
511     {
512         return "TomlGrammar.expression";
513     }
514 
515     static TParseTree ws(TParseTree p)
516     {
517         if(__ctfe)
518         {
519             return         pegged.peg.defined!(pegged.peg.zeroOrMore!(wschar), "TomlGrammar.ws")(p);
520         }
521         else
522         {
523             if (auto m = tuple(`ws`, p.end) in memo)
524                 return *m;
525             else
526             {
527                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.zeroOrMore!(wschar), "TomlGrammar.ws"), "ws")(p);
528                 memo[tuple(`ws`, p.end)] = result;
529                 return result;
530             }
531         }
532     }
533 
534     static TParseTree ws(string s)
535     {
536         if(__ctfe)
537         {
538             return         pegged.peg.defined!(pegged.peg.zeroOrMore!(wschar), "TomlGrammar.ws")(TParseTree("", false,[], s));
539         }
540         else
541         {
542             forgetMemo();
543             return hooked!(pegged.peg.defined!(pegged.peg.zeroOrMore!(wschar), "TomlGrammar.ws"), "ws")(TParseTree("", false,[], s));
544         }
545     }
546     static string ws(GetName g)
547     {
548         return "TomlGrammar.ws";
549     }
550 
551     static TParseTree wschar(TParseTree p)
552     {
553         if(__ctfe)
554         {
555             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!(" "), pegged.peg.literal!("\t")), "TomlGrammar.wschar")(p);
556         }
557         else
558         {
559             if (auto m = tuple(`wschar`, p.end) in memo)
560                 return *m;
561             else
562             {
563                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!(" "), pegged.peg.literal!("\t")), "TomlGrammar.wschar"), "wschar")(p);
564                 memo[tuple(`wschar`, p.end)] = result;
565                 return result;
566             }
567         }
568     }
569 
570     static TParseTree wschar(string s)
571     {
572         if(__ctfe)
573         {
574             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!(" "), pegged.peg.literal!("\t")), "TomlGrammar.wschar")(TParseTree("", false,[], s));
575         }
576         else
577         {
578             forgetMemo();
579             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!(" "), pegged.peg.literal!("\t")), "TomlGrammar.wschar"), "wschar")(TParseTree("", false,[], s));
580         }
581     }
582     static string wschar(GetName g)
583     {
584         return "TomlGrammar.wschar";
585     }
586 
587     static TParseTree newline(TParseTree p)
588     {
589         if(__ctfe)
590         {
591             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("\r")), pegged.peg.literal!("\n")), "TomlGrammar.newline")(p);
592         }
593         else
594         {
595             if (auto m = tuple(`newline`, p.end) in memo)
596                 return *m;
597             else
598             {
599                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("\r")), pegged.peg.literal!("\n")), "TomlGrammar.newline"), "newline")(p);
600                 memo[tuple(`newline`, p.end)] = result;
601                 return result;
602             }
603         }
604     }
605 
606     static TParseTree newline(string s)
607     {
608         if(__ctfe)
609         {
610             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("\r")), pegged.peg.literal!("\n")), "TomlGrammar.newline")(TParseTree("", false,[], s));
611         }
612         else
613         {
614             forgetMemo();
615             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.literal!("\r")), pegged.peg.literal!("\n")), "TomlGrammar.newline"), "newline")(TParseTree("", false,[], s));
616         }
617     }
618     static string newline(GetName g)
619     {
620         return "TomlGrammar.newline";
621     }
622 
623     static TParseTree comment_start_symbol(TParseTree p)
624     {
625         if(__ctfe)
626         {
627             return         pegged.peg.defined!(pegged.peg.literal!("#"), "TomlGrammar.comment_start_symbol")(p);
628         }
629         else
630         {
631             if (auto m = tuple(`comment_start_symbol`, p.end) in memo)
632                 return *m;
633             else
634             {
635                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("#"), "TomlGrammar.comment_start_symbol"), "comment_start_symbol")(p);
636                 memo[tuple(`comment_start_symbol`, p.end)] = result;
637                 return result;
638             }
639         }
640     }
641 
642     static TParseTree comment_start_symbol(string s)
643     {
644         if(__ctfe)
645         {
646             return         pegged.peg.defined!(pegged.peg.literal!("#"), "TomlGrammar.comment_start_symbol")(TParseTree("", false,[], s));
647         }
648         else
649         {
650             forgetMemo();
651             return hooked!(pegged.peg.defined!(pegged.peg.literal!("#"), "TomlGrammar.comment_start_symbol"), "comment_start_symbol")(TParseTree("", false,[], s));
652         }
653     }
654     static string comment_start_symbol(GetName g)
655     {
656         return "TomlGrammar.comment_start_symbol";
657     }
658 
659     static TParseTree non_ascii(TParseTree p)
660     {
661         if(__ctfe)
662         {
663             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.charRange!('\x80', '\uD7FF'), pegged.peg.charRange!('\uE000', '\U0010FFFF')), "TomlGrammar.non_ascii")(p);
664         }
665         else
666         {
667             if (auto m = tuple(`non_ascii`, p.end) in memo)
668                 return *m;
669             else
670             {
671                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.charRange!('\x80', '\uD7FF'), pegged.peg.charRange!('\uE000', '\U0010FFFF')), "TomlGrammar.non_ascii"), "non_ascii")(p);
672                 memo[tuple(`non_ascii`, p.end)] = result;
673                 return result;
674             }
675         }
676     }
677 
678     static TParseTree non_ascii(string s)
679     {
680         if(__ctfe)
681         {
682             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.charRange!('\x80', '\uD7FF'), pegged.peg.charRange!('\uE000', '\U0010FFFF')), "TomlGrammar.non_ascii")(TParseTree("", false,[], s));
683         }
684         else
685         {
686             forgetMemo();
687             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.charRange!('\x80', '\uD7FF'), pegged.peg.charRange!('\uE000', '\U0010FFFF')), "TomlGrammar.non_ascii"), "non_ascii")(TParseTree("", false,[], s));
688         }
689     }
690     static string non_ascii(GetName g)
691     {
692         return "TomlGrammar.non_ascii";
693     }
694 
695     static TParseTree non_eol(TParseTree p)
696     {
697         if(__ctfe)
698         {
699             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!("\t"), pegged.peg.charRange!(' ', '\x7F')), non_ascii), "TomlGrammar.non_eol")(p);
700         }
701         else
702         {
703             if (auto m = tuple(`non_eol`, p.end) in memo)
704                 return *m;
705             else
706             {
707                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!("\t"), pegged.peg.charRange!(' ', '\x7F')), non_ascii), "TomlGrammar.non_eol"), "non_eol")(p);
708                 memo[tuple(`non_eol`, p.end)] = result;
709                 return result;
710             }
711         }
712     }
713 
714     static TParseTree non_eol(string s)
715     {
716         if(__ctfe)
717         {
718             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!("\t"), pegged.peg.charRange!(' ', '\x7F')), non_ascii), "TomlGrammar.non_eol")(TParseTree("", false,[], s));
719         }
720         else
721         {
722             forgetMemo();
723             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!("\t"), pegged.peg.charRange!(' ', '\x7F')), non_ascii), "TomlGrammar.non_eol"), "non_eol")(TParseTree("", false,[], s));
724         }
725     }
726     static string non_eol(GetName g)
727     {
728         return "TomlGrammar.non_eol";
729     }
730 
731     static TParseTree comment(TParseTree p)
732     {
733         if(__ctfe)
734         {
735             return         pegged.peg.defined!(pegged.peg.and!(comment_start_symbol, pegged.peg.zeroOrMore!(non_eol)), "TomlGrammar.comment")(p);
736         }
737         else
738         {
739             if (auto m = tuple(`comment`, p.end) in memo)
740                 return *m;
741             else
742             {
743                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(comment_start_symbol, pegged.peg.zeroOrMore!(non_eol)), "TomlGrammar.comment"), "comment")(p);
744                 memo[tuple(`comment`, p.end)] = result;
745                 return result;
746             }
747         }
748     }
749 
750     static TParseTree comment(string s)
751     {
752         if(__ctfe)
753         {
754             return         pegged.peg.defined!(pegged.peg.and!(comment_start_symbol, pegged.peg.zeroOrMore!(non_eol)), "TomlGrammar.comment")(TParseTree("", false,[], s));
755         }
756         else
757         {
758             forgetMemo();
759             return hooked!(pegged.peg.defined!(pegged.peg.and!(comment_start_symbol, pegged.peg.zeroOrMore!(non_eol)), "TomlGrammar.comment"), "comment")(TParseTree("", false,[], s));
760         }
761     }
762     static string comment(GetName g)
763     {
764         return "TomlGrammar.comment";
765     }
766 
767     static TParseTree keyval(TParseTree p)
768     {
769         if(__ctfe)
770         {
771             return         pegged.peg.defined!(pegged.peg.and!(key, keyval_sep, val), "TomlGrammar.keyval")(p);
772         }
773         else
774         {
775             if (auto m = tuple(`keyval`, p.end) in memo)
776                 return *m;
777             else
778             {
779                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(key, keyval_sep, val), "TomlGrammar.keyval"), "keyval")(p);
780                 memo[tuple(`keyval`, p.end)] = result;
781                 return result;
782             }
783         }
784     }
785 
786     static TParseTree keyval(string s)
787     {
788         if(__ctfe)
789         {
790             return         pegged.peg.defined!(pegged.peg.and!(key, keyval_sep, val), "TomlGrammar.keyval")(TParseTree("", false,[], s));
791         }
792         else
793         {
794             forgetMemo();
795             return hooked!(pegged.peg.defined!(pegged.peg.and!(key, keyval_sep, val), "TomlGrammar.keyval"), "keyval")(TParseTree("", false,[], s));
796         }
797     }
798     static string keyval(GetName g)
799     {
800         return "TomlGrammar.keyval";
801     }
802 
803     static TParseTree key(TParseTree p)
804     {
805         if(__ctfe)
806         {
807             return         pegged.peg.defined!(pegged.peg.or!(dotted_key, simple_key), "TomlGrammar.key")(p);
808         }
809         else
810         {
811             if (auto m = tuple(`key`, p.end) in memo)
812                 return *m;
813             else
814             {
815                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(dotted_key, simple_key), "TomlGrammar.key"), "key")(p);
816                 memo[tuple(`key`, p.end)] = result;
817                 return result;
818             }
819         }
820     }
821 
822     static TParseTree key(string s)
823     {
824         if(__ctfe)
825         {
826             return         pegged.peg.defined!(pegged.peg.or!(dotted_key, simple_key), "TomlGrammar.key")(TParseTree("", false,[], s));
827         }
828         else
829         {
830             forgetMemo();
831             return hooked!(pegged.peg.defined!(pegged.peg.or!(dotted_key, simple_key), "TomlGrammar.key"), "key")(TParseTree("", false,[], s));
832         }
833     }
834     static string key(GetName g)
835     {
836         return "TomlGrammar.key";
837     }
838 
839     static TParseTree simple_key(TParseTree p)
840     {
841         if(__ctfe)
842         {
843             return         pegged.peg.defined!(pegged.peg.or!(quoted_key, unquoted_key), "TomlGrammar.simple_key")(p);
844         }
845         else
846         {
847             if (auto m = tuple(`simple_key`, p.end) in memo)
848                 return *m;
849             else
850             {
851                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(quoted_key, unquoted_key), "TomlGrammar.simple_key"), "simple_key")(p);
852                 memo[tuple(`simple_key`, p.end)] = result;
853                 return result;
854             }
855         }
856     }
857 
858     static TParseTree simple_key(string s)
859     {
860         if(__ctfe)
861         {
862             return         pegged.peg.defined!(pegged.peg.or!(quoted_key, unquoted_key), "TomlGrammar.simple_key")(TParseTree("", false,[], s));
863         }
864         else
865         {
866             forgetMemo();
867             return hooked!(pegged.peg.defined!(pegged.peg.or!(quoted_key, unquoted_key), "TomlGrammar.simple_key"), "simple_key")(TParseTree("", false,[], s));
868         }
869     }
870     static string simple_key(GetName g)
871     {
872         return "TomlGrammar.simple_key";
873     }
874 
875     static TParseTree unquoted_key(TParseTree p)
876     {
877         if(__ctfe)
878         {
879             return         pegged.peg.defined!(pegged.peg.oneOrMore!(pegged.peg.or!(ALPHA, DIGIT, pegged.peg.or!(pegged.peg.literal!("-"), pegged.peg.literal!("_")))), "TomlGrammar.unquoted_key")(p);
880         }
881         else
882         {
883             if (auto m = tuple(`unquoted_key`, p.end) in memo)
884                 return *m;
885             else
886             {
887                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.oneOrMore!(pegged.peg.or!(ALPHA, DIGIT, pegged.peg.or!(pegged.peg.literal!("-"), pegged.peg.literal!("_")))), "TomlGrammar.unquoted_key"), "unquoted_key")(p);
888                 memo[tuple(`unquoted_key`, p.end)] = result;
889                 return result;
890             }
891         }
892     }
893 
894     static TParseTree unquoted_key(string s)
895     {
896         if(__ctfe)
897         {
898             return         pegged.peg.defined!(pegged.peg.oneOrMore!(pegged.peg.or!(ALPHA, DIGIT, pegged.peg.or!(pegged.peg.literal!("-"), pegged.peg.literal!("_")))), "TomlGrammar.unquoted_key")(TParseTree("", false,[], s));
899         }
900         else
901         {
902             forgetMemo();
903             return hooked!(pegged.peg.defined!(pegged.peg.oneOrMore!(pegged.peg.or!(ALPHA, DIGIT, pegged.peg.or!(pegged.peg.literal!("-"), pegged.peg.literal!("_")))), "TomlGrammar.unquoted_key"), "unquoted_key")(TParseTree("", false,[], s));
904         }
905     }
906     static string unquoted_key(GetName g)
907     {
908         return "TomlGrammar.unquoted_key";
909     }
910 
911     static TParseTree quoted_key(TParseTree p)
912     {
913         if(__ctfe)
914         {
915             return         pegged.peg.defined!(pegged.peg.or!(basic_string, literal_string), "TomlGrammar.quoted_key")(p);
916         }
917         else
918         {
919             if (auto m = tuple(`quoted_key`, p.end) in memo)
920                 return *m;
921             else
922             {
923                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(basic_string, literal_string), "TomlGrammar.quoted_key"), "quoted_key")(p);
924                 memo[tuple(`quoted_key`, p.end)] = result;
925                 return result;
926             }
927         }
928     }
929 
930     static TParseTree quoted_key(string s)
931     {
932         if(__ctfe)
933         {
934             return         pegged.peg.defined!(pegged.peg.or!(basic_string, literal_string), "TomlGrammar.quoted_key")(TParseTree("", false,[], s));
935         }
936         else
937         {
938             forgetMemo();
939             return hooked!(pegged.peg.defined!(pegged.peg.or!(basic_string, literal_string), "TomlGrammar.quoted_key"), "quoted_key")(TParseTree("", false,[], s));
940         }
941     }
942     static string quoted_key(GetName g)
943     {
944         return "TomlGrammar.quoted_key";
945     }
946 
947     static TParseTree dotted_key(TParseTree p)
948     {
949         if(__ctfe)
950         {
951             return         pegged.peg.defined!(pegged.peg.and!(simple_key, pegged.peg.oneOrMore!(pegged.peg.and!(dot_sep, simple_key))), "TomlGrammar.dotted_key")(p);
952         }
953         else
954         {
955             if (auto m = tuple(`dotted_key`, p.end) in memo)
956                 return *m;
957             else
958             {
959                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(simple_key, pegged.peg.oneOrMore!(pegged.peg.and!(dot_sep, simple_key))), "TomlGrammar.dotted_key"), "dotted_key")(p);
960                 memo[tuple(`dotted_key`, p.end)] = result;
961                 return result;
962             }
963         }
964     }
965 
966     static TParseTree dotted_key(string s)
967     {
968         if(__ctfe)
969         {
970             return         pegged.peg.defined!(pegged.peg.and!(simple_key, pegged.peg.oneOrMore!(pegged.peg.and!(dot_sep, simple_key))), "TomlGrammar.dotted_key")(TParseTree("", false,[], s));
971         }
972         else
973         {
974             forgetMemo();
975             return hooked!(pegged.peg.defined!(pegged.peg.and!(simple_key, pegged.peg.oneOrMore!(pegged.peg.and!(dot_sep, simple_key))), "TomlGrammar.dotted_key"), "dotted_key")(TParseTree("", false,[], s));
976         }
977     }
978     static string dotted_key(GetName g)
979     {
980         return "TomlGrammar.dotted_key";
981     }
982 
983     static TParseTree dot_sep(TParseTree p)
984     {
985         if(__ctfe)
986         {
987             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("."), ws), "TomlGrammar.dot_sep")(p);
988         }
989         else
990         {
991             if (auto m = tuple(`dot_sep`, p.end) in memo)
992                 return *m;
993             else
994             {
995                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("."), ws), "TomlGrammar.dot_sep"), "dot_sep")(p);
996                 memo[tuple(`dot_sep`, p.end)] = result;
997                 return result;
998             }
999         }
1000     }
1001 
1002     static TParseTree dot_sep(string s)
1003     {
1004         if(__ctfe)
1005         {
1006             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("."), ws), "TomlGrammar.dot_sep")(TParseTree("", false,[], s));
1007         }
1008         else
1009         {
1010             forgetMemo();
1011             return hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("."), ws), "TomlGrammar.dot_sep"), "dot_sep")(TParseTree("", false,[], s));
1012         }
1013     }
1014     static string dot_sep(GetName g)
1015     {
1016         return "TomlGrammar.dot_sep";
1017     }
1018 
1019     static TParseTree keyval_sep(TParseTree p)
1020     {
1021         if(__ctfe)
1022         {
1023             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("="), ws), "TomlGrammar.keyval_sep")(p);
1024         }
1025         else
1026         {
1027             if (auto m = tuple(`keyval_sep`, p.end) in memo)
1028                 return *m;
1029             else
1030             {
1031                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("="), ws), "TomlGrammar.keyval_sep"), "keyval_sep")(p);
1032                 memo[tuple(`keyval_sep`, p.end)] = result;
1033                 return result;
1034             }
1035         }
1036     }
1037 
1038     static TParseTree keyval_sep(string s)
1039     {
1040         if(__ctfe)
1041         {
1042             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("="), ws), "TomlGrammar.keyval_sep")(TParseTree("", false,[], s));
1043         }
1044         else
1045         {
1046             forgetMemo();
1047             return hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("="), ws), "TomlGrammar.keyval_sep"), "keyval_sep")(TParseTree("", false,[], s));
1048         }
1049     }
1050     static string keyval_sep(GetName g)
1051     {
1052         return "TomlGrammar.keyval_sep";
1053     }
1054 
1055     static TParseTree val(TParseTree p)
1056     {
1057         if(__ctfe)
1058         {
1059             return         pegged.peg.defined!(pegged.peg.or!(string_, boolean, array, inline_table, date_time, float_, integer), "TomlGrammar.val")(p);
1060         }
1061         else
1062         {
1063             if (auto m = tuple(`val`, p.end) in memo)
1064                 return *m;
1065             else
1066             {
1067                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(string_, boolean, array, inline_table, date_time, float_, integer), "TomlGrammar.val"), "val")(p);
1068                 memo[tuple(`val`, p.end)] = result;
1069                 return result;
1070             }
1071         }
1072     }
1073 
1074     static TParseTree val(string s)
1075     {
1076         if(__ctfe)
1077         {
1078             return         pegged.peg.defined!(pegged.peg.or!(string_, boolean, array, inline_table, date_time, float_, integer), "TomlGrammar.val")(TParseTree("", false,[], s));
1079         }
1080         else
1081         {
1082             forgetMemo();
1083             return hooked!(pegged.peg.defined!(pegged.peg.or!(string_, boolean, array, inline_table, date_time, float_, integer), "TomlGrammar.val"), "val")(TParseTree("", false,[], s));
1084         }
1085     }
1086     static string val(GetName g)
1087     {
1088         return "TomlGrammar.val";
1089     }
1090 
1091     static TParseTree string_(TParseTree p)
1092     {
1093         if(__ctfe)
1094         {
1095             return         pegged.peg.defined!(pegged.peg.or!(ml_basic_string, basic_string, ml_literal_string, literal_string), "TomlGrammar.string_")(p);
1096         }
1097         else
1098         {
1099             if (auto m = tuple(`string_`, p.end) in memo)
1100                 return *m;
1101             else
1102             {
1103                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(ml_basic_string, basic_string, ml_literal_string, literal_string), "TomlGrammar.string_"), "string_")(p);
1104                 memo[tuple(`string_`, p.end)] = result;
1105                 return result;
1106             }
1107         }
1108     }
1109 
1110     static TParseTree string_(string s)
1111     {
1112         if(__ctfe)
1113         {
1114             return         pegged.peg.defined!(pegged.peg.or!(ml_basic_string, basic_string, ml_literal_string, literal_string), "TomlGrammar.string_")(TParseTree("", false,[], s));
1115         }
1116         else
1117         {
1118             forgetMemo();
1119             return hooked!(pegged.peg.defined!(pegged.peg.or!(ml_basic_string, basic_string, ml_literal_string, literal_string), "TomlGrammar.string_"), "string_")(TParseTree("", false,[], s));
1120         }
1121     }
1122     static string string_(GetName g)
1123     {
1124         return "TomlGrammar.string_";
1125     }
1126 
1127     static TParseTree basic_string(TParseTree p)
1128     {
1129         if(__ctfe)
1130         {
1131             return         pegged.peg.defined!(pegged.peg.and!(quotation_mark, pegged.peg.zeroOrMore!(basic_char), quotation_mark), "TomlGrammar.basic_string")(p);
1132         }
1133         else
1134         {
1135             if (auto m = tuple(`basic_string`, p.end) in memo)
1136                 return *m;
1137             else
1138             {
1139                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(quotation_mark, pegged.peg.zeroOrMore!(basic_char), quotation_mark), "TomlGrammar.basic_string"), "basic_string")(p);
1140                 memo[tuple(`basic_string`, p.end)] = result;
1141                 return result;
1142             }
1143         }
1144     }
1145 
1146     static TParseTree basic_string(string s)
1147     {
1148         if(__ctfe)
1149         {
1150             return         pegged.peg.defined!(pegged.peg.and!(quotation_mark, pegged.peg.zeroOrMore!(basic_char), quotation_mark), "TomlGrammar.basic_string")(TParseTree("", false,[], s));
1151         }
1152         else
1153         {
1154             forgetMemo();
1155             return hooked!(pegged.peg.defined!(pegged.peg.and!(quotation_mark, pegged.peg.zeroOrMore!(basic_char), quotation_mark), "TomlGrammar.basic_string"), "basic_string")(TParseTree("", false,[], s));
1156         }
1157     }
1158     static string basic_string(GetName g)
1159     {
1160         return "TomlGrammar.basic_string";
1161     }
1162 
1163     static TParseTree quotation_mark(TParseTree p)
1164     {
1165         if(__ctfe)
1166         {
1167             return         pegged.peg.defined!(pegged.peg.literal!(`"`), "TomlGrammar.quotation_mark")(p);
1168         }
1169         else
1170         {
1171             if (auto m = tuple(`quotation_mark`, p.end) in memo)
1172                 return *m;
1173             else
1174             {
1175                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!(`"`), "TomlGrammar.quotation_mark"), "quotation_mark")(p);
1176                 memo[tuple(`quotation_mark`, p.end)] = result;
1177                 return result;
1178             }
1179         }
1180     }
1181 
1182     static TParseTree quotation_mark(string s)
1183     {
1184         if(__ctfe)
1185         {
1186             return         pegged.peg.defined!(pegged.peg.literal!(`"`), "TomlGrammar.quotation_mark")(TParseTree("", false,[], s));
1187         }
1188         else
1189         {
1190             forgetMemo();
1191             return hooked!(pegged.peg.defined!(pegged.peg.literal!(`"`), "TomlGrammar.quotation_mark"), "quotation_mark")(TParseTree("", false,[], s));
1192         }
1193     }
1194     static string quotation_mark(GetName g)
1195     {
1196         return "TomlGrammar.quotation_mark";
1197     }
1198 
1199     static TParseTree basic_char(TParseTree p)
1200     {
1201         if(__ctfe)
1202         {
1203             return         pegged.peg.defined!(pegged.peg.or!(basic_unescaped, escaped), "TomlGrammar.basic_char")(p);
1204         }
1205         else
1206         {
1207             if (auto m = tuple(`basic_char`, p.end) in memo)
1208                 return *m;
1209             else
1210             {
1211                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(basic_unescaped, escaped), "TomlGrammar.basic_char"), "basic_char")(p);
1212                 memo[tuple(`basic_char`, p.end)] = result;
1213                 return result;
1214             }
1215         }
1216     }
1217 
1218     static TParseTree basic_char(string s)
1219     {
1220         if(__ctfe)
1221         {
1222             return         pegged.peg.defined!(pegged.peg.or!(basic_unescaped, escaped), "TomlGrammar.basic_char")(TParseTree("", false,[], s));
1223         }
1224         else
1225         {
1226             forgetMemo();
1227             return hooked!(pegged.peg.defined!(pegged.peg.or!(basic_unescaped, escaped), "TomlGrammar.basic_char"), "basic_char")(TParseTree("", false,[], s));
1228         }
1229     }
1230     static string basic_char(GetName g)
1231     {
1232         return "TomlGrammar.basic_char";
1233     }
1234 
1235     static TParseTree basic_unescaped(TParseTree p)
1236     {
1237         if(__ctfe)
1238         {
1239             return         pegged.peg.defined!(pegged.peg.or!(wschar, pegged.peg.or!(pegged.peg.literal!("!"), pegged.peg.charRange!('#', '['), pegged.peg.charRange!(']', '~')), non_ascii), "TomlGrammar.basic_unescaped")(p);
1240         }
1241         else
1242         {
1243             if (auto m = tuple(`basic_unescaped`, p.end) in memo)
1244                 return *m;
1245             else
1246             {
1247                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(wschar, pegged.peg.or!(pegged.peg.literal!("!"), pegged.peg.charRange!('#', '['), pegged.peg.charRange!(']', '~')), non_ascii), "TomlGrammar.basic_unescaped"), "basic_unescaped")(p);
1248                 memo[tuple(`basic_unescaped`, p.end)] = result;
1249                 return result;
1250             }
1251         }
1252     }
1253 
1254     static TParseTree basic_unescaped(string s)
1255     {
1256         if(__ctfe)
1257         {
1258             return         pegged.peg.defined!(pegged.peg.or!(wschar, pegged.peg.or!(pegged.peg.literal!("!"), pegged.peg.charRange!('#', '['), pegged.peg.charRange!(']', '~')), non_ascii), "TomlGrammar.basic_unescaped")(TParseTree("", false,[], s));
1259         }
1260         else
1261         {
1262             forgetMemo();
1263             return hooked!(pegged.peg.defined!(pegged.peg.or!(wschar, pegged.peg.or!(pegged.peg.literal!("!"), pegged.peg.charRange!('#', '['), pegged.peg.charRange!(']', '~')), non_ascii), "TomlGrammar.basic_unescaped"), "basic_unescaped")(TParseTree("", false,[], s));
1264         }
1265     }
1266     static string basic_unescaped(GetName g)
1267     {
1268         return "TomlGrammar.basic_unescaped";
1269     }
1270 
1271     static TParseTree escaped(TParseTree p)
1272     {
1273         if(__ctfe)
1274         {
1275             return         pegged.peg.defined!(pegged.peg.and!(escape, escape_seq_char), "TomlGrammar.escaped")(p);
1276         }
1277         else
1278         {
1279             if (auto m = tuple(`escaped`, p.end) in memo)
1280                 return *m;
1281             else
1282             {
1283                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(escape, escape_seq_char), "TomlGrammar.escaped"), "escaped")(p);
1284                 memo[tuple(`escaped`, p.end)] = result;
1285                 return result;
1286             }
1287         }
1288     }
1289 
1290     static TParseTree escaped(string s)
1291     {
1292         if(__ctfe)
1293         {
1294             return         pegged.peg.defined!(pegged.peg.and!(escape, escape_seq_char), "TomlGrammar.escaped")(TParseTree("", false,[], s));
1295         }
1296         else
1297         {
1298             forgetMemo();
1299             return hooked!(pegged.peg.defined!(pegged.peg.and!(escape, escape_seq_char), "TomlGrammar.escaped"), "escaped")(TParseTree("", false,[], s));
1300         }
1301     }
1302     static string escaped(GetName g)
1303     {
1304         return "TomlGrammar.escaped";
1305     }
1306 
1307     static TParseTree escape(TParseTree p)
1308     {
1309         if(__ctfe)
1310         {
1311             return         pegged.peg.defined!(pegged.peg.literal!(`\`), "TomlGrammar.escape")(p);
1312         }
1313         else
1314         {
1315             if (auto m = tuple(`escape`, p.end) in memo)
1316                 return *m;
1317             else
1318             {
1319                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!(`\`), "TomlGrammar.escape"), "escape")(p);
1320                 memo[tuple(`escape`, p.end)] = result;
1321                 return result;
1322             }
1323         }
1324     }
1325 
1326     static TParseTree escape(string s)
1327     {
1328         if(__ctfe)
1329         {
1330             return         pegged.peg.defined!(pegged.peg.literal!(`\`), "TomlGrammar.escape")(TParseTree("", false,[], s));
1331         }
1332         else
1333         {
1334             forgetMemo();
1335             return hooked!(pegged.peg.defined!(pegged.peg.literal!(`\`), "TomlGrammar.escape"), "escape")(TParseTree("", false,[], s));
1336         }
1337     }
1338     static string escape(GetName g)
1339     {
1340         return "TomlGrammar.escape";
1341     }
1342 
1343     static TParseTree escape_seq_char(TParseTree p)
1344     {
1345         if(__ctfe)
1346         {
1347             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!(`"`), pegged.peg.literal!(`\`), pegged.peg.literal!("b"), pegged.peg.literal!("f"), pegged.peg.literal!("n"), pegged.peg.literal!("r"), pegged.peg.literal!("t")), pegged.peg.and!(pegged.peg.literal!("u"), HEXDIG, HEXDIG, HEXDIG, HEXDIG), pegged.peg.and!(pegged.peg.literal!("U"), HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG)), "TomlGrammar.escape_seq_char")(p);
1348         }
1349         else
1350         {
1351             if (auto m = tuple(`escape_seq_char`, p.end) in memo)
1352                 return *m;
1353             else
1354             {
1355                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!(`"`), pegged.peg.literal!(`\`), pegged.peg.literal!("b"), pegged.peg.literal!("f"), pegged.peg.literal!("n"), pegged.peg.literal!("r"), pegged.peg.literal!("t")), pegged.peg.and!(pegged.peg.literal!("u"), HEXDIG, HEXDIG, HEXDIG, HEXDIG), pegged.peg.and!(pegged.peg.literal!("U"), HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG)), "TomlGrammar.escape_seq_char"), "escape_seq_char")(p);
1356                 memo[tuple(`escape_seq_char`, p.end)] = result;
1357                 return result;
1358             }
1359         }
1360     }
1361 
1362     static TParseTree escape_seq_char(string s)
1363     {
1364         if(__ctfe)
1365         {
1366             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!(`"`), pegged.peg.literal!(`\`), pegged.peg.literal!("b"), pegged.peg.literal!("f"), pegged.peg.literal!("n"), pegged.peg.literal!("r"), pegged.peg.literal!("t")), pegged.peg.and!(pegged.peg.literal!("u"), HEXDIG, HEXDIG, HEXDIG, HEXDIG), pegged.peg.and!(pegged.peg.literal!("U"), HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG)), "TomlGrammar.escape_seq_char")(TParseTree("", false,[], s));
1367         }
1368         else
1369         {
1370             forgetMemo();
1371             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!(`"`), pegged.peg.literal!(`\`), pegged.peg.literal!("b"), pegged.peg.literal!("f"), pegged.peg.literal!("n"), pegged.peg.literal!("r"), pegged.peg.literal!("t")), pegged.peg.and!(pegged.peg.literal!("u"), HEXDIG, HEXDIG, HEXDIG, HEXDIG), pegged.peg.and!(pegged.peg.literal!("U"), HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG, HEXDIG)), "TomlGrammar.escape_seq_char"), "escape_seq_char")(TParseTree("", false,[], s));
1372         }
1373     }
1374     static string escape_seq_char(GetName g)
1375     {
1376         return "TomlGrammar.escape_seq_char";
1377     }
1378 
1379     static TParseTree ml_basic_string(TParseTree p)
1380     {
1381         if(__ctfe)
1382         {
1383             return         pegged.peg.defined!(pegged.peg.and!(ml_basic_string_delim, ml_basic_body, ml_basic_string_delim), "TomlGrammar.ml_basic_string")(p);
1384         }
1385         else
1386         {
1387             if (auto m = tuple(`ml_basic_string`, p.end) in memo)
1388                 return *m;
1389             else
1390             {
1391                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(ml_basic_string_delim, ml_basic_body, ml_basic_string_delim), "TomlGrammar.ml_basic_string"), "ml_basic_string")(p);
1392                 memo[tuple(`ml_basic_string`, p.end)] = result;
1393                 return result;
1394             }
1395         }
1396     }
1397 
1398     static TParseTree ml_basic_string(string s)
1399     {
1400         if(__ctfe)
1401         {
1402             return         pegged.peg.defined!(pegged.peg.and!(ml_basic_string_delim, ml_basic_body, ml_basic_string_delim), "TomlGrammar.ml_basic_string")(TParseTree("", false,[], s));
1403         }
1404         else
1405         {
1406             forgetMemo();
1407             return hooked!(pegged.peg.defined!(pegged.peg.and!(ml_basic_string_delim, ml_basic_body, ml_basic_string_delim), "TomlGrammar.ml_basic_string"), "ml_basic_string")(TParseTree("", false,[], s));
1408         }
1409     }
1410     static string ml_basic_string(GetName g)
1411     {
1412         return "TomlGrammar.ml_basic_string";
1413     }
1414 
1415     static TParseTree ml_basic_string_delim(TParseTree p)
1416     {
1417         if(__ctfe)
1418         {
1419             return         pegged.peg.defined!(pegged.peg.and!(quotation_mark, quotation_mark, quotation_mark), "TomlGrammar.ml_basic_string_delim")(p);
1420         }
1421         else
1422         {
1423             if (auto m = tuple(`ml_basic_string_delim`, p.end) in memo)
1424                 return *m;
1425             else
1426             {
1427                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(quotation_mark, quotation_mark, quotation_mark), "TomlGrammar.ml_basic_string_delim"), "ml_basic_string_delim")(p);
1428                 memo[tuple(`ml_basic_string_delim`, p.end)] = result;
1429                 return result;
1430             }
1431         }
1432     }
1433 
1434     static TParseTree ml_basic_string_delim(string s)
1435     {
1436         if(__ctfe)
1437         {
1438             return         pegged.peg.defined!(pegged.peg.and!(quotation_mark, quotation_mark, quotation_mark), "TomlGrammar.ml_basic_string_delim")(TParseTree("", false,[], s));
1439         }
1440         else
1441         {
1442             forgetMemo();
1443             return hooked!(pegged.peg.defined!(pegged.peg.and!(quotation_mark, quotation_mark, quotation_mark), "TomlGrammar.ml_basic_string_delim"), "ml_basic_string_delim")(TParseTree("", false,[], s));
1444         }
1445     }
1446     static string ml_basic_string_delim(GetName g)
1447     {
1448         return "TomlGrammar.ml_basic_string_delim";
1449     }
1450 
1451     static TParseTree ml_basic_body(TParseTree p)
1452     {
1453         if(__ctfe)
1454         {
1455             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(mlb_content), pegged.peg.zeroOrMore!(pegged.peg.and!(mlb_quotes, pegged.peg.oneOrMore!(mlb_content))), pegged.peg.option!(mlb_quotes)), "TomlGrammar.ml_basic_body")(p);
1456         }
1457         else
1458         {
1459             if (auto m = tuple(`ml_basic_body`, p.end) in memo)
1460                 return *m;
1461             else
1462             {
1463                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(mlb_content), pegged.peg.zeroOrMore!(pegged.peg.and!(mlb_quotes, pegged.peg.oneOrMore!(mlb_content))), pegged.peg.option!(mlb_quotes)), "TomlGrammar.ml_basic_body"), "ml_basic_body")(p);
1464                 memo[tuple(`ml_basic_body`, p.end)] = result;
1465                 return result;
1466             }
1467         }
1468     }
1469 
1470     static TParseTree ml_basic_body(string s)
1471     {
1472         if(__ctfe)
1473         {
1474             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(mlb_content), pegged.peg.zeroOrMore!(pegged.peg.and!(mlb_quotes, pegged.peg.oneOrMore!(mlb_content))), pegged.peg.option!(mlb_quotes)), "TomlGrammar.ml_basic_body")(TParseTree("", false,[], s));
1475         }
1476         else
1477         {
1478             forgetMemo();
1479             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(mlb_content), pegged.peg.zeroOrMore!(pegged.peg.and!(mlb_quotes, pegged.peg.oneOrMore!(mlb_content))), pegged.peg.option!(mlb_quotes)), "TomlGrammar.ml_basic_body"), "ml_basic_body")(TParseTree("", false,[], s));
1480         }
1481     }
1482     static string ml_basic_body(GetName g)
1483     {
1484         return "TomlGrammar.ml_basic_body";
1485     }
1486 
1487     static TParseTree mlb_content(TParseTree p)
1488     {
1489         if(__ctfe)
1490         {
1491             return         pegged.peg.defined!(pegged.peg.or!(mlb_char, newline, mlb_escaped_nl), "TomlGrammar.mlb_content")(p);
1492         }
1493         else
1494         {
1495             if (auto m = tuple(`mlb_content`, p.end) in memo)
1496                 return *m;
1497             else
1498             {
1499                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(mlb_char, newline, mlb_escaped_nl), "TomlGrammar.mlb_content"), "mlb_content")(p);
1500                 memo[tuple(`mlb_content`, p.end)] = result;
1501                 return result;
1502             }
1503         }
1504     }
1505 
1506     static TParseTree mlb_content(string s)
1507     {
1508         if(__ctfe)
1509         {
1510             return         pegged.peg.defined!(pegged.peg.or!(mlb_char, newline, mlb_escaped_nl), "TomlGrammar.mlb_content")(TParseTree("", false,[], s));
1511         }
1512         else
1513         {
1514             forgetMemo();
1515             return hooked!(pegged.peg.defined!(pegged.peg.or!(mlb_char, newline, mlb_escaped_nl), "TomlGrammar.mlb_content"), "mlb_content")(TParseTree("", false,[], s));
1516         }
1517     }
1518     static string mlb_content(GetName g)
1519     {
1520         return "TomlGrammar.mlb_content";
1521     }
1522 
1523     static TParseTree mlb_char(TParseTree p)
1524     {
1525         if(__ctfe)
1526         {
1527             return         pegged.peg.defined!(pegged.peg.or!(mlb_unescaped, escaped), "TomlGrammar.mlb_char")(p);
1528         }
1529         else
1530         {
1531             if (auto m = tuple(`mlb_char`, p.end) in memo)
1532                 return *m;
1533             else
1534             {
1535                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(mlb_unescaped, escaped), "TomlGrammar.mlb_char"), "mlb_char")(p);
1536                 memo[tuple(`mlb_char`, p.end)] = result;
1537                 return result;
1538             }
1539         }
1540     }
1541 
1542     static TParseTree mlb_char(string s)
1543     {
1544         if(__ctfe)
1545         {
1546             return         pegged.peg.defined!(pegged.peg.or!(mlb_unescaped, escaped), "TomlGrammar.mlb_char")(TParseTree("", false,[], s));
1547         }
1548         else
1549         {
1550             forgetMemo();
1551             return hooked!(pegged.peg.defined!(pegged.peg.or!(mlb_unescaped, escaped), "TomlGrammar.mlb_char"), "mlb_char")(TParseTree("", false,[], s));
1552         }
1553     }
1554     static string mlb_char(GetName g)
1555     {
1556         return "TomlGrammar.mlb_char";
1557     }
1558 
1559     static TParseTree mlb_quotes(TParseTree p)
1560     {
1561         if(__ctfe)
1562         {
1563             return         pegged.peg.defined!(pegged.peg.and!(quotation_mark, pegged.peg.option!(quotation_mark), pegged.peg.negLookahead!(quotation_mark)), "TomlGrammar.mlb_quotes")(p);
1564         }
1565         else
1566         {
1567             if (auto m = tuple(`mlb_quotes`, p.end) in memo)
1568                 return *m;
1569             else
1570             {
1571                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(quotation_mark, pegged.peg.option!(quotation_mark), pegged.peg.negLookahead!(quotation_mark)), "TomlGrammar.mlb_quotes"), "mlb_quotes")(p);
1572                 memo[tuple(`mlb_quotes`, p.end)] = result;
1573                 return result;
1574             }
1575         }
1576     }
1577 
1578     static TParseTree mlb_quotes(string s)
1579     {
1580         if(__ctfe)
1581         {
1582             return         pegged.peg.defined!(pegged.peg.and!(quotation_mark, pegged.peg.option!(quotation_mark), pegged.peg.negLookahead!(quotation_mark)), "TomlGrammar.mlb_quotes")(TParseTree("", false,[], s));
1583         }
1584         else
1585         {
1586             forgetMemo();
1587             return hooked!(pegged.peg.defined!(pegged.peg.and!(quotation_mark, pegged.peg.option!(quotation_mark), pegged.peg.negLookahead!(quotation_mark)), "TomlGrammar.mlb_quotes"), "mlb_quotes")(TParseTree("", false,[], s));
1588         }
1589     }
1590     static string mlb_quotes(GetName g)
1591     {
1592         return "TomlGrammar.mlb_quotes";
1593     }
1594 
1595     static TParseTree mlb_unescaped(TParseTree p)
1596     {
1597         if(__ctfe)
1598         {
1599             return         pegged.peg.defined!(pegged.peg.or!(wschar, pegged.peg.or!(pegged.peg.literal!("!"), pegged.peg.charRange!('#', '['), pegged.peg.charRange!(']', '~')), non_ascii), "TomlGrammar.mlb_unescaped")(p);
1600         }
1601         else
1602         {
1603             if (auto m = tuple(`mlb_unescaped`, p.end) in memo)
1604                 return *m;
1605             else
1606             {
1607                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(wschar, pegged.peg.or!(pegged.peg.literal!("!"), pegged.peg.charRange!('#', '['), pegged.peg.charRange!(']', '~')), non_ascii), "TomlGrammar.mlb_unescaped"), "mlb_unescaped")(p);
1608                 memo[tuple(`mlb_unescaped`, p.end)] = result;
1609                 return result;
1610             }
1611         }
1612     }
1613 
1614     static TParseTree mlb_unescaped(string s)
1615     {
1616         if(__ctfe)
1617         {
1618             return         pegged.peg.defined!(pegged.peg.or!(wschar, pegged.peg.or!(pegged.peg.literal!("!"), pegged.peg.charRange!('#', '['), pegged.peg.charRange!(']', '~')), non_ascii), "TomlGrammar.mlb_unescaped")(TParseTree("", false,[], s));
1619         }
1620         else
1621         {
1622             forgetMemo();
1623             return hooked!(pegged.peg.defined!(pegged.peg.or!(wschar, pegged.peg.or!(pegged.peg.literal!("!"), pegged.peg.charRange!('#', '['), pegged.peg.charRange!(']', '~')), non_ascii), "TomlGrammar.mlb_unescaped"), "mlb_unescaped")(TParseTree("", false,[], s));
1624         }
1625     }
1626     static string mlb_unescaped(GetName g)
1627     {
1628         return "TomlGrammar.mlb_unescaped";
1629     }
1630 
1631     static TParseTree mlb_escaped_nl(TParseTree p)
1632     {
1633         if(__ctfe)
1634         {
1635             return         pegged.peg.defined!(pegged.peg.and!(escape, ws, newline, pegged.peg.zeroOrMore!(pegged.peg.or!(wschar, newline))), "TomlGrammar.mlb_escaped_nl")(p);
1636         }
1637         else
1638         {
1639             if (auto m = tuple(`mlb_escaped_nl`, p.end) in memo)
1640                 return *m;
1641             else
1642             {
1643                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(escape, ws, newline, pegged.peg.zeroOrMore!(pegged.peg.or!(wschar, newline))), "TomlGrammar.mlb_escaped_nl"), "mlb_escaped_nl")(p);
1644                 memo[tuple(`mlb_escaped_nl`, p.end)] = result;
1645                 return result;
1646             }
1647         }
1648     }
1649 
1650     static TParseTree mlb_escaped_nl(string s)
1651     {
1652         if(__ctfe)
1653         {
1654             return         pegged.peg.defined!(pegged.peg.and!(escape, ws, newline, pegged.peg.zeroOrMore!(pegged.peg.or!(wschar, newline))), "TomlGrammar.mlb_escaped_nl")(TParseTree("", false,[], s));
1655         }
1656         else
1657         {
1658             forgetMemo();
1659             return hooked!(pegged.peg.defined!(pegged.peg.and!(escape, ws, newline, pegged.peg.zeroOrMore!(pegged.peg.or!(wschar, newline))), "TomlGrammar.mlb_escaped_nl"), "mlb_escaped_nl")(TParseTree("", false,[], s));
1660         }
1661     }
1662     static string mlb_escaped_nl(GetName g)
1663     {
1664         return "TomlGrammar.mlb_escaped_nl";
1665     }
1666 
1667     static TParseTree literal_string(TParseTree p)
1668     {
1669         if(__ctfe)
1670         {
1671             return         pegged.peg.defined!(pegged.peg.and!(apostrophe, pegged.peg.zeroOrMore!(literal_char), apostrophe), "TomlGrammar.literal_string")(p);
1672         }
1673         else
1674         {
1675             if (auto m = tuple(`literal_string`, p.end) in memo)
1676                 return *m;
1677             else
1678             {
1679                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(apostrophe, pegged.peg.zeroOrMore!(literal_char), apostrophe), "TomlGrammar.literal_string"), "literal_string")(p);
1680                 memo[tuple(`literal_string`, p.end)] = result;
1681                 return result;
1682             }
1683         }
1684     }
1685 
1686     static TParseTree literal_string(string s)
1687     {
1688         if(__ctfe)
1689         {
1690             return         pegged.peg.defined!(pegged.peg.and!(apostrophe, pegged.peg.zeroOrMore!(literal_char), apostrophe), "TomlGrammar.literal_string")(TParseTree("", false,[], s));
1691         }
1692         else
1693         {
1694             forgetMemo();
1695             return hooked!(pegged.peg.defined!(pegged.peg.and!(apostrophe, pegged.peg.zeroOrMore!(literal_char), apostrophe), "TomlGrammar.literal_string"), "literal_string")(TParseTree("", false,[], s));
1696         }
1697     }
1698     static string literal_string(GetName g)
1699     {
1700         return "TomlGrammar.literal_string";
1701     }
1702 
1703     static TParseTree apostrophe(TParseTree p)
1704     {
1705         if(__ctfe)
1706         {
1707             return         pegged.peg.defined!(pegged.peg.literal!("'"), "TomlGrammar.apostrophe")(p);
1708         }
1709         else
1710         {
1711             if (auto m = tuple(`apostrophe`, p.end) in memo)
1712                 return *m;
1713             else
1714             {
1715                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("'"), "TomlGrammar.apostrophe"), "apostrophe")(p);
1716                 memo[tuple(`apostrophe`, p.end)] = result;
1717                 return result;
1718             }
1719         }
1720     }
1721 
1722     static TParseTree apostrophe(string s)
1723     {
1724         if(__ctfe)
1725         {
1726             return         pegged.peg.defined!(pegged.peg.literal!("'"), "TomlGrammar.apostrophe")(TParseTree("", false,[], s));
1727         }
1728         else
1729         {
1730             forgetMemo();
1731             return hooked!(pegged.peg.defined!(pegged.peg.literal!("'"), "TomlGrammar.apostrophe"), "apostrophe")(TParseTree("", false,[], s));
1732         }
1733     }
1734     static string apostrophe(GetName g)
1735     {
1736         return "TomlGrammar.apostrophe";
1737     }
1738 
1739     static TParseTree literal_char(TParseTree p)
1740     {
1741         if(__ctfe)
1742         {
1743             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!("\t"), pegged.peg.charRange!(' ', '&'), pegged.peg.charRange!('(', '~')), non_ascii), "TomlGrammar.literal_char")(p);
1744         }
1745         else
1746         {
1747             if (auto m = tuple(`literal_char`, p.end) in memo)
1748                 return *m;
1749             else
1750             {
1751                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!("\t"), pegged.peg.charRange!(' ', '&'), pegged.peg.charRange!('(', '~')), non_ascii), "TomlGrammar.literal_char"), "literal_char")(p);
1752                 memo[tuple(`literal_char`, p.end)] = result;
1753                 return result;
1754             }
1755         }
1756     }
1757 
1758     static TParseTree literal_char(string s)
1759     {
1760         if(__ctfe)
1761         {
1762             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!("\t"), pegged.peg.charRange!(' ', '&'), pegged.peg.charRange!('(', '~')), non_ascii), "TomlGrammar.literal_char")(TParseTree("", false,[], s));
1763         }
1764         else
1765         {
1766             forgetMemo();
1767             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!("\t"), pegged.peg.charRange!(' ', '&'), pegged.peg.charRange!('(', '~')), non_ascii), "TomlGrammar.literal_char"), "literal_char")(TParseTree("", false,[], s));
1768         }
1769     }
1770     static string literal_char(GetName g)
1771     {
1772         return "TomlGrammar.literal_char";
1773     }
1774 
1775     static TParseTree ml_literal_string(TParseTree p)
1776     {
1777         if(__ctfe)
1778         {
1779             return         pegged.peg.defined!(pegged.peg.and!(ml_literal_string_delim, ml_literal_body, ml_literal_string_delim), "TomlGrammar.ml_literal_string")(p);
1780         }
1781         else
1782         {
1783             if (auto m = tuple(`ml_literal_string`, p.end) in memo)
1784                 return *m;
1785             else
1786             {
1787                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(ml_literal_string_delim, ml_literal_body, ml_literal_string_delim), "TomlGrammar.ml_literal_string"), "ml_literal_string")(p);
1788                 memo[tuple(`ml_literal_string`, p.end)] = result;
1789                 return result;
1790             }
1791         }
1792     }
1793 
1794     static TParseTree ml_literal_string(string s)
1795     {
1796         if(__ctfe)
1797         {
1798             return         pegged.peg.defined!(pegged.peg.and!(ml_literal_string_delim, ml_literal_body, ml_literal_string_delim), "TomlGrammar.ml_literal_string")(TParseTree("", false,[], s));
1799         }
1800         else
1801         {
1802             forgetMemo();
1803             return hooked!(pegged.peg.defined!(pegged.peg.and!(ml_literal_string_delim, ml_literal_body, ml_literal_string_delim), "TomlGrammar.ml_literal_string"), "ml_literal_string")(TParseTree("", false,[], s));
1804         }
1805     }
1806     static string ml_literal_string(GetName g)
1807     {
1808         return "TomlGrammar.ml_literal_string";
1809     }
1810 
1811     static TParseTree ml_literal_string_delim(TParseTree p)
1812     {
1813         if(__ctfe)
1814         {
1815             return         pegged.peg.defined!(pegged.peg.and!(apostrophe, apostrophe, apostrophe), "TomlGrammar.ml_literal_string_delim")(p);
1816         }
1817         else
1818         {
1819             if (auto m = tuple(`ml_literal_string_delim`, p.end) in memo)
1820                 return *m;
1821             else
1822             {
1823                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(apostrophe, apostrophe, apostrophe), "TomlGrammar.ml_literal_string_delim"), "ml_literal_string_delim")(p);
1824                 memo[tuple(`ml_literal_string_delim`, p.end)] = result;
1825                 return result;
1826             }
1827         }
1828     }
1829 
1830     static TParseTree ml_literal_string_delim(string s)
1831     {
1832         if(__ctfe)
1833         {
1834             return         pegged.peg.defined!(pegged.peg.and!(apostrophe, apostrophe, apostrophe), "TomlGrammar.ml_literal_string_delim")(TParseTree("", false,[], s));
1835         }
1836         else
1837         {
1838             forgetMemo();
1839             return hooked!(pegged.peg.defined!(pegged.peg.and!(apostrophe, apostrophe, apostrophe), "TomlGrammar.ml_literal_string_delim"), "ml_literal_string_delim")(TParseTree("", false,[], s));
1840         }
1841     }
1842     static string ml_literal_string_delim(GetName g)
1843     {
1844         return "TomlGrammar.ml_literal_string_delim";
1845     }
1846 
1847     static TParseTree ml_literal_body(TParseTree p)
1848     {
1849         if(__ctfe)
1850         {
1851             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(mll_content), pegged.peg.zeroOrMore!(pegged.peg.and!(mll_quotes, pegged.peg.oneOrMore!(mll_content))), pegged.peg.option!(mll_quotes)), "TomlGrammar.ml_literal_body")(p);
1852         }
1853         else
1854         {
1855             if (auto m = tuple(`ml_literal_body`, p.end) in memo)
1856                 return *m;
1857             else
1858             {
1859                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(mll_content), pegged.peg.zeroOrMore!(pegged.peg.and!(mll_quotes, pegged.peg.oneOrMore!(mll_content))), pegged.peg.option!(mll_quotes)), "TomlGrammar.ml_literal_body"), "ml_literal_body")(p);
1860                 memo[tuple(`ml_literal_body`, p.end)] = result;
1861                 return result;
1862             }
1863         }
1864     }
1865 
1866     static TParseTree ml_literal_body(string s)
1867     {
1868         if(__ctfe)
1869         {
1870             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(mll_content), pegged.peg.zeroOrMore!(pegged.peg.and!(mll_quotes, pegged.peg.oneOrMore!(mll_content))), pegged.peg.option!(mll_quotes)), "TomlGrammar.ml_literal_body")(TParseTree("", false,[], s));
1871         }
1872         else
1873         {
1874             forgetMemo();
1875             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.zeroOrMore!(mll_content), pegged.peg.zeroOrMore!(pegged.peg.and!(mll_quotes, pegged.peg.oneOrMore!(mll_content))), pegged.peg.option!(mll_quotes)), "TomlGrammar.ml_literal_body"), "ml_literal_body")(TParseTree("", false,[], s));
1876         }
1877     }
1878     static string ml_literal_body(GetName g)
1879     {
1880         return "TomlGrammar.ml_literal_body";
1881     }
1882 
1883     static TParseTree mll_content(TParseTree p)
1884     {
1885         if(__ctfe)
1886         {
1887             return         pegged.peg.defined!(pegged.peg.or!(mll_char, newline), "TomlGrammar.mll_content")(p);
1888         }
1889         else
1890         {
1891             if (auto m = tuple(`mll_content`, p.end) in memo)
1892                 return *m;
1893             else
1894             {
1895                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(mll_char, newline), "TomlGrammar.mll_content"), "mll_content")(p);
1896                 memo[tuple(`mll_content`, p.end)] = result;
1897                 return result;
1898             }
1899         }
1900     }
1901 
1902     static TParseTree mll_content(string s)
1903     {
1904         if(__ctfe)
1905         {
1906             return         pegged.peg.defined!(pegged.peg.or!(mll_char, newline), "TomlGrammar.mll_content")(TParseTree("", false,[], s));
1907         }
1908         else
1909         {
1910             forgetMemo();
1911             return hooked!(pegged.peg.defined!(pegged.peg.or!(mll_char, newline), "TomlGrammar.mll_content"), "mll_content")(TParseTree("", false,[], s));
1912         }
1913     }
1914     static string mll_content(GetName g)
1915     {
1916         return "TomlGrammar.mll_content";
1917     }
1918 
1919     static TParseTree mll_char(TParseTree p)
1920     {
1921         if(__ctfe)
1922         {
1923             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!("\t"), pegged.peg.charRange!(' ', '&'), pegged.peg.charRange!('(', '~')), non_ascii), "TomlGrammar.mll_char")(p);
1924         }
1925         else
1926         {
1927             if (auto m = tuple(`mll_char`, p.end) in memo)
1928                 return *m;
1929             else
1930             {
1931                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!("\t"), pegged.peg.charRange!(' ', '&'), pegged.peg.charRange!('(', '~')), non_ascii), "TomlGrammar.mll_char"), "mll_char")(p);
1932                 memo[tuple(`mll_char`, p.end)] = result;
1933                 return result;
1934             }
1935         }
1936     }
1937 
1938     static TParseTree mll_char(string s)
1939     {
1940         if(__ctfe)
1941         {
1942             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!("\t"), pegged.peg.charRange!(' ', '&'), pegged.peg.charRange!('(', '~')), non_ascii), "TomlGrammar.mll_char")(TParseTree("", false,[], s));
1943         }
1944         else
1945         {
1946             forgetMemo();
1947             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.or!(pegged.peg.literal!("\t"), pegged.peg.charRange!(' ', '&'), pegged.peg.charRange!('(', '~')), non_ascii), "TomlGrammar.mll_char"), "mll_char")(TParseTree("", false,[], s));
1948         }
1949     }
1950     static string mll_char(GetName g)
1951     {
1952         return "TomlGrammar.mll_char";
1953     }
1954 
1955     static TParseTree mll_quotes(TParseTree p)
1956     {
1957         if(__ctfe)
1958         {
1959             return         pegged.peg.defined!(pegged.peg.and!(apostrophe, pegged.peg.option!(apostrophe), pegged.peg.negLookahead!(apostrophe)), "TomlGrammar.mll_quotes")(p);
1960         }
1961         else
1962         {
1963             if (auto m = tuple(`mll_quotes`, p.end) in memo)
1964                 return *m;
1965             else
1966             {
1967                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(apostrophe, pegged.peg.option!(apostrophe), pegged.peg.negLookahead!(apostrophe)), "TomlGrammar.mll_quotes"), "mll_quotes")(p);
1968                 memo[tuple(`mll_quotes`, p.end)] = result;
1969                 return result;
1970             }
1971         }
1972     }
1973 
1974     static TParseTree mll_quotes(string s)
1975     {
1976         if(__ctfe)
1977         {
1978             return         pegged.peg.defined!(pegged.peg.and!(apostrophe, pegged.peg.option!(apostrophe), pegged.peg.negLookahead!(apostrophe)), "TomlGrammar.mll_quotes")(TParseTree("", false,[], s));
1979         }
1980         else
1981         {
1982             forgetMemo();
1983             return hooked!(pegged.peg.defined!(pegged.peg.and!(apostrophe, pegged.peg.option!(apostrophe), pegged.peg.negLookahead!(apostrophe)), "TomlGrammar.mll_quotes"), "mll_quotes")(TParseTree("", false,[], s));
1984         }
1985     }
1986     static string mll_quotes(GetName g)
1987     {
1988         return "TomlGrammar.mll_quotes";
1989     }
1990 
1991     static TParseTree integer(TParseTree p)
1992     {
1993         if(__ctfe)
1994         {
1995             return         pegged.peg.defined!(pegged.peg.or!(hex_int, oct_int, bin_int, dec_int), "TomlGrammar.integer")(p);
1996         }
1997         else
1998         {
1999             if (auto m = tuple(`integer`, p.end) in memo)
2000                 return *m;
2001             else
2002             {
2003                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(hex_int, oct_int, bin_int, dec_int), "TomlGrammar.integer"), "integer")(p);
2004                 memo[tuple(`integer`, p.end)] = result;
2005                 return result;
2006             }
2007         }
2008     }
2009 
2010     static TParseTree integer(string s)
2011     {
2012         if(__ctfe)
2013         {
2014             return         pegged.peg.defined!(pegged.peg.or!(hex_int, oct_int, bin_int, dec_int), "TomlGrammar.integer")(TParseTree("", false,[], s));
2015         }
2016         else
2017         {
2018             forgetMemo();
2019             return hooked!(pegged.peg.defined!(pegged.peg.or!(hex_int, oct_int, bin_int, dec_int), "TomlGrammar.integer"), "integer")(TParseTree("", false,[], s));
2020         }
2021     }
2022     static string integer(GetName g)
2023     {
2024         return "TomlGrammar.integer";
2025     }
2026 
2027     static TParseTree minus(TParseTree p)
2028     {
2029         if(__ctfe)
2030         {
2031             return         pegged.peg.defined!(pegged.peg.literal!("-"), "TomlGrammar.minus")(p);
2032         }
2033         else
2034         {
2035             if (auto m = tuple(`minus`, p.end) in memo)
2036                 return *m;
2037             else
2038             {
2039                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("-"), "TomlGrammar.minus"), "minus")(p);
2040                 memo[tuple(`minus`, p.end)] = result;
2041                 return result;
2042             }
2043         }
2044     }
2045 
2046     static TParseTree minus(string s)
2047     {
2048         if(__ctfe)
2049         {
2050             return         pegged.peg.defined!(pegged.peg.literal!("-"), "TomlGrammar.minus")(TParseTree("", false,[], s));
2051         }
2052         else
2053         {
2054             forgetMemo();
2055             return hooked!(pegged.peg.defined!(pegged.peg.literal!("-"), "TomlGrammar.minus"), "minus")(TParseTree("", false,[], s));
2056         }
2057     }
2058     static string minus(GetName g)
2059     {
2060         return "TomlGrammar.minus";
2061     }
2062 
2063     static TParseTree plus(TParseTree p)
2064     {
2065         if(__ctfe)
2066         {
2067             return         pegged.peg.defined!(pegged.peg.literal!("+"), "TomlGrammar.plus")(p);
2068         }
2069         else
2070         {
2071             if (auto m = tuple(`plus`, p.end) in memo)
2072                 return *m;
2073             else
2074             {
2075                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("+"), "TomlGrammar.plus"), "plus")(p);
2076                 memo[tuple(`plus`, p.end)] = result;
2077                 return result;
2078             }
2079         }
2080     }
2081 
2082     static TParseTree plus(string s)
2083     {
2084         if(__ctfe)
2085         {
2086             return         pegged.peg.defined!(pegged.peg.literal!("+"), "TomlGrammar.plus")(TParseTree("", false,[], s));
2087         }
2088         else
2089         {
2090             forgetMemo();
2091             return hooked!(pegged.peg.defined!(pegged.peg.literal!("+"), "TomlGrammar.plus"), "plus")(TParseTree("", false,[], s));
2092         }
2093     }
2094     static string plus(GetName g)
2095     {
2096         return "TomlGrammar.plus";
2097     }
2098 
2099     static TParseTree underscore(TParseTree p)
2100     {
2101         if(__ctfe)
2102         {
2103             return         pegged.peg.defined!(pegged.peg.literal!("_"), "TomlGrammar.underscore")(p);
2104         }
2105         else
2106         {
2107             if (auto m = tuple(`underscore`, p.end) in memo)
2108                 return *m;
2109             else
2110             {
2111                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("_"), "TomlGrammar.underscore"), "underscore")(p);
2112                 memo[tuple(`underscore`, p.end)] = result;
2113                 return result;
2114             }
2115         }
2116     }
2117 
2118     static TParseTree underscore(string s)
2119     {
2120         if(__ctfe)
2121         {
2122             return         pegged.peg.defined!(pegged.peg.literal!("_"), "TomlGrammar.underscore")(TParseTree("", false,[], s));
2123         }
2124         else
2125         {
2126             forgetMemo();
2127             return hooked!(pegged.peg.defined!(pegged.peg.literal!("_"), "TomlGrammar.underscore"), "underscore")(TParseTree("", false,[], s));
2128         }
2129     }
2130     static string underscore(GetName g)
2131     {
2132         return "TomlGrammar.underscore";
2133     }
2134 
2135     static TParseTree digit1_9(TParseTree p)
2136     {
2137         if(__ctfe)
2138         {
2139             return         pegged.peg.defined!(pegged.peg.charRange!('1', '9'), "TomlGrammar.digit1_9")(p);
2140         }
2141         else
2142         {
2143             if (auto m = tuple(`digit1_9`, p.end) in memo)
2144                 return *m;
2145             else
2146             {
2147                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.charRange!('1', '9'), "TomlGrammar.digit1_9"), "digit1_9")(p);
2148                 memo[tuple(`digit1_9`, p.end)] = result;
2149                 return result;
2150             }
2151         }
2152     }
2153 
2154     static TParseTree digit1_9(string s)
2155     {
2156         if(__ctfe)
2157         {
2158             return         pegged.peg.defined!(pegged.peg.charRange!('1', '9'), "TomlGrammar.digit1_9")(TParseTree("", false,[], s));
2159         }
2160         else
2161         {
2162             forgetMemo();
2163             return hooked!(pegged.peg.defined!(pegged.peg.charRange!('1', '9'), "TomlGrammar.digit1_9"), "digit1_9")(TParseTree("", false,[], s));
2164         }
2165     }
2166     static string digit1_9(GetName g)
2167     {
2168         return "TomlGrammar.digit1_9";
2169     }
2170 
2171     static TParseTree digit0_7(TParseTree p)
2172     {
2173         if(__ctfe)
2174         {
2175             return         pegged.peg.defined!(pegged.peg.charRange!('0', '7'), "TomlGrammar.digit0_7")(p);
2176         }
2177         else
2178         {
2179             if (auto m = tuple(`digit0_7`, p.end) in memo)
2180                 return *m;
2181             else
2182             {
2183                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.charRange!('0', '7'), "TomlGrammar.digit0_7"), "digit0_7")(p);
2184                 memo[tuple(`digit0_7`, p.end)] = result;
2185                 return result;
2186             }
2187         }
2188     }
2189 
2190     static TParseTree digit0_7(string s)
2191     {
2192         if(__ctfe)
2193         {
2194             return         pegged.peg.defined!(pegged.peg.charRange!('0', '7'), "TomlGrammar.digit0_7")(TParseTree("", false,[], s));
2195         }
2196         else
2197         {
2198             forgetMemo();
2199             return hooked!(pegged.peg.defined!(pegged.peg.charRange!('0', '7'), "TomlGrammar.digit0_7"), "digit0_7")(TParseTree("", false,[], s));
2200         }
2201     }
2202     static string digit0_7(GetName g)
2203     {
2204         return "TomlGrammar.digit0_7";
2205     }
2206 
2207     static TParseTree digit0_1(TParseTree p)
2208     {
2209         if(__ctfe)
2210         {
2211             return         pegged.peg.defined!(pegged.peg.charRange!('0', '1'), "TomlGrammar.digit0_1")(p);
2212         }
2213         else
2214         {
2215             if (auto m = tuple(`digit0_1`, p.end) in memo)
2216                 return *m;
2217             else
2218             {
2219                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.charRange!('0', '1'), "TomlGrammar.digit0_1"), "digit0_1")(p);
2220                 memo[tuple(`digit0_1`, p.end)] = result;
2221                 return result;
2222             }
2223         }
2224     }
2225 
2226     static TParseTree digit0_1(string s)
2227     {
2228         if(__ctfe)
2229         {
2230             return         pegged.peg.defined!(pegged.peg.charRange!('0', '1'), "TomlGrammar.digit0_1")(TParseTree("", false,[], s));
2231         }
2232         else
2233         {
2234             forgetMemo();
2235             return hooked!(pegged.peg.defined!(pegged.peg.charRange!('0', '1'), "TomlGrammar.digit0_1"), "digit0_1")(TParseTree("", false,[], s));
2236         }
2237     }
2238     static string digit0_1(GetName g)
2239     {
2240         return "TomlGrammar.digit0_1";
2241     }
2242 
2243     static TParseTree hex_prefix(TParseTree p)
2244     {
2245         if(__ctfe)
2246         {
2247             return         pegged.peg.defined!(pegged.peg.literal!("0x"), "TomlGrammar.hex_prefix")(p);
2248         }
2249         else
2250         {
2251             if (auto m = tuple(`hex_prefix`, p.end) in memo)
2252                 return *m;
2253             else
2254             {
2255                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("0x"), "TomlGrammar.hex_prefix"), "hex_prefix")(p);
2256                 memo[tuple(`hex_prefix`, p.end)] = result;
2257                 return result;
2258             }
2259         }
2260     }
2261 
2262     static TParseTree hex_prefix(string s)
2263     {
2264         if(__ctfe)
2265         {
2266             return         pegged.peg.defined!(pegged.peg.literal!("0x"), "TomlGrammar.hex_prefix")(TParseTree("", false,[], s));
2267         }
2268         else
2269         {
2270             forgetMemo();
2271             return hooked!(pegged.peg.defined!(pegged.peg.literal!("0x"), "TomlGrammar.hex_prefix"), "hex_prefix")(TParseTree("", false,[], s));
2272         }
2273     }
2274     static string hex_prefix(GetName g)
2275     {
2276         return "TomlGrammar.hex_prefix";
2277     }
2278 
2279     static TParseTree oct_prefix(TParseTree p)
2280     {
2281         if(__ctfe)
2282         {
2283             return         pegged.peg.defined!(pegged.peg.literal!("0o"), "TomlGrammar.oct_prefix")(p);
2284         }
2285         else
2286         {
2287             if (auto m = tuple(`oct_prefix`, p.end) in memo)
2288                 return *m;
2289             else
2290             {
2291                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("0o"), "TomlGrammar.oct_prefix"), "oct_prefix")(p);
2292                 memo[tuple(`oct_prefix`, p.end)] = result;
2293                 return result;
2294             }
2295         }
2296     }
2297 
2298     static TParseTree oct_prefix(string s)
2299     {
2300         if(__ctfe)
2301         {
2302             return         pegged.peg.defined!(pegged.peg.literal!("0o"), "TomlGrammar.oct_prefix")(TParseTree("", false,[], s));
2303         }
2304         else
2305         {
2306             forgetMemo();
2307             return hooked!(pegged.peg.defined!(pegged.peg.literal!("0o"), "TomlGrammar.oct_prefix"), "oct_prefix")(TParseTree("", false,[], s));
2308         }
2309     }
2310     static string oct_prefix(GetName g)
2311     {
2312         return "TomlGrammar.oct_prefix";
2313     }
2314 
2315     static TParseTree bin_prefix(TParseTree p)
2316     {
2317         if(__ctfe)
2318         {
2319             return         pegged.peg.defined!(pegged.peg.literal!("0b"), "TomlGrammar.bin_prefix")(p);
2320         }
2321         else
2322         {
2323             if (auto m = tuple(`bin_prefix`, p.end) in memo)
2324                 return *m;
2325             else
2326             {
2327                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("0b"), "TomlGrammar.bin_prefix"), "bin_prefix")(p);
2328                 memo[tuple(`bin_prefix`, p.end)] = result;
2329                 return result;
2330             }
2331         }
2332     }
2333 
2334     static TParseTree bin_prefix(string s)
2335     {
2336         if(__ctfe)
2337         {
2338             return         pegged.peg.defined!(pegged.peg.literal!("0b"), "TomlGrammar.bin_prefix")(TParseTree("", false,[], s));
2339         }
2340         else
2341         {
2342             forgetMemo();
2343             return hooked!(pegged.peg.defined!(pegged.peg.literal!("0b"), "TomlGrammar.bin_prefix"), "bin_prefix")(TParseTree("", false,[], s));
2344         }
2345     }
2346     static string bin_prefix(GetName g)
2347     {
2348         return "TomlGrammar.bin_prefix";
2349     }
2350 
2351     static TParseTree dec_int(TParseTree p)
2352     {
2353         if(__ctfe)
2354         {
2355             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.or!(minus, plus)), unsigned_dec_int), "TomlGrammar.dec_int")(p);
2356         }
2357         else
2358         {
2359             if (auto m = tuple(`dec_int`, p.end) in memo)
2360                 return *m;
2361             else
2362             {
2363                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.or!(minus, plus)), unsigned_dec_int), "TomlGrammar.dec_int"), "dec_int")(p);
2364                 memo[tuple(`dec_int`, p.end)] = result;
2365                 return result;
2366             }
2367         }
2368     }
2369 
2370     static TParseTree dec_int(string s)
2371     {
2372         if(__ctfe)
2373         {
2374             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.or!(minus, plus)), unsigned_dec_int), "TomlGrammar.dec_int")(TParseTree("", false,[], s));
2375         }
2376         else
2377         {
2378             forgetMemo();
2379             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.or!(minus, plus)), unsigned_dec_int), "TomlGrammar.dec_int"), "dec_int")(TParseTree("", false,[], s));
2380         }
2381     }
2382     static string dec_int(GetName g)
2383     {
2384         return "TomlGrammar.dec_int";
2385     }
2386 
2387     static TParseTree unsigned_dec_int(TParseTree p)
2388     {
2389         if(__ctfe)
2390         {
2391             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(digit1_9, pegged.peg.oneOrMore!(pegged.peg.or!(DIGIT, pegged.peg.and!(underscore, DIGIT)))), DIGIT), "TomlGrammar.unsigned_dec_int")(p);
2392         }
2393         else
2394         {
2395             if (auto m = tuple(`unsigned_dec_int`, p.end) in memo)
2396                 return *m;
2397             else
2398             {
2399                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(digit1_9, pegged.peg.oneOrMore!(pegged.peg.or!(DIGIT, pegged.peg.and!(underscore, DIGIT)))), DIGIT), "TomlGrammar.unsigned_dec_int"), "unsigned_dec_int")(p);
2400                 memo[tuple(`unsigned_dec_int`, p.end)] = result;
2401                 return result;
2402             }
2403         }
2404     }
2405 
2406     static TParseTree unsigned_dec_int(string s)
2407     {
2408         if(__ctfe)
2409         {
2410             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(digit1_9, pegged.peg.oneOrMore!(pegged.peg.or!(DIGIT, pegged.peg.and!(underscore, DIGIT)))), DIGIT), "TomlGrammar.unsigned_dec_int")(TParseTree("", false,[], s));
2411         }
2412         else
2413         {
2414             forgetMemo();
2415             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(digit1_9, pegged.peg.oneOrMore!(pegged.peg.or!(DIGIT, pegged.peg.and!(underscore, DIGIT)))), DIGIT), "TomlGrammar.unsigned_dec_int"), "unsigned_dec_int")(TParseTree("", false,[], s));
2416         }
2417     }
2418     static string unsigned_dec_int(GetName g)
2419     {
2420         return "TomlGrammar.unsigned_dec_int";
2421     }
2422 
2423     static TParseTree hex_int(TParseTree p)
2424     {
2425         if(__ctfe)
2426         {
2427             return         pegged.peg.defined!(pegged.peg.and!(hex_prefix, HEXDIG, pegged.peg.zeroOrMore!(pegged.peg.or!(HEXDIG, pegged.peg.and!(underscore, HEXDIG)))), "TomlGrammar.hex_int")(p);
2428         }
2429         else
2430         {
2431             if (auto m = tuple(`hex_int`, p.end) in memo)
2432                 return *m;
2433             else
2434             {
2435                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(hex_prefix, HEXDIG, pegged.peg.zeroOrMore!(pegged.peg.or!(HEXDIG, pegged.peg.and!(underscore, HEXDIG)))), "TomlGrammar.hex_int"), "hex_int")(p);
2436                 memo[tuple(`hex_int`, p.end)] = result;
2437                 return result;
2438             }
2439         }
2440     }
2441 
2442     static TParseTree hex_int(string s)
2443     {
2444         if(__ctfe)
2445         {
2446             return         pegged.peg.defined!(pegged.peg.and!(hex_prefix, HEXDIG, pegged.peg.zeroOrMore!(pegged.peg.or!(HEXDIG, pegged.peg.and!(underscore, HEXDIG)))), "TomlGrammar.hex_int")(TParseTree("", false,[], s));
2447         }
2448         else
2449         {
2450             forgetMemo();
2451             return hooked!(pegged.peg.defined!(pegged.peg.and!(hex_prefix, HEXDIG, pegged.peg.zeroOrMore!(pegged.peg.or!(HEXDIG, pegged.peg.and!(underscore, HEXDIG)))), "TomlGrammar.hex_int"), "hex_int")(TParseTree("", false,[], s));
2452         }
2453     }
2454     static string hex_int(GetName g)
2455     {
2456         return "TomlGrammar.hex_int";
2457     }
2458 
2459     static TParseTree oct_int(TParseTree p)
2460     {
2461         if(__ctfe)
2462         {
2463             return         pegged.peg.defined!(pegged.peg.and!(oct_prefix, digit0_7, pegged.peg.zeroOrMore!(pegged.peg.or!(digit0_7, pegged.peg.and!(underscore, digit0_7)))), "TomlGrammar.oct_int")(p);
2464         }
2465         else
2466         {
2467             if (auto m = tuple(`oct_int`, p.end) in memo)
2468                 return *m;
2469             else
2470             {
2471                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(oct_prefix, digit0_7, pegged.peg.zeroOrMore!(pegged.peg.or!(digit0_7, pegged.peg.and!(underscore, digit0_7)))), "TomlGrammar.oct_int"), "oct_int")(p);
2472                 memo[tuple(`oct_int`, p.end)] = result;
2473                 return result;
2474             }
2475         }
2476     }
2477 
2478     static TParseTree oct_int(string s)
2479     {
2480         if(__ctfe)
2481         {
2482             return         pegged.peg.defined!(pegged.peg.and!(oct_prefix, digit0_7, pegged.peg.zeroOrMore!(pegged.peg.or!(digit0_7, pegged.peg.and!(underscore, digit0_7)))), "TomlGrammar.oct_int")(TParseTree("", false,[], s));
2483         }
2484         else
2485         {
2486             forgetMemo();
2487             return hooked!(pegged.peg.defined!(pegged.peg.and!(oct_prefix, digit0_7, pegged.peg.zeroOrMore!(pegged.peg.or!(digit0_7, pegged.peg.and!(underscore, digit0_7)))), "TomlGrammar.oct_int"), "oct_int")(TParseTree("", false,[], s));
2488         }
2489     }
2490     static string oct_int(GetName g)
2491     {
2492         return "TomlGrammar.oct_int";
2493     }
2494 
2495     static TParseTree bin_int(TParseTree p)
2496     {
2497         if(__ctfe)
2498         {
2499             return         pegged.peg.defined!(pegged.peg.and!(bin_prefix, digit0_1, pegged.peg.zeroOrMore!(pegged.peg.or!(digit0_1, pegged.peg.and!(underscore, digit0_1)))), "TomlGrammar.bin_int")(p);
2500         }
2501         else
2502         {
2503             if (auto m = tuple(`bin_int`, p.end) in memo)
2504                 return *m;
2505             else
2506             {
2507                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(bin_prefix, digit0_1, pegged.peg.zeroOrMore!(pegged.peg.or!(digit0_1, pegged.peg.and!(underscore, digit0_1)))), "TomlGrammar.bin_int"), "bin_int")(p);
2508                 memo[tuple(`bin_int`, p.end)] = result;
2509                 return result;
2510             }
2511         }
2512     }
2513 
2514     static TParseTree bin_int(string s)
2515     {
2516         if(__ctfe)
2517         {
2518             return         pegged.peg.defined!(pegged.peg.and!(bin_prefix, digit0_1, pegged.peg.zeroOrMore!(pegged.peg.or!(digit0_1, pegged.peg.and!(underscore, digit0_1)))), "TomlGrammar.bin_int")(TParseTree("", false,[], s));
2519         }
2520         else
2521         {
2522             forgetMemo();
2523             return hooked!(pegged.peg.defined!(pegged.peg.and!(bin_prefix, digit0_1, pegged.peg.zeroOrMore!(pegged.peg.or!(digit0_1, pegged.peg.and!(underscore, digit0_1)))), "TomlGrammar.bin_int"), "bin_int")(TParseTree("", false,[], s));
2524         }
2525     }
2526     static string bin_int(GetName g)
2527     {
2528         return "TomlGrammar.bin_int";
2529     }
2530 
2531     static TParseTree float_(TParseTree p)
2532     {
2533         if(__ctfe)
2534         {
2535             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(float_int_part, pegged.peg.or!(exp, pegged.peg.and!(frac, pegged.peg.option!(exp)))), special_float), "TomlGrammar.float_")(p);
2536         }
2537         else
2538         {
2539             if (auto m = tuple(`float_`, p.end) in memo)
2540                 return *m;
2541             else
2542             {
2543                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(float_int_part, pegged.peg.or!(exp, pegged.peg.and!(frac, pegged.peg.option!(exp)))), special_float), "TomlGrammar.float_"), "float_")(p);
2544                 memo[tuple(`float_`, p.end)] = result;
2545                 return result;
2546             }
2547         }
2548     }
2549 
2550     static TParseTree float_(string s)
2551     {
2552         if(__ctfe)
2553         {
2554             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(float_int_part, pegged.peg.or!(exp, pegged.peg.and!(frac, pegged.peg.option!(exp)))), special_float), "TomlGrammar.float_")(TParseTree("", false,[], s));
2555         }
2556         else
2557         {
2558             forgetMemo();
2559             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(float_int_part, pegged.peg.or!(exp, pegged.peg.and!(frac, pegged.peg.option!(exp)))), special_float), "TomlGrammar.float_"), "float_")(TParseTree("", false,[], s));
2560         }
2561     }
2562     static string float_(GetName g)
2563     {
2564         return "TomlGrammar.float_";
2565     }
2566 
2567     static TParseTree float_int_part(TParseTree p)
2568     {
2569         if(__ctfe)
2570         {
2571             return         pegged.peg.defined!(dec_int, "TomlGrammar.float_int_part")(p);
2572         }
2573         else
2574         {
2575             if (auto m = tuple(`float_int_part`, p.end) in memo)
2576                 return *m;
2577             else
2578             {
2579                 TParseTree result = hooked!(pegged.peg.defined!(dec_int, "TomlGrammar.float_int_part"), "float_int_part")(p);
2580                 memo[tuple(`float_int_part`, p.end)] = result;
2581                 return result;
2582             }
2583         }
2584     }
2585 
2586     static TParseTree float_int_part(string s)
2587     {
2588         if(__ctfe)
2589         {
2590             return         pegged.peg.defined!(dec_int, "TomlGrammar.float_int_part")(TParseTree("", false,[], s));
2591         }
2592         else
2593         {
2594             forgetMemo();
2595             return hooked!(pegged.peg.defined!(dec_int, "TomlGrammar.float_int_part"), "float_int_part")(TParseTree("", false,[], s));
2596         }
2597     }
2598     static string float_int_part(GetName g)
2599     {
2600         return "TomlGrammar.float_int_part";
2601     }
2602 
2603     static TParseTree frac(TParseTree p)
2604     {
2605         if(__ctfe)
2606         {
2607             return         pegged.peg.defined!(pegged.peg.and!(decimal_point, zero_prefixable_int), "TomlGrammar.frac")(p);
2608         }
2609         else
2610         {
2611             if (auto m = tuple(`frac`, p.end) in memo)
2612                 return *m;
2613             else
2614             {
2615                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(decimal_point, zero_prefixable_int), "TomlGrammar.frac"), "frac")(p);
2616                 memo[tuple(`frac`, p.end)] = result;
2617                 return result;
2618             }
2619         }
2620     }
2621 
2622     static TParseTree frac(string s)
2623     {
2624         if(__ctfe)
2625         {
2626             return         pegged.peg.defined!(pegged.peg.and!(decimal_point, zero_prefixable_int), "TomlGrammar.frac")(TParseTree("", false,[], s));
2627         }
2628         else
2629         {
2630             forgetMemo();
2631             return hooked!(pegged.peg.defined!(pegged.peg.and!(decimal_point, zero_prefixable_int), "TomlGrammar.frac"), "frac")(TParseTree("", false,[], s));
2632         }
2633     }
2634     static string frac(GetName g)
2635     {
2636         return "TomlGrammar.frac";
2637     }
2638 
2639     static TParseTree decimal_point(TParseTree p)
2640     {
2641         if(__ctfe)
2642         {
2643             return         pegged.peg.defined!(pegged.peg.literal!("."), "TomlGrammar.decimal_point")(p);
2644         }
2645         else
2646         {
2647             if (auto m = tuple(`decimal_point`, p.end) in memo)
2648                 return *m;
2649             else
2650             {
2651                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("."), "TomlGrammar.decimal_point"), "decimal_point")(p);
2652                 memo[tuple(`decimal_point`, p.end)] = result;
2653                 return result;
2654             }
2655         }
2656     }
2657 
2658     static TParseTree decimal_point(string s)
2659     {
2660         if(__ctfe)
2661         {
2662             return         pegged.peg.defined!(pegged.peg.literal!("."), "TomlGrammar.decimal_point")(TParseTree("", false,[], s));
2663         }
2664         else
2665         {
2666             forgetMemo();
2667             return hooked!(pegged.peg.defined!(pegged.peg.literal!("."), "TomlGrammar.decimal_point"), "decimal_point")(TParseTree("", false,[], s));
2668         }
2669     }
2670     static string decimal_point(GetName g)
2671     {
2672         return "TomlGrammar.decimal_point";
2673     }
2674 
2675     static TParseTree zero_prefixable_int(TParseTree p)
2676     {
2677         if(__ctfe)
2678         {
2679             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, pegged.peg.zeroOrMore!(pegged.peg.or!(DIGIT, pegged.peg.and!(underscore, DIGIT)))), "TomlGrammar.zero_prefixable_int")(p);
2680         }
2681         else
2682         {
2683             if (auto m = tuple(`zero_prefixable_int`, p.end) in memo)
2684                 return *m;
2685             else
2686             {
2687                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, pegged.peg.zeroOrMore!(pegged.peg.or!(DIGIT, pegged.peg.and!(underscore, DIGIT)))), "TomlGrammar.zero_prefixable_int"), "zero_prefixable_int")(p);
2688                 memo[tuple(`zero_prefixable_int`, p.end)] = result;
2689                 return result;
2690             }
2691         }
2692     }
2693 
2694     static TParseTree zero_prefixable_int(string s)
2695     {
2696         if(__ctfe)
2697         {
2698             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, pegged.peg.zeroOrMore!(pegged.peg.or!(DIGIT, pegged.peg.and!(underscore, DIGIT)))), "TomlGrammar.zero_prefixable_int")(TParseTree("", false,[], s));
2699         }
2700         else
2701         {
2702             forgetMemo();
2703             return hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, pegged.peg.zeroOrMore!(pegged.peg.or!(DIGIT, pegged.peg.and!(underscore, DIGIT)))), "TomlGrammar.zero_prefixable_int"), "zero_prefixable_int")(TParseTree("", false,[], s));
2704         }
2705     }
2706     static string zero_prefixable_int(GetName g)
2707     {
2708         return "TomlGrammar.zero_prefixable_int";
2709     }
2710 
2711     static TParseTree exp(TParseTree p)
2712     {
2713         if(__ctfe)
2714         {
2715             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("e"), float_exp_part), "TomlGrammar.exp")(p);
2716         }
2717         else
2718         {
2719             if (auto m = tuple(`exp`, p.end) in memo)
2720                 return *m;
2721             else
2722             {
2723                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("e"), float_exp_part), "TomlGrammar.exp"), "exp")(p);
2724                 memo[tuple(`exp`, p.end)] = result;
2725                 return result;
2726             }
2727         }
2728     }
2729 
2730     static TParseTree exp(string s)
2731     {
2732         if(__ctfe)
2733         {
2734             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("e"), float_exp_part), "TomlGrammar.exp")(TParseTree("", false,[], s));
2735         }
2736         else
2737         {
2738             forgetMemo();
2739             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("e"), float_exp_part), "TomlGrammar.exp"), "exp")(TParseTree("", false,[], s));
2740         }
2741     }
2742     static string exp(GetName g)
2743     {
2744         return "TomlGrammar.exp";
2745     }
2746 
2747     static TParseTree float_exp_part(TParseTree p)
2748     {
2749         if(__ctfe)
2750         {
2751             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.or!(minus, plus)), zero_prefixable_int), "TomlGrammar.float_exp_part")(p);
2752         }
2753         else
2754         {
2755             if (auto m = tuple(`float_exp_part`, p.end) in memo)
2756                 return *m;
2757             else
2758             {
2759                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.or!(minus, plus)), zero_prefixable_int), "TomlGrammar.float_exp_part"), "float_exp_part")(p);
2760                 memo[tuple(`float_exp_part`, p.end)] = result;
2761                 return result;
2762             }
2763         }
2764     }
2765 
2766     static TParseTree float_exp_part(string s)
2767     {
2768         if(__ctfe)
2769         {
2770             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.or!(minus, plus)), zero_prefixable_int), "TomlGrammar.float_exp_part")(TParseTree("", false,[], s));
2771         }
2772         else
2773         {
2774             forgetMemo();
2775             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.or!(minus, plus)), zero_prefixable_int), "TomlGrammar.float_exp_part"), "float_exp_part")(TParseTree("", false,[], s));
2776         }
2777     }
2778     static string float_exp_part(GetName g)
2779     {
2780         return "TomlGrammar.float_exp_part";
2781     }
2782 
2783     static TParseTree special_float(TParseTree p)
2784     {
2785         if(__ctfe)
2786         {
2787             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.or!(minus, plus)), pegged.peg.or!(inf, nan)), "TomlGrammar.special_float")(p);
2788         }
2789         else
2790         {
2791             if (auto m = tuple(`special_float`, p.end) in memo)
2792                 return *m;
2793             else
2794             {
2795                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.or!(minus, plus)), pegged.peg.or!(inf, nan)), "TomlGrammar.special_float"), "special_float")(p);
2796                 memo[tuple(`special_float`, p.end)] = result;
2797                 return result;
2798             }
2799         }
2800     }
2801 
2802     static TParseTree special_float(string s)
2803     {
2804         if(__ctfe)
2805         {
2806             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.or!(minus, plus)), pegged.peg.or!(inf, nan)), "TomlGrammar.special_float")(TParseTree("", false,[], s));
2807         }
2808         else
2809         {
2810             forgetMemo();
2811             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.option!(pegged.peg.or!(minus, plus)), pegged.peg.or!(inf, nan)), "TomlGrammar.special_float"), "special_float")(TParseTree("", false,[], s));
2812         }
2813     }
2814     static string special_float(GetName g)
2815     {
2816         return "TomlGrammar.special_float";
2817     }
2818 
2819     static TParseTree inf(TParseTree p)
2820     {
2821         if(__ctfe)
2822         {
2823             return         pegged.peg.defined!(pegged.peg.literal!("inf"), "TomlGrammar.inf")(p);
2824         }
2825         else
2826         {
2827             if (auto m = tuple(`inf`, p.end) in memo)
2828                 return *m;
2829             else
2830             {
2831                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("inf"), "TomlGrammar.inf"), "inf")(p);
2832                 memo[tuple(`inf`, p.end)] = result;
2833                 return result;
2834             }
2835         }
2836     }
2837 
2838     static TParseTree inf(string s)
2839     {
2840         if(__ctfe)
2841         {
2842             return         pegged.peg.defined!(pegged.peg.literal!("inf"), "TomlGrammar.inf")(TParseTree("", false,[], s));
2843         }
2844         else
2845         {
2846             forgetMemo();
2847             return hooked!(pegged.peg.defined!(pegged.peg.literal!("inf"), "TomlGrammar.inf"), "inf")(TParseTree("", false,[], s));
2848         }
2849     }
2850     static string inf(GetName g)
2851     {
2852         return "TomlGrammar.inf";
2853     }
2854 
2855     static TParseTree nan(TParseTree p)
2856     {
2857         if(__ctfe)
2858         {
2859             return         pegged.peg.defined!(pegged.peg.literal!("nan"), "TomlGrammar.nan")(p);
2860         }
2861         else
2862         {
2863             if (auto m = tuple(`nan`, p.end) in memo)
2864                 return *m;
2865             else
2866             {
2867                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("nan"), "TomlGrammar.nan"), "nan")(p);
2868                 memo[tuple(`nan`, p.end)] = result;
2869                 return result;
2870             }
2871         }
2872     }
2873 
2874     static TParseTree nan(string s)
2875     {
2876         if(__ctfe)
2877         {
2878             return         pegged.peg.defined!(pegged.peg.literal!("nan"), "TomlGrammar.nan")(TParseTree("", false,[], s));
2879         }
2880         else
2881         {
2882             forgetMemo();
2883             return hooked!(pegged.peg.defined!(pegged.peg.literal!("nan"), "TomlGrammar.nan"), "nan")(TParseTree("", false,[], s));
2884         }
2885     }
2886     static string nan(GetName g)
2887     {
2888         return "TomlGrammar.nan";
2889     }
2890 
2891     static TParseTree boolean(TParseTree p)
2892     {
2893         if(__ctfe)
2894         {
2895             return         pegged.peg.defined!(pegged.peg.or!(true_, false_), "TomlGrammar.boolean")(p);
2896         }
2897         else
2898         {
2899             if (auto m = tuple(`boolean`, p.end) in memo)
2900                 return *m;
2901             else
2902             {
2903                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(true_, false_), "TomlGrammar.boolean"), "boolean")(p);
2904                 memo[tuple(`boolean`, p.end)] = result;
2905                 return result;
2906             }
2907         }
2908     }
2909 
2910     static TParseTree boolean(string s)
2911     {
2912         if(__ctfe)
2913         {
2914             return         pegged.peg.defined!(pegged.peg.or!(true_, false_), "TomlGrammar.boolean")(TParseTree("", false,[], s));
2915         }
2916         else
2917         {
2918             forgetMemo();
2919             return hooked!(pegged.peg.defined!(pegged.peg.or!(true_, false_), "TomlGrammar.boolean"), "boolean")(TParseTree("", false,[], s));
2920         }
2921     }
2922     static string boolean(GetName g)
2923     {
2924         return "TomlGrammar.boolean";
2925     }
2926 
2927     static TParseTree true_(TParseTree p)
2928     {
2929         if(__ctfe)
2930         {
2931             return         pegged.peg.defined!(pegged.peg.literal!("true"), "TomlGrammar.true_")(p);
2932         }
2933         else
2934         {
2935             if (auto m = tuple(`true_`, p.end) in memo)
2936                 return *m;
2937             else
2938             {
2939                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("true"), "TomlGrammar.true_"), "true_")(p);
2940                 memo[tuple(`true_`, p.end)] = result;
2941                 return result;
2942             }
2943         }
2944     }
2945 
2946     static TParseTree true_(string s)
2947     {
2948         if(__ctfe)
2949         {
2950             return         pegged.peg.defined!(pegged.peg.literal!("true"), "TomlGrammar.true_")(TParseTree("", false,[], s));
2951         }
2952         else
2953         {
2954             forgetMemo();
2955             return hooked!(pegged.peg.defined!(pegged.peg.literal!("true"), "TomlGrammar.true_"), "true_")(TParseTree("", false,[], s));
2956         }
2957     }
2958     static string true_(GetName g)
2959     {
2960         return "TomlGrammar.true_";
2961     }
2962 
2963     static TParseTree false_(TParseTree p)
2964     {
2965         if(__ctfe)
2966         {
2967             return         pegged.peg.defined!(pegged.peg.literal!("false"), "TomlGrammar.false_")(p);
2968         }
2969         else
2970         {
2971             if (auto m = tuple(`false_`, p.end) in memo)
2972                 return *m;
2973             else
2974             {
2975                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("false"), "TomlGrammar.false_"), "false_")(p);
2976                 memo[tuple(`false_`, p.end)] = result;
2977                 return result;
2978             }
2979         }
2980     }
2981 
2982     static TParseTree false_(string s)
2983     {
2984         if(__ctfe)
2985         {
2986             return         pegged.peg.defined!(pegged.peg.literal!("false"), "TomlGrammar.false_")(TParseTree("", false,[], s));
2987         }
2988         else
2989         {
2990             forgetMemo();
2991             return hooked!(pegged.peg.defined!(pegged.peg.literal!("false"), "TomlGrammar.false_"), "false_")(TParseTree("", false,[], s));
2992         }
2993     }
2994     static string false_(GetName g)
2995     {
2996         return "TomlGrammar.false_";
2997     }
2998 
2999     static TParseTree date_time(TParseTree p)
3000     {
3001         if(__ctfe)
3002         {
3003             return         pegged.peg.defined!(pegged.peg.or!(offset_date_time, local_date_time, local_date, local_time), "TomlGrammar.date_time")(p);
3004         }
3005         else
3006         {
3007             if (auto m = tuple(`date_time`, p.end) in memo)
3008                 return *m;
3009             else
3010             {
3011                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(offset_date_time, local_date_time, local_date, local_time), "TomlGrammar.date_time"), "date_time")(p);
3012                 memo[tuple(`date_time`, p.end)] = result;
3013                 return result;
3014             }
3015         }
3016     }
3017 
3018     static TParseTree date_time(string s)
3019     {
3020         if(__ctfe)
3021         {
3022             return         pegged.peg.defined!(pegged.peg.or!(offset_date_time, local_date_time, local_date, local_time), "TomlGrammar.date_time")(TParseTree("", false,[], s));
3023         }
3024         else
3025         {
3026             forgetMemo();
3027             return hooked!(pegged.peg.defined!(pegged.peg.or!(offset_date_time, local_date_time, local_date, local_time), "TomlGrammar.date_time"), "date_time")(TParseTree("", false,[], s));
3028         }
3029     }
3030     static string date_time(GetName g)
3031     {
3032         return "TomlGrammar.date_time";
3033     }
3034 
3035     static TParseTree date_fullyear(TParseTree p)
3036     {
3037         if(__ctfe)
3038         {
3039             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT, DIGIT, DIGIT), "TomlGrammar.date_fullyear")(p);
3040         }
3041         else
3042         {
3043             if (auto m = tuple(`date_fullyear`, p.end) in memo)
3044                 return *m;
3045             else
3046             {
3047                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT, DIGIT, DIGIT), "TomlGrammar.date_fullyear"), "date_fullyear")(p);
3048                 memo[tuple(`date_fullyear`, p.end)] = result;
3049                 return result;
3050             }
3051         }
3052     }
3053 
3054     static TParseTree date_fullyear(string s)
3055     {
3056         if(__ctfe)
3057         {
3058             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT, DIGIT, DIGIT), "TomlGrammar.date_fullyear")(TParseTree("", false,[], s));
3059         }
3060         else
3061         {
3062             forgetMemo();
3063             return hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT, DIGIT, DIGIT), "TomlGrammar.date_fullyear"), "date_fullyear")(TParseTree("", false,[], s));
3064         }
3065     }
3066     static string date_fullyear(GetName g)
3067     {
3068         return "TomlGrammar.date_fullyear";
3069     }
3070 
3071     static TParseTree date_month(TParseTree p)
3072     {
3073         if(__ctfe)
3074         {
3075             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.date_month")(p);
3076         }
3077         else
3078         {
3079             if (auto m = tuple(`date_month`, p.end) in memo)
3080                 return *m;
3081             else
3082             {
3083                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.date_month"), "date_month")(p);
3084                 memo[tuple(`date_month`, p.end)] = result;
3085                 return result;
3086             }
3087         }
3088     }
3089 
3090     static TParseTree date_month(string s)
3091     {
3092         if(__ctfe)
3093         {
3094             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.date_month")(TParseTree("", false,[], s));
3095         }
3096         else
3097         {
3098             forgetMemo();
3099             return hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.date_month"), "date_month")(TParseTree("", false,[], s));
3100         }
3101     }
3102     static string date_month(GetName g)
3103     {
3104         return "TomlGrammar.date_month";
3105     }
3106 
3107     static TParseTree date_mday(TParseTree p)
3108     {
3109         if(__ctfe)
3110         {
3111             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.date_mday")(p);
3112         }
3113         else
3114         {
3115             if (auto m = tuple(`date_mday`, p.end) in memo)
3116                 return *m;
3117             else
3118             {
3119                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.date_mday"), "date_mday")(p);
3120                 memo[tuple(`date_mday`, p.end)] = result;
3121                 return result;
3122             }
3123         }
3124     }
3125 
3126     static TParseTree date_mday(string s)
3127     {
3128         if(__ctfe)
3129         {
3130             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.date_mday")(TParseTree("", false,[], s));
3131         }
3132         else
3133         {
3134             forgetMemo();
3135             return hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.date_mday"), "date_mday")(TParseTree("", false,[], s));
3136         }
3137     }
3138     static string date_mday(GetName g)
3139     {
3140         return "TomlGrammar.date_mday";
3141     }
3142 
3143     static TParseTree time_delim(TParseTree p)
3144     {
3145         if(__ctfe)
3146         {
3147             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!("T"), pegged.peg.literal!(" ")), "TomlGrammar.time_delim")(p);
3148         }
3149         else
3150         {
3151             if (auto m = tuple(`time_delim`, p.end) in memo)
3152                 return *m;
3153             else
3154             {
3155                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!("T"), pegged.peg.literal!(" ")), "TomlGrammar.time_delim"), "time_delim")(p);
3156                 memo[tuple(`time_delim`, p.end)] = result;
3157                 return result;
3158             }
3159         }
3160     }
3161 
3162     static TParseTree time_delim(string s)
3163     {
3164         if(__ctfe)
3165         {
3166             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!("T"), pegged.peg.literal!(" ")), "TomlGrammar.time_delim")(TParseTree("", false,[], s));
3167         }
3168         else
3169         {
3170             forgetMemo();
3171             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!("T"), pegged.peg.literal!(" ")), "TomlGrammar.time_delim"), "time_delim")(TParseTree("", false,[], s));
3172         }
3173     }
3174     static string time_delim(GetName g)
3175     {
3176         return "TomlGrammar.time_delim";
3177     }
3178 
3179     static TParseTree time_hour(TParseTree p)
3180     {
3181         if(__ctfe)
3182         {
3183             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.time_hour")(p);
3184         }
3185         else
3186         {
3187             if (auto m = tuple(`time_hour`, p.end) in memo)
3188                 return *m;
3189             else
3190             {
3191                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.time_hour"), "time_hour")(p);
3192                 memo[tuple(`time_hour`, p.end)] = result;
3193                 return result;
3194             }
3195         }
3196     }
3197 
3198     static TParseTree time_hour(string s)
3199     {
3200         if(__ctfe)
3201         {
3202             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.time_hour")(TParseTree("", false,[], s));
3203         }
3204         else
3205         {
3206             forgetMemo();
3207             return hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.time_hour"), "time_hour")(TParseTree("", false,[], s));
3208         }
3209     }
3210     static string time_hour(GetName g)
3211     {
3212         return "TomlGrammar.time_hour";
3213     }
3214 
3215     static TParseTree time_minute(TParseTree p)
3216     {
3217         if(__ctfe)
3218         {
3219             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.time_minute")(p);
3220         }
3221         else
3222         {
3223             if (auto m = tuple(`time_minute`, p.end) in memo)
3224                 return *m;
3225             else
3226             {
3227                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.time_minute"), "time_minute")(p);
3228                 memo[tuple(`time_minute`, p.end)] = result;
3229                 return result;
3230             }
3231         }
3232     }
3233 
3234     static TParseTree time_minute(string s)
3235     {
3236         if(__ctfe)
3237         {
3238             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.time_minute")(TParseTree("", false,[], s));
3239         }
3240         else
3241         {
3242             forgetMemo();
3243             return hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.time_minute"), "time_minute")(TParseTree("", false,[], s));
3244         }
3245     }
3246     static string time_minute(GetName g)
3247     {
3248         return "TomlGrammar.time_minute";
3249     }
3250 
3251     static TParseTree time_second(TParseTree p)
3252     {
3253         if(__ctfe)
3254         {
3255             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.time_second")(p);
3256         }
3257         else
3258         {
3259             if (auto m = tuple(`time_second`, p.end) in memo)
3260                 return *m;
3261             else
3262             {
3263                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.time_second"), "time_second")(p);
3264                 memo[tuple(`time_second`, p.end)] = result;
3265                 return result;
3266             }
3267         }
3268     }
3269 
3270     static TParseTree time_second(string s)
3271     {
3272         if(__ctfe)
3273         {
3274             return         pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.time_second")(TParseTree("", false,[], s));
3275         }
3276         else
3277         {
3278             forgetMemo();
3279             return hooked!(pegged.peg.defined!(pegged.peg.and!(DIGIT, DIGIT), "TomlGrammar.time_second"), "time_second")(TParseTree("", false,[], s));
3280         }
3281     }
3282     static string time_second(GetName g)
3283     {
3284         return "TomlGrammar.time_second";
3285     }
3286 
3287     static TParseTree time_secfrac(TParseTree p)
3288     {
3289         if(__ctfe)
3290         {
3291             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("."), pegged.peg.oneOrMore!(DIGIT)), "TomlGrammar.time_secfrac")(p);
3292         }
3293         else
3294         {
3295             if (auto m = tuple(`time_secfrac`, p.end) in memo)
3296                 return *m;
3297             else
3298             {
3299                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("."), pegged.peg.oneOrMore!(DIGIT)), "TomlGrammar.time_secfrac"), "time_secfrac")(p);
3300                 memo[tuple(`time_secfrac`, p.end)] = result;
3301                 return result;
3302             }
3303         }
3304     }
3305 
3306     static TParseTree time_secfrac(string s)
3307     {
3308         if(__ctfe)
3309         {
3310             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("."), pegged.peg.oneOrMore!(DIGIT)), "TomlGrammar.time_secfrac")(TParseTree("", false,[], s));
3311         }
3312         else
3313         {
3314             forgetMemo();
3315             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("."), pegged.peg.oneOrMore!(DIGIT)), "TomlGrammar.time_secfrac"), "time_secfrac")(TParseTree("", false,[], s));
3316         }
3317     }
3318     static string time_secfrac(GetName g)
3319     {
3320         return "TomlGrammar.time_secfrac";
3321     }
3322 
3323     static TParseTree time_numoffset(TParseTree p)
3324     {
3325         if(__ctfe)
3326         {
3327             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.keywords!("+", "-"), time_hour, pegged.peg.literal!(":"), time_minute), "TomlGrammar.time_numoffset")(p);
3328         }
3329         else
3330         {
3331             if (auto m = tuple(`time_numoffset`, p.end) in memo)
3332                 return *m;
3333             else
3334             {
3335                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.keywords!("+", "-"), time_hour, pegged.peg.literal!(":"), time_minute), "TomlGrammar.time_numoffset"), "time_numoffset")(p);
3336                 memo[tuple(`time_numoffset`, p.end)] = result;
3337                 return result;
3338             }
3339         }
3340     }
3341 
3342     static TParseTree time_numoffset(string s)
3343     {
3344         if(__ctfe)
3345         {
3346             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.keywords!("+", "-"), time_hour, pegged.peg.literal!(":"), time_minute), "TomlGrammar.time_numoffset")(TParseTree("", false,[], s));
3347         }
3348         else
3349         {
3350             forgetMemo();
3351             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.keywords!("+", "-"), time_hour, pegged.peg.literal!(":"), time_minute), "TomlGrammar.time_numoffset"), "time_numoffset")(TParseTree("", false,[], s));
3352         }
3353     }
3354     static string time_numoffset(GetName g)
3355     {
3356         return "TomlGrammar.time_numoffset";
3357     }
3358 
3359     static TParseTree time_offset(TParseTree p)
3360     {
3361         if(__ctfe)
3362         {
3363             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!("Z"), time_numoffset), "TomlGrammar.time_offset")(p);
3364         }
3365         else
3366         {
3367             if (auto m = tuple(`time_offset`, p.end) in memo)
3368                 return *m;
3369             else
3370             {
3371                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!("Z"), time_numoffset), "TomlGrammar.time_offset"), "time_offset")(p);
3372                 memo[tuple(`time_offset`, p.end)] = result;
3373                 return result;
3374             }
3375         }
3376     }
3377 
3378     static TParseTree time_offset(string s)
3379     {
3380         if(__ctfe)
3381         {
3382             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!("Z"), time_numoffset), "TomlGrammar.time_offset")(TParseTree("", false,[], s));
3383         }
3384         else
3385         {
3386             forgetMemo();
3387             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.literal!("Z"), time_numoffset), "TomlGrammar.time_offset"), "time_offset")(TParseTree("", false,[], s));
3388         }
3389     }
3390     static string time_offset(GetName g)
3391     {
3392         return "TomlGrammar.time_offset";
3393     }
3394 
3395     static TParseTree partial_time(TParseTree p)
3396     {
3397         if(__ctfe)
3398         {
3399             return         pegged.peg.defined!(pegged.peg.and!(time_hour, pegged.peg.literal!(":"), time_minute, pegged.peg.literal!(":"), time_second, pegged.peg.option!(time_secfrac)), "TomlGrammar.partial_time")(p);
3400         }
3401         else
3402         {
3403             if (auto m = tuple(`partial_time`, p.end) in memo)
3404                 return *m;
3405             else
3406             {
3407                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(time_hour, pegged.peg.literal!(":"), time_minute, pegged.peg.literal!(":"), time_second, pegged.peg.option!(time_secfrac)), "TomlGrammar.partial_time"), "partial_time")(p);
3408                 memo[tuple(`partial_time`, p.end)] = result;
3409                 return result;
3410             }
3411         }
3412     }
3413 
3414     static TParseTree partial_time(string s)
3415     {
3416         if(__ctfe)
3417         {
3418             return         pegged.peg.defined!(pegged.peg.and!(time_hour, pegged.peg.literal!(":"), time_minute, pegged.peg.literal!(":"), time_second, pegged.peg.option!(time_secfrac)), "TomlGrammar.partial_time")(TParseTree("", false,[], s));
3419         }
3420         else
3421         {
3422             forgetMemo();
3423             return hooked!(pegged.peg.defined!(pegged.peg.and!(time_hour, pegged.peg.literal!(":"), time_minute, pegged.peg.literal!(":"), time_second, pegged.peg.option!(time_secfrac)), "TomlGrammar.partial_time"), "partial_time")(TParseTree("", false,[], s));
3424         }
3425     }
3426     static string partial_time(GetName g)
3427     {
3428         return "TomlGrammar.partial_time";
3429     }
3430 
3431     static TParseTree full_date(TParseTree p)
3432     {
3433         if(__ctfe)
3434         {
3435             return         pegged.peg.defined!(pegged.peg.and!(date_fullyear, pegged.peg.literal!("-"), date_month, pegged.peg.literal!("-"), date_mday), "TomlGrammar.full_date")(p);
3436         }
3437         else
3438         {
3439             if (auto m = tuple(`full_date`, p.end) in memo)
3440                 return *m;
3441             else
3442             {
3443                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(date_fullyear, pegged.peg.literal!("-"), date_month, pegged.peg.literal!("-"), date_mday), "TomlGrammar.full_date"), "full_date")(p);
3444                 memo[tuple(`full_date`, p.end)] = result;
3445                 return result;
3446             }
3447         }
3448     }
3449 
3450     static TParseTree full_date(string s)
3451     {
3452         if(__ctfe)
3453         {
3454             return         pegged.peg.defined!(pegged.peg.and!(date_fullyear, pegged.peg.literal!("-"), date_month, pegged.peg.literal!("-"), date_mday), "TomlGrammar.full_date")(TParseTree("", false,[], s));
3455         }
3456         else
3457         {
3458             forgetMemo();
3459             return hooked!(pegged.peg.defined!(pegged.peg.and!(date_fullyear, pegged.peg.literal!("-"), date_month, pegged.peg.literal!("-"), date_mday), "TomlGrammar.full_date"), "full_date")(TParseTree("", false,[], s));
3460         }
3461     }
3462     static string full_date(GetName g)
3463     {
3464         return "TomlGrammar.full_date";
3465     }
3466 
3467     static TParseTree full_time(TParseTree p)
3468     {
3469         if(__ctfe)
3470         {
3471             return         pegged.peg.defined!(pegged.peg.and!(partial_time, time_offset), "TomlGrammar.full_time")(p);
3472         }
3473         else
3474         {
3475             if (auto m = tuple(`full_time`, p.end) in memo)
3476                 return *m;
3477             else
3478             {
3479                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(partial_time, time_offset), "TomlGrammar.full_time"), "full_time")(p);
3480                 memo[tuple(`full_time`, p.end)] = result;
3481                 return result;
3482             }
3483         }
3484     }
3485 
3486     static TParseTree full_time(string s)
3487     {
3488         if(__ctfe)
3489         {
3490             return         pegged.peg.defined!(pegged.peg.and!(partial_time, time_offset), "TomlGrammar.full_time")(TParseTree("", false,[], s));
3491         }
3492         else
3493         {
3494             forgetMemo();
3495             return hooked!(pegged.peg.defined!(pegged.peg.and!(partial_time, time_offset), "TomlGrammar.full_time"), "full_time")(TParseTree("", false,[], s));
3496         }
3497     }
3498     static string full_time(GetName g)
3499     {
3500         return "TomlGrammar.full_time";
3501     }
3502 
3503     static TParseTree offset_date_time(TParseTree p)
3504     {
3505         if(__ctfe)
3506         {
3507             return         pegged.peg.defined!(pegged.peg.and!(full_date, time_delim, full_time), "TomlGrammar.offset_date_time")(p);
3508         }
3509         else
3510         {
3511             if (auto m = tuple(`offset_date_time`, p.end) in memo)
3512                 return *m;
3513             else
3514             {
3515                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(full_date, time_delim, full_time), "TomlGrammar.offset_date_time"), "offset_date_time")(p);
3516                 memo[tuple(`offset_date_time`, p.end)] = result;
3517                 return result;
3518             }
3519         }
3520     }
3521 
3522     static TParseTree offset_date_time(string s)
3523     {
3524         if(__ctfe)
3525         {
3526             return         pegged.peg.defined!(pegged.peg.and!(full_date, time_delim, full_time), "TomlGrammar.offset_date_time")(TParseTree("", false,[], s));
3527         }
3528         else
3529         {
3530             forgetMemo();
3531             return hooked!(pegged.peg.defined!(pegged.peg.and!(full_date, time_delim, full_time), "TomlGrammar.offset_date_time"), "offset_date_time")(TParseTree("", false,[], s));
3532         }
3533     }
3534     static string offset_date_time(GetName g)
3535     {
3536         return "TomlGrammar.offset_date_time";
3537     }
3538 
3539     static TParseTree local_date_time(TParseTree p)
3540     {
3541         if(__ctfe)
3542         {
3543             return         pegged.peg.defined!(pegged.peg.and!(full_date, time_delim, partial_time), "TomlGrammar.local_date_time")(p);
3544         }
3545         else
3546         {
3547             if (auto m = tuple(`local_date_time`, p.end) in memo)
3548                 return *m;
3549             else
3550             {
3551                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(full_date, time_delim, partial_time), "TomlGrammar.local_date_time"), "local_date_time")(p);
3552                 memo[tuple(`local_date_time`, p.end)] = result;
3553                 return result;
3554             }
3555         }
3556     }
3557 
3558     static TParseTree local_date_time(string s)
3559     {
3560         if(__ctfe)
3561         {
3562             return         pegged.peg.defined!(pegged.peg.and!(full_date, time_delim, partial_time), "TomlGrammar.local_date_time")(TParseTree("", false,[], s));
3563         }
3564         else
3565         {
3566             forgetMemo();
3567             return hooked!(pegged.peg.defined!(pegged.peg.and!(full_date, time_delim, partial_time), "TomlGrammar.local_date_time"), "local_date_time")(TParseTree("", false,[], s));
3568         }
3569     }
3570     static string local_date_time(GetName g)
3571     {
3572         return "TomlGrammar.local_date_time";
3573     }
3574 
3575     static TParseTree local_date(TParseTree p)
3576     {
3577         if(__ctfe)
3578         {
3579             return         pegged.peg.defined!(full_date, "TomlGrammar.local_date")(p);
3580         }
3581         else
3582         {
3583             if (auto m = tuple(`local_date`, p.end) in memo)
3584                 return *m;
3585             else
3586             {
3587                 TParseTree result = hooked!(pegged.peg.defined!(full_date, "TomlGrammar.local_date"), "local_date")(p);
3588                 memo[tuple(`local_date`, p.end)] = result;
3589                 return result;
3590             }
3591         }
3592     }
3593 
3594     static TParseTree local_date(string s)
3595     {
3596         if(__ctfe)
3597         {
3598             return         pegged.peg.defined!(full_date, "TomlGrammar.local_date")(TParseTree("", false,[], s));
3599         }
3600         else
3601         {
3602             forgetMemo();
3603             return hooked!(pegged.peg.defined!(full_date, "TomlGrammar.local_date"), "local_date")(TParseTree("", false,[], s));
3604         }
3605     }
3606     static string local_date(GetName g)
3607     {
3608         return "TomlGrammar.local_date";
3609     }
3610 
3611     static TParseTree local_time(TParseTree p)
3612     {
3613         if(__ctfe)
3614         {
3615             return         pegged.peg.defined!(partial_time, "TomlGrammar.local_time")(p);
3616         }
3617         else
3618         {
3619             if (auto m = tuple(`local_time`, p.end) in memo)
3620                 return *m;
3621             else
3622             {
3623                 TParseTree result = hooked!(pegged.peg.defined!(partial_time, "TomlGrammar.local_time"), "local_time")(p);
3624                 memo[tuple(`local_time`, p.end)] = result;
3625                 return result;
3626             }
3627         }
3628     }
3629 
3630     static TParseTree local_time(string s)
3631     {
3632         if(__ctfe)
3633         {
3634             return         pegged.peg.defined!(partial_time, "TomlGrammar.local_time")(TParseTree("", false,[], s));
3635         }
3636         else
3637         {
3638             forgetMemo();
3639             return hooked!(pegged.peg.defined!(partial_time, "TomlGrammar.local_time"), "local_time")(TParseTree("", false,[], s));
3640         }
3641     }
3642     static string local_time(GetName g)
3643     {
3644         return "TomlGrammar.local_time";
3645     }
3646 
3647     static TParseTree array(TParseTree p)
3648     {
3649         if(__ctfe)
3650         {
3651             return         pegged.peg.defined!(pegged.peg.and!(array_open, pegged.peg.option!(array_values), ws_comment_newline, array_close), "TomlGrammar.array")(p);
3652         }
3653         else
3654         {
3655             if (auto m = tuple(`array`, p.end) in memo)
3656                 return *m;
3657             else
3658             {
3659                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(array_open, pegged.peg.option!(array_values), ws_comment_newline, array_close), "TomlGrammar.array"), "array")(p);
3660                 memo[tuple(`array`, p.end)] = result;
3661                 return result;
3662             }
3663         }
3664     }
3665 
3666     static TParseTree array(string s)
3667     {
3668         if(__ctfe)
3669         {
3670             return         pegged.peg.defined!(pegged.peg.and!(array_open, pegged.peg.option!(array_values), ws_comment_newline, array_close), "TomlGrammar.array")(TParseTree("", false,[], s));
3671         }
3672         else
3673         {
3674             forgetMemo();
3675             return hooked!(pegged.peg.defined!(pegged.peg.and!(array_open, pegged.peg.option!(array_values), ws_comment_newline, array_close), "TomlGrammar.array"), "array")(TParseTree("", false,[], s));
3676         }
3677     }
3678     static string array(GetName g)
3679     {
3680         return "TomlGrammar.array";
3681     }
3682 
3683     static TParseTree array_open(TParseTree p)
3684     {
3685         if(__ctfe)
3686         {
3687             return         pegged.peg.defined!(pegged.peg.literal!("["), "TomlGrammar.array_open")(p);
3688         }
3689         else
3690         {
3691             if (auto m = tuple(`array_open`, p.end) in memo)
3692                 return *m;
3693             else
3694             {
3695                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("["), "TomlGrammar.array_open"), "array_open")(p);
3696                 memo[tuple(`array_open`, p.end)] = result;
3697                 return result;
3698             }
3699         }
3700     }
3701 
3702     static TParseTree array_open(string s)
3703     {
3704         if(__ctfe)
3705         {
3706             return         pegged.peg.defined!(pegged.peg.literal!("["), "TomlGrammar.array_open")(TParseTree("", false,[], s));
3707         }
3708         else
3709         {
3710             forgetMemo();
3711             return hooked!(pegged.peg.defined!(pegged.peg.literal!("["), "TomlGrammar.array_open"), "array_open")(TParseTree("", false,[], s));
3712         }
3713     }
3714     static string array_open(GetName g)
3715     {
3716         return "TomlGrammar.array_open";
3717     }
3718 
3719     static TParseTree array_close(TParseTree p)
3720     {
3721         if(__ctfe)
3722         {
3723             return         pegged.peg.defined!(pegged.peg.literal!("]"), "TomlGrammar.array_close")(p);
3724         }
3725         else
3726         {
3727             if (auto m = tuple(`array_close`, p.end) in memo)
3728                 return *m;
3729             else
3730             {
3731                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!("]"), "TomlGrammar.array_close"), "array_close")(p);
3732                 memo[tuple(`array_close`, p.end)] = result;
3733                 return result;
3734             }
3735         }
3736     }
3737 
3738     static TParseTree array_close(string s)
3739     {
3740         if(__ctfe)
3741         {
3742             return         pegged.peg.defined!(pegged.peg.literal!("]"), "TomlGrammar.array_close")(TParseTree("", false,[], s));
3743         }
3744         else
3745         {
3746             forgetMemo();
3747             return hooked!(pegged.peg.defined!(pegged.peg.literal!("]"), "TomlGrammar.array_close"), "array_close")(TParseTree("", false,[], s));
3748         }
3749     }
3750     static string array_close(GetName g)
3751     {
3752         return "TomlGrammar.array_close";
3753     }
3754 
3755     static TParseTree array_values(TParseTree p)
3756     {
3757         if(__ctfe)
3758         {
3759             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(ws_comment_newline, val, ws, array_sep, array_values), pegged.peg.and!(ws_comment_newline, val, ws, pegged.peg.option!(array_sep))), "TomlGrammar.array_values")(p);
3760         }
3761         else
3762         {
3763             if (auto m = tuple(`array_values`, p.end) in memo)
3764                 return *m;
3765             else
3766             {
3767                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(ws_comment_newline, val, ws, array_sep, array_values), pegged.peg.and!(ws_comment_newline, val, ws, pegged.peg.option!(array_sep))), "TomlGrammar.array_values"), "array_values")(p);
3768                 memo[tuple(`array_values`, p.end)] = result;
3769                 return result;
3770             }
3771         }
3772     }
3773 
3774     static TParseTree array_values(string s)
3775     {
3776         if(__ctfe)
3777         {
3778             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(ws_comment_newline, val, ws, array_sep, array_values), pegged.peg.and!(ws_comment_newline, val, ws, pegged.peg.option!(array_sep))), "TomlGrammar.array_values")(TParseTree("", false,[], s));
3779         }
3780         else
3781         {
3782             forgetMemo();
3783             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.and!(ws_comment_newline, val, ws, array_sep, array_values), pegged.peg.and!(ws_comment_newline, val, ws, pegged.peg.option!(array_sep))), "TomlGrammar.array_values"), "array_values")(TParseTree("", false,[], s));
3784         }
3785     }
3786     static string array_values(GetName g)
3787     {
3788         return "TomlGrammar.array_values";
3789     }
3790 
3791     static TParseTree array_sep(TParseTree p)
3792     {
3793         if(__ctfe)
3794         {
3795             return         pegged.peg.defined!(pegged.peg.literal!(","), "TomlGrammar.array_sep")(p);
3796         }
3797         else
3798         {
3799             if (auto m = tuple(`array_sep`, p.end) in memo)
3800                 return *m;
3801             else
3802             {
3803                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.literal!(","), "TomlGrammar.array_sep"), "array_sep")(p);
3804                 memo[tuple(`array_sep`, p.end)] = result;
3805                 return result;
3806             }
3807         }
3808     }
3809 
3810     static TParseTree array_sep(string s)
3811     {
3812         if(__ctfe)
3813         {
3814             return         pegged.peg.defined!(pegged.peg.literal!(","), "TomlGrammar.array_sep")(TParseTree("", false,[], s));
3815         }
3816         else
3817         {
3818             forgetMemo();
3819             return hooked!(pegged.peg.defined!(pegged.peg.literal!(","), "TomlGrammar.array_sep"), "array_sep")(TParseTree("", false,[], s));
3820         }
3821     }
3822     static string array_sep(GetName g)
3823     {
3824         return "TomlGrammar.array_sep";
3825     }
3826 
3827     static TParseTree ws_comment_newline(TParseTree p)
3828     {
3829         if(__ctfe)
3830         {
3831             return         pegged.peg.defined!(pegged.peg.zeroOrMore!(pegged.peg.or!(wschar, pegged.peg.and!(pegged.peg.option!(comment), newline))), "TomlGrammar.ws_comment_newline")(p);
3832         }
3833         else
3834         {
3835             if (auto m = tuple(`ws_comment_newline`, p.end) in memo)
3836                 return *m;
3837             else
3838             {
3839                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.zeroOrMore!(pegged.peg.or!(wschar, pegged.peg.and!(pegged.peg.option!(comment), newline))), "TomlGrammar.ws_comment_newline"), "ws_comment_newline")(p);
3840                 memo[tuple(`ws_comment_newline`, p.end)] = result;
3841                 return result;
3842             }
3843         }
3844     }
3845 
3846     static TParseTree ws_comment_newline(string s)
3847     {
3848         if(__ctfe)
3849         {
3850             return         pegged.peg.defined!(pegged.peg.zeroOrMore!(pegged.peg.or!(wschar, pegged.peg.and!(pegged.peg.option!(comment), newline))), "TomlGrammar.ws_comment_newline")(TParseTree("", false,[], s));
3851         }
3852         else
3853         {
3854             forgetMemo();
3855             return hooked!(pegged.peg.defined!(pegged.peg.zeroOrMore!(pegged.peg.or!(wschar, pegged.peg.and!(pegged.peg.option!(comment), newline))), "TomlGrammar.ws_comment_newline"), "ws_comment_newline")(TParseTree("", false,[], s));
3856         }
3857     }
3858     static string ws_comment_newline(GetName g)
3859     {
3860         return "TomlGrammar.ws_comment_newline";
3861     }
3862 
3863     static TParseTree table(TParseTree p)
3864     {
3865         if(__ctfe)
3866         {
3867             return         pegged.peg.defined!(pegged.peg.or!(std_table, array_table), "TomlGrammar.table")(p);
3868         }
3869         else
3870         {
3871             if (auto m = tuple(`table`, p.end) in memo)
3872                 return *m;
3873             else
3874             {
3875                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(std_table, array_table), "TomlGrammar.table"), "table")(p);
3876                 memo[tuple(`table`, p.end)] = result;
3877                 return result;
3878             }
3879         }
3880     }
3881 
3882     static TParseTree table(string s)
3883     {
3884         if(__ctfe)
3885         {
3886             return         pegged.peg.defined!(pegged.peg.or!(std_table, array_table), "TomlGrammar.table")(TParseTree("", false,[], s));
3887         }
3888         else
3889         {
3890             forgetMemo();
3891             return hooked!(pegged.peg.defined!(pegged.peg.or!(std_table, array_table), "TomlGrammar.table"), "table")(TParseTree("", false,[], s));
3892         }
3893     }
3894     static string table(GetName g)
3895     {
3896         return "TomlGrammar.table";
3897     }
3898 
3899     static TParseTree std_table(TParseTree p)
3900     {
3901         if(__ctfe)
3902         {
3903             return         pegged.peg.defined!(pegged.peg.and!(std_table_open, key, std_table_close), "TomlGrammar.std_table")(p);
3904         }
3905         else
3906         {
3907             if (auto m = tuple(`std_table`, p.end) in memo)
3908                 return *m;
3909             else
3910             {
3911                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(std_table_open, key, std_table_close), "TomlGrammar.std_table"), "std_table")(p);
3912                 memo[tuple(`std_table`, p.end)] = result;
3913                 return result;
3914             }
3915         }
3916     }
3917 
3918     static TParseTree std_table(string s)
3919     {
3920         if(__ctfe)
3921         {
3922             return         pegged.peg.defined!(pegged.peg.and!(std_table_open, key, std_table_close), "TomlGrammar.std_table")(TParseTree("", false,[], s));
3923         }
3924         else
3925         {
3926             forgetMemo();
3927             return hooked!(pegged.peg.defined!(pegged.peg.and!(std_table_open, key, std_table_close), "TomlGrammar.std_table"), "std_table")(TParseTree("", false,[], s));
3928         }
3929     }
3930     static string std_table(GetName g)
3931     {
3932         return "TomlGrammar.std_table";
3933     }
3934 
3935     static TParseTree std_table_open(TParseTree p)
3936     {
3937         if(__ctfe)
3938         {
3939             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("["), ws), "TomlGrammar.std_table_open")(p);
3940         }
3941         else
3942         {
3943             if (auto m = tuple(`std_table_open`, p.end) in memo)
3944                 return *m;
3945             else
3946             {
3947                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("["), ws), "TomlGrammar.std_table_open"), "std_table_open")(p);
3948                 memo[tuple(`std_table_open`, p.end)] = result;
3949                 return result;
3950             }
3951         }
3952     }
3953 
3954     static TParseTree std_table_open(string s)
3955     {
3956         if(__ctfe)
3957         {
3958             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("["), ws), "TomlGrammar.std_table_open")(TParseTree("", false,[], s));
3959         }
3960         else
3961         {
3962             forgetMemo();
3963             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("["), ws), "TomlGrammar.std_table_open"), "std_table_open")(TParseTree("", false,[], s));
3964         }
3965     }
3966     static string std_table_open(GetName g)
3967     {
3968         return "TomlGrammar.std_table_open";
3969     }
3970 
3971     static TParseTree std_table_close(TParseTree p)
3972     {
3973         if(__ctfe)
3974         {
3975             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("]")), "TomlGrammar.std_table_close")(p);
3976         }
3977         else
3978         {
3979             if (auto m = tuple(`std_table_close`, p.end) in memo)
3980                 return *m;
3981             else
3982             {
3983                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("]")), "TomlGrammar.std_table_close"), "std_table_close")(p);
3984                 memo[tuple(`std_table_close`, p.end)] = result;
3985                 return result;
3986             }
3987         }
3988     }
3989 
3990     static TParseTree std_table_close(string s)
3991     {
3992         if(__ctfe)
3993         {
3994             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("]")), "TomlGrammar.std_table_close")(TParseTree("", false,[], s));
3995         }
3996         else
3997         {
3998             forgetMemo();
3999             return hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("]")), "TomlGrammar.std_table_close"), "std_table_close")(TParseTree("", false,[], s));
4000         }
4001     }
4002     static string std_table_close(GetName g)
4003     {
4004         return "TomlGrammar.std_table_close";
4005     }
4006 
4007     static TParseTree inline_table(TParseTree p)
4008     {
4009         if(__ctfe)
4010         {
4011             return         pegged.peg.defined!(pegged.peg.and!(inline_table_open, pegged.peg.option!(inline_table_keyvals), inline_table_close), "TomlGrammar.inline_table")(p);
4012         }
4013         else
4014         {
4015             if (auto m = tuple(`inline_table`, p.end) in memo)
4016                 return *m;
4017             else
4018             {
4019                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(inline_table_open, pegged.peg.option!(inline_table_keyvals), inline_table_close), "TomlGrammar.inline_table"), "inline_table")(p);
4020                 memo[tuple(`inline_table`, p.end)] = result;
4021                 return result;
4022             }
4023         }
4024     }
4025 
4026     static TParseTree inline_table(string s)
4027     {
4028         if(__ctfe)
4029         {
4030             return         pegged.peg.defined!(pegged.peg.and!(inline_table_open, pegged.peg.option!(inline_table_keyvals), inline_table_close), "TomlGrammar.inline_table")(TParseTree("", false,[], s));
4031         }
4032         else
4033         {
4034             forgetMemo();
4035             return hooked!(pegged.peg.defined!(pegged.peg.and!(inline_table_open, pegged.peg.option!(inline_table_keyvals), inline_table_close), "TomlGrammar.inline_table"), "inline_table")(TParseTree("", false,[], s));
4036         }
4037     }
4038     static string inline_table(GetName g)
4039     {
4040         return "TomlGrammar.inline_table";
4041     }
4042 
4043     static TParseTree inline_table_open(TParseTree p)
4044     {
4045         if(__ctfe)
4046         {
4047             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("{"), ws), "TomlGrammar.inline_table_open")(p);
4048         }
4049         else
4050         {
4051             if (auto m = tuple(`inline_table_open`, p.end) in memo)
4052                 return *m;
4053             else
4054             {
4055                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("{"), ws), "TomlGrammar.inline_table_open"), "inline_table_open")(p);
4056                 memo[tuple(`inline_table_open`, p.end)] = result;
4057                 return result;
4058             }
4059         }
4060     }
4061 
4062     static TParseTree inline_table_open(string s)
4063     {
4064         if(__ctfe)
4065         {
4066             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("{"), ws), "TomlGrammar.inline_table_open")(TParseTree("", false,[], s));
4067         }
4068         else
4069         {
4070             forgetMemo();
4071             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("{"), ws), "TomlGrammar.inline_table_open"), "inline_table_open")(TParseTree("", false,[], s));
4072         }
4073     }
4074     static string inline_table_open(GetName g)
4075     {
4076         return "TomlGrammar.inline_table_open";
4077     }
4078 
4079     static TParseTree inline_table_close(TParseTree p)
4080     {
4081         if(__ctfe)
4082         {
4083             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("}")), "TomlGrammar.inline_table_close")(p);
4084         }
4085         else
4086         {
4087             if (auto m = tuple(`inline_table_close`, p.end) in memo)
4088                 return *m;
4089             else
4090             {
4091                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("}")), "TomlGrammar.inline_table_close"), "inline_table_close")(p);
4092                 memo[tuple(`inline_table_close`, p.end)] = result;
4093                 return result;
4094             }
4095         }
4096     }
4097 
4098     static TParseTree inline_table_close(string s)
4099     {
4100         if(__ctfe)
4101         {
4102             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("}")), "TomlGrammar.inline_table_close")(TParseTree("", false,[], s));
4103         }
4104         else
4105         {
4106             forgetMemo();
4107             return hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("}")), "TomlGrammar.inline_table_close"), "inline_table_close")(TParseTree("", false,[], s));
4108         }
4109     }
4110     static string inline_table_close(GetName g)
4111     {
4112         return "TomlGrammar.inline_table_close";
4113     }
4114 
4115     static TParseTree inline_table_sep(TParseTree p)
4116     {
4117         if(__ctfe)
4118         {
4119             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!(","), ws), "TomlGrammar.inline_table_sep")(p);
4120         }
4121         else
4122         {
4123             if (auto m = tuple(`inline_table_sep`, p.end) in memo)
4124                 return *m;
4125             else
4126             {
4127                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!(","), ws), "TomlGrammar.inline_table_sep"), "inline_table_sep")(p);
4128                 memo[tuple(`inline_table_sep`, p.end)] = result;
4129                 return result;
4130             }
4131         }
4132     }
4133 
4134     static TParseTree inline_table_sep(string s)
4135     {
4136         if(__ctfe)
4137         {
4138             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!(","), ws), "TomlGrammar.inline_table_sep")(TParseTree("", false,[], s));
4139         }
4140         else
4141         {
4142             forgetMemo();
4143             return hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!(","), ws), "TomlGrammar.inline_table_sep"), "inline_table_sep")(TParseTree("", false,[], s));
4144         }
4145     }
4146     static string inline_table_sep(GetName g)
4147     {
4148         return "TomlGrammar.inline_table_sep";
4149     }
4150 
4151     static TParseTree inline_table_keyvals(TParseTree p)
4152     {
4153         if(__ctfe)
4154         {
4155             return         pegged.peg.defined!(pegged.peg.and!(keyval, pegged.peg.option!(pegged.peg.and!(inline_table_sep, inline_table_keyvals))), "TomlGrammar.inline_table_keyvals")(p);
4156         }
4157         else
4158         {
4159             if (auto m = tuple(`inline_table_keyvals`, p.end) in memo)
4160                 return *m;
4161             else
4162             {
4163                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(keyval, pegged.peg.option!(pegged.peg.and!(inline_table_sep, inline_table_keyvals))), "TomlGrammar.inline_table_keyvals"), "inline_table_keyvals")(p);
4164                 memo[tuple(`inline_table_keyvals`, p.end)] = result;
4165                 return result;
4166             }
4167         }
4168     }
4169 
4170     static TParseTree inline_table_keyvals(string s)
4171     {
4172         if(__ctfe)
4173         {
4174             return         pegged.peg.defined!(pegged.peg.and!(keyval, pegged.peg.option!(pegged.peg.and!(inline_table_sep, inline_table_keyvals))), "TomlGrammar.inline_table_keyvals")(TParseTree("", false,[], s));
4175         }
4176         else
4177         {
4178             forgetMemo();
4179             return hooked!(pegged.peg.defined!(pegged.peg.and!(keyval, pegged.peg.option!(pegged.peg.and!(inline_table_sep, inline_table_keyvals))), "TomlGrammar.inline_table_keyvals"), "inline_table_keyvals")(TParseTree("", false,[], s));
4180         }
4181     }
4182     static string inline_table_keyvals(GetName g)
4183     {
4184         return "TomlGrammar.inline_table_keyvals";
4185     }
4186 
4187     static TParseTree array_table(TParseTree p)
4188     {
4189         if(__ctfe)
4190         {
4191             return         pegged.peg.defined!(pegged.peg.and!(array_table_open, key, array_table_close), "TomlGrammar.array_table")(p);
4192         }
4193         else
4194         {
4195             if (auto m = tuple(`array_table`, p.end) in memo)
4196                 return *m;
4197             else
4198             {
4199                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(array_table_open, key, array_table_close), "TomlGrammar.array_table"), "array_table")(p);
4200                 memo[tuple(`array_table`, p.end)] = result;
4201                 return result;
4202             }
4203         }
4204     }
4205 
4206     static TParseTree array_table(string s)
4207     {
4208         if(__ctfe)
4209         {
4210             return         pegged.peg.defined!(pegged.peg.and!(array_table_open, key, array_table_close), "TomlGrammar.array_table")(TParseTree("", false,[], s));
4211         }
4212         else
4213         {
4214             forgetMemo();
4215             return hooked!(pegged.peg.defined!(pegged.peg.and!(array_table_open, key, array_table_close), "TomlGrammar.array_table"), "array_table")(TParseTree("", false,[], s));
4216         }
4217     }
4218     static string array_table(GetName g)
4219     {
4220         return "TomlGrammar.array_table";
4221     }
4222 
4223     static TParseTree array_table_open(TParseTree p)
4224     {
4225         if(__ctfe)
4226         {
4227             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("[["), ws), "TomlGrammar.array_table_open")(p);
4228         }
4229         else
4230         {
4231             if (auto m = tuple(`array_table_open`, p.end) in memo)
4232                 return *m;
4233             else
4234             {
4235                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("[["), ws), "TomlGrammar.array_table_open"), "array_table_open")(p);
4236                 memo[tuple(`array_table_open`, p.end)] = result;
4237                 return result;
4238             }
4239         }
4240     }
4241 
4242     static TParseTree array_table_open(string s)
4243     {
4244         if(__ctfe)
4245         {
4246             return         pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("[["), ws), "TomlGrammar.array_table_open")(TParseTree("", false,[], s));
4247         }
4248         else
4249         {
4250             forgetMemo();
4251             return hooked!(pegged.peg.defined!(pegged.peg.and!(pegged.peg.literal!("[["), ws), "TomlGrammar.array_table_open"), "array_table_open")(TParseTree("", false,[], s));
4252         }
4253     }
4254     static string array_table_open(GetName g)
4255     {
4256         return "TomlGrammar.array_table_open";
4257     }
4258 
4259     static TParseTree array_table_close(TParseTree p)
4260     {
4261         if(__ctfe)
4262         {
4263             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("]]")), "TomlGrammar.array_table_close")(p);
4264         }
4265         else
4266         {
4267             if (auto m = tuple(`array_table_close`, p.end) in memo)
4268                 return *m;
4269             else
4270             {
4271                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("]]")), "TomlGrammar.array_table_close"), "array_table_close")(p);
4272                 memo[tuple(`array_table_close`, p.end)] = result;
4273                 return result;
4274             }
4275         }
4276     }
4277 
4278     static TParseTree array_table_close(string s)
4279     {
4280         if(__ctfe)
4281         {
4282             return         pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("]]")), "TomlGrammar.array_table_close")(TParseTree("", false,[], s));
4283         }
4284         else
4285         {
4286             forgetMemo();
4287             return hooked!(pegged.peg.defined!(pegged.peg.and!(ws, pegged.peg.literal!("]]")), "TomlGrammar.array_table_close"), "array_table_close")(TParseTree("", false,[], s));
4288         }
4289     }
4290     static string array_table_close(GetName g)
4291     {
4292         return "TomlGrammar.array_table_close";
4293     }
4294 
4295     static TParseTree ALPHA(TParseTree p)
4296     {
4297         if(__ctfe)
4298         {
4299             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('a', 'z')), "TomlGrammar.ALPHA")(p);
4300         }
4301         else
4302         {
4303             if (auto m = tuple(`ALPHA`, p.end) in memo)
4304                 return *m;
4305             else
4306             {
4307                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('a', 'z')), "TomlGrammar.ALPHA"), "ALPHA")(p);
4308                 memo[tuple(`ALPHA`, p.end)] = result;
4309                 return result;
4310             }
4311         }
4312     }
4313 
4314     static TParseTree ALPHA(string s)
4315     {
4316         if(__ctfe)
4317         {
4318             return         pegged.peg.defined!(pegged.peg.or!(pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('a', 'z')), "TomlGrammar.ALPHA")(TParseTree("", false,[], s));
4319         }
4320         else
4321         {
4322             forgetMemo();
4323             return hooked!(pegged.peg.defined!(pegged.peg.or!(pegged.peg.charRange!('A', 'Z'), pegged.peg.charRange!('a', 'z')), "TomlGrammar.ALPHA"), "ALPHA")(TParseTree("", false,[], s));
4324         }
4325     }
4326     static string ALPHA(GetName g)
4327     {
4328         return "TomlGrammar.ALPHA";
4329     }
4330 
4331     static TParseTree DIGIT(TParseTree p)
4332     {
4333         if(__ctfe)
4334         {
4335             return         pegged.peg.defined!(pegged.peg.charRange!('0', '9'), "TomlGrammar.DIGIT")(p);
4336         }
4337         else
4338         {
4339             if (auto m = tuple(`DIGIT`, p.end) in memo)
4340                 return *m;
4341             else
4342             {
4343                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.charRange!('0', '9'), "TomlGrammar.DIGIT"), "DIGIT")(p);
4344                 memo[tuple(`DIGIT`, p.end)] = result;
4345                 return result;
4346             }
4347         }
4348     }
4349 
4350     static TParseTree DIGIT(string s)
4351     {
4352         if(__ctfe)
4353         {
4354             return         pegged.peg.defined!(pegged.peg.charRange!('0', '9'), "TomlGrammar.DIGIT")(TParseTree("", false,[], s));
4355         }
4356         else
4357         {
4358             forgetMemo();
4359             return hooked!(pegged.peg.defined!(pegged.peg.charRange!('0', '9'), "TomlGrammar.DIGIT"), "DIGIT")(TParseTree("", false,[], s));
4360         }
4361     }
4362     static string DIGIT(GetName g)
4363     {
4364         return "TomlGrammar.DIGIT";
4365     }
4366 
4367     static TParseTree HEXDIG(TParseTree p)
4368     {
4369         if(__ctfe)
4370         {
4371             return         pegged.peg.defined!(pegged.peg.or!(DIGIT, pegged.peg.or!(pegged.peg.charRange!('A', 'F'), pegged.peg.charRange!('a', 'f'))), "TomlGrammar.HEXDIG")(p);
4372         }
4373         else
4374         {
4375             if (auto m = tuple(`HEXDIG`, p.end) in memo)
4376                 return *m;
4377             else
4378             {
4379                 TParseTree result = hooked!(pegged.peg.defined!(pegged.peg.or!(DIGIT, pegged.peg.or!(pegged.peg.charRange!('A', 'F'), pegged.peg.charRange!('a', 'f'))), "TomlGrammar.HEXDIG"), "HEXDIG")(p);
4380                 memo[tuple(`HEXDIG`, p.end)] = result;
4381                 return result;
4382             }
4383         }
4384     }
4385 
4386     static TParseTree HEXDIG(string s)
4387     {
4388         if(__ctfe)
4389         {
4390             return         pegged.peg.defined!(pegged.peg.or!(DIGIT, pegged.peg.or!(pegged.peg.charRange!('A', 'F'), pegged.peg.charRange!('a', 'f'))), "TomlGrammar.HEXDIG")(TParseTree("", false,[], s));
4391         }
4392         else
4393         {
4394             forgetMemo();
4395             return hooked!(pegged.peg.defined!(pegged.peg.or!(DIGIT, pegged.peg.or!(pegged.peg.charRange!('A', 'F'), pegged.peg.charRange!('a', 'f'))), "TomlGrammar.HEXDIG"), "HEXDIG")(TParseTree("", false,[], s));
4396         }
4397     }
4398     static string HEXDIG(GetName g)
4399     {
4400         return "TomlGrammar.HEXDIG";
4401     }
4402 
4403     static TParseTree opCall(TParseTree p)
4404     {
4405         TParseTree result = decimateTree(toml(p));
4406         result.children = [result];
4407         result.name = "TomlGrammar";
4408         return result;
4409     }
4410 
4411     static TParseTree opCall(string input)
4412     {
4413         if(__ctfe)
4414         {
4415             return TomlGrammar(TParseTree(``, false, [], input, 0, 0));
4416         }
4417         else
4418         {
4419             forgetMemo();
4420             return TomlGrammar(TParseTree(``, false, [], input, 0, 0));
4421         }
4422     }
4423     static string opCall(GetName g)
4424     {
4425         return "TomlGrammar";
4426     }
4427 
4428 
4429     static void forgetMemo()
4430     {
4431         memo = null;
4432     }
4433     }
4434 }
4435 
4436 package alias GenericTomlGrammar!(ParseTree).TomlGrammar TomlGrammar;