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

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

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

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

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

Языки программирования относятся к группе формальных языков, для которых в отличие от естественных языков однозначно определены синтаксис и семантика. Описание синтаксиса языка включает определение алфавита и правил построения различных конструкций языка из символов алфавита и более простых конструкций. Для этого обычно используют форму Бэкуса-Наура (БНФ) или синтаксические диаграммы. Описание конструкции в БНФ состоит из символов алфавита языка, названий более простых конструкций и двух специальных знаков:

· «::=»— читается как «может быть заменено на»,

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

Пример БНФ

БНФ, могут выглядеть следующим образом:

::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Для отображения того, что конструкция может включать неограниченное количество цифр, использовано правило с левосторонней рекурсией. Многократное применение этого правила позволяет построить целое число с любым количеством цифр.

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

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

Алфавит языка программирования Borland Pascal 7.0 включает:

1. строчные, прописные буквы латинского алфавита (a..z, A..Z) и знак подчеркивания ( _ ), который также во многих случаях считается буквой (строчные и прописные буквы не различаются);

3. специальные знаки, состоящие из одного и двух символов:

4. служебные слова (эти сочетания считаются единым целым и их нельзя использовать в программе в другом качестве): (примеры)

Эта конструкция используется во многих более сложных конструкциях для обозначения имен программных объектов (полей данных, процедур, функций и т. п.).

В Borland Pascal идентификатор представляет собой последовательность букв латинского алфавита (включая символ подчеркивания) и цифр, которая обязательно начинается с буквы.

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

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

Структура программы

Программа на Borland Pascal состоит из трех частей: заголовка, раздела описаний и раздела операторов.

Пример программа, которая реализует алгоритм Евклида для определения наибольшего общего делителя двух натуральных чисел.

Write (‘Введите два натуральных числа:’);

if a>b then a:=a-b <если a>b, тогда a:=a-b>

Writeln(‘Hauбoльшuй общий делитель равен ’,a);

Программа названа «example». Раздел описаний в данном случае включает только описание переменных (см. параграф 2.3). Раздел операторов содержит операторы ввода исходных данных, вычислений и вывода результатов. Начнем рассмотрение особенностей программирования на языке Borland Pascal с проблемы описания данных.

Источник

Семантика

Синтаксис.

Способы описания алгоритмов

Виды алгоритмов

Основные виды алгоритмов:

1)Прикладные алгоритмы— предназначены для решения определённых прикладных задач.

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

2)Рекурсивные алгоритмы— алгоритмы, вызывающие сами себя до тех пор, пока не будет достигнуто некоторое условие возвращения.

3)Начиная с конца XX — начала XXI века активно разрабатываются параллельные алгоритмы— предназначены для вычислительных машин, способных выполнять несколько операций одновременно.

Алгоритм может быть записан словами и изображён схематически. Обычно сначала (на уровне идеи) алгоритм описывается словами, но по мере приближения к реализации он обретает всё более формальные очертания и формулировку на языке, понятном исполнителю (например, машинный код). Например, для описания алгоритма применяются блок-схемы. Другим вариантом описания, не зависимым от языка программирования, является псевдокод.

Язык программирования— это совокупность набора символов (алфавит) системы, правил образования (синтаксис) и истолкования конструкций из символов (семантика) для задания алгоритмов с использованием символов естественного языка.

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

Синтаксис— набор правил построения слов, конструкций, и структур текста в языке или системе.

Ошибки, возникающие при написании программы и касающиеся только синтаксиса, выявляются при синтаксическом анализе, осуществляемом транслятором.

Семантика— смысл каждой синтаксической конструкции в языке или системе.

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

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

Хотя семантические ошибки могут даже не сообщаться подпрограммами контроля ошибок среды программирования они будут причиной неправильной работы программы.

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

