Определение структур данных 'uTable.Pas'
Глобальные переменные, используемые при анализе
attrs: TStringStack; // Стек атрибутов
numvar: byte; // Номер переменной в таблице, если текущий символ - переменная
numconst: byte; // Номер константы в таблице, если текущий символ - константа
numtype: byte; // Номер типа в таблице, если текущий символ - тип
numlabel: byte; // Номер метки в таблице, если текущий символ - метка
numstr:byte; // Номер строки в таблице, если текущий символ - строка
number: longint; // Номер
curtab: byte; // Номер текущей таблицы
Структуры используемые при анализе:
Стек, элементы которого целые числа или строки из 4-х символов.
TStringStack = class(TStack) // Класс наследуемый от стандартного класса TStack
Empty: boolean; // Признак пустого стека
constructor Create; // Конструктор (инициализация)
function UpperStr: string; // Считывает верхний символ стека, без выталкивания (строка)
function Upperint: integer; // Считывает верхний символ стека, без выталкивания (целое)
function Popstr: string; // Выталкивает символ из стека (строку)
procedure Push(s: string); overload; // Помещает символ в стек (строку)
function Popint: integer; // Выталкивает символ из стека (целое)
procedure Push(s: integer); overload; // Помещает символ в стек (целое)
procedure Clear; // Очищает стек, без уничтожения.
end;
Остальные используемые методы являются наследуемыми от класса TStack
Описание класса TStack
Элементами класса являются элементы типа Pointer.
Имеются стандартные методы push, pop, Create, Free.
procedure TfmTable.LoadTable (var sgF1, sgG1: TStringGrid; var mmRules1: TMemo; var Rules1: TStringList; CountOfRule1: word; FN: string);
Входной параметр: FN – имя файла
Выходные параметры: Таблица переходов, управляющая таблица, список правил, число правил
Загрузка управляющей таблицы.
procedure TfmTable.ChangeTables(n: byte); // загрузить соответствующую управляющую таблицу
//n=0 основную
//n=1 оператор
//n=2 выражение
function FindCol(var sg: TStringGrid; lex: string): byte;
Поиск элемента lex в заголовках столбцов в таблице sg
выходной параметр – номер столбца
function FindRow(var sg: TStringGrid; slex: string): byte;
Поиск элемента slex в заголовках строк в таблице sg
выходной параметр – номер строки
function GetLex(s: string; var begi: integer): string;
Считывание очередной лексемы с входного потока.
Входные параметры: s – входной поток лексем, begi – индекс, с которого начинается считывание
Выходные параметры begi – индекс, которым заканчивается считывание, лексема.
Алгоритм
Считывается лексема, пока не разделитель.
Если встречается символ переключения грамматики, то происходит переключение грамматики, запуск анализа для грамматики, в случае успешного анализа, происходит обратное переключение на грамматику.
function TfmTable.Analys(s: string; var i: integer): boolean;
Анализ входного потока
Входные параметры s – входной поток лексем i- индекс с которого начинается анализ.
Выходные параметры, i- индекс которым заканчивается анализ; результат анализа. (true, false)
Алгоритм:
Алгоритм приведен на диаграмме работы синтаксического анализа.