public override MurMurVariable VisitMurmur([NotNull] MurMurParser.MurmurContext context) { script.Tags = new Dictionary <string, MurMurParser.BlockContext>(); // First we include all required files foreach (var file in context.declaration()) { VisitDeclaration(file); } // then we create the methods block foreach (var method in context.defBlock()) { var words = method.WORD(); var name = words[0].GetText(); if (name == "init") { Visit(method); } else { script.Globals[name] = (Func <MurMurVariable[], MurMurVariable>)((parameters) => { for (int i = 1; i < words.Length; i++) { script.Locals[words[i].GetText()] = parameters[i - 1]; } var value = Visit(method); script.Locals.Clear(); return(value); }); } } // Then we collect the tags var tags = context.tag(); foreach (var tag in tags) { VisitTag(tag); } return(new MurMurVariable()); }
/// <summary> /// Visit a parse tree produced by <see cref="MurMurParser.murmur"/>. /// <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 VisitMurmur([NotNull] MurMurParser.MurmurContext context) { return(VisitChildren(context)); }
/// <summary> /// Exit a parse tree produced by <see cref="MurMurParser.murmur"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitMurmur([NotNull] MurMurParser.MurmurContext context) { }