Ejemplo n.º 1
0
        public string Visit(CIL_ExpBin node)
        {
            int value1 = GetValueFromId(node.Left);
            int value2 = GetValueFromId(node.Right);
            int solve  = 0;

            if (node.Op == "+")
            {
                solve = value1 + value2;
            }
            if (node.Op == "-")
            {
                solve = value1 - value2;
            }
            if (node.Op == "*")
            {
                solve = value1 * value2;
            }
            if (node.Op == "/")
            {
                solve = value1 / value2;
            }
            if (node.Op == "<")
            {
                solve = (value1 < value2) ? 1 : 0;
            }
            if (node.Op == "<=")
            {
                solve = (value1 <= value2) ? 1 : 0;
            }
            if (node.Op == "=")
            {
                solve = (value1 == value2) ? 1 : 0;
            }
            int dir = variableaddr.Peek()[node.Result];

            mem.SetValue(dir, solve);
            return("");
        }
Ejemplo n.º 2
0
        public string Visit(CIL_ExpBin node)
        {
            string solve = "";

            int val;

            if (int.TryParse(node.Left, out val))
            {
                solve += $"\t li $t0, {val}\n";
            }
            else
            {
                solve += $"\t lw $t0, {context_function[node.Left]}\n";
            }

            if (int.TryParse(node.Right, out val))
            {
                solve += $"\t li $t1, {val}\n";
            }
            else
            {
                solve += $"\t lw $t1, {context_function[node.Right]}\n";
            }

            if (node.Op == "+")
            {
                solve += $"\t add $t2, $t0, $t1\n";
            }
            else if (node.Op == "-")
            {
                solve += $"\t sub $t2, $t0, $t1\n";
            }
            else if (node.Op == "/")
            {
                solve += $"\t div $t2, $t0, $t1\n";
            }
            else if (node.Op == "*")
            {
                solve += $"\t mul $t2, $t0, $t1\n";
            }
            else if (node.Op == "=")
            {
                solve += $"\t seq $t2, $t0, $t1\n";
            }
            else if (node.Op == "<")
            {
                solve += $"\t sgt $t2, $t1, $t0\n";
            }
            else if (node.Op == "<=")
            {
                solve += $"\t sge $t2, $t1, $t0\n";
            }

            else
            {
                throw new Exception($"{node.Op} Not Found Operator");
            }
            solve += $"\t sw $t2 {context_function[node.Result]}\n";



            return(solve);
        }