Лекция 2. Введение в языки программирования
Язык программирования это способ записи программ решения различных задач на ЭВМ в понятной для компьютера форме . Такая запись называется исходным текстом программы , или программой . Процессор компьютера непосредственно понимает язык машинных команд ( ЯМК ). Программы на ЯМК писались лишь для самых первых ламповых машин ЭВМ первого поколения . Программирование на ЯМК очень трудоемкий процесс . Программист должен знать числовые коды всех машинных команд , должен сам распределять память под команды программы и данные . В 1950- х гг . появляются первые средства автоматизации программирования языки Автокоды . Позднее для языков этого уровня стало применяться название « Ассемблеры ». Появление языков типа ассемблер облегчило участь программистов . Переменные величины стали изображаться символическими именами . Числовые коды операций заменились на мнемонические ( словесные ) обозначения , которые легче запомнить . Язык программирования стал понятнее для человека , но при этом удалился от языка машинных команд . Чтобы компьютер мог исполнять программы на ассемблере , потребовался специальный переводчиктранслятор . Транслятор это системная программа переводящая , текст программы на ассемблере в текст эквивалентной программы на ЯМК . Языки типа ассемблер являются машинно — ориентированными , т . е . они настроены на структуру машинных команд конкретного компьютера . Разные компьютеры с разными типами процессоров имеют разный ассемблер .
Языки программирования высокого уровня
Языки программирования высокого уровня ( ЯПВУ ) являются машинно — независимыми языками . Одна и та же программа на таком языке может быть выполнена на ЭВМ разных типов , оснащенных соответствующим транслятором . Форма записи программ на ЯПВУ по сравнению с ассемблером еще ближе к традиционной математической форме , к естественному языку . ЯПВУ легко изучаются , хорошо поддерживают структурную методику программирования . Структурное программирование является технологией простого и прозрачного создания алгоритмов . Это единственный способ строить алгоритмы быстро и в последующем легко вносить в них изменения . Структурное программирование позволяет проектировать алгоритмы только из трех элементарных алгоритмов . Алгоритм , состоящий только из этих трех элементарных алгоритмов , называется структурным . Основная теорема структурного программирования утверждает , что любой алгоритм можно преобразовать к структурному виду . Тремя элементарными структурными алгоритмами являются следующие . 1. Линейный . 2. Разветвляющийся . 3. Циклический . Первыми популярными языками высокого уровня , появившимися в 1950- х гг ., были Фортран , Кобол ( в США ) и Алгол ( в Европе ). Языки Фортран и Алгол были ориентированы на науч но — технические расчеты математического характера . Кобол язык для программирования экономических задач . В Коболе по сравнению с двумя другими названными языками слабее развиты математические средства , но зато хорошо развиты средства обработки текстов , организация вывода данных в форме требуемого документа . Для первых ЯПВУ предметная ориентация языков была характерной чертой . Большое количество языков программирования появилось в 1960 1970 х — гг . А за всю историю ЭВМ их было создано более тысячи . Но распространились , выдержали испытание временем не многие . В 1965 г . в Дартмутском университете был разработан язык Бейсик . По замыслу авторов это простой язык , легко изучаемый , предназначенный для программирования несложных расчетных задач . Наибольшее распространение Бейсик получил на микро — ЭВМ и персональных компьютерах . Однако Бейсик неструктурный язык , и потому он плохо подходит для обучения качественному программированию . Справедливости ради следует заметить , что последние версии Бейсика для ПК ( например , QBasic) стали более структурными и по своим изобразительным возможностям приближаются к таким языкам , как Паскаль . В эпоху ЭВМ третьего поколения получил большое распространение язык PL/1 (Program Language One), разработанный фирмой IBM. Это был первый язык , претендовавший на универсальность , т . е . на возможность решать любые задачи : вычислительные , обработки текстов , накопления и поиска информации . Однако PL/1 оказался слишком сложным языком . Для машин типа IBM 360/370 транслятор с него не мог считаться оптимальным , содержал ряд невыявленных ошибок . На ЭВМ класса мини и микро он вообще не получил распространения . Однако тенденция к универсализации языков оказалась перспективной . Старые языки были модернизированы в универсальные варианты Алгол -68, Фортран -77. Значительным событием в истории языков программирования стало создание в 1971 г . языка Паскаль . Его автор швейцарский профессор Никлаус Вирт разрабатывал Паскаль
Лекция 2. Введение в языки программирования как учебный язык структурного программирования . Наибольший успех в распространении этого языка обеспечили персональные компьютеры . Фирма Borland International, Inc ( США ) разработала систему программирования Турбо Паскаль для ПК . Турбо Паскаль это не только язык и транслятор с него , но еще и операционная оболочка , обеспечивающая пользователю удобство работы . Турбо Паскаль вышел за рамки учебного предназначения и стал языком профессионального программирования с универсальными возможностями . Транслятор с Турбо Паскаля по оптимальности создаваемых им программ близок наиболее удачному в этом отношении транслятору транслятору с Фортрана . В силу названных достоинств Паскаль стал основой многих современных языков программирования , например , таких как Ада , Модула -2 и др . Язык программирования Си ( английское название С ) создавался как инструментальный язык для разработки операционных систем , трансляторов , баз данных и других системных и прикладных программ . Так же как и Паскаль , Си это язык структурного программирования , но , в отличие от Паскаля , в нем заложены возможности непосредственного обращения к некоторым машинным командам , к определенным участкам памяти компьютера . Дальнейшее развитие Си привело к созданию языка объектно — ориентированного программирования Си ++. Модула -2 это еще один язык , предложенный Н Виртом . , основанный на языке Паскаль и содержащий средства для создания больших программ . ЭВМ будущего , пятого поколения называют машинами « искусственного интеллекта ». Но прототипы языков для этих машин были созданы существенно раньше их физического появления . Это языки ЛИСП и Пролог . ЛИСП появился в 1965 г . Язык ЛИСП основан на понятии рекурсивно определенных функций . А поскольку доказано , что любой алгоритм может быть описан с помощью некоторого набора рекурсивных функций , то ЛИСП , по сути , является универсальным языком . С его помощью на ЭВМ можно моделировать достаточно сложные процессы , в частности интеллектуальную деятельность людей . Язык Пролог разработан во Франции в 1972 г . также для решения проблемы « искусственного интеллекта ». Пролог позволяет в формальном виде описывать различные утверждения , логику рассуждений и заставляет ЭВМ давать ответы на заданные вопросы . Ме тоды т рансляции Реализовать тот или иной язык программирования на ЭВМ это значит создать транслятор с этого языка для данной ЭВМ . Существуют два принципиально различных метода трансляции . Они называются соответственно компиляция и интерпретация . При компиляции в память ЭВМ загружается программа — компилятор . Она воспринимает текст программы на ЯПВУ как исходную информацию . После завершения компиляции получается программа на языке машинных команд . Затем в памяти остается только программа на ЯМК , которая выполняется , и получаются требуемые результаты . Интерпретатор в течение всего времени работы программы находится во внутренней памяти . В ОЗУ помещается и программа на ЯПВУ . Интерпретатор в последовательности выполнения алгоритма « читает » очередной оператор программы , переводит его в команды и тут же выполняет эти команды . Затем переходит к переводу и выполнению следующего оператора . При этом результаты предыдущих переводов в памяти не сохраняются . При повторном выполнении одной и той же команды она снова будет транслироваться . При компиляции исполнение программы разбивается на два этапа : трансляцию и выполнение .
П . П . Кудрявцев . Курс лекций по дисциплине : » Информатика и программирование » При интерпретации , поскольку трансляция и выполнение совмещены , программа на ЭВМ проходит в один этап . Программа имеет маленький объем , равный объему исходного текста программы . Такая программа запускается на любом компьютере , на котором находится интерпретатор , или виртуальная машина . Однако откомпилированная программа выполняется быстрее , чем интерпретируемая , но выполняемый файл имеет большой объем . Кроме того , выполняемый файл запускается только на компьютере того типа , где программа была транслирована . Поэтому использование компиляторов удобнее для больших программ , требующих быстрого счета . Программы на Паскале , Си , Фортране всегда компилируются . Бейсик чаще всего реализован через интерпретатор .
Компоновщик
Большинство современных трансляторов работают в режиме компиляции . При трансляции модулей исходных текстов , оформленных специальным образом и называемых подпрограммами , получается набор оттранслированных подпрограмм . Подпрограмма , в которую входит корневой модуль , называется головной программой . Выполняемый файл , или приложение создается из этих подпрограмм с помощью еще одной специальной программы сборщика , или компоновщика , или линковщика , или редактора связей . Сборщик связывает на уровне машинных кодов подпрограммы в цельную программу . Таким образом , получается дерево подпрограмм , начиная с головной программы . Эти подпрограммы при выполнении вызывают друг друга . Головная программа вызывает свои подпрограммы , те , в свою очередь , подпрограммы следующего уровня и т . д ., пока вся программа не выполнится . С трук тура и способы описания языков программирования высокого уровня Во всяком языке программирования определены способы организации данных и способы организации действий над данными . Кроме того , существует понятие « элементы языка », включающее в себя множество символов ( алфавит ), лексемы и другие изобразительные средства языка программирования . Несмотря на разнообразие указанных языков , их изучение происходит приблизительно по одной схеме . Это связано с общностью структуры различных языков программирования высокого уровня , которая схематически отражена на рисунке 1.
Лекция 2. Введение в языки программирования Рисунок 1 Структура языка программирования высокого уровня Всякий язык программирования имеет три основные составляющие : алфавит , синтаксис и семантику . Синтаксис — набор правил построения фраз алгоритмического языка , позволяющий определить , осмысленные предложения в этом языке . Смысловое содержание языковой конструкции называется семантикой . Для описания синтаксиса языка программирования тоже нужен какой — то язык . В этом случае речь идет о метаязыке (« надъязыке »), предназначенном для описания других языков . Наиболее распространенными метаязыками в литературе по программированию являются металингвистические формулы Бекуса — Наура ( язык БНФ ) и синтаксические диаграммы . В дальнейшем мы чаще всего будем использовать язык синтаксических диаграмм . Они более наглядны , легче воспринимаются . В некоторых случаях для удобства мы будем обращаться к отдельным элементам языка БНФ . В БНФ всякое синтаксическое понятие описывается в виде формулы , состоящей из правой и левой части , соединенных знаком ::=, смысл которого эквивалентен словам « по определению есть ». Слева от знака ::= записывается имя определяемого понятия ( метапеременная ), которое заключается в угловые скобки < >, а в правой части записывается формула или диаграмма , определяющая все множество значений , которые может принимать метапеременная . Синтаксис языка описывается путем последовательного усложнения понятий : сначала определяются простейшие ( базовые ), затем все более сложные , включающие в себя предыдущие понятия в качестве составляющих . В такой последовательности , очевидно , конечным определяемым понятием должно быть понятие программы . В записях метаформул приняты определенные соглашения . Например , формула БНФ , определяющая понятие « двоичная цифра », выглядит следующим образом : < двоичная цифра >::=0|1 Значок | эквивалентен слову « или ». Это определение можно представить на языке