118
C.4. Описание модуля UniLEX
*
класс символов A, B, C - здесь входят символы, с которых могут начинаться
слова классов слов A, B, C, соответственно;
*
класс символов A
1
, B
1
, C
1
 - здесь входят символы, которые могут
содержаться в словах с второго до их последнего символа классов слов A,
B, C, соответственно;
*
класс символов D - здесь входят все разделители, которые пропускаются
(обычно - это пробел и табуляция);
*
класс символов E - здесь входят специальные символы - начало специального
слова, обрабатываемого программистом отдельно (обычно - это числа:
целые и вещественные).
При активизации TokenSearch сначала пропускаются все разделители (символы
входного потока, которые принадлежат классу D). Потом анализируется
(распознавается) лексема, следующая за разделителями. Результат функции
описывается перечисляемым типом TOKEN (лексема) и его константы имеют
следующий смысл:
*
InvalidCh - первый символ заданного входного потока не приналдежит ни
одному из возможных классов или никакое слово не было выделено
(символы класса C и C
1
, но нету зарезервированного слова в таблице класса
C);
*
UserCh - первый символ (за разделителями) заданного входного потока
принадлежит классу E (отдельно обрабатываемые программистом
лексемы);
*
EndBuff - нет ни одного символа в входном буфере, т.е. входной буфер
пустой или был дотигнутым его конец, потому что все символы оказались
разделителями и были пропущенными;
*
IdentA - получено слово класса A (невходящее в таблицу зарезервированных
слов класса A);
*
IdentB - получено слово класса B (невходящее в таблицу зарезервированных
слов класса B);
*
Akeyword - получено зарезервированное слово класса A (слово класса A,
входящее в таблицу зарезервированных слов класса A);
*
Bkeyword - получено зарезервированное слово класса B (слово класса B,
входящее в таблицу зарезервированных слов класса B);
*
Ckeyword - получено зарезервированное слово класса C (слова класса C
могут быть только зарезервированными, в противном случае они вообще
будут нераспознаваемыми и в качестве результата будет возвращена
лексема InvalidCh).
 Пример: если указано, что символы ':' и '=' принадлежат классам C и C
1
, но в
таблице записана только пара ':=', то эти два символа распознаваемы только как пара.
 Если нет разделителя между несколькими последовательными символами
символьного класса C
1
, результатом будет максимально длинное слово. Например,
если '+' и '++' находятся в таблице зарезервированных слов класса C и входной поток
содержит +++, первое обращение к TokenSearch выдает результат ++ (а не +++), а
второе выдает +;
Пример: Пусть символы принадлежать классам как следует: A..Z классам A и
A
1
; цифры 0..9 классам A1 и E; '*', '+' и '-' классам B и B
1
; пробел и табуляция классу
D; ',' классу C, ':' и '=' классам C и C
1
. Тогда можно распознавать лексемы:
<<  <  GO  >  >>

Вернуться к началу сайта