Archived
1

Fixed Evaluation of Powers and Factorials.

Added Error Messages.
This commit is contained in:
Kim Wittenburg
2014-11-25 17:47:57 +01:00
parent b4111c69e4
commit 66d06cc0f1
2 changed files with 8 additions and 3 deletions

View File

@@ -371,7 +371,6 @@
self.value = term; self.value = term;
} }
} else if (self.currentToken.tokenType == MPPowerToken) { } else if (self.currentToken.tokenType == MPPowerToken) {
[self nextToken];
if (self.value) { if (self.value) {
NSArray *errors; NSArray *errors;
MPPowerTerm *term = [[MPPowerTerm alloc] initWithFunction:(MPFunction *)self.currentToken errors:&errors]; MPPowerTerm *term = [[MPPowerTerm alloc] initWithFunction:(MPFunction *)self.currentToken errors:&errors];
@@ -381,6 +380,7 @@
term.baseTerm = self.value; term.baseTerm = self.value;
self.value = term; self.value = term;
} }
[self nextToken];
} else { } else {
checkMore = NO; checkMore = NO;
} }
@@ -406,10 +406,15 @@
if (self.currentTokenIndex < self.tokens.count) { if (self.currentTokenIndex < self.tokens.count) {
if (self.errorTokenIndex >= self.tokens.count) { if (self.errorTokenIndex >= self.tokens.count) {
[self addErrorWithCode:0 localizedDescription:NSLocalizedString(@"Unexpected end. Expected Value.", nil)]; [self addErrorWithCode:0 localizedDescription:NSLocalizedString(@"Unexpected end. Expected Value.", nil)];
} else {
id<MPToken> unexpectedToken = self.tokens[self.errorTokenIndex];
if (unexpectedToken.tokenType == MPPowerToken) {
[self addErrorWithCode:34 localizedDescription:NSLocalizedString(@"No base for Power", nil)];
} else { } else {
[self addErrorWithCode:1 localizedDescription:NSLocalizedString(@"Unexpected Symbol. Expected Value", nil)]; [self addErrorWithCode:1 localizedDescription:NSLocalizedString(@"Unexpected Symbol. Expected Value", nil)];
} }
} }
}
return self.errors.count > 0; return self.errors.count > 0;
} }

View File

@@ -22,7 +22,7 @@
- (NSDecimalNumber *)doEvaluation:(NSError *__autoreleasing *)error - (NSDecimalNumber *)doEvaluation:(NSError *__autoreleasing *)error
{ {
NSDecimalNumber *value = [self.value evaluate:error]; NSDecimalNumber *value = [self.term evaluate:error];
if (!value) { if (!value) {
return nil; return nil;
} }