Файл: Общие сведения стандартов языков программирования и история их развития.pdf

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

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

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

Добавлен: 15.05.2023

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

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

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

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

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

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

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

record

field1:integer;

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

case byte of

1:(b0,b1:byte);

2:(i0:integer);

end

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

struct {

int field1;

char field2[31];

union {

byte b0b1[2];

int i0;

} u;

}

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

class {

int field1;

char[] field2;

int i0;

}

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

ТелоЦикла

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

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

ТелоЦикла

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


Заключение

Язык программирования - это формальная знаковая система, предназна­ченная для записи программ (строится в соответствии с той или иной ба­зовой моделью вычислений, т.е. совокупностью стратегий, методов, подхо­дов и понятий, определяющих стиль программирования).

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

Современной тенденцией является появление языков программирования ультра высокого уровня. Такого рода языки характеризуются наличием до­полнительных структур и объектов, ориентированных на прикладное исполь­зование. Прикладные объекты, в свою очередь, требуют минимальной на­стройки в виде параметров и моментально готовы к использованию.

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

Список литературы

1. Волкова В.Н. Теория информационных процессов и систем. - М.: Юрайт, 2016. - 504 с.

2. Губарев, В.Г. Программное обеспечение и операционные системы ПК: учебник / В.Г. Губарев.- Ростов н/Д.: Феникс, 2012г.-384с.

3. Дорот, В. Л. Толковый словарь современной компьютерной лексики. / В. Л. Дорот , Ф. А. Новиков . - 2-е изд.,перераб.и доп. – СПб. : БХВ-Петербург, 2011г. - 512 с.

4. Информатика. Базовый курс/ Под ред. С.В. Симоновича. - СПб.: Питер, 2015. - 640 с.

5. Информационные технологии в экономике управления / Под ред. В.В. Трофимова. - М.: Юрайт, 2015. - 482 с.

6. Курносов А.П., Кулев С.А., Улезько А.В. и др. Информатика. Под ред. А.П. Курносова.-М.: КолосС, 2010.-272 с.

7. Макарова Н.В. Информатика / под ред. Проф. Н.В. Макаровой. - М.: Финансы и статистика, 2011. - 768 с.

8. Малышев Р.А. Локальные вычислительные сети: Учебное пособие / РГАТА. - Рыбинск, 2012. - 83 с.