public void Visit(ArithContext parserRule, IObjectContext <IVar, IVar> context)
 {
     Visit(parserRule.left, context);
     Visit(parserRule.right, context);
     if (!globalContext.IfDefineType(parserRule.left.computedType.Name) || !globalContext.IfDefineType(parserRule.right.computedType.Name))
     {
         parserRule.computedType = globalContext.Undefined;
     }
     else
     {
         //Lo dejo como un tipo idefinido
         if (!parserRule.left.computedType.Equals(globalContext.Int) || !parserRule.right.computedType.Equals(globalContext.Int))
         {
             errorLogger.LogError($"({parserRule.Start.Line},{parserRule.Start.Column + 1}) - Type Error: Operator '{parserRule.op.Text }' cannot be applied to operands of type '{parserRule.left.computedType.Name}' and '{parserRule.right.computedType.Name}'");
             parserRule.computedType = globalContext.Undefined;
         }
         else
         {
             parserRule.computedType = globalContext.Int;
         }
     }
 }
        public IHolderCil Visit(ArithContext parserRule, IFunctionCil cilTree, IContextCil contextCil)
        {
            var valueNum = new LocalCil($"_valueNum{cilTree.LocalCils.Count}");

            cilTree.LocalCils.Add(valueNum);
            var valueLeft  = Visit(parserRule.left, cilTree, contextCil);
            var valueRight = Visit(parserRule.right, cilTree, contextCil);
            var valLeft    = GetValue(valueLeft, cilTree, CilAst.Int);
            var valRigth   = GetValue(valueRight, cilTree, CilAst.Int);

            switch (parserRule.op.Text)
            {
            case "/":
                var isZero = new LocalCil($"_isZero{cilTree.LocalCils.Count}");
                cilTree.LocalCils.Add(isZero);
                cilTree.ThreeDirInses.Add(new NotEqualCil(isZero, valRigth, new HolderCil("0")));
                Visit_Runtime_Error_whit_Cond(isZero, cilTree, $"\"({parserRule.Start.Line},{parserRule.Start.Column+1}) -  Rutime Error: Division by zero\"");
                cilTree.ThreeDirInses.Add(new DivCil(valueNum, valLeft, valRigth));
                break;

            case "*":
                cilTree.ThreeDirInses.Add(new MultCil(valueNum, valLeft, valRigth));
                break;

            case "+":
                cilTree.ThreeDirInses.Add(new SumCil(valueNum, valLeft, valRigth));
                break;

            case "-":
                cilTree.ThreeDirInses.Add(new RestCil(valueNum, valLeft, valRigth));
                break;

            default:
                break;
            }

            return(CreateABasicTypeWhitVal(cilTree, CilAst.Int, valueNum));
        }