Файл: Классификация языков программирования высокого уровня ( ИНТЕРПРЕТАТОРЫ ).pdf

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

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

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

Добавлен: 28.03.2023

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

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

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

Таким образом, это гибкий язык, и он более пригоден для объектно-ориентированного расширения, чем язык со строго заданными типами, например, Паскаль. Пролог представляет собой дополнение к стандартному Прологу. Все свойства языка по-прежнему доступны программистам. Следовательно, Пролог  ++можно отнести к группе гибридных языков, представителями которой считаются  Object Pascal и C++. Расширение Пролог ++ поддерживает все свойства, присущие обычно объектно-ориентированным языкам: концепции объектов и классов, единичное и многократное наследование, разбиение на подклассы и передачусообщений. 

Поддерживаются также некоторые усовершенствованные свойства, существующие в таких языках, как C++ и Smalltalk, включая общие ичастные методы. Интересным свойством является поддержка в языке программирования с управлением данными. Эта техника, которая может быть ещеназвана программированием, "управляемым событиями", используется в большинстве языков объектно-ориентированного программирования, особенно в тех, которые разработаны для машин с интерфейсом, управляемым "мышью". Объектно-ориентированная программа реагирует на события, которые определяют поток управления.

В Прологе ++ программирование суправлением данными достигается 
при помощи концепции демонов. Демон представляет собой объект, методы которого вызываются в случае определенныхсобытий и могут быть таким образом использованы для поддержки программирования с управлением данными. Сам язык основан на концепции передачи сообщений. Программа на Прологе ++ строится вокруг множества объектов Пролога ++, которые обмениваются сообщениями. В этом смысле Пролог ++ ближе к чистомуобъектно-ориентированному языку, такому,  как Smalltalk, чем C++ или Object Pascal. Определения объектов строятся исходя из вызовов Open_Object [имя_объекта] и Close_Object [имя_объекта], а методы определяютсяпрактически так же, как в других объектно-ориентированных языках. Для задания наследования можно явным образом указать, какой метод какого объекта долженнаследоваться, что является необходимым для многократного наследования.

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


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

Лексический анализатор должен не только выделить лексему, но и выполнить некоторые преобразования. Например, если лексема – число, то егонеобходимо перевести во внутреннюю (двоичную) форму записи как число с плавающей или фиксированной запятой. А если лексема – идентификатор, то его необходиморазместить в таблице, чтобы в дальнейшем обращаться к нему не по имени, а по адресу в таблице.
Хотя лексический анализ по своей идее прост, тем не менее, эта фаза работы 
компилятора часто занимает больше времени, чем любая другая.Частично это происходит из-за необходимости просматривать и анализировать исходный текст символ за символом. Иногда даже бывает необходимо вернутьпрочитанный символ во входной поток с тем, чтобы повторить просмотр и анализ.

CиСи – это язык программирования общего назначения, хорошо известный своей эффективностью, экономичностью, и переносимостью. Указанные преимущества Си обеспечивают хорошее качество разработки почти любого вида программного продукта. Использование Си в качестве инструментального языка позволяет получать быстрые и компактные программы. Во многих случаях программы, написанные на 
Си,сравнимы по скорости с программами, написанными на языке ассемблера. При этом они имеют лучшую наглядность и их более просто сопровождать. Си сочетаетэффективность и мощность в относительно малом по размеру языке. Си – это замечательный язык, и хотя некоторым он не нравится, но все же большинствопрограммистов его любят. На Си вы можете создавать программы, которые делают все, что вы пожелаете. Нет другого такого языка, который бы так жестимулировал к программированию. Создается впечатление, что остальные языки программирования воздвигают искусственные препятствия для творчества, а Си– нет. 
Использование этого языка позволяет сократить затраты времени на создание работающих программ. Си позволяет программировать быстро,эффективно и предсказуемо. Еще одно преимущество Си заключается в том, что он позволяет использовать все возможности вашей ЭВМ. Этот язык созданпрограммистом для использования другими программистами, чего о других языках программирования сказать нельзя.


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

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

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

Также, как и особенностей, в языке Си присутствует куча недостатков. Ведь от них не защищен не один проект, в томчисле проект разработки и выполнения программ, на языке Си: Язык Си предъявляет достаточно высокие требования к квалификации использующего  его программиста. При изучении Сижелательно иметь представление о структуре и 
работе компьютера. Большую помощь и более глубокое понимание идей Си, как языка системногопрограммирования, обеспечат хотя бы минимальное знание языка ассемблер. Уровень старшинства некоторых операторов не является общепринятым, некоторыесинтаксические конструкции могли бы быть лучше. Тем не менее, как оказалось Си – чрезвычайно эффективный и выразительный язык, пригодный для широкого класса задач.

