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

Если у меня есть что-то вроде var string = "var";затем после первой двойной кавычки правила меняются, а var не означает то же самое, что и в начале текста. После второй двойной кавычки все возвращается на круги своя. Как это не считается контекстом?

(Пожалуйста, не используйте эти стрелки в своем ответе, попробуйте вместо естественного языка!)

1 ответ

Решение

Направление стрелки важно, поэтому, если я не могу об этом говорить, это будет трудно объяснить. Итак, извините, я собираюсь использовать стрелки. Они действительно не сложны.

Выражение A -> ... означает " A является ...". Это не значит"... является A". Контекстно-свободный означает, что если A может быть "..." в некотором контексте, это может быть "..." в любом контексте. Но стрелка всегда указывает от категории к конкретной; никогда назад

В вашем примере identifier это буква, за которой следует ряд буквенно-цифровых символов:

 identifier -> letter (letter OR digit)...

Так identifier может быть вар. Это не значит, что var всегда identifier, как показывает ваш пример. Стрелка указывает в одном направлении.

Потому что грамматика не зависит от контекста, если, когда мы ищем identifier в каком-то контексте, и мы принимаем вар как identifierто в любом другом контексте, где мы ищем identifierМы также должны принять вар.

Но есть контексты (между кавычками), где мы не ищем identifier, Все в порядке; условие без контекста не нарушено. Контекст применяется в направлении стрелки.

Другие вопросы по тегам