Added the MPExpressionTree Classes
This commit is contained in:
@@ -14,7 +14,6 @@
|
||||
#import "MPException.h"
|
||||
|
||||
#import "MPExpressionTokenizer.h"
|
||||
#import "MPExpressionEvaluator.h"
|
||||
#import "MPToken.h"
|
||||
|
||||
|
||||
@@ -55,6 +54,11 @@
|
||||
return [self initWithElements:@[]];
|
||||
}
|
||||
|
||||
- (instancetype)initWithExpressionTree:(MPExpressionTree *)expressionTree
|
||||
{
|
||||
return [self initWithElements:expressionTree.expressionElements];
|
||||
}
|
||||
|
||||
- (instancetype)initWithElement:(id<MPExpressionElement>)element
|
||||
{
|
||||
return [self initWithElements:@[element]];
|
||||
@@ -518,13 +522,22 @@
|
||||
|
||||
#pragma mark Evaluating Expressions
|
||||
|
||||
|
||||
- (NSDecimalNumber *)evaluateWithError:(MPParseError *__autoreleasing *)error
|
||||
{
|
||||
MPExpressionEvaluator *evaluator = [[MPExpressionEvaluator alloc] initWithExpression:self];
|
||||
MPTerm *term = [evaluator parseExpectingVariable:NO
|
||||
error:error];
|
||||
return [term evaluate];
|
||||
MPExpressionTree *tree = [self parse];
|
||||
if ([tree validate:error]) {
|
||||
return [tree evaluate];
|
||||
}
|
||||
if (error) {
|
||||
(*error).pathToExpression = self.indexPath;
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (MPExpressionTree *)parse
|
||||
{
|
||||
MPTokenStream *tokenStream = [[MPTokenStream alloc] initWithTokens:self.tokens];
|
||||
return [[MPExpressionTree alloc] initWithTokenStream:tokenStream];
|
||||
}
|
||||
|
||||
#pragma mark Notifications
|
||||
|
||||
Reference in New Issue
Block a user