/* 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)); }
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)); }