Newer
Older
libj / modules / parser / include / parser.hpp
Nomura Kei on 31 Dec 782 bytes 一時保存
#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