diff --git a/CMakeLists.txt b/CMakeLists.txt index 716cd83..dddfb22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.30) +cmake_minimum_required(VERSION 3.23) project(pslang CXX) set(CMAKE_CXX_STANDARD 23) diff --git a/libs/parser/CMakeLists.txt b/libs/parser/CMakeLists.txt index 4050593..4649615 100644 --- a/libs/parser/CMakeLists.txt +++ b/libs/parser/CMakeLists.txt @@ -10,6 +10,8 @@ set(PSLANG_LEXER_SOURCE_FILE "${CMAKE_CURRENT_BINARY_DIR}/generated/gen_lexer.cp set(PSLANG_PARSER_HEADER_FILE "${CMAKE_CURRENT_BINARY_DIR}/generated/gen_parser.hpp") set(PSLANG_PARSER_SOURCE_FILE "${CMAKE_CURRENT_BINARY_DIR}/generated/gen_parser.cpp") +file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/generated") + flex_target( generate-pslang-lexer ${PSLANG_LEXER_RULES_FILE} diff --git a/libs/parser/rules/pslang.y b/libs/parser/rules/pslang.y index 856c725..fd4641b 100644 --- a/libs/parser/rules/pslang.y +++ b/libs/parser/rules/pslang.y @@ -47,9 +47,13 @@ template ::pslang::ast::literal parse_primitive_literal(std::string const & str, ::pslang::ast::location const & location) { T value; +#ifdef __clang__ + value = std::strtoll(str.data(), nullptr, 10); +#else auto result = std::from_chars(str.data(), str.data() + str.size(), value); if (result.ec != std::errc()) throw std::system_error(std::make_error_code(result.ec)); +#endif return ::pslang::ast::primitive_literal_base{value, location}; } @@ -101,7 +105,7 @@ template %token lit_f32 %token lit_f64 -%token lit_char8 +%token lit_char8 %token name