lexbase
Этот модуль реализует базовый объект лексического анализатора с эффективной обработкой буфера. Проверки на необходимость дозагрузки буфера необходимы только в конце строк.
Импорты
- strutils, streams
Типы
BaseLexer = object of RootObj bufpos*: int ## the current position within the buffer buf*: string ## the buffer itself input: Stream ## the input stream lineNumber*: int ## the current line number sentinel: int lineStart: int offsetBase*: int refillChars: set[char]
- базовый лексический анализатор. Наследуйте свой лексический анализатор от этого объекта. Исходный код Редактировать
Константы
EndOfFile = '\x00'
- маркер конца файла Исходный код Редактировать
NewLines = {'\c', '\n'}- Исходный код Редактировать
Процедуры
proc close(L: var BaseLexer) {...}{.raises: [Exception, IOError, OSError], tags: [WriteIOEffect].}- закрывает базовый лексический анализатор. Это также закрывает связанный поток
L. Исходный код Редактировать proc handleCR(L: var BaseLexer; pos: int): int {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}- Вызовите эту функцию, если вы просканировали символ 'c' в буфере; она возвращает позицию для продолжения сканирования.
posдолжна быть позицией символа 'c'. Исходный код Редактировать proc handleLF(L: var BaseLexer; pos: int): int {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}- Вызовите эту функцию, если вы просканировали символ 'L' в буфере; она возвращает позицию для продолжения сканирования.
posдолжна быть позицией символа 'L'. Исходный код Редактировать proc handleRefillChar(L: var BaseLexer; pos: int): int {...}{. raises: [IOError, OSError], tags: [ReadIOEffect].}- Вызовите эту функцию, если символ-разделитель, отличный от новой строки, был прочитан в
pos; она возвращает позицию для продолжения сканирования. Исходный код Редактировать proc open(L: var BaseLexer; input: Stream; bufLen: int = 8192; refillChars: set[char] = NewLines) {...}{.raises: [IOError, OSError], tags: [ReadIOEffect].}- Инициализирует BaseLexer с потоком для чтения. Исходный код Редактировать
proc getColNumber(L: BaseLexer; pos: int): int {...}{.raises: [], tags: [].}- Возвращает текущую колонку. Исходный код Редактировать
proc getCurrentLine(L: BaseLexer; marker: bool = true): string {...}{.raises: [], tags: [].}- Возвращает текущую строку. Исходный код Редактировать
© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/lexbase.html