В Интернете есть много определений о том, что такое контекстно-свободная грамматика, но ничего, что я нахожу, не удовлетворяет мою основную проблему:
В каком контексте он свободен?
Чтобы исследовать, я погуглил «контекстно-зависимую грамматику», но мне так и не удалось найти смысл «контекста».
Может кто-нибудь объяснить, к чему context
относится этот термин в этих именах?
terminology
context-free
formal-grammars
CodyBugstein
источник
источник
override
может быть либо имя переменной, либо ключевое слово, в зависимости от того, где оно используется (т. Е. Его контекст). Если используется после объявления метода, это ключевое слово. В противном случае это не так. Это пример контекстно-зависимой грамматики.Ответы:
Вы правы, в каком-то смысле всегда есть контекст. Я не думаю, что вы можете понять, что означает «контекст» в контексте «без контекста», не разбираясь в производстве.
Производство - это правило замещения. В нем говорится, что для генерации строк в языке вы можете заменить то, что слева, на то, что справа:
Это означает, что абстрактная последовательность A может быть заменена символом «x», за которым следует символ «y». Вы также можете иметь более сложные производства:
Это означает, что символ «z», за которым следует абстрактная последовательность A, может быть заменен символами «x» и «y».
Производство без контекста просто означает, что в левой части есть только одна вещь. Первый пример не зависит от контекста, поскольку A можно заменить на «x» и «y» независимо от того, что находится до или после него. Однако во втором примере символ «z» должен появляться перед буквой A, а затем комбинация может быть заменена на «x» и «y», так что здесь присутствует некоторый контекст.
Тогда контекстно-свободная грамматика - это просто грамматика с продукцией только без контекста.
Второй пример - это пример неограниченного производства. Существует еще одна категория, которая находится между контекстно-свободной и неограниченной и называется контекстно-зависимой. Пример контекстно-зависимого производства:
Разница в том, что то, что предшествует A (и после) на левой стороне, должно сохраняться справа. Это фактически означает, что только А замещен, но может быть заменен только в соответствующем контексте.
источник
zA -> zxy
: A все еще заменяется на xy, но только после z.источник