Parser Generator
Инструментарий для построения компиляторов. |
Главная О сайте Документация Download Ссылки Библиография О нас |
Синтаксический анализ.Синтаксический анализ решает задачу принадлежности цепочки языку. В общем случае эта неразрешима, но для особых видов языков и грамматик она может быть решена за линейное время. На практике рассматриваются именно такие языки и грамматики- для которых может быть построен линейный алгоритм анализа. Этот радел посвящен в основном вопросам практической реализации синтаксических анализаторов (парсеров).
Почти все парсеры используют схожие структуры данных для анализа. Почти
все они используют магазин (стек). Работой многих управляет специальная
управляющая таблица. Для реализации стека использовался класс
Библиотека содержит реализацию некоторых, широко используемых алгоритмов анализа.
Алгоритм анализа ЛЛ1 грамматик.Этот анализатор осуществляет анализ цепочек, на основе ЛЛ1-грамматик. Это один из наиболее простых и эффективных с точки зрения быстродействия алгоритмов.
Анализатор реализован в классе
Управляющая таблица ЛЛ1 анализатора
Управляющая таблица полностью определяет работу синтаксического
анализатора. Ее построение берет на себя класс-алгоритм
Просмотр разбора входной цепочки по шагам.
Класс LL1Parser предоставляет метод
Внутри тега Используя эту XML строку можно визуально отобразить состояние алгоритма в любой момент времени.
Алгоритм анализа грамматик предшествования.Алгоритм разбора для грамматик предшествования работает по принципу "перенос-свертка" и относится к восходящим методам разбора. Этот алгоритм использует стек и входную ленту. В каждый момент времени автомат обозревая очередной символ на входной цепочке и зная состояние магазина выполняет одно из следующих действий: Неформально этот алгоритм разбора можно описать следующим образом: автомат переносит символы с входной цепочки в стек, пока на вершине стека не окажутся символы, представляющие правую часть какого-либо правила вывода. В этом случае он удаляет эти символы из стека, заменяя их определяемым нетерминалом (левой частью). Если, в конце концов окажется, что цепочка прочитана до конца и в стеке находится лишь начальный символ грамматики, значит цепочка принадлежит языку. Однако реализация такого алгоритма для любой грамматики потребовала бы множества откатов (не всегда можно правильно свернуть верхушку стека), тогда как для грамматик определенного вида (например предшествования) можно точно сказать к какому нетерминалу нужно сворачивать верхушку стека.
Алгоритм разбора реализован в классе
Отношение предшествования. Матрица предшествования.
Матрица предшествования практически является управляющей таблицей для
работы алгоритма. Описанные выше отношения предшествования четко
определяют каждое действие алгоритма. Для описания работы алгоритма
введем две специальнные функции:
Функция
Функция
Просмотр разбора входной цепочки по шагам.
В режиме пошаговой работы алгоритма анализа входной цепочки существует
возможность просматривать состояние алгоритма. Для этого необходимо
получить XML строку вызвав метод
|
|||||||||||||||||||||||||||||
© С. Григорчук 2001, Содержание, дизайн |
|