Что означает «контекст» в «контекстно-свободной грамматике»?

30

В Интернете есть много определений о том, что такое контекстно-свободная грамматика, но ничего, что я нахожу, не удовлетворяет мою основную проблему:

В каком контексте он свободен?

Чтобы исследовать, я погуглил «контекстно-зависимую грамматику», но мне так и не удалось найти смысл «контекста».

Может кто-нибудь объяснить, к чему contextотносится этот термин в этих именах?

CodyBugstein
источник
5
Я нахожу объяснение в Википедии довольно хорошим - «Формальная грамматика считается« свободной от контекста », когда ее правила производства могут применяться независимо от контекста нетерминала. Независимо от того, какие символы окружают его, единственный нетерминал с левой стороны всегда может заменить на правую сторону. " - его можно перефразировать и упростить, чтобы он стал «простым английским», но суть этого мне кажется достаточно ясной.
JKFF
1
@jkff замечательно, что вы находите объяснение хорошим, но я все еще не понимаю, что на самом деле означает «контекст». Мне нужно увидеть пример, где есть контекст, и где нет контекста. Мне кажется, что каждая грамматика, которую я видел, имеет контекст
CodyBugstein
Разве это не ясно из определения?
Рафаэль
2
По иронии судьбы, в этом определении отсутствовал важный контекст , поэтому я просто добавил предложение, чтобы объяснить это.
reinierpost
2
Пример: в C ++ 11 overrideможет быть либо имя переменной, либо ключевое слово, в зависимости от того, где оно используется (т. Е. Его контекст). Если используется после объявления метода, это ключевое слово. В противном случае это не так. Это пример контекстно-зависимой грамматики.
Томас Эдинг

Ответы:

37

Вы правы, в каком-то смысле всегда есть контекст. Я не думаю, что вы можете понять, что означает «контекст» в контексте «без контекста», не разбираясь в производстве.

Производство - это правило замещения. В нем говорится, что для генерации строк в языке вы можете заменить то, что слева, на то, что справа:

A -> xy

Это означает, что абстрактная последовательность A может быть заменена символом «x», за которым следует символ «y». Вы также можете иметь более сложные производства:

zA -> xy

Это означает, что символ «z», за которым следует абстрактная последовательность A, может быть заменен символами «x» и «y».

Производство без контекста просто означает, что в левой части есть только одна вещь. Первый пример не зависит от контекста, поскольку A можно заменить на «x» и «y» независимо от того, что находится до или после него. Однако во втором примере символ «z» должен появляться перед буквой A, а затем комбинация может быть заменена на «x» и «y», так что здесь присутствует некоторый контекст.

Тогда контекстно-свободная грамматика - это просто грамматика с продукцией только без контекста.

Второй пример - это пример неограниченного производства. Существует еще одна категория, которая находится между контекстно-свободной и неограниченной и называется контекстно-зависимой. Пример контекстно-зависимого производства:

zA -> zxy

Разница в том, что то, что предшествует A (и после) на левой стороне, должно сохраняться справа. Это фактически означает, что только А замещен, но может быть заменен только в соответствующем контексте.

Вон Катон
источник
2
Спасибо, что это огромная помощь! На самом деле я никогда не видел пример грамматики с несколькими переменными слева, как вы показали. Наверное, поэтому я не мог понять, что это за «контекст». Спасибо
CodyBugstein
4
Возможно, более простым контекстным примером будет zA -> zxy: A все еще заменяется на xy, но только после z.
MSalters
Более подробно этот ответ говорит о неограниченной грамматике , в то время как @MSalters указывает, что контекстно-зависимая грамматика послужит лучшим примером значения контекста.
@MSalters: у тебя есть хорошая мысль. Я изменил свой ответ. Мне было нелегко придумать способ добавить эти детали в мое описание, чтобы оно не звучало более сложно, поэтому в итоге я просто добавил больше деталей в конце.
Вон Катон
9

Aβ
αAδ
iLoveCamelCase
источник
Что такое бета? Это терминал или переменная? А можете ли вы объяснить «форму предложения»? Означает ли это, что это не может быть получено дальше?
CodyBugstein
Бета может быть чем угодно, просто A-> beta - это правило. Форма предложения означает, что с учетом вашего начального символа с использованием правил грамматики мы превращаем его в результат. Этот результат называется формой предложения. После каждого использования каждого правила мы получаем новую форму предложения.
iLoveCamelCase
3
@Imray Вам нужно взглянуть на формальные определения грамматик и контекстно-свободных грамматик. Там нет ярлыка для понимания формальных объектов.
Рафаэль
1
@Imray Форма предложения - это строка терминальных и нетерминальных символов, которая выводится из аксиомы (также называемой начальным символом ) путем применения правил грамматики (также называемых продукцией ). Форма предложения может быть преобразована в другую, применяя правило к одному из его нетерминальных символов. Когда нет никаких нетерминалов, формой предложения является предложение , то есть строка или слово на языке, определенном или сгенерированном грамматикой. Терминология исходит от лингвистов, которые когда-то были основными участниками этой части теории формального языка.
Бабу
Я думал, что форма предложения не может содержать никаких переменных - это должны быть просто терминалы.
CodyBugstein