// // MPNumber.m // MathPad // // Created by Kim Wittenburg on 09.10.14. // Copyright (c) 2014 Kim Wittenburg. All rights reserved. // #import "MPNumber.h" @implementation MPNumber { NSRange _range; } - (instancetype)init { self = [super init]; if (self) { } return self; } - (instancetype)initWithTokenStream:(MPTokenStream *)tokenStream { self = [self init]; if (self) { [tokenStream beginIgnoringWhitespaceTokens]; MPToken *token = tokenStream.currentToken; if (token.tokenType == MPNumberToken) { self.number = [NSDecimalNumber decimalNumberWithString:token.stringValue locale:[NSLocale currentLocale]]; _range = token.range; } else { @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Expected Number" userInfo:nil]; } [tokenStream currentTokenConsumed]; [tokenStream endIgnoringOrAcceptingWhitespaceTokens]; } return self; } - (NSRange)range { return _range; } - (BOOL)validate:(MPParseError *__autoreleasing *)error { return YES; } - (NSDecimalNumber *)evaluate { return self.number; } - (NSArray *)expressionElements { return @[[self.number descriptionWithLocale:[NSLocale currentLocale]]]; } @end