polserver/lib/Parser/EscriptGrammar/EscriptParserVisitor.h

223 lines
9.8 KiB
C
Raw Permalink Normal View History

// Generated from EscriptParser.g4 by ANTLR 4.13.1
#pragma once
#include "antlr4-runtime.h"
#include "EscriptParser.h"
namespace EscriptGrammar {
/**
* This class defines an abstract visitor for a parse tree
* produced by EscriptParser.
*/
class EscriptParserVisitor : public antlr4::tree::AbstractParseTreeVisitor {
public:
/**
* Visit parse trees produced by EscriptParser.
*/
virtual std::any visitCompilationUnit(EscriptParser::CompilationUnitContext *context) = 0;
virtual std::any visitModuleUnit(EscriptParser::ModuleUnitContext *context) = 0;
Introduce DAP Debugger (#608) * Add cppdap debugger library and simple server (#508) * Add cppdap library * Add cppdap server * fixup cmake scripts for windows * Enable caching of cppdap on GitHub actions * Fix CMake for cppdap target * Wait 1s for session close before thread ends * Address review comments - Remove unnecessary use of wait_for - Fix wait_for method * Do not use SocketClientThread for cppdap clients * Address review comments - Cleanup object ownership * Add authorization and event handling (#510) * Add authorization and event handling [WIP] * Use std::weak_ptr; Only allow one debugger conn * Only attach debugger if dbg file exists * Cleanup weak_ptr; Fix listeners; Add handler stubs * Address review comments - PolLock on uoexec and weakptr access - Use make_shared when creating client thread * Add ExecutorDebugListener on_destroy callback * Use cppdap sockets instead of clib sockets * Update cppdap repository to 2703cf4 * Implement server address binding * Update cppdap repository to eeca5ce * Fix warnings * Use weak_from_this * Fix stalled executors on disconnect * Fix stalled executors on re-attach * Clear uoexec weakptr on all debugger detaches * Move server to gamestate * move DapDebugServer into Network namespace * move DapDebugServer into GameState for storage * Move DapDebugServer into NetworkManager * Fix missing memory include * Add more events (#513) * Add more events * Implement dbg_step_out * Fix breakpoint clearing * Add even more events (#515) * add launch request * Add custom `processes` command * fixup loop * Refactoring to move handlers to member functions * Add VariablesRequest and ScopesRequest * use std::varaint for Handles * add pollocks * refactor Handles to new file * move custom messages to proto.h * move clientthread * some formatting / cleanup * Add missing PolLock * move dap variables creation to Handles * appobj members * rename ClientThread to DebugClientThread * rename LaunchRequest args to arg * Fix compiler error on size_t * Add support for EvaluateRequest and SetVariableRequest (#519) * Update grammar for evaluateUnit * Cleanup various compiler code * Add support for EvaluateRequest Only supports values, variables, element access, member access * Add report clearing to reinitialize state * Add support for SetVariableRequest * Fix CI build errors * Move ExpressionEvaluator to Bscript * Fix formatting * Fix include * Refactor global and frame variable references * Encapsulate Executor debugging environment; Fix step over (#524) * Fix step over * Some cleanup of executor - Remove unused debug states - Rename members for consistency * move debugging environment to new class * Move instruction inspection to class * Cleanup slashes on Windows; Add Executor state to processes response (#527) * Fix backspaces in script names on Windows * Fix compilation warnings with data loss * Use boost::icontains for string comparison * Add Executor state to processes response * Updates for libfmt * Fix tests; Fix cppdap build for Mac universal binary (#607) * fix tests * fix cppdap build for mac universal binary * Update cppdap to 2a4c7cf * Add tests; Modify launch behavior to not stop at entry (redo) (#609) * Remove unused setExceptionBreakpoints handler * Add debugger tests * Launching a script should not set attaching state * Add launch tests * Do not check for connection in debugger tests * Rename `program` to `script` in protocol structs * Fix launch stopAtEntry; quote string var values * Fix compilation error on Windows * Add configfiles doc entry * Various fixes for finishing touches; Add core-changes (#610) * switch cmake projects * simple docs * cmake move make_directory * Fix launch request with relative, absolute, package paths * make relative paths as absolute in source request * Add true, false, uninit to ExpressionEvaluator * Re-add setExceptionBreakpoints to avoid unhandled message errors * Better debug thread logging with instance numbers * launched scripts should terminate on disconnect (according to DAP spec) * Properly handle exited event in client thread * Add core-changes * Address Discord comments - Mention vscode-escript in core-changes - Re-add "cppdap already built" in cmake * change cmake escriptgrammarlib visibility to public
2024-01-28 15:49:55 +07:00
virtual std::any visitEvaluateUnit(EscriptParser::EvaluateUnitContext *context) = 0;
virtual std::any visitModuleDeclarationStatement(EscriptParser::ModuleDeclarationStatementContext *context) = 0;
virtual std::any visitModuleFunctionDeclaration(EscriptParser::ModuleFunctionDeclarationContext *context) = 0;
virtual std::any visitModuleFunctionParameterList(EscriptParser::ModuleFunctionParameterListContext *context) = 0;
virtual std::any visitModuleFunctionParameter(EscriptParser::ModuleFunctionParameterContext *context) = 0;
virtual std::any visitTopLevelDeclaration(EscriptParser::TopLevelDeclarationContext *context) = 0;
virtual std::any visitClassDeclaration(EscriptParser::ClassDeclarationContext *context) = 0;
virtual std::any visitClassParameters(EscriptParser::ClassParametersContext *context) = 0;
virtual std::any visitClassParameterList(EscriptParser::ClassParameterListContext *context) = 0;
virtual std::any visitClassBody(EscriptParser::ClassBodyContext *context) = 0;
virtual std::any visitClassStatement(EscriptParser::ClassStatementContext *context) = 0;
virtual std::any visitUninitFunctionDeclaration(EscriptParser::UninitFunctionDeclarationContext *context) = 0;
virtual std::any visitFunctionDeclaration(EscriptParser::FunctionDeclarationContext *context) = 0;
virtual std::any visitStringIdentifier(EscriptParser::StringIdentifierContext *context) = 0;
virtual std::any visitUseDeclaration(EscriptParser::UseDeclarationContext *context) = 0;
virtual std::any visitIncludeDeclaration(EscriptParser::IncludeDeclarationContext *context) = 0;
virtual std::any visitProgramDeclaration(EscriptParser::ProgramDeclarationContext *context) = 0;
virtual std::any visitStatement(EscriptParser::StatementContext *context) = 0;
virtual std::any visitStatementLabel(EscriptParser::StatementLabelContext *context) = 0;
virtual std::any visitIfStatement(EscriptParser::IfStatementContext *context) = 0;
virtual std::any visitGotoStatement(EscriptParser::GotoStatementContext *context) = 0;
virtual std::any visitReturnStatement(EscriptParser::ReturnStatementContext *context) = 0;
virtual std::any visitConstStatement(EscriptParser::ConstStatementContext *context) = 0;
virtual std::any visitVarStatement(EscriptParser::VarStatementContext *context) = 0;
virtual std::any visitDoStatement(EscriptParser::DoStatementContext *context) = 0;
virtual std::any visitWhileStatement(EscriptParser::WhileStatementContext *context) = 0;
virtual std::any visitExitStatement(EscriptParser::ExitStatementContext *context) = 0;
virtual std::any visitBreakStatement(EscriptParser::BreakStatementContext *context) = 0;
virtual std::any visitContinueStatement(EscriptParser::ContinueStatementContext *context) = 0;
virtual std::any visitForStatement(EscriptParser::ForStatementContext *context) = 0;
virtual std::any visitForeachIterableExpression(EscriptParser::ForeachIterableExpressionContext *context) = 0;
virtual std::any visitForeachStatement(EscriptParser::ForeachStatementContext *context) = 0;
virtual std::any visitRepeatStatement(EscriptParser::RepeatStatementContext *context) = 0;
virtual std::any visitCaseStatement(EscriptParser::CaseStatementContext *context) = 0;
virtual std::any visitEnumStatement(EscriptParser::EnumStatementContext *context) = 0;
virtual std::any visitBlock(EscriptParser::BlockContext *context) = 0;
virtual std::any visitVariableDeclarationInitializer(EscriptParser::VariableDeclarationInitializerContext *context) = 0;
virtual std::any visitEnumList(EscriptParser::EnumListContext *context) = 0;
virtual std::any visitEnumListEntry(EscriptParser::EnumListEntryContext *context) = 0;
virtual std::any visitSwitchBlockStatementGroup(EscriptParser::SwitchBlockStatementGroupContext *context) = 0;
virtual std::any visitSwitchLabel(EscriptParser::SwitchLabelContext *context) = 0;
virtual std::any visitForGroup(EscriptParser::ForGroupContext *context) = 0;
virtual std::any visitBasicForStatement(EscriptParser::BasicForStatementContext *context) = 0;
virtual std::any visitCstyleForStatement(EscriptParser::CstyleForStatementContext *context) = 0;
virtual std::any visitIdentifierList(EscriptParser::IdentifierListContext *context) = 0;
virtual std::any visitVariableDeclarationList(EscriptParser::VariableDeclarationListContext *context) = 0;
virtual std::any visitConstantDeclaration(EscriptParser::ConstantDeclarationContext *context) = 0;
virtual std::any visitVariableDeclaration(EscriptParser::VariableDeclarationContext *context) = 0;
virtual std::any visitBindingDeclaration(EscriptParser::BindingDeclarationContext *context) = 0;
virtual std::any visitIndexBindingList(EscriptParser::IndexBindingListContext *context) = 0;
virtual std::any visitSequenceBindingList(EscriptParser::SequenceBindingListContext *context) = 0;
virtual std::any visitSequenceBinding(EscriptParser::SequenceBindingContext *context) = 0;
virtual std::any visitIndexBinding(EscriptParser::IndexBindingContext *context) = 0;
virtual std::any visitBinding(EscriptParser::BindingContext *context) = 0;
virtual std::any visitBindingDeclarationInitializer(EscriptParser::BindingDeclarationInitializerContext *context) = 0;
virtual std::any visitProgramParameters(EscriptParser::ProgramParametersContext *context) = 0;
virtual std::any visitProgramParameterList(EscriptParser::ProgramParameterListContext *context) = 0;
virtual std::any visitProgramParameter(EscriptParser::ProgramParameterContext *context) = 0;
virtual std::any visitFunctionParameters(EscriptParser::FunctionParametersContext *context) = 0;
virtual std::any visitFunctionParameterList(EscriptParser::FunctionParameterListContext *context) = 0;
virtual std::any visitFunctionParameter(EscriptParser::FunctionParameterContext *context) = 0;
virtual std::any visitScopedFunctionCall(EscriptParser::ScopedFunctionCallContext *context) = 0;
virtual std::any visitFunctionReference(EscriptParser::FunctionReferenceContext *context) = 0;
virtual std::any visitExpression(EscriptParser::ExpressionContext *context) = 0;
virtual std::any visitPrimary(EscriptParser::PrimaryContext *context) = 0;
virtual std::any visitScopedIdentifier(EscriptParser::ScopedIdentifierContext *context) = 0;
Add compiler support for function expressions (#671) * initial poc of function expressions - update grammar - mock AST builder to return BBoolean(true) for a func expr - update prettifier for skeleton implementation * more skeleton work create AST class FunctionExpression mimicking boolean value * create ast UserFunction, add to workspace from functexpr * can generate instructions * reorg tests; add test for instructions * can track FunctionDepth in Variable * can get captures for funcexprs inside funcs.. tbd if this way of nesting works * Implement create-functor instruction - Move function depth from Variable to Variables - Introduce stacking of `Variables` for function expresions via `FunctionVariableScope` - Add `TOK_FUNCTOR` instruction for 'create-functor' - Handle emitting a `FunctionExpression` AST node - Update `emit.declare_variable` and `emit.access_variable` to account for function captures - Remove `in_function` from instruction generator, as it is tracked via `UserFunction` stack - Update tests * Address Discord comments - Swap pop param order * Bubble up captured variables through nested functions * Improve testing infrastructure; add some test cases * Fix compilation error * prepend captures to function parameters in funcref mth_call * update tests * move from function{} to @{} * implementation fix * some more tests * update docs * Some cleanup * fix CI annotation warning - 'argument': conversion from 'size_t' to 'VariableIndex', possible loss of data * Address review comments - Add `passert_always` - Use better example in docs * Some cleanup - Remove unused functions
2024-07-29 22:30:52 +02:00
virtual std::any visitFunctionExpression(EscriptParser::FunctionExpressionContext *context) = 0;
virtual std::any visitExplicitArrayInitializer(EscriptParser::ExplicitArrayInitializerContext *context) = 0;
virtual std::any visitExplicitStructInitializer(EscriptParser::ExplicitStructInitializerContext *context) = 0;
virtual std::any visitExplicitDictInitializer(EscriptParser::ExplicitDictInitializerContext *context) = 0;
virtual std::any visitExplicitErrorInitializer(EscriptParser::ExplicitErrorInitializerContext *context) = 0;
virtual std::any visitBareArrayInitializer(EscriptParser::BareArrayInitializerContext *context) = 0;
virtual std::any visitParExpression(EscriptParser::ParExpressionContext *context) = 0;
virtual std::any visitExpressionList(EscriptParser::ExpressionListContext *context) = 0;
virtual std::any visitExpressionListEntry(EscriptParser::ExpressionListEntryContext *context) = 0;
virtual std::any visitExpressionSuffix(EscriptParser::ExpressionSuffixContext *context) = 0;
virtual std::any visitIndexingSuffix(EscriptParser::IndexingSuffixContext *context) = 0;
virtual std::any visitIndexList(EscriptParser::IndexListContext *context) = 0;
virtual std::any visitNavigationSuffix(EscriptParser::NavigationSuffixContext *context) = 0;
virtual std::any visitMethodCallSuffix(EscriptParser::MethodCallSuffixContext *context) = 0;
virtual std::any visitFunctionCallSuffix(EscriptParser::FunctionCallSuffixContext *context) = 0;
virtual std::any visitFunctionCall(EscriptParser::FunctionCallContext *context) = 0;
virtual std::any visitStructInitializerExpression(EscriptParser::StructInitializerExpressionContext *context) = 0;
virtual std::any visitStructInitializerExpressionList(EscriptParser::StructInitializerExpressionListContext *context) = 0;
virtual std::any visitStructInitializer(EscriptParser::StructInitializerContext *context) = 0;
virtual std::any visitDictInitializerExpression(EscriptParser::DictInitializerExpressionContext *context) = 0;
virtual std::any visitDictInitializerExpressionList(EscriptParser::DictInitializerExpressionListContext *context) = 0;
virtual std::any visitDictInitializer(EscriptParser::DictInitializerContext *context) = 0;
virtual std::any visitArrayInitializer(EscriptParser::ArrayInitializerContext *context) = 0;
virtual std::any visitLiteral(EscriptParser::LiteralContext *context) = 0;
virtual std::any visitInterpolatedString(EscriptParser::InterpolatedStringContext *context) = 0;
Add support for interpolated strings ("interstrings") (#369) * Update grammar to support interpolated strings * Struct initializers, case switchs are regular strings * Initial stub for interpolated string in AST This splits the previous STRING_LITERAL terminal into a production, stringLiteral, to handle REGULAR_STRING terminal and interpolatedString production. * Change interpolated strings to expressions * Fix mode handling in grammar * Grammar fixes - Fix mode handling in lexer - Interpolated strings only have one expression * Can successfully parse, stub compile interstrings $"He {there + print("hello")}"; * Add formatting string to grammar * Fix tests, and add test stubs * Rename curleys to brace; better AST generation * initial work interstring instruction * Initial work on formatted string instruction: emit * Formatted string instruction: execution * Add simple formatted string test * Add formatted string test src * Review changes #1 - Rename `FormattedString` to `FormatExpression` - Rename overloaded `try_to_format()` to `get_formatted()` * Review changes part 2 - Rename `InterpolatedString` ast node to `InterpolateString` * Review changes part 3 - Modify `ins_interpolate_string` * Review changes part 4 - Remove unused formal parameter * Add negative tests * Spruce up positive tests * Fix braces, escape chars inside interstring * Fix, add tests for escaped char and double brace * Address differences for new lines in tests * Update Escript version * Make empty expression an error * Add documentation for interpolated strings * Quick touchup on docs
2021-03-11 22:48:16 +01:00
virtual std::any visitInterpolatedStringPart(EscriptParser::InterpolatedStringPartContext *context) = 0;
Add support for interpolated strings ("interstrings") (#369) * Update grammar to support interpolated strings * Struct initializers, case switchs are regular strings * Initial stub for interpolated string in AST This splits the previous STRING_LITERAL terminal into a production, stringLiteral, to handle REGULAR_STRING terminal and interpolatedString production. * Change interpolated strings to expressions * Fix mode handling in grammar * Grammar fixes - Fix mode handling in lexer - Interpolated strings only have one expression * Can successfully parse, stub compile interstrings $"He {there + print("hello")}"; * Add formatting string to grammar * Fix tests, and add test stubs * Rename curleys to brace; better AST generation * initial work interstring instruction * Initial work on formatted string instruction: emit * Formatted string instruction: execution * Add simple formatted string test * Add formatted string test src * Review changes #1 - Rename `FormattedString` to `FormatExpression` - Rename overloaded `try_to_format()` to `get_formatted()` * Review changes part 2 - Rename `InterpolatedString` ast node to `InterpolateString` * Review changes part 3 - Modify `ins_interpolate_string` * Review changes part 4 - Remove unused formal parameter * Add negative tests * Spruce up positive tests * Fix braces, escape chars inside interstring * Fix, add tests for escaped char and double brace * Address differences for new lines in tests * Update Escript version * Make empty expression an error * Add documentation for interpolated strings * Quick touchup on docs
2021-03-11 22:48:16 +01:00
virtual std::any visitIntegerLiteral(EscriptParser::IntegerLiteralContext *context) = 0;
virtual std::any visitFloatLiteral(EscriptParser::FloatLiteralContext *context) = 0;
virtual std::any visitBoolLiteral(EscriptParser::BoolLiteralContext *context) = 0;
};
} // namespace EscriptGrammar