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


29

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

Так может кто-нибудь помочь с этим?


7
Что вы подразумеваете под «на самом деле»? Какие объяснения вы прочитали, а что не поняли? IIRC, каждый наполовину достойный учебник по этому вопросу объяснит, что они имеют в виду.
Рафаэль

2
Вот хороший пример. Рассмотрим слово «читать». Это одно слово, которое имеет два совершенно разных значения. Одним из них является настоящее время «читать», другим - прошедшее время «Я читал». Если вы увидели слово «читать» в куске текста, вы не сможете однозначно определить, какое из двух значений оно представляет, не глядя на контекст. Таким образом, английский является контекстно-зависимым, потому что вы не можете разобрать каждый токен (слово), не рассматривая его в контексте. Контекстно-зависимая грамматика - это грамматика, в которой значение каждого токена однозначно выводится из единственного токена, который представляет его.
Александр - Восстановить Монику

Ответы:


30

Контекст может быть объяснен в отношении правил производства, разрешенных для различных грамматик в иерархии Хомского.

Если вы рассматриваете грамматики без контекста, их правила производства имеют следующую форму:

Aα

Итак, вы можете заметить, что левая часть правил такого типа состоит только из одного нетерминального символа; таким образом, замена нетерминального символа происходит без учета его «контекста», то есть других символов, которыми он окружен.

С другой стороны, если вы рассматриваете правила производства контекстно-зависимых грамматик, они имеют следующую форму:

βAγβαγ

Aαβγ

βγ

Вы можете найти более подробную информацию в этом ответе по математике и в этом ответе по программной инженерии.


Спасибо за ответ. Но странным для меня является то, что аналогичный вопрос был задан по математике SE.
Shady

1
βγ

1
@Frozn AFAIK приведенное здесь является стандартным определением в соответствии с иерархией Chmosky. Конечно, есть грамматики, более мощные, чем контекстно-зависимые, которые допускают любой тип производства, но стандартные контекстно-зависимые грамматики этого не делают.
Бакуриу

2
@Frozn: Бакариу прав, здесь мы говорим о грамматиках, определенных в соответствии с иерархией Хомского, которая основана на все более строгих условиях правил производства. В частности, контекстно-свободные грамматики являются грамматиками типа 2, а контекстно-зависимые - типом 1. Однако грамматики типа 0 имеют производственные правила, которые не ограничиваются какими-либо ограничениями и поэтому называются неограниченными системами переписывания. Здесь вы можете найти краткое описание иерархии Хомского с некоторыми примерами.
PieCot

βAγδ|βAγ||δ|

17

AthingsstuffAmore-stuffthingsExprx:=y+zf(y+z)return y+z


4

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

Что характерно для контекстно-свободных грамматик, так это то, что когда существует несколько способов замены нетерминального символа, применяя различные правила с одним и тем же нетерминальным символом справа, выбор того, какое правило применять, никогда не зависит от того, что происходит вокруг этого символа в процессе деривации.

Вы можете думать о них как о контекстно-свободных деривационных языках, контекстно-свободных языках для краткости.

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