#ifndef PARSER_PARSER_HPP #define PARSER_PARSER_HPP #include <memory> #include <vector> #include <token.hpp> #include <node.hpp> namespace parser { /** * 再帰下降構文解析。 * * * * expr = mul ("+" mul | "-" mul)* * mul = primary ("*" primary | "/" primary)* * primary = num | "(" expr ")" */ class Parser { public: Parser(const std::vector<xtokenizer::Token> &tokens); virtual ~Parser(); std::unique_ptr<Node> parse(); std::unique_ptr<Node> expr(); std::unique_ptr<Node> mul(); std::unique_ptr<Node> primary(); private: const std::vector<xtokenizer::Token> &tokens; size_t tokenIndex; }; } // namespace parser #endif // PARSER_PAERSER_HPP