//
//  MPExpressionEvaluator.h
//  MathPad
//
//  Created by Kim Wittenburg on 31.08.14.
//  Copyright (c) 2014 Kim Wittenburg. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "MPExpression.h"
#import "MPElementParser.h"

@class MPExpressionEvaluator, MPExpression, MPParsedElement;

@interface MPExpressionEvaluator : NSObject

// Do not instanciate yourself, use evaluator property of MPExpression instead
- (instancetype)initWithExpression:(MPExpression *)expression;

@property (readonly, nonatomic, weak) MPExpression *expression;

#pragma mark Evaluating Expressions
@property (readonly, nonatomic, strong) NSDictionary *variableBindings;

- (void)bindValue:(NSDecimalNumber *)value toVariableName:(NSString *)name;
- (void)unbindVariableName:(NSString *)name;

- (NSDecimalNumber *)evaluateWithError:(MPParseError *__autoreleasing *)error;
- (NSDecimalNumber *)evaluateVariableDefinition:(BOOL)flag error:(MPParseError *__autoreleasing *)error;
@property (readonly, nonatomic, strong) NSString *definedVariable;

@end
