Esempio n. 1
0
    public override object VisitExpressionContentMul(FaParser.ExpressionContentMulContext context)
    {
        object result = null;

        object left         = Visit(context.expressionContent(0));
        object right        = Visit(context.expressionContent(1));
        bool   isMod        = context.MUL().GetText().Equals("%");
        bool   isMul        = context.MUL().GetText().Equals("*");
        bool   isDiv        = context.MUL().GetText().Equals("/");
        bool   leftIsNum    = left   is int || left  is double;
        bool   rigthIsNum   = right is int || right is double;
        bool   areNums      = leftIsNum && rigthIsNum;
        bool   areStringMul = (left is int && right is string) || (left is string && right  is int);

        if (isDiv && rigthIsNum && Convert.ToDouble(right) == 0)
        {
            Debug.LogError("Error en división por cero");
            // Console.WriteLine("Error en división por cero");
            MyConsole.main.AppendText("Error en división por cero");
            return(null);
        }

        if (areNums)
        {
            result = isMul ? Convert.ToDouble(left) * Convert.ToDouble(right) : result;
            result = isDiv ? Convert.ToDouble(left) / Convert.ToDouble(right) : result;
            result = isMod ? Convert.ToDouble(left) % Convert.ToDouble(right) : result;
        }
        if (areStringMul)
        {
            result = "";
            for (int i = 0; i < (left is int?(int)left :(int)right); i++)
            {
                result += (left is int?(string)right : (string)left);
            }
        }
        return(result);
    }
Esempio n. 2
0
 /// <summary>
 /// Visit a parse tree produced by the <c>expressionContentMul</c>
 /// labeled alternative in <see cref="FaParser.expressionContent"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitExpressionContentMul([NotNull] FaParser.ExpressionContentMulContext context)
 {
     return(VisitChildren(context));
 }