summaryrefslogtreecommitdiff
path: root/Userland/Utilities/cpp-parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Userland/Utilities/cpp-parser.cpp')
-rw-r--r--Userland/Utilities/cpp-parser.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/Userland/Utilities/cpp-parser.cpp b/Userland/Utilities/cpp-parser.cpp
new file mode 100644
index 0000000000..025537ef21
--- /dev/null
+++ b/Userland/Utilities/cpp-parser.cpp
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2021, the SerenityOS developers.
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include "AK/Forward.h"
+#include "LibCpp/AST.h"
+#include <LibCore/ArgsParser.h>
+#include <LibCore/File.h>
+#include <LibCpp/Parser.h>
+
+int main(int argc, char** argv)
+{
+ Core::ArgsParser args_parser;
+ const char* path = nullptr;
+ bool tokens_mode = false;
+ args_parser.add_option(tokens_mode, "Print Tokens", "tokens", 'T');
+ args_parser.add_positional_argument(path, "Cpp File", "cpp-file", Core::ArgsParser::Required::No);
+ args_parser.parse(argc, argv);
+
+ if (!path)
+ path = "Source/little/main.cpp";
+ 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::Parser parser(content_view, path);
+ if (tokens_mode) {
+ parser.print_tokens();
+ return 0;
+ }
+ auto root = parser.parse();
+
+ dbgln("Parser errors:");
+ for (auto& error : parser.errors()) {
+ dbgln("{}", error);
+ }
+
+ root->dump(0);
+}