From 70b7b6a2f44469e9f9aa1a41ad9e3fb6002e0103 Mon Sep 17 00:00:00 2001 From: CHatingPython Date: Wed, 24 Jun 2026 15:30:45 +0200 Subject: [PATCH] feat: introduce parse type function Refs: #15 --- furc/include/furc/front/parser.hpp | 3 +++ furc/src/front/parser.cpp | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/furc/include/furc/front/parser.hpp b/furc/include/furc/front/parser.hpp index d9218df..3e760fe 100644 --- a/furc/include/furc/front/parser.hpp +++ b/furc/include/furc/front/parser.hpp @@ -1,6 +1,7 @@ #ifndef FURC_FRONT_PARSER_HPP #define FURC_FRONT_PARSER_HPP +#include "furc/ast/declaration.hpp" #include "furc/ast/fwd.hpp" #include "furc/front/lexer.hpp" #include "furlang/arena.hpp" @@ -56,6 +57,8 @@ public: */ ast::program_node_r parse() &; private: + ast::type_r parse_type(); + ast::declaration_node_r parse_declaration(); ast::statement_node_r parse_statement(); ast::expression_node_r parse_expression(std::uint32_t precedence = 16); diff --git a/furc/src/front/parser.cpp b/furc/src/front/parser.cpp index b2828b8..a2c18b2 100644 --- a/furc/src/front/parser.cpp +++ b/furc/src/front/parser.cpp @@ -6,6 +6,7 @@ #include "furc/ast/literal.hpp" // IWYU pragma: keep #include "furc/ast/program.hpp" // IWYU pragma: keep #include "furc/ast/statement.hpp" // IWYU pragma: keep +#include "furc/front/token.hpp" #include #include @@ -46,6 +47,13 @@ ast::program_node_r parser::parse() & { return program != nullptr ? std::move(program) : ast::program_node_r(ast::error{ location{ m_filename } }); } +ast::type_r parser::parse_type() { + auto token = eat_token(token_t::Keyword); + if (token.has_error() || token.value()->keyword != keyword_token::Int32) + return ast::type_r(ast::error{ token.error().location }); + return ast::type("" + token.value()->keyword); +} + ast::declaration_node_r parser::parse_declaration() { const auto& first = peek_token(); switch (first->type) {