В теории формального языка - контекстно-зависимый язык - это язык, который может быть определен с помощью контекстно-зависимой грамматики (и, что то же самое, с помощью неконтактной грамматики ). Контекстно-зависимые - это один из четырех типов грамматик в иерархии Хомского.
В вычислительном отношении контекстно-зависимый язык эквивалентен линейно ограниченной недетерминированной машине Тьюринга, также называемой линейно-ограниченным автоматом. Это недетерминированная машина Тьюринга с лентой только из ячеек, где
- размер вход и
- константа, связанная с машиной. Это означает, что каждый формальный язык, который может быть определен такой машиной, является контекстно-зависимым языком, и любой контекстно-зависимый язык может быть определен такой машиной.
Этот набор языков также известен как NLINSPACE или NSPACE (O (n)), потому что они могут быть приняты с использованием линейного пространства на недетерминированном Тьюринге. машина. Класс LINSPACE (или DSPACE (O (n))) определяется одинаково, за исключением использования детерминированной машины Тьюринга. Очевидно, что LINSPACE является подмножеством NLINSPACE, но неизвестно, LINSPACE = NLINSPACE .
Один из Самый простой контекстно-зависимый, но не контекстно-свободный язык: : язык всех строк, состоящих из n вхождений символа "a", затем n "b", затем n "c" (abc, aabbcc, aaabbbccc и т. Д..). Надмножество этого языка, называемое языком Баха, определяется как набор всех строк, где «a», «b» и «c» (или любой другой набор из трех символов) встречается одинаково часто (aabccb, baabcaccb и т. Д.), а также является контекстно-зависимым.
L можно показать как контекстно-зависимый язык, построив линейный ограниченный автомат, который принимает L. Этот язык может легко показать, что он не регулярный и контекстно-свободным, применяя соответствующие леммы перекачки для каждого из языковых классов к L.
Аналогично:
- еще один контекстно-зависимый язык; соответствующую контекстно-зависимую грамматику можно легко спроецировать, начиная с двух контекстно-свободных грамматик, генерирующих предложения в форматах
и
с последующим добавлением к ним перестановки, например
, новый начальный символ и стандартный синтаксический сахар.
- еще один контекстно-зависимый язык (цифра «3» в названии этого языка означает троичный алфавит); то есть операция «product» определяет контекстно-зависимый язык (но «сумма» определяет только контекстно-свободный язык как грамматика
и
показывает). Из-за коммутативности продукта наиболее интуитивная грамматика для
неоднозначна. Этой проблемы можно избежать, если использовать более ограничительное определение языка, например
- это контекстно-зависимый язык. Соответствующая контекстно-зависимая грамматика может быть получена как обобщение контекстно-зависимой грамматики. Марс для
,
и т. д.
- это контекстно-зависимый язык.
является контекстно-зависимым языком («2» в названии этот язык предназначен для обозначения двоичного алфавита). Это было доказано Хартманисом с помощью лемм о накачке для обычных и контекстно-свободных языков над двоичным алфавитом и, после этого, наброска линейного ограниченного многоленточного автомата, принимающего
.
- это контекстно-зависимый язык (" 1 "в названии этого языка означает унарный алфавит). Это было приписано А. Саломаа Матти Сойттоле с помощью линейного ограниченного автомата над унарным алфавитом (страницы 213-214, упражнение 6.8), а также Марти Пенттонену с помощью контекстно-зависимой грамматики также над унарным алфавитом (см. : Формальные языки А. Саломаа, стр. 14, пример 2.5).
Примером рекурсивного языка, который не зависит от контекста, является любой рекурсивный язык, решение которого представляет собой EXPSPACE -сложную проблему, например, набор пар эквивалентных регулярные выражения с возведением в степень.