Ejemplo n.º 1
0
            /* Numeric expressions */

            public override object VisitComplex_numeric_expr([NotNull] scheme_langParser.Complex_numeric_exprContext context)
            {
                //Insert ADD/SUB to computation stack and registers to register stack

                //result reg = params.back()
                //param1 = result reg
                //param2 = first free reg (that is not in params)
                //params.push_back(param2)

                int param2 = GetFirstFreeReg();
                int param1 = PopLastParamReg();

                PushParamRegs(param2, param1);

                ISchemeCommand cmd = null;

                if (context.PLUS() != null)
                {
                    cmd = new CommandAdd(GetRegName(param1), GetRegName(param2), GetRegName(param1));
                }
                else if (context.MINUS() != null)
                {
                    cmd = new CommandSubtract(GetRegName(param1), GetRegName(param2), GetRegName(param1));
                }

                currentFunc.AddCommand(cmd, expression_index);

                return(base.VisitComplex_numeric_expr(context));
            }
Ejemplo n.º 2
0
            public override object VisitInverted_atom([NotNull] scheme_langParser.Inverted_atomContext context)
            {
                int param = GetLastParamReg();

                CommandSubtract cmd = new CommandSubtract("0", GetRegName(param), GetRegName(param));

                currentFunc.AddCommand(cmd, expression_index);

                return(base.VisitInverted_atom(context));
            }