K j

advertisement
Лекция 1
Место и назначение лингвистического обеспечения в
информационных системах.
Понятие информационной системы.
Под системой понимают любой объект, который одновременно
рассматривается и как единое целое, и как объединенная в интересах
достижения поставленных целей совокупность разнородных элементов.
Системы значительно отличаются между собой как по составу, так и по
главным целям.
В информатике понятие "система" широко распространено и имеет
множество смысловых значений. Чаще всего оно используется
применительно к набору технических средств и программ. Системой может
называться аппаратная часть компьютера. Системой может также считаться
множество программ для решения конкретных прикладных задач,
дополненных процедурами ведения документации и управления расчетами.
Приведем несколько систем, состоящих из разных элементов и направленных на реализацию разных целей.
Система
Элементы системы
Главная цель системы
Фирма
Люди, оборудование,
материалы, здания и др.
Производство товаров
Компьютер
Электронные и
Обработка данных
электромеханические
элементы, линии связи и
др.
Телекоммун Компьютеры, модемы,
Передача информации
икационная кабели, сетевое
система
программное обеспечение
и др.
Информацио Компьютеры,
Производство профессиональной
нная система компьютерные сети,
информации
люди, информационное и
программное обеспечение
В информатике понятие "система" широко распространено и имеет
множество смысловых значений. Чаще всего оно используется
применительно к набору технических средств и программ. Системой может
называться аппаратная часть компьютера. Системой может также считаться
множество программ для решения конкретных прикладных задач,
дополненных процедурами ведения документации и управления расчетами.
Добавление к понятию "система" слова "информационная" отражает
цель ее создания и функционирования. Информационные системы
обеспечивают сбор, хранение, обработку, поиск, выдачу информации,
необходимой в процессе принятия решений задач из любой области. Они
помогают анализировать проблемы и создавать новые продукты.
Информационная система — взаимосвязанная совокупность средств,
методов и персонала, используемых для хранения, обработки и выдачи информации в интересах достижения поставленной цели.
Структуру информационной системы составляет совокупность
отдельных ее частей, называемых подсистемами.
Подсистема — это часть системы, выделенная по какому-либо
признаку.
Общую структуру информационной системы можно рассматривать как
совокупность подсистем независимо от сферы применения. В этом случае
говорят о структурном признаке классификации, а подсистемы называют
обеспечивающими. Таким образом, структура любой информационной
системы может быть представлена совокупностью обеспечивающих
подсистем.
Информационное обеспечение — совокупность единой системы
классификации и кодирования информации, унифицированных систем
документации, схем информационных потоков, циркулирующих в
организации, а также методология построения баз данных.
Техническое обеспечение — комплекс технических средств,
предназначенных для работы информационной системы, а также
соответствующая документация на эти средства и технологические процессы.
Математическое и программное обеспечение — совокупность
математических методов, моделей, алгоритмов и программ для реализации
целей и задач информационной системы, а также нормального
функционирования комплекса технических средств.
Организационное обеспечение — совокупность методов и средств,
регламентирующих взаимодействие работников с техническими средствами
и между собой в процессе разработки и эксплуатации информационной
системы.
Правовое
обеспечение
—
совокупность
правовых
норм,
определяющих создание, юридический статус и функционирование
информационных систем, регламентирующих
порядок
получения,
преобразования и использования информации.
Формальный язык – это знаковая система для описания и обмена
информацией между людьми, человеком и ЭВМ, различными
автоматическими устройствами.
Лингвистическое обеспечение образуется следующими языками:
 программирования;
 управления;
 проектирования.
