- под буквой понимается русская или латинская буква, а также цифра. Цифра считается заглавной буквой.
- один знак подчёркивания, с двух сторон граничащий с буквой или цифрой, является лексемой типа "белое поле";
- любая последовательность пробелов, табуляций, переносов строки (CR/LF т.е. ВК/ПС) является лексемой типа «Белое поле»;
- аббревиатура: последовательность из более чем одной заглавной буквы (или цифры), перед которой находится не заглавная буква (цифра), и за которой идёт не заглавная буква (цифра) - она является лексемой типа «Слово»;
- обычное слово: последовательность из букв(цифр), перед которой не буква, и у которой последующие символы - прописные буквы, считается лексемой типа «Слово»;
- слово-продолжение: последовательность, следующая за лексемой типа «Слово», начинающаяся с буквы (или цифры), продолжающаяся строчными буквами и за которой идёт либо вообще не буква, либо буква в верхнем регистре (или цифра), также считается лексемой типа «Слово»
- любой другой символ образует односимвольную лексему
- знаки препинания, допустимые в идентификаторе, сразу преобразуются в те знаки, которые они заменяют.
- символ с кодом 0 - тоже однобуквенная лексема (это нужно для бинарных файлов, содержащих текстовые фрагменты)
Примеры (сначала идёт строка, потом метазнак =>, потом лексемы строки, разделённые пробелами. Лексемы типа «Белое поле» обозначаются словом "ПРОБЕЛ"
Код: Выделить всё
(* это комментарий*)
=>
( * ПРОБЕЛ это ПРОБЕЛ комментарий * )
3.14
=>
3 . 14
аЗачемЭтоЗатеяли¿
=>
а Зачем Это Затеяли ¿
Код: Выделить всё
Языки˛сделанныеВ_СССР˛до1966года
=>
языки ˛ сделанные В СССР ˛ до 1966 года
"строковой литерал\n"
=>
" строковой ПРОБЕЛ литерал \ n "
- все буквы приводятся к нижнему регистру
- знаки в парах «¿» и «?», «˛» и «,» «!» и «¡», «ˉ» и «-» считаются одинаковыми
- все лексемы с пробелами выкидываются.
- метасимвол «☼» в рамках слова означает меняющееся окончание слова; пока неясно, как именно тут сопоставлять, и выработка решения по этому вопросу будет самой сложной частью, но которую пока откладываем; поэтому ☼ означает произвольные буквы в количестве от 0 до 2.
Успехом поиска является совпадение последовательности лексем, полученных из искомой строки, с подпоследовательностью лексем, полученных из файла. Предлагаю осуждать.