Что включает в себя синтаксис языка программирования кратко
Обновлено: 19.05.2024
Аннотация: В лекции рассматриваются вопросы, относящиеся к понятийному аппарату, истории развития и выразительным возможностям синтаксического представления формальных теорий и языков программирования.
Формализуем основные конструкции языка программирования SML посредством форм Бэкуса-Наура или БНФ (история их создания изложена во вступительной лекции).
Неформально определим синтаксис (языка программирования или математической теории) как форму конструкций (программы или теории) и способов их комбинирования. Более точное определение синтаксиса будет сформулировано далее в ходе лекции.
Определим понятие синтаксиса более строго.
Под синтаксисом понимают раздел описания формального математического языка или языка программирования, исследующий вид, форму и структуру конструкций (без учета их значения или практической применимости).
Забегая вперед, заметим, что значение конструкций языка программирования описывается и исследуется семантикой (о ней речь пойдет в следующей лекции), а вопросы и ценность практической применимости - прагматикой .
Основной задачей синтаксиса является определение формы и вида допустимых языковых конструкций. Эту задачу можно решить путем перечисления описаний всех языковых конструкций. Одним из механизмов такого описания является уже упомянутая нами нотация БНФ
Мы будем рассматривать параллельно БНФ -формализации синтаксиса ламбда-исчисления и языка программирования SML . В последнем случае мы ограничимся базовым набором конструкций языка, подчеркнув такие существенные возможности, как кортежи ( tuples ) и let-выражения .
Для формирования правильного понимания роли и места синтаксиса в исследовании языков программирования рассмотрим обобщенную схему трансляции исходного текста программы (написанной, например, на языке программирования SML ) в машинный код.
В ходе трансляции программы, прежде всего, выполняется так называемая процедура лексического анализа , которая включает в себя выделение в тексте программы элементарных конструкций языка, или, иначе, лексем (в частности, имен переменных или идентификаторов , специальных или ключевых слов, значений констант , переменных и др.).
По завершении лексического анализа выполняется так называемая процедура синтаксического разбора текста программы, которая представляет собой проверку корректности синтаксиса текста, написанного на языке программирования. Эта процедура, возможно, включает выполнение проверки корректности типизации в той или иной форме.
Наконец, в случае, если все конструкции языка, присутствующие в тексте программы, являются синтаксически корректными , а также не выявлено несоответствий типов , запрещенных с точки зрения анализатора корректности типизации , производится преобразование текста программы в промежуточный код ( ассемблер , код той или иной абстрактной машины) или собственно машинный код.
Рассмотрим синтаксис языка программирования SML в сравнении с синтаксисом ламбда-исчисления .
Для большей наглядности и сопоставимости формализаций синтаксиса обоих языков (языка формальной математической теории и языка программирования) будем использовать единую нотацию, а именно, БНФ .
Прежде всего, необходимо договориться об обозначениях.
Рассмотрим традиционные обозначения БНФ и поясним смысл каждого из них.
Фактически БНФ представляют собой определения одних понятий через другие. При этом понятия заключаются в угловые скобки, и используется ряд специализированных символов и соглашений, суть которых поясняется далее.
Определяющий символ ":: http://www.intuit.ru/2010/edi" >
Определяемая конструкция записывается слева от ":: texample">" и ">" .
Альтернативы (возможные варианты) конструкций перечисляются по вертикали.
Цитирование (подобно тому, как мы цитировали специальные символы, заключая их в двойные кавычки) не имеет обозначения.
Проиллюстрируем формализацию синтаксиса посредством нотации БНФ , рассмотрев в качестве примера формальной системы хорошо знакомое нам по предыдущим лекциям ламбда-исчисление .
Поясним смысл приведенных обозначений.
В данном примере определяется понятие выражения, синтаксическое представление которого может быть выражено в виде одной из следующих альтернатив:
- константы ;
- переменной ;
- двух выражений, заключенных в круглые скобки, т.е. знакомой нам операции аппликации ламбда-выражений;
- символа , за которым следует переменная , точка и выражение , т.е. знакомой нам операции абстракции.
Оказывается, что синтаксис языка программирования SML имеет ряд очевидных аналогий с синтаксисом ламбда-исчисления . Эти аналогии являются неизбежными как в силу функциональной природы рассматриваемого языка программирования, так и на том основании, что язык SML разрабатывался как средство доказательства теорем, а, значит, его синтаксис (а, забегая вперед, заметим, что и семантика ) должен быть прозрачен математически.
Для иллюстрации перечисленных выше тезисов рассмотрим важнейшие синтаксические категории языка программирования SML .
Под выражением будем далее понимать обозначение конструкции языка, которой может быть присвоено значение ( константы , переменной , функции и т.д.).
Описанием будем в дальнейшем называть запись , связывающую выражение языка программирования с именем, обозначающим его в программе ( идентификатором ).
Под термином " зарезервированное " (или, иначе, служебное) слово будем иметь в виду конструкцию языка, однозначно интерпретируемую в качестве инструкции языка программирования (например, "if" , "then" , "let" ). Напомним, что в данной нотации цитирование производится без кавычек или других символов-ограничителей.
Комментарием назовем произвольный поясняющий текст к программе, который, согласно синтаксису языка SML , положено заключать в ограничители вида "(*" и "*)" .
Недавно, один мой друг сказал мне, что я пишу интересные темы, но как бы я не старался писать максимально просто, некоторым всё равно не понятно. Что же делать? На этот счет, у меня появилась идея писать так, чтобы было не просто понятно, о чем речь, но и интересно). Сегодня поговорим о том, что такое синтаксис языка программирования.
Как вы знаете, на земле существует множество национальностей и у каждой из них, есть свой разговорный язык. На сегодняшний день, в мире существует 7174 языка. Некоторые из них похожи друг на друга по синтаксису, буквами или даже звучанием, а некоторые (например, как Китайский или Японский) вообще не имеют аналогов. Но общее у языков то, что как бы определенное слово не звучало, на всех языках, смысл этого слова или словосочетания один и тот же. Просто звучит все по-разному.
Основа основ
Примерно также и с языками программирования. В них синтаксис означает набор правил, описывающий комбинации символов алфавита, считающиеся правильно структурированной программой (документом) или её фрагментом. Сейчас приведу самые простые примеры:
Язык PHP: echo ‘Пример комментария’;
Язык Python: print (“Пример комментария”);
В этих примерах, смысл один и тот же: вывести на экран слово “Пример комментария”. Кстати, на это потребовалось менее 30 символов. Синтаксис этих языков разный, но смысл один и тот же. В каждом языке программирования, есть набор определенных правил и символов, которые во взаимодействии друг с другом дают определенный результат. И таких языков программирования примерно около 9 тысяч.
Конечно, совсем не обязательно знать каждый ведь, во-первых, в этом нет никакого смысла, а во-вторых, это просто не возможно. Языки имеют свои категории, такие как: Полнофункциональные, Аспектно-ориентированные, Структурные, Процедурные, Логические, Объектно-ориентированные, Функциональные, СУБД и многие другие.
В общем, начинаем изучать вселенную iT-индустрии полностью с 0. Надеюсь, всем все понятно)
У каждого языка программирования есть синтаксис и семантика. Синтаксис — это совокупность формальных правил написания программ на данном языке, семантика — это смысловое значение написанного.
Важным элементом синтаксиса является алфавит языка, который представляет собой набор всех допустимых в языке символов.
Зарезервированными являются такие слова, смысл которых однозначно трактуется компилятором языка и другим быть не может. Вот почему их нельзя использовать иначе, чем по прямому назначению. В отличие от зарезервированных слова пользователя задаются самим программистом и им же определяется смысл их использования.
Например, в Turbo Pascal используются следующие зарезервированные слова: and, asm, array, begin, case, const, constructor, destructor, div, do, downto, else, end, file, for и др.
При наборе программы эти слона отображаются на экране белым цветом, напоминая нам, что они являются ключевыми.
Идентификаторы, или имена, могут присваиваться константам, переменным, меткам, типам, объектам, процедурам, функциям, модулям, программам, полям записей, иными словами, всему тому, что может быть поименовано. Важно познакомиться с правилами оформления идентификаторов. Любые ошибки в написании имен приведут к синтаксической ошибке, и программа не будет выполняться.
Правила оформления констант также играют важную роль в синтаксисе языка программирования. Например, при записи десятичных дробей используется десятичная точка, а не запятая, символьные данные оформляются в кавычках, аргумент функции всегда оформляется в скобках, следующих за именем функции, и т. д.
Любой язык программирования имеет целый ряд встроенных функций, т.е. готовых программ, одно обращение к которым по их имени приводит к получению результата, например sin (х), cos(x), log(x) и т.д. Напомним, что функция sqrt (х) обеспечивает нахождение квадратного корня из указанного аргумента.
Алгоритм, записанный на языке программирования, называется программой.
Каждый шаг алгоритма представлен некоторой командой. Команды в программе оформляются по правилам языка программирования и называются операторами языка программирования. Заметим, что для любой программы характерен естественный порядок исполнения команд, т.е. команды исполняются в порядке их написания в программе. Этот порядок может быть нарушен командами передачи управления (операторами перехода), которые относятся к управляющим командам, т.е. таким, которые не выполняют непосредственно обработку информации, а управляют работой программы.
Любая программа выполняется в результате ее трансляции — перевода записи операторов на язык компьютера. Каждый оператор в программе после трансляции будет представлен набором кодов команд. Эти команды выполняются в оперативной памяти компьютера.
Все константы и переменные размещаются в своих ячейках памяти в соответствии с присвоенными им идентификаторами — именами.
Код команды содержит не только эти имена данных, но и адреса ячеек оперативной памяти, в которых размещается значение соответствующих данных, а также код самой операции, предусмотренной в операторе. Операция может быть арифметической (сложение, вычитание, умножение, деление), встроенной функцией (которые сами являют собой набор команд), логической (сравнения) или управления (переход, ввод, вывод, старт, стоп, конец, пауза или задержка).
Интересно отметить еще одну особенность выполнения команд в компьютере. Например, основной арифметической командой является сложение. Операция вычитания представлена в компьютере как сложение с отрицательным числом, а операция умножения — как многократное сложение, соответственно операция деления — как многократное вычитание. Выполняет эти операции в компьютере сумматор. При этом важнейшую роль играет способ представления чисел в компьютере: целых, дробных, положительных и отрицательных. Правила записи этих чисел есть в синтаксисе языка и их следует неукоснительно выполнять.
Операторы языка программирования позволяют приступить к написанию простейших программ с использованием типовых алгоритмических конструкций.
Математическая запись формулы, записанная по правилам языка программирования справа от знака присваивания, называется арифметическим выражением. Арифметические выражения используются повсеместно при работе с компьютером — в программах-калькуляторах, электронных таблицах, что будет рассмотрено в дальнейшем. Важную роль в записи арифметического выражения играют встроенные функции, которые сами представляют собой команды для компьютера, требующие вычисления, а также скобки, позволяющие четко определить порядок операций в арифметическом выражении, в том числе для оформления дробного выражения с помощью деления числителя на знаменатель.
Оператор присваивания. Этот оператор работает так: результат вычисления выражения в правой части требуется присвоить в качестве значения переменной Y. Именно потому, что данный оператор выполняет функции не только вычисления, но и присваивания, в левой его части не может быть выражения, а только имя одной переменной — ячейки памяти компьютера, в которую производится запись результата вычисления.
Оператор ввода данных. Этот оператор размещает данные в оперативной памяти компьютера. Имена переменных, записанных в операторе INPUT в произвольном порядке, получают значения, вводимые с клавиатуры в этом же порядке, т.е. первой переменной соответствует первое введенное значение, второй — второе и т.д. Синтаксис оператора в общем виде будем называть его форматом.
Оператор вывода. Этот оператор предназначен для вывода результатов или на экран монитора или на принтер.
Существуют два вида операторов (команд) перехода. Оператор безусловного перехода передает управление к другой команде всегда, вне зависимости от каких бы то ни было условий.
Оператор условного перехода передает управление только в случае истинности некоторого условия, а в противном случае — просто игнорируется.
Смысл этого оператора состоит в том, что если условие истинно, то выполняется оператор или группа операторов, следующих за словом THEN, а если условие ложно, то выполняется оператор или группа операторов, следующих за словом ELSE (иначе). Конструкция ELSE здесь заключена в квадратные скобки. По правилам описания форматов это означает ее необязательность. В случае отсутствия в формате конструкции ELSE оператор выполняет также действия: если условие истинно, то выполняется оператор или группа операторов, следующих за словом THEN, а в противном случае — оператор, следующий за оператором IF в программе. Если используется группа операторов, то они разделяются двоеточиями.
У каждого языка программирования есть синтаксис и семантика. Синтаксис — это совокупность формальных правил написания программ на данном языке, семантика — это смысловое значение написанного.
Важным элементом синтаксиса является алфавит языка, который представляет собой набор всех допустимых в языке символов.
Зарезервированными являются такие слова, смысл которых однозначно трактуется компилятором языка и другим быть не может. Вот почему их нельзя использовать иначе, чем по прямому назначению. В отличие от зарезервированных слова пользователя задаются самим программистом и им же определяется смысл их использования.
Например, в Turbo Pascal используются следующие зарезервированные слова: and, asm, array, begin, case, const, constructor, destructor, div, do, downto, else, end, file, for и др.
При наборе программы эти слона отображаются на экране белым цветом, напоминая нам, что они являются ключевыми.
Идентификаторы, или имена, могут присваиваться константам, переменным, меткам, типам, объектам, процедурам, функциям, модулям, программам, полям записей, иными словами, всему тому, что может быть поименовано. Важно познакомиться с правилами оформления идентификаторов. Любые ошибки в написании имен приведут к синтаксической ошибке, и программа не будет выполняться.
Правила оформления констант также играют важную роль в синтаксисе языка программирования. Например, при записи десятичных дробей используется десятичная точка, а не запятая, символьные данные оформляются в кавычках, аргумент функции всегда оформляется в скобках, следующих за именем функции, и т. д.
Любой язык программирования имеет целый ряд встроенных функций, т.е. готовых программ, одно обращение к которым по их имени приводит к получению результата, например sin (х), cos(x), log(x) и т.д. Напомним, что функция sqrt (х) обеспечивает нахождение квадратного корня из указанного аргумента.
Алгоритм, записанный на языке программирования, называется программой.
Каждый шаг алгоритма представлен некоторой командой. Команды в программе оформляются по правилам языка программирования и называются операторами языка программирования. Заметим, что для любой программы характерен естественный порядок исполнения команд, т.е. команды исполняются в порядке их написания в программе. Этот порядок может быть нарушен командами передачи управления (операторами перехода), которые относятся к управляющим командам, т.е. таким, которые не выполняют непосредственно обработку информации, а управляют работой программы.
Любая программа выполняется в результате ее трансляции — перевода записи операторов на язык компьютера. Каждый оператор в программе после трансляции будет представлен набором кодов команд. Эти команды выполняются в оперативной памяти компьютера.
Все константы и переменные размещаются в своих ячейках памяти в соответствии с присвоенными им идентификаторами — именами.
Код команды содержит не только эти имена данных, но и адреса ячеек оперативной памяти, в которых размещается значение соответствующих данных, а также код самой операции, предусмотренной в операторе. Операция может быть арифметической (сложение, вычитание, умножение, деление), встроенной функцией (которые сами являют собой набор команд), логической (сравнения) или управления (переход, ввод, вывод, старт, стоп, конец, пауза или задержка).
Интересно отметить еще одну особенность выполнения команд в компьютере. Например, основной арифметической командой является сложение. Операция вычитания представлена в компьютере как сложение с отрицательным числом, а операция умножения — как многократное сложение, соответственно операция деления — как многократное вычитание. Выполняет эти операции в компьютере сумматор. При этом важнейшую роль играет способ представления чисел в компьютере: целых, дробных, положительных и отрицательных. Правила записи этих чисел есть в синтаксисе языка и их следует неукоснительно выполнять.
Операторы языка программирования позволяют приступить к написанию простейших программ с использованием типовых алгоритмических конструкций.
Математическая запись формулы, записанная по правилам языка программирования справа от знака присваивания, называется арифметическим выражением. Арифметические выражения используются повсеместно при работе с компьютером — в программах-калькуляторах, электронных таблицах, что будет рассмотрено в дальнейшем. Важную роль в записи арифметического выражения играют встроенные функции, которые сами представляют собой команды для компьютера, требующие вычисления, а также скобки, позволяющие четко определить порядок операций в арифметическом выражении, в том числе для оформления дробного выражения с помощью деления числителя на знаменатель.
Оператор присваивания. Этот оператор работает так: результат вычисления выражения в правой части требуется присвоить в качестве значения переменной Y. Именно потому, что данный оператор выполняет функции не только вычисления, но и присваивания, в левой его части не может быть выражения, а только имя одной переменной — ячейки памяти компьютера, в которую производится запись результата вычисления.
Оператор ввода данных. Этот оператор размещает данные в оперативной памяти компьютера. Имена переменных, записанных в операторе INPUT в произвольном порядке, получают значения, вводимые с клавиатуры в этом же порядке, т.е. первой переменной соответствует первое введенное значение, второй — второе и т.д. Синтаксис оператора в общем виде будем называть его форматом.
Оператор вывода. Этот оператор предназначен для вывода результатов или на экран монитора или на принтер.
Существуют два вида операторов (команд) перехода. Оператор безусловного перехода передает управление к другой команде всегда, вне зависимости от каких бы то ни было условий.
Оператор условного перехода передает управление только в случае истинности некоторого условия, а в противном случае — просто игнорируется.
Смысл этого оператора состоит в том, что если условие истинно, то выполняется оператор или группа операторов, следующих за словом THEN, а если условие ложно, то выполняется оператор или группа операторов, следующих за словом ELSE (иначе). Конструкция ELSE здесь заключена в квадратные скобки. По правилам описания форматов это означает ее необязательность. В случае отсутствия в формате конструкции ELSE оператор выполняет также действия: если условие истинно, то выполняется оператор или группа операторов, следующих за словом THEN, а в противном случае — оператор, следующий за оператором IF в программе. Если используется группа операторов, то они разделяются двоеточиями.
Основными элементами любого языка программирования являются его алфавит, синтаксис и семантика.
Алфавит – совокупность символов, отображаемых на устройствах печати и экранах и/или вводимых с клавиатуры терминала. Обычно это набор символов Latin-1 с исключением управляющих символов. Иногда в это множество включаются неотображаемые символы с указанием правил их записи (комбинирование в лексемы).
Синтаксис – совокупность правил образования языковых конструкций, или предложений языка программирования – блоков, процедур, составных операторов, условных операторов, операторов цикла и пр. Особенностью синтаксиса является принцип вложенности (рекурсивность) правил построения конструкций. Это значит, что элемент синтаксиса языка в своем определении прямо или косвенно в одной из его частей содержит сам себя. Например, в определении оператора цикла телом цикла является оператор, частным случаем которого является все тот же оператор цикла.
Необходимо строгое соблюдение правил правописания (синтаксиса) программы. В частности, в Паскале однозначно определено назначение знаков пунктуации. Точка с запятой (;) ставится в конце заголовка программы, в конце раздела описания переменных, после каждого оператора. Перед словом End точку с запятой можно не ставить. Запятая (,) является разделителем элементов во всевозможных списках: списке переменных в разделе описания, списке вводимых и выводимых величин.
Строгий синтаксис в языке программирования необходим прежде всего для транслятора. Транслятор – это программа, которая исполняется формально. Если, допустим, разделителем в списке переменных должна быть запятая, то любой другой знак будет восприниматься как ошибка. Если точка с запятой является разделителем операторов, то транслятор в качестве оператора воспринимает всю часть текста программы от одной точки с запятой до другой. Если вы забыли поставить этот знак между какими-то двумя операторами, то транслятор будет принимать их за один, что неизбежно приведет к ошибке.
Основное назначение синтаксических правил – придать однозначный смысл языковым конструкциям. Если какая-то конструкция может трактоваться двусмысленно, значит, в ней обязательно содержится ошибка. Лучше не полагаться на интуицию, а выучить правила языка.
Синтаксис языка описывается путем последовательного усложнения понятий: сначала определяются простейшие (базовые), затем все более сложные, включающие в себя предыдущие понятия в качестве составляющих.
В такой последовательности, очевидно, конечным определяемым понятием должно быть понятие программы.
В диаграммах стрелки указывают на последовательность расположения элементов синтаксической конструкции; кружками обводятся символы, присутствующие в конструкции.
Определение, в котором некоторое понятие определяется само через себя, называется рекурсивным. Рекурсивные определения характерны для БНФ.
Возвратная стрелка обозначает возможность многократного повторения. Очевидно, что диаграмма более наглядна, чем БНФ.
Синтаксические диаграммы были введены Н. Виртом и использованы для описания созданного им языка Паскаль.
Семантика – смысловое содержание конструкций, предложений языка, семантический анализ – это проверка смысловой правильности конструкции. Например, если мы в выражении используем переменную, то она должна быть определена ранее по тексту программы, а из этого определения может быть получен ее тип. Исходя из типа переменной, можно говорить о допустимости операции с данной переменной. Семантические ошибки возникают при недопустимом использовании операций, массивов, функций, операторов и пр.
Читайте также:
- Папка передвижка в детский сад без слез или как уберечь ребенка от стресса
- Что это за праздник полный песен разных танец в детском саду
- Программа психолого педагогического сопровождения образовательного процесса в школе 8 вида
- Что такое командообразование кратко
- Определите какие из следующих предложений являются высказываниями а какие нет школа 19 хорошая школа