Что такое семантика программы

Понятие семантики в информатике — это формализация значений структур программных языков через их формальные математические модели.

Введение

Термин семантика происходит из языка Древней Греции, где sēmantikos означало «значительный». В современный обиход его ввёл французский учёный Мишель Бреаль.

Замечание 1

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

Сдай на права пока
учишься в ВУЗе
Вся теория в удобном приложении. Выбери инструктора и начни заниматься!

Понятие семантики в информатике

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

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

Значение слова семантика. Что такое семантика.

«Понятие семантики в информатике»
Готовые курсовые работы и рефераты
Решение учебных вопросов в 2 клика
Помощь в написании учебной работы

Пример. Автор24 — интернет-биржа студенческих работ

Рисунок 1. Пример. Автор24 — интернет-биржа студенческих работ

С логической точки зрения эти программные коды выполняют одинаковые действия и итоги их работы аналогичны. Но одновременно следует отметить, что по семантике это пара различных циклов. И ещё пример тегов:

Пример. Автор24 — интернет-биржа студенческих работ

Рисунок 2. Пример. Автор24 — интернет-биржа студенческих работ

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

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

  1. Семантика аксиоматическая. Семантику всех синтаксических языковых построений возможно представить как некоторый комплект аксиом или законов вывода, который применяется, чтобы вывести итоги работы таких построений. Для понимания смысла написанной программы, эти законы вывода и аксиомы нужно применять точно так, как при попытках доказать стандартные математические теоремы. Если предположить, что параметры входных переменных связаны определёнными ограничениями, то аксиомы и законы вывода, возможно использовать, чтобы получить ограничения на величины других переменных после окончания действия программного оператора. После выполнения программы, можно получить доказательства правильности итоговых результатов и того, что они входят в диапазон заявленных ограничений на них по отношению к входным данным. Другими словами, подтверждено, что выходные параметры являются значениями требуемой функции, которые определены исходя из значений входных параметров.
  2. Семантика денотации. Она находит соответствие между выражениями в программе и действительными математическими объектами. Это означает, что выражения являются обозначением математических объектов. Очень важные, можно сказать пионерские итоги формирования денотационных семантик сделаны в публикациях Д. Скотта и К. Страчей в начале семидесятых годов прошлого века. Скотт впервые выстроил модель λ-исчисления, которая основана на представлениях об общем отчасти упорядоченном множестве. Чтобы реализовать такую модель, он применил функции, которые являются непрерывными на этом множестве.
  3. Семантика интерпретаций. Это выражение операционной семантики конструкций в обозначениях языков программирования низкого уровня (вплоть до машинных кодов). Эта методика даёт возможность определять фрагменты программы, которые исполняются замедленно, и часто применяются в требуемых участках программных систем, чтобы оптимизировать программный код.
  4. Семантика трансляций. Это выражение операционной семантики конструкций в обозначениях программных языков высокого уровня. Эта методика позволяет осуществлять изучение языка, на основании уже известных программисту и похожих языков.
  5. Семантика трансформации. Это выражение операционной семантики языковых конструкций в обозначениях самого этого языка. Этот тип семантики выступает главной составляющей метапрограммирования.
Читайте также:
Использование программ в облаке

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

Основы программирования. Синтаксис и семантика

Источник: spravochnick.ru

21.1. Синтаксис и семантика языков программирования

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

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

Последовательность понятий и их допустимое использование в правилах определяет синтаксически правильные структуры, образующие программы. Именно иерархия объектов, а не то, как они взаимодействуют между собой, определяются через синтаксис. Например, оператор может встречаться только в процедуре, а выражение в операторе, переменная может состоять из имени и необязательных индексов и т.д. Синтаксис не связан с такими явлениями в программе, как «несоответствие типов» или «переменная с данным именем не определена». Этим занимается семантика.

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

Текст исходной программы на языке высокого уровня представляет собой обычный тестовый файл. Для его «чтения» и превращения в последовательность машинных команд, прежде всего, выполняется синтаксический анализ текста программы.

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

21.2. Структура языков программирования

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

Языки программирования могут сильно отличаться друг от друга по организации отдельных понятий и по отношениям между ними. Например, язык C++ допускает описание переменных в любой точке программы перед первым ее использованием, а в Паскале переменные должны быть определены в специальной области описания. В зависимости от принятого решения, транслятор может анализировать программу за один или несколько проходов, что влияет на скорость трансляции.

Читайте также:
Как сдавать кал программу

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

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

Существует несколько компиляторов языка Паскаль: Turbo Pascal, MS Pascal, Pascal with Objects, Delphi, Builder. Вместе с тем, все языки программирования обладают рядом общих характеристик и параметров. Эта общность определяет и схожие для всех языков принципы организации трансляторов.

Для любого языка его создателями определяются:

  • множество символов, которые можно использовать для записи правильных программ (алфавит);
  • множество правильных программ (синтаксис);
  • «смысл» каждой правильной программы (семантика).

Рассмотрим пример синтаксического разбора. Пусть в исходном тексте программы встретилась формула a + (b + c) * d. В большинстве языков программирования такая формула определяет иерархию программных объектов, которую можно отобразить в виде дерева (Рис. 21 .79). В кружках представлены символы, используемые в качестве элементарных конструкций, а в прямоугольниках задаются составные понятия, имеющие иерархическую и, возможно, рекурсивную структуру.