Машинный язык— это такой язык, который компьютер воспринимает непосредственно, то есть это язык машинных команд данной модели компьютера. А мы уже знаем, что ЭВМ «понимают» только язык двоичных знаков: нулей и единиц.

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

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

В 1955 г. появился первый язык высокого уровня. Программы, написанные на таком языке, представляли собой набор уже не отдельных машинных команд, а более крупных элементов, называемых операторами данного языка. На языке высокого уровня исходная программа состояла из последовательности операторов.

Именно такие языки и ориентированы на описание алгоритмов. Поэтому их еще называют алгоритмическими языками.

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

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

Существуют два способа трансляции:

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Источник

Малый математический факультет

Кубанского государственного университета

Языки программирования

Основные понятия. Алфавит. Синтаксис. Семантика

Алфавит – фиксированный для данного языка набор символов (букв, цифр, специальных знаков и т.д.), которые могут быть использованы при написании программы.

Краткая история и классификация языков программирования

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

Для того, чтобы облегчить общение человека с ЭВМ были созданы языки программирования типа Ассемблер. Переменные величины стали изображаться символическими именами. Числовые коды операций заменились на мнемонические обозначения, которые легче запомнить. Язык программирования приблизился к человеческому языку, и отдалился от языка машинных команд.
Один из первых языков программирования – Фортран (Formula Translation) был создан в середине 50-х годов. Благодаря своей простоте и тому, что на этом языке накоплены большие библиотеки программ Фортран и в наши дни остается одним из самых распространенных. Он используется для инженерных и научных расчетов, для решения задач физики и других наук с развитым математическим аппаратом.

В 1968 г. был объявлен конкурс на лучший язык программирования для обучения студентов. Победителем стал язык Алгол-68, но широкого распространения не получил. Для этого конкурса Никлаус Вирт создал язык Паскаль, достаточно простой, удобный, с наличием мощных средств структурирования данных. Хотя Паскаль был разработан как язык для обучения программированию, он впоследствии получил широкое развитие и в настоящее время считается одним из самых используемых языков. Для обучения младших школьников Самуэлем Пайпертом был разработан язык Лого. Он отличается простотой и богатыми возможностями.

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

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

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

В группу языков низкого уровня входят машинные языки и языки символического кодирования: (Автокод, Ассемблер). Операторы этого языка – это те же машинные команды, но записанные мнемоническими кодами, а в качестве операндов используются не конкретные адреса, а символические имена. Все языки низкого уровня ориентированы на определенный тип компьютера, т. е. являются машинно-зависимыми. Машинно-ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.).

Следующую, существенно более многочисленную группу составляют языки программирования высокого уровня. Это Фортран, Алгол, Кобол, Паскаль, Бейсик, Си, Пролог и т.д. Эти языки машинно-независимы, т.к. они ориентированы не на систему команд той или иной ЭВМ, а на систему операндов, характерных для записи определенного класса алгоритмов. Однако программы, написанные на языках высокого уровня, занимают больше памяти и медленнее выполняются, чем программы на машинных языках.

Процедурное программирование возникло на заре вычислительной техники и получило широкое распространение. В процедурных языках программа явно описывает действия, которые необходимо выполнить, а результат задается только способом получения его при помощи некоторой процедуры, которая представляет собой определенную последовательность действий.
Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных известны Фортран, Бейсик, Фокал.

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

Языки описания сценариев, такие как Perl, Python, Rexx, Tcl и языки оболочек UNIX, предполагают стиль программирования, весьма отличный от характерного для языков системного уровня. Они предназначаются не для написания приложения с нуля, а для комбинирования компонентов, набор которых создается заранее при помощи других языков. Развитие и рост популярности Internet также способствовали распространению языков описания сценариев. Так, для написания сценариев широко употребляется язык Perl, а среди разработчиков Web-страниц популярен JavaScript.

Основные элементы алгоритмического языка

Основными понятиями в алгоритмических языках являются следующие.

