Грамматика в широком смысле

Материал из Циклопедии
Перейти к: навигация, поиск

Грамматика в широком смысле — термин в теоретической информатике, формальных методах, теории языков и проектировании компьютерных языков, обозначающий фактически любое формальное описание структур, встречающееся в программных системах. Например, пользователь вводит дату своего рождения при регистрации на вебсайте: эта дата обязана иметь определённый формат, чтобы программное обеспечение сайта могло распознать дату и сравнивать её с текущим числом и с днями рождения других пользователей. При этом форматов дат существует довольно много: день от месяца и от года может отделяться точкой или дробью, месяц может писаться перед днём или выражаться словом, и так далее — этот формат в данном случае и является грамматикой в широком смысле, и для успешного сотрудничества и пользователь, и программа должны сохранять верность грамматической структуре. Другой пример — для конструктивного использования программистами языка моделирования для обсуждения деталей архитектуры системы все они должны знать, что обозначают разные типы стрелок и шрифтов — то есть быть верными грамматической структуре выбранного языка моделирования.

В объектно-ориентированном программировании грамматикой в широком смысле является, например, интерфейс класса — чтобы успешно пользоваться чужими классами в своих программах, нужно знать, какие методы там есть и какие параметры требуются для вызова этих методов, то есть необходимо сохранять верность задаваемой интерфейсом класса грамматической структуре. Это является частным случаем более широко формулируемой задачи обработки структур данных, которая известна также и в императивной парадигме программирования: использование интерфейса доступа к структуре данных также является верностью грамматической структуре. В функциональных и декларативных языках манипуляции с данными (обычно списками или деревьями) не вынесены в отдельную библиотеку, а встроены в сам язык, однако грамматическая структура всё равно присутствует либо в явном (в случае строгой типизации), либо в неявном виде.

Изначально в теоретической информатике «грамматикой» называлась совершенно определённая формализация задания структуры чего бы то ни было, построенная из так называемых «терминальных символов» (например, цифр или букв), «нетерминальных символов» (категорий вроде «выражение» или «функция») и «правил вывода», которые задают правила собирания цепочек таких символов. Теория таких грамматик и соответствующих им языков были предложены Ноамом Хомским ещё в пятидесятых годах прошлого века. Из их иерархии в информатике самое широкое применение нашёл класс контекстно-свободных грамматик, в который попадают почти все распространённые языки программирования. Грамматики в классическом смысле традиционно используются для разбора (парсинга), то есть воссоздания древоподобной иерархической структуры по тексту программы.

Необходимость перехода от грамматик в классическом смысле к грамматикам в широком смысле назрела сравнительно недавно, когда было замечено, что многие методы анализа и преобразования грамматик, взятые из ставших классическими учебников, успешно применимы и в куда более широком контексте метамоделирования, протоколов общения, форматов для обмена данными и т. п., тогда как многие другие методы из той же области не только не обобщаются, но и вызывают большие трудности при попытках их практического применения. При этом в смежных развивающихся областях появляются всё новые техники, равных которым для классических формальных грамматик нет, потому что волна интереса к ним в научном сообществе спала ещё в семидесятые годы. На актуальные сегодня вопросы о совместимости программ, о возможности обновления данных и алгоритмов (как в проблеме двухтысячного года), о соответствии модели предметной области её компьютерной реализации, о тестировании грамматического обеспечение или даже о корректности потока XML данных относительно XML-схемы, грамматики в классическом смысле ответа не дают, а в широком смысле — вполне.

[править] Примеры

Class diagram.svg

Грамматики в широком смысле можно найти в следующих областях информатики:


[править] Источники

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты