Пример #1
0
 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) )
Пример #2
0
 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) )
Пример #3
0
 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) )
Пример #4
0
 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) )
Пример #5
0
 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)
Пример #6
0
 def scanSeperator(self, source):
     while Symbol.isSeparator(self.current_symbol):
         self.current_symbol, self.current_position = source.getNextSymbol()