Безусловно, Си++ восходит, главным образом, к Cи. Cи сохранен как подмножество, поэтому сделанного в Cи акцента на средствахнизкого уровня достаточно, чтобы справляться с самыми насущными задачами системного программирования. Cи, в свою очередь, многим обязан своемупредшественнику BCPL.Название Си++ - изобретение лета 1983-его. Более ранние версии языка использовались начиная с 1980-ого и были известны как "Cи сКлассами". Первоначально язык был придуман потому, что автор хотел написать событийно управляемые модели для чего был бы идеален Simula67,если не принимать во внимание эффективность. "Cи с Классами" использовался для крупных проектов 
моделирования, в которых строготестировались возможности написания программ, требующих (только) минимального пространства памяти и времени на выполнение. В "Cи с Классами"не хватало перегрузки операций, ссылок, виртуальных функций и многих деталей. Си++ был впервые введен за пределами исследовательской группы автора в июле1983-го.


Однако тогда многие особенности Си++ были еще не 
придуманы.Название Си++ выдумал Рик Масситти. Название указывает на эволюционную природу перехода к нему от Cи. "++" - этооперация приращения в Cи. Чуть более короткое имя Cи+ является синтаксической ошибкой, кроме того, оно уже было использовано как имя совсемдругого языка. Знатоки семантики Cи находят, что Си++ хуже, чем Cи 
++. Названия D язык не получил, поскольку он является расширением Cии в нем не делается попыток исцелиться от проблем путем выбрасывания различных особенностей. 

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

Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенныхпользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование сприменением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые илегче контролируемые программы. Изначально Си++ был разработан, чтобы автору и его друзьям не т приходилось программировать на ассемблере, Cи или других современныхязыках высокого уровня. Основным его предназначением было сделать написание хороших программ более простым и приятным для отдельного программиста. Планаразработки Си++ на бумаге никогда не было. Проект, документация и реализация двигались одновременно. Разумеется, внешний интерфейс Си++ былнаписан на Си++. Никогда не существовало "Проекта Си++" и "Комитета по разработке Си++". Поэтому Си++ развивалсяи продолжает развиваться во всех направлениях, чтобы справляться со сложностями, с которыми сталкиваются пользователи, а также в процессе дискуссийавтора с его друзьями и коллегами.

В качестве базового языка для Си++ был выбран Cи, потому что он: многоцелевой, лаконичный и относительно низкого уровня: отвечает большинству задач системного программирования: идет везде и на всем:пригоден в среде программирования UNIX. В Cи есть свои сложности, но в наспех спроектированном языке тоже были бы свои, а сложности Cи нам известны. Самое главное, работа с Cипозволила "Cи с Классами" быть полезным (правда, неудобным) инструментом в ходе первых месяцев раздумий о добавлении к Cи Simula-подобных классов.
Си++ стал использоваться шире, и по мере того, как возможности, предоставляемые им помимо возможностей Cи,становились все более существенными, вновь и вновь поднимался вопрос о том, сохранять ли совместимость с Cи.


Ясно, что отказавшись от определеннойчасти наследия Cи можно было бы избежать ряда проблем. Это не было сделано, потому что:
есть миллионы строк на Cи, которые могли бы принести пользу в Си++ приусловии, что их не нужно было бы полностью переписывать с Cи на Си++;есть сотни тысяч строк библиотечных функций и сервисных программ, написанных на Cикоторые можно было бы использовать из или на Си++ при условии, что Си++ полностью совместим с Cи по загрузке и синтаксически очень похож на Cи;есть десятки тысяч программистов, которые знают Cи, и которым, поэтому, нужнотолько научиться использовать новые особенности Си++, а не заново изучать его основы;поскольку Си++ и Cи будут использоваться на одних и тех же системах однимии 
теми же людьми, отличия должны быть либо очень большими, либо очень 
маленькими, чтобы свести к минимуму ошибки и недоразумения.
Позднее была проведена проверка определения Си++, чтобы удостовериться в том, что любая конструкция, допустимая и в Cи, и в Си++,действительно означает в обоих языках одно и то же. Си++ был развит из языка программирования Cи и за очень немногими исключениями 
сохраняет Cикак подмножество. Базовый язык, Cи подмножество Си++, спроектирован так, что имеется очень близкое соответствие между его типами,операциями и операторами и компьютерными объектами, с которыми непосредственно приходится иметь дело: числами, символами и адресами. За исключением операцийсвободной памяти new и delete, отдельные выражения и операторы Си++ обычно не нуждаются в скрытой поддержке во время выполнения или подпрограммах.

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

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