Invalid Numbers Are Now a Syntax Error
Syntax Errors Now Include a Range Syntax Errors Are Now Displayed in a Selectable List
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
#import "MPFactorialTerm.h"
|
||||
|
||||
#define success() state = 0
|
||||
#define fail() state = -1
|
||||
#define fail() self.errorTokenIndex = self.currentTokenIndex; state = -1
|
||||
|
||||
@interface MPExpressionParser ()
|
||||
|
||||
@@ -85,13 +85,13 @@
|
||||
if (flag && hasVariableDefinition) {
|
||||
result.definedVariable = variableName;
|
||||
} else if (flag) {
|
||||
[self addErrorWithCode:3 localizedDescription:NSLocalizedString(@"Expected Variable Definition.", nil)];
|
||||
[self addErrorWithCode:3 localizedDescription:NSLocalizedString(@"Expected Variable Definition.", nil) useRange:NO];
|
||||
if (errors) {
|
||||
*errors = self.errors;
|
||||
}
|
||||
return nil;
|
||||
} else if (hasVariableDefinition) {
|
||||
[self addErrorWithCode:4 localizedDescription:NSLocalizedString(@"Unexpected Variable Definition.", nil)];
|
||||
[self addErrorWithCode:4 localizedDescription:NSLocalizedString(@"Unexpected Variable Definition.", nil) useRange:NO];
|
||||
if (errors) {
|
||||
*errors = self.errors;
|
||||
}
|
||||
@@ -102,7 +102,7 @@
|
||||
|
||||
[self skipWhitespaces];
|
||||
if (self.currentTokenIndex >= self.tokens.count) {
|
||||
[self addErrorWithCode:5 localizedDescription:NSLocalizedString(@"Empty Expression.", nil)];
|
||||
[self addErrorWithCode:5 localizedDescription:NSLocalizedString(@"Empty Expression.", nil) useRange:NO];
|
||||
if (errors) {
|
||||
*errors = self.errors;
|
||||
}
|
||||
@@ -173,6 +173,7 @@
|
||||
}
|
||||
state = 6;
|
||||
} else {
|
||||
self.value = nil;
|
||||
state = 4;
|
||||
}
|
||||
break;
|
||||
@@ -191,7 +192,6 @@
|
||||
[self.valueGroup addObject:self.value];
|
||||
state = 5;
|
||||
} else {
|
||||
self.errorTokenIndex = self.currentTokenIndex;
|
||||
fail();
|
||||
}
|
||||
break;
|
||||
@@ -376,9 +376,10 @@
|
||||
MPPowerTerm *term = [[MPPowerTerm alloc] initWithFunction:(MPFunction *)self.currentToken errors:&errors];
|
||||
if (!term) {
|
||||
[self.errors addObjectsFromArray:errors];
|
||||
} else {
|
||||
term.baseTerm = self.value;
|
||||
self.value = term;
|
||||
}
|
||||
term.baseTerm = self.value;
|
||||
self.value = term;
|
||||
}
|
||||
[self nextToken];
|
||||
} else {
|
||||
@@ -389,15 +390,22 @@
|
||||
|
||||
- (void)addErrorWithCode:(NSInteger)code
|
||||
localizedDescription:(NSString *)description
|
||||
useRange:(BOOL)flag
|
||||
{
|
||||
NSInteger errorIndex = [self.expression convertIndex:self.errorTokenIndex
|
||||
fromReferenceFrame:MPTokenReferenceFrame
|
||||
toReferenceFrame:MPSymbolReferenceFrame];
|
||||
NSRange errorRange;
|
||||
if (flag) {
|
||||
errorRange = [self.tokens[self.errorTokenIndex] range];
|
||||
} else {
|
||||
NSInteger errorIndex = [self.expression convertIndex:self.errorTokenIndex
|
||||
fromReferenceFrame:MPTokenReferenceFrame
|
||||
toReferenceFrame:MPSymbolReferenceFrame];
|
||||
errorRange = NSMakeRange(errorIndex, 0);
|
||||
}
|
||||
[self.errors addObject:[NSError errorWithDomain:MPMathKitErrorDomain
|
||||
code:code
|
||||
userInfo:@{NSLocalizedDescriptionKey: description,
|
||||
MPPathToExpressionKey: self.expression.indexPath,
|
||||
MPErrorIndexKey: @(errorIndex)}]];
|
||||
MPErrorRangeKey: [NSValue valueWithRange:errorRange]}]];
|
||||
}
|
||||
|
||||
- (BOOL)errorOccured
|
||||
@@ -405,13 +413,15 @@
|
||||
[self skipWhitespaces];
|
||||
if (self.currentTokenIndex < 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) useRange:NO];
|
||||
} else {
|
||||
id<MPToken> unexpectedToken = self.tokens[self.errorTokenIndex];
|
||||
if (unexpectedToken.tokenType == MPPowerToken) {
|
||||
[self addErrorWithCode:34 localizedDescription:NSLocalizedString(@"No base for Power", nil)];
|
||||
[self addErrorWithCode:34 localizedDescription:NSLocalizedString(@"No base for Power", nil) useRange:NO];
|
||||
} else if (unexpectedToken.tokenType == MPDeformedNumberToken) {
|
||||
[self addErrorWithCode:42 localizedDescription:NSLocalizedString(@"Not a Number", nil) useRange:YES];
|
||||
} else {
|
||||
[self addErrorWithCode:1 localizedDescription:NSLocalizedString(@"Unexpected Symbol. Expected Value", nil)];
|
||||
[self addErrorWithCode:1 localizedDescription:NSLocalizedString(@"Unexpected Symbol. Expected Value", nil) useRange:NO];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user