// Auto generated on 11th April 2003 // Generator parameters: bootstrap meta_grammar // Generator author: Jon Jagger, {JSL} // URL http://www.jaggersoft.com // email jon@jaggersoft.com #include "bootstrap/meta_grammar.hpp" #include "bootstrap/meta_grammar_visitor.hpp" #include "array/end_of.hpp" #include "grammar/infinity.hpp" #include "grammar/qualified_symbol_definition.hpp" namespace { template const ::grammar::non_terminal_symbol_definition * extract(iterator_type position, iterator_type end) { return (position != end) ? position->second : 0; } } namespace bootstrap // meta_grammar - associative look up { const ::grammar::non_terminal_symbol_definition * meta_grammar::operator[](const char * name) const { return extract(::grammar::base::symbols.find(name), ::grammar::base::symbols.end()); } } namespace bootstrap // meta_grammar - configuration { void meta_grammar::Configure_grammar() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(grammar_section, 1, ::grammar::infinity()), }; grammar.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[grammar.name] = &grammar; } void meta_grammar::Configure_grammar_section() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(non_terminal, 1, 1), ::grammar::base::create(new_line, 0, 1), }; grammar_section.push_back(key(), rhs, array::end_of(rhs)); } { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(predicate, 1, 1), ::grammar::base::create(new_line, 0, 1), }; grammar_section.push_back(key(), rhs, array::end_of(rhs)); } { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(whitespace, 0, 1), ::grammar::base::create(comment, 1, 1), ::grammar::base::create(new_line, 0, 1), }; grammar_section.push_back(key(), rhs, array::end_of(rhs)); } { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(whitespace, 0, 1), ::grammar::base::create(new_line, 1, 1), }; grammar_section.push_back(key(), rhs, array::end_of(rhs)); } { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(whitespace, 1, 1), }; grammar_section.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[grammar_section.name] = &grammar_section; } void meta_grammar::Configure_comment() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::terminal("//"), 1, 1), ::grammar::base::create(::grammar::base::none_of("\r\n"), 0, ::grammar::infinity()), }; comment.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[comment.name] = &comment; } void meta_grammar::Configure_whitespace() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::one_of(" \t\v\f"), 1, ::grammar::infinity()), }; whitespace.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[whitespace.name] = &whitespace; } void meta_grammar::Configure_new_line() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::terminal("\r"), 1, 1), ::grammar::base::create(::grammar::base::terminal("\n"), 0, 1), }; new_line.push_back(key(), rhs, array::end_of(rhs)); } { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::terminal("\n"), 1, 1), }; new_line.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[new_line.name] = &new_line; } void meta_grammar::Configure_non_terminal() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(name_characters, 1, 1), ::grammar::base::create(::grammar::base::terminal(":"), 1, 1), ::grammar::base::create(whitespace, 0, 1), ::grammar::base::create(new_line, 1, 1), ::grammar::base::create(productions, 1, 1), }; non_terminal.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[non_terminal.name] = &non_terminal; } void meta_grammar::Configure_productions() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(production, 1, ::grammar::infinity()), }; productions.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[productions.name] = &productions; } void meta_grammar::Configure_production() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(qualified_symbols, 1, 1), ::grammar::base::create(whitespace, 0, 1), ::grammar::base::create(new_line, 1, 1), }; production.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[production.name] = &production; } void meta_grammar::Configure_qualified_symbols() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(qualified_symbol, 1, ::grammar::infinity()), }; qualified_symbols.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[qualified_symbols.name] = &qualified_symbols; } void meta_grammar::Configure_qualified_symbol() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(whitespace, 1, 1), ::grammar::base::create(symbol_name, 1, 1), ::grammar::base::create(multiplicity, 0, 1), }; qualified_symbol.push_back(key(), rhs, array::end_of(rhs)); } { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(whitespace, 1, 1), ::grammar::base::create(terminal, 1, 1), ::grammar::base::create(multiplicity, 0, 1), }; qualified_symbol.push_back(key(), rhs, array::end_of(rhs)); } { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(whitespace, 1, 1), ::grammar::base::create(none_of, 1, 1), ::grammar::base::create(multiplicity, 0, 1), }; qualified_symbol.push_back(key(), rhs, array::end_of(rhs)); } { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(whitespace, 1, 1), ::grammar::base::create(one_of, 1, 1), ::grammar::base::create(multiplicity, 0, 1), }; qualified_symbol.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[qualified_symbol.name] = &qualified_symbol; } void meta_grammar::Configure_multiplicity() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::one_of("?+*"), 1, 1), }; multiplicity.push_back(key(), rhs, array::end_of(rhs)); } { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::terminal("{"), 1, 1), ::grammar::base::create(decimal_digits, 1, 1), ::grammar::base::create(::grammar::base::terminal("}"), 1, 1), }; multiplicity.push_back(key(), rhs, array::end_of(rhs)); } { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::terminal("{"), 1, 1), ::grammar::base::create(decimal_digits, 1, 1), ::grammar::base::create(::grammar::base::terminal(","), 1, 1), ::grammar::base::create(decimal_digits, 1, 1), ::grammar::base::create(::grammar::base::terminal("}"), 1, 1), }; multiplicity.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[multiplicity.name] = &multiplicity; } void meta_grammar::Configure_decimal_digits() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::one_of("0123456789"), 1, ::grammar::infinity()), }; decimal_digits.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[decimal_digits.name] = &decimal_digits; } void meta_grammar::Configure_symbol_name() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(name_characters, 1, 1), }; symbol_name.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[symbol_name.name] = &symbol_name; } void meta_grammar::Configure_terminal() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::terminal("TERMINAL("), 1, 1), ::grammar::base::create(terminal_characters, 1, 1), ::grammar::base::create(::grammar::base::terminal(")"), 1, 1), }; terminal.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[terminal.name] = &terminal; } void meta_grammar::Configure_none_of() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::terminal("NONE_OF("), 1, 1), ::grammar::base::create(terminal_characters, 1, 1), ::grammar::base::create(::grammar::base::terminal(")"), 1, 1), }; none_of.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[none_of.name] = &none_of; } void meta_grammar::Configure_one_of() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::terminal("ONE_OF("), 1, 1), ::grammar::base::create(terminal_characters, 1, 1), ::grammar::base::create(::grammar::base::terminal(")"), 1, 1), }; one_of.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[one_of.name] = &one_of; } void meta_grammar::Configure_predicate() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::terminal("PREDICATE("), 1, 1), ::grammar::base::create(name_characters, 1, 1), ::grammar::base::create(::grammar::base::terminal(")"), 1, 1), }; predicate.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[predicate.name] = &predicate; } void meta_grammar::Configure_terminal_characters() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::terminal(")"), 1, 1), }; terminal_characters.push_back(key(), rhs, array::end_of(rhs)); } { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::none_of(")"), 1, ::grammar::infinity()), }; terminal_characters.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[terminal_characters.name] = &terminal_characters; } void meta_grammar::Configure_name_characters() { { const ::grammar::qualified_symbol_definition rhs[] = { ::grammar::base::create(::grammar::base::one_of("abcdefghijklmnopqrstuvwxyz-"), 1, ::grammar::infinity()), }; name_characters.push_back(key(), rhs, array::end_of(rhs)); } ::grammar::base::symbols[name_characters.name] = &name_characters; } } namespace bootstrap // meta_grammar - 'tor { meta_grammar::meta_grammar() : ::grammar::base() , grammar(key(), "grammar", 1) , grammar_section(key(), "grammar-section", 5) , comment(key(), "comment", 1) , whitespace(key(), "whitespace", 1) , new_line(key(), "new-line", 2) , non_terminal(key(), "non-terminal", 1) , productions(key(), "productions", 1) , production(key(), "production", 1) , qualified_symbols(key(), "qualified-symbols", 1) , qualified_symbol(key(), "qualified-symbol", 4) , multiplicity(key(), "multiplicity", 3) , decimal_digits(key(), "decimal-digits", 1) , symbol_name(key(), "symbol-name", 1) , terminal(key(), "terminal", 1) , none_of(key(), "none-of", 1) , one_of(key(), "one-of", 1) , predicate(key(), "predicate", 1) , terminal_characters(key(), "terminal-characters", 2) , name_characters(key(), "name-characters", 1) { Configure_grammar(); Configure_grammar_section(); Configure_comment(); Configure_whitespace(); Configure_new_line(); Configure_non_terminal(); Configure_productions(); Configure_production(); Configure_qualified_symbols(); Configure_qualified_symbol(); Configure_multiplicity(); Configure_decimal_digits(); Configure_symbol_name(); Configure_terminal(); Configure_none_of(); Configure_one_of(); Configure_predicate(); Configure_terminal_characters(); Configure_name_characters(); } } namespace bootstrap // meta_grammar - instance { const meta_grammar & meta_grammar::instance() { static const meta_grammar the_instance; return the_instance; } }