Этот модуль реализует базовый объект лексического анализатора с эффективной обработкой буфера. Проверки на необходимость заполнения буфера требуются только в конце строк.
BaseLexer = object of RootObj
bufpos*: int ## the current position within the buffer
buf*: string ## the buffer itself
## the input stream
lineNumber*: int ## the current line number
offsetBase*: int
базовый лексический анализатор. Наследуйте ваш лексический анализатор от этого объекта. SourceEdit
proc handleCR(L: var BaseLexer; pos: int): int {....raises: [IOError, OSError],
tags: [ReadIOEffect], forbids: [].}
Вызовите эту функцию, если вы просканировали '\c' в буфере; она возвращает позицию для продолжения сканирования. pos должна быть позицией '\c'. SourceEdit
proc handleLF(L: var BaseLexer; pos: int): int {....raises: [IOError, OSError],
tags: [ReadIOEffect], forbids: [].}
Вызовите эту функцию, если вы просканировали '\L' в буфере; она возвращает позицию для продолжения сканирования. pos должна быть позицией '\L'. SourceEdit
proc handleRefillChar(L: var BaseLexer; pos: int): int {.
...raises: [IOError, OSError], tags: [ReadIOEffect], forbids: [].}
Вызовите эту функцию, если был просканирован символ-терминатор, отличный от новой строки, в позиции pos; она возвращает позицию для продолжения сканирования. SourceEdit