Контекстно-свободные грамматики и языки
К классу контекстно-свободных (КС) относятся грамматики, у которых не накладывается никаких ограничений на вид правых частей их правил, а левая часть каждого правила — единственный нетерминал.
С помощью КС-грамматик задают синтаксис языков программирования.
Левосторонние и правосторонние выводы в КС-грамматике
Рассмотрим (однозначную) грамматику G8, задающую синтаксис арифметических выражений.
G8: E®T| E+T | E-T
T® M | T*M | T/M
M®a | b | c | (Е)
Построим два различных вывода цепочки а + b*св этой грамматике.
В первом случае, если сентенциальная форма содержит более одного нетерминала, будем выполнять подстановку (замену нетерминала правой частью одного из правил) для самого левого нетерминала этой сентенциальной формы:
ЕÞЕ+ТÞТ+ТÞМ+ТÞа+ТÞа+T*МÞа+М*МÞ
а + b*МÞа + b*с.
Такой вывод называется левосторонним.
Аналогично, вывод, в ходе которого замене всегда подвергается самый правый нетерминал сентенциальной формы, называется правосторонним. Для цепочки а+b*с в грамматике G8 он будет таким:
ЕÞЕ+ ТÞ Е + T*М ÞЕ + Т*с Þ Е + М*с Þ
Е + b*с Þ T+ b*с Þ М + b*с Þ а + b*с.
Нетрудно убедиться, что обе эти последовательности подстановок соответствуют одному и тому же дереву вывода, хотя и разному порядку его построения.
Для цепочки а + b*с в грамматике G8 и левосторонний, и правосторонний выводы строятся однозначно. Это же справедливо и для любой другой цепочки, порождаемой G8.
КС-грамматика называется однозначной, если для каждого предложения языка, порождаемого этой грамматикой, существует единственный левосторонний вывод.