Синтаксический анализ — это этап компиляции, на котором проверяется соответствие программы правилам языка программирования. Для этого используется формальное описание синтаксиса языка, называемое грамматикой.

Абстрактный синтаксис

Абстрактный синтаксис языка определяет значимые компоненты каждой конструкции языка, не завися от их конкретного представления в тексте программы. Например, выражение a + b может быть записано в префиксной, инфиксной или постфиксной форме, но его абстрактный синтаксис останется неизменным: операция сложения + и операнды a и b.

Абстрактный синтаксис удобно представлять в виде абстрактного синтаксического дерева (АСД). АСД — это древовидная структура, где каждый узел представляет конструкцию языка, а его потомки — составляющие ее компоненты. Например, АСД для выражения D = b * b – 4 * a * c выглядит следующим образом:

    =
   / \\
  D   -
     / \\
    *   *
   / \\ / \\
  b b 4  *
         / \\
        a   c

Грамматики

Грамматика — это набор правил, описывающих синтаксис языка программирования. Грамматика определяет, какие последовательности символов (лексем) являются допустимыми программами на данном языке.

Для описания синтаксиса языков программирования чаще всего используются контекстно-свободные грамматики.

Контекстно-свободная грамматика состоит из:

Форма Бэкуса — Наура (БНФ)

БНФ — это формальная нотация для записи контекстно-свободных грамматик. В БНФ используются следующие обозначения:

Пример записи грамматики арифметических выражений в БНФ: