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


30

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

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

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

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


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δ

Что такое бета? Это терминал или переменная? А можете ли вы объяснить «форму предложения»? Означает ли это, что это не может быть получено дальше?
CodyBugstein

Бета может быть чем угодно, просто A-> beta - это правило. Форма предложения означает, что с учетом вашего начального символа с использованием правил грамматики мы превращаем его в результат. Этот результат называется формой предложения. После каждого использования каждого правила мы получаем новую форму предложения.
iLoveCamelCase

3
@Imray Вам нужно взглянуть на формальные определения грамматик и контекстно-свободных грамматик. Там нет ярлыка для понимания формальных объектов.
Рафаэль

1
@Imray Форма предложения - это строка терминальных и нетерминальных символов, которая выводится из аксиомы (также называемой начальным символом ) путем применения правил грамматики (также называемых продукцией ). Форма предложения может быть преобразована в другую, применяя правило к одному из его нетерминальных символов. Когда нет никаких нетерминалов, формой предложения является предложение , то есть строка или слово на языке, определенном или сгенерированном грамматикой. Терминология исходит от лингвистов, которые когда-то были основными участниками этой части теории формального языка.
Бабу

Я думал, что форма предложения не может содержать никаких переменных - это должны быть просто терминалы.
CodyBugstein
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.