Пример #1
0
        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());
        }
Пример #2
0
 /// <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));
 }
Пример #3
0
 /// <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)
 {
 }