Beispiel #1
0
        public override void ExitLoop(ssuplParser.LoopContext context)
        {
            string endwhile   = label();
            string startwhile = label();

            code.Put(context,
                     $"; begin while loop at line yo {context.Start.Line}",
                     $"{startwhile}:",
                     code.Get(context.expr()),
                     "cmp rax, 0",
                     $"je {endwhile}",
                     code.Get(context.braceblock()),
                     $"jmp {startwhile}",
                     $"{endwhile}:");
        }
Beispiel #2
0
        public override void ExitLoop(ssuplParser.LoopContext context)
        {
            string loop    = label();
            string endloop = label();

            code.Put(context,
                     $"{loop}:",
                     $"; begin LOOP at line {context.Start.Line}",
                     code.Get(context.expr()),
                     "pop rax",
                     $"cmp rax, 0",
                     $"je {endloop}",
                     $"; begin LOOP braceblock",
                     code.Get(context.braceblock()),
                     $"jmp {loop}",
                     $"{endloop}:",
                     $"; end LOOP");
        }
Beispiel #3
0
        public override void ExitLoop(ssuplParser.LoopContext context)
        {
            if (type(context.expr()) != VarType.INT)
            {
                throw new Exception("Expr must be integer");
            }
            string endwhile   = label();
            string startwhile = label();

            code.Put(context,
                     $"; begin while loop at line yo {context.Start.Line}",
                     $"{startwhile}:",
                     code.Get(context.expr()),
                     "pop rax",
                     "cmp rax, 0",
                     $"je {endwhile}",
                     code.Get(context.braceblock()),
                     $"jmp {startwhile}",
                     $"{endwhile}:");
        }
 /// <summary>
 /// Exit a parse tree produced by <see cref="ssuplParser.loop"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitLoop([NotNull] ssuplParser.LoopContext context)
 {
 }