Что означает контекст под контекстно-свободной и контекстно-зависимой грамматикой?
Если у меня есть что-то вроде var string = "var";
затем после первой двойной кавычки правила меняются, а var
не означает то же самое, что и в начале текста. После второй двойной кавычки все возвращается на круги своя. Как это не считается контекстом?
(Пожалуйста, не используйте эти стрелки в своем ответе, попробуйте вместо естественного языка!)
1 ответ
Направление стрелки важно, поэтому, если я не могу об этом говорить, это будет трудно объяснить. Итак, извините, я собираюсь использовать стрелки. Они действительно не сложны.
Выражение A -> ...
означает " A
является ...
". Это не значит"...
является A
". Контекстно-свободный означает, что если A
может быть "..." в некотором контексте, это может быть "..." в любом контексте. Но стрелка всегда указывает от категории к конкретной; никогда назад
В вашем примере identifier
это буква, за которой следует ряд буквенно-цифровых символов:
identifier -> letter (letter OR digit)...
Так identifier
может быть вар. Это не значит, что var всегда identifier
, как показывает ваш пример. Стрелка указывает в одном направлении.
Потому что грамматика не зависит от контекста, если, когда мы ищем identifier
в каком-то контексте, и мы принимаем вар как identifier
то в любом другом контексте, где мы ищем identifier
Мы также должны принять вар.
Но есть контексты (между кавычками), где мы не ищем identifier
, Все в порядке; условие без контекста не нарушено. Контекст применяется в направлении стрелки.