def scanObject(self, source): while Symbol.isCharacter(self.current_symbol): self.acceptSymbol(source) if Symbol.isSeparator(self.current_symbol): return Token(TokenType.OBJECT, self.symbol_buffer, self.start_position, self.current_position) pos_str = self.positionToString(self.current_position) raise ScanException('Error scanning object at %s.' % (pos_str) )
def scanFloat(self, source): while Symbol.isDigit(self.current_symbol): self.acceptSymbol(source) if Symbol.isSeparator(self.current_symbol): return Token(TokenType.FLOAT, self.symbol_buffer, self.start_position, self.current_position) elif Symbol.isExponent(self.current_symbol): self.acceptSymbol(source) if Symbol.isDash(self.current_symbol): self.acceptSymbol(source) while Symbol.isDigit(self.current_symbol): self.acceptSymbol(source) if Symbol.isSeparator(self.current_symbol): return Token(TokenType.FLOAT, self.symbol_buffer, self.start_position, self.current_position) pos_str = self.positionToString(self.current_position) raise ScanException('Error scanning float at %s.' % (pos_str) )
def scanDigit(self, source): while Symbol.isDigit(self.current_symbol): self.acceptSymbol(source) if Symbol.isDecimalPoint(self.current_symbol): return self.scanFloat(source) elif Symbol.isSeparator(self.current_symbol): return self.scanInt(source) else: pos_str = self.positionToString(self.current_position) raise ScanException('Error scanning digit at %s.' % (pos_str) )
def scanChar(self, source): while Symbol.isCharacter(self.current_symbol): self.acceptSymbol(source) if Symbol.isColon(self.current_symbol): return self.scanProperty(source) elif Symbol.isSeparator(self.current_symbol): return self.scanBool(source) else: pos_str = self.positionToString(self.current_position) raise ScanException('Error scanning character at %s.' % (pos_str) )
def scan(self, source): self.current_symbol, self.current_position = source.getNextSymbol() self.start_position = deepcopy( self.current_position ) while True: if Symbol.isComment(self.current_symbol): self.scanComment(source) elif Symbol.isSeparator(self.current_symbol): self.scanSeperator(source) elif Symbol.isEof(self.current_symbol): return None else: return self.scanToken(source)
def scanSeperator(self, source): while Symbol.isSeparator(self.current_symbol): self.current_symbol, self.current_position = source.getNextSymbol()