Лексический анализ
На фазе лексического анализа (ЛА) входная программа, представляющая собой поток символов, разбивается на лексемы – слова в соответствии с определениями языка. Основным формализмом, лежащим в основе реализации лексических анализаторов, являются конечные автоматы и регулярные выражения. Лексический анализатор может работать в двух основных режимах:
• Как подпрограмма, вызываемая синтаксическим анализатором за очередной лексемой;
• Как полный проход, результатом которого является файл лексем.
В процессе выделения лексем ЛА может, как самостоятельно строить таблицы имен и констант, так и выдавать значения для каждой лексемы при очередном обращении к нему. В этом случае таблица имен строится совместно в нескольких фазах (например, в лексическом анализе делается попытка добавить новое имя, а синтаксический анализ разрешает или отвергает попытку и присваивает лексеме некоторые атрибуты, которые уточняются контекстным анализатором).
На этапе ЛА обнаруживаются некоторые (простейшие) ошибки (недопустимые символы, неправильная запись чисел, идентификаторов и др.).
Синтаксический анализ
Основная задача синтаксического анализа – разбор структуры программы. Как правило, под структурой понимается дерево, соответствующее разбору в
контекстно-свободной грамматике языка. В настоящее время чаще всего используется следующие виды анализа:
Рекурсивный спуск чаще используется при ручном программировании синтаксического анализатора
• LL(1)-анализ (и его вариант – рекурсивный спуск)
• LR(1)-анализ и его варианты (LR(0), SLR(1), LALR(1) и другие)., LR(1) – при использовании систем автоматизации построения синтаксических анализаторов.
• Анализ простого предшествования
Результатом синтаксического анализа является синтаксическое дерево со ссылками на таблицу имен. В процессе синтаксического анализа также обнаруживаются ошибки, связанные со структурой программы.
Контекстный анализ
На этапе контекстного анализа выявляются зависимости между частями программы, которые не могут быть описаны контекстно-свободным синтаксисом. Это в основном связи “описание-использование”, в частности анализ типов объектов, анализ областей видимости, соответствие параметров, метки и другие.
В процессе контекстного анализа строится таблица символов, которую можно рассматривать как таблицу имен, пополненную информацией об описаниях (свойствах) объектов. Основным формализмом, использующимся при контекстном анализе, являются атрибутные грамматики.
Результатом работы фазы контекстного анализа является снабженное атрибутами дерево разбора программы или.
Информация об объектах может быть, как рассредоточена в самом дереве, так и сосредоточена в отдельных таблицах символов. В процессе контекстного анализа также могут быть обнаружены ошибки, связанные с неправильным использованием объектов.
Похожие записи
No user прокомментировали сообщение
Оставить комментарий