| |
| |
| |
| |
| |
|
|
|
|
| |
| |
| |
| from antlr4.Token import Token |
|
|
|
|
| class InputStream (object): |
| __slots__ = ('name', 'strdata', '_index', 'data', '_size') |
|
|
| def __init__(self, data: str): |
| self.name = "<empty>" |
| self.strdata = data |
| self._loadString() |
|
|
| def _loadString(self): |
| self._index = 0 |
| self.data = [ord(c) for c in self.strdata] |
| self._size = len(self.data) |
|
|
| @property |
| def index(self): |
| return self._index |
|
|
| @property |
| def size(self): |
| return self._size |
|
|
| |
| |
| |
| |
| def reset(self): |
| self._index = 0 |
|
|
| def consume(self): |
| if self._index >= self._size: |
| assert self.LA(1) == Token.EOF |
| raise Exception("cannot consume EOF") |
| self._index += 1 |
|
|
| def LA(self, offset: int): |
| if offset==0: |
| return 0 |
| if offset<0: |
| offset += 1 |
| pos = self._index + offset - 1 |
| if pos < 0 or pos >= self._size: |
| return Token.EOF |
| return self.data[pos] |
|
|
| def LT(self, offset: int): |
| return self.LA(offset) |
|
|
| |
| def mark(self): |
| return -1 |
|
|
| def release(self, marker: int): |
| pass |
|
|
| |
| |
| |
| def seek(self, _index: int): |
| if _index<=self._index: |
| self._index = _index |
| return |
| |
| self._index = min(_index, self._size) |
|
|
| def getText(self, start :int, stop: int): |
| if stop >= self._size: |
| stop = self._size-1 |
| if start >= self._size: |
| return "" |
| else: |
| return self.strdata[start:stop+1] |
|
|
| def __str__(self): |
| return self.strdata |
|
|