From feab5e8a3ebbe3353432927ea6bf151aa6b7d882 Mon Sep 17 00:00:00 2001 From: Itamar Date: Fri, 20 Aug 2021 15:05:11 +0300 Subject: [PATCH] Utilities: Add cpp-lexer --- Userland/Utilities/CMakeLists.txt | 1 + Userland/Utilities/cpp-lexer.cpp | 32 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 Userland/Utilities/cpp-lexer.cpp diff --git a/Userland/Utilities/CMakeLists.txt b/Userland/Utilities/CMakeLists.txt index 35bc9423f1..97a98ab2ea 100644 --- a/Userland/Utilities/CMakeLists.txt +++ b/Userland/Utilities/CMakeLists.txt @@ -96,6 +96,7 @@ target_link_libraries(test-pthread LibThreading) target_link_libraries(tt LibPthread) target_link_libraries(unzip LibArchive LibCompress) target_link_libraries(zip LibArchive LibCompress LibCrypto) +target_link_libraries(cpp-lexer LibCpp) target_link_libraries(cpp-parser LibCpp LibGUI) target_link_libraries(cpp-preprocessor LibCpp LibGUI) target_link_libraries(wasm LibWasm LibLine) diff --git a/Userland/Utilities/cpp-lexer.cpp b/Userland/Utilities/cpp-lexer.cpp new file mode 100644 index 0000000000..5264997331 --- /dev/null +++ b/Userland/Utilities/cpp-lexer.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021, the SerenityOS developers. + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include + +int main(int argc, char** argv) +{ + Core::ArgsParser args_parser; + const char* path = nullptr; + args_parser.add_positional_argument(path, "Cpp File", "cpp-file", Core::ArgsParser::Required::Yes); + args_parser.parse(argc, argv); + + auto file = Core::File::construct(path); + if (!file->open(Core::OpenMode::ReadOnly)) { + perror("open"); + exit(1); + } + auto content = file->read_all(); + StringView content_view(content); + + Cpp::Lexer lexer(content); + auto tokens = lexer.lex(); + + for (auto& token : tokens) { + outln("{}", token.to_string()); + } +}