Чтобы объяснить, что такое производство, я хотел бы сначала представить немного контекста.
Дракон книги утверждает, что контекст свободная грамматика имеет 4 компонента:
- набор терминальных символов (лексем)
- набор нетерминальными символов (синтаксических переменных)
- набор производств вида: без термина -> последовательность терминалов и нетерминалов
- не-терминальный символ обозначен как начальный символ
Также говорится, что синтаксический анализ представляет собой проблему взятия строки терминалов (исходный код) и выяснение, какие шаги необходимы для получения этой строки терминалов из символа начала грамматики.
Теперь, когда это было сказано, производство по существу является возможным (промежуточным) шагом. Я говорю, что это возможно, потому что некоторые символы могут выводиться в разные последовательности.
Например, давайте сделаем простую грамматику для представления произвольно длинных последовательностей окончания a с помощью b. В 4 компонент этой грамматики будут:
- Терминалы: а, б
- нетерминалов: S, X
- Правило: S -> X, X -> аХ, X - > абы
- символ Начала: S
из описания я дал выше «aaaab» должен быть выводим из этой грамматики. Посмотрим, справится ли это. Мы начинаем с символа начала, а затем применяем постановки до тех пор, пока а) не получим окончательную последовательность, б) мы исчерпаем все возможности без успеха (это означает, что последовательность не является «грамматически правильной»).
S
X (after applying S --> X)
aX (after applying X --> aX)
aaX (after applying X --> aX)
aaaX (after applying X --> aX)
aaaab (after applying X --> ab)
И все готово, мы получили исходную последовательность. Итак, как вы можете видеть, мы повторно написали нетерминальные символы, применяя правила (один из них мы применили рекурсивно), которые трансформировали последовательность в новую последовательность символов на каждом шаге, и мы сделали это до тех пор, пока не получим окончательную последовательность.