Языки программирования необходимы для создания программного
обеспечения при разработке ИС.
Языки управления служат для управления ЭВМ, периферийными
устройствами.
Языки
проектирования
ориентированы
на
пользователейпроектировщиков и предназначены для эксплуатации ИС. Эта группа языков
условно делится на входные, внутренние и выходные. Входные языки
являются средством взаимодействия конечного пользователя с ИС, например,
в ходе подготовки исходных данных или формулировки проблемы.
Внутренние языки обычно скрыты от рядового пользователя и служат
для представления информации, передаваемой между различными
подсистемами ИС и ЭВМ.
Выходные
языки
обеспечивают
оформление
результатов
проектирования в текстовом или графическом виде.
Первичными
элементами
любого
языка
являются знаки,
символы. Заданную конечную их совокупность называют алфавитом.
Символы алфавита разделяют на буквы, цифры и специальные
знаки (препинания, разделительные, арифметические и логические операции
и т. п.).
Определенные сочетания символов алфавита образуют слова, из
которых составляется словарь языка. Сочетания цифр с десятичной точкой
или без нее образуют числа. Слова и числа при помощи специальных знаков
объединяются в предложения, а предложения – в тексты.
Правила построения слов называют морфологией языка. В этих
правилах предусматривается представление слова в виде префикса, основы и
постфикса. В любом языке можно выделить конечные множества
определяющих элементов слова и указать конечное число правил
формирования из них всего многообразия слов языка.
На практике это многообразие часто становится труднообозримым,
поэтому ограничиваются использованием специально построенных лексик,
составленных из наиболее характерных слов словаря – лексем.
В действующих ИС находят применение формальные языки разного
уровня сложности и назначения, соответственно многообразию различных
задач, решаемых в проектировании.
Базовое лингвистическое обеспечение является языковой основой
программного обеспечения ИС и состоит в основном из действующих языков
программирования, с помощью которых в комплексе средств ИС,
реализуются вычислительные и моделирующие процедуры обобщенного
алгоритма проектирования, а также обеспечивается решение сервисных
задач.
Управляющее
лингвистическое
обеспечение
состоит
из
специализированных
проблемно-ориентированных
языков,
которые
описывают обобщенный алгоритм проектирования в терминах проектных
операций, процедур и задач. В этих языках формируются словарь, синтаксис
и семантика, существенно связанные с конкретной предметной областью
проектирования.
Языкам управляющей части лингвистического обеспечения должна
соответствовать определенная система агрегирования элементов базового
обеспечения. Только при согласовании словарных составов и грамматик
управляющих и базовых языков возможна исполнение в системе проблемноориентированных заданий.
Для осуществления такого рода связи (перевода директив
проектирования с одних языков на другие) приходится создавать
специализированные программные комплексы – языковые процессоры.
Управляющее лингвистическое обеспечение и языковые процессоры
обычно реализуются в ИС в составе управляющих мониторов, через
которые проектировщик и комплекс средств ИС осуществляют свое
взаимодействие в процессе проектирования.
Работа мониторов обеспечивается, в основном, обычными языками
программирования. Она
ложится дополнительной нагрузкой
на
располагаемые вычислительные и иные возможности комплекса средств ИС.
Однако при хорошей организации проблемно-ориентированных языков и их
трансляции, достигаемые положительные эффекты значительно превосходят
потери.
Лекция 2
Управляющее лингвистическое обеспечение.
Управляющее лингвистическое обеспечение ИС, описывая обобщенный
алгоритм, предоставляет словарный состав, синтаксис и семантику языковых
средств основных операций той или иной типовой процедуры.
Можно говорить о языковых средствах описания целей, исходных
данных, описания объектов, моделей их функционирования, алгоритмов
поиска проектных решений и формирования выходных документов. Состав и
содержание этих средств определяются в процессе типизации и унификации
всего многообразия информации и алгоритмов ее обработки в проблемной
области.
Типизация и унификация позволяют выделить конечные множества
элементарных данных и операций с их наименованиями и смысловыми
значениями, а также синтаксические и семантические правила описания
структурных данных и операций.
В зависимости от степени формализации тех или иных задач
обобщенного алгоритма удовлетворение требований осуществляется в
условиях пакетного или диалогового режимов функционирования комплекса
средств ИС.
Языки пакетного режима (или пассивные языки) ориентированы на
автоматическое решение полностью формализованных задач. В состав этих
языков включаются средства формулирования задач, достаточные для их
однозначного решения в приемлемое время.
Если задачи тех или иных фрагментов обобщенного алгоритма не
поддаются полной формализации, то используются языки диалогового
режима (или диалоговые языки). Они относятся к числу основных в ИС,
позволяя проектировщику принимать и сообщать системе решения по
отработке неформализуемых участков алгоритма проектирования.
Состав языковых средств диалогового взаимодействия существенно
зависит от принятой стратегии распределения функций управления
человеком и комплексом средств ИС.
В зависимости от распределения этих функций различают три
основных вида человеко-машинного общения.
«Ведущая – ЭВМ». Здесь система посредством специальных сообщений
запрашивает необходимые описания объекта, либо указывает возможные
пути решения задачи и требует от проектировщика конкретизации задания.
Эти сообщения оформляются на естественном языке пользователя с
соблюдением требования, однозначного толкования их смыслового
содержания.
«Ведущий – проектировщик». Здесь пользователь на специальном
языке задает для ЭВМ последовательность операций и процедур обработки
указываемой информации. Этот вид общения требует от проектировщика
четкого знания алгоритма и возможностей используемого комплекса ИС.
«Равные партнеры». Здесь реализуется двухстороннее управление
алгоритмом, в котором, в зависимости от ситуации, принятие решений о
дальнейшем ходе проектирования осуществляет либо человек, либо ЭВМ.
Этот вид общения является наиболее эффективным с точки зрения
достижения целей.
Диалоговые языки, ориентированные на взаимодействие по принципу
«Ведущая – ЭВМ», наибольшее распространение получили в так
называемых запрос-ответных языках. В зависимости от формы запроса
различают языки «Выбор из меню» и «Заполни пустые места».
Более
широкими
возможностями
организации
диалога
обладают директивные языки, реализующие взаимодействие по принципу
«Ведущий – проектировщик». Основной синтаксической единицей этих
языков является директива, которая представляет собою управляющее
предложение фиксированной структуры. Каждая директива позволяет задать
определенное действие по управлению процессом.
Более
широкими
возможностями
организации
диалога
обладают директивные языки, реализующие взаимодействие по принципу
«Ведущий – проектировщик». Основной синтаксической единицей этих
языков является директива, которая представляет собою управляющее
предложение фиксированной структуры. Каждая директива позволяет задать
определенное действие по управлению процессом.
В состав директивы, как правило, входят название действия, которое
должна выполнить автоматизированная система, а также параметры,
устанавливающие определенный режим выполнения этого действия.
Параметры директивы могут быть позиционными и ключевыми. Позиционные
параметры характеризуются их позицией в синтаксической структуре
директивы и должны перечисляться в определенном порядке. Каждый
ключевой параметр характеризуется своим наименованием.
Развитие преимуществ запрос-ответных и директивных языков
осуществляется в комбинированных языках, поддерживающих диалоговое
взаимодействие по принципу «Равные партнеры».
Отличительной особенностью этих языков является их естественность
для пользователей – приближение средств, предоставляемых в распоряжение
проектировщиков, к тем языковым средствам, которыми они привыкли
оперировать в процессе решения профессиональных задач, и освобождение
от необходимости использования машинно-обусловленных терминов и
понятий.
Базовое лингвистическое обеспечение.
Базовое лингвистическое обеспечение ИС, являясь языковой основой
программного обеспечения, содержит иерархию языков программирования,
каждый уровень которой позволяет с различной эффективностью
реализовывать автоматически исполняемые операции обобщенного
алгоритма проектирования.
На эффективность реализации проектных операций существенное
влияние оказывают свойства выбранного языка программирования: удачный
выбор языка позволяет быстро создавать качественный программный
продукт. При этом важнейшими характеристиками качества отдельной
программы и программного комплекса в целом являются их надежность,
эффективная
транслируемость
в
достаточно
компактные
и
быстродействующие
машинные
программы,
модифицируемость и
мобильность.
В зависимости от требований, накладываемых на программный
продукт, его исходное описание может производиться на языках
программирования кодового, низкого и высокого уровня.
Языками программирования кодового уровня (или машинными языками)
называются языки системы команд ЭВМ и внутримашинного представления
информации. Алфавит таких языков включает только цифры (двоичные,
восьмеричные или шестнадцатеричные), с помощью которых кодируются
команды машины и данные, над которыми эти команды выполняются.
Каждая ЭВМ имеет индивидуальную, свойственную только ей систему
команд, но определенные закономерности присущи всем вычислительным
системам.
Система команд современных ЭВМ содержит несколько сотен
элементов, семантика каждого из которых определяется функциональным
назначением элемента: перемещения данных, преобразования данных,
управления программой, ввода-вывода, специальные.
Команды перемещения данных организуют обмен информации между
арифметико-логическим устройством (точнее аккумулятором) и оперативной
памятью.
Команды преобразования данных используются для выполнения
арифметических и логических действий. Данные, над которыми эти действия
совершаются, чаще всего находятся в аккумуляторе и регистре. Результат
действия обычно остается в аккумуляторе
Команды
управления изменяют
содержимое
регистра
адреса
следующей выполняемой команды. Команды управления могут быть
условными и безусловными. Условная команда сопровождается указанием
состояния, которое должно быть предварительно проверено: положительное,
значение результата команды, переполнение или отсутствие его и т. д.
Безусловная команда управления изменяет содержимое регистра адреса без
проверки каких-либо условий.
Команды ввода - вывода организуют обмен информации с внешними
устройствами ЭВМ: накопителями на магнитных лентах, дисках.
Специальные команды позволяют выполнять особые действия, такие,
например, как разрешение прерывания выполнения программы, запрещение
прерывания и т. п.
Детальное кодирование действий и объектов этих действий в терминах
кодов операций, аккумулятора, регистров, машинных слов и т. п. позволяет
получать компактные и быстродействующие машинные программы,
полностью использующие возможности современных ЭВМ. Кроме того,
программы на машинном языке не нуждаются в трансляции; после ввода в
ЭВМ их можно сразу же исполнять.
Однако машинные языки используются очень редко: для программного
управления ЭВМ и оборудования, для которых не созданы или не
реализованы языки более высокого уровня, а также для написания особо
реактивных и незначительных по объему программ. Это обусловлено
высокой трудоемкостью кодирования.
Цифровые коды трудно воспринимаются человеком, поэтому велика
вероятность указания неверного кода, т. е. надежность программ,
составленных на машинных языках низкая. Кроме того, программы
машинного языка немобильны: они не могут исполняться на ЭВМ, система
команд и кодировка информации которых не содержат средств данного языка.
Языками
программирования
низкого
уровня (или
машинноориентированными языками) называются языки символического кодирования
машинных и служебных команд и данных. В этих языках каждая машинная
команда записывается в виде мнемонического обозначения кода операции и
операнда. Каждой операции машинного языка ставится во взаимно
однозначное соответствие выразительное, как правило, сокращенное
наименование, называемое мнемокодом.
Например, операция сложения может иметь мнемокод СЛЖ.
Мнемоническое обозначение операнда представляет собой произвольную
последовательность
символов,
выражающую
либо
наименование
переменной, либо значение константы, участвующей в операции. Такое
символическое изображение операций и операндов позволяет облегчить их
запоминание, а значит и использование.
Служебные
команды
машинно-ориентированных
языков
предназначены для упрощения программирования и отладки программных
комплексов: команды управления трансляцией, определения адресов и
идентификаторов, резервирования памяти и определения констант,
управления печатью текста программы и т. д.
Поскольку система команд ЭВМ является подмножеством
соответствующего машинно-ориентированного языка, последний позволяет,
подобно машинным языкам, создавать компактные и быстродействующие
программы, полностью использующие возможности ЭВМ. Выразительность
символического представления команд и данных способствует повышению
надежности создаваемых программ, удобству их записи, чтения и изменения.
В то же время эти программы немобильны, поэтому на машинноориентированных языках в основном кодируют системные компоненты
программного обеспечения ИС, к которым предъявляются высокие
требования по быстродействию и потребляемой памяти ЭВМ.
Языками программирования высокого уровня (или процедурноориентированными языками) называются языки задания алгоритмов решения
определенного класса задач в терминах и понятиях, характерных и наиболее
эффективных для этого класса. Процедурно-ориентированные языки с четко
продуманной системой хорошо взаимодействующих между собой понятий,
достаточно общих, но в то же время простых и ясных для человека,
позволяют существенно повысить эффективность разработки и развития
программного обеспечения ИС, особенно ее прикладных компонентов.
Качественным отличием этих языков от языков кодового и низкого
уровней является их машинная независимость: программы процедурноориентированных языков могут выполняться на любых ЭВМ, снабженных
соответствующими языковыми процессорами. Последние автоматически
отображают языковые конструкции, понятные человеку, в семантически
эквивалентные конструкции машинного языка.
При этом лаконичным и выразительным исходным конструкциям
ставятся в соответствие, как правило, значительные по объему совокупности
машинных команд и данных. Тем самым существенно повышается
производительность разработчиков программного обеспечения ИС. Вместе с
тем выдаваемые языковыми процессорами машинные программы являются
не экономными по потребляемым ресурсам ЭВМ, так как машинноориентированные языки позволяют создавать, как правило, более компактные
и быстрые программы.
Представление алгоритма решения задачи на процедурноориентированном языке заключается в указании последовательности
процедурных шагов, конкретизирующих вычислительный процесс. При этом
типичными процедурными шагами являются ввод данных, выборка значений,
вычисления по формулам, присваивания значений переменным, проверка
логических условий, передача управления определенным шагам, вывод
данных.
Выражение этих действий производится в терминах допустимых типов
данных, типов операций и механизмов управления последовательностью
применения операций и данных. Различие в содержании этих понятий
обусловливают основные различия языков программирования высокого
уровня.
Исходя из вышесказанного, можно составить схему лингвистического
обеспечения ИС.
Лекция 3
Теория интерпретации.
Проблема лингвистического обеспечения информационных систем во
многом кроется в том, что до сих пор точно неясны механизмы получения,
переработки, хранения и передачи информации человеком. Теория
интерпретации и вычислительная лингвистика – это именно те области
лингвистики и психолингвистики, на пересечении которых находится
решение данной проблемы. Когда станет известна и понятна система
естественной интерпретации языка, тогда можно будет создать
искусственную систему, идентичную ей.
Общие понятия теории интерпретации.
Понятие «интерпретация» лежало с самого начала в основе
общелингвистических теорий, а также в основе логических исследований
(вспомним классическую работу Аристотеля «Об истолковании»). В
последние годы в общем и прикладном языкознании выработался такой
взгляд на язык, который можно было бы назвать «интерпретационизмом» в
широком смысле слова. Этот взгляд представлен как в разнообразных
областях чисто лингвистического анализа (в теориях формальных грамматик,
в описании дискурсивной деятельности, в «теории речевых актов», в
социолингвистике, в истории языка), так и в исследованиях по
«искусственному интеллекту».
Интерпретационизм – весьма разнородное течение, к определению его
основных положений можно прийти только в результате сопоставления
различных современных концепций интерпретации и вычленения общего для
них теоретического ядра. Это тот взгляд, согласно которому в основе
владения языком и использования его лежит один и тот же
интерпретирующий механизм, обслуживающий различные сферы языковой
деятельности и при этом использующий различные виды знаний. Среди этих
сфер – говорение, понимание, редактирование, комментирование,
перифразирование, рассуждение, аргументация, обучение, перевод и др. Сама
же интерпретация, через которую и определяются указанию сферы,
представляет собой получение на основе одного исходного объекта
(называемого интерпретируемым объектом) другого, отличного объекта,
предлагаемого интерпретатором в качестве равносильного исходному на
конкретном фоне ситуации, набора презумпций, знаний.
В интерпретационизме владение языком и знания рассматриваются как
различные понятия. Так, хотя специальные виды знаний (химические,
физические, математические и т.п.) вовлечены в понимание речи, они, тем не
менее, к ведению лингвистической теории не относятся. Например, мы
понимаем предложение “Камень просвистел у Петра над головой” в том
смысле, что можем дать ему следующую интерпретацию: Камень пролетел
над головой Петра; камень был тяжелым в той степени, какая необходима для
того, чтобы предмет издавал соответствующий свистящий звук, и Петр
услышал этот звук, оценив его как свист. Однако это толкование вовсе не
обязывает нас среди словарных толкований глагола свистеть помещать (как
одно из потенциальных значений) такое: «свистеть – о предметах средней
тяжести: издавать характерный звук при полете».
Если остаться на той позиции, что знания о свойствах тяжелых
предметов не обязаны входить в компетенцию языка, то отпадет
необходимость в бесконечно дробных толкованиях для языковых единиц
(обрекающих составителя словаря на бесконечную работу: ведь с
расширением кругозора у добросовестного лексикографа будет постоянно
возникать необходимость в ревизии словаря). Для лингвистаинтерпретациониста проблема снимается с этой стороны (так как лингвист
отвлекается от энциклопедической информации), но усложняется с другой.
При построении описания языка, он попутно (но отдельно от своих прямых
лингвистических обязанностей) должен составлять компендий «схем знания»
(а не компендий собственно знаний), совместимых с языковым описанием
таким образом, чтобы на основе такого компендия – «информационного
запаса» – можно было моделировать интерпретации высказываний.
Построить процессор естественного языка – значит, воплотить
принципы интерпретации языковых выражений, заложенные в человеческой
деятельности.
Построение процессора естественного языка – одна из наиболее
актуальных проблем современной вычислительной лингвистики и создания
искусственного интеллекта. Эта проблема порождена информационным
взрывом, переживаемым человечеством в настоящее время: зачастую легче
бывает выяснить какой-либо факт (доказать теорему, решить уравнение и т.п.)
или сконструировать какое-либо приспособление непосредственно самому,
чем извлечь нужный рецепт из существующей литературы. Не помогает в
таком поиске информации даже то, что довольно многие издания
одновременно с публикацией заносятся на машинные носители: даже тогда
извлечь непосредственно нужные сведения фундаментально трудно именно
потому, что текст на естественном языке с трудом пока что поддается
информационной обработке. В частности, на сегодняшний день не
существует пока еще даже такой системы, которая для произвольного текста
на данном (скажем, русском) языке давала бы полный его морфологический
анализ (для произвольно большого, а не ограниченного словаря) или полный
его словарь. А ведь задача морфологического распознавания, или
«лемматизации», является предпосылкой для решения многих других
информационных задач.
Последние 20 лет в центре внимания вычислительной лингвистики
находится вопрос о моделировании той деятельности человека, результатом
которой является речь. Однако если в начале этого периода больший интерес,
как правило, вызывали исследования, исходящие из точки зрения говорящего,
то, начиная с 1970-х годов и вплоть до настоящего времени все чаще и чаще
делаются попытки построить модель понимания. Такое изменение интересов
связано с тем, что подход к пониманию как к простой перекодировке
поверхностных (наблюдаемых) структур в «смысловые репрезентации» стал
представляться все менее и менее вероятным. Произошел постепенный
переход от «лингвистики говорящего» к «лингвистике понимающего», что, в
свою очередь, объясняет тенденцию к интерпретационистскому объяснению.
При всем многообразии современных концепций общение стали
характеризовать как то, что связывает двух иди большее число личностей,
говорящих и одновременно интерпретирующих как чужую, так и
собственную речь. Интерпретация – это процесс, в конечном итоге
расцениваемый как понимание, недопонимание, недоразумение и т.д.; шкала
такой оценки непрерывна и не ограничивается полярными точками. Причем
процесс этот заключается не в «переводе» выражения-объекта в смысловую
структуру, а в построении и проверке гипотез о такой структуре, о том,
насколько одни структуры более вероятны по сравнению с другими, и даже о
том, стоит ли дальше пытаться интерпретировать поступающие сообщения. В
«перекодировочной» концепции обычно исходят из неизменности ключа к
шифру, в интерпретирующем же подходе вполне допускается случай, когда
по ходу понимания речи воспринимающая сторона постепенно меняет ту
базу знаний, на которую она опирается.
Возможные перспективы теории интерпретации представляются
следующим образом:
Коммуникация в рамках теории интерпретации обладает многими
аспектами, среди которых – столкновение намерений и их интерпретация
каждой из общающихся сторон. Намерение может быть связано как с
мотивами поведения говорящего (при понимании намерений), так и с
тональностью понимания.
Намерение в речевом поведении обладает следующими параметрами:
а) степень преднамеренности в выполнении заранее запланированного
действия
б) выбор действий
в) психологическое состояние, интерпретируемое как «желание» или
«воля»
г) предвидение результатов данного речевого действия;
д) степень контролируемости действий, их привычность, главным
образом, связанная с навыками речи, а не со знаниями.
Стратегический комплекс (замысел) говорящего – это осознанный
комплекс намерений, имеющийся еще до их реализации и используемый по
ходу речевых действий. Это означает преднамеренности в выборе вполне
определенного набора действий, на фоне конкретного же и постоянно
меняющегося набора психологических состояний, что сопровождается
«просчитыванием» последствий будущих действий, при презумпции той или
иной степени контролируемости постоянно меняющейся ситуации общения.
Ясно, что стратегические комплексы не всегда лежат за речевыми
действиями. Кроме того, можно уже до осуществления стратегического
замысла оценить свои будущие действия как дурные или благие,
запланировать требуемую дозу искренности (или, наоборот, наигранности) и
даже отказаться от выполнения своих замыслов.
Осуществление же стратегий в реальном общении обладает двумя
важными аспектами:
а) стадиальность осуществления (начало, воплощение, завершение и
т.д.);
б) соотнесенность «атакующих» и «оборонительных» действий.
Стратегический комплекс взаимодействует, как минимум, с тремя
другими – внестратегическими – комплексами при каждом конкретном акте
общения: с комплексом конвенций данного социума, с комплексом личности
говорящего и с комплексом личности партнеров по общению с данным
говорящим в оценке последнего.
В различных эпизодах осуществления стратегического замысла в речи
параметры намерения проявлены бывают в разной степени. Намерение,
понимаемое в рамках теории интерпретации, позволяет выйти за пределы
одного отдельно взятого высказывания и даже группы высказываний: то, что
можно
назвать
«речевой
жизнью»
человека,
может
быть
проинтерпретировано как смена стратегических и внестратегических
комплексов, с их внутренней организацией. Моделирование модулей
понимания и речевых намерений – это одна из ближайших задач теории
интерпретации в рамках вычислительной лингвистики.
Вычислительная лингвистика.
Что же такое «теория лингвистических вычислений»? Это дисциплина,
занимающаяся коммуникативными процессами в наиболее абстрактном виде.
В ее функции входит установление общего вида и общих принципов
построения процессоров естественного языка, доказательство теорем
относительно равносильности или неравносильности двух различных
формальных грамматик одного и того же языка и т.п. Видимо, именно к
теории лингвистических вычислений относится круг задач, традиционно
относимый к ведению математической лингвистики, а также к
моделированию общения с ЭВМ на естественном языке. Другая же часть
теории лингвистических вычислений связана с наиболее глубинными
процессами обработки информации человеком и их моделированием на ЭВМ.
Предметом «вычислительной лингвистики» является разработка и
применение систем обработки естественного языка в качестве части более
крупных систем, например, промышленных информационно-поисковых
систем. Задача таких систем – поиск информации в базе данных и
автоматическое пополнение базы данных. Другое, смежное направление –
построение систем, решающих задачи, сформулированные на естественном
языке.
К информационным задачам вычислительной лингвистики относятся:
1. Автоматическое установление по конкретному тексту тех правил и
единиц данного языка, которые участвовали в построении этого текста (при
этом соответствующая система использует свою базу данных о грамматике и
единицах языка). В расширенной формулировке речь здесь идет о том, чтобы
установить по конкретному образцу речи (тексту) все те законы логического
вывода (в широком смысле) и все те аксиомы («элементарные пропозиции»),
которые придают речи осмысленность и делают ее правильным текстом на
данном языке.
2. Установление информационных связей, которые имеются между
двумя образцами текстов (например, между запросом к информационной
системе и информацией, хранимой в системе, или информацией, заданной в
виде текста). Так, в запросе может содержаться задание выяснить,
описывается ли в тексте искомое приспособление для выполнения
конкретных работ.
В обоих случаях требуется установить связи между различными
образцами речи. Решение этой задачи связано с представлением и
использованием знаний при оперировании речью. Каково же место
вычислительной лингвистики в «искусственном интеллекте»?
Р. Шенк указывает, что вычислительная лингвистика – это «проблема
наделения машин способностью общаться с человеком на естественном
языке. Наш метод состоит в том, чтобы попытаться понять, как люди
общаются друг с другом, и исследовать эти процессы». Н. Черконе пишет:
«Вычислительная лингвистика должна построить общую теорию понимания
естественного языка в качестве основы для таких программ ЭВМ, которые
понимают естественный язык».
По мнению Томпсона, теоретическая вычислительная лингвистика
представляет собой попытку охарактеризовать природу языка с точки зрения
«лингвистических вычислений» – процедур над речью, аналогичных тем,
которые выполняются по ходу собственно вычислительных работ. В
американской вычислительной лингвистике на сегодняшний день было
предложено
несколько
концепций
теоретической
вычислительной
лингвистики: «функциональная грамматика» М.Кея [M.Kay 1979],
«когнитивная грамматика» [Lakoff, Thompson 1975], «лексическая
функциональная грамматика» [J.Bresnan ed. 1982] и др.
Сообщение и информация.
«Сообщение» и «информация» - это основные понятия информатики,
техническое значение которых не вполне соответствует употреблению этих
двух слов в обиходной речи. Необходимое в связи с этим уточнение
содержания указанных понятий не может быть достигнуто с помощью
определения, так как последнее лишь сводило бы эти понятия к другим не
определенным основным понятиям.
Введем сообщение и информацию как неопределенные основные
понятия и поясним на примере.
При разграничении понятий сообщения и информации мы исходим из
распространенных оборотов речи типа «это сообщение не дает мне никакой
информации», что приводит к следующему отношению между этими
понятиями:
(абстрактная) информация передается посредством (конкретного)
сообщения.
Соответствие между сообщением и информацией не является взаимнооднозначным. Для одной и той же информации могут существовать
различные передающие ее сообщения, например, сообщения на разных
языках или сообщения, которые получаются добавлением неважного
сообщения, не несущего никакой дополнительной информации. Сообщения,
передающие одну и ту же информацию, образуют класс эквивалентных
сообщений.
Одно и то же сообщение, по разному интерпретированное, может
передавать разную информацию. Абстрагируя, мы можем сказать, что
решающим для связи между сообщением N и информацией I является
некоторое отображение α, представляющее собой результат договоренности
между отправителем и получателем сообщения или предписанное им обоим
и называемое правилом интерпретации.
α
N → I
Иногда правило интерпретации известно лишь ограниченному кругу
лиц; сюда относятся правила интерпретации для специальных языков, в
частности, для различных профессиональных языков (жаргонов).
Связь между сообщением и информацией особенно отчетливо видна в
криптографии: здесь никто посторонний не должен извлечь информацию из
передаваемого сообщения, иначе это означало бы, что он располагает
«ключом».
Для сообщений, которыми обмениваются люди, в большинстве случаев
имеются соглашения относительно их формы. О таких сообщениях говорят,
что они передаются в языковой форме, что они составлены на некотором
языке. При этом слово «язык» используется в существенно более широком
смысле, чем в случае связанного с ним понятия «говорить». Мы знаем
разговорный и письменный языки, язык глухонемых, построенный на жестах
и мимике, печать для слепых, воспринимаемую осязанием.
Для нас особенно важны языки, в которых для передачи сообщений
используются долговременные носители информации.
Лекция 4
Место и назначение лингвистического обеспечения в
информационных системах.
Условно все подходы к определению количества информации можно
разделить на пять видов:
1. Энтропийный.
2. Алгоритмический.
3. Комбинаторный.
4. Семантический.
5. Прагматический.
Первые три вида дают количественное определение сложности
описываемого объекта или явления. Четвертый — описывает
содержательность и новизну передаваемого сообщения для получателя
(пользователя) сообщения. Наконец, пятый вид обращает внимание на
полезность полученного сообщения для пользователя.
Энтропийный подход.
Исторически первым возник энтропийный подход, потому что еще в
XIX-м веке физики ввели понятие “энтропия” для определения величины,
характеризующей процессы перехода тепловой энергии в механическую. В
какой-то мере эта величина характеризовала меру хаотичности
(неопределенности) движения молекул. Наверное поэтому К. Шеннон назвал
энтропией количество информации, испускаемой источником. Энтропией,
или неопределенностью, называется вещественнозначная функция,
зависящая от вероятностей событий и удовлетворяющая следующим
условиям:
1. Событие, наступающее с вероятностью единица, имеет нулевую
неопределенность.
2. Если одно событие имеет меньшую вероятность чем другое, то
неопределенность первого события больше неопределенности второго.
3. Неопределенность одновременного наступления двух событий равна
сумме их неопределенностей.
Согласно Шеннону, информация, испускаемая дискретным источником
X за единицу времени, характеризуется энтропией
H(X) = −Pi log Pi ,
где Pi — вероятность одной из возможных последовательностей
сигналов, исходящих из источника X за единицу времени (в предположении,
что источник испускает конечное число таких неисправностей). Количество
информации J(X,Y), переданной источником X приёмнику Y также
характеризуется с помощью энтропии
J(X, Y ) = H(X) − Hy (X),
где Hy (X) — условная энтропия источника. В случае, рассмотренном
Шенноном, обмен сообщениями между источником и приёмником
(информационное
взаимодействие)
характеризуется
количеством
информации, фактически получаемой приёмником. Работы Шеннона
показали, что для описания информационного взаимодействия важны
количественные характеристики участвующей в нем информации.
Сегодня принято считать, что энтропийный подход к характеристике
самого понятия информации и введению её количественных характеристик,
создан в работах Шеннона. Теория, развитая Шенноном, позволила с единой
точки зрения осмыслить разрозненные, но важные работы его
предшественников. Прежде всего, в этой связи следует упомянуть Р. Хартли,
который ввел понятие, являющееся частным, но важным случаем
шенноновской энтропии в случае равновероятного исходя случайных
событий. После появления в 1948 году работы Шенннона последовало
большое количество работ по развитию энтропийного подхода к теории
информации. Отметим отдельно основополагающую работу А. Н.
Колмогорова, в которой введено понятие энтропии динамических систем как
метрического инварианта преобразований, сохраняющих меру. Работы
Колмогорова и его последователей по энтропии динамических систем
показали, что все энтропии, в том числе и шенноновская, близки к энтропиям
частных классов динамических систем. С помощью энтропии выражается
количество информации в данном случайном объекте и информации, которую
он несет о другом случайном объекте.
Обзор работ, посвященных энтропийному подходу, дан в монографии
Н. Мартина и Дж. Ингленда и содержит около 700 ссылок (вместе с
дополнительным списком литературы).
Алгоритмический подход.
Энтропийный подход в теории информации позволяет ответить на
вопрос “Сколько информации содержит объект Y относительно объекта X?”
В рамках другого подхода — алгоритмического можно ответить и на вопрос
“Сколько нужно информации, чтобы воссоздать (описать) объект X?”
Как показал Колмогоров, эту задачу можно строго сформулировать не
только для стохастических объектов, но и для объектов, имеющих вид
последовательности из нулей и единиц. В этом случае теория рекурсивных
функций позволяет строго ввести понятие сложности объекта. На этой основе
А. Н. Колмогоровым был разработан алгоритмический подход к определению
количества информации.
Этот подход основан на теории алгоритмов и предполагает наличие
априорной вероятностной меры на множестве сигналов. Пусть имеется слово
W в алфавите X. Описанием слова W относительно способа описания f
назовем такое слово α в алфавите 0, 1, что f (α) = W , и сложностью этого
слова при данном способе f — длину кратчайшего описания. Оказывается,
что среди алгоритмических способов описания есть оптимальный (дающий с
точностью до константы более короткие описания, чем любой другой).
Сложность относительно этого оптимального способа называется
колмогоровской сложностью R(W ) и определяет количество информации в
слове W .
Комбинаторный подход.
В алгоритмическом подходе количество информации, содержащейся в
слове (последовательности нулей и единиц), по существу, измеряется
минимальной длиной программы, необходимой для воспроизведения этого
слова (последовательности). Возможно иное измерение количества
информации, содержащейся в слове (последовательности из нулей и единиц).
Комбинаторный подход, развиваемый В. Гоппа, приводит к “алгебраической
теории информации”. Количество информации в последовательности
определяется степенью её асимметрии. Пусть имеется алфавит X и слова
длины n в этом алфавите. На словах действует группа перестановок. Тогда
логарифм числа перестановок, переводящий слово в себя, называется θинформацией этого слова. Чем меньше симметрий в слове, тем больше θинформации в нем.
Семантический подход.
Основное достоинство трех перечисленных подходов к определению
количества информации состоит в том, что они опираются на строгие
системы аксиом и поддерживаются развитым математическим аппаратом для
исследования свойств определяемого так количества информации. Основной
недостаток этих подходов состоит в том, что в рамках этих формальных
моделей не удается оценить содержательную сущность каждого сообщения,
его семантику. Этот недостаток был замечен исследователями в скором
времени
после
появления
работы
Шеннона.
Предпринимались
многочисленные
попытки
формального
описания
сущности
интеллектуальных процессов в информационном взаимодействии “источник
— приёмник”. Однако большинство из них нельзя назвать удачными.
Наиболее известна работа И. Бар-Хилпела и Р. Карнана, основанная на
теории формальных логических систем. Однако и эта работа не получила
конструктивного развития. В последние годы интерес к построению
формальных моделей смысла, содержащегося в сообщении, необычайно
возрос в связи с созданием систем автоматического перевода с одного
естественного языка на другой.
Само преобразование содержательной сущности сообщения (его
семантики) в текст скрыто от нашего непосредственного наблюдения. Нам
доступна только его начальная и конечная точки, т. е. смысл, который мы
хотим выразить, и текст, который при этом получается. Для того чтобы
построить систему автоматического перевода, необходимо создать
формализованную процедуру построения моделей “Текст, Смысл”, “Смысл,
Текст”.
По существу, система автоматического перевода с языка A на язык B и
обратно состоит в построении формализованных моделей “Текст, Смысл”,
“Смысл, Текст” для этих языков. Лидером в построении моделей
естественных языков является Московская семантическая школа, основы
которой заложены в работах И. А. Мельчука и Ю. Д. Апресяна.
Прагматический подход.
В работе А. А. Харкевича количество информации, получаемой
приемником, предлагалось оценивать степенью её полезности для
достижения поставленной цели. Такой подход особенно привлекателен для
оценки количества информации в системах управления, в которых
применяется более сложная схема информационного взаимодействия
“источник — приёмник”, чем в концепции Шеннона. В них информация
рассматривается не сама по себе, а как средство, с помощью которого
управляющий объект A может влиять на управляемый объект B с целью
получения желательного поведения этого объекта, оцениваемого критериями
качества.
В этом случае рассматривается двойная схема информационного
взаимодействия. С одной стороны, передается управляющая информация от
A к B о том, как должны меняться состояния B(прямая связь). С другой
стороны, передается информация от B к A о том, насколько реальные
изменения состояний B соответствуют должным (обратная связь). В этой
схеме количество получаемой информации как в прямой, так и в обратной
связи можно оценивать степенью её полезности для достижения цели,
стоящей перед системой управления.
Лекция 5
Информационное взаимодействие
Термин “информация” происходит от латинского “informatio”, что в
переводе на русский язык означает “осведомление”, “разъяснение”, и, по
сути, предполагает наличие какой-либо формы диалога между отправителями
и получателями информации.
Все приведенные выше качественные и количественные определения
информации также предполагают наличие отправителей и получателей
информации, т. е. речь идет о некотором виде взаимодействия объектов.
Взаимодействие объектов, приводящее к изменению знаний хотя бы
одного из них, будем называть информационным взаимодействием.
Для того, чтобы процесс передачи знаний от одного объекта к другому
был успешным, необходимо соблюдение ряда условий. Рассмотрим процесс
информационного взаимодействия на примере передачи знаний посредством
устной речи. Процесс этот многокомпонентный (векторный).
Первая компонента — физическая, т. е. необходимо наличие
физического источника звука (голосовых связок), физической среды
распространения звука (воздуха) и физического приемника (уха).
Вторая компонента — сигнальная: амплитудно и частотно
модулированные колебания.
Третья компонента – лингвистическая: необходимо, чтобы оба
собеседника знали хотя бы один общий язык.
Четвертая компонента — семантическая, т. е. в передаваемом
сообщении должно присутствовать содержательное описание объекта или
явления, чтобы при получении сообщения могли измениться знания у
принимающего эти сообщения.
Наконец, пятая компонента – прагматическая: необходимо наличие
желания (мотивации) передавать и принимать сообщение.
Следовательно, информационное взаимодействие можно представить
пятикомпонентной (пятимерной векторной) величиной, состоящей из
компонент:
– физической;
– сигнальной;
– лингвистической;
– семантической;
– прагматической.
Заметим,
что
приведенное
разбиение
информационного
взаимодействия на пять компонент носит условный характер и возможно
частичное пересечение в этом разбиении. Так, отдельные составляющие
передаваемого сообщения можно отнести к физической или сигнальной,
сигнальной или лингвистической компонентам.
В качестве примера классификации информационных взаимодействий
можно напомнить протокольные уровни в международных стандартах
открытых компьютерных сетей типа Интернет. При взаимодействии двух
пользователей в телекоммуникационной сети реализуется совокупность
протоколов семи уровней:
Семиуровневая модель состоит из следующих уровней:
– физического;
– канального;
– сетевого;
– транспортного;
– сеансового;
– представительского;
– прикладного.
Первые три протокольных уровня определяют такие особенности
работы сети связи при обслуживании пользователей, как стандарт
электрических сигналов в сети, обнаружение и исправление ошибок,
маршрутизация в транспортной сети и т. д.
Последующие четыре уровня определяют такие стандарты
взаимодействия самих пользователей, как контроль за целостностью
сообщения, восстановление без потерь сеанса взаимодействия в случае
прерывания, представление данных на дисплеях и печатающих устройствах и
т. д.
Спектр информационных взаимодействий необычайно широк. Можно
условно разделить изучаемые информационные взаимодействия по объектам
на три класса:
– взаимодействие искусственных (технических) систем;
– взаимодействие смешанных систем;
– взаимодействие естественных (живых) систем.
К первому классу относятся информационные взаимодействия в
технических системах — от простейших регуляторов до глобальных
компьютерных сетей.
Ко второму классу — информационные взаимодействия типа “живой
организм — искусственный орган”, “человек — машина”, “живой
исследователь — неживой объект исследований” и т. д.
К третьему классу относятся информационные взаимодействия,
действующие в пределах от молекулярно-генетического уровня до уровня
социальных сообществ.
При таком многообразии взаимодействующих объектов задача
описания законов информационного взаимодействия необычайно сложна,
поскольку надо описать как обмен однобитовой информацией типа
“включено — выключено” в технических системах, так и формирование
морали в человеческих сообществах.
При описании каждого из этих уровней приходится опираться на
специфическую для соответствующего уровня концепцию преобразователя
информации, свои языки описания, закономерности, разрабатываемые в
рамках соответствующих дисциплин (наук), которые, тем самым, изучают
информационное взаимодействие на данном уровне.
Далее
представлены
примеры,
относящиеся
к
описанию
информационного взаимодействия в природе и технике для трех типов
объектов и пяти компонент информационного взаимодействия. Несмотря на
явно упрощенный характер описания информационного взаимодействия, она
может быть полезна для анализа различных определений информации.
Так, энтропийный подход описывает информацию на сигнальном
уровне, алгоритмический и алгебраический — на лингвистическом уровне, а
логический — на семантическом уровне.
Наибольшие успехи были достигнуты при изучении информационного
взаимодействия для относительно простых сигнальной и лингвистической
компонент. Из этих компонент удалось сформулировать простые и
достаточно общие законы преобразования информации, подобные законам
сохранения энергии
Так, Шеннон вывел зависимость скорости передачи информации по
каналу с шумом от полосы пропускания, а Колмогоров доказал сохранение
сложности при алгоритмических преобразованиях.
К сожалению, многочисленные попытки формализованного описания
информационного взаимодействия семантической компоненты не привели
еще к открытию простых закономерностей, подобно тому, как обстоит дело
для сигнальной компоненты.
Для других компонент информационного взаимодействия можно
сформулировать сегодня только некоторые принципы — условия, при
выполнении которых информационное взаимодействие будет проходить
успешно.
Для информационного взаимодействия недостаточно только передать
сообщение, нужно, чтобы приёмник (адресат) обладал возможностью его
адекватно воспринять. Из этого следует принцип тезауруса: важность
наличия априорной информации, достаточной для дешифровки и усвоения
полученного сообщения. Это означает, в частности, что участники
информационного взаимодействия должны обладать согласованной
информацией об используемых кодах, языках и их семантиках.
Этот принцип подчеркивает первостепенную важность для
информатики лингвистических и семантических исследований в широком
смысле этого слова. В первую очередь речь идет о фрагментах языков
человеческого общения и их семантиках, ставших сегодня основой для
разработки средств человеко-машинного диалога.
Успешное восприятие сообщения зависит не только от способности
адресата дешифровать (понять) содержание сообщения. Важную роль играет
привлекательность сообщения, наличие у адресата стимула для освоения
содержания сообщения.
Это обстоятельство позволяет сформулировать принцип фасцинации
(привлекательности) сообщения, которая зависит от мотивов и целей
адресата, формы сообщения и т. д. Важно отметить, что фасцинация
характеризует состояние адресата, форму сообщения и, в меньшей степени,
его содержание.
Фасцинация как необходимая спутница информации может играть
существенную роль в организации человеко-машинного диалога, в проблеме
понимания текстов на естественных языках и в других задачах
информационного взаимодействия. Следует заметить, что участники
информационного взаимодействия в процессе диалога могут выступать не
только как получатели информации, но и как ее создатели.
Поэтому полезно рассматривать поступающее сообщение не просто как
контейнер с готовой информацией, но и как стимул для порождения
адресатом на основе прошлого опыта и модели ситуации мира новой
информации — принцип маевтики, восходящий к Сократу. В результате
такого информационного взаимодействия адресат может “получить” больше
информации, чем содержалось в сообщении.
Не исключено, что на этом пути будут созданы принципиально новые
способы
организации
человеко-машинного
информационного
взаимодействия и, возможно, новые структуры систем искусственного
интеллекта.
Кроме вышеперечисленных законов и принципов следует упомянуть о
разработанных к настоящему времени методах, моделях и алгоритмах
информационного взаимодействия, имеющих огромное значение для
развития научных исследований.
Если говорить об информационном взаимодействии “исследователь —
исследуемый объект”, то среди них — методы планирования эксперимента,
методы математического и компьютерного моделирования, служащие
методологической
основой
экспериментальных
и
теоретических
исследований.
Популярны у исследователей также методы распознавания образов,
идентификации, адаптации, теории массового обслуживания. Этот перечень
можно было бы продолжать, однако перечисленное позволяет заключить, что
система представлений об информационном взаимодействии сущностей
разной природы уже существует, успешно развивается и заслуживает
пристального внимания, дальнейшего осмысления и поддержки как новая
наука.
Следует отметить, что развитие фундаментальных исследований в этой
области возможно только при совместной работе специалистов по
информатике с математиками, физиками, химиками, биологами, социологами,
лингвистами, психологами, т. е. с представителями различных естественных
и гуманитарных наук.
В то же время, модели и методы информационного взаимодействия
будут служить катализаторами развития функциональных исследований
природных и социокультурных объектов — от уровня фундаментальных
структур материи до уровня взаимодействия социальных групп.
Лекция 6
Знаковые системы.
В самом общем виде знания в памяти компьютера представляются в
виде некоторой знаковой системы. Знаковые системы изучает наука
семиотика. Основным понятием семиотики является понятие знак.
Знак — это объект или событие, которые способны что-то обозначать,
т.е. указывать на некоторый другой объект, и что-то означать, т.е. иметь
некоторый смысл. Например, «Луна» обозначает конкретный физический
объект и имеет смысл «естественный спутник Земли»; знак «π » обозначает
число 3.14, имеет смысл «отношение длины окружности к диаметру».
Не все объекты, сопоставленные другим объектам, выступают в
качестве знаков. Например, паспорт, квитанции или гардеробные номерки не
являются знаками. С понятием знак непосредственно связаны понятия
денотат и концепт знака. Денотат — это объект, обозначаемый данным
знаком, а концепт — свойство денотата, выражаемое знаком. Концепт
определяет свой денотат. Отношение между знаком, его концептом и
денотатом выражает так называемый семиотический треугольник, или
треугольник Фреге (см. рис. 1).
Рисунок 1: Семиотический треугольник
Когда знак реально вступает во взаимодействие со своим денотатом и
концептом, возникает знаковая ситуация. Возможны знаковые ситуации, в
которых одна из вершин семиотического треугольника отсутствует (рис. 2).
Поскольку, по мнению Г.Фреге, знак обозначает денотат через
посредство своего концепта, изобразим семиотический треугольник
вытянутым в цепь (3, К, Д) (рис.3).
Соответствия между знаками, концептами и денотатами не являются
взаимнооднозначными.
Отметим основные особенности употребления знаков (рис. 4).
Знаки z1 , z2 называются синонимичными, если они выражают один и
тот же концепт. Знаки z1 , z2 ,каждый со своим концептом, называются
денотативно тождественными, если они обозначают один и тот же денотат.
Знак z называется омонимичным (или многозначным), если он может
выражать более чем один концепт. Знак z называется денотативно
неоднозначным, если он при одном и том же концепте может обозначать
различные денотаты. Знак z автономен, если его денотатом в данной знаковой
ситуации выступает сам знак.
Рисунок 2: Неоднозначность элементов семиотического треугольника
Из семиотического треугольника следует, что знак имеет две знаковые
функции: обозначает не только денотат, но и его концепт — десигнат данного
знака. Как следует из рис. 4, один и тот же знак может обозначать разные
денотаты. Объем знака — это объем поля денотатов. Важны ми понятиями,
имеющими к треугольнику Фреге непосредственное отношение, являются
понятия экстенсионал и интенсионал.
Рисунок 3: Знаковая система
Экстенсионал знака определяет конкретный класс всех его допустимых
денотатов. Если имя есть предложение, высказывание (т.е. запись некоторого
суждения), то его денотатом служит истинное значение этого предложения
(высказывания, суждения), т.е. «истина» или «ложь».
Интенсионал знака определяет содержание понятия и характеризует
концепт. Интенсиональность знака зависит не только от истинных его
значений, но и от прагматических оттенков этого смысла.
Знаковая система (рис. 5) — это множество знаков с регулярными
отношениями между ними, отражающими регулярные отношения между их
концептами и денотатами. В знаковой системе выделяют три аспекта:
синтактику, семантику и прагматику.
Синтактика изучает внутреннее устройство знаковой системы, правила
построения сложных знаков из простых. Для естественных языков
синтактика выступает в виде синтаксиса, определяющего правильное
построение предложения и связного текста. В искусственных языках
синтактика определяет правильное логическое построение потенциально
осмысленных выражений.
Семантика изучает соотношения, с одной стороны, между знаками и их
денотатами, с другой между знаками и их концептами (смыслами).
Прагматика изучает знаки с точки зрения их отношения к адресату
сообщений.
Морфологический анализ и синтез форм слов
Реализация полного лингвистического анализа текстовой информации
предполагает решение следующих задач:
лексического анализа;
морфологического анализа;
синтаксического анализа;
семантического анализа.
Перечень данных задач упорядочен по логическим этапам реализации
полного лингвистического анализа текстовой информации. Каждая
последующая задача является более трудоемкой, по сравнению с
предыдущими, что обусловлено возрастающей сложностью ее формализации.
Реализация задач лингвистического анализатора зависит от особенностей
обрабатываемого (обрабатываемых) языков, на которых изложена текстовая
информация.
Таким образом, перспективные поисковые системы (машины) должны
включать в свой состав программно-технические комплексы, реализующие
полный перечень задач лингвистического анализа текстовой информации.
Лучшие из существующих поисковых систем выполняют функции
морфологического анализа текстовой информации (как индексируемых
текстов, так и запросов пользователей), а также выполняют отдельные
элементы синтаксического анализа предложений. Алгоритмы работы
существующих поисковых систем основаны на поиске в заранее
проиндексированных текстах ключевых слов. Запрос пользователя поисковой
системы состоит из ключевых слов, и может включать в себя управляющие
символы формализованного языка запросов. Использование языка запросов
обеспечивает более точные результаты поиска, однако, требует от
пользователя его знания. Язык запросов для каждой поисковой системы
уникален, поэтому на практике пользователи редко им пользуются. Это
обуславливает снижение качества поиска за счет увеличения количества
найденных документов с неадекватной информацией и необходимости их
последующего просмотра и анализа.
Синтаксический анализ текстовой информации позволяет выделить
семантические
элементы
предложения
—
именную
группу,
терминологическое целое, предикативную основу. Это позволяет повысить
интеллектуальность процесса обработки тестовой информации на основе
обеспечения работы с более обобщенными семантическими элементами.
Реализация
семантического
анализа
текстовой
информации
предполагает обязательное использование экспертных систем, систем
искусственного интеллекта для выявления семантики информации.
В настоящее время отсутствуют сложившиеся подходы к реализации
задачи семантического анализа текстовой информации, что во много
обусловлено недостаточно полной проработкой научного направления
создания систем искусственного интеллекта.
Лексический анализ заключатся в разборе текстовой информации на
отдельные абзацы, предложения, слова, определении национального языка
изложения, типа предложения, выявлении типа лексических выражений
(бранных, жаргонных слов) и т.д. Он не представляет существенной
сложности для реализации.
Морфологический анализ (Part-of-Speech-tagging)
Задача морфологического анализа — автоматически распознать, какой
части речи принадлежит каждое слово тексте (каждому слову поставить в
соответствие лексико-грамматический класс).
Данная задача может быть выполнена для русского языка практически
со стопроцентной точностью благодаря его развитой морфологии. В
английском языке простой алгоритм, присваивающий каждому слову в тексте
наиболее вероятный для данного слова лексико-грамматический класс
(синтаксическую часть речи) работает с точностью около 90%, что
обусловлено лексической многозначностью английского языка. Для
проведения морфологического анализа русскоязычных текстов обычно
используется компьютерная версия грамматического словаря Зализняка, а для
проведения морфологического анализа англоязычных текстов используется
компьютерная версия грамматического словаря Мюллера. Для улучшения
точности морфологического анализа в случае определения частей речи
многозначных слов используются два типа алгоритмов: вероятностностатистические и основанные на продукционных правилах, оперирующих
словами и кодами.
Большинство вероятностно-статистических алгоритмов использует два
источника информации:
Словарь словоформ языка, в котором каждой словоформе соответствует
множество лексико - грамматических классов, которые могут иметься у
данной словоформы.
Информацию о встречаемости всех возможных последовательностей
лексико-грамматических классов. В зависимости от того, как представлена
данная информация, разделяют биграмную, триграмную и квадриграмную
модели.
Алгоритмы, основанные на продукционных правилах, используют
правила собранные автоматически с корпуса текстов, либо подготовленные
квалифицированными лингвистами.
Оба подхода дают примерно одинаковый результат. При их
использовании раздельно, либо в различных комбинациях, точность лексикограмматического анализа улучшается до 96-98%. Поскольку точность при
лексико-грамматическом анализа текста вручную также имеет определенную
погрешность (0,5-2%), можно считать, что точность лексико-грамматического
анализа в автоматическом режиме достигла практически точности лексикограмматического анализа в ручном режиме.
Синтаксический анализ (Text Parsing)
В отличие от морфологического анализа текста, синтаксический анализ
— развивающаяся область прикладной лингвистики. Цель синтаксического
анализа — автоматическое построение функционального дерева фразы, т.е.
нахождение взаимозависимостей между разноуровневыми элементами
предложения. Считается, что, имея успешно построенное функциональное
дерево фразы, можно выделить из предложения смысловые элементы:
логический субъект, логический предикат, прямые и косвенные дополнения и
различные виды обстоятельств. Существует большое количество различных
количество подходов к синтаксическому анализу текстов, которые
реализованы в следующих программных продуктах:
Ergo Linguistic Technologies Parser;
Functional Dependency Grammar;
Link Parser;
Star4Win (STARLING).
В последнее время над задачами синтаксического анализа предложения
работает множество исследовательских групп, и на настоящий момент можно
считать, что в рамках синтаксического анализа предложения частично решена
и уже нашла применение в производстве задача автоматического выделения
именных групп. Что же касается полного синтаксического разбора
предложения, данная проблема в полном объеме в настоящее время еще не
решена.
Семантический анализ
Целью семантического анализа является определение информативности
текстовой информации и выделение наиболее важной информации из
обрабатываемого текста. Проведение автоматизированного семантического
анализа текста предполагает решение задачи выявления и оценки смыслового
содержания текста. Данная задача является трудно формализуемой
вследствие необходимости наличия совершенного аппарата экспертной
оценки качества информации. Это, в свою очередь, требует наличия априорно
в самой системе семантического анализа гигантского объема полной
информации по оцениваемым рубрикам для проведения оценки смыслового
содержания текста. Таким образом, теряется всякий смысл создания
поисковой системы, которая должна иметь в своем составе полную
информацию по достаточно широкому кругу оцениваемых рубрик, и которая
будет осуществлять оценку смыслового содержания индексируемых
документов. Это обусловлено тем, что поисковая система перерождается в
громоздкую энциклопедическую систему оценки информативности
индексируемых текстов.
Поэтому, семантический анализатор поисковой системы должен
обеспечивать выделение смысловой информации индексируемых текстов на
основе обобщенного критерия о встречающихся именных группах, группах
терминологических целых, предикативных основах в условиях отсутствия
априорно полной информации по оцениваемым рубрикам.
В настоящее время отсутствуют поисковые системы, реализующие в
данном понимании семантический анализ текстовой информации.
При создании поисковых систем, основанных на рубрикаторах, могут
быть использованы алгоритмы автоматического реферирования текстовой
информации (Automatic Text Summarization). На рынке присутствует очень
небольшое количество традиционных программ реферирования, то есть
таких, которые выделяют наиболее весомые предложения из текста используя
статистические алгоритмы, либо слова-подсказки (Inxight Summarizer,
Extractor, TextAnalyst).
Таким образом, в настоящее время не решена задача создания
поисковой машины, реализующей в полном объеме лингвистическую
обработку текстовой информации.
Лекция 7
Объекты и свойства
Каждая из автоматизированных информационных систем (АИС)
соотносится определенной части реального мира, именуемой предметной
областью, и является сферой проблемной ориентации этой системы. При
этом каждая автоматизированная система ориентирована на выполнение
определенных функций в соответствующей ей области применения.
При определении предметной области объект должен иметь
относительно целостный характер и для целей обработки информации
обладать конечным набором свойств. Под свойством понимается некоторая
его характеристика, позволяющая устанавливать его сходство и различие по
отношению к другим объектам. При этом свойства объекта могут быть
индивидуальными и общими, присущими лишь единичным экземплярам и
целому классу объектов соответственно. Например, индивидуальными
свойствами отличаются друг от друга животные одного вида, станки одной
модели, товары одного наименования, а общие свойства имеются у одного
вида растений, у материальных ценностей различных наименований,
объединенных в одну группу. Существенными являются свойства объекта, по
которым он может идентифицироваться в модели предметной области.
Под отношением понимается форма связи между объектами.
Отношения подразделяются на внешние и внутренние. Внешние отражают
связи между объектами, не затрагивая при этом их свойств. Например,
внешними являются структурные отношения между элементами некоторой
системы.
Внутреннее отношение выявляет свойства объектов или обусловливает
зависимость свойств объектов от данного отношения.
Описание предметной области должно вестись на общедоступном
естественном языке. Для этого достаточно использовать предложения
естественного языка, позволяющие именовать объекты и формулировать
утверждения о том, что они обладают некоторыми свойствами, либо о том,
что конкретные объекты находятся в определенных взаимоотношениях.
Однако машины могут оперировать только определенной формой описаний
предметной области.
При этом под описанием предметной области на формальном языке
всегда предполагается соотнесение с ее описанием на естественном языке.
Введение формального языка приводит к необходимости однозначного
перевода описания на одном языке (естественном или формальном) в
описание на другом языке и к необходимости их эквивалентной
интерпретации.
Эквивалентная интерпретация достигается введением абстрактных
состояний предметной области, определенных формально и служащих
однозначной интерпретацией описания состояния как на естественном, так и
на формальном языке. См. рис. 6
Описания на естественном и формальном языках эквивалентны, если
одно из них является результатом перевода другого и если их интерпретацией
служит одно и то же абстрактное состояние.
Простая модель, удовлетворяющая указанным требованиям, отражает
абстрактные состояния, как совокупность множества абстрактных объектов
E, множества типов T (каждый тип Tj ∈ T есть T ∈T подмножество E = ∪Tj )
и совокупности отношений R, в которой каждое отношение Rj j имеет
степень nj .
Интерпретация описания состояний предметной области на
естественном языке IE A есть соответствие:
– фраз, однозначно именующих различные реальные объекты,
различным абстрактным объектам из E;
– фраз, обозначающих свойства объектов, типам из T ;
– фраз, обозначающих взаимоотношения конкретных объектов,
кортежам отношений из R.
Рисунок 4: Предметная область
Один и тот же объект с различными свойствами может принадлежать
нескольким различным типам. Предложение естественного языка есть
утверждение о том, что некоторые объекты обладают определенным
свойством или что между конкретными объектами существуют определенные
взаимоотношения.
В первом случае предложение становится фактом (предложению
соответствует истинное значение), если объекты в абстрактном состоянии
принадлежат типам, определенным фразами, обозначающими свойства
объектов. Во втором случае предложение становится фактом, если объекты,
определяемые связанными друг с другом в предложении именами, образуют
кортеж соответствующего отношения. Если указанные условия не
выполняются, предложению соответствует значение «ложь», и предложение
фактом не является.
Абстрактное состояние является моделью описания состояния на
естественном языке, если имеется интерпретация IE A, такая, что всем
предложениям этого описания соответствует значение «истина», а всем
предложениям, не принадлежащим описанию, — значение «ложь».
Пример описания предметной области приведен ниже.
Описание на естественном языке. «Отдел N 50 есть отдел с названием
отдела ОЭВМ и номером отдела N 50. Проект Ш-Р1 — проект, имеющий
шифр Ш-Р1. Проект Ш-Р2 — проект, имеющий шифр Ш-Р2. Ресурс Р-АВ —
ресурс, имеющий шифр Р-АВ. Отдел N 50 разрабатывает проект Ш-Р1.
Проект Ш-Р1 потребляет ресурс Р-АВ до конечной даты 1.06.84».
Абстрактные состояния ⟨E, T, R⟨, представляющие состояние
рассматриваемой предметной области, а также соответствие элементов
описания предметной области обозначениям объектов, типов и отношений,
приведены ниже:
E = {l1 , l2 , . . . , l1 0}, где
• l1 = «отдел № 50»;
• l2 = «№ 50»;
• l3 = «ОЭВМ»;
• l4 = «проект Ш-Р1»;
• l5 = «Ш-Р1»;
• l6 = «проект Ш-Р2»;
• l7 = «Ш-Р2»;
• l8 = «ресурс Р-АВ»;
• l9 = «Р-АВ»;
• l1 0= «1.06.84».
T = ⟨T1 , T2 , . . . , T8 ⟩
• T1 = «быть отделом»;
• T2 = «быть номером отдела»;
• T3 = «быть названием отдела»;
• T4 = «быть проектом»;
• T5 = «быть шифром проекта»;
• T6 = «быть ресурсом»;
• T7 = «быть шифром ресурса»;
• T8 = «быть датой»;
T1 = {l1 }, T2 = {l2 }, T3 = {l3 }, T4 = {l4 , l6 }, T5 = {l5 , l7 }, T6 = {l8 },
T7 = {l9 }, T8 = {l1 0}.
R = ⟨R1 , R2 , . . . , R6 ⟩
• R1 = «отдел имеет номер отдела»;
• R2 = «отдел имеет название»;
• R3 = «отдел разрабатывает проект»;
• R4 = «проект потребляет ресурс до конечной даты»;
• R5 = «проект имеет шифр проекта»;
• R6 = «ресурс имеет шифр ресурса»;
R1 = {⟨l1 , l2 ⟩}, R2 = {⟨l1 , l3 ⟩}.
Основные принципы описания состояния предметной области на
некотором формальном языке следующие:
информационное содержание раскрывается посредством описания
состояния предметной области на естественном языке, позволяющем
соотносить элементы описания реальным объектам;
формальное установление факта эквивалентности описаний состояния
на различных языках требует их абстрактной интерпретации в терминах
некоторой эталонной модели;
извлечение информации требует обязательного перехода от
формального описания к описанию на естественном языке.
В автоматизированных системах сведения об окружающем нас мире
представляются посредством определенного набора понятий. В качестве
таких понятий выступают единицы информации и информационные
отношения. Рассмотрим их на примере экономических данных.
Лекция 8
Единицы информации
Информационные отношения
Информационные единицы бывают элементарными и составными.
Рассмотрим их на примере накладной. В качестве элементарных единиц
информации выступают реквизиты — логически неделимые элементы,
соотносимые с определенным свойством отображаемого объекта или
процесса. Форма реквизита определяет полное его наименование, тип,
описание множества допустимых значений и другие характеристики. Рис. 7.
Существует ряд типов реквизитов в зависимости от значений, которые
они могут принимать.
Наиболее распространенными являются числовой и текстовый
реквизиты.
Числовые реквизиты характеризуют количественные свойства
экономических явлений, полученные в результате подсчета натуральных
единиц, измерения, взвешивания, вычисления и т. п. Значениями таких
реквизитов являются числа. Примерами служат числовые реквизиты.
Рисунок 5: Пример накладной
Текстовые реквизиты отражают качественные свойства экономических
явлений, дают характеристику тем обстоятельствам, при которых протекало
то или иное экономическое явление или процесс и были получены те или
иные числовые значения. Текстовые реквизиты называют так же
реквизитами-признаками, их использование позволяет однозначно трактовать
тот или иной хозяйственный процесс, не допуская смыслового искажения или
смещения различных процессов или явлений. В качестве текстовых
реквизитов
в
примере
выступают
СКЛАД,
НАИМЕНОВАНИЕ
ПОЛУЧАТЕЛЯ, АДРЕС ПОЛУЧАТЕЛЯ. Над числовыми реквизитами, как
правило, в процессе обработки выполняются арифметические операции, а
над текстовыми — логические. Кроме текстового и числового типов, часто
применяется также логический тип, который определяет, какое из двух
значений имеет величина — истину или ложь.
Каждый из наблюдаемых объектов или процессов характеризует ряд
присущих ему свойств. Изолированно взятый реквизит, характеризующий
одно из свойств, не может служить полной информацией о наблюдаемом
объекте или процессе. Для воспроизведения некоторого сообщения об
объекте, определенной информации о процессе требуется некоторая
взаимосвязанная совокупность реквизитов.
Единицу информации, состоящую из совокупности других единиц,
связанных между собой, называют составной единицей информации (СЕИ).
Единицу информации, входящую в СЕИ, называют составляющей единицей
информации. Для C = (R1 , R2 , . . . , Rm )составляющими являются
реквизиты R1 , R2 , . . . , Rm . Составной единицей является, например,
ДАТА: ДАТА = (ЧИСЛО, МЕСЯЦ, ГОД).
Хотя во многих случаях она рассматривается как один реквизит.
Следует отметить, что существуют и другие реквизиты, кроме даты, которые
могут быть составными. К таким реквизитам относятся множественные
реквизиты, отражающие тот факт, что отображенное свойство объекта может,
иметь несколько значений при представлении объекта, процесса или явления.
В качестве множественного реквизита может выступать реквизит ЗНАНИЕ
ИНОСТРАННЫХ ЯЗЫКОВ в кадровой анкете.
Отдельная личность может владеть несколькими иностранными
языками.
Структуру приказа-накладной можно представить составными
единицами информации следующим образом: C = (C1 , C2 ); C1 = (C11 , C12 ,
C13 ); C11 = (R1 , R2 , R3 , R4 ); C12 = (R5 , R6 , R7 ); C13 =(C131 , R10 , R11 ,
R12 ); C131 = (R8 , R9 ); C2 = (R13 , R14 , Q1 , C21 , Q4 ); C21 = (Q3 , Q4 ).
В составных единицах информации выделяют промежуточные единицы
— группы. Группа, состоящая только из реквизитов, называется простой, а
группы, имеющие в своем составе другие группы, называются составными.
Различают повторяющиеся и неповторяющиеся группы. Повторяющиеся
группы допускают, как и множественные реквизиты, определенное
количество реализаций:
простые группы C11 , C12 , C131 , C21 ;
составные группы C, C1 , C13 , C2 ;
повторяющиеся группы C2 ;
неповторяющиеся — остальные (кроме C2 ).
Из возможных структурных образований — групп, особого внимания
заслуживает группа, называемая показателем. Показатель — это составная
единица информации, состоящая из одного реквизита числового типа,
именуемого основанием показателя и отражающего тот или иной факт в
количественной оценке, и ряда характеризующих его и связанных с ним
реквизитов-признаков текстового типа (времени, места действия,
действующих лиц, предметов, продуктов труда и т. д.).
Общий вид показателя можно представить следующим образом P (1 :
N) (P1 , . . . , Pn , Q), где P1 , . . . , Pn - реквизиты-признаки; Q — реквизитоснование показателя.
Одной из причин выделения показателей в особую разновидность
составных единиц информации является то, что показатель, по существу,
служит минимальной по составу информационной совокупностью,
достаточной для образования самостоятельного документа. Этот документ
может существовать изолированно.
Показатели представляются, с одной стороны, простейшими СЕИ,
способными к документированию, а с другой — сложными образованиями
информации, охватывающими описание многообразных качественных
свойств и количественной характеристики объекта и состоящими в результате
этого из целого ряда реквизитов. Например, в приказе-накладной показателем
является ЦЕНА ИЗДЕЛИЯ:Pcs (1 : N )(R13 , R14 , Q1 ). Составную единицу
информации любой сложности можно свести в конечном итоге к
определенной совокупности различных показателей. Например, приказнакладную можно представить в виде четырех показателей: цена изделия (Pcs
), количество отпущенных со склада изделий (Pco ), количество изделий,
предназначенных на отпуск (Pci ), сумма стоимости отпущенных со склада
изделий (Pac ):
Pcs (1 : N )(R13 , R14 , Q1 ); Pci (1 : N )(P2 , P3 , P4 , P5 , P6 , P7 , P10 ,
P11 , P13 , P14 , Q2 ); Pco (1 : N )(P2 , P3 , P4 , P5 , P6 , P7 ,
Pac (1 : N )(P2 , P3 , P4 , P5 , P6 , P7 , P10 , P11 , P13 , P14 , Q4 ).
Особый интерес представляют показатели со значением основания,
равным 1. Такие показатели внешне выступают с составом, включающим
одни признаки. При основании, равном 1, количество информации будет
больше в том показателе, который содержит большее число признаков,
поскольку он дает более разностороннюю характеристику данному
экономическому хозяйственному процессу или явлению.
Можно ввести условие, что форма показателя с минимальным
составом, включающая одно основание и один признак, содержит единичное
количество информации. Это позволяет ввести логарифмическую меру и
выразить количество информации, содержащейся в показателе в следующем
виде: ∑ I(P ) = log2 (1 + Q) log2 (1 + n q), где n — число реквизитов-признаков
в показателе q=1.
В литературе часто показатели подразделяются по единице измерения
основания на абсолютные и относительные. К абсолютным отнесены
показатели, основания которых получают прямым счетом, измерением,
взвешиванием, алгебраическим суммированием других абсолютных
показателей, различные средние абсолютные показатели. В число
относительных входят показатели, значения оснований которых получены
отношением двух других показателей (удельный вес, отношение двух частей
и т. д.)
Информационные отношения
Между различными объектами, свойствами объектов и объектами
существуют всевозможные объективные отношения, определяемые
предметной областью (пространственные, временные, функциональные и т.
п.). При информационном отображений объектов и присущих им свойств эти
отношения переносятся на отношения между составными единицами
информации, с помощью которых представляются объекты и их свойства.
Для установления связи между составными единицами информации
используется понятие «групповое отношение». Групповым отношением
называется бинарное отношение Sk ⊂ Gi × Gj , заданное на двух множествах
групп Gi и Gj . Групповое отношение позволяет устанавливать связи между
группами и тем самым выражать отношения между объектами. Групповые
отношения различаются прежде всего тем, как связаны между собой
конкретные представители множеств групп Gi и Gj в групповом отношении.
Часто основные виды групповых отношений называют отношениями 1 : 1,1 :
n, n : 1 и n : m, а указанные пары чисел- коэффициентом группового
отношения.
В отношении с коэффициентами группового отношения вида 1 : 1, 1 : n
и n : m группа qi называется родительской, a qj - подчиненной. В отношении
n : 1, наоборот, qj — родительская, a qi - подчиненная.
Иерархическим называется групповое отношение, в котором каждая
подчиненная группа может быть связана только с одной родительской.
Отношения вида 1 : 1, 1 : n, n : 1 являются иерархическими.
Неиерархическое отношение, напротив, позволяет соотносить каждую
подчиненную группу с произвольным числом родительских групп. Иногда
групповые отношения вида 1 : 1, 1 : n, n : 1 называют функциональными.
Действительно, в первом и третьем случаях Sk — функция, а во втором —
функцией является отношение Sk .
Рисунок 6: Групповое отношение
Реализацией группового отношения Sk называют группу qi ∈ Gi вместе
с совокупностью Iqj = {qj , . . . , qj }, таких, что ⟨qi , qj ⟩ ∈ Sk , для любых qj ∈
Iqj .Говорят, что qi — владелец реализации группового отношения, a qj ∈ Iqj
— члены реализации.
Графически группы и групповые отношения удобно изображать в виде
диаграмм, используя следующие соглашения. На диаграммах группы
изображаются прямоугольником, над левым верхним углом которого
помещается имя группы. Внутри прямоугольника могут быть показаны
имена реквизитов. Групповые отношения обозначаются стрелками,
проведенными от родительского к подчиненному типу группы с возможным
указанием коэффициента группового отношения (1 : 1, 1 : n, n : 1 и n : m) и
имени группового отношения.
Если диаграмму трактовать как ориентированный граф и группы в
диаграмме отождествлять с вершиной графа, а отношения — с дугой графа,
то путем в диаграмме называется такая последовательность групповых
отношений (дуг), что конец каждой предыдущей дуги совпадает с началом
следующей. Рис. 9.
Рисунок 7: Диаграмма группы
Лекция 9
Формальные языки и грамматики
Языки и цепочки символов. Способы задания языков
Грамматики и распознаватели
Цепочкой символов (или строкой) называют произвольную
упорядоченную конечную последовательность символов, записанных один за
другим. Понятие символа (или буквы) является базовым в теории
формальных языков и не нуждается в определении.Далее цепочки символов
будем обозначать греческими буквами: a, b, g.
Цепочка символов — это последовательность, в которую могут
входить любые допустимые символы. Строка, которую вы сейчас читаете,
является примером цепочки, допустимые символы в которой — строчные и
заглавные русские буквы, знаки препинания и символ пробела. Но цепочка
— это необязательно некоторая осмысленная последовательность символов.
Последовательность “аввв..аагрьь ,..лл” — тоже пример цепочки символов.
Цепочка символов — это упорядоченная последовательность символов.
Это значит, что для цепочки символов имеют значение три фактора: состав
входящих в цепочку символов, их количество, а также порядок символов в
цепочке. Поэтому цепочки “а” и “аа”, а также “аб” и “ба” — это различные
цепочки символов. Цепочки символов a и b равны (совпадают), a = b, если
они имеют один и тот же состав символов, одно и то же их количество и
одинаковый порядок следования символов в цепочке. Количество символов в
цепочке называют длиной цепочки. Длина цепочки символов a обозначается
как |a|. Очевидно, что если a = b, то и |a| = |b|. Основной операцией над
цепочками символов является операция конкатенации (объединения или
сложения) цепочек. Конкатенация (сложение, объединение) двух цепочек
символов — это дописывание второй цепочки в конец первой. Конкатенация
цепочек a и b обозначается как ab. Выполнить конкатенацию цепочек просто:
например, если a = аб, а b = вг, то ab = абвг.
ВНИМАНИЕ
Так как в цепочке важен порядок символов, то очевидно, что для
операции конкатенации двух цепочек символов важно, в каком порядке
записаны цепочки. Иными словами, конкатенация цепочек символов не
обладает свойством коммутативности, то есть в общем случае $ a и b такие,
что ab № ba (например, для a = аб и b = вг: ab = абвг, а ba = вгаб и ab № ba).
Также
очевидно,
что
конкатенация
обладает
свойством
ассоциативности, то есть (ab)g = a(bg). Любую цепочку символов языка
можно представить как конкатенацию составляющих ее частей — разбить
цепочку на несколько подцепочек. Такое разбиение можно выполнить
несколькими способами произвольным образом. Например, цепочку g = абвг
можно представить в виде конкатенации цепочек a = аб и b = вг (g = ab), а
можно — в виде конкатенации цепочек u = а и w = бвг (g = uw). Чем длиннее
исходная цепочка, тем больше вариантов разбиения ее на составляющие
подцепочки.
Если некоторую цепочку символов разбить на составляющие ее
подцепочки, а затем заменить одну из подцепочек на любую произвольную
цепочку символов, то в результате получится новая цепочка символов. Такое
действие называется заменой, или подстановкой, цепочки. Например,
возьмем все ту же цепочку g = абвг, разобьем ее на три подцепочки: a = а, w
= б и b = вг (g = awb), и выполним подстановку цепочки u = аба вместо
подцепочки w. Получим новую цепочку g’ = аабавг (g’ = aub). Любая
подстановка выполняется с помощью разбиения исходной цепочки на
подцепочки и операции конкатенации.
Можно выделить еще две операции над цепочками: Обращение
цепочки — это запись символов цепочки в обратном порядке. Обращение
цепочки a обозначается как aR. Если a = “абвг”, то aR = “гвба”. Для операции
обращения справедливо следующее равенство " a,b: (ab)R = b RaR. Итерация
(повторение) цепочки n раз, где nОN, n > 0 — это конкатенация цепочки
самой с собой n раз. Итерация цепочки a n раз обозначается как an. Для
операции повторения справедливы следующие равенства " a: a1 = a, a2 = aa, a3 =
aaa
, … и т. д. Итерация цепочки символов определена и для n = 0 — в этом
случае результатом итерации будет пустая цепочка символов. Пустая
цепочка символов — это цепочка, не содержащая ни одного символа. Пустую
цепочку здесь везде будем обозначать греческой буквой l (в литературе ее
иногда обозначают латинской буквой e или греческой e). Для пустой цепочки
справедливы следующие равенства:
1. |1| = 0
2. "a: la = al = a
3. lR = l
4. "n і 0: ln = 1
5. "a: a0 = 1
Понятие языка. Формальное определение языка
В общем случае язык — это заданный набор символов и правил,
устанавливающих способы комбинации этих символов между собой для
записи осмысленных текстов. Основой любого естественного или
искусственного языка является алфавит, определяющий набор допустимых
символов языка.
Алфавит — это счетное множество допустимых символов языка. Будем
обозначать это множество символом V. Интересно, что согласно
формальному определению, алфавит не обязательно должен быть конечным
множеством, но реально все существующие языки строятся на основе
конечных алфавитов.
Цепочка символов a является цепочкой над алфавитом V: a(V), если в
нее входят только символы, принадлежащие множеству символов V. Для
любого алфавита V пустая цепочка l может как являться, так и не являться
цепочкой l(V). Это условие оговаривается дополнительно.
Если V — некоторый алфавит, то:
V+ — множество всех цепочек над алфавитом V без 1;
V* — множество всех цепочек над алфавитом V, включая 1.
Справедливо равенство: V* = V+И{l}.
Языком L над алфавитом V: L(V) называется некоторое счетное
подмножество цепочек конечной длины из множества всех цепочек над
алфавитом V. Из этого определения следует два вывода: во-первых,
множество цепочек языка не обязано быть конечным; во-вторых, хотя каждая
цепочка символов, входящая в язык, обязана иметь конечную длину, эта
длина может быть сколь угодно большой и формально ничем не ограничена.
Все существующие языки подпадают под это определение. Большинство
реальных естественных и искусственных языков содержат бесконечное
множество цепочек. Также в большинстве языков длина цепочки ничем не
ограничена (например, этот длинный текст — пример цепочки символов
русского языка). Цепочку символов, принадлежащую заданному языку, часто
называют предложением языка, а множество цепочек символов некоторого
языка L(V) — множеством предложений этого языка.
Для любого языка L(V) справедливо: L(V)НV*.
Язык L(V) включает в себя язык L'(V): L'(V)НL(V), если "aОL(V):
aОL'(V). Множество цепочек языка L'(V) является подмножеством
множества цепочек языка L(V) (или эти множества совпадают). Очевидно,
что оба языка должны строиться на основе одного и того же алфавита.
Два языка L(V) и L'(V) совпадают (эквивалентны): L'(V) = L(V), если
L'(V)Н L(V) и L(V)НL'(V); или, что то же самое: "aОL'(V): aОL(V) и "bОL(V):
bОL'(V). Множества допустимых цепочек символов для эквивалентных
языков равны.
Два языка L(V) и L'(V) почти эквивалентны: L'(V)@L(V), если
L'(V)И{l} = = L(V)И{l}. Множества допустимых цепочек символов почти
эквивалентных языков могут различаться только на пустую цепочку
символов.
Способы задания языков. Синтаксис и семантика языка
Итак, каждый язык — это множество цепочек символов над некоторым
алфавитом. Но кроме алфавита язык предусматривает также правила
построения допустимых цепочек, поскольку обычно далеко не все цепочки
над заданным алфавитом принадлежат языку. Символы могут объединяться в
слова или лексемы — элементарные конструкции языка, на их основе
строятся предложения — более сложные конструкции. И те и другие в общем
виде являются цепочками символов, но предусматривают некоторые правила
построения. Таким образом, необходимо указать эти правила, или, строго
говоря, задать язык.
В общем случае язык можно определить тремя способами:
1. Перечислением всех допустимых цепочек языка;
2. Указанием способа порождения цепочек языка (заданием
грамматики языка);
3. Определением метода распознавания цепочек языка.
Первый из методов является чисто формальным и на практике не
применяется, так как большинство языков содержат бесконечное число
допустимых цепочек и перечислить их просто невозможно. Трудно себе
представить, чтобы появилась возможность перечислить, например,
множество всех правильных текстов на русском языке или всех правильных
программ на языке Pascal. Иногда для чисто формальных языков можно
перечислить множество входящих в них цепочек, прибегнув к
математическим определениям множеств. Однако этот подход уже стоит
ближе ко второму способу.
Например, запись L({0,1}) = {0n1n, n > 0} задает язык над алфавитом V = {0,1},
содержащий все последовательности с чередующимися символами 0 и 1,
начинающиеся с 0 и заканчивающиеся 1. Видно, что пустая цепочка
символов в этот язык не входит. Если изменить условие в этом определении с
n > 0 на n і 0, то получим почти эквивалентный язык L'({0,1}), содержащий
пустую цепочку.
Второй способ предусматривает некоторое описание правил, с
помощью которых строятся цепочки языка. Тогда любая цепочка,
построенная с помощью этих правил из символов алфавита языка, будет
принадлежать заданному языку. Например, с правилами построения цепочек
символов русского языка вы долго и упорно знакомились в средней школе.
Третий способ предусматривает построение некоторого логического
устройства (распознавателя) — автомата, который на входе получает цепочку
символов, а на выходе выдает ответ: принадлежит или нет эта цепочка
заданному языку. Например, читая сейчас этот текст, вы в некотором роде
выступаете в роли распознавателя (надеюсь, что ответ на вопрос о
принадлежности текста русскому языку будет положительным). Говоря о
любом языке, можно выделить его синтаксис и семантику. Кроме того,
трансляторы имеют дело также с лексическими конструкциями (лексемами),
которые задаются лексикой языка. Ниже даны определения всех этих
понятий.
Синтаксис языка — это набор правил, определяющий допустимые
конструкции языка. Синтаксис определяет “форму языка” — задает набор
цепочек символов, которые принадлежат языку. Чаще всего синтаксис языка
можно задать в виде строгого набора правил, но полностью это утверждение
справедливо только для чисто формальных языков. Даже для большинства
языков программирования набор заданных синтаксических конструкций
нуждается в дополнительных пояснениях, а синтаксис языков естественного
общения вполне соответствует общепринятому мнению о том, что
“исключения только подтверждают правило”.
Например, любой окончивший среднюю школу может сказать, что
строка “3 + 2” является арифметическим выражением, а “3 2 +” — не
является. Правда, не каждый задумается при этом, что он оперирует
синтаксисом алгебры.
Семантика языка — это раздел языка, определяющий значение
предложений языка. Семантика определяет “содержание языка” — задает
смысл для всех допустимых цепочек языка. Семантика для большинства
языков определяется неформальными методами (отношения между знаками и
тем, что они обозначают, изучаются семиотикой). Чисто формальные языки
лишены какого-либо смысла. Возвращаясь к примеру, приведенному выше, и
используя семантику алгебры, мы можем сказать, что строка “3 + 2” есть
сумма чисел 3 и 2, а также то, что “3 + 2 = 5” — это истинное выражение.
Однако изложить любому ученику синтаксис алгебры гораздо проще, чем ее
семантику, хотя в случае алгебры семантику как раз можно определить
формально.
Лексика — это совокупность слов (словарный запас) языка. Слово или
лексическая единица (лексема) языка — это конструкция, которая состоит из
элементов алфавита языка и не содержит в себе других конструкций. Иначе
говоря, лексическая единица может содержать только элементарные символы
и не может содержать других лексических единиц.
Лексическими единицами (лексемами) русского языка являются слова
русского языка, а знаки препинания и пробелы представляют собой
разделители, не образующие лексем. Лексическими единицами алгебры
являются числа, знаки математических операций, обозначения функций и
неизвестных величин. В языках программирования лексическими единицами
являются ключевые слова, идентификаторы, константы, метки, знаки
операций; в них также существуют и разделители (запятые, скобки, точки с
запятой и т. д.).
Особенности языков программирования
Языки программирования занимают некоторое промежуточное
положение между формальными и естественными языками. С формальными
языками их объединяют строгие синтаксические правила, на основе которых
строятся предложения языка. От языков естественного общения в языки
программирования перешли лексические единицы, представляющие
основные ключевые слова (чаще всего это слова английского языка, но
существуют языки программирования, чьи ключевые слова заимствованы из
русского и других языков). Кроме того, из алгебры языки программирования
переняли основные обозначения математических операций, что также делает
их более понятными человеку.
Для задания языка программирования необходимо решить три вопроса:
 определить множество допустимых символов языка;
 определить множество правильных программ языка;
 задать смысл для каждой правильной программы.
Только первые два вопроса полностью или частично удается решить с
помощью теории формальных языков. Для решения остальных вопросов
приходится прибегать к другим, неформальным методам.
Первый вопрос решается легко. Определяя алфавит языка, мы
автоматически определяем множество допустимых символов. Для языков
программирования алфавит — это чаще всего тот набор символов, которые
можно ввести с клавиатуры. Основу его составляет младшая половина
таблицы международной кодировки символов (таблицы ASCII ), к которой
добавляются символы национальных алфавитов.
Второй вопрос решается в теории формальных языков только частично.
Для всех языков программирования существуют правила, определяющие
синтаксис языка, но как уже было сказано, их недостаточно для того, чтобы
строго определить все допустимые предложения языков программирования.
Дополнительные ограничения накладываются семантикой языка. Эти
ограничения оговариваются в неформальном виде для каждого отдельного
языка программирования. К таким ограничениям можно отнести
необходимость предварительного описания переменных и функций,
необходимость соответствия типов переменных и констант в выражениях,
формальных и фактических параметров в вызовах функций и др.
Отсюда следует, что практически все языки программирования, строго
говоря, не являются формальными языками. И именно поэтому во всех
трансляторах кроме синтаксического разбора и анализа предложений языка
дополнительно предусмотрен семантический анализ.
Третий вопрос в принципе не относится к теории формальных языков,
поскольку, как уже было сказано, такие языки лишены какого-либо смысла.
Для ответа на него нужно использовать другие подходы.
В следующей главе, посвященной основным принципам построения
трансляторов и компиляторов, будут более подробно указаны отличия
языков программирования от формальных языков, которые нужно принимать
во внимание при создании трансляторов и компиляторов для языков
программирования.
Грамматики и распознаватели
Формальное определение грамматики. Форма Бэкуса—Наура
Грамматика — это описание способа построения предложений
некоторого языка. Иными словами, грамматика — это математическая
система, определяющая язык.
Фактически, определив грамматику языка, мы указываем правила
порождения цепочек символов, принадлежащих этому языку. Таким образом,
грамматика — это генератор цепочек языка. Она относится ко второму
способу определения языков — порождению цепочек символов.
Грамматику языка можно описать различными способами. Например,
грамматика русского языка описывается довольно сложным набором правил,
которые изучают в начальной школе. Для некоторых языков (в том числе для
синтаксических
конструкций
языков
программирования)
можно
использовать формальное описание грамматики, построенное на основе
системы правил (или продукций).
Правило (или продукция) — это упорядоченная пара цепочек символов
(a,b). В правилах важен порядок цепочек, поэтому их чаще записывают в
виде a ® b (или a ::= b). Такая запись читается как “a порождает b” или “b по
определению есть a”.
ВНИМАНИЕ
Далее, говоря о грамматиках языков программирования, будем иметь в
виду только правила построения синтаксических конструкций языка. Однако
следует помнить, что грамматика любого языка программирования в общем
случае не ограничивается только этими правилами.
Язык, заданный грамматикой G, обозначается как L(G).
Две грамматики G и G' называются эквивалентными, если они
определяют один и тот же язык: L(G) = L(G'). Две грамматики G и G'
называются почти эквивалентными, если заданные ими языки различаются
не более чем на пустую цепочку символов: L(G)И{1} = L(G')И{1}.
Формально грамматика G определяется как четверка G(VT,VN,P,S),
где:
VT — множество терминальных символов или алфавит терминальных
символов;
VN — множество нетерминальных символов или алфавит
нетерминальных символов;
P — множество правил (продукций) грамматики, вида a®b, где
aО(VNИVT)+, bО(VNИVT)*;
S — целевой (начальный) символ грамматики SОVN.
Алфавиты терминальных и нетерминальных символов грамматики не
пересекаются: VNЗVT = Ж. Это значит, что каждый символ в грамматике
может быть либо терминальным, либо нетерминальным, но не может быть
терминальным и нетерминальным одновременно. Целевой символ
грамматики — это всегда нетерминальный символ. Множество V = VNИVT
называют полным алфавитом грамматики G.
Далее будут даны строгие формальные описания того, как связаны
различные элементы грамматики и порождаемый ею язык. А пока
предварительно опишем смысл множеств VN и VT. Множество
терминальных символов VT содержит символы, которые входят в алфавит
языка, порождаемого грамматикой. Как правило, символы из множества VT
встречаются только в цепочках правых частей правил. Множество
нетерминальных символов VN содержит символы, которые определяют
слова, понятия, конструкции языка. Каждый символ этого множества может
встречаться в цепочках как левой, так и правой частей правил грамматики, но
он обязан хотя бы один раз быть в левой части хотя бы одного правила.
Правила грамматики обычно строятся так, чтобы в левой части каждого
правила был хотя бы один нетерминальный символ.
Во множестве правил грамматики может быть несколько правил,
имеющих одинаковые левые части, вида: a ® b1, a ® b2, … a ® bn. Тогда эти
правила объединяют вместе и записывают в виде: a ® b1 | b2 |…| bn. Одной
строке в такой записи соответствует сразу n правил.
Такую форму записи правил грамматики называют формой Бэкуса—
Наура. Форма Бэкуса—Наура предусматривает, как правило, также, что
нетерминальные символы берутся в угловые скобки: < >. Иногда знак ® в
правилах грамматики заменяют на знак ::= (что характерно для старых
монографий), но это всего лишь незначительные модификации формы
записи, не влияющие на ее суть.
Ниже приведен пример грамматики, которая определяет язык целых
десятичных чисел со знаком:
G({0,1,2,3,4,5,6,7,8,9,–,+},{<число>,<чс>,<цифра>},P,<число>)
P:
<<число> ® <чс> | +<чс> | –<чс>
<<чс> ® <цифра> | <чс><цифра>
<<цифра> ® 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Рассмотрим составляющие элементы грамматики G:

множество терминальных символов VT содержит двенадцать
элементов: десять десятичных цифр и два знака;
 множество нетерминальных символов VN содержит три элемента:
символы <число>, <чс> и <цифра>;
 множество правил содержит 15 правил, которые записаны в три
строки (то есть имеется только три различных правых части правил);
 целевым символом грамматики является символ <число>.
Следует отметить, что символ <чс> — это бессмысленное сочетание
букв русского языка, но это обычный нетерминальный символ грамматики,
такой же, как и два других. Названия нетерминальных символов не обязаны
быть осмысленными, это сделано просто для удобства понимания правил
грамматики человеком. В принципе, в любой грамматике можно полностью
изменить имена всех нетерминальных символов, не меняя при этом языка,
заданного грамматикой, — точно так же, например, в программе на языке
Pascal можно изменить имена идентификаторов, и при этом не изменится
смысл программы.
Для терминальных символов это неверно. Набор терминальных
символов всегда строго соответствует алфавиту языка, определяемого
грамматикой.
Вот, например, та же самая грамматика для языка целых десятичных
чисел со знаком, в которой нетерминальные символы обозначены большими
латинскими буквами (далее это будет часто применяться в примерах):
G'({0,1,2,3,4,5,6,7,8,9,–,+},{S,T,F},P,S)
P:
S ® T | +T | –T
T ® F | TF
F®0|1|2|3|4|5|6|7|8|9
Здесь изменилось только множество нетерминальных символов. Теперь
VN = {S,T,F}. Язык, заданный грамматикой, не изменился — можно сказать,
что грамматики G и G' эквивалентны.
Лекция 10
Грамматики и распознаватели
Принцип рекурсии в правилах грамматики
Особенность рассмотренных выше формальных грамматик в том, что
они позволяют определить бесконечное множество цепочек языка с
помощью конечного набора правил (конечно, множество цепочек языка тоже
может быть конечным, но даже для простых реальных языков это условие
обычно не выполняется). Приведенная выше в примере грамматика для
целых десятичных чисел со знаком определяет бесконечное множество
целых чисел с помощью 15 правил.
В такой форме записи грамматики возможность пользоваться
конечным набором правил достигается за счет рекурсивных правил. Рекурсия
в правилах грамматики выражается в том, что один из нетерминальных
символов определяется сам через себя. Рекурсия может быть
непосредственной (явной) — тогда символ определяется сам через себя в
одном правиле, либо косвенной (неявной) — тогда то же самое происходит
через цепочку правил.
В рассмотренной выше грамматике G непосредственная рекурсия
присутствует в правиле: <чс> ® <чс><цифра>, а в эквивалентной ей
грамматике G' — в правиле: T ® TF.
Чтобы рекурсия не была бесконечной, для участвующего в ней
нетерминального символа грамматики должны существовать также и другие
правила, которые определяют его, минуя его самого, и позволяют избежать
бесконечного рекурсивного определения (в противном случае этот символ в
грамматике был бы просто не нужен). Такими правилами являются <чс> ®
<цифра> — в грамматике G и T ® F — в грамматике G'.
В теории формальных языков более ничего сказать о рекурсии нельзя.
Но чтобы полнее понять смысл рекурсии, можно прибегнуть к семантике
языка — в рассмотренном выше примере это язык целых десятичных чисел
со знаком. Рассмотрим его смысл.
Если попытаться дать определение тому, что же является числом, то
начать можно с того, что любая цифра сама по себе есть число. Далее можно
заметить, что любые две цифры — это тоже число, затем — три цифры и т. д.
Если строить определение числа таким методом, то оно никогда не будет
закончено (в математике разрядность числа ничем не ограничена). Однако
можно заметить, что каждый раз, порождая новое число, мы просто
дописываем цифру справа (поскольку привыкли писать слева направо) к уже
написанному ряду цифр. А этот ряд цифр, начиная от одной цифры, тоже в
свою очередь является числом. Тогда определение для понятия “число”
можно построить таким образом: “число — это любая цифра либо другое
число, к которому справа дописана любая цифра”. Именно это и составляет
основу правил грамматик G и G' и отражено в правилах <чс> ® <цифра> |
<чс><цифра> и T ® F | TF (вторая строка правил). Другие правила в этих
грамматиках позволяют добавить к числу знак (первая строка правил) и дают
определение понятию “цифра” (третья строка правил). Они элементарны и не
требуют пояснений.
Принцип рекурсии (иногда его называют “принцип итерации”, что не
меняет сути) — важное понятие в представлении о формальных грамматиках.
Так или иначе, явно или неявно рекурсия всегда присутствует в грамматиках
любых реальных языков программирования. Именно она позволяет строить
бесконечное множество цепочек языка, и говорить об их порождении
невозможно без понимания принципа рекурсии. Как правило, в грамматике
реального языка программирования содержится не одно, а целое множество
правил, построенных с помощью рекурсии.
Другие способы задания грамматик
Форма Бэкуса—Наура — удобный с формальной точки зрения, но не
всегда доступный для понимания способ записи формальных грамматик.
Рекурсивные определения хороши для формального анализа цепочек языка,
но не удобны с точки зрения человека. Например, то, что правила <чс> ®
<цифра> | <чс><цифра> отражают возможность для построения числа
дописывать справа любое число цифр, начиная от одной, неочевидно и
требует дополнительного пояснения.
Но при создании языка программирования важно, чтобы его
грамматику понимали не только те, кому предстоит создавать компиляторы
для этого языка, но и пользователи языка — будущие разработчики
программ. Поэтому существуют другие способы описания правил
формальных грамматик, которые ориентированы на большую понятность для
человека.
Далее рассмотрим два наиболее распространенных из этих способов:
запись правил грамматик с использованием метасимволов и запись правил
грамматик в графическом виде.
Запись правил грамматик с использованием метасимволов Запись
правил грамматик с использованием метасимволов предполагает, что в
строке правила грамматики могут встречаться специальные символы —
метасимволы, — которые имеют особый смысл и трактуются специальным
образом. В качестве таких метасимволов чаще всего используются
следующие символы: ( ) (круглые скобки), [ ] (квадратные скобки), { }
(фигурные скобки), " " (кавычки) и , (запятая). Эти метасимволы имеют
следующий смысл:
 круглые скобки означают, что из всех перечисленных внутри них
цепочек символов в данном месте правила грамматики может стоять только
одна цепочка;
 квадратные скобки означают, что указанная в них цепочка может
встречаться, а может и не встречаться в данном месте правила грамматики
(то есть может быть в нем один раз или ни одного раза);
 фигурные скобки означают, что указанная внутри них цепочка может
не встречаться в данном месте правила грамматики ни одного раза,
встречаться один раз или сколь угодно много раз;
 запятая служит для того, чтобы разделять цепочки символов внутри
круглых скобок;
 кавычки используются в тех случаях, когда один из метасимволов
нужно включить в цепочку обычным образом — то есть когда одна из скобок
или запятая должны присутствовать в цепочке символов языка (если саму
кавычку нужно включить в цепочку символов, то ее надо повторить дважды
— этот принцип знаком разработчикам программ).
Вот как должны выглядеть правила рассмотренной выше грамматики
G, если их записать с использованием метасимволов:
<число> ® [(+,–)]<цифра>{<цифра>}
<цифра> ® 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Вторая строка правил не нуждается в комментариях, а первое правило
читается так: “число есть цепочка символов, которая может начинаться с
символов + или –, должна содержать дальше одну цифру, за которой может
следовать любое количество цифр”. В отличие от формы Бэкуса—Наура, в
форме записи с помощью метасимволов, как видно, во-первых, убран из
грамматики малопонятный нетерминальный символ <чс>, а во-вторых —
удалось полностью исключить рекурсию. Грамматика в итоге стала более
понятной.
Форма записи правил с использованием метасимволов — это удобный
и понятный способ представления правил грамматик. Она во многих случаях
позволяет полностью избавиться от рекурсии, заменив ее символом итерации
{ } (фигурные скобки). Как будет понятно из дальнейшего материала, эта
форма наиболее употребительна для одного из типов грамматик —
регулярных грамматик.
Кроме указанных выше метасимволов в целях удобства записи в
описаниях грамматик иногда используют и другие метасимволы, при этом
предварительно дается разъяснение их смысла. Принцип записи от этого не
меняется. Также иногда дополняют смысл уже существующих метасимволов.
Например, для метасимвола { } (фигурные скобки) существует удобная
форма записи, позволяющая ограничить число повторений цепочки
символов, заключенной внутри них: { }n, где nОN и n > 0. Такая запись
означает, что цепочка символов, стоящая в фигурных скобках, может быть
повторена от 0 до n раз (не более n раз). Это очень удобный метод наложения
ограничений на длину цепочки.
Для рассмотренной выше грамматики G таким способом можно,
например, записать правила, если предположить, что она должна порождать
целые десятичные числа, содержащие не более 15 цифр:
<<число> ® [(+,–)]<цифра>{<цифра>}14
<цифра> ® 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Для записи того же самого ограничения в форме Бэкуса—Наура или в
форме с метасимволами потребовалось бы 15 правил.
Запись правил грамматик в графическом виде При записи правил в
графическом виде вся грамматика представляется в форме набора
специальным образом построенных диаграмм. Эта форма была предложена
при описании грамматики языка Pascal, а затем она получила широкое
распространение в литературе. Она доступна не для всех типов грамматик, а
только для тех типов, где в левой части правил присутствует не более одного
символа, но этого достаточно, чтобы ее можно было использовать для
описания грамматик известных языков программирования.
В такой форме записи каждому нетерминальному символу грамматики
соответствует диаграмма, построенная в виде направленного графа. Граф
имеет следующие типы вершин:
 точка входа (на диаграмме никак не обозначена, из нее просто
начинается входная дуга графа);

нетерминальный
символ
(на
диаграмме
обозначается
прямоугольником, в который вписано обозначение символа);
 цепочка терминальных символов (на диаграмме обозначается овалом,
кругом или прямоугольником с закругленными краями, внутрь которого
вписана цепочка);
 узловая точка (на диаграмме обозначается жирной точкой или
закрашенным кружком);
 точка выхода (никак не обозначена, в нее просто входит выходная
дуга графа).
Каждая диаграмма имеет только одну точку входа и одну точку
выхода, но сколько угодно вершин других трех типов. Вершины
соединяются между собой направленными дугами графа (линиями со
стрелками). Из входной точки дуги могут только выходить, а во входную
точку — только входить. В остальные вершины дуги могут как входить, так и
выходить (в правильно построенной грамматике каждая вершина должна
иметь как минимум один вход и как минимум один выход).
Чтобы построить цепочку символов, соответствующую какому-либо
нетерминальному символу грамматики, надо рассмотреть диаграмму для
этого символа. Тогда, начав движение от точки входа, надо двигаться по
дугам графа диаграммы через любые вершины вплоть до точки выхода. При
этом, проходя через вершину, обозначенную нетерминальным символом,
этот символ следует поместить в результирующую цепочку. При
прохождении через вершину, обозначенную цепочкой терминальных
символов, эти символы также следует поместить в результирующую
цепочку. При прохождении через узловые точки диаграммы над
результирующей цепочкой никаких действий выполнять не надо. Через
любую вершину графа диаграммы, в зависимости от возможного пути
движения, можно пройти один раз, ни разу или сколь угодно много раз. Как
только мы попадем в точку выхода диаграммы, построение результирующей
цепочки будет закончено.
Результирующая цепочка, в свою очередь, может содержать
нетерминальные символы. Чтобы заменить их на цепочки терминальных
символов, нужно, опять же, рассматривать соответствующие им диаграммы.
И так до тех пор, пока в цепочке не останутся только терминальные символы.
Очевидно, что для того, чтобы построить цепочку символов заданного языка,
надо начать рассмотрение с диаграммы целевого символа грамматики.
Это удобный способ описания правил грамматик, оперирующий
образами, а потому ориентированный исключительно на людей. Даже
простое изложение его основных принципов здесь оказалось довольно
громоздким, в то время как суть способа довольно проста. Это можно легко
заметить, если посмотреть на описание понятия “число” из грамматики G с
помощью диаграмм на рис. 1.
Как уже было сказано выше, данный способ в основном применяется в
литературе при изложении грамматик языков программирования. Для
пользователей — разработчиков программ — он удобен, но практического
применения в компиляторах пока не имеет.
Существуют и другие способы описания грамматик, но поскольку они
не так часто встречаются в литературе, как два описанных выше способа, в
данном учебном пособии они не рассматриваются.
Распознаватели. Общая схема распознавателя
Распознаватель (или разборщик) — это специальный автомат, который
позволяет определить принадлежность цепочки символов некоторому языку.
Задача распознавателя заключается в том, чтобы на основании исходной
цепочки дать ответ на вопрос, принадлежит ли она заданному языку или нет.
Распознаватели, как было сказано выше, представляют собой один из
способов определения языка.
В общем виде распознаватель можно отобразить в виде условной
схемы, представленной на рис. 2.
Следует подчеркнуть, что представленный рисунок — всего лишь
условная схема, отображающая работу алгоритма распознавателя. Ни в коем
случае не стоит искать подобное устройство в составе компьютера.
Распознаватель, являющийся частью компилятора, представляет собой часть
программного обеспечения компьютера.
Рис. 1. Графическое представление грамматики целых десятичных чисел со
знаком
Рис. 2. Условная схема распознавателя
Как видно из рисунка, распознаватель состоит из следующих основных
компонентов:
 ленты, содержащей входную цепочку символов, и считывающей
головки, обозревающей очередной символ в этой цепочке;

устройства управления (УУ), которое координирует работу
распознавателя, имеет некоторый набор состояний и конечную память (для
хранения своего состояния и некоторой промежуточной информации);
 внешней (рабочей) памяти, которая может хранить некоторую
информацию в процессе работы распознавателя и, в отличие от памяти УУ,
имеет неограниченный объем. Распознаватель работает с символами своего
алфавита — алфавита распознавателя. Алфавит распознавателя конечен. Он
включает в себя все допустимые символы входных цепочек, а также
некоторый
дополнительный
алфавит
символов,
которые
могут
обрабатываться УУ и храниться в рабочей памяти распознавателя.
В процессе своей работы распознаватель может выполнять некоторые
элементарные операции:
 чтение очередного символа из входной цепочки;
 сдвиг входной цепочки на заданное количество символов (вправо
или влево);
 доступ к рабочей памяти для чтения или записи информации;
 преобразование информации в памяти УУ, изменение состояния УУ.
То, какие конкретно операции должны выполняться в процессе работы
распознавателя, определяется в УУ.
Распознаватель работает по шагам, или тактам. В начале такта, как
правило, считывается очередной символ из входной цепочки, и в
зависимости от этого символа УУ определяет, какие действия необходимо
выполнить. Вся работа распознавателя состоит из последовательности
тактов. В начале каждого такта состояние распознавателя определяется его
конфигурацией. В процессе работы конфигурация распознавателя меняется.
Конфигурация
распознавателя
определяется
следующими
параметрами:

содержимым входной цепочки символов и положением
считывающей головки в ней;
 состоянием УУ;
 содержимым внешней памяти. Для распознавателя всегда задается
определенная конфигурация, которая считается начальной конфигурацией. В
начальной конфигурации считывающая головка обозревает первый символ
входной цепочки, УУ находится в заданном начальном состоянии, а внешняя
память либо пуста, либо содержит строго определенную информацию.
Кроме начального состояния для распознавателя задается одна или
несколько конечных конфигураций. В конечной конфигурации считывающая
головка, как правило, находится за концом исходной цепочки (часто для
распознавателей вводят специальный символ, обозначающий конец входной
цепочки). Распознаватель допускает входную цепочку символов a, если,
находясь в начальной конфигурации и получив на вход эту цепочку, он
может проделать последовательность шагов, заканчивающуюся одной из его
конечных конфигураций.
Формулировка “может проделать последовательность шагов” более
точна, чем прямое указание “проделает последовательность шагов”, так как
для многих распознавателей при одной и той же входной цепочке символов
из начальной конфигурации могут быть допустимы различные
последовательности шагов, не все из которых ведут к конечной
конфигурации.
Язык, определяемый распознавателем, — это множество всех цепочек,
которые допускает распознаватель. Далее в этой книге рассмотрены
конкретные типы распознавателей для различных языков. Но все, что было
сказано здесь, относится ко всем без исключения типам распознавателей для
всех типов языков.
Лекция 11
ГРАММАТИКИ И РАСПОЗНАВАТЕЛИ
Виды распознавателей
Распознаватели можно классифицировать в зависимости от вида
составляющих их компонентов: считывающего устройства, устройства
управления (УУ) и внешней памяти. По видам считывающего устройства
распознаватели могут быть двусторонние и односторонние.
Односторонние распознаватели допускают перемещение считывающей
головки по ленте входных символов только в одном направлении. Это
значит, что на каждом шаге работы распознавателя считывающая головка
может либо переместиться по ленте символов на некоторое число позиций в
заданном направлении, либо остаться на месте. Поскольку все языки
программирования подразумевают нотацию чтения исходной программы
“слева направо”, то так же работают и все распознаватели. Поэтому когда
говорят об односторонних распознавателях, то прежде всего имеют в виду
левосторонние, которые читают входную цепочку слева направо и не
возвращаются назад к уже прочитанной части цепочки.
Двусторонние распознаватели допускают, что считывающая головка
может перемещаться относительно ленты входных символов в обоих
направлениях: как вперед, от начала ленты к концу, так и назад, возвращаясь
к уже прочитанным символам.
По видам устройства управления распознаватели бывают
детерминированные и недетерминированные.
Распознаватель называется детерминированным в том случае, если для
каждой допустимой конфигурации распознавателя, которая возникла на
некотором шаге его работы, существует единственно возможная
конфигурация, в которую распознаватель перейдет на следующем шаге
работы.
В противном случае распознаватель называется недетерминированным.
Недетерминированный распознаватель может иметь такую допустимую
конфигурацию, для которой существует некоторое конечное множество
конфигураций, возможных на следующем шаге работы. Достаточно иметь
хотя бы одну такую конфигурацию, чтобы распознаватель был
недетерминированным.
По видам внешней памяти распознаватели бывают следующих типов:
 распознаватели без внешней памяти;
 распознаватели с ограниченной внешней памятью;

распознаватели с неограниченной внешней памятью. У
распознавателей без внешней памяти внешняя память полностью
отсутствует. В процессе их работы используется только конечная память УУ.
У распознавателей с ограниченной внешней памятью размер внешней
памяти ограничен в зависимости от длины входной цепочки символов. Эти
ограничения могут налагаться некоторой зависимостью объема памяти от
длины цепочки — линейной, полиномиальной, экспоненциальной и т. д.
Кроме того, для таких распознавателей может быть указан способ
организации внешней памяти — стек, очередь, список и т. п. Распознаватели
с неограниченной внешней памятью предполагают, что для их работы может
потребоваться внешняя память неограниченного объема (вне зависимости от
длины входной цепочки). У таких распознавателей предполагается память с
произвольным методом доступа.
Вместе эти три составляющих позволяют организовать общую
классификацию распознавателей. Например, в этой классификации возможен
такой тип: “двусторонний недетерминированный распознаватель с линейно
ограниченной стековой памятью”.
Тип распознавателя в классификации определяет сложность создания
такого
распознавателя,
а
следовательно,
сложность
разработки
соответствующего программного обеспечения для компилятора. Чем выше в
классификации стоит распознаватель, тем сложнее создавать алгоритм,
обеспечивающий его работу. Разрабатывать двусторонние распознаватели
сложнее, чем односторонние. Можно заметить, что недетерминированные
распознаватели по сложности выше детерминированных. Зависимость затрат
на создание алгоритма от типа внешней памяти также очевидна.
Задача разбора
Для каждого языка программирования важно не только уметь
построить текст программы на этом языке, но и определить принадлежность
имеющегося текста к данному языку. Именно эту задачу решают
компиляторы в числе прочих задач (компилятор должен не только
распознать исходную программу, но и построить эквивалентную ей
результирующую программу). В отношении исходной программы
компилятор выступает как распознаватель, а человек, создавший программу
на некотором языке программирования, выступает в роли генератора цепочек
этого языка.
Грамматики и распознаватели — два независимых метода, которые
реально могут быть использованы для определения какого-либо языка.
Однако при создании компилятора для некоторого языка программирования
возникает задача, которая требует связать между собой эти методы задания
языков.
Разработчики компилятора всегда имеют дело с уже определенным
языком программирования. Грамматика для синтаксических конструкций
этого языка известна. Она, как правило, четко описана в стандарте языка.
Задача разработчиков заключается в том, чтобы построить распознаватель
для заданного языка, который затем будет основой синтаксического
анализатора в компиляторе.
Таким образом, задача разбора в общем виде заключается в
следующем: на основе имеющейся грамматики некоторого языка построить
распознаватель для этого языка. Заданная грамматика и распознаватель
должны быть эквивалентны, то есть определять один и тот же язык (часто
допускается, чтобы они были почти эквивалентны, поскольку пустая цепочка
во внимание обычно не принимается).
Задача разбора в общем виде может быть решена не для всех языков.
Разработчиков компиляторов интересуют прежде всего синтаксические
конструкции языков программирования. Для этих конструкций доказано, что
задача разбора для них разрешима. Более того, для них найдены формальные
методы ее решения. Описанию и обоснованию именно методов решения
задачи разбора будет посвящена большая часть материала последующих глав
данной книги.
Поскольку языки программирования не являются чисто формальными
языками и несут в себе некоторый смысл (семантику), то задача разбора для
создания реальных компиляторов понимается несколько шире, чем она
формулируется для чисто формальных языков. Компилятор должен не
просто установить принадлежность входной цепочки символов заданному
языку, но и определить ее смысловую нагрузку. Для этого необходимо
выявить те правила грамматики, на основании которых цепочка была
построена.
Если же входная цепочка символов не принадлежит заданному языку
— исходная программа содержит ошибку, — разработчику программы не
интересно просто узнать сам факт наличия ошибки. В данном случае задача
разбора также расширяется: распознаватель в составе компилятора должен не
только установить факт присутствия ошибки во входной программе, но и по
возможности определить тип ошибки и то место во входной цепочке
символов, где она встречается.
Классификация языков и грамматик
Выше уже упоминались различные типы грамматик, но не было
указано, как и по какому принципу они подразделяются на типы. Для
человека языки бывают простые и сложные, но это сугубо субъективное
мнение,
которое
зачастую
зависит
от
личности
человека.
Для компиляторов языки также можно разделить на простые и сложные, но в
данном случае существуют жесткие критерии для такого подразделения. Как
будет показано далее, от того, к какому типу относится тот или иной язык
программирования, зависит сложность компилятора для этого языка. Чем
сложнее язык, тем выше вычислительные затраты компилятора на анализ
цепочек исходной программы, написанной на этом языке, а следовательно,
сложнее сам компилятор и его структура. Для некоторых типов языков в
принципе невозможно построить компилятор, который бы анализировал
исходные тексты на этих языках за приемлемое время на основе
ограниченных вычислительных ресурсов (именно поэтому до сих пор
невозможно создавать программы на естественных языках, например на
русском или английском).
Классификация грамматик. Четыре типа грамматик по Хомскому
Согласно классификации, предложенной американским лингвистом
Ноамом Хомским, профессором Массачусетского технологического
института, формальные грамматики классифицируются по структуре их
правил. Если все без исключения правила грамматики удовлетворяют
некоторой заданной структуре, то такую грамматику относят к
определенному типу. Достаточно иметь в грамматике одно правило, не
удовлетворяющее требованиям структуры правил, и она уже не попадает в
заданный тип.
По классификации Хомского выделяют четыре типа грамматик.
Тип 0: грамматики с фразовой структурой На структуру их правил
не накладывается никаких ограничений: для грамматики вида G(VT,VN,P,S),
V = VNИVT правила имеют вид: a ® b, где aОV+, bОV*.
Это самый общий тип грамматик. В него подпадают все без
исключения формальные грамматики, но часть из них, к общей радости,
может быть также отнесена и к другим классификационным типам. Дело в
том, что грамматики, которые относятся только к типу 0 и не могут быть
отнесены к другим типам, являются самыми сложными по структуре.
Практического применения грамматики, относящиеся только к типу 0, не
имеют.
Тип 1: контекстно-зависимые (КЗ) и неукорачивающие
грамматики
В этот тип входят два основных класса грамматик:
Контекстно-зависимые грамматики G(VT,VN,P,S), V = VNИVT имеют
правила вида: a1Aa2 ® a1ba2, где a1,a2ОV*, AОVN, bОV+.
Неукорачивающие грамматики G(VT,VN,P,S), V = VNИ VT имеют
правила вида: a ® b, где a,bОV+, |b| і |a|.
Структура правил КЗ-грамматик такова, что при построении
предложений заданного ими языка один и тот же нетерминальный символ
может быть заменен на ту или иную цепочку символов в зависимости от того
контекста, в котором он встречается. Именно поэтому эти грамматики
называют “контекстно-зависимыми”. Цепочки a1 и a2 в правилах грамматики
обозначают контекст (a1 — левый контекст, а a2 — правый контекст), в
общем случае любая из них (или даже обе) может быть пустой. Говоря
иными словами, значение одного и того же символа может быть различным в
зависимости от того, в каком контексте он встречается.
Неукорачивающие грамматики имеют такую структуру правил, что при
построении предложений языка, заданного грамматикой, любая цепочка
символов может быть заменена на цепочку символов не меньшей длины.
Отсюда и название “неукорачивающие”.
Доказано, что эти два класса грамматик эквивалентны. Это значит, что
для любого языка, заданного контекстно-зависимой грамматикой, можно
построить неукорачивающую грамматику, которая будет задавать
эквивалентный язык, и наоборот: для любого языка, заданного
неукорачивающей грамматикой, можно построить контекстно-зависимую
грамматику, которая будет задавать эквивалентный язык.
При построении компиляторов такие грамматики не применяются,
поскольку синтаксические конструкции языков программирования,
рассматриваемые компиляторами, имеют более простую структуру и могут
быть построены с помощью грамматик других типов. Что касается
семантических ограничений языков программирования, то с точки зрения
затрат вычислительных ресурсов их выгоднее проверять другими методами,
а не с помощью контекстно-зависимых грамматик.
Тип 2: контекстно-свободные (КС) грамматики
Контекстно-свободные (КС) грамматики G(VT,VN,P,S), V = VNИVT
имеют правила вида: A ® b, где AОVN, bОV+. Такие грамматики также
иногда называют неукорачивающими контекстно-свободными (НКС)
грамматиками (видно, что в правой части правила у них должен всегда
стоять как минимум один символ).
Существует также почти эквивалентный им класс грамматик —
укорачивающие контекстно-свободные (УКС) грамматики G(VT,VN,P,S), V
= VNИVT, правила которых могут иметь вид: A ® b, где AОVN, bОV*.
Разница между этими двумя классами грамматик заключается лишь в
том, что в УКС-грамматиках в правой части правил может присутствовать
пустая цепочка (l), а в НКС-грамматиках — нет. Отсюда ясно, что язык,
заданный НКС-грамматикой, не может содержать пустой цепочки. Доказано,
что эти два класса грамматик почти эквивалентны. В дальнейшем, когда речь
будет идти о КС-грамматиках, уже не будет уточняться, какой класс
грамматики (УКС или НКС) имеется в виду, если возможность наличия в
языке пустой цепочки не имеет принципиального значения.
КС-грамматики широко используются при описании синтаксических
конструкций языков программирования. Синтаксис большинства известных
языков программирования основан именно на КС-грамматиках, поэтому в
данном учебнике им уделяется большое внимание.
Внутри типа КС-грамматик кроме классов НКС и УКС выделяют еще
целое множество различных классов грамматик, и все они относятся к типу 2.
Далее, когда КС-грамматики будут рассматриваться более подробно, на
некоторые из этих классов грамматик и их характерные особенности будет
обращено особое внимание.
Тип 3: регулярные грамматики
К типу регулярных относятся два эквивалентных класса грамматик:
леволинейные и праволинейные. Леволинейные грамматики G(VT,VN,P,S), V
= VNИVT могут иметь правила двух видов: A ® Bg или A ® g, где A,BОVN,
gОVT*.
В свою очередь, праволинейные грамматики G(VT,VN,P,S), V =
VNИVT могут иметь правила тоже двух видов: A ® gB или A ® g, где
A,BОVN, gОVT*.
Эти два класса грамматик эквивалентны и относятся к типу регулярных
грамматик.
Регулярные грамматики используются при описании простейших
конструкций языков программирования: идентификаторов, констант, строк,
комментариев и т. д. Эти грамматики исключительно просты и удобны в
использовании, поэтому в компиляторах на их основе строятся функции
лексического анализа входного языка (принципы их построения будут
рассмотрены далее).
Соотношения между типами грамматик
Типы грамматик соотносятся между собой особым образом. Из
определения типов 2 и 3 видно, что любая регулярная грамматика является
КС-грамматикой, но не наоборот. Также очевидно, что любая грамматика
может быть отнесена к типу 0, поскольку он не накладывает никаких
ограничений на правила. В то же время существуют укорачивающие КСграмматики (тип 2), которые не являются ни контекстно-зависимыми, ни
неукорачивающими (тип 1), поскольку могут содержать правила вида “A ®
l”, недопустимые в типе 1.
Одна и та же грамматика в общем случае может быть отнесена к
нескольким классификационным типам (например, как уже было сказано, все
без исключения грамматики могут быть отнесены к типу 0). Для
классификации грамматики всегда выбирают максимально возможный тип, к
которому она может быть отнесена. Сложность грамматики обратно
пропорциональна номеру типа, к которому относится грамматика.
Грамматики, которые относятся только к типу 0, являются самыми
сложными, а грамматики, которые можно отнести к типу 3, — самыми
простыми.
Классификация языков
Языки классифицируются в соответствии с типами грамматик, с
помощью которых они заданы. Причем поскольку один и тот же язык в
общем случае может быть задан сколь угодно большим количеством
грамматик, которые могут относиться к различным классификационным
типам, то для классификации самого языка среди всех его грамматик
выбирается грамматика с максимально возможным классификационным
типом. Например, если язык L может быть задан грамматиками G1 и G2,
относящимися к типу 1 (контекстно-зависимые), грамматикой G3,
относящейся к типу 2 (контекстно-свободные) и грамматикой G4,
относящейся к типу 3 (регулярные), то сам язык должен быть отнесен к типу
3 и является регулярным языком.
От классификационного типа языка зависит не только то, с помощью
какой грамматики можно построить предложения этого языка, но также и то,
насколько сложно распознать эти предложения. Распознать предложения —
значит построить распознаватель для языка (третий способ задания языка).
Классификация распознавателей рассмотрена далее, здесь же можно указать,
что
сложность
распознавателя
языка
напрямую
зависит
от
классификационного типа, к которому относится язык.
Сложность языка убывает с возрастанием номера классификационного
типа языка. Самыми сложными являются языки типа 0, самыми простыми —
языки типа 3.
Согласно классификации грамматик, также существует четыре типа
языков.
Тип 0: языки с фразовой структурой Это самые сложные языки,
которые могут быть заданы только грамматикой, относящейся к типу 0. Для
распознавания цепочек таких языков требуются вычислители, равномощные
машине Тьюринга. Поэтому можно сказать, что если язык относится к типу
0, то для него невозможно построить компилятор, который гарантированно
выполнял бы разбор предложений языка за ограниченное время на основе
ограниченных вычислительных ресурсов. К сожалению, практически все
естественные языки общения между людьми, строго говоря, относятся
именно к этому типу языков. Дело в том, что структура и значение фразы
естественного языка может зависеть не только от контекста данной фразы, но
и от содержания того текста, где эта фраза встречается. Одно и то же слово в
естественном языке может не только иметь разный смысл в зависимости от
контекста, но и играть различные роли в предложении. Именно поэтому
столь велики сложности в автоматизации перевода текстов, написанных на
естественных языках, а также отсутствуют (и, видимо, никогда не появятся)
компиляторы, которые бы воспринимали программы на основе таких языков.
Далее языки с фразовой структурой рассматриваться не будут.
Тип 1: контекстно-зависимые (КЗ) языки
Тип 1 — второй по сложности тип языков. В общем случае время на
распознавание предложений языка, относящегося к типу 1, экспоненциально
зависит от длины исходной цепочки символов.
Языки и грамматики, относящиеся к типу 1, применяются в анализе и
переводе текстов на естественных языках. Распознаватели, построенные на
их основе, позволяют анализировать тексты с учетом контекстной
зависимости в предложениях входного языка (но они не учитывают
содержание текста, поэтому в общем случае для точного перевода с
естественного языка требуется вмешательство человека). На основе таких
грамматик может выполняться автоматизированный перевод с одного
естественного языка на другой, ими могут пользоваться сервисные функции
проверки орфографии и правописания в языковых процессорах.
В компиляторах КЗ-языки не используются, поскольку языки
программирования имеют более простую структуру, поэтому здесь они
подробно не рассматриваются.
Тип 2: контекстно-свободные (КС) языки
КС-языки лежат в основе синтаксических конструкций большинства
современных языков программирования, на их основе функционируют
некоторые довольно сложные командные процессоры, допускающие
управляющие команды цикла и условия.
В общем случае время на распознавание предложений языка,
относящегося к типу 1, полиномиально зависит от длины входной цепочки
символов (в зависимости от класса языка это либо кубическая, либо
квадратичная зависимость). Однако среди КС-языков существует много
классов языков, для которых эта зависимость линейна. Практически все
языки программирования можно отнести к одному из таких классов. КСязыки подробно рассматриваются в главе 4 “Синтаксические анализаторы”
данного учебника.
Тип 3: регулярные языки
Регулярные языки — самый простой тип языков. Поэтому они
являются самым широко используемым типом языков в области
вычислительных систем. Время на распознавание предложений регулярного
языка линейно зависит от длины входной цепочки символов.
Как уже было сказано выше, регулярные языки лежат в основе
простейших конструкций языков программирования (идентификаторов,
констант и т. п.), кроме того, на их основе строятся многие мнемокоды
машинных команд (языки ассемблеров), а также командные процессоры,
символьные управляющие команды и другие подобные структуры.
Регулярные языки — очень удобное средство. Для работы с ними
можно использовать регулярные множества и выражения, конечные
автоматы.
Лекция 12
Грамматики и распознаватели
Цепочки вывода. Сентенциальная форма
Классификация распознавателей
Как было показано ранее, классификация распознавателей определяет
сложность алгоритма работы распознавателя. Но сложность распознавателя
также напрямую связана с типом языка, входные цепочки которого может
принимать (допускать) распознаватель.
Выше были определены четыре основных типа языков. Доказано, что
для каждого из этих типов языков существует свой тип распознавателя с
определенным составом компонентов и, следовательно, с заданной
сложностью алгоритма работы.
Для языков с фразовой структурой (тип 0) необходим распознаватель,
равномощный машине Тьюринга — недетерминированный двусторонний
автомат, имеющий неограниченную внешнюю память. Поэтому для языков
данного типа нельзя гарантировать, что за ограниченное время на
ограниченных вычислительных ресурсах распознаватель завершит работу и
примет решение о том, принадлежит или не принадлежит входная цепочка
заданному языку. Отсюда можно заключить, что практического применения
языки с фразовой структурой не имеют.
Для контекстно-зависимых языков (тип 1) распознавателями являются
двусторонние недетерминированные автоматы с линейно ограниченной
внешней памятью. Алгоритм работы такого автомата в общем случае имеет
экспоненциальную сложность — количество шагов (тактов), необходимых
автомату для распознавания входной цепочки, экспоненциально зависит от
длины этой цепочки. Следовательно, и время, необходимое на разбор
входной цепочки по заданному алгоритму, экспоненциально зависит от
длины входной цепочки символов. Такой алгоритм распознавателя уже
может быть реализован в программном обеспечении компьютера — зная
длину входной цепочки, всегда можно сказать, за какое максимально
возможное время будет принято решение о принадлежности цепочки
данному языку и какие вычислительные ресурсы для этого потребуются.
Однако экспоненциальная зависимость времени разбора от длины цепочки
существенно ограничивает применение распознавателей для контекстнозависимых языков. Как правило, такие распознаватели применяются для
автоматизированного перевода и анализа текстов на естественных языках,
когда временные ограничения на разбор текста несущественны (следует
также напомнить, что поскольку естественные языки более сложны, чем
контекстно-зависимый тип, то после такой обработки часто требуется
вмешательство человека).
В рамках этого учебника контекстно-зависимые языки не
рассматриваются.
Для контекстно-свободных языков (тип 2) распознавателями являются
односторонние недетерминированные автоматы с магазинной (стековой)
внешней памятью — МП-автоматы. При простейшей реализации алгоритма
работы такого автомата он имеет экспоненциальную сложность, однако
путем некоторых усовершенствований алгоритма можно добиться
полиномиальной (кубической) зависимости времени, необходимого на
разбор входной цепочки, от длины этой цепочки. Следовательно, можно
говорить о полиномиальной сложности распознавателя для КС-языков.
Среди всех КС-языков можно выделить класс детерминированных КСязыков, распознавателями для которых являются детерминированные
автоматы с магазинной (стековой) внешней памятью — ДМП-автоматы. Для
таких языков существует алгоритм работы распознавателя с квадратичной
сложностью.
Среди всех детерминированных КС-языков существуют такие классы
языков, для которых возможно построить линейный распознаватель —
распознаватель, у которого время принятия решения о принадлежности
цепочки языку имеет линейную зависимость от длины цепочки. Именно эти
языки представляют интерес при построении компиляторов. Синтаксические
конструкции практически всех существующих языков программирования
могут быть отнесены к одному из таких классов языков. Поэтому в главе,
посвященной синтаксическим анализаторам, в первую очередь будет уделено
внимание именно этим классам языков.
Тем не менее следует помнить, что только синтаксические конструкции
языков программирования допускают разбор с помощью распознавателей
КС-языков. Сами языки программирования, как уже было сказано, не могут
быть полностью отнесены к типу КС-языков, поскольку предполагают
контекстную зависимость в тексте исходной программы (например такую как
необходимость предварительного описания переменных). Поэтому кроме
синтаксического разбора все компиляторы предполагают дополнительный
семантический анализ текста исходной программы. Этого можно было бы
избежать, если построить компилятор на основе контекстно-зависимого
распознавателя, но скорость работы такого компилятора была бы
недопустимо низка, поскольку время разбора в таком варианте будет
экспоненциально зависеть от длины исходной программы. Комбинация из
распознавателя КС-языка и дополнительного семантического анализатора
является более эффективной с точки зрения скорости разбора исходной
программы.
Для регулярных языков (тип 3) распознавателями являются
односторонние недетерминированные автоматы без внешней памяти —
конечные автоматы (КА). Это очень простой тип распознавателя, который
предполагает линейную зависимость времени разбора входной цепочки от ее
длины. Кроме того, конечные автоматы имеют важную особенность: любой
недетерминированный КА всегда может быть преобразован в
детерминированный. Это обстоятельство существенно упрощает разработку
программного
обеспечения,
обеспечивающего
функционирование
распознавателя.
Простота и высокая скорость работы распознавателей определяют
широкую область применения регулярных языков.
В компиляторах распознаватели на основе регулярных языков
используются для лексического анализа текста исходной программы —
выделения в нем простейших конструкций языка (лексем), таких как
идентификаторы, строки, константы и т. п. Это позволяет существенно
сократить объем исходной информации и упрощает синтаксический разбор
программы. Более подробно взаимодействие лексического и синтаксического
анализаторов текста программы рассмотрено дальше, в главе, посвященной
лексическим анализаторам.
Кроме компиляторов регулярные языки находят применение еще во
многих областях, связанных с разработкой программного обеспечения. На их
основе функционируют многие командные процессоры как в системном, так
и в прикладном программном обеспечении. Для регулярных языков
существуют развитые математически обоснованные методы, которые
позволяют облегчить создание распознавателей. Они положены в основу
существующих программных средств, которые позволяют автоматизировать
этот процесс.
Регулярные языки и связанные с ними математические методы
рассматриваются в главе “Лексические анализаторы” данного учебника.
Примеры классификации языков и грамматик
Классификация языков идет от простого к сложному. Если мы имеем
дело с регулярным языком, то можно утверждать, что он также является и
контекстно-свободным, и контекстно-зависимым и даже языком с фразовой
структурой. В то же время известно, что существуют КС-языки, которые не
являются регулярными, и существуют КЗ-языки, которые не являются ни
регулярными, ни контекстно-свободными.
Далее приводятся примеры некоторых языков указанных типов.
Рассмотрим в качестве первого примера ту же грамматику для целых
десятичных чисел со знаком
G1{0,1,2,3,4,5,6,7,8,9,-,+},{S,T,F},P1,S):
P1:
S ® T | +T | –T
T ® F | TF
F®0|1|2|3|4|5|6|7|8|9
По структуре своих правил данная грамматика G1 относится к
контекстно-свободным грамматикам (тип 2). Конечно, ее можно отнести и к
типу 0, и к типу 1, но максимально возможным является именно тип 2,
поскольку к типу 3 эту грамматику отнести никак нельзя: строка T ® F | TF
содержит правило T ® TF, которое недопустимо для типа 3, и хотя все
остальные правила этому типу соответствуют, одного несоответствия
достаточно.
Для того же самого языка (целых десятичных чисел со знаком) можно
построить и другую грамматику
G1'({0,1,2,3,4,5,6,7,8,9,–,+},{S,T},P1',S):
P1':
S ® T | +T | –T
T ® 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0T | 1T | 2T | 3T | 4T | 5T | 6T | 7T | 8T |
9T
По структуре своих правил эта грамматика G1' является праволинейной
и может быть отнесена к регулярным грамматикам (тип 3).
Для этого же языка можно построить эквивалентную леволинейную
грамматику (тип 3)
G1''({0,1,2,3,4,5,6,7,8,9,–,+},{S,T},P1'',S):
P1'':
T®+|—|l
S ® T0 | T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | S0 | S1 | S2 | S3 | S4 | S5 |
S6 | S7 | S8 | S9
Следовательно, язык L1 целых десятичных чисел со знаком, заданный
грамматиками G1, G1' и G1'', относится к регулярным языкам (тип 3).
В качестве второго примера возьмем грамматику G2({0,1},{A,S},P2,S)
с правилами P2:
S ® 0A1
0A ® 00A1
A®l
Эта грамматика относится к типу 0. Она определяет язык, множество
предложений которого можно было бы записать так: L(G2) = {0n1n | n > 0}.
Для этого же языка можно построить также контекстно-зависимую
грамматику G2'({0,1},{A,S},P2',S) с правилами P2':
S ® 0A1 | 01
0A ® 00A1 | 001
Однако для того же самого языка можно использовать и контекстносвободную грамматику G2''({0,1},{S},P2'',S) с правилами P2'':
S ® 0S1 | 01
Следовательно, язык L2 = {0n1n | n > 0} является контекстносвободным (тип 2).
В третьем примере рассмотрим грамматику G3({a,b,c},{B,C,D,S},P3,S)
с правилами P3:
S ® BD
B ® aBbC | ab
Cb ® bC
CD ® Dc
bDc ® bcc
abD ® abc
Эта грамматика относится к типу 1. Очевидно, что она является
неукорачивающей. Она определяет язык, множество предложений которого
можно было бы записать так: L(G3) = {anbncn | n > 0}. Известно, что этот
язык не является КС-языком, поэтому для него нельзя построить грамматики
типов 2 или 3.
Но для того же самого языка можно построить КЗ-грамматику
G3'({a,b,c},{B, C,D,E,F,S},P3', S) с правилами P3':
S ® abc | AE
A ® aABC | aBC
CBC ® CDC
CDC ® BDC
BDC ® BCC
CCE ® CFE
CFE ® CFc
CFc ® CEc
aB ® ab
bB ® bb
bCE ® bCc
bCc ® bc
Язык L3 = {anbncn | n > 0} является контекстно-зависимым (тип 1).
Конечно, для произвольного языка, заданного некоторой грамматикой,
в общем случае довольно сложно определить его тип. Не всегда можно так
просто построить грамматику максимально возможного типа для
произвольного языка. К тому же при строгом определении типа требуется
еще доказать, что две грамматики (первоначально имеющаяся и вновь
построенная) эквивалентны, а также то, что для того же языка не существует
грамматики с большим по номеру типом. Это нетривиальная задача, которую
не так легко решить. Для многих языков и, в частности, для КС-языков и
регулярных языков, существуют специальным образом сформулированные
утверждения, которые позволяют проверить принадлежность языка к
указанному типу. Такие утверждения (леммы) можно найти в [4, т. 1, 15, 28].
Тогда для произвольного языка достаточно лишь доказать нужную лемму и
после этого можно утверждать, что данный язык относится к тому или иному
типу. Преобразование грамматик в этом случае не требуется.
Тем не менее иногда возникает задача построения для имеющегося
языка грамматики более простого типа, чем данная. И даже в том случае,
когда тип языка уже известен, эта задача в общем случае не имеет
формального решения (проблема преобразования грамматик рассматривается
далее).
Цепочки вывода. Сентенциальная форма
Вывод. Цепочки вывода
Выводом называется процесс порождения предложения языка на
основе правил определяющей язык грамматики. Чтобы дать формальное
определение процессу вывода, необходимо ввести еще несколько
дополнительных понятий.
Цепочка b = d1gd2 называется непосредственно выводимой из цепочки a
= d1wd2 в грамматике G(VT,VN,P,S), V = VTИVN, d1, g, d2 О V*, w О V+, если
в грамматике G существует правило: w ® g О P. Непосредственная
выводимость цепочки b из цепочки a обозначается так: a Ю b. Согласно
определению, при выводе a Ю b выполняется подстановка подцепочки g
вместо подцепочки w. Иными словами, цепочка b выводима из цепочки a в
том случае, если можно взять несколько символов в цепочке a, заменить их
на другие символы согласно некоторому правилу грамматики и получить
цепочку b.
В формальном определении непосредственной выводимости любая из
цепочек d1 или d2 (а равно и обе эти цепочки) может быть пустой. В
предельном случае вся цепочка a может быть заменена на цепочку b, тогда в
грамматике G должно существовать правило: a ® bОP.
Цепочка b называется выводимой из цепочки a (обозначается a Ю* b) в
том случае, если выполняется одно из двух условий:
 b непосредственно выводима из a (a Ю b);
 $ g такая, что g выводима из a и b непосредственно выводима из g (a
Ю* g и g Ю b).
Это рекурсивное определение выводимости цепочки. Суть его
заключается в том, что цепочка b выводима из цепочки a, если a Ю b или же
если можно построить последовательность непосредственно выводимых
цепочек от a к b следующего вида: a Ю g1 Ю…Ю gi Ю…Ю gn Ю b, n і 1. В этой
последовательности каждая последующая цепочка gi непосредственно
выводима из предыдущей цепочки gi-1.
Такая последовательность непосредственно выводимых цепочек
называется выводом, или цепочкой вывода. Каждый переход от одной
непосредственно выводимой цепочки к следующей в цепочке вывода
называется шагом вывода. Очевидно, что шагов вывода в цепочке вывода
всегда на один больше, чем промежуточных цепочек. Если цепочка b
непосредственно выводима из цепочки a: a Ю b, то имеется всего один шаг
вывода.
Если цепочка вывода из a к b содержит одну или более промежуточных
цепочек (два или более шагов вывода), то она имеет специальное
обозначение a Ю+ b (говорят, что цепочка b нетривиально выводима из
цепочки a). Если количество шагов вывода известно, то его можно указать
непосредственно у знака выводимости цепочек. Например, запись a Ю4 b
означает, что цепочка b выводится из цепочки a за 4 шага вывода.
Возьмем в качестве примера ту же грамматику для целых десятичных
чисел со знаком G({0,1,2,3,4,5,6,7,8,9,–,+},{S,T,F},P,S):
P:
S ® T | +T | –T
T ® F | TF
F®0|1|2|3|4|5|6|7|8|9
Построим в ней несколько произвольных цепочек вывода (для
понимания каждого шага вывода подцепочка, для которой выполняется
подстановка, выделена жирным шрифтом):
1.
S Ю –T Ю –TF Ю –TFF Ю –FFF Ю –4FF Ю –47F Ю –479
2.
S Ю T Ю TF Ю T8 Ю F8 Ю 18
3.
T Ю TF Ю T0 Ю TF0 Ю T50 Ю F50 Ю 350
4.
TFT Ю TFFT Ю TFFF Ю FFFF Ю 1FFF Ю 1FF4 Ю 10F4 Ю 1004
5.
FЮ5
Получим следующие выводы:
1.
S Ю* –479 или S Ю+ –479 или S Ю7 –479
2.
S Ю* 18 или S Ю+ 18 или S Ю5 18
3.
T Ю* 350 или T Ю+ 350 или T Ю6 350
4.
TFT Ю* 1004 или TFT Ю+ 1004 или TFT Ю7 1004
5.
F Ю* 5 или F Ю 1 5 (утверждение F Ю+ 5 неверно!)
Все эти выводы построены на основе грамматики G. В принципе, в
этой грамматике (как практически и в любой другой грамматике реального
языка) можно построить сколь угодно много цепочек вывода.
Возьмем
в
качестве
второго
примера
грамматику
G3({a,b,c},{B,C,D,S},P3,S) с правилами P3, которая уже рассматривалась
выше:
S ® BD
B ® aBbC | ab
Cb ® bC
CD ® Dc
bDc ® bcc
abD ® abc
Как было сказано ранее, она задает язык L(G3) = {anbncn | n > 0}.
Рассмотрим пример вывода предложения aaaabbbbcccc языка L(G3) на основе
грамматики G3:
S Ю BD Ю aBbCD Ю aaBbCbCD Ю aaaBbCbCbCD Ю aaaabbCbCbCD
Ю aaaabbbCCbCD Ю aaaabbbCbCCD Ю aaaabbbbCCCD Ю aaaabbbbCCDc Ю
aaaabbbbCDcc Ю aaaabbbbDccc Ю aaaabbbbcccc.
Тогда для грамматики G3 получаем вывод: S Ю* aaaabbbbcccc.
Иногда, чтобы пояснить ход вывода, над стрелкой, обозначающей
каждый шаг вывода, пишут обозначение того правила грамматики, на основе
которого сделан этот шаг (для этой цели правила грамматики проще всего
просто пронумеровать в порядке их следования). Грамматика, рассмотренная
в приведенных здесь примерах, содержит всего 15 правил, и на каждом шаге
в цепочках вывода можно понять, на основании какого правила сделан этот
шаг (читатели могут легко сделать это самостоятельно), но в более сложных
случаях пояснения к шагам вывода с указанием номеров правил грамматики
могут быть весьма полезными.
Сентенциальная форма грамматики. Язык, заданный грамматикой
Вывод называется законченным, если на основе цепочки b, полученной
в результате вывода, нельзя больше сделать ни одного шага вывода. Иначе
говоря, вывод называется законченным, если цепочка b, полученная в
результате вывода, пустая или содержит только терминальные символы
грамматики G(VT,VN,P,S): bОVT*. Цепочка b, полученная в результате
законченного вывода, называется конечной цепочкой вывода. В
рассмотренном выше примере все построенные выводы являются
законченными, а, например, вывод S Ю* –4FF (из первой цепочки в примере)
будет незаконченным.
Цепочка символов aОV* называется сентенциальной формой
грамматики G(VT, VN, P,S), V = VTИVN, если она выводима из целевого
символа грамматики S: S Ю* a. Если цепочка aОVT* получена в результате
законченного вывода, то она называется конечной сентенциальной формой.
Из рассмотренного выше примера можно заключить, что цепочки
символов –479 и 18 являются конечными сентенциальными формами
грамматики целых десятичных чисел со знаком, так как существуют выводы
S Ю* –479 и S Ю* 18 (выводы 1 и 2). Цепочка F8 из вывода 2, например,
тоже является сентенциальной формой, поскольку справедливо S Ю* F8, но
она не является конечной цепочкой вывода. В то же время, в выводах 3, 4 и 5
примера явно не присутствуют сентенциальные формы. На самом деле,
цепочки 350, 1004 и 5 тоже являются конечными сентенциальными формами.
Чтобы доказать это, необходимо просто построить другие цепочки вывода
(например, для цепочки 5 строим: S Ю T Ю F Ю 5 и получаем S Ю* 5). А вот
цепочка TFT (вывод 4) не выводима из целевого символа грамматики S, а
потому сентенциальной формой не является.
Язык L, заданный грамматикой G(VT,VN,P,S), — это множество всех
конечных сентенциальных форм грамматики G. Язык L, заданный
грамматикой G, обозначается как L(G). Очевидно, что алфавитом такого
языка L(G) будет множество терминальных символов грамматики VT,
поскольку все конечные сентенциальные формы грамматики — это цепочки
над алфавитом VT.
Следует помнить, что две грамматики G(VT,VN,P,S) и G'(VT',VN',P',S')
называются эквивалентными, если эквивалентны заданные ими языки: L(G) =
L(G'). Очевидно, что эквивалентные грамматики должны иметь, по крайней
мере, пересекающиеся множества терминальных символов VTЗVT' № Ж (как
правило, эти множества даже совпадают: VT = VT'), а вот множества
нетерминальных символов, правила грамматики и целевой символ у них
могут кардинально отличаться.
Лекция 13
Цепочки вывода. Сентенциальная форма
Проблемы однозначности и эквивалентности грамматик
Левосторонний и правосторонний выводы
Вывод называется левосторонним, если в нем на каждом шаге вывода
правило
грамматики
применяется
всегда
к
крайнему левому
нетерминальному символу в цепочке. Другими словами, вывод называется
левосторонним, если на каждом шаге вывода происходит подстановка
цепочки символов на основании правила грамматики вместо крайнего левого
нетерминального символа в исходной цепочке.
Аналогично, вывод называется правосторонним, если в нем на каждом
шаге вывода правило грамматики применяется всегда к крайнему правому
нетерминальному символу в цепочке. Если рассмотреть цепочки вывода из
того же примера, то в нем выводы 1 и 5 являются левосторонними, выводы 2,
3 и 5 — правосторонними (вывод 5 одновременно является и лево- и
правосторонним), а вот вывод 4 не является ни левосторонним, ни
правосторонним.
Для грамматик типов 2 и 3 (КС-грамматик и регулярных грамматик)
для любой сентенциальной формы всегда можно построить левосторонний
или правосторонний выводы. Для грамматик других типов это не всегда
возможно, так как по структуре их правил не всегда можно выполнить
замену крайнего левого или крайнего правого нетерминального символа в
цепочке.
А вот рассмотренный выше вывод S Ю * aaaabbbbcccc для грамматики
G3, задающей язык L(G3) = {0n1n | n > 0}, не является ни левосторонним, ни
правосторонним. Грамматика относится к типу 1, и в данном случае для нее
нельзя построить такой вывод, на каждом шаге которого только один
нетерминальный символ заменялся бы на цепочку символов.
Дерево вывода. Методы построения дерева вывода
Деревом вывода грамматики G(VT,VN,P,S) называется дерево (граф),
которое соответствует некоторой цепочке вывода и удовлетворяет
следующим условиям:

каждая вершина дерева обозначается символом грамматики
AО(VTИVN);
 корнем дерева является вершина, обозначенная целевым символом
грамматики — S;
 листьями дерева (концевыми вершинами) являются вершины,
обозначенные терминальными символами грамматики или символом пустой
цепочки l;
 если некоторый узел дерева обозначен нетерминальным символом
AОVN, а связанные с ним узлы — символами b1b2…bn; n > 0, "n і i > 0:
biО(VTИVNИ{l}), то в грамматике G(VT,VN,P,S) существует правило
A®b1b2…bn О P. Из определения видно, что по структуре правил дерево
вывода в указанном виде всегда можно построить только для грамматик
типов 2 и 3 (контекстно-свободных и регулярных). Для грамматик других
типов дерево вывода в таком виде можно построить не всегда (либо же оно
будет иметь несколько иной вид).
На основе рассмотренного выше примера построим деревья вывода для
цепочек вывода 1 и 2. Эти деревья приведены на рис. 3.
Рис. 3. Примеры деревьев вывода для грамматики целых десятичных
чисел со знаком
Для того чтобы построить дерево вывода, достаточно иметь только
цепочку вывода. Дерево вывода можно построить двумя способами: сверху
вниз и снизу вверх. Для строго формализованного построения дерева вывода
всегда удобнее пользоваться строго определенным выводом: либо
левосторонним, либо правосторонним.
При построении дерева вывода сверху вниз построение начинается с
целевого символа грамматики, который помещается в корень дерева. Затем в
грамматике выбирается необходимое правило, и на первом шаге вывода
корневой символ раскрывается на несколько символов первого уровня. На
втором шаге среди всех концевых вершин дерева выбирается крайняя
(крайняя левая — для левостороннего вывода, крайняя правая — для
правостороннего) вершина, обозначенная нетерминальным символом, для
этой вершины выбирается нужное правило грамматики, и она раскрывается
на несколько вершин следующего уровня. Построение дерева заканчивается,
когда все концевые вершины обозначены терминальными символами, в
противном случае надо вернуться ко второму шагу и продолжить
построение.
Построение дерева вывода снизу вверх начинается с листьев дерева. В
качестве листьев выбираются терминальные символы конечной цепочки
вывода, которые на первом шаге построения образуют последний уровень
(слой) дерева. Построение дерева идет по слоям. На втором шаге построения
в грамматике выбирается правило, правая часть которого соответствует
крайним символам в слое дерева (крайним правым символам при
правостороннем выводе и крайним левым — при левостороннем).
Выбранные вершины слоя соединяются с новой вершиной, которая
выбирается из левой части правила. Новая вершина попадает в слой дерева
вместо выбранных вершин. Построение дерева закончено, если достигнута
корневая вершина (обозначенная целевым символом), а иначе надо вернуться
ко второму шагу и повторить его относительно полученного слоя дерева.
Поскольку все известные языки программирования имеют нотацию
записи “слева направо”, компилятор также всегда читает входную программу
слева направо (и сверху вниз, если программа разбита на несколько строк).
Поэтому для построения дерева вывода методом “сверху вниз”, как правило,
используется левосторонний вывод, а для построения “снизу вверх” —
правосторонний вывод. На эту особенность компиляторов стоит обратить
внимание. Нотация чтения программ “слева направо” влияет не только на
порядок разбора программы компилятором (для пользователя это, как
правило, не имеет значения), но и на порядок выполнения операций — при
отсутствии скобок большинство равноправных операций выполняются в
порядке слева направо, а это уже имеет существенное значение.
Проблемы однозначности и эквивалентности грамматик
Однозначные и неоднозначные грамматики
Рассмотрим некоторую грамматику G({+,–,*,/,(,),a,b},{S},P,S):
P:
S ® S+S | S–S | S*S | S/S | (S) | a | b
Видно,
что
представленная
грамматика
определяет
язык
арифметических выражений с четырьмя основными операциями (сложение,
вычитание, умножение и деление) и скобками над операндами a и b.
Примерами предложений этого языка могут служить: a*b+a, a*(a+b), a*b+a*a
и т. д.
Возьмем цепочку a*b+a и построим для нее левосторонний вывод.
Получится два варианта:
S Ю S+S Ю S*S+S Ю a*S+S Ю a*b+S Ю a*b+a
S Ю S*S Ю a*S Ю a*S+S Ю a*b+S Ю a*b+a
Каждому из этих вариантов будет соответствовать свое дерево вывода.
Два варианта дерева вывода для цепочки a*b+a приведены на рис. 4.
Рис. 4. Два варианта дерева цепочки a*b+a вывода для неоднозначной
грамматики арифметических выражений
С точки зрения формального языка, заданного грамматикой, не имеет
значения, какая цепочка вывода и какое дерево вывода из возможных
вариантов будут построены. Однако в реальных языках структура
предложения и его значение (смысл) взаимосвязаны. Это справедливо как
для естественных языков, так и для языков программирования. Дерево
вывода (или цепочка вывода) является формой представления структуры
предложения языка. Поэтому для языков программирования, которые несут
смысловую нагрузку, имеет принципиальное значение то, какая цепочка
вывода будет построена для того или иного предложения языка.
Например, если принять во внимание, что рассмотренная здесь
грамматика определяет язык арифметических выражений, то с точки зрения
семантики арифметических выражений порядок построения дерева вывода
соответствует порядку выполнения арифметических действий. В
арифметике, как известно, при отсутствии скобок умножение всегда
выполняется раньше сложения (умножение имеет более высокий приоритет),
но в рассмотренной выше грамматике это ниоткуда не следует — в ней все
операции равноправны. Поэтому с точки зрения арифметических операций
приведенная грамматика имеет неверную семантику — в ней нет приоритета
операций, а кроме того, для равноправных операций не определен порядок
выполнения (в арифметике принят порядок выполнения действий слева
направо), хотя синтаксическая структура построенных с ее помощью
выражений будет правильной.
Такая ситуация называется неоднозначностью в грамматике.
Естественно, для построения компиляторов и языков программирования
нельзя использовать грамматики, допускающие неоднозначности. Дадим
более точное определение неоднозначной грамматики.
Грамматика называется однозначной, если для каждой цепочки
символов языка, заданного этой грамматикой, можно построить
единственный левосторонний (и единственный правосторонний) вывод. Или,
что то же самое: грамматика называется однозначной, если для каждой
цепочки символов языка, заданного этой грамматикой, существует
единственное дерево вывода. В противном случае грамматика называется
неоднозначной.
Рассмотренная в примере грамматика арифметических выражений,
очевидно, является неоднозначной.
Проверка однозначности и эквивалентности грамматик
Поскольку грамматика языка программирования, по сути, всегда
должна быть однозначной, то возникают два вопроса, которые необходимо в
любом случае решить:
 как проверить, является ли данная грамматика однозначной?

если заданная грамматика является неоднозначной, то как
преобразовать ее к однозначному виду?
Однозначность — это свойство грамматики, а не языка. Для некоторых
языков, заданных неоднозначными грамматиками, иногда удается построить
эквивалентную однозначную грамматику (однозначную грамматику,
задающую тот же язык).
Чтобы убедиться в том, что некоторая грамматика не является
однозначной (является неоднозначной), согласно определению, достаточно
найти в заданном ею языке хотя бы одну цепочку, которая бы допускала
более чем один левосторонний или правосторонний вывод (как это было в
рассмотренном примере). Однако не всегда удается легко обнаружить такую
цепочку символов. Кроме того, если такая цепочка не найдена, мы не можем
утверждать, что данная грамматика является однозначной, поскольку
перебрать все цепочки языка невозможно — как правило, их бесконечное
количество. Следовательно, нужны другие способы проверки однозначности
грамматики.
Если грамматика все же является неоднозначной, то необходимо
попытаться преобразовать ее в однозначный вид. Например, для
рассмотренной выше неоднозначной грамматики арифметических
выражений над операндами a и b существует эквивалентная ей однозначная
грамматика вида G'({+,–,*,/,(,), a,b},{S,T,E},P',S):
P':
S ® S+T | S–T | T
T ® T*E | T/E | E
E ® (S) | a | b
В этой грамматике для рассмотренной выше цепочки символов языка
a*b+a возможен только один левосторонний вывод:
S Ю S+T Ю T+T Ю T*E+T Ю E*E+T Ю a*E+T Ю a*b+T Ю a*b+E Ю
a*b+a
Этому выводу соответствует единственно возможное дерево вывода.
Оно приведено на рис. 5. Видно, что хотя цепочка вывода несколько
удлинилась, но приоритет операций в данном случае единственно
возможный и соответствует их порядку в арифметике.
В таком случае необходимо решить две проблемы: во-первых, доказать
что две имеющиеся грамматики эквивалентны (задают один и тот же язык);
во-вторых, иметь возможность проверить, что вновь построенная грамматика
является однозначной.
Проблема эквивалентности грамматик в общем виде формулируется
следующим образом: имеются две грамматики G и G', необходимо построить
алгоритм, который бы позволял проверить, являются ли эти две грамматики
эквивалентными. То есть надо проверить утверждение L(G) = L(G').
Рис. 5. Дерево вывода для однозначной грамматики арифметических
выражений
К сожалению, доказано, что проблема эквивалентности грамматик в
общем случае алгоритмически неразрешима. Это значит, что не только до
сих пор не существует алгоритма, который бы позволял проверить, являются
ли две заданные грамматики эквивалентными, но и доказано, что такой
алгоритм в принципе не существует, а значит, он никогда не будет создан.
Точно так же неразрешима в общем виде и проблема однозначности
грамматик. Это значит, что не существует (и никогда не будет существовать)
алгоритм, который бы позволял для произвольной заданной грамматики G
проверить, является ли она однозначной или нет. Аналогично, не существует
алгоритма, который бы позволял преобразовать заведомо неоднозначную
грамматику G в эквивалентную ей однозначную грамматику G'.
В общем случае вопрос об алгоритмической неразрешимости проблем
однозначности и эквивалентности грамматик сводится к вопросу об
алгоритмической неразрешимости проблемы, известной как “проблема
соответствий Поста”.
Неразрешимость проблем эквивалентности и однозначности грамматик
в общем случае совсем не означает, что они не разрешимы вообще. Для
многих частных случаев — например, для определенных типов и классов
грамматик (в частности, для регулярных грамматик) — эти проблемы
решены. Например, приведенная выше грамматика G' для арифметических
выражений над операндами a и b относится к классу грамматик операторного
предшествования из типа КС-грамматик, который будет рассмотрен далее.
На основе этой грамматики возможно построить распознаватель в виде
детерминированного расширенного МП-автомата, а потому можно
утверждать, что она является однозначной.
Правила, задающие неоднозначность в грамматиках
В общем виде невозможно проверить, является ли заданная грамматика
однозначной или нет. Однако для КС-грамматик существуют определенного
вида правила, по наличию которых во всем множестве правил грамматики
G(VT,VN,P,S) можно утверждать, что она является неоднозначной. Эти
правила имеют следующий вид:
1.
A ® AA | a
2.
A ® AaA | b
3.
A ® aA | Ab | g
4.
A ® aA | aAbA | g
здесь AОVN; a,b,gО(VNИVT)*.
Если в заданной грамматике встречается хотя бы одно правило
подобного вида (любого из приведенных вариантов), то доказано, что такая
грамматика точно будет неоднозначной. Однако если подобных правил во
всем множестве правил грамматики нет, это совсем не означает, что
грамматика является однозначной. Такая грамматика может быть
однозначной, а может и не быть. То есть отсутствие правил указанного вида
(всех вариантов) — это необходимое, но не достаточное условие
однозначности грамматики.
С другой стороны, установлены условия, при удовлетворении которым
грамматика заведомо является однозначной. Они справедливы для всех
регулярных и многих классов контекстно-свободных грамматик. Однако
известно, что эти условия, напротив, являются достаточными, но не
необходимыми для однозначности грамматик.
Например,
в
рассмотренном
выше
примере
грамматики
арифметических выражений с операндами a и b — G({+,–,*,/,(,),a,b},{S},P,S)
— во множестве правил P: S ® S+S | S–S | S*S | S/S | (S) | a | b встречаются
правила 2 типа (например, два правила: S ® S+S и S ® a). Поэтому данная
грамматика является неоднозначной, что и было показано выше.
Лекция 14
СИНТАКСИЧЕСКИЙ АНАЛИЗ РЕГУЛЯРНЫХ ЯЗЫКОВ
Задачей синтаксического анализа считается проверка, принадлежит ли
произвольная
заданная
цепочка a О T * языку L(G)
для
заданной
грамматики G. На основе методов синтаксического анализа решаются задачи
синтаксически управляемой обработки данных (например, текстов). Такой
задачей является и задача трансляции. Регулярные языки и порождающие их
А-грамматики используются, в основном, для лексического анализа распознавания в тексте его лексических единиц, лексем, т.е. слов, из
которых по более сложным правилам строится текст.
Если язык задан регулярным выражением, то для синтаксического
анализа этого языка можно построить его А-грамматику с помощью
специального алгоритма. Для анализа регулярного языка используют
устройство, называемое конечным автоматом, которое можно построить по
А-грамматике языка.
Конечные автоматы. Основные определения
Конечный автомат состоит из ленты конечной длины, на которой
записан текст, и читающей головки, движущейся вдоль ленты слева направо.
Автомат в каждый момент находится в каком-то состоянии, которых у него
конечное число. На каждом шаге автомат сдвигается на один символ вправо
(читает символ) и переходит в новое состояние (которое может совпадать со
старым).
Новое состояние определяется старым состоянием и прочитанным
символом. Если прочитан последний символ, автомат останавливается.
Новое состояние может определяться неоднозначно - тогда автомат
называется недетерминированным.
Для
анализа
же
используются
детерминированные автоматы. Автомат сообщает, допустима ли прочитанная
цепочка.
Формально, конечным автоматом
называется набор
A = (Q,T,t,q0,F), где
T - текстовый алфавит;
Q - конечное множество состояний,
TЗQ=Ж;
q0 О Q - начальное состояние;
F Н Q - множество заключительных состояний;
t - множество правил перехода, t Н QґTґQ.
Правило перехода (q,a,q') О t записывается в виде (q,a) ® q' и означает,
что из q автомат может перейти в q', прочитав символ a.
Конфигурацией автомата называется любая цепочка вида qa,
где q О Q и a О T *,
в начальной
конфигурации q = q0.
Отношение
перехода ®A на множестве конфигураций определяется следующим образом:
qаa ®A q'a Ы (q,a) ® q' О t
Если для каждой пары (q,a) имеется не более одного правила перехода,
то автомат называется детерминированным. Тогда t называется функцией
перехода и t(q,a) = q', если есть правило (q,a) ® q'.
Определим
отношение q-a®q',
означающее,
что
состояние q' достижимо из q на цепочке a О T *, как наименьшее
отношение, удовлетворяющее следующим условиям:
q-e®q;
q-aa®q', если в t есть правило (q,a) ® q" и q"-a®q'.
Говорят, что цепочка a О T * допускается автоматом A, если на a из
начального состояния достижимо какое-нибудь заключительное, т.е. если q0a®q и q О F.
Множество
всех
допускаемых
автоматом A цепочек
называется языком, допускаемым автоматом A и обозначается L(A).
Пример. Множество идентификаторов допускается автоматом
с Q ={q0,q1}, F ={q1}, T ={a,...,z,0,...,9} и правилами
(q0,a) ® q1, ..., (q0,z) ® q1,
(q1,a) ® q1, ..., (q1,z) ® q1,
(q1,0) ® q1, ..., (q1,9) ® q1.
Автомат можно наглядно представлять его диаграммой - помеченным
ориентированным графом, вершинами которого являются состояния,
помеченные именем или номером состояния, а помеченная дуга q-a®q'
соответствует правилу (q,a) ® q'. Заключительные состояния будем
обозначать двойным кружком.
Так, предыдущий автомат представляется диаграммой
Из определений непосредственно вытекает
Л е м м а 1. q-a®q' Û в диаграмме есть путь из q в q', метки дуг
которого образуют цепочку a (учитываются и пути нулевой длины,
соответствующие a = e).
Конечные автоматы и А-грамматики
Установим теперь соответствие между А-грамматиками и конечными
автоматами. Грамматика G = (N,T,P,S) и автомат A = (Q,T,t,q0,F) называются
соответствующими
друг
другу,
если
N = Q,
S = q0,
X ® aY Î P Û (X,a) ® Y Î t, X ® e Î P Û X Î F.
Для того, чтобы доказать, что в этом случае L(G) = L(A), введем
понятие диаграммы А-грамматики. Это помеченный ориентированный граф,
вершинами которого являются символы из N, помеченная дуга X-a®Y
соответствует правилу X ® aY. Если X ® e Î P, то вершину X будем
изображать двойным кружком.
Построенная А-грамматика для чисел представляется диаграммой
Очевидны также следующие леммы.
Л е м м а 2. X ®G*aY Û в диаграмме грамматики есть путь из X в Y,
метки
дуг
которого
образуют
цепочку
a
.
Л е м м а 3. Графы соответствующих друг другу грамматики и автомата
совпадают.
Из лемм 1-3 непосредственно следует
Т е о р е м а 1. L(G) = L(A) для соответствующих друг другу
грамматики G и автомата A.
Заметим, что автомат, соответствующий грамматике чисел, является
детерминированным. Но не всегда легко записать детерминированный
автомат для сложного регулярного языка. Можно рассмотреть способ
построения наиболее эффективного детерминированного автомата для
произвольного регулярного языка. Это построение может осуществляться
автоматически.
С л е д с т в и е 1. Класс регулярных языков совпадает с классом
языков, допускаемых конечными автоматами.
Детерминированные конечные автоматы
Детерминированные и недетерминированные автоматы
Автоматы A и A' называются эквивалентными, если L(A) = L(A').
Т е о р е м а 2. Для любого недетерминированного конечного
автомата можно построить эквивалентный детерминированный конечный
автомат.
Доказательство. Сначала заметим, что грамматика соответствует
детерминированному автомату тогда и только тогда, когда в каждом ее
правиле вида A ® a1A1 | ... | anAn или A ® a1A1 | ... | anAn | e выполняется
условие: ai ¹ aj при i ¹ j. Поэтому достаточно преобразовать А-грамматику
G = (N,T,P,S) к указанному виду. В процессе преобразования на грамматику
будем смотреть, как на соответствующую систему уравнений.
Для каждого непустого подмножества {A1,...,An} множества N введем
новый нетерминальный символ [A1,...,An] и определим его так, чтобы
соответствующее уравнение имело вид [A1,...,An] = A1 È ... È An. Для этого
достаточно задать правило [A1,...,An] ® r1 | ... | rn, где ri - правая часть
правила для Ai.
Теперь построим требуемую грамматику G' = (N',T,P',S), где N'
получается из N добавлением определенных выше новых нетерминальных
символов, а P' получено следующим образом из P и правил для новых
нетерминальных символов: в каждом правиле все члены вида aA1, ..., aAn с
одним и тем же a Î T заменяются одним членом a[A1,...,An]. Таким правилам
соответствует детерминированный автомат, эквивалентный исходному, т.к.
a[A1,...,An] = aA1 È ... È aAn.
Так как не все нетерминальные [A1,...,An] достижимы из S, то при
построении P' достаточно включать только необходимые правила, начиная с
правила для S.
Недетерминированный автомат, изображенный на следующем рисунке
слева, имеет соответствующую грамматику с правилами
q0 ® aq1 | bq2, q1 ® aq1 | aq3 | bq1 | bq2,
q2 ® aq1 | aq2 | bq2 | bq3, q3 ® aq3 | bq3 | e .
Преобразуем его в детерминированный автомат по методу теоремы 2.
В новую грамматику войдет старое правило для q0, т.к. оно удовлетворяет
условию детерминированности. Правило для q1 преобразуется к виду
q1 ® a(q1 | q3) | b(q1 | q2), или q1 ® aq13 | bq12.
Аналогично получается правило для q2: q2 ® aq12 | bq23.
Для q13 = q1 | q3 правило имеет вид q13 ® aq1 | aq3 | bq1 | bq2 | bq3 | e ,
или, окончательно, q13 ® aq13 | bq123 | e , где q123 = q1 | q2 | q3. Аналогично,
для q12 = q1 | q2, q23 = q2 | q3 и q123 правила (после преобразования) имеют
вид q12 ® aq123 | bq123, q23 ® aq123 | bq23 | e , q123 ® aq123 | bq123 | e .
Диаграмма построенного детерминированного автомата изображена на
том же рисунке справа.
Отметим, что, как видно из доказательства и примера, построенный
детерминированный автомат при анализе цепочки как бы одновременно
ведёт все пути её анализа исходным автоматом.
Минимизация детерминированного автомата
Из двух детерминированных автоматов, допускающих один и тот же
язык, меньше памяти (при реализации) занимает тот, у которого меньше
состояний. Число состояний автомата можно уменьшить, удалив состояния,
не используемые при анализе допустимых цепочек. Для этого достаточно
преобразовать соответствующую А-грамматику к приведённому виду.
Дальнейшая минимизация детерминированного автомата основана на
выявлении эквивалентных состояний. Состояния автомата q и q' называются
эквивалентными, если в соответствующей А-грамматике L(q) = L(q').
Неэквивалентность q и q' означает, что существует цепочка, на которой из
одного состояния достижимо заключительное состояние, а из другого - нет.
Для детерминированного автомата можно указать алгоритм нахождения
эквивалентных состояний. Дальше детерминированный автомат будем
просто называть автоматом.
Назовем автомат полным, если его функция перехода тотальна, т.е.
определена на всех парах (q,a) (в предыдущем примере автомат полон).
Полный автомат любую цепочку прочитывает до конца и останавливается
либо в заключительном состоянии, либо в незаключительном. Поэтому для
него неэквивалентность q и q' означает, что для некоторой цепочки a Î T * qa®q1, q1Î F, и q'-a®q2, q2Ï F. Говорят, что такая цепочка a различает
состояния q и q'.
Отсюда следует
У т в е р ж д е н и е 1. Для полного автомата отношение ne(q,q')
неэквивалентности q и q' определяется условиями:
ne(q,q'), если q Î F, а q'Ï F, или q Ï F, а q'Î F, т.е. цепочка e различает
состояния q и q';
ne(q,q'), если a различает состояния t(q,a) и t(q',a) для некоторого a
(тогда aa различает состояния q и q').
Все остальные пары (q,q') состояний полного автомата являются
парами эквивалентных состояний.
Пример 4. Для полного детерминированного автомата в примере 3
(рис. справа) из условия a следует неэквивалентность q и q', если q Î F =
{q13,q23,q123} и q'Î Q \ F = {q0,q1,q2,q12}. Отсюда, по условию b, следует
неэквивалентность всех пар из Q \ F и ничего не следует для пар состояний
из F, т.е. все состояния из F эквивалентны между собой.
У т в е р ж д е н и е 2. Для каждого неполного автомата можно
построить эквивалентный полный автомат с сохранением всех языков L(q).
Доказательство. Неполный автомат можно сделать полным, добавив
новое незаключительное состояние r с правилами (r,a) ® r для всех a Î T, и
добавив для каждой пары (q,a), q ¹ r, для которой не было правила, новое
правило (q,a) ® r. Поскольку из r достижимо только r и это состояние
незаключительное, то оно непродуктивное. Следовательно, сохраняются все
языки L(q). Детерминированность при этом также сохраняется.
У т в е р ж д е н и е 3. Проблема эквивалентности состояний
детерминированного автомата алгоритмически разрешима.
Доказательство. Для заданного автомата сначала можно построить
эквивалентный полный автомат, затем для полного автомата найти все пары
неэквивалентных состояний, остальные пары состояний объявить
эквивалентными. Алгоритм построения множества пар неэквивалентных
состояний и его обоснование следует из утверждения 1.
Алгоритм 1 (построение множества пар неэквивалентных состояний).
Алгоритм строит отношение неэквивалентности ne:
ne(0) = {(q,q') | q Î F, q'Ï F, или q Ï F, q'Î F};
ne(i+1) = ne(i) È {(q,q') | ne(i)(t(q,a),t(q',a)) для некоторого a}, i > 0.
Алгоритм завершается, когда ne(i+1) = ne(i), т.е. ne = ne(i). Это
происходит за конечное число шагов, т.к. число пар конечно.
Т е о р е м а 3. Проблема эквивалентности А-грамматик
алгоритмически разрешима.
Доказательство. Следует из предыдущих результатов и того, что
утверждение 3 и его доказательство справедливо и для состояний разных
автоматов.
Следующее преобразование называется минимизацией полного
детерминированного конечного автомата. Оно состоит в "склеивании" (т.е. в
одинаковом переименовании) всех эквивалентных друг другу состояний и в
последующем преобразовании автомата к приведенному виду (в смысле
соответствующей грамматики). Очевидно, что минимизация - эквивалентное
преобразование, после которого у автомата все различные состояния
оказываются неэквивалентными.
Пример 5. Для полного автомата в примере 3 (рис. справа) в примере 4
было показано, что его заключительные состояния q13, q23, q123
эквивалентны. Склеив их и переименовав в q3, получим приведённый
автомат с диаграммой
То, что получаемый таким образом автомат действительно минимален
по числу состояний, доказывает следующая
Т е о р е м а 4. Пусть A = (Q,T,t,q0,F) и A' = (Q',T,t',q0',F') эквивалентные детерминированные автоматы, причем A - приведенный
автомат с попарно неэквивалентными состояниями, Q Ç Q' = Æ . Тогда у A
состояний не больше, чем у A'.
Доказательство. Покажем, что для каждого состояния из Q в Q' есть
эквивалентное ему состояние. Эти состояния из Q' также попарно
неэквивалентны, откуда следует, что они попарно различны и, значит,
|Q| £ |Q'|.
По условию, L(q0) = L(q0'). Далее, если L(q) = L(q') для q Î Q и q'Î Q', то
в силу детерминированности автоматов и продуктивности всех состояний A
(т.к. он приведенный) из t(q,a) = q1 следует, что t'(q',a) = q1' и L(q1) = L(q1')
для q1Î Q и q1'Î Q'. Так как A приведенный и, следовательно, все его
состояния достижимы из q0, то таким способом, начиная с q = q0, можно
найти для каждого q Î Q эквивалентное ему состояние q'Î Q'.
Замечание. Из доказательства следует, что диаграммы любых двух
эквивалентных минимальных детерминированных автоматов изоморфны.
В качестве дополнительного результата докажем следующее утверждение.
Т е о р е м а 5. Класс языков Reg(T) замкнут относительно
дополнения, т.е. из L Î Reg(T) следует, что и T* \ L Î Reg(T).
Доказательство. Поскольку, как следует из предыдущего, регулярный
язык L допускается полным детерминированным автоматом A = (Q,T,t,q0,F),
то T* \ L допускается автоматом A' = (Q,T,t,q0,Q \ F), т.к. каждую цепочку
автомат A прочитывает до конца.
Лекция 15
Лексический анализатор
Теоретико-множественная модель представления объектов
Лексический анализ текста состоит в выделении фрагментов текста,
называемых лексемами. Лексемы могут рассматриваться при синтаксическом
анализе как терминальные символы грамматики, порождающей этот текст.
Выделение фазы лексического анализа сильно упрощает грамматику языка.
Возможны два способа реализации лексического анализа: либо как
отдельного просмотра текста и переработки его в цепочку лексем,
синтаксический анализ которой ведется на втором просмотре, либо как
процедуры, к которой синтаксический анализатор обращается, когда ему
понадобится очередная лексема. Мы будем рассматривать второй вариант,
как более распространенный и гибкий, хотя между ними нет принципиальной
разницы. Лексический анализатор часто называют сканером.
В языках программирования обычно выделяются такие лексемы, как
идентификаторы (id), константы - числа (intnumb, realnumb), строки и др.,
ключевые слова (for, ...), разделители (;, :=, ...) и т.д. Выдавая некоторые
лексемы, сканер должен выдать и их значение, воспринятое из текста,
например, лексему id и ее значение 'ABC' или лексему realnumb и ее значение
0.56.
Как правило, множество лексем образует регулярный язык и может
анализироваться конечным автоматом, При реализации такого автомата
следует учитывать, что об окончание лексемы автомат узнаёт, когда,
находясь в заключительном состоянии, он не может продолжать анализ
(например, когда встречается пробел после ключевого слова или символ
конец-файла).
Поскольку в тексте лексемы могут быть разделены произвольным
количеством несущественных символов (так называемые пробельные
символы и комментарии), то с них следует начинать регулярное выражение
лексемы:
лексема = несущественный-символ* собственно-лексема собственнолексема = идентификатор | число | ...
Рассмотренная выше формальная модель конечного автомата должна
быть расширена средствами вычисления значений лексем.
С каждым правилом автомата будем связывать символ s, называемый
трансдуктором: (q,a) ® (q',s). Каждый такой трансдуктор соответствует
некоторой программе на каком-нибудь языке, обрабатывающей символ a для
получения значения лексемы. Трансдуктор и определённая выделенная
лексема lex связывается с каждым заключительным состоянием автомата:
q ® (s,lex).
Пример 6. Для выделения идентификатора можно использовать
расширенный автомат с правилами
(q0,a) ® (q1,s1), ..., (q0,z) ® (q1,s1),
(q1,a) ® (q1,s2), ..., (q1,z) ® (q1,s2),
(q1,0) ® (q1,s2), ..., (q1,9) ® (q1,s2),
q1 ® (s3,id)
и программами трансдукторов, написанными на Паскале.
procedure s1; begin for K:=1 to 30 do Ident[K]:=' ';
Ident[1]:=C; N:=2
end;
procedure s2: begin if N<31 then
begin Ident[N]:=C; N:=N+1 end
end;
procedure s3: begin end;
Первый символ текста читается до первого обращения к сканеру, а
следующие - сканером. Следовательно, при каждом входе в сканер он
получает первый символ очередной лексемы (возможно, несущественный
или специальный символ конец-файла).
Реализация сканера по такому расширенному автомату может иметь
вид программы на Паскале:
...
type Lex=(id,...); {имена всех лексем}
var Ident:array[1..30] of char; N,K:integer; {переменные трансдукторов}
...
C:char; Lexema:Lex; {общие переменные}
...
procedure Scanner;
var S:integer; {номер состояния}
begin S:=0; {начальное состояние}
100: case S of {для правил вида (qi,a)®(qj,s)}
...
i: begin if C='a' then begin s; S:=j end else
if C= ... else {следующее правило для qi}
...
error {для незаключительного qi, завершение работы}
end;
...
j: begin if C= ... else {правила для qj}
...
goto 101 {для заключительного qj}
end;
...
end; {case1}
if not eof then read(C) else C:='конец файла';
goto 100;
101: {конец лексемы}
case S of {для правил вида qj®(s,lx)}
...
j: begin s; Lexema:=lx end;
...
end {case2}
end {Scanner};
Полученную таким образом программу сканера можно сделать более
эффективной, учитывая особенности конкретного языка. Наиболее часто
используемые улучшения следующие:
Так как q0 обычно имеет больше всего правил (практически для всех
символов машинного алфавита), для него используется какой-нибудь из
самых быстрых способов разветвления по значениям переменной C (лучше
всего использовать массив меток, если это поддерживает язык реализации).
Часто используется проверка текстового символа на попадание в
интервал (например, 'a'-'z' и '0'-'9').
Для распознавания ключевых слов, начинающихся с буквы, удобно
использовать автомат, распознающий идентификаторы. Накопив слово,
нужно затем проверить, не попадает ли оно в список ключевых слов. Если
попадает, выдать соответствующее ключевое слово, если нет, выдать
идентификатор. В автомате из примера 6 переделать нужно только
процедуру s3. Поиск символа в таблице ключевых слов лучше всего делать
или с помощью хеш-функции, или двоичным поиском.
Построение по расширенному автомату программы сканера, подобной
описанной выше, может быть автоматизировано, хотя инженерная проблема
автоматического построения наиболее эффективного сканера еще не решена
до конца.
Объектно-классификационное моделирование сложных
систем
Чем дальше развивается цивилизация общества, тем сложнее
становятся общественные отношения и создаваемые обществом технические,
организационные, информационные, энергетические, транс- портные,
производственные, военные и другие системы, составляющие суть данной
цивилизации.
Создание и использование этих систем требует специального
теоретического осмысления общих закономерностей построения и
функционирования систем любой природы. Другими словами, обществу
нужна системная философия (системология), общая теория и множество
специальных теорий анализа и синтеза сложных систем. Людей, практически
занимающихся проектированием сложных систем, уже не устраивает
вербальная философия на уровне рассуждений об общих закономерностях
развития природы и общества.
Современная наука ищет способы и методы строгой формализации
этих рассуждений на основе последних достижений математики, логики,
кибернетики, информатики и других точных наук. Выше были изложены
некоторые принципы исследования и проектирования сложных систем,
известные как принципы системного подхода к проектированию объектов.
Методологической основой системного подхода является теория и практика
математического моделирования сложных систем. Классический системный
подход, как правило, опирается на математическое моделирование с
использованием теории подобия, теории научного эксперимента,
математической статистики, теории алгоритмов и ряда других
фундаментальных классических теорий.
Наряду с этим классическим направлением за последнее десятилетие
предпринималось много по- пыток создания системологии адекватной новым
условиям цивилизации. Это особенно заметно в области проектирования
информационно-управляющих систем и программного обеспечения ЭВМ.
Одним из направлений проектирования, анализа и синтеза сложных систем
является так называемый объектно-ориентированный подход (ООП). ООП
заявлен как перспективная методологическая основа проектирования
сложных систем преимущественно в области создания программного
обеспечения ЭВМ.
Вообще объектно-ориентированный подход очень популярен в
современном программировании. Поэтому о нем уже написано достаточно
много работ, в основном прикладного характера. Однако фундаментальные
исследования в данном направлении мало известны и слабо формализованы.
Однако, распространение идей ООП на общенаучный системологический
уровень было бы полезно и для философского понимания процессов
мышления и для практического проектирования сложных систем. На
методологическое обобщение системного анализа и синтеза претендует
также теоретическая системология.
В данном разделе пытаемся объединить последние две системные
концепции понятием "объектно- классификационное моделирование" (ОКМ)
сложных систем любой природы и формализовать данную концепцию.
Основными методологическими категориями ОКМ являются понятия:
объект, класс, отношение (связь), система. Теория ОКМ предполагает
содержательное и формальное определение этих категорий с целью
построения математических моделей сложных систем.
Определение понятия "объект"
В нашем представлении объект — это все что мы различаем как нечто
целое, реально существующее, или возникающее в нашем сознании и
обладающее свойствами, значения которых позволяют нам однозначно
распознавать это нечто.
Очевидно, что понятие "сущность" в приведенном определении
объекта не более понятно для нас, чем понятие "объект". Поэтому не ясно,
какие же свойства сущности наследуют все объекты, и чем объект отличается
от сущности. Для более строгого определения понятий, используемых в
теории
ОКМ, предлагается применять следующую методику:
• Вводить уникальный идентификатор (имя) определяемого понятия,
например: "объект", "система", "человек" и т. п.
• Указывать ранее определенное известное понятие, свойства которого
наследует определяемое понятие. Так реализуется принцип наследования при
определении новых понятий, например, объект — есть сущность. Очевидно,
предполагается, что должны быть известны все атрибуты понятия
"сущность".
• Указывать существенные для нового понятия свойства, отличающие
его от всех других понятий, например, осязаемость, видимость, мыслимость,
ощутимость объекта для человека. Принцип выделения отличительных
особенностей нового понятия.
• Определять область применения вводимого понятия, его роль и место
среди других понятий данной теории.
• В теории ОКМ понятие "объект" играет роль фундаментального
исходного понятия, через которое определяются все основные понятия
теории. Оно не может быть выведено из каких-либо более общих понятий
путем наследования их свойств. С точки зрения теории ОКМ объектом
называется все то, что можно мысленно выделить из окружающей его среды,
путем указания свойств и признаков, существенных для данного понятия.
Всеобщими свойствами объектов являются:
• наличие уникального имени,
• определенность предназначения,
• наличие внутренней структуры,
• наличие особенных свойств или признаков, позволяющих
идентифицировать (узнавать) данный объект
• нахождение в определенном пространстве,
• нахождение в определенном состоянии,
• возможность изменения положения и состояния объекта,
• наличие отношений и связей с другими объектами.
Перечисленные свойства в дальнейшем будем называть атрибутами
объекта. Вообще говоря, атрибут есть существенная деталь, параметр,
свойство или функция определяемого объекта. Другими словами, атрибут
есть объект служащий для определения другого объекта, и он также, как и
любой другой объект имеет свои атрибуты. В зависимости от предназначения
атрибуты объектов можно разделить на:
•идентификаторы,
• параметры,
• методы взаимодействия и функции.
В теории ОКМ любые объекты определяются путем детализации и
конкретизации перечисленных атрибутов данного понятия. Допускается
также дополнять, конкретизировать или изменять данный перечень
атрибутов в зависимости от природы определяемых объектов.
Например, идентификатором конкретного человека могут служить
паспортные данные, отпечатки пальцев, характеристики ДНК и т. д. В
качестве аргументов для идентификаторов объектов выбираются
переменные, не изменяющие своих значений в течение всего периода жизни
объекта, или хотя бы в течение периода его использования. Параметрами
обычно являются: рост, вес, температура тела, отпечатки пальцев,
антропометрические параметры, структурные параметры и т. д. Параметры
обычно характеризуют состояние объекта во времени и пространстве.
Состояние, как правило, меняется с течением времени. Особое значение для
всех объектов имеют их структурные параметры: состав элементов и
характер связей между ними. Методы взаимодействия с окружающей средой
определяют реакции объекта (в данном случае человека) на воздействия
окружающей среды, напри- мер, на пощечину. Чаще всего методы
описывают изменение параметров объекта в ответ на внешние воздействия
окружающей среды. К числу функций, как правило, относят действия
объекта, приводящие к некоторому результату, например, к производству
определенного продукта. Аргументами функций, как правило, являются
значения внешних воздействий на объект и значения параметров объекта в
некоторые моменты времени.
Вообще говоря, методы определяют динамику внутренних состояний
объектов, а функции определяют внешний эффект, возникающий в
результате этой динамики.
Из приведенного примера видно, что границы между перечисленными
группами атрибутов весьма условны. Назначение атрибутов при описании
объекта является прерогативой исследователя и полностью определяется
целями и задачами исследования. Однако очевидно, что каждому
исследователю в каждом конкретном случае, когда требуется изучать какиелибо объекты, не следует изобретать свой собственный способ формального
описания (моделирования) объектов. Эти способы являются предметом
исследования и развития общесистемной научной дисциплины, которую
можно назвать "Объектно-классификационное моделирование систем",
сокращенно — ОКМ.
Всякая научная дисциплина использует для описания исследуемых
объектов определенный символический язык. Описание объектов на этом
языке называют символическими моделями. Для символического
моделирования любого объекта необходимо описать все его атрибуты и
процесс изменения значений этих атрибутов во времени под воздействием
различных факторов. Первое описание называют статической моделью
объекта, а второе — моделью поведения объекта в заданных условиях.
Проблема ОКМ состоит в том чтобы найти общий подход к символическому
моделированию (формализованному представлению) объектов и процессов
любой природы.
Обозначим описание имени — идентификатора объекта символом K,
описание параметров объекта символом  и описание методов и функций
объекта символом . Тогда статическая модель объекта есть формула:
O = (K, , , t).
Символ t здесь указывает на то, что статическое описание объекта
всегда относится к какому-то моменту времени, то есть, характеризует
некоторое состояние объекта.
Поведение объекта есть процесс изменения его состояний во времени
под воздействием множества X внешних и внутренних факторов. Этот
процесс полностью определяется следующим описанием:
O = (K, , X, t). ˜
В дальнейшем попытаемся найти формальные средства и конкретные
выражения для моделей такого рода.
Лекция 16
Теоретико-множественная модель представления объектов
Формальное моделирование атрибутов объектов
Возвращаясь к понятию "атрибут", напомним, что атрибут есть
существенная деталь, параметр, свойство или функция определяемого
объекта. Мы разделили все атрибуты объекта на четыре класса:
• идентификаторы,
• параметры,
• методы,
• функции.
Однако, описание любого атрибута A также включает в себя описания
своих атрибутов. Этими атрибутами являются: идентификатор K (код имени
атрибута), синтаксическая форма описания (множество  структурных
параметров) и функциональное (семантическое) значение Z. Иными словами,
любой атрибут представляется моделью (K, , Z, t). Описание Z значения
атрибута определяет тип значения, размерность значения (его предметную
интерпретацию) и символику значения. Например, фраза "объект j весит
250 кг." представляет собой описание параметра по имени "вес" данного
объекта. Атрибут "вес" объекта j в настоящее время имеет значение
цифрового типа 250, и размерность - кг. Можно сказать, что фраза "объект j
весит 250 кг." есть модель текущего со- стояния объекта j с единственным
параметром "вес", записанная на русском естественном языке. Эту же фразу
можно представить в виде логической формулы:
 = j⇒вес j = 250кг.
Здесь  = j и вес=250 кг — логические высказывания.
Символ⇒ указывает на то, что из истинности первого высказывания
следует истинность второго высказывания. Однако, о времени в этой модели
ничего не сказано. Более точная формальная модель, соответствующая фразе
"объект j весит 250 кг", имеет вид: ( = j) (i = ") (t = )⇒ (i,j =
250)кг,где i,j параметр объекта j, t — фактор времени. Данная модель
точно определяет условия, при которых параметр i,j принимает значение
250 кг. Однако и эта модель является неполной, так как в ней тип и область
значений параметра i,j определяются по умолчанию. Основное
преимущество последней модели в том, что к ней можно применять все
правила формального исчисления высказываний, которые позволяют
формализовать анализ и синтез объектных моделей.
Предположим теперь, что атрибут объекта j является его
идентификатором Kj. Это означает, что Kj однозначно указывает на
конкретный объект j, выделяя его из множества ему подобных.
Например, "человек Петров Петр Петрович, 2000 года рождения, г.
Москва" или "программное средство Windows". Обычно идентификатор Kj
представляет собой набор значений ряда классификационных признаков
(классификационных атрибутов A1, . . . , An), т. е. KjE1, . . . , En, где Ei
область значений атрибута Ai, i = 1, n. Отсюда следует, что формально
идентификатор любого объекта можно представить как элемент декартового
произведения E1 . . . En. Функциональные атрибуты объектов это методы и
функции, определяющие их поведение. Например: "хамелеон меняет цвет
кожи в соответствии с изменением цвета окружающей среды",
"изображение объекта исчезает с экрана при нажатии левой клавиши
"мышки", когда указатель находится в поле изображения кнопки "выход"",
"напряжение на участке электрической цепи равно произведению силы тока
на сопротивление в этой цепи". Структура формальной модели всех этих
выражений представляет собой отношение "причина — следствие".
Причиной обычно являются некоторые действия, либо некоторые условия, а
следствием — результат действия или обусловленное значение атрибута. В
общем случае схема этой модели имеет вид:
f (X1, . . . , Xs) = Y ,
где X1, . . . , Xs — аргументы, а Y — функция, символ f обозначает тип
операции с аргументами. Аргументами таких моделей обычно являются
параметры  объектов, а так же внешние и внутренние факторы , влияющие
на поведение объектов. Поэтому применительно к объектам модели
функциональных атрибутов имеют вид:
f (1, . . . , r, 1, . . . , s) = y.
Идентификатор объекта при этом предполагается известным по
умолчанию. Из приведенных примеров видно, что наши представление об
атрибутах рассматриваемых объектов формулируются, как высказывания на
определенном языке. Поэтому можно предположить, что обобщенной
формальной моделью любого атрибута является многозначный предикат
P(A), с помощью которого и определяются значения атрибута конкретного
объекта в его формальной модели.
В простейшем случае P(A) есть утверждение: "Атрибут Ai объекта j
имеет значение ai,j из множества Ei =a1, . . . , ak". В данном предикате
атрибут Ai выступает в качестве предметной переменной. На формальном
языке исчисления предикатов данное утверждение можно записать так:
jAis(Aij) = aij Ei,
где s(Aij) — сигнатура атрибута Ai в данной модели, i, j1, . . . , N.
Задача теории ОКМ состоит в том, чтобы найти общие методы построения
комплексных математических моделей объектов и систем, представленных в
пространстве всех своих атрибутов.
Классификация объектов. Пространство идентификаторов объектов
Обычно объекты, определенные на одних и тех же атрибутах с
различными значениями, относят к одному классу объектов. Процесс
объединения объектов в классы в соответствии с их свойствами называется
классификацией.
Ни одна научная дисциплина не может обойтись без классификации
рассматриваемых в ней объектов. Таблица химических элементов Д.И.
Менделеева и теория происхождения видов Дарвина — открытия
полученные методом классификации объектов. В действительности
мышление человека основано на абстракциях (понятиях), обозначающих
классы различных объектов. При проектировании сложных систем
исследователь (разработчик) должен выбирать необходимые ему экземпляры
объектов из заданного класса объектов путем конкретизации значений их
атрибутов (идентификации).
Сложность выбора необходимого варианта (экземпляра объектов)
оценивается величиной разнообразия (мощностью) данного класса объектов.
"Класс" — термин, употребляемый в математике в основном как синоним
термина "множество" для обозначения произвольных совокупностей
объектов, обладающих каким-либо определенным свойством, или признаком
(например, в алгебре — классы эквивалентности относительно данного
отношения эквивалентности).
Иногда классами предпочитают называть совокупности, элементами
которых являются множества (например, в рекурсивной теории —
перечислимые классы). В некоторых случаях под влиянием аксиоматической
теории множеств термин "класс" применяется для того, чтобы подчеркнуть,
что данная совокупность оказывается собственно классом, а не множеством в
узком смысле (например, в алгебре — примитивные классы универсальных
алгебр, называемые также многообразиями).
Теоретико-множественные операции над классами определяются так
же, как и над множествами. В общем случае классификация объектов может
проводиться по нескольким определяющим признакам (атрибутам объектов).
Например, людей можно классифицировать по имени, полу, дню рождения,
образованию, профессии и т. д. Каждый конкретный человек данного класса
будет определяться (идентифицироваться) соответствующим уникальным,
только ему присущим, набором значений данных атрибутов, который в
дальнейшем будем называть кодом или идентификатором данного объекта.
Пусть A1, . . . , An — перечень независимых атрибутов,
характеризующих некоторое множество объектов. Поставим в однозначное
соответствие каждому атрибуту Ai многозначный предикат Pi,
определяющий множество значений Ei =a1, . . . , aki данного атрибута так,
чтоtPi =e(Ai(t)) = ae Ei.
Другими словами, в любой момент времени атрибут Ai может
принимать только одно какое-нибудь значение ae из множества Ei. Тогда
класс K есть абстракция, определяемая как декартово произведение Ei . . . En
=K1, . . . , Km, Kj — код или идентификатор конкретного объекта j. По
данному определению символы j и Kj обозначают понятия, находящиеся в
отношении взаимно однозначного соответствия, j⇔ Kj. Код Kj есть
символическая (абстрактная) модель объекта j.
Размышляя об объектах, мы фактически оперируем их
наименованиями, ярлыками, кодами или идентификаторами, т.е. их
абстрактными представлениями в нашем сознании. Однако, экземпляр класса
объектов не одно и тоже, что экземпляр класса кодов этих объектов.
Экземпляр класса объектов — это конкретный объект j из множества
объектов 1, . . . , m, составляющих данный класс j  =1, . . . , m. В
процессе классификации классу объектов  по определенным правилам
ставится в соответствие класс представляющих объектов (моделей) — K.
Данное определение класса, по сути, эквивалентно теоретикомножественному понятию универсума U . Это означает, что класс как
математический формализм обладает всеми свойствами формализма
универсум. Поэтому для описания и анализа отношений между объектами и
подмножествами объектов одного класса можно успешно применять
исчисление обобщенных кодов подмножеств. При этом атрибуты A1, . . . , An
объектов класса  можно рассматривать как оси классификационного
пространства (пространства идентификаторов) объектов 1, . . . , n, где
каждый конкретный объект j представлен точкой с координатами Kj, как
показано на рис. 1
Введем отношение порядка в классе идентификаторов объектов K1, . . .
, Km такое, что µ(K1) < . . . < µ(Km), где µ(Kj) — мера или ключ
упорядочения
идентификаторов
объектов
в
классификационном
пространстве. Такой мерой может быть, например, индекс j = 1, . . . , m. Тогда
пространство идентификаторов объектов можно представить таблицей на
рис. 2.
В данной таблице каждая строка идентифицирует конкретный объект
j определенного класса j.
Согласно теории обобщенных кодов подмножеств каждая строка
данной таблицы есть код (1,j, 2,j, . . . ,  конкретного объекта j —
экземпляра данного класса .
Здесь i — номер атрибута и соответствующего ему столбца, а i —
номер строки таблицы, соответствующий номеру кода (идентификатора)
объекта, i,j Ei =a1, . . . , aki.
Таким способом в теории ОКМ осуществляется формальное
представление идентификаторов объектов. В данном случае случае
идентификатор объекта, как мы уже говорили, является символической
моделью конкретного объекта, а таблица на рис 3 представляет собой модель
класса объектов. В процессе исследования систем классы, как правило,
разбивают на подклассы. Обычно это творческий, в основном интуитивный
процесс.
Рис. 1: Оси классификационного пространства объектов
Рис. 2: Пространство идентификаторов объектов
Применение теории обобщенных кодов позволяет выяснить суть
процесса разбиения класса объектов на подклассы и в значительной мере
формализовать его. Если класс  представлен множеством определяюших
его атрибутов A1, . . . , An, то предполагается, что все эти атрибуты
существенны для данного класса, и каждый из них может принимать любое
значение из соответствующего ему множества значений Ei =a1, . . . , aki.
Устанавливая конкретное значение ai,e Ei для некоторого атрибута Ai
класса , мы тем самым ограничиваем множество объектов исходного класс
 до определенного нами подмножества объектов, для которых важно, чтобы
атрибут Ai имел значение ai,e = e Ei. В результате получается подкласс t
класса . В литературе по объектно-ориентированному программированию
класс t обычно называют дочерним классом, а класс  — родительским
классом.
Введем для обозначения значений ae,i символику теории обобщенных
кодов, а именно: "i" — для обозначения того, что атрибут Ai может иметь
произвольное значение из соответствующего ему множества Ei; "ae,i" — для
обозначения того, что атрибут Ai может иметь любое значение из
соответствующего ему множества Ei, кроме значения ae,i; "ae,i" - для
обозначения того, что Ai может иметь только данное конкретное значение
ae,i. С использованием данных обозначений исходный родительский класс 
можно представить одним обобщенным кодом K = (1, . . . ,n), а его дочерний
класс t, с единственным существенным значением ae,i — обобщенным
кодом Kt = (1, . . . , ae,i, . . . ,n). Количество существенных значений в коде
дочернего класса может быть r(Kt) : 0, 1, . . . , n. Величина r(Kt) определяет
уровень вложенности (иерархии) дочернего класса t относительно
исходного материнского класса . Величину d = r(Kt) r(Kg) будем называть
иерархическим расстоянием между классами t и g. При положительном
значении d иерархический уровень класса t выше уровня класса g, при
отрицательном значении d наоборот, иерархический уровень g выше уровня
t. В общем случае обобщенный код K класса объектов  есть
последовательность символов 1, . . . , n, где ia1, . . . , ak,a1, . . . ,ak,i.
Представление классов объектов в форме обобщенных кодов позволяет
также легко вычислять количество экземпляров объектов, содержащихся в
данном классе или подклассе. Для этого используют формулу: m(K) = i rx,где
i — номер разряда ri, соответствующего атрибуту Ai, в обобщенном коде K,
• x = k, если ri = ae,i,
• x = k 1, если ri =ae,i,
• x = 0, если ri =j,
• ae,i Ei,
• k—количество возможных значений атрибута A.
Еще раз заметим, что введенные здесь определения и обозначения
позволяют применять весь формальный аппарат теории обобщенных кодов
подмножеств к соответствующим операциям с классами и подклассами. В
частности, это позволяет формализовать общепринятые отношения между
классами, такие как наследование, включение, ассоциация и другие
отношения и операции, полезные для моделирования сложных систем.
Лекция 17
Теоретико-множественная модель представления объектов
Состояние объекта. Пространство состояний объекта
Как уже было сказано, идентификаторы объектов одного класса можно
упорядочить по некоторому критерию µ(Kj), определенному на множестве
значений одного или нескольких атрибутов,
характеризующих этот класс объектов. Например, располагая имена
(идентификаторы) объектов по алфавиту, или упорядочивая их по возрастанию
цифровых значений какого-нибудь иного атрибута. Если такого атрибута не
существует, то в качестве критерия упорядочения может служить комбинации
значений нескольких, или даже всех, атрибутов объектов данного класса.
Упорядоченные объекты, точнее их идентификаторы, можно изображать
точками на одной линии, которую будем называть линией классификации. Рис.
8.3
Рис. 3: Линия классификации объектов
Классификационные атрибуты объектов служат для идентификации
конкретных объектов. На- ряду с классификационными атрибутами, как
правило, не меняющими своих значений с течением времени, объекты обладают
также атрибутами, которые могут изменять свои значения со временем под
воздействием внешних и внутренних факторов, то есть, они являются
функциями времени t и других факторов Ai = fi(t, X). Символом X здесь
обозначено множество всех возможных факторов, воздействующих на объект
. Набор значений всех атрибутов объекта  в определенный момент времени t
называется состоянием данного объекта. Атрибуты Ai = fi(t, X)
характеризуют состояние объекта , поэтому они называются параметрами
данного объекта, и мы будем обозначать их специальными символами i, i = fi(t, X).
В отличие от параметрических атрибутов i, классификационные атрибуты,
определяющие идентификатор объекта  и его место в некотором классе , в
дальнейшем будем обозначать символами i.
Таким образом, множество A всех атрибутов объекта  разбивается на два
подмножества K и O.
Подмножество K содержит статические атрибуты объекта , а
подмножество O содержит атрибуты, характеризующие поведение данного
объекта, т.е. A = K O. Значения атрибутов i = fi(t, X) также могут быть
сформулированы при помощи предикатов и объединены в последовательность
переменных 1, . . . , s, которая представляет собой базу координат пространства
состояний определенного объекта. Состояние объекта в момент времени t
изображается на графике точкой в этом пространстве. Последовательность
состояний объекта j за определенное время t есть процесс, который называется
поведением объекта и обозначается Oj. Пример графика поведения объекта Oj
на отрезке времени [t0, t1] показан на рис. 4
Переменные j могут быть многоместными методами или функциями, но в
число их аргументов, как правило, должен входить фактор времени. Другими
словами, утверждается следующее: методы и функции являются атрибутами,
описывающими поведение объекта в пространстве его состояний. Поскольку
классификационное пространство (пространство идентификаторов объектов) и
пространство
состояний
объектов
(параметрическое
пространство)
характеризуют одни и те же объекты, первое определяет объекты как
экземпляры определенного класса, а второе характеризует поведение каждого
объекта данного класса (изменение его состояний), то эти пространства
естественно связаны между собой посредством объектов, которые они
определяют и характеризуют. Фактически модель объекта определяется в двух
взаимосвязанных системах координат: классификационной и параметрической.
Графически эта связь показана на рис. 5
Рис. 4: Поведение объекта Oj в пространстве координат ˜
На рис. 5 показано, что каждый объект j, принадлежащий к
определенному классу объектов, имеет свой идентификатор Kj в универсуме U и
обладает своим собственным поведением, которое характеризуется
функцией i = fi(t, Ki, X), i = 1, s. Поведение объекта j зависит как от собственных
параметров, так и от внешних факторов, в том числе и от воздействий со
стороны других объектов, которые могут принадлежать различным классам.
Согласно введенным обозначениям любой объект j класс  может быть
представлен набором значений своих координат1, . . . , i, i + 1, . . . , n, t, функций и
методов ϕ1, . . . , ϕr, т.е. j⇒ (1, . . . , i, i + 1, . . . , n, t) или j⇒ (Kj, , , t), где Kj —
код-идентификатор объекта j из классификационного пространства, Oj — набор
значений параметров, определяющих поведение объекта j иj — набор
отношений, методов и функций, определяющих поведение объекта, t — фактор
времени. При этом поведение объекта jесть процесс Oj = j(Kj, j, X, t), где X —
база факторного пространства. Фактор времени t вынесен из множества X в силу
его особой значимости в процессе поведения объекта.
Выражение Oj = j(Kj, j, X, t), по сути есть математическая модель процесса
поведения объекта ˜j в условиях воздействия на него различных внешних и
внутренних факторов  X в определенные моменты времени t. Ее можно
представить в графическом виде так как показано на рис. 6
Рис. 5: Связь классификационного пространства с пространством состояний
объектов одного класса
Рис. 6: Математическая модель поведения объекта j
Главным отличием данной модели от прочих является наличие в ней явно
выраженного идентификатора Kj данного объекта. Это главный компонент
модели, через который осуществляется связь моделей различных объектов в
системную модель более высокого уровня.
Моделирование отношений между объектами и классами
объектов
Связующими элементами между моделями различных объектов являются
отношения. Рассмотрим приложение данного понятия для формализации
объектно-классификационных моделей объектов и систем. Определяющими
атрибутами любого отношения являются:
• свойство, по которому определяется отношение рассматриваемых
объектов;
• размерность, или, другими словами, мера данного свойства,
определяющая соответствующую единицу измерения;
• область определения, представляющая собой базовое множество E
данного свойства;
• область значений отношения, содержащая альтернативные значения —
результаты данного отношения;
• семантика, определяющая сущность отношения,
• имя отношения, которое является символическим ярлыком его сущности.
(Сущность есть концентрированное выражение свойств некоторого объекта);
• время, к которому относится отношение (настоящее, прошедшее или
будущее);
• формула, представляющая собой конструкцию из символов
определенного языка, отражающую синтаксис отношения.
Всеобщими свойствами отношений являются:
• истинность — характеристика реальности отношения в определенных
условиях; отношение, как субъективное отражение объективной реальности,
может быть истинным, ложным или неопределенным, мерой истинности, как
правило, служит вероятность;
• местность, по количеству аргументов отношение может быть
одноместным, двухместным и так далее, вообще говоря, n-местным;
• сущность, как концентрированное выражение совокупности основных
логических
свойств
отношения:
симметричности,
транзитивность,
рефлексивности, антисимметричности и антирефлексивности;
• предметность, устанавливающая связь отношения с конкретными
свойствами конкретных объектов.
В математике, отношением называется подмножество R декартового
произведения E1 . . . En, где Ei — множество значений некоторой переменной
Xj, i = 1, n.
Обычная форма записи простейших отношений между переменными
(формула) имеет следующий вид:
ИМЯ_ОТНОШЕНИЯ (аргумент , ... , аргумент),
например,
РАВНО(x,y), ЛЮБИТ(x,y), ПРИНАДЛЕЖИИТ(А,В) и т.д.
На естественном языке такие отношения представляют собой
высказывания, указывающие на определенные действия над значениями
переменных x, y, . . .. При определенных условиях эти высказывания могут
быть истинными или ложными. Поэтому множество ИСТИНА, ЛОЖЬ
является областью значений любого отношения. Обычно предполагается, что
все специфические свойства отношения определены заранее и заданы по
умолчанию. Например, предполагается, что подчиненность аргументов, или
направленность действия отношения определяется порядком записи
аргументов (x любит y).
Все действия с отношениями выполняются с учетом этих свойств.
Например, из того, что "принадлежит (a, b)" и "принадлежит(b, c)" с учетом
свойства транзитивности отношения принадлежит следует отношение
"принадлежит (a, c)". Свойство транзитивности было присвоено отношению
"принадлежит (x, y)" при определении данного отношения. Формулы более
сложных отношений, как правило, составляют из этих простейших формул по
правилу подстановки, например так: РАВНО(z),ПРОИЗВЕДЕНИЕ(x, y))), или
РАВНО(ПРОИЗВЕДЕНИЕ x, y),z)) в силу рефлексивности отношения РАВНО
(x, y) по определению.
В прикладной математике, чтобы приблизить формальные выражения к
естественному языку, применяют следующую, более привычную форму записи
отношений:
аргумент ДЕЙСТВИЕ аргумент УКАЗАТЕЛЬ результат.
Здесь слово ДЕЙСТВИЕ обозначает класс всех функциональных
отношений, а слово УКАЗАТЕЛЬ — класс всех отношений типа "причина —
следствие", например, x + y = z. Если между значениями атрибутов Ai объекта
j установлена какая-нибудь зависимость, то ее можно представить (описать или
смоделировать) в виде определенного отношения R. Например, если
параметрами объекта прямоугольник являются длина — 1 , ширина — 2 и
площадь — 3, то эти параметры связаны следующим отношением:
ПРОИЗВЕДЕНИЕ (1,2) РАВНО 3.
Как принято в арифметике, формальная запись этого отношения имеет
вид: 3 = 1 2, или
3 = 1 2, или 3 = 1 2.
Здесь идентификаторами отношения ПРОИЗВЕДЕНИЕ служат
символы: "", "" или запись аргументов без разделительных знаков; отношение
РАВНО обозначается символом "=".
Вообще формульное представление отношений многообразно и обычно
зависит от языка, традиций и вкусов авторов, применяющих те или иные
формальные системы. Область применения отношений также влияет на формы
представления и интерпретацию отношений, применяемых в данной области.
Например, в естественном языке отношения между объектами описывают с
помощью соответствующих предложений (высказываний), в математике
используют язык символических формул, в логике
применяют свои специальные символы для записи отношений между
высказываниями, химия, физика и многие другие научные дисциплины обычно
используют специальные символы для записи отношений между объектами в
исследуемой предметной области. Однако, в любом случае понятие
"отношение" сохраняет вышеизложенные атрибуты, определяющие суть
данного понятия. Поэтому можно предложить единый метод определения и
формулирования отношений, как класса абстрактных объектов (понятий).
Лекция 18
Теоретико-множественная модель представления объектов
Классификационный подход к определению отношений
Отношения, как разновидность абстрактных объектов, могут быть
определены в системе четырех атрибутивных множеств (пространств):
идентификаторов, параметров, функций и факторов, т. е. в системе KOX. Для
этого достаточно все перечисленные выше атрибуты понятия "отношения" от- нести к
соответствующим пространствам K, O, , X и указать способы формального
представления
(записи) атрибутов в координатах данных пространств. Идентификаторы
Kj общеизвестных отношений обычно представляют собой специальные
символы, отличающиеся от алфавита естественного языка.
В ОКМ для идентификаторов общеизвестных отношений, как правило,
будем использовать общепринятую символику. Для идентификаторов
отношений, имеющих новый смысл и не формализованных в каких-нибудь
общеизвестных дисциплинах, мы будем употреблять слова русской речи,
написанные прописными буквами. Примеры идентификаторов некоторых
общеизвестных и вновь формализуемых здесь отношений приведены в первом
столбце таблицы на рис. 7.
Рассматривая отношения как объекты в терминах теории ОКМ, заметим,
что определение любого отношения так же как и определение любого иного
объекта требует явной или не явной конкретизации основных атрибутов:
идентификатора, параметрических свойств, определяющих его структуру,
методов и функций, характеризующих его поведение. Другими словами,
отношение также как и все иные объекты представляются в следующей форме:
Kj, Oj, j, t, где j — подмножество атрибутов, определяющих алгоритм
применения (или поведение) отношения Rj. Моделирование отношений между
объектами и классами объектов независимо от их природы является предметом
исследования общей системологии. В теории ОКМ предпринимается попытка
формализации таких моделей с целью выявления общих закономерностей и
методов математического моделирования сложных систем, а также
практического приложения этой теории при проектировании таких систем. По
определению ϕ есть код — идентификатор подмножества RE1 . . . Es, где Ei множество значений атрибута j, i = 1, s. Если атрибуты принадлежат разным
объектам, то отношения определяется между этими объектами. Если атрибуты
принадлежат одному объекту, то отношение касается только атрибутов одного
данного объекта.
Рис. 7
Важными
частными случаями отношений являются:
• когда R представляет собой подмножество универсума U , т.е. когда
все атрибуты Ai, i = 1, n, относятся к классификационному пространству
объектов одного определенного класса, например людей, деревьев, космических
аппаратов и т. д.;
• когда аргументами отношения R являются атрибуты одной
размерности (одного типа) и R определено в некоторой формальной системе,
например, в алгебре величин, алгебре множеств, в исчислении высказываний и
т. п., например, когда речь идет о сравнении каких-нибудь параметров
некоторых объектов;
• R представляет собой значение показателя определенного свойства Xi
некоторого объекта i, если R Ei, где Ei — область определения меры свойства Xi.
• n + 1-местное отношение F называется функциональным, или просто
— функцией, если для любых элементов ae, . . . , ag, ah, ak из E1, . . . , En + 1
соответственно из ae, . . . , agn, ah(+1) F ) и ae, . . . , agn, ak(+1) F следует
ah(+1) = ak(+1), другими словами, отношение F называется функциональным, если
оно представляет собой однозначное отображение декартового произведения
E1 . . . En в множество En+1.
Моделирование отношений между параметрами объектов
Между параметрами одного и того же объекта, а также между
параметрами различных объектов существует много различных отношения,
которые могут представлять интерес для исследователей. Если рассматриваются
отношения между параметрами различных объектов, то в этом случае ча- ще
всего речь идет о сравнении значений параметров заданных объектов,
например, о сравнении возраста людей или растений, о сравнении площадей
различных фигур и т.п.
Отношения между параметрами объектов изучаются многими общими и
специальными научными дисциплинами. Как привило, специальные дисциплины
при описании отношений между атрибутами изучаемых объектов применяют
символику и формальные модели отношений, определяемые общими
дисциплинами. Если между значениями параметрических атрибутов 
объекта j установлена какая-нибудь зависимость, то говорят, что параметры 
находятся в определенном отношении ϕ.
По определению ϕ есть код-идентификатор подмножества RE1 . . . Es, где
Ei — множество значений атрибута j, i = 1, s. Например, если параметрами объекта
прямоугольник являются длина — 1 , ширина —2 и площадь — 3, то эти
параметры
связаны
следующим
функциональным
отношением:
ПРОИЗВЕДЕНИЕ(1, 2, 3), где аргументы отношения соответственно определены,
как множители (1, 2) и результат (произведение) — 3. Как принято в арифметике,
формальная запись этого отношения имеет вид: 3 = 1 2, или 3 = 1 2, или 3
= 12. Здесь идентификаторами отношения ПРОИЗВЕДЕНИЕ или умножение
служат символы: "", "" или запись аргументов без разделительных знаков. В
принципе объект j может быть представлен в отношении R любым числом своих
атрибутов. Однако сложные отношения трудно представить в практически
обозримой форме. Поэтому необходимо искать простые аксиоматические формы
отношений, из которых можно строить сложные отношения с помощью простых
и понятных правил.
Одним из подходов к решению данной проблемы является определение
отношений между атрибутами по типам их параметров и формализация
отношений с учетом специфики каждого типа. Например, общепринятыми
типами являются: число, символ, множество и высказывание (предикат).
Отношения между этими типами формализованы с помощью специальных
общенаучных математических дисциплин: арифметики, символьной алгебры,
теории множеств и математической логики. Атрибуты объектов в принципе
могут определяться как предикаты. В дополнение к известным обще- принятым
типам атрибутов (величин, символов, высказываний, множеств и т.д.) в ОКМ
вводится тип идентификаторов объектов. Идентификатор однозначно
представляет объект в определенном классификационном пространстве. Другими
словами, идентификатор есть элементарный код K конкретного
объекта определенного класса K. Формально K (E1 . . . En = K). Это
означает, что любой класс K объектов 1, . . . , m может быть однозначно
представлен множеством K1, . . . , Km соответствующих идентификаторов K, и
любой объект j может быть представлен своим идентификатором (кодом) K = (a1,
j, a2, j, . . . , an, j), определенном в базе координат 1, . . . , n
классификационного пространства.
Моделирование состояний объекта
Как было определено выше для описания состояния объекта j необходимо
указать значения всех его атрибутов Ai в определенный момент времени K. При
этом значения классификационных атрибутов  определяют код Kj —
идентификатор данного объекта, а значения параметрических атрибутов
 определяют состояние этого объекта в момент времени t. При этом параметры
 объекта j взаимосвязаны определенными отношениями ϕ. Обозначим набор
значений всех параметрических атрибутов 1, . . . , s символом j и по аналогии с
кодом идентификатора Kj будем называть этот набор кодом состояния объекта j.
Таким образом модель состояния любого объекта j будет представлена тройкой
Kj, Oj, t. Другими словами, имеет место отображение j(t)⇒ (Kj, Oj, t).
Заключение
Последние 20 лет в центре внимания разработчиков информационных
систем находится вопрос о моделировании той деятельности человека,
результатом которой является речь.
Описание процессов получения, переработки, хранения и передачи
информации затрудняется тем, что данные процессы происходят в мозге
человека и недоступны для непосредственного исследования.
Высказывается мнение, что, изучая процесс обработки языка в мозге
человека, исследователь мысленно прослеживает тот путь, который проходит
этот человек, воспринимая и интерпретируя какой-либо текст.
Исследования процессов обработки языка непосредственно связаны с
прикладными задачами. На их основе разрабатываются модели
лингвистического обеспечения информационных систем.
Download