Archived
1

Added the MPExpressionTree Classes

This commit is contained in:
Kim Wittenburg
2014-10-13 23:53:04 +02:00
parent 82259f87e2
commit 5592128926
60 changed files with 1981 additions and 725 deletions

View File

@@ -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