Синтаксическая структура, правильная для одного языка, может быть ошибочной для другого. Например, в языке Лисп приведенное выражение не будет распознано. Однако для этого языка корректным будет являться выражение ( * ( + a b c ) d ).

Рис. 21.79. Дерево синтаксического разбора.

Другой характерной особенностью всех языков является их семантика. Она определяет смысл операций языка, корректность операндов. Цепочки, имеющие одинаковую синтаксическую структуру в различных языках программирования, могут различаться по семантике (что, например, наблюдается в C++, Pascal, Basic для приведенного выше фрагмента арифметического выражения). Знание семантики языка позволяет отделить ее от его синтаксиса и использовать для преобразования в другой язык (осуществить генерацию кода). Описание семантики и распознавание ее корректности обычно является самой трудоемкой и объемной частью транслятора, так как необходимо осуществить перебор и анализ множества вариантов допустимых комбинаций операций и операндов.

Источник: studfile.net

Большая Энциклопедия Нефти и Газа

Семантика языка программирования — это смысл, который закладывается в каждую конструкцию языка. Семантический анализ — это проверка смысловой правильности конструкции. Например, если в выражении используется переменная, то она должна быть определена ранее по тексту программы, а из этого определения может быть получен ее тип. Исходя из типа переменной, можно говорит о допустимости операции с данной переменной. [1]

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

Этот вопрос предполагает, что имеется соответствие, частично определяемое множеством процедур Р, между предикатными символами и некоторыми другими объектами, являющимися их значениями. Что же можно использовать в качестве таких объектов. Для вычислительной семантики очевидным выбором являются эффективно вычислимые отношения. Они разработали три различных вида семантики, в каждом из которых в качестве денотата предикатного символа определяется некоторое вычислимое отношение, и установили соотношения между ними. Если рассматривать опровержение как вычисление и заметить, что для порождения этих вычислений имеются такие системы вывода, как резолюция, то термин операционная семантика становится оправданным. Это определение операционной семантики аналогично традиционному способу задания семантик обычных языков программирования — а именно, посредством определения механизма исполнения ( как правило, на некоторой абстрактной машине) и объяснения затем значения программы, исходя из того, что вычисляется в результате применения к программе данного механизма. [2]

Читайте также:
Математические методы и модели поддержки принятия решений рабочая программа

Синтаксис и семантика языка программирования должны соответствовать прикладной области. Отсутствие такого соответствия в универсальных языках требует дополнительных программных действий. [3]

Синтаксис и семантика языка программирования хранятся в такой системе в виде аксиом на языке исчисления предикатов. Система построения доказательств определяет выделенные пути в исследуемой программе и затем использует саму программу, утверждения и аксиомы для генерации условий верификации. Затем она использует правила вывода исчисления предикатов в сочетании с дедуктивными и эвристическими принципами рассуждения, пытаясь доказать каждое условие верификации. [4]

Способ описания семантики языков программирования посредством задания для каждой элементарной конструкции языка предусловий и аксиом, определяющих соответственно условия, необходимые для се применения, и условия, которые становятся истинными после ее применения. [5]

Формальным определением семантики языка программирования является языковой процессор. Языковой процессор — это программа или техническое устройство, выполняющие трансляцию или интерпретацию. [6]

Попытка единообразного систематического изложения семантики языков программирования вызвала немало трудностей, в частности терминологического характера. [7]

Единого общепринятого формального метода описания семантики языков программирования на сегодняшний день не существует. Описание языка обычно состоит из формального описания синтаксиса и неформального описания семантики языка. [8]

В доказательстве правильности программ и аксиоматической семантике языков программирования — логическое выражение, которое должно быть истинно после выполнения некоторого действия, если перед выполнением этого действия было истинно соответствующее предусловие. [9]

И наконец, должна быть определена семантика языка программирования . Семантика языка программирования — это набор правил, по которым исполнитель выполняет программы на этом языке. Пользуясь семантикой языка, можно однозначно определить результат выполнения программы с заданными входными данными. Более подробно с синтаксисом и семантикой мы будем знакомиться на примере конкретных языков программирования. [11]

И наконец, должна быть определена семантика языка программирования . Семантика языка программирования — это набор правил, по которым исполнитель выполняет программы на этом языке. Пользуясь семантикой языка, можно однозначно определить результат выполнения программы с заданными входными данными. Более подробно с синтаксисом и семантикой мы будем знакомиться на примере конкретных языков программирования. [13]

Чтобы сформулировать условия верификации, необходимо аксиоматическое описание семантики языка программирования . Гипотетический язык, на котором написана изображенная на рис. 17.2 программа, сводится к операторам двух типов ( присваивание и принятие решения), так что нужно описать, как должны изменяться утверждения при рассмотрении этих операторов. Эти аксиомы должны отвечать на такой вопрос: если некоторое утверждение истинно после оператора программы, какое утверждение должно быть истинным перед оператором. Другими словами, вы отменяете присваивание, заменяя в утверждении все вхождения переменной, указанной слева от знака присваивания, выражением справа. [14]

Основные области, охватываемые теорией программирования, связаны с семантикой языков программирования ( S. [15]

Источник: www.ngpedia.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru