mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-11 01:06:01 +03:00
402483ec1f
Previously, ASTNode::dump() used outln() for output, which meant it always wrote its output to stdout. After this commit, ASTNode::dump() receives an 'output' argument (which is stdout by default). This enables writing the output to somewhere else. This will be useful for testing the LibCpp Parser with the output of ASTNode::dump.
45 lines
1.1 KiB
C++
45 lines
1.1 KiB
C++
/*
|
|
* 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();
|
|
}
|