lang_2023/include/parse_tree.hpp

65 lines
1.1 KiB
C++
Raw Normal View History

2023-03-26 15:20:53 +03:00
#pragma once
#include <string>
// for clangd
#include "tree_sitter/api.h"
namespace parser {
class ParseTree {
public:
class Node {
public:
Node() = delete;
std::string GetType();
std::pair<size_t, size_t> GetStartPoint();
std::pair<size_t, size_t> GetEndPoint();
std::string GetAsSExpression();
bool IsNull();
bool IsNamed();
bool IsMissing();
bool IsExtra(); // comments, etc.
bool HasError();
Node NthChild(size_t n);
size_t ChildCount();
Node NthNamedChild(size_t n);
size_t NamedChildCount();
Node ChildByName(const std::string& name);
// ?? use field id instaed of name ??
// ?? node equality check needed ??
private:
TSNode node_;
};
class Cursor {
public:
Cursor(const Node& node);
void ResetTo(const Node& node);
Node GetCurrentNode();
std::string GetCurrentNodeName();
bool GoToParent();
bool GoToNextSibling();
bool GoToFirstChild();
private:
TSTreeCursor cursor_;
};
ParseTree(const std::string& input);
Node GetRoot();
private:
TSTree* tree_;
};
} // namespace parser