1 #include "Teuchos_YAML.hpp" 6 Language make_language() {
9 Language::Tokens& toks = out.tokens;
12 prods[PROD_DOC](
"doc") >>
"EQDENT",
"prolog",
"toplevel",
"epilog";
13 prods[PROD_PROLOG](
"prolog") >>
"directive?",
"DOC_START";
14 prods[PROD_NO_DIRECT](
"directive?");
15 prods[PROD_ONE_DIRECT](
"directive?") >>
"directive";
16 prods[PROD_DIRECT](
"directive") >>
"DIRECTIVE",
"EQDENT";
17 prods[PROD_EPILOG](
"epilog") >>
"doc_end";
18 prods[PROD_DOC_END](
"doc_end") >>
"DOC_END",
"EQDENT";
19 prods[PROD_TOP_BMAP](
"toplevel") >>
"EQDENT",
"block_map_items",
"EQDENT?";
20 prods[PROD_TOP_BSEQ](
"toplevel") >>
"EQDENT",
"block_sequence_items",
"EQDENT?";
21 prods[PROD_TOP_BLOCK](
"toplevel") >>
"block_collective";
22 prods[PROD_BMAP](
"block_collective") >>
"INDENT",
"block_map_items",
"DEDENT";
23 prods[PROD_BSEQ](
"block_collective") >>
"INDENT",
"block_sequence_items",
"DEDENT";
24 prods[PROD_BMAP_ONE_ITEM](
"block_map_items") >>
"block_map_item";
25 prods[PROD_BMAP_ITEMS](
"block_map_items") >>
"block_map_items",
"EQDENT",
"block_map_item";
26 prods[PROD_BSEQ_ITEM](
"block_sequence_items") >>
"block_sequence_item";
27 prods[PROD_BSEQ_ITEMS](
"block_sequence_items") >>
"block_sequence_items",
"EQDENT",
"block_sequence_item";
28 prods[PROD_BSEQ_SCALAR](
"block_sequence_item") >>
"comments",
"BLOCK_SEQ",
"scalar",
"S?";
29 prods[PROD_BMAP_ITEM](
"block_map_item") >>
"comments",
"scalar",
"S?",
":",
"S?",
"block_map_value";
30 prods[PROD_BMAP_SCALAR](
"block_map_value") >>
"scalar",
"S?";
31 prods[PROD_BMAP_BLOCK](
"block_map_value") >>
"block_collective";
32 prods[PROD_BMAP_FLOW](
"block_map_value") >>
"flow_collective";
33 prods[PROD_FSEQ_EMPTY](
"flow_collective") >>
"[",
"S?",
"]";
34 prods[PROD_FMAP_EMPTY](
"flow_collective") >>
"{",
"S?",
"}";
35 prods[PROD_FSEQ](
"flow_collective") >>
"[",
"S?",
"flow_sequence_items",
"]";
36 prods[PROD_FMAP](
"flow_collective") >>
"{",
"S?",
"flow_map_items",
"}";
37 prods[PROD_FSEQ_ITEM](
"flow_sequence_items") >>
"flow_sequence_item";
38 prods[PROD_FSEQ_ITEMS](
"flow_sequence_items") >>
"flow_sequence_items",
"FLOW_SEP",
"S?",
"flow_sequence_item";
39 prods[PROD_FSEQ_SCALAR](
"flow_sequence_item") >>
"scalar",
"S?";
40 prods[PROD_FSEQ_FLOW](
"flow_sequence_item") >>
"flow_collective",
"S?";
41 prods[PROD_FMAP_ONE_ITEM](
"flow_map_items") >>
"flow_map_item";
42 prods[PROD_FMAP_ITEMS](
"flow_map_items") >>
"flow_map_items",
"FLOW_SEP",
"S?",
"flow_map_item";
43 prods[PROD_FMAP_ITEM](
"flow_map_item") >>
"scalar",
"S?",
":",
"S?",
"flow_map_value";
44 prods[PROD_FMAP_SCALAR](
"flow_map_value") >>
"scalar",
"S?";
45 prods[PROD_FMAP_FLOW](
"flow_map_value") >>
"flow_collective",
"S?";
46 prods[PROD_NO_SPACE](
"S?");
47 prods[PROD_SPACE](
"S?") >>
"S";
48 prods[PROD_NO_COMMENTS](
"comments");
49 prods[PROD_COMMENTS](
"comments") >>
"comments",
"COMMENT",
"EQDENT";
50 prods[PROD_NO_EQDENT](
"EQDENT?");
51 prods[PROD_EQDENT](
"EQDENT?") >>
"EQDENT";
52 prods[PROD_RAW](
"scalar") >>
"RAW_SCALAR";
53 prods[PROD_DQUOTED](
"scalar") >>
"DOUBLE_QUOTED";
54 prods[PROD_SQUOTED](
"scalar") >>
"SINGLE_QUOTED";
55 toks[TOK_NODENT](
"NODENT",
"]NODENT[");
56 toks[TOK_INDENT](
"INDENT",
"]INDENT[");
57 toks[TOK_DEDENT](
"DEDENT",
"]DEDENT[");
58 toks[TOK_EQDENT](
"EQDENT",
"]EQDENT[");
59 toks[TOK_SPACES](
"S",
"[ \t]+");
60 toks[TOK_COMMENT](
"COMMENT",
"#[^\n\r]*");
61 toks[TOK_COLON](
":",
":");
62 toks[TOK_DOC_START](
"DOC_START",
"\\-\\-\\-");
63 toks[TOK_DOC_END](
"DOC_END",
"\\.\\.\\.");
64 toks[TOK_DIRECT](
"DIRECTIVE",
"%[^\n\r]*");
65 toks[TOK_RAW](
"RAW_SCALAR",
"(\\-[^ \t:\n\r%'\",{}\\[\\]]|[^ \t:\n\r\\-%'\",\\[\\]{}])([^:\n\r%'\",{}\\[\\]]*[^ \t:\n\r%'\",\\[\\]{}])?");
66 toks[TOK_DQUOTED](
"DOUBLE_QUOTED",
"\"(\\\\.|[^\\\\\"])*\"");
67 toks[TOK_SQUOTED](
"SINGLE_QUOTED",
"'[^']*(''[^']*)*'");
68 toks[TOK_BSEQ](
"BLOCK_SEQ",
"\\-[ \t]+");
69 toks[TOK_FSEP](
"FLOW_SEP",
",");
70 toks[TOK_LSQUARE](
"[",
"\\[");
71 toks[TOK_RSQUARE](
"]",
"\\]");
72 toks[TOK_LCURLY](
"{",
"{");
73 toks[TOK_RCURLY](
"}",
"}");
79 if (ptr.strong_count() == 0) {
80 ptr.reset(
new Language(make_language()));
87 if (ptr.strong_count() == 0) {
Productions productions
vector of productions
ReaderTablesPtr make_reader_tables(Language const &language)
constructs ReaderTables for the given Language.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos, as well as a number of utility routines.
RCP< const ReaderTables > ReaderTablesPtr
an RCP to a const ReaderTables
RCP< const Language > LanguagePtr
an RCP to a const Language