// Copyright {Jagger Software Limited} 2003 #ifndef GRAMMAR_NON_TERMINAL_SYMBOL_DEFINITION_INCLUDED #define GRAMMAR_NON_TERMINAL_SYMBOL_DEFINITION_INCLUDED #include "container/bounded_vector.hpp" #include "grammar/symbol_definition.hpp" #include namespace grammar { class production_symbol_definition; class qualified_symbol_definition; class visitor; class non_terminal_symbol_definition // <> : public symbol_definition // {abstract} { public: // 'tors non_terminal_symbol_definition(const key_type &, const char *, size_t); ~non_terminal_symbol_definition(); public: // building void push_back(key_type key, const qualified_symbol_definition *, const qualified_symbol_definition *); public: // subscripting size_t size() const; const production_symbol_definition & operator[](size_t) const; public: // visiting virtual bool accept(visitor &) const; private: // streaming virtual void write(::std::ostream &) const; private: // validating void range_check(size_t) const; private: // inappropriate non_terminal_symbol_definition(const non_terminal_symbol_definition &); void operator=(const non_terminal_symbol_definition &); private: // representation ::container::bounded_vector productions; }; } #endif