From c0711914659c12d926d710580c02e9c112f3287d Mon Sep 17 00:00:00 2001 From: Tyler McGurrin Date: Sun, 8 Jun 2025 12:19:57 -0400 Subject: [PATCH] yeah im going back to sleep now... i hate this --- CMakeLists.txt | 13 ++++++++----- README.md | 3 ++- libs/f90getopt | 2 +- libs/vector | 2 +- src/tokenizer.f90 | 23 ++++++++++++++++++----- 5 files changed, 30 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 93e6812..48f68c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ set(FVERSION "-std=f2023") set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${FVERSION}") -include_directories(BEFORE SYSTEM /usr/include /usr/include/fortran_stdlib/GNU-15.1.1/) +include_directories(BEFORE SYSTEM /usr/include /usr/include/fortran_stdlib/GNU-15.1.1/ ${CMAKE_CURRENT_BINARY_DIR}/vector ${CMAKE_CURRENT_BINARY_DIR}/f90getopt) link_directories(BEFORE $ENV{LD_LIBRARY_PATH} ${CMAKE_BINARY_DIR}/ ) include(GNUInstallDirs) @@ -19,14 +19,16 @@ set(MODULES src/tokenizer.f90 src/fileread.f90 CACHE INTERNAL "") -add_library(f90getopt SHARED libs/f90getopt/f90getopt.F90) - add_subdirectory(libs/vector ${CMAKE_CURRENT_BINARY_DIR}/vector) +add_subdirectory(libs/f90getopt ${CMAKE_CURRENT_BINARY_DIR}/f90getopt) add_library(${PROJECT_NAME}-lib SHARED ${MODULES}) add_executable(${PROJECT_NAME} src/main.f90) +add_dependencies(${PROJECT_NAME}-lib fortran-vector f90getopt) +add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}-lib) + find_package("fortran_stdlib" REQUIRED) find_package(BLAS) find_package(LAPACK) @@ -34,9 +36,10 @@ find_package(LAPACK) target_link_libraries( ${PROJECT_NAME} PUBLIC - f90getopt ${PROJECT_NAME}-lib PRIVATE - fortran-vector + f90getopt fortran_stdlib::fortran_stdlib + fortran-vector + PUBLIC ) \ No newline at end of file diff --git a/README.md b/README.md index 9c0d3b9..61e4d09 100644 --- a/README.md +++ b/README.md @@ -10,4 +10,5 @@ im not explaining that sentence... - fortran stdlibs - gfortran - CMake -- BLAS (Needed for STDLIBS) \ No newline at end of file +- BLAS (Needed for STDLIBS) +- LAPACK (Needed for STDLIBS) \ No newline at end of file diff --git a/libs/f90getopt b/libs/f90getopt index 872848f..0af628d 160000 --- a/libs/f90getopt +++ b/libs/f90getopt @@ -1 +1 @@ -Subproject commit 872848f265bef0c20d3618be966d7a4302d20973 +Subproject commit 0af628d03018f04465c367c1d33f39b42a2af7a8 diff --git a/libs/vector b/libs/vector index 32c8b2e..0f1670c 160000 --- a/libs/vector +++ b/libs/vector @@ -1 +1 @@ -Subproject commit 32c8b2e3c0c02b14d9f75816d53a40b00316d6be +Subproject commit 0f1670c70afc91c32170ba26b1aa84957c2ca53a diff --git a/src/tokenizer.f90 b/src/tokenizer.f90 index 1edf391..ffa63eb 100644 --- a/src/tokenizer.f90 +++ b/src/tokenizer.f90 @@ -3,6 +3,8 @@ module tokenizer use stdlib_strings + use vector + use, intrinsic :: iso_c_binding implicit none contains @@ -12,7 +14,8 @@ module tokenizer character(:), allocatable, intent(out) :: tokens character(string_length), intent(in) :: input_string - character(:), dimension(:), allocatable :: buffer + type(vec) :: buf + character :: buffer character(1) :: c integer :: i @@ -24,19 +27,29 @@ module tokenizer do while (i < string_length) c = slice(input_string, i, i+1) if (token_isalpha(c) == 1) then + call buf%push_back(c) ! i think this is correct? i = i + 1 - endif + do while (token_isalnum(slice(input_string, 1, i+1)) == 1) + call buf%push_back(slice(input_string, 1, i+1)) + i = i + 1 + end do + i = i - 1 + ! call vector_get(buf, 1) ! FUCK FORTRAN VECTOR... + if (buffer == 'return') then + + end if + end if end do end subroutine tokenize integer function token_isalpha(input_character) result(res) - character(1) :: input_character + character(1), intent(in) :: input_character if ( input_character == 'a') then elseif (input_character == 'b') then elseif (input_character == 'c') then - elseif (input_character =='d') then + elseif (input_character == 'd') then elseif (input_character == 'e') then elseif (input_character == 'f') then elseif (input_character == 'g') then @@ -96,7 +109,7 @@ module tokenizer end function token_isalpha integer function token_isalnum(input_character) result(res) - character(1) :: input_character + character(1), intent(in) :: input_character if ( input_character == 'a') then elseif (input_character == 'b') then