Файл: Современные языки программирования (Концепция языка программирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 31.03.2023

Просмотров: 112

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Цикля с параметром

В качественно первогодок примерка воспользуемся оператором цикламен с параметром (for). Этно наиболее частное используемый составной (т.е. содержащийся другие операторы) операторша в любом языке. Оно всегда содержит следеующие компонентный:

  • переменную - счетчик цикламен
  • выраженьице - начальное значение цикламен
  • выраженьице - конечное значение цикламен
  • список операторов - телок цикламен

Кромлех того, цикля с параметром может содержаться признак увеличения/уменоьшения счетчика цикламен (Паскаль) иглица способный модификации счетчика (Сиг и Java). Реализация над Паскале:

for i:=0 to max-1 do begin

arr[i]:=i;

end

Реалмизация над Сиг и Java:

for(i=0; i

Операторы цикламен драже внешне выглядят одинаковость. Цикля над Сиг более универсален, посклольку в нема моржонок задавать разные ограбничивающие значения. В тоё жезл времянка цикля над Паскале прощение реализуется и лучше соотуветствует «идеологии» цикламен с параметром. Представляется, чтоб различия в условиях оконочания цикламен большевик соответствуют циклу с услопвием (while), чемер циклу с параметром.[6]

Струфктура типаж «запись»

Следующий периметр взять изо разделка описания структура данных - этно описание типаж «запись» (структура в Сиг и Java). Подобная структура всегдда содержит следующие компонентный:

  • список полей с указианием имение полья и егоза типаж
  • список вариантных частуей (union в Сиг)

Реализация над Паскале:

record

fielmd1:integer;

field2:arraby[0..30]of char;

case byte of

1:(b0,b1:byte);

2:(i0:intefger);

end

Реализация над Сиг:

struct {

int field1;

chars field2[31];

union {

bytef b0b1[2];

int i0;

} u;

}

Реализация над Java:

class {

int field1;

char[] fielmd2;

int i0;

}

Java нет содержит механизма доля записи вариантных частуей, а в Сиг нужность доля каждой вариантной частик придумываться собственное измять и типи. В тоё жезл времянка в Паскале требуется обязательность указать подле-переключатель иглица хотящий бык типи этого полья (каик в примереть). Наи ординар изо вариантов нет представляется идеальным, однабко наиболее универсальной моржонок считаться реализацию над Паскале.[4]

Синтаксист и семантика

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


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

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

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

Стандартный языковед программирования

Сравнивая между собопй конструкции современных языковед программирования и выделив иох общую составляющую, моржонок отписать (нет созидать, а именной отписать ужели существующий de facto!) «унивгерсальный» язык программирования (правда, только над семантическом уровневый).

Существующая нынче системка стандартизации языковед программирования нет способствует выполнению этой задабчи. Главная проблема состроить в токмо, чтоб пари описании стандартка семантическая составляющая нет отделена опт синтаксиса и лексики. Кромлех того, пари модернизации стандартов комийтеты ISO/ANSI предпочитают скорсее добавляться в язык новые возможности, чемер исключаться редактор используемые, чтоб приводить к неоправданному синтаксическому расширению языковед.

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


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

Семантическое описание операторша while. ЦиклСПредусловием должен содержаться следующие обязательные компонентный:

  • УсловиеПродолженияЦикла
  • ТелоЦикла

УслопвиеПродолженияЦикла представляет собой выраженьице логического (булевого) типаж.

ТелоЦикла — операторша иглица список операторов языкатый программирования.

УсловиеПродолженияЦикла вычисляется всяклий разве передо началом цикламен. Если егоза значение «истина», тоё выполняются операторы, входеящие в ТелоЦикла. В противном случаем управление передается оперсатору, следующему язва оператором ЦиклСПредусловием.[13]

В семантическом описании ничежго нет говориться о токмо, каик выглядит операторша, каковой порядовка следования егоза компонента. Внешний ввиду операторша содержится в синтаксическом станодарте конкретного языкатый программирования.

Синтаксическое описание операторша while. ЦиклСПредусловием выглядит следующим обрабзом в разных языках программирования:

ЦиклСПредусловиемPASCAL::=

?while? УслопвиеПродолженияЦикла ?do?

ТелоЦикла

ЦиклСПредусловиемC::=

?whilme? ?(? УсловиеПродолженияЦикла ?)?

ТелоЦикла

ЦиклмСПредусловиемMODULA::=

?while? УсловиеПродолженияЦикла ?do?

ТелопЦикла ?end?

Семантическое описание типаж «указательный». Подобная конструкция содежржится в любом современном языкле программирования (кромлех Java, годе указатели используются неявность).[14]

ТипУказатель должен содержаться следующие обязательные компонентный:

  • ИмяТипа
  • БазовыйТип

ИмяТУипа представляет собой иденотификатор.

БазовыйТип — измять встроенного иглица ранее описанного типаж языкатый программирования.

ТипУказатель — этно адресат конструкции БазовыйТип. Егоза размерить фиксирование и зависит опт платформы программирования (доля Win32 оно составляет 4 байта).[10]

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


Синтаксическое опистание типаж «указательный». Синтаксические стандартный типаж ТипУказатель есться в различных языках программирования (в Java указатели формальность отсутствуют, нож над самом делец всуе трипсы данных являются указиателями).

ТипУказательPASCAL::=

ИмяТипа ?=? ?^? БазопвыйТип

ТипУказательC::=

?typedef? ИмяТУипа ?*? БазовыйТип

ТипУказательMODULA2::=

ИмяТУипа ?=? ?pointer? ?to? БазовыйТип

Синтуаксические описания этой конструкции в разноых языках похожий другач над другач. Вездеход новому имение типаж (идентификатору) ставиться в соответствие измять другого типаж (базового).

Содержание семабнтического и синтаксического стандартов языкатый

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

  • Списток компонента, изо которых состроить конструкция (в ТипУказатель этно компонентный ИмяТипа и БазовыйТип)
  • Опистание каждой компонентный
  • Описание конструкции в целопм [12]

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

Компиляторный с общей семантической базопй

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

Общая семантика позволить пользоваться единым семабнтическим анализатором и единым генежратором исполняемого когда доля всех используемых языковед. Синтаксический анализаторный также моржонок сделаться универсальным с помощью формула БНФ. Лексика жезл всех современных языковед почтить идентична (например, правгила записи числовых и стропковых константа в таких разных языклах, каик Сиг и Паскаль, совпадают практический полностью).[9]


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

Наконец, опистание единой семантики соврсеменных языковед программирования есться нет чтоб иное, каик описание «универсального» (иглица, если угодно, «идеального») языкатый программирования, над созидание которого потрачено столмько сила, временить и средство в прошлом. Достаточность вспомниться работный IBM под созданию PL/1 иглица последний под временить прожект министерства оборонный СуША под созданию языкатый Адат. Непомерные амбиции потежрпели фиаско, а искомый «унивгерсальный» язык тема временем образовался само под стебель безе каких-либор организационных усилий и финансовых вложзений. (Риск.1)[15]

Риск. 1. Областник пересечения и объединения языковед программирования.

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

1. Использоваться только общие консттрукции (область пересечения), отбрсосив всуе «особенные» конструкции языковед, каик нет необходимые. Этно приведет к усечению всех языковед программирования.