Archived
1

Fundamental Redesign of Evaluation

This commit is contained in:
Kim Wittenburg
2014-11-24 22:42:44 +01:00
parent 10f0e73ad3
commit 7a32e3b0b6
45 changed files with 1398 additions and 350 deletions

View File

@@ -8,44 +8,24 @@
#import "MPNumber.h"
#import "MPParsedExpression.h"
#import "MPTokenStream.h"
#import "MPToken.h"
@implementation MPNumber
- (instancetype)init
- (instancetype)initWithNumber:(NSDecimalNumber *)number
{
self = [super init];
if (self) {
NSAssert(number != nil, @"number must not be nil.");
_number = number;
}
return self;
}
- (instancetype)initWithTokenStream:(MPTokenStream *)tokenStream
{
self = [self init];
if (self) {
[tokenStream beginIgnoringWhitespaceTokens];
MPToken *token = tokenStream.currentToken;
if (token.tokenType == MPNumberToken) {
_number = [NSDecimalNumber decimalNumberWithString:token.stringValue locale:[NSLocale currentLocale]];
} else {
@throw [NSException exceptionWithName:NSInternalInconsistencyException
reason:@"Expected Number"
userInfo:nil];
}
[tokenStream currentTokenConsumed];
[tokenStream endIgnoringOrAcceptingWhitespaceTokens];
}
return self;
}
- (BOOL)validate:(NSError *__autoreleasing *)error
{
return YES;
}
- (NSDecimalNumber *)evaluate
- (NSDecimalNumber *)doEvaluation:(NSError *__autoreleasing *)error
{
return self.number;
}