SInput

2.2.2017 14:43

Библиотека com/teacode/sinput

Библиотека предоставляет продвинутые инструменты для парсинга строк с возможностью организации точек выбора и бэктрэкинга в случае неправильного выбора.

Точка выбора позволяет восстановить состояние парсера в случае неверного выбора направления. Так точка выбора ставится:

  fix cppos = input.cp
Здесь input – структура типа Input. Состояние восстанавливается следующим образом:

  input.bt(cppos)

Базовые операции

def Input(s:String!):Input!

def Input bt(pos0:Int!)

Делает возврат к позиции pos0. Восстанавливает все параметры парсера, соответствующие этой позиции (номер строки, столбца, позиция последнего перевода строки и т.д.).

Возвращает значение pos0.

def Input failure(pos0:Int!)

Действует аналогично bt/1, но возвращает ().

def Input ch:String!

def Input next: Input?

def Input nextspace: Input?

def Input nextspaceln: Input?

def Input prev:String?

Фильтры и условия

def Input numeric?

def Input space?

def Input spaceln?

def Input letter?

def Input firstChar?

def Input lastChar?

Ридеры

def Input readstring(str: String!): String?

def Input skipspace: Input!

def Input read(c:String!): Input?

Читает одиночный символ c. Если текущим символом является c, то переводит указатель текущего на следующий символ и возвращает свой контекст (this). В противном случае не изменяет состояния и возвращает ().

Input skipspaceln: Input!

def Input skipline: Input!

Пропускает строчку. Оставляет текущим символ перевода строки eol или конца файла eof.

def Input readline: String!

Считывает строчку. Оставляет текущим символ перевода строки eol или конца файла eof.

def Input readid: String?

def Input readid(extra:String*): String?

def Input readnumber(basis:Int!): Int?

def Input lookahead(s: String!): Unit?

Проверка, начинается ли с текущей позиции подстрока s (считывание без сдвига позиции).

def Input param(key: String!, vals:Any*):Input!

Задание значения пользовательского параметра. Возвращает объект Input из контекста.

def Input param(key: String!): Dyn**

Получение значения пользовательского параметра.

def Input addparam(key: String!, vals:Any*):Input!

Добавление значения к пользовательскому параметру. Возвращает объект Input из контекста.

Вспомогательные

def eof: String!

Символ конца строки. Проверка на конец строки:

  input.ch == sinput/eof

def Input digit: Int?

def Input segment(beg:Int!)*

def Input segment(beg:Int!, end:Int!)*

def Input left:Int!

def Input top:Int!

def Input nl1:Int!

Позиция последней новой строчки. Равна -1, если не существует.

def Input nl2:Int!

Позиция предпоследней новой строчки. Равна -1, если не существует.

def Input nl3:Int!

Позиция пред-предпоследней новой строчки. Равна -1, если не существует.

def Input buffer:String*

Получение текущего состояния буфера.

def Input buffer(s:String!): Input!

Добавление строки в буфер.

def Input bufferStart

Очищение буфера.

Дополнительные операции для строк

 
Парсер XML