5#ifndef BOTANIST_ANALYSER_H
6#define BOTANIST_ANALYSER_H
8#include <collection2/list.hpp>
9#include <collection2/tree.hpp>
20 const collection2::List<Token>& tokenList;
23 collection2::Node<Token>* currentTokenNode =
nullptr;
26 collection2::Tree<SyntaxNode>& syntaxNodeTree;
29 size_t tokenIndex = 0;
32 collection2::TreeNode<SyntaxNode>* root =
nullptr;
44 collection2::TreeNode<SyntaxNode>* createNewNode(
46 collection2::TreeNode<SyntaxNode>* lhs =
nullptr,
47 collection2::TreeNode<SyntaxNode>* rhs =
nullptr);
67 bool expect(
const char* content,
const size_t length = 1)
const;
87 bool forward(
const char* content,
const size_t length = 1);
92 void advanceTokenList() {
93 if (currentTokenNode ==
nullptr) {
96 currentTokenNode = currentTokenNode->next;
103 void initializeNodePool() {
104 syntaxNodeTree.initializeTreeNodePool();
113 collection2::TreeNode<SyntaxNode>* expression();
120 collection2::TreeNode<SyntaxNode>* unary();
127 collection2::TreeNode<SyntaxNode>* factor();
131 const collection2::List<Token>& tokenList,
132 collection2::Tree<SyntaxNode>& syntaxNodeTree)
133 : tokenList(tokenList), syntaxNodeTree(syntaxNodeTree){};
170 void dumpSyntaxNode(collection2::TreeNode<botanist::SyntaxNode>* nodePtr)
const =
delete;
トークナイズされた数式を解析し、構文木を形成する
Definition: analyser.hpp:17
size_t analyse()
トークナイズされた数式から構文木を生成
void dumpSyntaxNode(collection2::TreeNode< botanist::SyntaxNode > *nodePtr) const
構文ノードをダンプ
collection2::TreeNode< SyntaxNode > * rootNode()
構文木のルートノードを取得
Definition: analyser.hpp:149
void dumpSyntaxTree() const
構文木をダンプ
Kind
ノードの種類
Definition: syntaxnode.hpp:17
Kind
トークンの種類
Definition: token.hpp:16