tree-sitter/src/compiler/rules/visitor.h

45 lines
1.1 KiB
C
Raw Normal View History

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 {
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);
virtual void visit(const Blank *rule);
virtual void visit(const Symbol *rule);
virtual void visit(const CharacterSet *rule);
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