1#======================================================================= 2# 3# Python Lexical Analyser 4# 5# Exception classes 6# 7#======================================================================= 8 9 10class PlexError(Exception): 11 message = "" 12 13 14class PlexTypeError(PlexError, TypeError): 15 pass 16 17 18class PlexValueError(PlexError, ValueError): 19 pass 20 21 22class InvalidRegex(PlexError): 23 pass 24 25 26class InvalidToken(PlexError): 27 def __init__(self, token_number, message): 28 PlexError.__init__(self, "Token number %d: %s" % (token_number, message)) 29 30 31class InvalidScanner(PlexError): 32 pass 33 34 35class AmbiguousAction(PlexError): 36 message = "Two tokens with different actions can match the same string" 37 38 def __init__(self): 39 pass 40 41 42class UnrecognizedInput(PlexError): 43 scanner = None 44 position = None 45 state_name = None 46 47 def __init__(self, scanner, state_name): 48 self.scanner = scanner 49 self.position = scanner.get_position() 50 self.state_name = state_name 51 52 def __str__(self): 53 return ("'%s', line %d, char %d: Token not recognised in state %r" % ( 54 self.position + (self.state_name,))) 55