1 #include "Teuchos_XML.hpp"
6 Language make_language() {
10 prods[PROD_DOC](
"document") >>
"toplevels";
11 prods[PROD_TOPLEVEL](
"toplevels") >>
"toplevel";
12 prods[PROD_TOPLEVELS](
"toplevels") >>
"toplevel",
"toplevels";
13 prods[PROD_TOPLEVELS_MISC](
"toplevels") >>
"toplevel",
"Misc",
"toplevels";
14 prods[PROD_TOPLEVEL_ELEMENT](
"toplevel") >>
"element";
15 prods[PROD_TOPLEVEL_XMLDECL](
"toplevel") >>
"XMLDecl";
16 prods[PROD_ELEMENT_EMPTY](
"element") >>
"EmptyElemTag";
17 prods[PROD_ELEMENT](
"element") >>
"STag",
"content";
18 prods[PROD_XMLDECL](
"XMLDecl") >>
"<",
"?",
"Name",
"TagFill",
"?",
">";
19 prods[PROD_STAG](
"STag") >>
"<",
"Name",
"TagFill",
">";
20 prods[PROD_ETAG](
"ETag") >>
"<",
"/",
"Name",
"S?",
">";
21 prods[PROD_EMPTY_TAG](
"EmptyElemTag") >>
"<",
"Name",
"TagFill",
"/",
">";
22 prods[PROD_CONTENT](
"content") >>
"CharData?",
"ContentItem*",
"ETag";
23 prods[PROD_NO_CONTENT_ITEMS](
"ContentItem*");
24 prods[PROD_CONTENT_ITEMS](
"ContentItem*") >>
"ContentItem*",
"ContentItem",
"CharData?";
25 prods[PROD_CONTENT_ELEMENT](
"ContentItem") >>
"element";
26 prods[PROD_CONTENT_REF](
"ContentItem") >>
"Reference";
27 prods[PROD_CONTENT_COMMENT](
"ContentItem") >>
"Comment";
28 prods[PROD_NO_CHARDATA](
"CharData?");
29 prods[PROD_CHARDATA](
"CharData?") >>
"CharData?",
"DataChar";
30 prods[PROD_TAGFILL](
"TagFill") >>
"Attributes",
"S?";
31 prods[PROD_NO_ATTS](
"Attributes");
32 prods[PROD_ATTS](
"Attributes") >>
"Attributes",
"S",
"Attribute";
33 prods[PROD_ATT](
"Attribute") >>
"Name",
"Eq",
"AttValue";
34 prods[PROD_EQ](
"Eq") >>
"S?",
"=",
"S?";
35 prods[PROD_ATTVALUE_D](
"AttValue") >>
"\"",
"DQuoteds",
"\"";
36 prods[PROD_ATTVALUE_S](
"AttValue") >>
"'",
"SQuoteds",
"'";
37 prods[PROD_NO_DQUOTS](
"DQuoteds");
38 prods[PROD_DQUOTS](
"DQuoteds") >>
"DQuoteds",
"DQuoted";
39 prods[PROD_DQUOT_CHAR](
"DQuoted") >>
"DQuotedChar";
40 prods[PROD_DQUOT_REF](
"DQuoted") >>
"Reference";
41 prods[PROD_NO_SQUOTS](
"SQuoteds");
42 prods[PROD_SQUOTS](
"SQuoteds") >>
"SQuoteds",
"SQuoted";
43 prods[PROD_SQUOT_CHAR](
"SQuoted") >>
"SQuotedChar";
44 prods[PROD_SQUOT_REF](
"SQuoted") >>
"Reference";
45 prods[PROD_NAME](
"Name") >>
"NameFirstChar",
"NameChars";
46 prods[PROD_NAME_FIRST_LETTER](
"NameFirstChar") >>
"Letter";
47 prods[PROD_NAME_FIRST_UNDER](
"NameFirstChar") >>
"_";
48 prods[PROD_NAME_FIRST_COLON](
"NameFirstChar") >>
":";
49 prods[PROD_NO_NAME_CHARS](
"NameChars");
50 prods[PROD_NAME_CHARS](
"NameChars") >>
"NameChars",
"NameChar";
51 prods[PROD_NAME_LETTER](
"NameChar") >>
"Letter";
52 prods[PROD_NAME_DIGIT](
"NameChar") >>
"Digit";
53 prods[PROD_NAME_DOT](
"NameChar") >>
".";
54 prods[PROD_NAME_DASH](
"NameChar") >>
"-";
55 prods[PROD_NAME_UNDER](
"NameChar") >>
"_";
56 prods[PROD_NAME_COLON](
"NameChar") >>
":";
57 prods[PROD_NO_MISCS](
"Miscs");
58 prods[PROD_MISCS](
"Miscs") >>
"Miscs",
"Misc";
59 prods[PROD_MISC_COMMENT](
"Misc") >>
"Comment";
60 prods[PROD_MISC_SPACE](
"Misc") >>
"S";
61 prods[PROD_COMMENT](
"Comment") >>
"<",
"!",
"-",
"-",
"Commenteds",
"-",
"-",
">";
62 prods[PROD_NO_COMMENTED](
"Commenteds");
63 prods[PROD_COMMENTED](
"Commenteds") >>
"Commenteds",
"Commented";
64 prods[PROD_COMMENT_CHAR](
"Commented") >>
"CommentChar";
65 prods[PROD_COMMENT_DASH](
"Commented") >>
"-",
"CommentChar";
66 prods[PROD_ENT_REF](
"Reference") >>
"&",
"Name",
";";
67 prods[PROD_CHAR_REF](
"Reference") >>
"&",
"#",
"Digits",
";";
68 prods[PROD_ONE_DIGIT](
"Digits") >>
"Digit";
69 prods[PROD_DIGITS](
"Digits") >>
"Digits",
"Digit";
70 prods[PROD_NO_SPACES](
"S?");
71 prods[PROD_YES_SPACES](
"S?") >>
"S";
72 prods[PROD_ONE_SPACE](
"S") >>
"Space";
73 prods[PROD_SPACES](
"S") >>
"S",
"Space";
74 prods[PROD_DQUOTED_COMMON](
"DQuotedChar") >>
"CommonChar";
75 prods[PROD_DQUOTED_SQUOT](
"DQuotedChar") >>
"'";
76 prods[PROD_DQUOTED_RSQUARE](
"DQuotedChar") >>
"]";
77 prods[PROD_DQUOTED_DASH](
"DQuotedChar") >>
"-";
78 prods[PROD_SQUOTED_CHAR](
"SQuotedChar") >>
"CommonChar";
79 prods[PROD_SQUOTED_DQUOT](
"SQuotedChar") >>
"\"";
80 prods[PROD_SQUOTED_RSQUARE](
"SQuotedChar") >>
"]";
81 prods[PROD_SQUOTED_DASH](
"SQuotedChar") >>
"-";
82 prods[PROD_DATA_COMMON](
"DataChar") >>
"CommonChar";
83 prods[PROD_DATA_SQUOT](
"DataChar") >>
"'";
84 prods[PROD_DATA_DQUOT](
"DataChar") >>
"\"";
85 prods[PROD_DATA_DASH](
"DataChar") >>
"-";
86 prods[PROD_COMMENT_COMMON](
"CommentChar") >>
"CommonChar";
87 prods[PROD_COMMENT_LANGLE](
"CommentChar") >>
"<";
88 prods[PROD_COMMENT_AMP](
"CommentChar") >>
"&";
89 prods[PROD_COMMENT_SQUOT](
"CommentChar") >>
"'";
90 prods[PROD_COMMENT_DQUOT](
"CommentChar") >>
"\"";
91 prods[PROD_COMMENT_RSQUARE](
"CommentChar") >>
"]";
92 prods[PROD_COMMON_SPACE](
"CommonChar") >>
"Space";
93 prods[PROD_COMMON_LETTER](
"CommonChar") >>
"Letter";
94 prods[PROD_COMMON_DIGIT](
"CommonChar") >>
"Digit";
95 prods[PROD_COMMON_EXCL](
"CommonChar") >>
"!";
96 prods[PROD_COMMON_POUND](
"CommonChar") >>
"#";
97 prods[PROD_COMMON_DOT](
"CommonChar") >>
".";
98 prods[PROD_COMMON_SLASH](
"CommonChar") >>
"/";
99 prods[PROD_COMMON_COLON](
"CommonChar") >>
":";
100 prods[PROD_COMMON_SEMICOLON](
"CommonChar") >>
";";
101 prods[PROD_COMMON_RANGLE](
"CommonChar") >>
">";
102 prods[PROD_COMMON_QUESTION](
"CommonChar") >>
"?";
103 prods[PROD_COMMON_EQUAL](
"CommonChar") >>
"=";
104 prods[PROD_COMMON_LSQUARE](
"CommonChar") >>
"[";
105 prods[PROD_COMMON_UNDER](
"CommonChar") >>
"_";
106 prods[PROD_COMMON_OTHER](
"CommonChar") >>
"OtherChar";
107 Language::Tokens& toks = out.tokens;
109 toks[TOK_SPACE](
"Space",
"[ \t\r\n]");
110 toks[TOK_LETTER](
"Letter",
"[a-zA-Z]");
111 toks[TOK_DIGIT](
"Digit",
"[0-9]");
112 toks[TOK_EXCL](
"!",
"!");
113 toks[TOK_DQUOTE](
"\"",
"\"");
114 toks[TOK_SQUOTE](
"'",
"'");
115 toks[TOK_POUND](
"#",
"#");
116 toks[TOK_AMP](
"&",
"&");
117 toks[TOK_DASH](
"-",
"\\-");
118 toks[TOK_DOT](
".",
"\\.");
119 toks[TOK_SLASH](
"/",
"/");
120 toks[TOK_COLON](
":",
":");
121 toks[TOK_SEMICOLON](
";",
";");
122 toks[TOK_LANGLE](
"<",
"<");
123 toks[TOK_RANGLE](
">",
">");
124 toks[TOK_QUESTION](
"?",
"\\?");
125 toks[TOK_EQUAL](
"=",
"=");
126 toks[TOK_LSQUARE](
"[",
"\\[");
127 toks[TOK_RSQUARE](
"]",
"\\]");
128 toks[TOK_UNDER](
"_",
"_");
129 toks[TOK_OTHER](
"OtherChar",
"[$%\\(\\)\\*\\+,@\\\\\\^`{}\\|~]");
135 if (ptr.strong_count() == 0) {
136 ptr.reset(
new Language(make_language()));
143 if (ptr.strong_count() == 0) {
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