// This file is distributed under the BSD License. // See LICENSE.TXT for details. #ifndef LANGKIT_PARSER_HPP_ #define LANGKIT_PARSER_HPP_ #include #include "langkit_lexer.hpp" typedef std::vector::iterator Token_Iterator; typedef std::tr1::shared_ptr RulePtr; typedef boost::function(Token_Iterator iter, Token_Iterator end, TokenPtr parent)> RuleFun; struct Rule { int identifier; RuleFun rule; std::pair operator()(Token_Iterator iter, Token_Iterator end, TokenPtr parent); Rule() : identifier(-1) {} Rule(int id) : identifier(id) {} Rule(RuleFun fun) : rule(fun) {} }; std::pair String_Rule (Token_Iterator iter, Token_Iterator end, TokenPtr parent, const std::string &val, bool keep); std::pair Type_Rule (Token_Iterator iter, Token_Iterator end, TokenPtr parent, const int val, bool keep); std::pair Or_Rule (Token_Iterator iter, Token_Iterator end, TokenPtr parent, const RulePtr lhs, const RulePtr rhs, bool keep); std::pair And_Rule (Token_Iterator iter, Token_Iterator end, TokenPtr parent, const RulePtr lhs, const RulePtr rhs, bool keep); #endif /* LANGKIT_PARSER_HPP_ */