2013-12-18 20:58:05 -08:00
|
|
|
#ifndef __tree_sitter__rule_visitor__
|
|
|
|
|
#define __tree_sitter__rule_visitor__
|
|
|
|
|
|
2014-02-23 18:04:51 -08:00
|
|
|
#include "./rule.h"
|
|
|
|
|
|
2013-12-18 20:58:05 -08:00
|
|
|
namespace tree_sitter {
|
|
|
|
|
namespace rules {
|
2014-02-16 22:13:08 -08:00
|
|
|
class Blank;
|
|
|
|
|
class Symbol;
|
|
|
|
|
class CharacterSet;
|
|
|
|
|
class Choice;
|
|
|
|
|
class Repeat;
|
|
|
|
|
class Seq;
|
|
|
|
|
class String;
|
|
|
|
|
class Pattern;
|
2014-03-09 19:49:35 -07:00
|
|
|
|
2013-12-19 23:16:13 -08:00
|
|
|
class Visitor {
|
2013-12-18 20:58:05 -08:00
|
|
|
public:
|
2014-01-03 01:02:24 -08:00
|
|
|
virtual void default_visit(const Rule *rule);
|
2013-12-19 20:05:57 -08:00
|
|
|
virtual void visit(const Blank *rule);
|
|
|
|
|
virtual void visit(const Symbol *rule);
|
2014-02-03 13:05:51 -08:00
|
|
|
virtual void visit(const CharacterSet *rule);
|
2013-12-19 20:05:57 -08:00
|
|
|
virtual void visit(const Choice *rule);
|
|
|
|
|
virtual void visit(const Repeat *rule);
|
|
|
|
|
virtual void visit(const Seq *rule);
|
|
|
|
|
virtual void visit(const String *rule);
|
|
|
|
|
virtual void visit(const Pattern *rule);
|
2013-12-18 20:58:05 -08:00
|
|
|
};
|
2014-03-09 19:49:35 -07:00
|
|
|
|
2014-02-23 18:04:51 -08:00
|
|
|
template<typename T>
|
|
|
|
|
class RuleFn : public Visitor {
|
|
|
|
|
protected:
|
|
|
|
|
T value;
|
|
|
|
|
public:
|
|
|
|
|
T apply(const rule_ptr &rule) {
|
|
|
|
|
value = T();
|
|
|
|
|
rule->accept(*this);
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
};
|
2013-12-18 20:58:05 -08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|