Exemplo n.º 1
0
 public void SetVariable(string name, bool value)
 {
     variables[name] = new TypedValue(value);
 }
Exemplo n.º 2
0
        public TypedValue Evaluate(BinaryOperation operation, InterpreterContext context)
        {
            TypedValue left       = Evaluate(operation.Left, context);
            TypedValue right      = Evaluate(operation.Right, context);
            WhileType  resultType = CheckBinaryOperationTyping(operation.Operator, left.ValueType, right.ValueType);
            object     value      = null;

            switch (operation.Operator)
            {
            case BinaryOperator.ADD:
            {
                value = left.IntValue + right.IntValue;
                break;
            }

            case BinaryOperator.SUB:
            {
                value = left.IntValue - right.IntValue;
                break;
            }

            case BinaryOperator.MULTIPLY:
            {
                value = left.IntValue * right.IntValue;
                break;
            }

            case BinaryOperator.DIVIDE:
            {
                value = left.IntValue / right.IntValue;
                break;
            }

            case BinaryOperator.AND:
            {
                value = left.BoolValue && right.BoolValue;
                break;
            }

            case BinaryOperator.OR:
            {
                value = left.BoolValue || right.BoolValue;
                break;
            }

            case BinaryOperator.GREATER:
            {
                switch (left.ValueType)
                {
                case WhileType.BOOL:
                {
                    value = left.BoolValue == true && right.BoolValue == false;
                    break;
                }

                case WhileType.INT:
                {
                    value = left.IntValue > right.IntValue;
                    break;
                }

                case WhileType.STRING:
                {
                    value = left.StringValue.CompareTo(right.StringValue) == 1;
                    break;
                }

                default:
                {
                    value = false;
                    break;
                }
                }
                break;
            }

            case BinaryOperator.LESSER:
            {
                switch (left.ValueType)
                {
                case WhileType.BOOL:
                {
                    value = left.BoolValue == false && right.BoolValue == true;
                    break;
                }

                case WhileType.INT:
                {
                    value = left.IntValue < right.IntValue;
                    break;
                }

                case WhileType.STRING:
                {
                    value = left.StringValue.CompareTo(right.StringValue) == -1;
                    break;
                }

                default:
                {
                    value = false;
                    break;
                }
                }
                break;
            }

            case BinaryOperator.EQUALS:
            {
                switch (left.ValueType)
                {
                case WhileType.BOOL:
                {
                    value = left.BoolValue == right.BoolValue;
                    break;
                }

                case WhileType.INT:
                {
                    value = left.IntValue == right.IntValue;
                    break;
                }

                case WhileType.STRING:
                {
                    value = left.StringValue == right.StringValue;
                    break;
                }

                default:
                {
                    value = false;
                    break;
                }
                }
                break;
            }

            case BinaryOperator.DIFFERENT:
            {
                switch (left.ValueType)
                {
                case WhileType.BOOL:
                {
                    value = left.BoolValue != right.BoolValue;
                    break;
                }

                case WhileType.INT:
                {
                    value = left.IntValue != right.IntValue;
                    break;
                }

                case WhileType.STRING:
                {
                    value = left.StringValue != right.StringValue;
                    break;
                }

                default:
                {
                    value = false;
                    break;
                }
                }
                break;
            }

            case BinaryOperator.CONCAT:
            {
                value = left.StringValue + right.StringValue;
                break;
            }

            default:
            {
                value = null;
                break;
            }
            }
            return(new TypedValue(resultType, value));
        }
Exemplo n.º 3
0
 public void SetVariable(string name, TypedValue value)
 {
     variables[name] = value;
 }
Exemplo n.º 4
0
        private void Interprete(AssignStatement ast, InterpreterContext context)
        {
            TypedValue val = evaluator.Evaluate(ast.Value, context);

            context.SetVariable(ast.VariableName, val);
        }