Формальные языки, в частности, языки программирования, имеют точные правила, описывающие корректную структуру программ, т.е. грамматику. Грамматика языка программирования может быть описана с помощью различных нотаций. Один из популярных вариантов – различные модификации формы Бэкуса-Наура.
Использование формальных грамматик даёт несколько полезных преимуществ, если сравнивать со словесным описанием:
- Грамматика даёт точную формальную спецификацию конструкций языка программирования.
- Формальное описание грамматики обычно более ёмкое, чем аналогичное словесное описание.
- Для определённых классов грамматик возможно автоматическое построение синтаксического анализатора на основе формального описания.
- Наличие формальной грамматики облегчает расширение языка.
- Формальная грамматика упрощает поиск неоднозначностей и других сложностей.
- Хорошо построенная грамматика значительно облегчает разбор и анализ языка.
Роль синтаксического анализатора
В рамках нашей обобщённой модели компилятора, синтаксический анализатор получает последовательность токенов от лексического анализатора и проверяет, может ли такая последовательность порождаться грамматикой языка (о порождении строк грамматикой подробнее далее).
Крайне удобным будет, если синтаксический анализатор будет выводить сообщения о всех найденных ошибках, желательно как можно более читаемых и подробных.
Наконец, в отсутствие ошибок, синтаксический анализатор концептуально строит дерево разбора и передаёт его дальше в фазу семантического анализа и т.д. В действительности, явное построение дерева разбора не требуется и не всегда оправдано.