public string visitOperandExpr(Expression.Operand expr)
    {
        switch (expr.Value.GetName())
        {
        case "UNARY":
        case "BINARY":
            return(((Expression)expr.Value).Accept(this));

        case "INTEGER":
            return("int");

        case "STRING":
            return("string");

        case "VAR_IDENTIFIER":
            var ident = (VarIdentifier)expr.Value;

            if (!environment.Contains(ident.Name))
            {
                ErrorWriter.Write(ident, "Cannot operate on uninitalized variable '{0}'", ident.Name);
                return(null);
            }

            return(environment.GetType(ident.Name));

        default:
            return(null);
        }
    }
Exemplo n.º 2
0
    private Expression.Operand operand()
    {
        current = advance();
        if (current.GetName() == "LEFT_PAREN")
        {
            var opr = new Expression.Operand(expression());
            match("RIGHT_PAREN");
            return(opr);
        }

        if (current.GetName() == "IDENTIFIER")
        {
            return(new Expression.Operand(createIdent(current)));
        }

        return(new Expression.Operand(current));
    }
Exemplo n.º 3
0
    public object visitOperandExpr(Expression.Operand expr)
    {
        var value = expr.Value;

        switch (value.GetName())
        {
        case "UNARY":
        case "BINARY":
            return(((Expression)value).Accept(this));

        case "INTEGER":
            return(Int32.Parse(((Token)value).Value));

        case "VAR_IDENTIFIER":
            var ident = (VarIdentifier)value;
            return(environment.Get(ident.Name));

        default:
            return(((Token)value).Value);
        }
    }