Что такое синтаксис языка программирования
Синтаксис и семантика языка программирования
Любой язык, в том числе и язык программирования, подчиняется ряду правил. Их принято разделять на правила, определяющие синтаксис языка, и правила, определяющие его семантику.
Синтаксис языка — совокупность правил, определяющих допустимые конструкции (слова, предложения) языка, его форму.
Семантика языка — совокупность правил, определяющих смысл синтаксически корректных конструкций языка, его содержание.
Языки программирования относятся к группе формальных языков, для которых в отличие от естественных языков однозначно определены синтаксис и семантика. Описание синтаксиса языка включает определение алфавита и правил построения различных конструкций языка из символов алфавита и более простых конструкций. Для этого обычно используют форму Бэкуса-Наура (БНФ) или синтаксические диаграммы. Описание конструкции в БНФ состоит из символов алфавита языка, названий более простых конструкций и двух специальных знаков:
· «::=»— читается как «может быть заменено на»,
· «|» — читается как «или».
При этом символы алфавита языка, которые часто называют терминальными символами или терминалами, записывают в неизменном виде. Названия конструкций языка (нетерминальные символы или нетерминалы), определяемых через некоторые другие символы, при записи заключают в угловые скобки (« »).
Пример БНФ
Правила построения конструкции , записанные в
БНФ, могут выглядеть следующим образом:
::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Для отображения того, что конструкция может включать неограниченное количество цифр, использовано правило с левосторонней рекурсией. Многократное применение этого правила позволяет построить целое число с любым количеством цифр.
Синтаксические диаграммы отображают правила построения конструкций в более наглядной форме. На такой диаграмме символы алфавита изображают блоками в овальных рамках, названия конструкций – в прямоугольных, а правила построения конструкций — в виде линий со стрелками на концах. При этом, если линия входит в блок, то в описываемую конструкцию должен входить соответствующий символ. Разветвление линии означает, что при построении конструкции возможны варианты. На рис. 2.1 представлена синтаксическая диаграмма, иллюстрирующая первые два правила описания конструкции . Из диаграммы видно, что целое число может быть записано со знаком или без и включать произвольное количество цифр.
Для описания синтаксических конструкций своего языка Н. Вирт использовал именно синтаксические диаграммы, поэтому в тех случаях, когда словесное описание синтаксиса конструкции длинно и нечетко, мы будем использовать синтаксические диаграммы.
Алфавит языка программирования Borland Pascal 7.0 включает:
1. строчные, прописные буквы латинского алфавита (a..z, A..Z) и знак подчеркивания ( _ ), который также во многих случаях считается буквой (строчные и прописные буквы не различаются);
3. специальные знаки, состоящие из одного и двух символов:
4. служебные слова (эти сочетания считаются единым целым и их нельзя использовать в программе в другом качестве): (примеры)
Из символов алфавита в соответствии с правилами синтаксиса строят различные конструкции. Простейшей из них является конструкция .
Эта конструкция используется во многих более сложных конструкциях для обозначения имен программных объектов (полей данных, процедур, функций и т. п.).
В Borland Pascal идентификатор представляет собой последовательность букв латинского алфавита (включая символ подчеркивания) и цифр, которая обязательно начинается с буквы.
Синтаксическая диаграмма идентификатора приведена на рис. 2.2. Остальные конструкции будут рассмотрены в последующих разделах. Семантику языка программирования закладывают в его компилятор. Таким образом, синтаксически корректная программа, написанная на языке программирования, после преобразования ее в последовательность машинных команд обеспечит выполнение компьютером требуемых операций.
Структура программы
Программа на Borland Pascal состоит из трех частей: заголовка, раздела описаний и раздела операторов.
- Заголовок программы не является обязательным, он состоит из служебного слова program и идентификатора — имени программы.
- Раздел описаний содержит описания всех используемых программой ресурсов (полей данных, подпрограмм и т.д.).
- Раздел операторов заключается в, так называемые, операторные скобки begin . end и заканчивается точкой. Между операторными скобками записывают управляющие операторы программы, которые разделяют специальным знаком – точкой с запятой «;». Если точка с запятой стоит перед end, то считается, что после точки с запятой стоит «пустой» оператор.
- В тексте программы возможны комментарии, которые помещают в фигурные скобки.
Пример программа, которая реализует алгоритм Евклида для определения наибольшего общего делителя двух натуральных чисел.
Write (‘Введите два натуральных числа:’);
if a>b then a:=a-b <если a>b, тогда a:=a-b>
Writeln(‘Hauбoльшuй общий делитель равен ’,a);
Программа названа «example». Раздел описаний в данном случае включает только описание переменных (см. параграф 2.3). Раздел операторов содержит операторы ввода исходных данных, вычислений и вывода результатов. Начнем рассмотрение особенностей программирования на языке Borland Pascal с проблемы описания данных.
Синтаксис (программирование)
Синтаксис — сторона языка программирования, которая описывает структуру программ как наборов символов (обычно говорят — безотносительно к содержанию). Синтаксису языка противопоставляется его семантика. Синтаксис языка описывает «чистый» язык, в то же время семантика приписывает значения (действия) различным синтаксическим конструкциям.
Каждый язык программирования имеет синтаксическое описание. Обычно синтаксис языка определяют посредством правил Бэкуса-Наура.
Чаще всего синтаксис проверяется на ранних стадиях компиляции. В интерпретируемых языках программирования проверка синтаксиса производится или в процессе интерпретации (выполнения), или в процессе предварительной компиляции в промежуточный код. Кроме того синтаксис может проверяться непосредственно при редактировании исходных текстов программ при использовании IDE.
Синтаксис записи функции
Синтаксис записи функции — жёсткое правило, которому должна удовлетворять запись кода функции; форма записи функции. Если синтаксис функции будет неверен, компилятор вернет ошибку и программа не будет собрана, пока ошибка не будет исправлена.
К синтаксическим ошибкам записи функции относятся (неправильная сигнатура):
- неверное написание названия функции при её вызове (неверный регистр символов для регистрострогих языков, неверное пространство имен);
- неверное количество аргументов;
- неверный тип переданных аргументов (например, нужно передать строковое значение, а передано числовое);
- неверный тип возвращаемого значения (в частности, неуказанный тип).
Wikimedia Foundation . 2010 .
Смотреть что такое «Синтаксис (программирование)» в других словарях:
Синтаксис (значения) — Синтаксис: В Викисловаре есть статья «синтаксис» Синтаксис (греч … Википедия
Программирование — Эта статья должна быть полностью переписана. На странице обсуждения могут быть пояснения. У этого термина существуют и другие значения, см. Программи … Википедия
Объектно-ориентированное программирование на Python — Объектно ориентированное программирование на Python программирование на Python с использованием парадигмы ООП: с самого начала Python проектировался как объектно ориентированный язык программирования[1]. Содержание 1 Введение 1.1 … Википедия
Шаблон (программирование) — Шаблоны (англ. template) средство языка C++, предназначенное для кодирования обобщённых алгоритмов, без привязки к некоторым параметрам (например типам данных, размерам буферов, значениям по умолчанию). В C++ возможно создание шаблонов функций и … Википедия
Конструктор (программирование) — У этого термина существуют и другие значения, см. Конструктор. В объектно ориентированном программировании конструктор класса (от англ. constructor, иногда сокращают ctor) специальный блок инструкций, вызываемый при создании объекта.… … Википедия
SSI (программирование) — У этого термина существуют и другие значения, см. SSI. SSI (Server Side Includes включения на стороне сервера) несложный язык для динамической «сборки» веб страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML… … Википедия
Аспектно-ориентированное программирование — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная … Википедия
Присваивание (программирование) — Содержание 1 Определение присваивания 1.1 Алгоритм работы оператора присваивания … Википедия
Присвоение (программирование) — Содержание 1 Определение присваивания 1.1 Алгоритм работы оператора присваивания … Википедия
Цикл (программирование) — У этого термина существуют и другие значения, см. цикл. В данной статье или разделе имеется список источников или внешних … Википедия
Синтаксис языков программирования
Формализуем основные конструкции языка программирования SML посредством форм Бэкуса-Наура или БНФ (история их создания изложена во вступительной лекции).
Неформально определим синтаксис (языка программирования или математической теории) как форму конструкций (программы или теории) и способов их комбинирования. Более точное определение синтаксиса будет сформулировано далее в ходе лекции.
Определим понятие синтаксиса более строго.
Под синтаксисом понимают раздел описания формального математического языка или языка программирования, исследующий вид, форму и структуру конструкций (без учета их значения или практической применимости).
Забегая вперед, заметим, что значение конструкций языка программирования описывается и исследуется семантикой (о ней речь пойдет в следующей лекции), а вопросы и ценность практической применимости — прагматикой .
Основной задачей синтаксиса является определение формы и вида допустимых языковых конструкций. Эту задачу можно решить путем перечисления описаний всех языковых конструкций. Одним из механизмов такого описания является уже упомянутая нами нотация БНФ
Мы будем рассматривать параллельно БНФ -формализации синтаксиса ламбда-исчисления и языка программирования SML . В последнем случае мы ограничимся базовым набором конструкций языка, подчеркнув такие существенные возможности, как кортежи ( tuples ) и let-выражения .
Для формирования правильного понимания роли и места синтаксиса в исследовании языков программирования рассмотрим обобщенную схему трансляции исходного текста программы (написанной, например, на языке программирования SML ) в машинный код.
В ходе трансляции программы, прежде всего, выполняется так называемая процедура лексического анализа , которая включает в себя выделение в тексте программы элементарных конструкций языка, или, иначе, лексем (в частности, имен переменных или идентификаторов , специальных или ключевых слов, значений констант , переменных и др.).
По завершении лексического анализа выполняется так называемая процедура синтаксического разбора текста программы, которая представляет собой проверку корректности синтаксиса текста, написанного на языке программирования. Эта процедура, возможно, включает выполнение проверки корректности типизации в той или иной форме.
Наконец, в случае, если все конструкции языка, присутствующие в тексте программы, являются синтаксически корректными , а также не выявлено несоответствий типов , запрещенных с точки зрения анализатора корректности типизации , производится преобразование текста программы в промежуточный код ( ассемблер , код той или иной абстрактной машины) или собственно машинный код.
Рассмотрим синтаксис языка программирования SML в сравнении с синтаксисом ламбда-исчисления .
Для большей наглядности и сопоставимости формализаций синтаксиса обоих языков (языка формальной математической теории и языка программирования) будем использовать единую нотацию, а именно, БНФ .
Прежде всего, необходимо договориться об обозначениях.
Рассмотрим традиционные обозначения БНФ и поясним смысл каждого из них.
Фактически БНФ представляют собой определения одних понятий через другие. При этом понятия заключаются в угловые скобки, и используется ряд специализированных символов и соглашений, суть которых поясняется далее.
Определяющий символ «::=» отделяет определяемую конструкцию от составляющих ее ранее определенных базовых конструкций.
Определяемая конструкция записывается слева от «::=» в угловых скобках » » .
Альтернативы (возможные варианты) конструкций перечисляются по вертикали.
Цитирование (подобно тому, как мы цитировали специальные символы, заключая их в двойные кавычки) не имеет обозначения.
Проиллюстрируем формализацию синтаксиса посредством нотации БНФ , рассмотрев в качестве примера формальной системы хорошо знакомое нам по предыдущим лекциям ламбда-исчисление .
Поясним смысл приведенных обозначений.
В данном примере определяется понятие выражения, синтаксическое представление которого может быть выражено в виде одной из следующих альтернатив:
- константы ;
- переменной ;
- двух выражений, заключенных в круглые скобки, т.е. знакомой нам операции аппликации ламбда-выражений;
- символа
, за которым следует переменная , точка и выражение , т.е. знакомой нам операции абстракции.
Оказывается, что синтаксис языка программирования SML имеет ряд очевидных аналогий с синтаксисом ламбда-исчисления . Эти аналогии являются неизбежными как в силу функциональной природы рассматриваемого языка программирования, так и на том основании, что язык SML разрабатывался как средство доказательства теорем, а, значит, его синтаксис (а, забегая вперед, заметим, что и семантика ) должен быть прозрачен математически.
Для иллюстрации перечисленных выше тезисов рассмотрим важнейшие синтаксические категории языка программирования SML .
Под выражением будем далее понимать обозначение конструкции языка, которой может быть присвоено значение ( константы , переменной , функции и т.д.).
Описанием будем в дальнейшем называть запись , связывающую выражение языка программирования с именем, обозначающим его в программе ( идентификатором ).
Под термином » зарезервированное » (или, иначе, служебное) слово будем иметь в виду конструкцию языка, однозначно интерпретируемую в качестве инструкции языка программирования (например, «if» , «then» , «let» ). Напомним, что в данной нотации цитирование производится без кавычек или других символов-ограничителей.
Комментарием назовем произвольный поясняющий текст к программе, который, согласно синтаксису языка SML , положено заключать в ограничители вида «(*» и «*)» .
Что такое синтаксис языка программирования
Сегодня говорим о том, что такое язык программирования.
Языки программирования (ЯП) похожи на языки человеческого общения, но устроены проще. Выучить язык программирования можно за несколько месяцев. Опытные программисты могут изучить новый язык за несколько недель. В мире уже более 8000 языков программирования. Нет такого консенсуса, как «лучший язык». Хотя есть языки, которые дают фундаментальные знания, С++ например. И есть отслеживание популярности языков, в частности, TIOBE Index.
Ядро из двух десятков наиболее популярных языков состоит из: Java, C, Python, C++, Visual Basic .NET, JavaScript, C#, PHP, SQL, Objective-C, Assembly language, MATLAB, Perl, Delphi/Object Pascal, R, Ruby, Visual Basic, Go, Groovy, Swift. Есть еще 2-3 десятка довольно широко используемых языков, таких как Scala, Lua, Fortran, COBOL, Lisp, Prolog, Rust, Kotlin, Eglang, Haskell и др. Со временем разработчик знает и сочетает несколько языков для разных задач и платформ.
У языков программирования есть авторы, правила, спецификации, стандарт конкретного языка и разные реализации / воплощения стандарта. Реализации языка влияют на то, как разработчики пользуются им.
Языки программирования – по сути, инструмент сторителлинга. У вас есть идея, «сюжет», и на языке программирования вы пишете структурированное «произведение», которое компьютер сможет считать, интерпретировать и выполнить. То есть «оживить» исходный код в виде программы, сайта, приложения и т. д., где доступен ряд действий. (Если образно, то напоминает придумывание сюжета, работу над архитектурой истории, написание добротного сценария без ляпов, овладение специальными инструментами для съемки, сам съемочный процесс, монтаж и демонстрацию кино, причем интерактивного.)
На языках программирования пишут любые компьютерные программы. Языки программирования манипулируют структурами данных и управляют вычислениями, которые происходят в компьютере, пока работает программа.
Язык программирования – это набор правил, которые определяют, как написанная компьютерная программа выглядит и что компьютер может сделать под ее управлением. Программа представляет собой код, написанный по правилам конкретного языка программирования. Код, из которого состоит программа, называют «исходный код».
Язык программирования – это средство общения человека и компьютера. При этом код на языке программирования пишется так, чтобы он был понятен человеку. Один из критериев хорошего кода – программист читает его и понимает, что это, для чего нужно и как будет работать.
Сегодня код, написанный на популярных языках программирования, для удобства выглядит как текст, состоящий из строк на английском языке. Для того чтобы исходный код смог прочитать и выполнить компьютер, он «переводится». Об этом Almamat Blog расскажет в другом выпуске IT-ликбеза.
В спецификациях языка прописаны его синтаксис и семантика. Каждый язык программирования имеет свой словарь/алфавит. Цепочки и последовательности символов образуют предложения, построенные по правилам языка программирования, – это грамматика. Синтаксическая структура языка служит для определения смысла написанного кода.
Семантика языка программирования – это начальное смысловое значение слов и конструкций языка. Семантика – это смысл кода, его назначение, то, что должно получиться в результате запуска написанного кода.
Синтаксис языка программирования – это порядок слов, форма записи; правила построения сообщений, комбинирования символов и слов. Синтаксис ЯП проще, чем синтаксис человеческих языков общения.
Итак, в программировании слова с каким-то начальным смыслом комбинируются по правилам, чтобы придать действиям смысл.
Способы описания синтаксиса языка программирования
Алгоритмы
Определение. Алгоритм — описание последовательности действий для решения поставленной задачи. Близкие по смыслу слова: рецепт, метод, способ, процедура.
Свойства алгоритма
- Дискретность (алгоритм состоит из отдельных действий, следующих одно за другим).
- Элементарность действий (шаги не могут подразделяться на более мелкие шаги).
- Определенность действий (каждый шаг имеет ясную и однозначную трактовку).
- Конечность (завершимость).
- Результативность (после завершения алгоритма известно, что считать результатом).
- Массовость (алгоритм применим для множества наборов исходных данных).
Для алгоритма необходимо задать исполнителя, который умел бы выполнять некоторое множество элементарных действий. Все действия в алгоритме должны быть из этого множества. В качестве исполнителя может выступать человек, компьютер, робот и т.д. Для одной задачи может быть несколько алгоритмов.
Пример. Найти max из чисел x, y, z.
Алгоритм 1. (Словесное описание)
Если x>=y и x>=z, то положить max:=x и завершить алгоритм
Если y>=x и y>=z, то положить max:=y и завершить алгоритм
Если z>=x и z>=y, то положить max:=z и завершить алгоритм
Алгоритм 2. (Описание на псевдокоде)
max:=x
Если y>max то max:=y
Если z>max тоmax:=z
Определение. Два алгоритма называются эквивалентными, если множества допустимых исходных данных для них совпадают и применение этих алгоритмов к одинаковым исходным данным дает одинаковые результаты.
Способы описания алгоритмов
3. C помощью блок-схем.
Пример. (алгоритм 2, представленный блок-схемой)
Альтернативная современная нотация — диаграмма деятельности (Activity Diagram) в языке UML (Universal Modelling Language).
4. C помощью языка программирования.
Язык программирования
Язык программирования (ЯП) характеризуется используемым алфавитом, синтаксисом и семантикой. Элементарные действия в языке программирования называют инструкциями, операторами или командами.
Синтаксис ЯП определяет правила записи основных конструкций ЯП и устанавливает, какие фрагменты текста программы следует считать неделимыми (например, :=, = =
ограничители: ; , (
зарезервированные слова: begin end var
2) Идентификаторы (используются в качестве имен объектов программы).
Определение. Идентификатор — последовательность латинских букв или цифр, начинающаяся с буквы. К буквам также относят символ _ (подчеркивания).
_a1 — идентификатор
3dnews — не идентификатор
3) Константные значения
Раздел описаний
Любой объект в программе (переменная, константа, именованный тип, подпрограмма, метка) перед использованием должен быть описан в разделе описаний. Он состоит из разделов описания переменных, констант, типов, меток, подпрограмм, чередующихся в произвольном порядке.
Раздел описания переменных
var i,j: integer;
s: string;
b: boolean;
r1,r2: real;
c: char;
Раздел описания типов
type int = integer;
IArr = array [1..100] of real;
Оператор присваивания
Оператор присваивания имеет вид:
имя переменной := выражение
Пример 1. Вычислить x 16 .
Пример 2. Вычислить x 15 =(x 5 ) 3 .
Присваивание переменной некоторого начального значения называется инициализацией этой переменной.
Если переменной можно присвоить выражение, то говорят, что они совместимы по присваиванию. Переменная и выражение совместимы по присваиванию:
- если они имеют один тип;
- если переменная и выражение имеют целый тип (например, выражение имеет тип byte, а переменная — тип integer или наоборот);
- если выражение имеет целый, а переменная — вещественный тип;
- если выражение имеет символьный, а переменная — строковый тип.
Во всех случаях, кроме первого, происходит неявное преобразование типов, в процессе которого может меняться внутреннее представление данных. Заметим также, что при присваивании типа integer типу byte может произойти выход за границы диапазона меньшего типа byte.
var i: integer;
.
i:=2.0; // неверно!
Для преобразования вещественного в целое следует использовать функции round и trunc.
Операторы ввода/вывода
Оператор вызова процедуры ввода имеет одну из следующих форм:
read(список переменных);
readln(список переменных);
readln;
Оператор вызова процедуры вывода имеет одну из следующих форм:
write(список выражений);
writeln(список выражений);
writeln;
Для перехода на новую строку в процессе вывода можно использовать следующий прием:
const newline = #10;
.
writeln(x, newline, y);
Форматы вывода
Для любых типов:
write(x:а); // а — ширина поля вывода
Если число не помещается в указанные позиции, то формат игнорируется. Вещественные числа в этом формате выводятся в экспоненциальной форме.
Для вещественного типа:
write(x:а:b); // a — ширина поля вывода, b — количество цифр в дробной части
Вещественные числа в этом формате выводятся в виде с фиксированной точкой.
Неправильный формат вывода игнорируется. Например, если x=14.457, то после
будет выведено 14.46.
Выражения и операции
Выражения
Выражения — конструкции, задающие правила вычисления. Выражения состоят из операндов и операций. Для группировки в выражениях могут использоваться круглые скобки. В качестве операндов могут выступать также вызовы функций.
Каждое выражение имеет тип, зависящий от типов входящих в него операндов. Выражение называют арифметическим, если его значением является число. Выражение называют логическим, если его значение имеет логический тип.
Логическое выражение всегда имеет тип boolean.
Тип арифметического выражения определяется типом операнда «старшего» типа: если в выражении есть хотя бы один операнд типа real, то выражение имеет тип real, если нет операндов типа real, но есть операнды типа integer, то выражение имеет тип integer. Исключение составляет операция деления: результатом деления целого на целое является вещественное.
Не все типы совместимы в выражении: к примеру, нельзя сложить целое и строку, нельзя из строки вычесть символ.
При вычислениях выражений со смешанными типами также происходит неявное преобразование типов. Например, если i имеет тип integer, а bt — тип byte, то при вычислении выражения i+bt происходит вначале преобразование значения bt к «старшему» типу integer и только после этого выполняется операция сложения.
Операции
Операции в выражении вычисляются в порядке приоритетов: вначале операции с большим приоритетом, затем — с меньшим. Операции с одинаковым приоритетом вычисляются слева направо. Операции в скобках выполняются в первую очередь.
Таблица приоритетов операций языка Pascal
- + - (унарные)
- * / div mod shl shr and
- + -(бинарные)or xor
- = = <>in
2-1+3=(2-1)+3
4/2*2=(4/2)*2
4/2/2=(4/2)/2
1*2+3*4 — операции умножения вычисляются в непредсказуемом порядке.
Логические операции
Простые: x>0 или 2*2=4
Составные: состоят из простых + логические операции (and, or, not, xor)
(x>=3) and (x 5) = not ((x>=3) or (x B) and (A C) and (A x1) and (x y1) and (y x2) or (y y2);
OnTheBoundary:=not Inside and not Outside;