Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Лексические единицы языков программированияСтр 1 из 14Следующая ⇒
ОСНОВЫ АЛГОРИТМИЧЕСКИХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ Понятие о языках программирования. Современные языки Программирования высокого уровня
Слово «программа» имеет греческое происхождение и означает – объявление, распоряжение. В современном понимании, относящемся к программированию как разделу информатики, программа определяет план действий подлежащих выполнению исполнителем, обычно вычислительной машиной (компьютером). Программа выглядит как конечная совокупность инструкций, каждая из которых приводит к выполнению некоторой элементарной операции над данными, хранящимися в памяти вычислительной машины (ВМ). Автоматизм исполнения достигается тем, что любая текущая команда, однозначно указывает на команду, которая должна быть выполнена следующей. Особенностью процесса исполнения команд является наличие команд ветвления которые на основании и в зависимости от выполнения некоторых условий передают управление на ту или другую следующую инструкцию программы. Другой особенностью программ является возможность многократного выполнения некоторого числа инструкций. Эти особенности приводят к тому что длина выполнения программы, т.е. количество выполненных инструкций, и время ее выполнения должны однозначно определятся некоторым набором входных данных. Таким образом, программа является с математической точки зрения конечным объектом, которая заставляет вычислительную машину закономерно реагировать на потенциально бесконечное многообразие входных данных. Тем самым программа, также как и теоремы и их доказательства, реализуют всеобщность математических закономерностей. Исходя из вышесказанного, языки для записи программ являются наряду c теоретическим программированием одной из важнейших разделов математики и информатики. Программы исполняемые ВМ должны формулироваться с использованием специальных знаковых систем, которые получили называние языков программирования (programming language, computer language). Язык программирования (ЯП) – это формальная знаковая система, служащая средством решения формализуемых вычислительных задач. Основное назначение ЯП – это формулирование программ, подлежащих исполнению вычислительной машиной. Программа, написанная на ЯП представляет собой своеобразную операционную (т.е. какие действия вычислительного характера производить) и информационную (над какими объектами данных производить эти действия) модели закономерности внешнего мира, причем программа фиксирует ее в точной и воспроизводимой форме. Наиболее распространенным видом языков программирования является алгоритмические языки (algorithmical language). Среди важнейших понятий алгоритмических ЯП выделяются базовые конструкции: · описания объектов программы (definition, declaration) определяют имена или идентификаторы программных информационных (или в некоторых языках и операционных) сущностей, таких как типы данных, классы, интерфейсы, шаблоны, скалярные переменные, объекты классов, подпрограммы и др. Например:
Var x: integer; // описание переменной на языке Pascal
· выражения (expression) являются источником значений для программных сущностей (объектов) и представляются в программе в виде комбинации имен объектов и операторов. Например:
// выражение является источником значения реального типа x + y * sin(x) / x – z
· операторы (statements) представляют в программе элементарные вычислительные действия (математические операции, логические операции, операции сравнения) или алгоритмические действия (операция приваривания, передача управления от одного оператора к другому, повторяющиеся исполнение одного или нескольких операторов). Например:
x := y + 10; // оператор присваивания в языке Pascal
Базовыми операторами, на основе которых могут быть сформированы законченные предложения, подлежащие исполнению в алгоритмических языках программирования являются операторы присваивания значения (assignment statement), передачи управления (transfer‑of-control statement), вызов подпрограммы (subroutine call statement) и цикл (cycle statement). Операторы других видов должны использоваться в контексте базовых операторов и не могут формировать исполняемые предложения программы. В разных ЯП реализованы различные принципы или системы понятий, следуя которым строится законченная программа – это так называемая парадигма программирования. С точки зрения структуризации программы, т.е. разделения ее на составные части, в современном программировании выделяют несколько парадигм программирования: · неструктурного программирования (chaos paradigm); · структурного программирования(structured programming); · процедурного программирования(procedure-oriented programming); · объектно-ориентированного программирования. Неструктурное программирование отличается тем, что программа, представляет собой последовательность алгоритмических конструкций, никак не разделяемых по принципу решаемых алгоритмических задач. Отличительной чертой неструктурной программы является отсутствие подпрограмм и наличие большого числа безусловных передач управления от одного фрагмента программы к другому (переходов).
Рис. 1. Типы алгоритмических структур
Структурное программирование доказывает избыточность использования безусловных переходов и то, что алгоритм любой сложности, может быть построен на основе линейной комбинации трех базовых алгоритмических структур – линейной, ветвления и циклической. Алгоритмической структурой называют способ исполнения предложений программы. В линейной алгоритмической структуре предложения программы исполняются последовательно одно за другим без изменения естественного порядка следования предложений (рис. 1, а). В структуре ветвления присутствует оператор условной передачи управления, который позволяет изменить линейный ход исполнения программы. Этот оператор передает управление одному или другому предложению программы, в зависимости от выполнения или не выполнения некоторого условия (рис. 1, б). Наконец, структура повторения или циклическая структура разрешает повторное исполнение одного или нескольких предложений программы, до тех пор, пока выполняется или не выполняется некоторое условие в программе. Структура повторения может быть реализована комбинацией операторов условной и безусловной передачи управления. Весьма важным здесь является то, что реализация принципов структурного программирования становится возможным в алгоритмическом языке только тогда, когда в нем имеется самостоятельный оператор цикла, поскольку использование оператора безусловной передачи управления нарушает эти принципы. Парадигма процедурного программирования вводит понятие подпрограммы (subroutine), как именованной последовательности операторов, совокупность действий которых направлены на решение в общем случае небольшой, но конкретной алгоритмической задачи. Именно в процедурном программировании была впервые реализована идея повторного использования кода (code reusing), основной смысл которой заключается в многократном использовании кода подпрограммы в рамках одного или нескольким программных проектов. Реализация в алгоритмических ЯП принципов процедурного программирования стала качественным прорывом в технологии программирования, основными результатами которого было увеличение производительности труда программиста, относительного уменьшения объема исходного кода и повышение его читабельности. Идеи процедурного подхода к программированию легли в основу наиболее развитой на сегодняшний день технологии программировании – объектно-ориентированному программированию и соответствующим ЯП. Основным недостатком процедурной парадигмы было то, что данные и подпрограммы их обработки были логически отделены друг с другом, что создавало определенные проблемы при построении программ высокой степени сложности. Следующим шагом в развитии ЯП стало развитие представлений об абстрактных типах данных (abstract data type, АТД). АТД в отличие от скалярных типов (целых чисел, строк, чисел с плавающей точкой) являются не только и не сколько простым контейнером для данных на физическом уровне, которому сопоставлены одна или несколько ячеек памяти, но на ряду с данными содержит определенные методы в виде подпрограмм для обработки этих данных. Такие АТД получили название классов. Класс сродни обычным скалярным типам и на его основе также создаются особые переменные называемые объектами. В настоящее время существует множество различных ЯП, которые в большинстве своем относятся к категории универсальных, многофункциональных, объектно-ориентированных ЯП. Одним из наиболее синтаксически и семантически развитым языком программирования на сегодняшний день является язык программирования С++ (читается как «си плюс плюс» ). Этот ЯП был разработан как объектно-ориентированное расширение (надмножество) языка С ученым Бьерном Страуструпом в начале 80-х годов. Отличительной особенностью С++ является его исключительная гибкость и наличие всех возможных объектно-ориентированных средств, таких как наследование классов и интерфейсов, множественное наследование классов, виртуальные и абстрактные классы, перегрузка методов класса и операторов, параметризованные типы данных. В тоже время ЯП С++ унаследовал такие важные черты, как гибкость, эффективность, мобильность свойственные языку С. Язык С++ сочетает простоту синтаксиса и наличие низкоуровневых программных средств для работы с адресами памяти (указателями) и в тоже время мощные высокоуровневые стандартные библиотеки подпрограмм, а также библиотеки классов. С++ является на сегодняшний день стандартом де факто на ЯП, на который ориентируются все остальные языки программирования. Этот язык программирования используется в качестве основного инструмента при реализации современных ОС (Windows, Linux, Unix), базового прикладного программного обеспечения. Наряду с ассемблером язык С++ применяется для создания драйверов устройств в операционных системах. Этот язык положен в основу наиболее популярных и мощных интегрированных средств (т.е. сочетающих в себе средства управления проектами, редактор кода, дизайнер пользовательского интерфейса и транслятор языка программирования) разработки, таких как Microsoft Visual C++, Borland C+ Builder, IBM Visual Age for C++ и др. В конце 2001 года корпорация Microsoft, являющаяся одним из лидеров индустрии программных сред разработки и языков программирования, выпустила среду программирования Visual Studio.NET в которой был впервые представлен новый компонентно-ориентированный ЯП получивший название С# (читается как «си шарп»), который явился ЯП следующего поколения на основе С++. Другим объектно-ориентированным языком программирования, который не уступает языку С++ по своим функциональным возможностям является язык Object Pascal (в последней своей реализации называется Delphi Language). Язык Object Pascal является объектно-ориентированным надмножеством процедурного языка программирования разработанного в 1971 году ученым Никлаусом Виртом. Этот ЯП составляет языковую основу интегрированной среды разработки Delphi компании Borland Enterprise. Распространенность этого языка обусловлена несколькими факторами: во-первых, язык Pascal использовался долгое время как язык для обучения программированию в университетах США, во-вторых, модификации этого языка (Ада) используются министерством обороны США, в-третьих, огромная популярность среды Delphi и языка Pascal в Европе и России. Среда разработки Delphi и язык программирования Object Pascal может быть использован для реализации прикладных программ любой степени сложности. Рассматривая современные языки программирования и среды разработки на их основе нельзя не упомянуть язык программирования BASIC и его современную реализацию Visual BASIC. Этот ЯП и соответствующая среда разработки разработанная и долгие годы развиваемая корпорацией Microsoft позиционируется в качестве инструмента для создания как автономных приложений начального и среднего уровня сложности, так и для автоматизации прикладных задач пакета Microsoft Office (Visual BASIC for Application). Этот язык программирования отличает простота и интуитивная ясность синтаксиса, что делает его привлекательным для начинающих разработчиков. Последняя версия этого языка, поддерживающая в полном объеме современную объектно- и компонентно-ориентированную модель, под названием Visual BASIC.NET включена в качестве одного из базовых языков среды разработки Visual Studio.NET. Последних два языка программирования, то есть Pascal и BASIC получили употребление в среде разработчиков, использующих в качестве программной платформы разновидности операционной системы Microsoft Windows. Напротив, на платформе UNIX-подобных ОС разработчики в основном использовали до последнего времени только С/С++. Однако с ростом популярности такого нового языка программирования как Java многие разработчики прикладных программ перешли на использование этого инструмента. Язык Java синтаксически подобен языку С++, однако вобрал в себя многие полезные идеи языка Object Pascal. Программы, написанные на Java являются кросс-платформенными, то есть могут без перекомпиляции исполняться на различных программных и аппаратных платформах, за счет использовании идеи компиляции промежуточного кода (так называемый байт-код) программы во время ее исполнения (just-in-time compilation). Несмотря на многообразие современных алгоритмических языков программирования все они реализуют единую алгоритмическую операционную модель в основе которой положены идеи об основных алгоритмических структурах и лексических единицах.
Лексические единицы языков программирования
Основой любого естественного или искусственного языка является алфавит – набор допустимых в языке элементарных знаков (букв, цифр и служебных знаков). Знаки могут объединяться в слова или лексемы (lexeme), рассматриваемые в тексте (программе) как неделимые части, имеющие определенный смысл. Словарный состав языка вместе с описанием способов их представления составляют лексику языка. Слова в языке объединяются в более сложные конструкции – предложения (clause). В языках программирования предложения представляются в простейшем случае операторами. Предложения строятся из слов и более простых предложений по правилам синтаксиса. Синтаксис (syntax) языка – представляет собой описание правильных предложений, тогда как описание смысла предложений, т.е. значений слов и их внутренних связей, составляют семантику (semantics) языка. Любой язык программирования имеет схожие лексические единицы, т.е. лексемы, к которым принято относить: идентификаторы, ключевые слова, литералы, операторы и разделители. Идентификатором (identifier) является последовательность латинских символов (в некоторых случаях символов кириллицы), в том числе и цифр, начинающийся с буквы или символа подчеркивания, который именует некоторый объект (сущность) в программе, уникально идентифицируя его в пределах некоторого блока программа. Идентификатор не должен содержать знака пробела и некоторых других служебных символов. Ниже приведены примеры правильных идентификаторов:
AppPath, x, y, _leosoft, matrix1, matrix2
Тогда как следующие идентификаторы являются неверными:
4sale // начинается с цифры #23 // не начинается с буквы Str$ // содержит неразрешенный знак
В некоторых языках программирования, таких как, С/С++, Java, С# при именовании объектов программы имеет значение регистр символов. Например, идентификаторы
Object, object, OBJECT, oBject
обозначают различные объекты программы, тогда как в ЯП Object Pascal и Visual Basic такие идентификаторы не различаются и могут именовать только один объект программы. При именовании объектов в программе как правило придерживаются определенного стиля и соглашения об именовании (naming convention), т.е. правил следуя которым строятся идентификаторы, в рамках одного или нескольких программных проектов. Принято, хотя это и необязательно, идентификаторы начинать с префикса, за которым следует сокращенное англоязычное выражение (не содержащее пробелов), отражающее смысл объекта. Например:
iPay, lngShift,bFlag, objActiveSheet, objWorkBook, hAppHandle
Ключевыми словами (keyword) являются лексические единицы, имеющие вид постоянных идентификаторов. Эти слова зарезервированы в языке программирования для специального использования и не могут применяться в качестве идентификаторов пользовательских объектов программы, таких как переменные, подпрограммы и т.д. С помощью отдельных ключевых слов или их комбинаций представляются основные алгоритмические конструкции (структурные операторы) и простые операторы. Каждый язык программирования имеет уникальный набор собственных ключевых слов. Как правило ключевые слова во всех языках программирования представляется короткими англоязычным словам или их сокращения, отражающим смысл представляемого оператора. К распространенным ключевым словам многих языков программирования можно отнести, например следующие:
for, next, if, then, do, while, begin, end, select, case
Операторы, как уже отмечалось ранее, позволяют выразить операционную модель языка программирования. С помощью операторов выражаются не объекты, а действия над ними. Например:
x := 1; // := оператор приваривания (Pascal) x := x shl 6; // shl оператор логического сдвига влево(Pascal) Литералами (literal) являются такие символы, которые в рамках принятой интерпретации определяют все свои особенности, в том числе и собственное значение. Литералы подразделяются на числовые, с плавающей точкой и строки. Числовые литералы могут быть в виде десятичных, шестнадцатеричных, а в некоторых языках программирования двоичных и восьмеричных чисел. Например:
10, 10, 120, 1234 // десятичные числа 0xA, $0A, &H0A // шестнадцатеричные в C, Pascal и Basic
Литералы с плавающей точкой представляют вещественные числа (real numbers). Они состоят из целой части, точки и дробной части. Например:
0.1345, 23.45, 3.14159265358979, 1.1
Числа с плавающей точкой могут быть представлены также в виде целого числа целой части и показателя имеющего также вид целого числа со знаком, перед которым находится прописная или строчная буква E. Например:
1345E-1 2345E-2, 34159265358979E-15, 1E-1
Наконец, строчные литералы или строки (string) представляют собой последовательность символов, заключенные в кавычки (в языке Pascal в апострофы). Строчный литерал интерпретируется как массив символов. Например:
"Hello world", " Bye world", 'Привет мир'
В языках программирования помимо разнообразных лексических единиц имеются вспомогательные синтаксические элементы, такие как разделители, комментарии и директивы. Разделители (separator) – это особый вид синтаксических элементов, реализующие разделение нескольких операторов («;») или других элементов языковых конструкций («,», «( )», «[ ]»).
// ";" - разделяет операторы в ОР x := x + 1; // "()" – разделяют части выражения if (x > 10) AND (z = 0) then Exit; // "," – разделяют элементы множества if x in [10, 12, 13, 16] then x := x * 3;
К специфическим лексическим элементам языков программирования можно отнести также директивы (directives), которые не являются исполняемыми, но позволяют управлять процессом трансляции программы и обеспечивают взаимодействие программы со средой разработки. Непременным атрибутом всех современных языков программирования является комментарии (comment). Комментарий не является лексической единицей, не интерпретируется языком программирования и служит в качестве средства документирования программы. Комментарии обычно объясняют сложные или нестандартные фрагменты кода, смысл и назначение объектов программы, описывают проблему и подходы к ее решению. Начало комментария в программе отмечается специальными символами, за которыми следует текст комментария. Например:
' комментарий в языке Basic // комментарий открытого типа в С/С++ и Pascal /* комментарий закрытого типа в С/С++ */ {комментарий закрытого типа в Pascal}
|
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 406. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |