#ifndef __TreeSitter__grammar__ #define __TreeSitter__grammar__ #include #include #include "rules.h" namespace tree_sitter { class Grammar { typedef std::initializer_list> rule_map_init_list; typedef std::map rule_map; public: Grammar(const rule_map_init_list &rules); Grammar(std::string start_rule_name, const rule_map &rules); Grammar(std::string start_rule_name, const rule_map &rules, const rule_map &aux_rules); const std::string start_rule_name; std::vector rule_names() const; bool operator==(const Grammar &other) const; bool has_definition(const rules::Symbol &symbol) const; const rules::rule_ptr rule(const rules::Symbol &symbol) const; rule_map rules; rule_map aux_rules; }; std::ostream& operator<<(std::ostream &stream, const Grammar &grammar); } #endif