Операции. Существуют следующие типы операций:
— арифметические операции: сложение, обозначается символом “+”; вычитание, обозначается символом “-”; умножение, обозначается символом “*”; деление, обозначается символом “/” и дp. ;
— логические операции: операции “логическое и”, “логическое или”, “логическое не” и др.;
— операции отношения: меньше, обозначается символом “”; меньше или равно, обозначается символами “=”; равно, обозначается символом “=”; не равно, обозначается символами “”.
— операция конкатенации символьных значений дpуг с другом, изображается знаком «+».

Ключевые слова – это слова языка, имеющие строго определенное назначение, которые не могут использоваться в качестве идентификаторов.

Примеры констант:
числовые: 7.5, 12;
логические: true(истина), false(ложь);
символьные: «А», «+»;
строковые: «abcde», «информатика».

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

Выражения – элементы языка, которые предназначаются для выполнения необходимых вычислений, состоят из констант, переменных, указателей функций, объединенных знаками операций. Выражения записываются в виде линейных последовательностей символов (без подстрочных и надстрочных символов, «многоэтажных» дробей и т. д.), что позволяет вводить их в компьютер, последовательно нажимая на соответствующие клавиши клавиатуры.

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

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

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

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

Подпрограммы и функции позволяют создавать большие структурированные программы, которые можно делить на части. Это дает преимущества в следующих ситуациях:
1. Если программа большая, разделение ее на части облегчает создание, тестирование и ее сборку.
2. Если программа большая и повторная компиляция всего исходного текста занимает много времени, разделение ее на части экономит время компиляции.
3. Если процедуру надо использовать в разных случаях разным образом, можно записать ее в отдельный файл и скомпилировать отдельно.

Инструментальные системы программирования

Для популярных языков программирования на ЭВМ существует множество систем программирования. Программисты предпочитают те системы, которые легки в использовании, позволяют получить эффективные программы, имеют богатые библиотеки функций (подпрограмм) и мощные возможности для отладки разрабатываемых программ. В качестве примеров таких систем программирования можно назвать Delphi, Visual C++, Visual Basic.

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

Источник

Синтаксис и семантика языка программирования.

11. Алгоритмы и исполнители. Понятие об алгоритме. Свойства алгоритма. Способы записи алгоритмов. Виды алгоритмов. Исполнители алгоритмов.

12. Основные алгоритмические конструкции языка и их реализация. Линейная конструкция.

13. Основные алгоритмические конструкции языка и их реализация. Ветвление в алгоритме.

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

15. Обработка текстовой информации: строковые данные. Понятие о строковых данных. Операции над строковыми данными. Строковые процедуры и функции.

16. Структуры данных: массивы. Понятие о массиве. Одномерные и многомерные массивы. Сортировка массивов.

17. Информация и алфавит.

18. Обработка числовой информации.

19. Кодирование графической информации. Кодирование растровых изображений. Кодирование векторных изображений.

20. Типы данных. Кодирование в компьютере целых чисел без знака.

21. Типы данных. Кодирование в компьютере целых чисел со знаком.

22. Типы данных. Кодирование вещественных чисел.

23. Представление элементарных данных в ОЗУ.

24. Классификация и примеры структур данных.

· Вопросы по дисциплине «Дискретная математика»

1. Основы комбинаторики. Основные комбинаторные конфигурации. Перестановки, сочетания и размещения: основные определения, биномиальные коэффициенты, треугольник Паскаля, биномиальная теорема, бином Ньютона.

2. Основы комбинаторики. Основные комбинаторные конфигурации. Решение перечислительных задач.

3. Теория графов. Основные виды графов: Эйлеровы и гамильтоновы графы, полный, двудольный, связный, деревья.

4. Теория графов. Задача о кратчайшем пути в орграфе.
Алгоритм Дейкстры. Алгоритм Флойда.

· Вопросы по дисциплине «Численные методы»

