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