Лекция 5 Семантика основных конструкций языка программирования C#



Скачать 110.15 Kb.
страница1/3
Дата01.08.2018
Размер110.15 Kb.
ТипЛекция
  1   2   3

Лекция 5 

Семантика основных конструкций языка программирования C#
Аннотация: В данной лекции будут рассмотрены вопросы, относящиеся к понятийному аппарату и выразительным возможностям семантического представления формальных теорий и языков программирования. При этом основное внимание будет уделено сопоставлению семантики языков объектно-ориентированного и функционального программирования. В качестве примеров языков программирования будут выступать уже знакомый нам по предыдущему курсу язык SML и изучаемый нами язык C#.

Ключевые слова: семантика, SML, подмножество, синтаксис, выражение, БНФ, константа, идентификатор, операция отрицания, команда, цикл с предусловием, деление, теория вычислений, формальная модель, определение, синтаксический домен, домен, вычислительная модель, семантическая функция, семантическое предложение, состояние, память, значение, ПО, связывание,свободная переменная, абстрактная машина, отображение, ламбда-исчисление, дизъюнктная сумма, денотат, означивание, несоответствие типа, вычисление, сообщение об ошибке, отрицание, вывод, метатеория, net, метасреда, список

Представим построение денотационной семантики важнейших конструкций языка программирования C#.

Напомним, что история развития теории и практики семантического анализа языков программирования были рассмотрены во вступительной лекции.

Процедура построения денотационной семантики основных конструкций языка программирования SML изложена в лекции 8.

Поставим задачу формализации семантики языка объектно-ориентированного программирования C#. Заметим сразу, что в рамках данного курса будет рассматриваться не все множество возможных конструкций данного языка, а некоторое весьма ограниченное (хотя и вполне достаточное для иллюстрации основных идей курса) их подмножество, которое условно назовем языком программирования C# и будем именовать так в дальнейшем.

Прежде всего, рассмотрим синтаксис языка C#, т.е. перечислим основные типы составляющих его конструкций.

Язык C# содержит множество выражений E, которые формализуются посредством БНФ в следующем виде:

E ::= true|false|0|1|I|!E|E1==E2|E1+E2

Заметим, что выражения включают логические ( true и false ) и целочисленные (в ограниченном объеме: 0 и 1 )константы, множество идентификаторов ( I ), а также операции отрицания ( !E ), сравнения ( E1==E2 ) и сложения (E1+E2 ).

Кроме того, язык C# содержит множество команд С, которые формализуются посредством БНФ в следующем виде:

С::=I=E | if(E)C1 else C2 |

while(E) C | C1;C2

Заметим, что команды включают присваивание I=E, условие if(E)C1 else C2, цикл с предусловием while(E) C, а также последовательность команд C1;C2 .

Деление синтаксиса языка C# на выражения и команды во многом является условным и служит иллюстративным целям.

Как и ранее, в качестве математической формализации, моделирующей семантику языков программирования (в частности, языка C#), будет использоваться теория вычислений Д. Скотта.

Приведем порядок построения формальной модели семантики языка программирования C# согласно ранее представленному формальному описанию синтаксиса языка в терминах БНФ.

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

Далее, следует представить определение вычислительной модели на основе синтаксических доменов.

Затем нужно перейти к определению семантических функций ( E для домена Exp, C для домена Com и т.д.), которые отображают синтаксические конструкции языка программирования в соответствующие им семантические представления.

Наконец, следует сформулировать определение семантических предложений в терминах смены состояний программы.

Заметим, что при выполнении программы (в частности, написанной на языке программирования C#) происходит изменениесостояния, состоящего из памяти ( m, memory ), которая в простейшем случае характеризует соответствие идентификаторов изначений (то есть, по сути, связывание переменной со значением ) либо имеет значение unbound (характеризующее отсутствие связи идентификатора со значением, т.е. аналогичное свободной переменной).

В соответствии с намеченной схемой рассуждений, перейдем к описанию синтаксических доменов, которые в полной мере определяют синтаксис языка C#:

Ide ={I|I - идентификатор};

Com ={C|C - команда};

Exp ={E|E - выражение}.

Совокупность всех возможных идентификаторов языка C# организуем в домен Ide, команд - в домен Com, и, наконец,выражений - в домен Exp.

Далее, сформулируем вычислительную модель на основе состояний программы языка C#, для наглядности систематизировав ее в виде следующей таблицы:


Таблица 16.1. Вычислительная модель на основе состояний программы языка C#




Поделитесь с Вашими друзьями:
  1   2   3


База данных защищена авторским правом ©znate.ru 2017
обратиться к администрации

    Главная страница