/// <summary> /// Exit a parse tree produced by <see cref="algoParser.statement"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitStatement([NotNull] algoParser.StatementContext context) { }
/// <summary> /// Visit a parse tree produced by <see cref="algoParser.statement"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitStatement([NotNull] algoParser.StatementContext context) { return(VisitChildren(context)); }
//When evaluating a statement, switch for type. public override object VisitStatement([NotNull] algoParser.StatementContext context) { //What type is it? if (context.stat_define() != null) { //Define statement. VisitStat_define(context.stat_define()); } else if (context.stat_setvar() != null) { //Set a variable after its definition. VisitStat_setvar(context.stat_setvar()); } else if (context.stat_setvar_op() != null) { //Set a variable using a self modifying operator. VisitStat_setvar_op(context.stat_setvar_op()); } else if (context.stat_setvar_postfix() != null) { //Set a variable using a postfix operator. VisitStat_setvar_postfix(context.stat_setvar_postfix()); } else if (context.stat_deletevar() != null) { //Delete a variable from scope. VisitStat_deletevar(context.stat_deletevar()); } else if (context.stat_if() != null) { //An "if" statement. return(VisitStat_if(context.stat_if())); } else if (context.stat_forLoop() != null) { //A for loop. return(VisitStat_forLoop(context.stat_forLoop())); } else if (context.stat_whileLoop() != null) { //A while loop. return(VisitStat_whileLoop(context.stat_whileLoop())); } else if (context.stat_enumDef() != null) { //Definition of an enum. VisitStat_enumDef(context.stat_enumDef()); } else if (context.stat_functionCall() != null) { //A function call. //This should NOT return, it's a top level single function call. VisitStat_functionCall(context.stat_functionCall()); } else if (context.stat_functionDef() != null) { //A function definition. VisitStat_functionDef(context.stat_functionDef()); } else if (context.stat_return() != null) { //Returning a value from a function call. return(VisitStat_return(context.stat_return())); } else if (context.stat_print() != null) { //A print statement. VisitStat_print(context.stat_print()); } else if (context.stat_library() != null) { //Defining a library. VisitStat_library(context.stat_library()); } else if (context.stat_import() != null) { //Importing an Algo script. VisitStat_import(context.stat_import()); } else if (context.stat_loadFuncExt() != null) { //Load an external or internal plugin function. VisitStat_loadFuncExt(context.stat_loadFuncExt()); } else if (context.stat_list_add() != null) { //Add a value to a list. VisitStat_list_add(context.stat_list_add()); } else if (context.stat_list_remove() != null) { //Remove a value from a list. VisitStat_list_remove(context.stat_list_remove()); } else if (context.stat_break() != null) { //Break statement, return a break value. return(AlgoValue.Break); } else if (context.stat_continue() != null) { //Continue statement, return a continue value. return(AlgoValue.Continue); } else if (context.stat_try_catch() != null) { //Try/catch block. return(VisitStat_try_catch(context.stat_try_catch())); } else if (context.stat_throw() != null) { //Throw an error. VisitStat_throw(context.stat_throw()); } else { Error.Fatal(context, "Syntax error, unrecognized statement."); } return(null); }