1. Теория погрешностей.Точные и приближенные числа. Классификация погрешностей. Источники и классификация погрешностей. Числовые характеристики погрешностей.

2. Теория погрешностей.Приближенные числа. Действия над приближенными числами. Основные проблемы приближенных вычислений.

3. Численные методы алгебры. Основные трудности решения систем линейных уравнений. Классификация методов решения. Точные методы, итерационные методы.

4. Численные методы алгебры. Итерационные методы решения линейных уравнений. Метод Гаусса решения систем линейных уравнений.

· Вопросы по дисциплине «Математическая логика»

1. Алгебра высказываний. Логические функции и их преобразования. Высказывания и высказывательные формы.Элементарные и составные предложения. Конъюнкция и дизъюнкция. Отрицание. Импликация. Эквиваленция.

2. Алгебра высказываний. Логическая равносильность. Равносильность формул логики высказываний. Законы логики. Равносильные преобразования. Упрощение формул.

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

4. Алгебра высказываний. Логические основы компьютера. Применение алгебры высказываний к описанию базовых элементов ЭВМ. Переключатели. Триггеры. Сумматоры.

· Вопросы по дисциплине «Теория алгоритмов»

1. Понятие алгоритма. Формализация понятия алгоритма. Основные требования к алгоритмам.

2. Машина Тьюринга. Состав машины Тьюринга. Арифметические команды машины Тьюринга. Функции, вычислимые по Тьюрингу.

3. Вычислимые (рекурсивные) функции. Понятия вычислимой функции и разрешимого множества. Примитивно-рекурсивные функции. Общерекурсивные и частично рекурсивные функции. Их вычислимость.

4. Нормальные алгоритмы Маркова. Построение нормальных алгоритмов Маркова. Принцип нормализации Маркова.

· Вопросы по дисциплине «Компьютерная графика»

Графические файлы.

Графические файлы. Форматы графических файлов. Сравнительный анализ форматов графических файлов.

Графические модели.

Основные классы графических моделей. Векторная графическая модель (основные характеристики), растровая графическая модель (основные характеристики), сетчатая графическая модель (основные характеристики).

Источник

Видео

Основы программирования. Синтаксис и семантика

Основы программирования. Синтаксис и семантика

Языки программирования, синтаксис, семантика, прагматика

Языки программирования, синтаксис, семантика, прагматика

Синтаксис как раздел грамматики. Средства синтаксической связи и построения синтаксических единиц

Синтаксис как раздел грамматики. Средства синтаксической связи и построения синтаксических единиц

Дедукция 7. Синтаксис и семантика

Дедукция 7. Синтаксис и семантика

Семантический аспект изучения синтаксиса. Часть 1. Семантика предложения как новый аспект синтаксиса

Семантический аспект изучения синтаксиса. Часть 1. Семантика предложения как новый аспект синтаксиса

Сэмюэл И. Хаякава - Язык В Действии / Аудиокнига, Языкознание, Общая Семантика, Мышление, Наука

Сэмюэл И. Хаякава - Язык В Действии / Аудиокнига, Языкознание, Общая Семантика, Мышление, Наука

Яворская Т.Л. - Математическая логика - 6. Логика I порядка. Синтаксис и семантика

Яворская Т.Л. - Математическая логика - 6. Логика I порядка. Синтаксис и семантика

Синтаксис С#

Синтаксис С#

С. Кодиш, Б. Кодиш - Верните Себе Здравомыслие / Аудиокнига, Общая Семантика, Мышление, Саморазвитие

С. Кодиш, Б. Кодиш - Верните Себе Здравомыслие / Аудиокнига, Общая Семантика, Мышление, Саморазвитие

Лекция 1: Лингвистическая семантика и теория коммуникативной грамматики русского языка

Лекция 1: Лингвистическая семантика и теория коммуникативной грамматики русского языка
Поделиться или сохранить к себе:
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных, принимаю Политику конфиденциальности и условия Пользовательского соглашения.