#pragma once #include "bscript/compiler/file/PrettifyLineBuilder.h" #include "bscript/compiler/file/SourceLocation.h" #include #include #include #include namespace Pol::Bscript::Compiler { class Profile; class Report; class SourceFileIdentifier; class SourceFile; class PrettifyFileProcessor : public EscriptGrammar::EscriptParserBaseVisitor { public: PrettifyFileProcessor( const SourceFileIdentifier&, Profile&, Report& ); std::string prettify() const; public: // antlrcpp::Any visitChildren( antlr4::tree::ParseTree* node ) override; // antlrcpp::Any defaultResult() override; // antlrcpp::Any aggregateResult( antlrcpp::Any aggregate, antlrcpp::Any nextResult ) override; antlrcpp::Any visitArrayInitializer( EscriptGrammar::EscriptParser::ArrayInitializerContext* ctx ) override; antlrcpp::Any visitBareArrayInitializer( EscriptGrammar::EscriptParser::BareArrayInitializerContext* ctx ) override; antlrcpp::Any visitBasicForStatement( EscriptGrammar::EscriptParser::BasicForStatementContext* ctx ) override; antlrcpp::Any visitBlock( EscriptGrammar::EscriptParser::BlockContext* ctx ) override; antlrcpp::Any visitBoolLiteral( EscriptGrammar::EscriptParser::BoolLiteralContext* ctx ) override; antlrcpp::Any visitBreakStatement( EscriptGrammar::EscriptParser::BreakStatementContext* ctx ) override; antlrcpp::Any visitCaseStatement( EscriptGrammar::EscriptParser::CaseStatementContext* ctx ) override; antlrcpp::Any visitCompilationUnit( EscriptGrammar::EscriptParser::CompilationUnitContext* ctx ) override; antlrcpp::Any visitConstStatement( EscriptGrammar::EscriptParser::ConstStatementContext* ctx ) override; antlrcpp::Any visitContinueStatement( EscriptGrammar::EscriptParser::ContinueStatementContext* ctx ) override; antlrcpp::Any visitCstyleForStatement( EscriptGrammar::EscriptParser::CstyleForStatementContext* ctx ) override; antlrcpp::Any visitDictInitializer( EscriptGrammar::EscriptParser::DictInitializerContext* ctx ) override; antlrcpp::Any visitDictInitializerExpression( EscriptGrammar::EscriptParser::DictInitializerExpressionContext* ctx ) override; antlrcpp::Any visitDictInitializerExpressionList( EscriptGrammar::EscriptParser::DictInitializerExpressionListContext* ctx ) override; antlrcpp::Any visitDoStatement( EscriptGrammar::EscriptParser::DoStatementContext* ctx ) override; antlrcpp::Any visitEnumList( EscriptGrammar::EscriptParser::EnumListContext* ctx ) override; antlrcpp::Any visitEnumListEntry( EscriptGrammar::EscriptParser::EnumListEntryContext* ctx ) override; antlrcpp::Any visitEnumStatement( EscriptGrammar::EscriptParser::EnumStatementContext* ctx ) override; // antlrcpp::Any visitEvaluateUnit(EscriptGrammar::EscriptParser::EvaluateUnitContext *ctx) // override; antlrcpp::Any visitExitStatement( EscriptGrammar::EscriptParser::ExitStatementContext* ctx ) override; antlrcpp::Any visitExplicitArrayInitializer( EscriptGrammar::EscriptParser::ExplicitArrayInitializerContext* ctx ) override; antlrcpp::Any visitExplicitDictInitializer( EscriptGrammar::EscriptParser::ExplicitDictInitializerContext* ctx ) override; antlrcpp::Any visitExplicitErrorInitializer( EscriptGrammar::EscriptParser::ExplicitErrorInitializerContext* ctx ) override; antlrcpp::Any visitExplicitStructInitializer( EscriptGrammar::EscriptParser::ExplicitStructInitializerContext* ctx ) override; antlrcpp::Any visitExpression( EscriptGrammar::EscriptParser::ExpressionContext* ctx ) override; antlrcpp::Any visitExpressionList( EscriptGrammar::EscriptParser::ExpressionListContext* ctx ) override; // antlrcpp::Any visitExpressionSuffix( // EscriptGrammar::EscriptParser::ExpressionSuffixContext* ctx ) override; antlrcpp::Any visitFloatLiteral( EscriptGrammar::EscriptParser::FloatLiteralContext* ctx ) override; antlrcpp::Any visitForeachIterableExpression( EscriptGrammar::EscriptParser::ForeachIterableExpressionContext* ctx ) override; antlrcpp::Any visitForeachStatement( EscriptGrammar::EscriptParser::ForeachStatementContext* ctx ) override; // antlrcpp::Any visitForGroup(EscriptGrammar::EscriptParser::ForGroupContext *ctx) override; antlrcpp::Any visitForStatement( EscriptGrammar::EscriptParser::ForStatementContext* ctx ) override; antlrcpp::Any visitFunctionCall( EscriptGrammar::EscriptParser::FunctionCallContext* ctx ) override; antlrcpp::Any visitFunctionDeclaration( EscriptGrammar::EscriptParser::FunctionDeclarationContext* ctx ) override; antlrcpp::Any visitFunctionParameter( EscriptGrammar::EscriptParser::FunctionParameterContext* ctx ) override; antlrcpp::Any visitFunctionParameterList( EscriptGrammar::EscriptParser::FunctionParameterListContext* ctx ) override; antlrcpp::Any visitFunctionParameters( EscriptGrammar::EscriptParser::FunctionParametersContext* ctx ) override; antlrcpp::Any visitFunctionReference( EscriptGrammar::EscriptParser::FunctionReferenceContext* ctx ) override; antlrcpp::Any visitGotoStatement( EscriptGrammar::EscriptParser::GotoStatementContext* ctx ) override; // antlrcpp::Any visitIdentifierList(EscriptGrammar::EscriptParser::IdentifierListContext *ctx) // override; antlrcpp::Any visitIfStatement( EscriptGrammar::EscriptParser::IfStatementContext* ctx ) override; antlrcpp::Any visitIncludeDeclaration( EscriptGrammar::EscriptParser::IncludeDeclarationContext* ctx ) override; // antlrcpp::Any visitIndexingSuffix(EscriptGrammar::EscriptParser::IndexingSuffixContext *ctx) // override; antlrcpp::Any visitIntegerLiteral( EscriptGrammar::EscriptParser::IntegerLiteralContext* ctx ) override; antlrcpp::Any visitInterpolatedString( EscriptGrammar::EscriptParser::InterpolatedStringContext* ctx ) override; antlrcpp::Any visitInterpolatedStringPart( EscriptGrammar::EscriptParser::InterpolatedStringPartContext* ctx ) override; antlrcpp::Any visitLiteral( EscriptGrammar::EscriptParser::LiteralContext* ctx ) override; // antlrcpp::Any visitMethodCallSuffix(EscriptGrammar::EscriptParser::MethodCallSuffixContext // *ctx) override; antlrcpp::Any // visitModuleDeclarationStatement(EscriptGrammar::EscriptParser::ModuleDeclarationStatementContext // *ctx) override; antlrcpp::Any visitModuleFunctionDeclaration( EscriptGrammar::EscriptParser::ModuleFunctionDeclarationContext* ctx ) override; antlrcpp::Any visitModuleFunctionParameter( EscriptGrammar::EscriptParser::ModuleFunctionParameterContext* ctx ) override; antlrcpp::Any visitModuleFunctionParameterList( EscriptGrammar::EscriptParser::ModuleFunctionParameterListContext* ctx ) override; antlrcpp::Any visitModuleUnit( EscriptGrammar::EscriptParser::ModuleUnitContext* ctx ) override; // antlrcpp::Any visitNavigationSuffix(EscriptGrammar::EscriptParser::NavigationSuffixContext // *ctx) override; antlrcpp::Any visitParExpression( EscriptGrammar::EscriptParser::ParExpressionContext* ctx ) override; antlrcpp::Any visitPrimary( EscriptGrammar::EscriptParser::PrimaryContext* ctx ) override; antlrcpp::Any visitProgramDeclaration( EscriptGrammar::EscriptParser::ProgramDeclarationContext* ctx ) override; antlrcpp::Any visitProgramParameter( EscriptGrammar::EscriptParser::ProgramParameterContext* ctx ) override; antlrcpp::Any visitProgramParameterList( EscriptGrammar::EscriptParser::ProgramParameterListContext* ctx ) override; antlrcpp::Any visitProgramParameters( EscriptGrammar::EscriptParser::ProgramParametersContext* ctx ) override; antlrcpp::Any visitRepeatStatement( EscriptGrammar::EscriptParser::RepeatStatementContext* ctx ) override; antlrcpp::Any visitReturnStatement( EscriptGrammar::EscriptParser::ReturnStatementContext* ctx ) override; antlrcpp::Any visitScopedFunctionCall( EscriptGrammar::EscriptParser::ScopedFunctionCallContext* ctx ) override; antlrcpp::Any visitStatement( EscriptGrammar::EscriptParser::StatementContext* ctx ) override; // antlrcpp::Any visitStatementLabel(EscriptGrammar::EscriptParser::StatementLabelContext *ctx) // override; antlrcpp::Any visitStringIdentifier( EscriptGrammar::EscriptParser::StringIdentifierContext* ctx ) override; antlrcpp::Any visitStructInitializer( EscriptGrammar::EscriptParser::StructInitializerContext* ctx ) override; antlrcpp::Any visitStructInitializerExpression( EscriptGrammar::EscriptParser::StructInitializerExpressionContext* ctx ) override; antlrcpp::Any visitStructInitializerExpressionList( EscriptGrammar::EscriptParser::StructInitializerExpressionListContext* ctx ) override; antlrcpp::Any visitSwitchBlockStatementGroup( EscriptGrammar::EscriptParser::SwitchBlockStatementGroupContext* ctx ) override; antlrcpp::Any visitSwitchLabel( EscriptGrammar::EscriptParser::SwitchLabelContext* ctx ) override; // antlrcpp::Any // visitTopLevelDeclaration(EscriptGrammar::EscriptParser::TopLevelDeclarationContext *ctx) // override; antlrcpp::Any visitUseDeclaration( EscriptGrammar::EscriptParser::UseDeclarationContext* ctx ) override; antlrcpp::Any visitVariableDeclaration( EscriptGrammar::EscriptParser::VariableDeclarationContext* ctx ) override; // antlrcpp::Any // visitVariableDeclarationInitializer(EscriptGrammar::EscriptParser::VariableDeclarationInitializerContext // *ctx) override; antlrcpp::Any visitVariableDeclarationList( EscriptGrammar::EscriptParser::VariableDeclarationListContext* ctx ) override; antlrcpp::Any visitVarStatement( EscriptGrammar::EscriptParser::VarStatementContext* ctx ) override; antlrcpp::Any visitWhileStatement( EscriptGrammar::EscriptParser::WhileStatementContext* ctx ) override; antlrcpp::Any process_compilation_unit( SourceFile& ); antlrcpp::Any process_module_unit( SourceFile& ); private: const SourceFileIdentifier& source_file_identifier; PrettifyLineBuilder linebuilder; size_t _currident = 0; size_t _currentgroup = 0; // Profile& profile; Report& report; void addToken( std::string&& text, const Position& pos, int style, size_t token_type ); void addToken( std::string&& text, antlr4::tree::TerminalNode* terminal, int style ); void addToken( std::string&& text, antlr4::Token* token, int style ); void preprocess( SourceFile& sf ); std::vector collectComments( SourceFile& sf ); std::vector load_raw_file(); antlrcpp::Any expression_suffix( EscriptGrammar::EscriptParser::ExpressionContext*, EscriptGrammar::EscriptParser::ExpressionSuffixContext* ); antlrcpp::Any make_statement_label( EscriptGrammar::EscriptParser::StatementLabelContext* ); antlrcpp::Any make_identifier( antlr4::tree::TerminalNode* ); antlrcpp::Any make_string_literal( antlr4::tree::TerminalNode* ); antlrcpp::Any make_bool_literal( antlr4::tree::TerminalNode* ); antlrcpp::Any make_integer_literal( antlr4::tree::TerminalNode* ); antlrcpp::Any make_float_literal( antlr4::tree::TerminalNode* ); }; } // namespace Pol::Bscript::Compiler