Можно проанализировать документ, используя один проход из конечного автомата. Какая польза от двух проходов, т.е. иметь лексер для преобразования текста в токены и иметь анализатор для проверки правил производства на этих токенах? Почему бы не иметь один проход, который применяет правила производства непосредственно к тексту?
15
Ответы:
Вы не должны разделять их. Люди объединяют их в парсеры без сканера .
Ключевым недостатком синтаксических анализаторов, по-видимому, является то, что результирующие грамматики являются довольно сложными - более сложными, чем соответствующая комбинация регулярного выражения, выполняющего лексирование, и контекстно-свободной грамматики, выполняющей анализ потока токенов. В частности, грамматики для анализа без сканирования имеют тенденцию к двусмысленности. Устранить двусмысленность грамматикам, работающим с потоком токенов.
Прагматичным преимуществом использования выделенной фазы лексирования является то, что вы не связываете последующий анализатор с лексическими подробностями. Это полезно во время ранней разработки языка программирования, когда лексические и синтаксические детали все еще часто меняются.
источник