Teuchos - Trilinos Tools Package  Version of the Day
Teuchos_YAML.cpp
1 #include "Teuchos_YAML.hpp"
2 
3 namespace Teuchos {
4 namespace yaml {
5 
6 Language make_language() {
7  Language out;
8  Language::Productions& prods = out.productions;
9  Language::Tokens& toks = out.tokens;
10  prods.resize(NPRODS);
11  toks.resize(NTOKS);
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]("}", "}");
74  return out;
75 }
76 
77 LanguagePtr ask_language() {
78  static LanguagePtr ptr;
79  if (ptr.strong_count() == 0) {
80  ptr.reset(new Language(make_language()));
81  }
82  return ptr;
83 }
84 
85 ReaderTablesPtr ask_reader_tables() {
86  static ReaderTablesPtr ptr;
87  if (ptr.strong_count() == 0) {
88  ptr = make_reader_tables(*(yaml::ask_language()));
89  }
90  return ptr;
91 }
92 
93 } // end namespace yaml
94 } // end namespace Teuchos
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