#include <iostream> #include <iomanip> #include <tokenizer.hpp> #include <parser.hpp> using namespace xtokenizer; using namespace parser; /** * Token を出力します。 * * @param tokens 出力するトークンリスト */ void dumpTokens(const std::vector<Token> &tokens) { for (Token token : tokens) { std::cout << std::setw(4) << std::right << token.line << ":" << std::setw(10) << std::left << toTokenTypeSymbol(token.type) << " " << token.str; if (token.type == TokenType::T_INTEGER) { std::cout << "\t value = " << token.value.i; } else if (token.type == TokenType::T_FLOAT) { std::cout << "\t value = " << token.value.f; } if (token.type == TokenType::T_KEYWORD) { std::cout << "\t [keyword] " << static_cast<int>(token.keyword) << std::endl; } std::cout << std::endl; } } #if defined(UNITTEST) int dummy(int argc, char *argv[]) #else int main(int argc, char *argv[]) #endif { if (argc < 2) { std::cout << "./xtokenizer <file>" << std::endl; return 1; } const char *fileName = argv[1]; Tokenizer tokenizer(fileName); std::vector<Token> &tokens = tokenizer.parse(); dumpTokens(tokens); Parser parser(tokens); std::unique_ptr<Node> node = parser.parse(); node->dump(); return 0; }