В теории формального языка, детерминированные контекстно-свободные языки (DCFL ) являются собственное подмножество из контекстно-свободных языков. Это контекстно-свободные языки, которые могут быть приняты детерминированным выталкивающим автоматом. DCFL всегда однозначны, это означает, что они допускают однозначную грамматику. Существуют недетерминированные однозначные CFL, поэтому DCFL образуют собственное подмножество однозначных CFL.
DCFL представляют большой практический интерес, поскольку их можно анализировать за линейное время, а различные ограниченные формы DCFG допускают простые практические синтаксические анализаторы. Таким образом, они широко используются в информатике.
Понятие DCFL тесно связано с детерминированный автомат выталкивания (DPDA). Именно здесь возможности языка автоматов выталкивания уменьшаются, если мы делаем их детерминированными; автоматические выталкивающие элементы не могут выбирать между различными альтернативами перехода между состояниями и, как следствие, не могут распознавать все контекстно-свободные языки. Однозначные грамматики не всегда генерируют DCFL. Например, язык четных длин палиндромов на алфавите 0 и 1 имеет однозначную контекстно-свободную грамматику S → 0S0 | 1S1 | ε. Произвольная строка этого языка не может быть проанализирована, не прочитав сначала все ее буквы, а это означает, что выталкивающий автомат должен пробовать альтернативные переходы между состояниями, чтобы приспособиться к разной возможной длине частично проанализированной строки.
Детерминированные контекстно-свободные языки могут быть распознаны детерминированной машиной Тьюринга за полиномиальное время и в O (log n) пространстве; как следствие, DCFL является подмножеством класса сложности SC.
Множество детерминированных контекстно-свободных языков закрывается при следующих операциях:
Множество детерминированного контекстно-свободного языка не закрывается при следующих операциях:
Языки этого класса имеют большое практическое значение в информатике, поскольку их можно анализировать гораздо больше. re эффективнее, чем недетерминированные контекстно-свободные языки. Сложность программы и время выполнения детерминированного автомата проталкивания намного меньше, чем у недетерминированного. В наивной реализации последний должен делать копии стека каждый раз, когда происходит недетерминированный шаг. Самый известный алгоритм проверки принадлежности к любому контекстно-свободному языку - это алгоритм Valiant, занимающий время O (n), где n- длина строки.. С другой стороны, детерминированные контекстно-свободные языки могут быть приняты за O (n) раз анализатором LR (k). Это очень важно для перевода компьютерного языка, поскольку многие компьютерные языки относятся к этому классу языков.