1611678431-0e68e83522cb9d960ac896aa5d90854d (826635), страница 2
Текст из файла (страница 2)
Понятие языка программирования высокого уровня и транслятора,классификация языков и виды трансляторовЯзык программирования высокого уровня -- это средство, позволяющеепрограммировать на некоторую физически не существующую (виртуальную)вычислительную машину , которая не связана имеющимися техническимиограничениями и ориентируется на человека, а транслятор -- это программа дляреально существующей машины , которая позволяет машиневыступать вроли виртуальной машины . При этом обработка программыобычнопроисходит в два этапа, которые во времени следуют один за другим: этаптрансляции -- построения машинной (рабочей) программы и этап выполненияпостроенной машинной программы, при котором осуществляются обработкавходных данных программыи печать полученных результатов.Трансля́ тор — программа или техническое средство, выполняющее трансляцию программы.[1][2]Трансляция программы — преобразование программы, представленной на одном из языковпрограммирования, в программу на другом языке, эквивалентную по результатам выполненияпервой.[1]Виды трансляторов:1.КомпиляторКомпиля́ тор — программа или техническое средство, выполняющее компиляцию.[1][2][3]2.Компиляция — трансляция программы, составленной на исходном языке высокого уровня,в эквивалентную программу на низкоуровневом языке, близком машинномукоду(абсолютный код, объектный модуль, иногда на язык ассемблера).[2][3][4] Входнойинформацией для компилятора (исходный код) является описание алгоритма илипрограмма напроблемно-ориентированном языке, а на выходе компилятора —эквивалентное описание алгоритма на машинно-ориентированном языке (объектныйкод).[5]ИнтерпретаторИнтерпрета́ тор — программа (разновидность транслятора) или аппаратное средство,[1]выполняющее интерпретацию.Интерпрета́ ция — пооператорный (покомандный, построчный) анализ, обработка и тут жевыполнение исходной программы или запроса (в отличие от компиляции, при которойпрограмма транслируется без её выполнения).[2][3][4]Компилятор медленнее интерпретатораКлассификация языков:1.
Объектно-ориентированные (объекты и классы)2. Параллельные3. Логические (высказывания)4. Функциональные (нет переменных, присваиваний, есть некоторая функция и всяпрограмма может быть записана в виде одной функции)5. Императивные (есть переменная, присваивание и тд и тп)6. Синтаксис и семантика языков программирования. Стандарты и версииязыков программирвоанияСодержательно язык программирования -- это средство общения междучеловеком (программистом) и компьютером (исполнителем).
Рассматриваялюбую знаковую систему (в том числе и язык программирования), обычновыделяют синтаксис -- правила построения сообщений в этойсистеме, семантику -- правила истолкования сообщений тем, кому ониадресованыСемантика языка программирования -- это правила придания смысласинтаксически правильным программам. В конечном счете эти правилаопределяют ту последовательность действий вычислительной машины,которую она должна выполнить, работая по данной программе.
Например,семантика языка команд компьютера определяется самим компьютером:машинная программа означает в точности то, что осуществляет вычислительнаямашина при работе по данной программе. Аналогично семантика языкавысокого уровня может быть определена через описание правил выполнениясоответствующей виртуальной машины.Язык – некоторая знаковая система как средство сообщенияСинтаксис – правило построения сообщенияСемантика – правила истолкования сообщения адресатамиСемантические средства – доступные объекты (данные, операции и тд) и способы их построенияСинтаксические средства – способы обозначения данных и внешнего представления данныхобъектовОсобенности искусственных языков1.
Синтаксис и семантика строго определены2. Синтаксическая структура строго определяет семантикуСтанда́ рт оформле́ ния ко́ да(станда́ рт коди́ рования, стиль программирования) (англ. codingstandards, coding convention или programming style) — набор правил и соглашений, используемыхпри написании исходного кода на некотором языке программирования.
Наличие общего стиляпрограммирования облегчает понимание и поддержание исходного кода, написанного больше чемодним программистом, а также облегчает сотрудничество нескольких человек в развитии одногопрограммного обеспечения [1].Стандарт сильно зависит от используемого языка программирования. Например, стандартоформления кода для языка Си будет серьёзно отличаться от стандарта для языка BASIC. Вцелом, исходя из назначения стандарта, обычно он имеет целью добиться такого положения,когда программист достаточной квалификации мог бы дать заключение о функции, выполняемойконкретным участком кода, а в идеале — также определить его корректность, изучив только самэтот участок кода или, во всяком случае, минимально изучив другие части программы.
Инымисловами, смысл кода должен быть виден из самого кода, без необходимости изучать контекст.Поэтому стандарт кодирования обычно строится так, чтобы за счёт определённого визуальногооформления элементов программы повысить информативность кода для человека.Обычно, стандарт оформления кода описывает:способы выбора названий и используемый регистр символов для имён переменных и другихидентификаторов:запись типа переменной в её идентификаторе (венгерская нотация) ирегистр символов (нижний, верхний, «верблюжий», «верблюжий» с малой буквы),использование знаков подчёркивания для разделения слов;стиль отступов при оформлении логических блоков — используются ли символы табуляции,ширина отступа;способ расстановки скобок, ограничивающих логические блоки;использование пробелов при оформлении логических и арифметических выражений;стиль комментариев и использование документирующих комментариев.7.
Три подхода к заданию семантикиСема́ нтика в программировании — правила истолкования сообщения адресатамиСпособы задания семантики:1. Содержательная (операционная)Пишется абстрактная машина, в терминах которой описываются все действияЗначение конструкций языка в таких семантиках выражается в терминахпереходов той или иной абстрактной машины из одного состояния в другое.Пример:GO TO MIF b THEN GO TO M(Это команды нашей машины)IF E THEN S1 ELSE S2t:=E;IF t THEN GO TO M1;GO TO M2;M1:S1;GO TO M2;M2:S2;M3: заключительное состояние2.Аксиоматическая семантикаПозволяет описывать свойства программ на некотором языкеЗначение конструкций языка в таких семантиках выражается втерминах множества формул, описывающих состояния объектов программы.
В качествепримеров можно привести, в частности, аксиоматический метод ХоараТройка Хоара:{p}S{q}p-предусловиеq-постусловиеS-оператор{p}S[q]здесь мы обязательно завершимсяЕсли S-пустой операторДля любого p {p}S{q}S-оператор присваивания x:=E{p}x:=E{q}, где p – получается из q заменой вхождения x на EПример:{y+1=10}x:=y+1{x=10}{x+1=10}x:=x+1{x=10}3. Денотационная семантикаСмысл конструкций языка представляется в терминах абстракции функций,оперирующих состояниями программы8.
Метод промежуточных утверждений для блок-схемного представления программ, теорема окорректности2.3.4 Метод промежуточных утвержденийПусть -- некоторая последовательность операторов, аи-- некоторыеутверждения о значениях переменных, используемых в P соответственно вначальном и конечном состояниях выполнения P .аназывается предусловием,-- постусловием дляГоворят, что является частично правильной относительно ее спецификации,заданной в виде утвержденийи(или, что то же самое, обладаетсвойством частичной правильности {}P{}), если для любых начальныхзначений переменных, относительно которых справедливо , выполнениедействия (если оно определено) дает такие конечные значения переменных,для которых истинно утверждение. Примеры свойств:,,для любыхи.Заметим, что частичная правильность ничего не говорит о завершаемостиТак, например, в последнем свойстве оператор не применим, еслисумма.превышает MaxInt.Свойство правильности программы относительно внешней ее спецификации,заданной в виде утвержденийи, означает справедливость свойствачастичной правильности {}, а такжесвойства завершаемости программы -- нормального завершения выполненияпрограммы на любом начальном состоянии, удовлетворяющемутверждению.Идея метода промежуточных утверждений для доказательства частичнойправильности Паскаль-программ состоит в построении исчисления свойствчастичной правильности программ и их частей, аксиомами в которомвыступают свойства элементарных операторов (операторов присваивания ипустых операторов), а правила вывода связаны с другими конструкциями языкаи позволяют выводить свойства этих конструкций из свойств составляющих егокомпонент или операторов присваивания (как это имеет место для операторовввода-вывода).При этом ход построения доказательства заданного свойства частичнойправильности всей Zonnon-программы (или ее части) может состоять впоследовательном применении правил вывода свойств, сводящих исходноесвойство к некоторым свойствам образующих ее частей -- в конечном счете кгруппе свойств частичной правильности составляющих ее операторовприсваивания, либо в его выводе из свойств операторов присваивания.
Цель -построить вывод заданного свойства частичной правильности. В этомдоказательстве (выводе) могут использоваться также все традиционныеаксиомы и правила вывода соответствующего логического исчисления и тойобласти (например, арифметики), к которой относится задача, решаемаяпрограммой.Семантика пустого оператораоператора: {}{описывается очевидной аксиомой пустого} для любого утвержденияВ соответствии с семантикой оператора присваиванияимеемследующую аксиому оператора присваивания: {любая пара утверждений таких, чтоиз}, гдеи---- утверждение, получающеесяподстановкой выражения вместо вхождения переменнойНапример,справедливы свойства:.Следующие два правила завершают построение исчисления свойств Zonnonпрограмм, использующих лишь уже рассмотренные конструкции языка; вдальнейшем они будут дополнены правилами и для других конструкций.Правило вывода следствий формулируется следующим образом.
Пусть дляфрагмента программы имеет место{}, и пусть утверждениеТогда имеет место {оператора присваиваниясильнее, а утверждениеслабее}. Например, из рассмотренных выше свойствможно вывести свойства:.,.Правило вывода свойств последовательности операторов имеет следующийвид. Пусть и-- последовательности операторов, обладающие соответственносвойствами {}и{последовательности}. Тогда дляимеет место свойство {}.В качестве примера применения метода промежуточных утверждений покажем,чтолюбых целых чисел A и BдляПо аксиоме оператора присваивания имеем следующие свойства операторов,составляющих анализируемую последовательность:.Применяя правило вывода следствий, из последнего свойства получаем.Отсюда и из первых двух свойств по правилу вывода свойствпоследовательности операторов получаем: сначала -,а затем -.Аналогичными правилами можно доказывать правильность программ.
Дляэтого в ходе доказательства следует проверять, что представленные программойпоследовательности операций на соответствующих состояниях памяти могутбыть выполнены. Такая проверка для всех рассмотренных языковыхконструкций сводится к анализу значений выражений на состояниях памяти,заданных с помощью утверждений, и во многих конкретных случаях легкореализуется.В дальнейшем в тексты программ мы будем включать утверждения, размещаяих в скобках комментариев. Такие формализованные комментарииназываются аннотациями; они определяют те свойства состояний, которыесправедливы в соответствующие моменты выполнения программы.Аннотированная программа может выступать в качестве доказательства своейправильности. Например, программувозведения в десятую степень можнодополнить следующими аннотациями:module X10D;var A,B : integer;begin (*read(A);*)(* {}*)B := A A; (* {}*)B := B B; (*{}*)B := B A; (* {}*)B := B B; (*{write(B) (* {end X10D.}*)}*)Нетрудно убедиться, что программа удовлетворяет спецификации "Быстроевозведение в десятую степень", просто показав для каждой тройки (аннотация1,оператор, аннотация2) справедливость свойства {утверждение1} оператор{утверждение2} и соответствующего свойства завершаемости.