Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Layt_teor_osnovy_form_yazykov.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
1.17 Mб
Скачать

1.9. Некоторые проблемы теории формальных языков.

Теория формальных языков быстро прогрессировала с тех пор, как Хомский впервые описал формальный язык. Однако большинство из опубликованных работ не имеет непосредственного отношения к интересующей нас проблеме разбора предложений языка программирования; эти работы скорее касаются вопросов математической теории языков и грамматик. В них определяются различные классы языков с теми или иными свойствами. Языки характеризуются в терминах грамматик, которые порождают языки лишь из некоторого определенного класса, и в терминах автоматов (машин), которые распознают языки лишь из определенного класса. Вот несколько типичных вопросов, которые рассматриваются в таких работах: если L1 и L2 - два языка из класса Т, то является ли объединение (пересечение) двух языков также языком из класса Т? Однозначна ли грамматика? Существует ли алгоритм, определяющий однозначность любой грамматики из класса Т? Эквивалентны ли две грамматики в некотором смысле?

Были выделены четыре основные класса языков в терминах грамматик, являющихся упорядоченной четверкой (V,T,P,Z), где

1. V - алфавит;

2. TV -алфавит терминальных символов;

3. P - конечный набор правил подстановки;

4. Z - начальный символ, принадлежащий множеству V - T.

Язык, порождаемый грамматикой, - это множество терминальных цепочек, которые можно вывести из Z. Различие четырех типов грамматик заключается в форме правил подстановки, допустимых в P. Говорят, что G - это (по Хомскому) грамматика типа 0 или грамматика с фразовой структурой, если правила имеют вид

u::=v, где uV и vV*.

То есть левая часть u может быть тоже последовательностью символов, а правая часть может быть пустой. Если ввести ограничение на правила подстановки, то получится более интересный класс языков типа 1, называемых также контекстно-чувствительными или контекстно-зависимыми языками. В этом случае правила подстановки имеют следующий вид:

хUу::=хuу, где UV - T, uV+ и х,уV*.

Термин "контекстно-чувствительная" отражает тот факт, что можно заменить U на u лишь в контексте х...у. Дальнейшее ограничение дает класс грамматик, полностью подобный классу, который мы используем; грамматика называется контекстно-свободной, если все ее правила имеют вид

U::=u, где UV - T и uV* .

Этот класс назван контекстно-свободным потому, что символ U можно заменить цепочкой u, не обращая внимания на контекст, в котором он встретился. В КС-грамматике может появиться правило вида U:= , где  - пустая цепочка. Однако, чтобы не усложнять терминологию и доказательства, мы не допускаем таких правил в наших грамматиках. По заданной КС-грамматике G можно сконструировать -свободную (или неукорачивающую) грамматику G1 (наш тип), такую, что L(G1)=L(G)-{ }. Более того, если G однозначна, то G1 также однозначна, поэтому фактически мы не вносим ограничений.

Если мы ограничим правила еще раз, приведя их к виду U::=N или U::=WN, где NT, а U и W V - T, то получим грамматику типа 3, или регулярную грамматику. Регулярные грамматики играют основную роль, как в теории языков, так и в теории автоматов. Множество цепочек, порождаемых регулярной грамматикой, "допускается" машиной, называемой автоматом с конечным числом состояний, и наоборот. Таким образом, мы имеем характеристику этого класса грамматик в терминах автомата. Регулярные языки (те, что порождаются регулярными грамматиками), кроме того, называются регулярными множествами.

Вводя все большие ограничения, мы определили четыре класса грамматик. Таким образом, есть языки с фразовой структурой, которые не являются контекстно-чувствительными, контестно-чувствительные языки, которые не являются контекстно-свободными, и контекстно-свободные, которые не являются регулярными. В большинстве работ по теории формальных языков изучаются контекстно-свободные или регулярные языки, или их подмножества. Поэтому мы также ограничимся этими классами.

Один из основных вопросов, который возникает при рассмотрении грамматики, - это вопрос ее однозначности. К сожалению, было доказано, что эта проблема алгоритмически неразрешима для класса КС-грамматик. Это означает, что нельзя построить эффективный алгоритм (написать программу), который для любой заданной грамматики за конечное число шагов мог бы решить, является она однозначной или нет. Оказываются алгоритмически неразрешимыми и многие другие интересные вопросы, касающиеся контекстно-свободных языков (например, совпадают ли два языка, пересекаются ли два языка). В этом случае ищут интересные подклассы языков, для которых этот вопрос алгоритмически разрешим. Большинство доказательств теорем алгоритмической неразрешимости в теории формальных языков прямо или косвенно зависит от результатов теоремы Поста.

Доказано, что проблема однозначности для произвольной КС-грамматики алгоритмически неразрешима. Следующий вопрос, который может возникнуть: всегда ли существует однозначная грамматика для произвольного контекстно-свободного языка? Ответ отрицательный. Есть языки, для которых не существует однозначной грамматики. Такие языки называются существенно-неоднозначными.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]