Некоторое время я изучал компиляторы и искал, что означает «контекст» в грамматике и что означает, что грамматика должна быть «контекстно-свободной», но безрезультатно.
Так может кто-нибудь помочь с этим?
Некоторое время я изучал компиляторы и искал, что означает «контекст» в грамматике и что означает, что грамматика должна быть «контекстно-свободной», но безрезультатно.
Так может кто-нибудь помочь с этим?
Ответы:
Контекст может быть объяснен в отношении правил производства, разрешенных для различных грамматик в иерархии Хомского.
Если вы рассматриваете грамматики без контекста, их правила производства имеют следующую форму:
Итак, вы можете заметить, что левая часть правил такого типа состоит только из одного нетерминального символа; таким образом, замена нетерминального символа происходит без учета его «контекста», то есть других символов, которыми он окружен.
С другой стороны, если вы рассматриваете правила производства контекстно-зависимых грамматик, они имеют следующую форму:
Вы можете найти более подробную информацию в этом ответе по математике и в этом ответе по программной инженерии.
x:=y+z
f(y+z)
return y+z
Вообще говоря, даже обычные языки могут иметь контекстные зависимости, что означает, что вы можете определить - до некоторой степени - каким образом символы могут появляться рядом с другими символами в строке, принадлежащей этому языку.
Что характерно для контекстно-свободных грамматик, так это то, что когда существует несколько способов замены нетерминального символа, применяя различные правила с одним и тем же нетерминальным символом справа, выбор того, какое правило применять, никогда не зависит от того, что происходит вокруг этого символа в процессе деривации.
Вы можете думать о них как о контекстно-свободных деривационных языках, контекстно-свободных языках для краткости.