// Copyright {Jagger Software Limited} 2003 #ifndef AST_SYMBOL_INCLUDED #define AST_SYMBOL_INCLUDED #include #include namespace grammar { class symbol_definition; } namespace ast { template class symbol // <> { public: // 'tors symbol(const ::grammar::symbol_definition &, iterator); // production || optional symbol(const ::grammar::symbol_definition &, iterator, iterator); // terminal ~symbol(); public: // attributes const ::grammar::symbol_definition & definition; bool is_terminal() const; public: // end points iterator begin() const; iterator end() const; public: // capacity size_t size() const; bool empty() const; void clear(); public: // subscripting const symbol & operator[](size_t) const; public: // tree manipulation symbol * back() const; void push_back(symbol *); void pop_back(); private: // validation void range_check(size_t at) const; private: // inappropriate symbol(const symbol &); void operator=(const symbol &); private: // state const iterator from, until; ::std::vector symbols; }; } #include "ast/symbol-template.hpp" #endif