| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| from antlr4.CommonTokenFactory import CommonTokenFactory |
| from antlr4.Lexer import TokenSource |
| from antlr4.Token import Token |
|
|
|
|
| class ListTokenSource(TokenSource): |
| __slots__ = ('tokens', 'sourceName', 'pos', 'eofToken', '_factory') |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| def __init__(self, tokens:list, sourceName:str=None): |
| if tokens is None: |
| raise ReferenceError("tokens cannot be null") |
| self.tokens = tokens |
| self.sourceName = sourceName |
| |
| |
| |
| self.pos = 0 |
| |
| self.eofToken = None |
| |
| self._factory = CommonTokenFactory.DEFAULT |
|
|
|
|
| |
| |
| |
| @property |
| def column(self): |
| if self.pos < len(self.tokens): |
| return self.tokens[self.pos].column |
| elif self.eofToken is not None: |
| return self.eofToken.column |
| elif len(self.tokens) > 0: |
| |
| |
| lastToken = self.tokens[len(self.tokens) - 1] |
| tokenText = lastToken.text |
| if tokenText is not None: |
| lastNewLine = tokenText.rfind('\n') |
| if lastNewLine >= 0: |
| return len(tokenText) - lastNewLine - 1 |
| return lastToken.column + lastToken.stop - lastToken.start + 1 |
|
|
| |
| |
| return 0 |
|
|
| |
| |
| |
| def nextToken(self): |
| if self.pos >= len(self.tokens): |
| if self.eofToken is None: |
| start = -1 |
| if len(self.tokens) > 0: |
| previousStop = self.tokens[len(self.tokens) - 1].stop |
| if previousStop != -1: |
| start = previousStop + 1 |
| stop = max(-1, start - 1) |
| self.eofToken = self._factory.create((self, self.getInputStream()), |
| Token.EOF, "EOF", Token.DEFAULT_CHANNEL, start, stop, self.line, self.column) |
| return self.eofToken |
| t = self.tokens[self.pos] |
| if self.pos == len(self.tokens) - 1 and t.type == Token.EOF: |
| self.eofToken = t |
| self.pos += 1 |
| return t |
|
|
| |
| |
| |
| @property |
| def line(self): |
| if self.pos < len(self.tokens): |
| return self.tokens[self.pos].line |
| elif self.eofToken is not None: |
| return self.eofToken.line |
| elif len(self.tokens) > 0: |
| |
| |
| lastToken = self.tokens[len(self.tokens) - 1] |
| line = lastToken.line |
| tokenText = lastToken.text |
| if tokenText is not None: |
| line += tokenText.count('\n') |
|
|
| |
| return line |
|
|
| |
| |
| return 1 |
|
|
| |
| |
| |
| def getInputStream(self): |
| if self.pos < len(self.tokens): |
| return self.tokens[self.pos].getInputStream() |
| elif self.eofToken is not None: |
| return self.eofToken.getInputStream() |
| elif len(self.tokens) > 0: |
| return self.tokens[len(self.tokens) - 1].getInputStream() |
| else: |
| |
| return None |
|
|
| |
| |
| |
| def getSourceName(self): |
| if self.sourceName is not None: |
| return self.sourceName |
| inputStream = self.getInputStream() |
| if inputStream is not None: |
| return inputStream.getSourceName() |
| else: |
| return "List" |
|
|