Синтаксический анализ. Понятие и роль синтаксического анализа

Формальные языки, в частности, языки программирования, имеют точные правила, описывающие корректную структуру программ, т.е. грамматику. Грамматика языка программирования может быть описана с помощью различных нотаций. Один из популярных вариантов – различные модификации формы Бэкуса-Наура.

Использование формальных грамматик даёт несколько полезных преимуществ, если сравнивать со словесным описанием:

  • Грамматика даёт точную формальную спецификацию конструкций языка программирования.
  • Формальное описание грамматики обычно более ёмкое, чем аналогичное словесное описание.
  • Для определённых классов грамматик возможно автоматическое построение синтаксического анализатора на основе формального описания.
  • Наличие формальной грамматики облегчает расширение языка.
  • Формальная грамматика упрощает поиск неоднозначностей и других сложностей.
  • Хорошо построенная грамматика значительно облегчает разбор и анализ языка.

Роль синтаксического анализатора

В рамках нашей обобщённой модели компилятора, синтаксический анализатор получает последовательность токенов от лексического анализатора и проверяет, может ли такая последовательность порождаться грамматикой языка (о порождении строк грамматикой подробнее далее).

Крайне удобным будет, если синтаксический анализатор будет выводить сообщения о всех найденных ошибках, желательно как можно более читаемых и подробных.

Наконец, в отсутствие ошибок, синтаксический анализатор концептуально строит дерево разбора и передаёт его дальше в фазу семантического анализа и т.д. В действительности, явное построение дерева разбора не требуется и не всегда оправдано.