В формальной теории языков слабая эквивалентность двух грамматик означает, что они генерируют один и тот же набор строк, т. е. что формальный язык, который они генерируют, один и тот же. В теории компиляторов это понятие отличается от сильной (или структурной ) эквивалентности , которая дополнительно означает, что два дерева разбора [ необходимо разъяснение ] достаточно похожи в том, что им обоим может быть назначена одна и та же семантическая интерпретация. [1]
Виджай-Шанкер и Вейр (1994) [2] демонстрируют, что линейные индексированные грамматики , комбинаторные категориальные грамматики , грамматики примыкания деревьев и грамматики голов являются слабо эквивалентными формализмами [ необходимо разъяснение ] в том смысле, что все они определяют одни и те же строковые языки.
С другой стороны, если две грамматики генерируют один и тот же набор деревьев вывода (или, в более общем смысле, один и тот же набор абстрактных синтаксических объектов), то эти две грамматики строго эквивалентны. Хомский (1963) [3] вводит понятие строгой эквивалентности и утверждает, что только строгой эквивалентности при сравнении грамматических формализмов имеет значение. Корнаи и Пуллум (1990) [4] и Миллер (1994) [5] предлагают уточненное понятие строгой эквивалентности, которое допускает изоморфные отношения между синтаксическими анализами, заданными различными формализмами. Ёсинага, Мияо и Цудзи (2002) [6] предлагают доказательство того, что для любого формализма LTAG существует строго эквивалентный формализм HPSG .
В качестве примера рассмотрим следующие две контекстно-свободные грамматики , [примечание 1] заданные в форме Бэкуса-Наура :
< выражение > ::= < выражение > "+" < выражение > | < выражение > "-" < выражение > | < выражение > "*" < выражение > | < выражение > "/" < выражение > | "x" | "y" | "z" | "1" | "2" | "3" | "(" < выражение > ")"
< выражение > ::= < термин > | < выражение > "+" < термин > | < выражение > "-" < термин > < термин > ::= < фактор > | < термин > "*" < фактор > | < термин > "/" < фактор > < фактор > ::= "x" | "y" | "z" | "1" | "2" | "3" | "(" < выражение > ")"
Обе грамматики генерируют один и тот же набор строк, а именно набор всех арифметических выражений, которые могут быть построены из переменных "x", "y", "z", констант "1", "2", "3", операторов "+", "-", "*", "/" и скобок "(" и ")". Однако конкретное синтаксическое дерево второй грамматики всегда отражает обычный порядок операций , в то время как дерево из первой грамматики в этом не нуждается.
Для строки-примера «1+2*3» правая часть рисунка показывает ее уникальное дерево разбора со второй грамматикой; [примечание 2] оценка этого дерева в постфиксном порядке даст правильное значение, 7. Напротив, левая часть рисунка показывает одно из деревьев разбора для этой строки с первой грамматикой; оценка его в постфиксном порядке даст 9.
Поскольку вторая грамматика не может сгенерировать дерево, соответствующее левой части рисунка, а первая может, обе грамматики не являются строго эквивалентными.
В лингвистике слабая порождающая способность грамматики определяется как множество всех строк, порождаемых ею, [примечание 3], в то время как сильная порождающая способность грамматики относится к множеству «структурных описаний» [примечание 4], порождаемых ею. [7] Как следствие, две грамматики считаются слабо эквивалентными, если их слабые порождающие способности совпадают; схожие для сильной эквивалентности. Понятие порождающей способности было введено Ноамом Хомским в 1963 году. [3] [7]
{{cite journal}}
: CS1 maint: несколько имен: список авторов ( ссылка )