Приложение C. Описание стандартных модулей
119
*
слова класса A: последовательность символов A..Z и 0..9, начинающаяся с
одного из символов A..Z и оканчивающаяся символом, предшествующим
символу, отличающемуся от  A..Z,  0..9. Эти слова нам знакомы как
идентификаторы языка Pascal. Например, COUNTER, WORD, LIST1, A1, B52
и т.д. Если для класса слов A дана и таблица зарезервированных слов, то те
слова, которые попадают в таблице, будут определены как
зарезервированные слова класса A, а не как обычные слова;
*
слова класса B: последовательность символов: * + -. Например, * + - ** ++
-- *+ +- и т.д. Аналогическим образом (как класс A) можно задать таблицу
зарезервированных слов класса B;
*
слова класса C. На основании определения классов символов нельзя
определить какие слова принадлежат классу C. Необходима еще таблица
возможных слов класса C. Если в эту таблицу дефинированы ',' ':=' '=='
'=', то их распознавание становится возможным. Например, если входной
поток следующий: ',,,:====', будут выделены следующие лексемы: три
раза 'запятая', последованные словами ':='  '=='  '=', независимо от того,
что между ними нет пробелов;
*
начало специальной последовательности класса E, если встретится символ
от 0 до 9, непринадлежащий слову класса A.
*
все пробелы и табуляции будут пропущены, потому что принадлежат классу
D.
Пусть входной поток следующий:
LIST1:==++A-B C D,,E1 123 C
Тогда каждым вызовом TokenSearch будут распозаты последовательно
следующие лексемы (в скобках даются их имена):
A-слово(LIST1) C-слово(:=) C-слово(=) B-слово(++) A-слово(A) B-слово(-) A-слово(B) A-
слово(C) A-слово(D) C-слово(,) C-слово(,) A-слово(E1) E-символ(если обработать полностью,
можно распознать число 123) A-слово(C)
Правила распознавания лексем, входной поток (буфер) и таблица
зарезервированных слов задаются параметром типа структуры. Поля этой структуры
имеют следующий смысл:
*
IdName: указатель к переменной типа STRING максимальной длиной не
меньше значения, записанного в поле IdSize. Значение IdName^ при
активировании TokenSearch не указывает влияния. В это поле она записывает
имя выделенного слова класса A или B;
*
IdSize: максимальное число значащих символов имени класса A или B. Если
слово длиннее, слово анализируется полностью, но в IdName^ записываются
только первые IdSize символов. Не меняется функцией TokenSearch;
*
flags: байт, каждый бит которого имеет специфическое предназначение.
Функция TokenSearch меняет содержимое только бита 0. (Все остальные
биты остаются без изменения.):
°
бит 0 - при активизировании TokenSearch не имеет значения. Если
TokenSearch достигнула конца буфера, она устанавливает этот бит в 1,
иначе - 0. Например, пусть происходит анализ входного текста BEGIN.
После распознавания лексемы бит 0 будет иметь содержимое 1, если
BEGIN находился в конце буфера, и 0 - в противном случае;
<<  <  GO  >  >>

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