Приложение C. Описание стандартных модулей
121
каждому из которых предшествует один байт, определяющий число
символов этого слова. Конец таблицы определяется байтом с нулевым
содержимым. Например, если таблица должна содержать
зарезервированные слова BEGIN, END, IF, THEN и ELSE, и декларирована как
упакованный массив символов, то ей можно присвоить значение #5'BEGIN'
#3'END' #2'IF' #4'THEN' #5'ELSE' #0;
*
ClassBkw: указатель таблицы зарезервированных слов класса B. Ее формат
тот же самый как формат таблицы ClassAkw^;
*
ClassCkw: указатель таблицы зарезервированных слов класса B. Ее формат
тот же самый как формат таблицы ClassAkw^;
Для удобства экспортируются константы, которыми легче установит состояние
флагов и принадлежность классам. Константы следующие:
*
Class_D =
$01;
{ класс D, разделители }
*
Class_C =
$02;
{класс C (только из зарезервированных слов)}
*
Class_E =
$04;
{ класс E, обрабатываемый програмистом }
*
Class_A =
$08;
{ класс A }
*
Class_B =
$10;
{ класс B }
*
Class_A1 =
$20;
{ класс A
1
 }
*
Class_B1 =
$40;
{ класс B
1
 }
*
Class_C1 =
$80;
{ класс C
1
 }
*
flag_EOB =
$01;
{ достигнут ли конец буфера }
*
flag_CKC =
$02;
{ Case insensitive for Keywords (Cyr) }
*
flag_CKL =
$04;
{ Case insensitive for Keywords (Lat) }
*
flag_CCC =
$08;
{ Correct Case for identifiers (Cyr) }
*
flag_CCL =
$10;
{ Correct Case for identifiers (Lat) }
*
flag_LC =
$20;
{ Do case correction by LowCase }
*
flag_ASCII=
$80;
{ use ASCII code only (#0..#127) }
Их использование проиллюстрируем следующим примером. Пусть хотим
дефинировать все буквы латинского алфавита как принадлежащие классам A и A
1
,
буквы - кириллицы классам B и B
1
 и цифры - классам E и A
1
. Тогда можем записать во
все байты-дефиниции принадлежности всех букв латинского алфавита выражение
Class_A + Class_A1, всех букв кириллицы - Class_B + Class_B1 и всех цифр - Class_E +
Class_A1.
Кроме основной функции лексического анализа модуль UniLEX экспортирует
еще несколько процедур:
function GetInteger(const S; i:word; l:word; var E:word): LongInt;
Действие: Задачей GetInteger является преобразование символьного представления целого
числа (подчиненного синтаксису языка UniPascal) в соответствующее ему
внутреннее. Другими словами, считывает целое число, но не с текстового
файла, а с заданного буфера. Ее параметры следующие: S - входной буфер, i -
начальный индекс в нем, l - максимальное число байтов, которые подлежать
анализе, с i-го элемента буфера. Параметром-переменной E возвращается
число анализированных цифр. Функцией IOresult возвращается значение 0 при
правильно записанном числе (нет ошибок) и значение 144 при обнаружении
ошибки. Не считается ошибкой ситуация, при которой в буфере записано
правильное представление числа, последованного каким либо другим
<<  <  GO  >  >>

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