Эффективность этапа лексического анализа не в последнюю очередь определяется правильностью разбиения лексем входной программы на классы. Причем эти классы не должны пересекаться. В ходе сканирования каждый входной терминальный символ (лексема) должен быть отнесен к одному из классов. Как мы уже отмечали выше, для грамматики псевдоязыка можно определить следующие классы лексем:
- идентификаторы — ID;
- ключевые слова - ПРОГРАММА, ПЕРЕМЕННЫЕ, НАЧ_ПРОГ, КОНПРОГ, НАЧ_БЛОК, КОН БЛОК, REAL, INTJYTE, INT_WORD, INT_DWORD, DIV, MOD, ЧИТАТЬ, ПИСАТЬ, ДЛЯ, ДОДЕЛАТЬ, ПОКА, ДОВНИЗ, ЕСЛИ, ЕСЛИ, ДО, ТО, ПЕРЕЙТИ_НА, ПОВТОРИТЬ;
- целые числа — CH_INT;
«Навешивание» семантики на дуги «склеенного» конечного автомата
В ходе распознавания (перехода по дугам) требуется выполнять
различные действия, например поиск соответствия введенной лексемы
ключевому слову в таблице ключевых слов, поиск идентификатора в таблице
идентификаторов, преобразования чисел и т. д. Поэтому на этом шаге
необходимо определить набор переменных и состав процедур, работающих во
время переходов из состояния в состояние (на дугах).
Все... После этого можно программировать сканер. В главе 10,
посвященной командам ММХ- и ХММ-расширений, нами будет выполнена
практическая работа в этом направлении.