10 Language::Productions make_productions() {
11 Language::Productions prods;
13 prods[PROD_DOC](
"doc") >>
"top_items";
14 prods[PROD_DOC2](
"doc") >>
"NEWLINE",
"top_items";
15 prods[PROD_TOP_FIRST](
"top_items") >>
"top_item";
16 prods[PROD_TOP_NEXT](
"top_items") >>
"top_items",
"top_item";
17 prods[PROD_TOP_DIRECT](
"top_item") >>
"%",
"any*",
"NEWLINE";
18 prods[PROD_TOP_BEGIN](
"top_item") >>
"-",
"-",
"-",
"NEWLINE";
19 prods[PROD_TOP_END](
"top_item") >>
".",
".",
".",
"NEWLINE";
20 prods[PROD_TOP_BMAP](
"top_item") >>
"bmap_item";
21 prods[PROD_BMAP_FIRST](
"bmap_items") >>
"bmap_item";
22 prods[PROD_BMAP_NEXT](
"bmap_items") >>
"bmap_items",
"bmap_item";
23 prods[PROD_BMAP_SCALAR](
"bmap_item") >>
"scalar",
":",
"WS*",
"tag?",
"map_scalar",
"NEWLINE";
24 prods[PROD_BMAP_BSCALAR](
"bmap_item") >>
"scalar",
":",
"WS*",
"bscalar";
25 prods[PROD_BMAP_BVALUE](
"bmap_item") >>
"scalar",
":",
"WS*",
"NEWLINE",
"bvalue";
26 prods[PROD_BVALUE_EMPTY](
"bvalue");
27 prods[PROD_BVALUE_BMAP](
"bvalue") >>
"INDENT",
"bmap_items",
"DEDENT";
29 prods[PROD_BVALUE_BSEQ](
"bvalue") >>
"INDENT",
"bseq_items",
"DEDENT";
30 prods[PROD_BMAP_FMAP](
"bmap_item") >>
"scalar",
":",
"WS*",
"tag?",
"fmap",
"NEWLINE";
31 prods[PROD_BMAP_FSEQ](
"bmap_item") >>
"scalar",
":",
"WS*",
"tag?",
"fseq",
"NEWLINE";
32 prods[PROD_BSEQ_FIRST](
"bseq_items") >>
"bseq_item";
33 prods[PROD_BSEQ_NEXT](
"bseq_items") >>
"bseq_items",
"bseq_item";
34 prods[PROD_BSEQ_SCALAR](
"bseq_item") >>
"-",
"WS+",
"tag?",
"scalar",
"NEWLINE";
35 prods[PROD_BSEQ_BSCALAR](
"bseq_item") >>
"-",
"WS+",
"bscalar";
36 prods[PROD_BSEQ_BMAP](
"bseq_item") >>
"-",
"NEWLINE",
"INDENT",
"bmap_items",
"DEDENT";
37 prods[PROD_BSEQ_BMAP_TRAIL](
"bseq_item") >>
"-",
"WS+",
"NEWLINE",
"INDENT",
"bmap_items",
"DEDENT";
38 prods[PROD_BSEQ_BSEQ](
"bseq_item") >>
"-",
"NEWLINE",
"INDENT",
"bseq_items",
"DEDENT";
39 prods[PROD_BSEQ_BSEQ_TRAIL](
"bseq_item") >>
"-",
"WS+",
"NEWLINE",
"INDENT",
"bseq_items",
"DEDENT";
40 prods[PROD_BSEQ_FMAP](
"bseq_item") >>
"-",
"WS+",
"tag?",
"fmap",
"NEWLINE";
41 prods[PROD_BSEQ_FSEQ](
"bseq_item") >>
"-",
"WS+",
"tag?",
"fseq",
"NEWLINE";
42 prods[PROD_FMAP](
"fmap") >>
"{",
"WS*",
"fmap_items",
"}",
"WS*";
43 prods[PROD_FMAP_EMPTY](
"fmap") >>
"{",
"WS*",
"}",
"WS*";
44 prods[PROD_FMAP_FIRST](
"fmap_items") >>
"fmap_item";
45 prods[PROD_FMAP_NEXT](
"fmap_items") >>
"fmap_items",
",",
"WS*",
"fmap_item";
46 prods[PROD_FMAP_SCALAR](
"fmap_item") >>
"scalar",
":",
"WS*",
"tag?",
"scalar";
47 prods[PROD_FMAP_FMAP](
"fmap_item") >>
"scalar",
":",
"WS*",
"tag?",
"fmap";
48 prods[PROD_FMAP_FSEQ](
"fmap_item") >>
"scalar",
":",
"WS*",
"tag?",
"fseq";
49 prods[PROD_FSEQ](
"fseq") >>
"[",
"WS*",
"fseq_items",
"]",
"WS*";
50 prods[PROD_FSEQ_EMPTY](
"fseq") >>
"[",
"WS*",
"]",
"WS*";
51 prods[PROD_FSEQ_FIRST](
"fseq_items") >>
"fseq_item";
52 prods[PROD_FSEQ_NEXT](
"fseq_items") >>
"fseq_items",
",",
"WS*",
"fseq_item";
53 prods[PROD_FSEQ_SCALAR](
"fseq_item") >>
"tag?",
"scalar";
54 prods[PROD_FSEQ_FMAP](
"fseq_item") >>
"tag?",
"fmap";
55 prods[PROD_FSEQ_FSEQ](
"fseq_item") >>
"tag?",
"fseq";
56 prods[PROD_SCALAR_RAW](
"scalar") >>
"scalar_head",
"scalar_tail*";
57 prods[PROD_SCALAR_QUOTED](
"scalar") >>
"scalar_quoted";
58 prods[PROD_MAP_SCALAR_RAW](
"map_scalar") >>
"scalar_head",
"scalar_tail*",
"map_scalar_escaped*";
59 prods[PROD_MAP_SCALAR_QUOTED](
"map_scalar") >>
"scalar_quoted";
60 prods[PROD_SCALAR_DQUOTED](
"scalar_quoted") >>
"\"",
"dquoted*",
"descape*",
"\"",
"WS*";
61 prods[PROD_SCALAR_SQUOTED](
"scalar_quoted") >>
"'",
"squoted*",
"sescape*",
"'",
"WS*";
62 prods[PROD_SCALAR_HEAD_OTHER](
"scalar_head") >>
"OTHERCHAR";
63 prods[PROD_SCALAR_HEAD_DOT](
"scalar_head") >>
".",
"OTHERCHAR";
64 prods[PROD_SCALAR_HEAD_DASH](
"scalar_head") >>
"-",
"OTHERCHAR";
65 prods[PROD_SCALAR_HEAD_DOT_DOT](
"scalar_head") >>
".",
".",
"OTHERCHAR";
66 prods[PROD_MAP_SCALAR_ESCAPED_EMPTY](
"map_scalar_escaped*");
67 prods[PROD_MAP_SCALAR_ESCAPED_NEXT](
"map_scalar_escaped*") >>
"map_scalar_escaped*",
",",
"scalar_tail*";
68 prods[PROD_TAG_EMPTY](
"tag?");
69 prods[PROD_TAG](
"tag?") >>
"!",
"!",
"OTHERCHAR+",
"WS+";
70 prods[PROD_BSCALAR](
"bscalar") >>
"bscalar_header",
"WS*",
"NEWLINE",
"INDENT",
"bscalar_items",
"DEDENT";
71 prods[PROD_BSCALAR_FIRST](
"bscalar_items") >>
"bscalar_item";
72 prods[PROD_BSCALAR_NEXT](
"bscalar_items") >>
"bscalar_items",
"bscalar_item";
73 prods[PROD_BSCALAR_LINE](
"bscalar_item") >>
"any*",
"NEWLINE";
74 prods[PROD_BSCALAR_INDENT](
"bscalar_item") >>
"INDENT",
"bscalar_items",
"DEDENT";
75 prods[PROD_BSCALAR_HEADER_LITERAL](
"bscalar_header") >>
"|",
"bscalar_head_c*";
76 prods[PROD_BSCALAR_HEADER_FOLDED](
"bscalar_header") >>
">",
"bscalar_head_c*";
77 prods[PROD_BSCALAR_HEAD_EMPTY](
"bscalar_head_c*");
78 prods[PROD_BSCALAR_HEAD_NEXT](
"bscalar_head_c*") >>
"bscalar_head_c*",
"bscalar_head_c";
79 prods[PROD_BSCALAR_HEAD_OTHER](
"bscalar_head_c") >>
"OTHERCHAR";
80 prods[PROD_BSCALAR_HEAD_DASH](
"bscalar_head_c") >>
"-";
81 prods[PROD_DQUOTED_EMPTY](
"dquoted*");
82 prods[PROD_DQUOTED_NEXT](
"dquoted*") >>
"dquoted*",
"dquoted";
83 prods[PROD_SQUOTED_EMPTY](
"squoted*");
84 prods[PROD_SQUOTED_NEXT](
"squoted*") >>
"squoted*",
"squoted";
85 prods[PROD_ANY_EMPTY](
"any*");
86 prods[PROD_ANY_NEXT](
"any*") >>
"any*",
"any";
87 prods[PROD_DESCAPE_EMPTY](
"descape*");
88 prods[PROD_DESCAPE_NEXT](
"descape*") >>
"descape*",
"descape";
89 prods[PROD_DESCAPE](
"descape") >>
"\\",
"descaped",
"dquoted*";
90 prods[PROD_SESCAPE_EMPTY](
"sescape*");
91 prods[PROD_SESCAPE_NEXT](
"sescape*") >>
"sescape*",
"sescape";
92 prods[PROD_SESCAPE](
"sescape") >>
"'",
"'",
"squoted*";
93 prods[PROD_SCALAR_TAIL_EMPTY](
"scalar_tail*");
94 prods[PROD_SCALAR_TAIL_NEXT](
"scalar_tail*") >>
"scalar_tail*",
"scalar_tail";
95 prods[PROD_OTHER_FIRST](
"OTHERCHAR+") >>
"OTHERCHAR";
96 prods[PROD_OTHER_NEXT](
"OTHERCHAR+") >>
"OTHERCHAR+",
"OTHERCHAR";
97 prods[PROD_SCALAR_TAIL_SPACE](
"scalar_tail") >>
"WS";
98 prods[PROD_SCALAR_TAIL_DOT](
"scalar_tail") >>
".";
99 prods[PROD_SCALAR_TAIL_DASH](
"scalar_tail") >>
"-";
100 prods[PROD_SCALAR_TAIL_SQUOT](
"scalar_tail") >>
"'";
101 prods[PROD_SCALAR_TAIL_OTHER](
"scalar_tail") >>
"OTHERCHAR";
102 prods[PROD_DESCAPED_DQUOT](
"descaped") >>
"\"";
103 prods[PROD_DESCAPED_SLASH](
"descaped") >>
"\\";
104 prods[PROD_DESCAPED_DQUOTED](
"descaped") >>
"dquoted";
105 prods[PROD_DQUOTED_COMMON](
"dquoted") >>
"common";
106 prods[PROD_DQUOTED_SQUOT](
"dquoted") >>
"'";
107 prods[PROD_SQUOTED_COMMON](
"squoted") >>
"common";
108 prods[PROD_SQUOTED_DQUOT](
"squoted") >>
"\"";
109 prods[PROD_SQUOTED_SLASH](
"squoted") >>
"\\";
110 prods[PROD_ANY_COMMON](
"any") >>
"common";
111 prods[PROD_ANY_DQUOT](
"any") >>
"\"";
112 prods[PROD_ANY_SQUOT](
"any") >>
"'";
113 prods[PROD_ANY_SLASH](
"any") >>
"\\";
114 prods[PROD_COMMON_SPACE](
"common") >>
"WS";
115 prods[PROD_COMMON_COLON](
"common") >>
":";
116 prods[PROD_COMMON_DOT](
"common") >>
".";
117 prods[PROD_COMMON_DASH](
"common") >>
"-";
118 prods[PROD_COMMON_PIPE](
"common") >>
"|";
119 prods[PROD_COMMON_LSQUARE](
"common") >>
"[";
120 prods[PROD_COMMON_RSQUARE](
"common") >>
"]";
121 prods[PROD_COMMON_LCURLY](
"common") >>
"{";
122 prods[PROD_COMMON_RCURLY](
"common") >>
"}";
123 prods[PROD_COMMON_RANGLE](
"common") >>
">";
124 prods[PROD_COMMON_COMMA](
"common") >>
",";
125 prods[PROD_COMMON_PERCENT](
"common") >>
"%";
126 prods[PROD_COMMON_EXCL](
"common") >>
"!";
127 prods[PROD_COMMON_OTHER](
"common") >>
"OTHERCHAR";
128 prods[PROD_SPACE_STAR_EMPTY](
"WS*");
129 prods[PROD_SPACE_STAR_NEXT](
"WS*") >>
"WS*",
"WS";
130 prods[PROD_SPACE_PLUS_FIRST](
"WS+") >>
"WS";
131 prods[PROD_SPACE_PLUS_NEXT](
"WS+") >>
"WS+",
"WS";
137 Language make_language() {
140 prods = make_productions();
141 Language::Tokens& toks = out.tokens;
143 toks[TOK_NEWLINE](
"NEWLINE",
"((#[^\r\n]*)?\r?\n[ \t]*)+");
144 toks[TOK_INDENT](
"INDENT",
"((#[^\r\n]*)?\r?\n[ \t]*)+");
145 toks[TOK_DEDENT](
"DEDENT",
"((#[^\r\n]*)?\r?\n[ \t]*)+");
146 toks[TOK_SPACE](
"WS",
"[ \t]");
147 toks[TOK_COLON](
":",
":");
148 toks[TOK_DOT](
".",
"\\.");
149 toks[TOK_DASH](
"-",
"\\-");
150 toks[TOK_DQUOT](
"\"",
"\"");
151 toks[TOK_SQUOT](
"'",
"'");
152 toks[TOK_SLASH](
"\\",
"\\\\");
153 toks[TOK_PIPE](
"|",
"\\|");
154 toks[TOK_LSQUARE](
"[",
"\\[");
155 toks[TOK_RSQUARE](
"]",
"\\]");
156 toks[TOK_LCURLY](
"{",
"{");
157 toks[TOK_RCURLY](
"}",
"}");
158 toks[TOK_RANGLE](
">",
">");
159 toks[TOK_COMMA](
",",
",");
160 toks[TOK_PERCENT](
"%",
"%");
161 toks[TOK_EXCL](
"!",
"!");
162 toks[TOK_OTHER](
"OTHERCHAR",
"[^ \t:\\.\\-\"'\\\\\\|\\[\\]{}>,%#!\n\r]");
168 if (ptr.strong_count() == 0) {
169 ptr.reset(
new Language(make_language()));
176 if (ptr.strong_count() == 0) {
A TeuchosParser Language for a subset of YAML.
Productions productions
vector of productions
RCP< const ReaderTables > ReaderTablesPtr
an RCP to a const ReaderTables
ReaderTablesPtr make_reader_tables(Language const &language)
constructs ReaderTables for the given Language.
RCP< const Language > LanguagePtr
an RCP to a const Language