Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Общие понятия. Формальные системы приобретают все большее значение при проектировании, реализации и изучении языков программирования




Языки и грамматики

Формальные системы приобретают все большее значение при проектировании, реализации и изучении языков программирования. Формальные системы используются для описания синтаксиса языка программирования. Такое описание играет важную роль как для пользователя, так и для создателя компиляторов. Пользователь нуждается в ясном описании языка. Создатель компилятора сталкивается с проблемами мобильности и сопровождения. Если один и тот же язык должен быть реализован на различных машинах, то допустимые строки языка должны быть так определены, чтобы их представление на пользовательском уровне было инвариантным (насколько это возможно).

Формальные системы используются для синтаксически-ориен-тированной компиляции (COK). СОК используют базу данных, содержащую синтаксические правила исходного языка, для проведения грамматического разбора.

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

Формальные системы используются для изучения сложности языков программирования и компиляторов. Создатели и языка и компилятора хотят знать, какие свойства языка наиболее существенным образом увеличивают в компиляторе сложность фазы распознавания. Создатель компилятора, кроме того, хочет иметь некоторую основу для оценки производительности компилятора.

Формальные системы используются при попытках доказательства эквивалентности и правильности программ. Формальные системы создают почву для анализа и сравнения различных языков. Они помогают ответить на такие вопросы: что является базовыми элементами языка, какие конструкции допустимы в языке, как можно комбинировать элементы языка для построения новых конструкций, какие классы задач могут быть запрограммированы на этом языке, какова стоимость и трудность написания программ.

Язык можно представить как некоторое множество предложений или формул – строк символов – с корректно определенной структурой и, обычно, со значением. Правила определяющие допустимые конструкции языка, составляют его синтаксис.

Если бы все языки состояли из конечного числа допустимых предложений или формул, проблема описания синтаксиса не стояла бы: достаточно было бы просто перечислить все допустимые предложения – строка символов являлась бы предложением языка только в том случае, если бы она попадала в список допустимых.

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

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

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

Естественный язык не подходит для формального описания из-за его неопределенности. Компьютер не воспримет программу написанную на не до конца формализованном языке.

Самым элементарным объектом является символ. Символы соединяются друг с другом в строки, которые могут принадлежать языку или нет.

Алфавит Т – есть конечное множество символов. Строка – конкатенация символов. Обозначим Т* – класс всех возможных конечных строк алфавита Т. – нулевая или пустая строка. Обычно из всех возможных строк только вполне определенные являются правильными формулами языка.

Язык L есть подмножество множества конечных строк в алфавите Т

L T*.




Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 290; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.