7.2.1 Программная реализация отдельных автоматов
Каждый автомат представлен соответствующей процедурой
(функцией), осуществляющей имитацию переходов от начального
состояния к одному из заключительных. Разметка диаграмм Вирта,
соответствующая состояниям конечного автомата, была описана ранее.
Принципы программной реализации в общем случае тоже достаточно
просты:
– каждому состоянию ставится в соответствие метка;
– анализируемые альтернативы проверяются условными
операторами (они подходят лучше переключателей из-за того, что
проверяться могут значения символов и их классы);
– если результат проверки является истиной, проводится
обработка контекста, берется следующий символ и осуществляется
переход на новую метку (в новое состояние);
– процесс повторяется до тех пор, пока не произойдет переход в
одно заключительных состояний.
Данная реализация активно использует оператор безусловного
перехода goto вследствие того, что диаграмма Вирта в общем случае
является неструктурированным графом. А такие графы невозможно
представить без goto, если только не осуществить соответствующие
преобразования. Применение же этих преобразований может снизить
наглядность исходных диаграмм и привести к их избыточности.
7.2.3 Общая структура непрямого лексического анализатора
В завершение всего можно привести объединенную диаграмму
Вирта, определяющую взаимосвязи между отдельными, ранее
представленными автоматами (см. Рисунок 5.3). На ней отражается
альтернативный порядок следования разбираемых лексем с учетом
приоритетов, определяемых схемой арбитража.