/// <summary> /// program : program_statement+ ; /// </summary> override public Shell.Types.IShellReturnable VisitProgram(ShellParser.ProgramContext context) { var statements = context.program_statement(); Shell.Types.IShellReturnable lastResult = defaultReturnValue; foreach (var statement in statements) { lastResult = VisitProgram_statement(statement); if (lastResult is Shell.Types.String str) { logger.Debug($"Result: \"{lastResult}\" of type {lastResult.GetType()}"); } else if (lastResult is Shell.Types.Array arr) { logger.Debug($"Result: {lastResult} of type {lastResult.GetType()} and length {arr.Count()}"); } else if (lastResult is Shell.Types.Object obj) { logger.Debug($"Result is an object:\n {obj}"); } else if (!(lastResult is Shell.Types.None)) { logger.Debug($"Result: {lastResult} of type {lastResult.GetType()}"); } } return(lastResult); }
/// <summary> /// Visit a parse tree produced by <see cref="ShellParser.program"/>. /// <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 VisitProgram([NotNull] ShellParser.ProgramContext context) { return(VisitChildren(context)); }