Структура языка программирования
Структура языка программирования описывает, из каких символов строится программа, как они объединяются в осмысленные конструкции и что означает каждая конструкция при выполнении. Для подготовки к заданиям ЕГЭ важно различать алфавит, лексемы, синтаксис и семантику.
Уровни описания языка
Язык программирования можно рассматривать как систему, в которой каждый следующий уровень использует предыдущий. Сначала выбираются допустимые символы, затем из них составляются минимальные значимые элементы, после этого элементы объединяются по правилам языка, а в конце определяется результат выполнения получившейся программы.
- Алфавит — множество символов, которые разрешено использовать.
- Лексемы — минимальные последовательности символов, имеющие самостоятельное значение.
- Синтаксис — правила построения правильных конструкций языка.
- Семантика — смысл конструкций, то есть действие, которое они выполняют.
Алфавит языка программирования — набор допустимых символов: букв, цифр, знаков операций, разделителей и специальных символов. Например, в Python используются латинские буквы, цифры, знаки \(+\), \(-\), \(=\), скобки, кавычки, пробелы и символы перевода строки.
Алфавит не равен набору всех символов, которые можно увидеть на клавиатуре. Например, случайный символ § может не входить в алфавит конкретного языка и вызвать ошибку ещё до анализа смысла программы.
Лексема — минимальная последовательность символов, которую компилятор или интерпретатор распознаёт как единое целое. К лексемам относятся ключевые слова, имена, числа, строковые литералы, знаки операций и разделители.
Лексемы и токены
В процессе токенизации исходный текст разбивается на лексемы, или токены. Например, строка result = a + 5 состоит из имени result, оператора присваивания =, имени a, оператора сложения + и целочисленного литерала 5.
| Фрагмент | Вид лексемы | Пример |
|---|---|---|
if, while, return | ключевое слово | команда языка |
count, x, result | идентификатор | имя переменной или функции |
17, 3.14 | числовой литерал | константное значение |
"OK" | строковый литерал | текстовое значение |
| + , -, == , < | оператор | действие или сравнение |
| ( ) , : , ; | разделитель | граница частей конструкции |
Пробелы и комментарии обычно не становятся значимыми лексемами, но иногда пробелы влияют на структуру. В Python отступы определяют границы блока, поэтому одинаковый набор слов с разными отступами может иметь разный смысл или быть ошибочным.
Не смешивайте символ и лексему. Символ + — один знак алфавита, а лексема + — оператор сложения. Число 125 состоит из трёх символов, но является одной лексемой — числовым литералом.
Синтаксис: как строится программа
Язык программирования задаёт грамматику — формальные правила, по которым из лексем строятся выражения, команды, блоки и вся программа. Если правила нарушены, возникает синтаксическая ошибка. Такая ошибка обнаруживается до нормального выполнения соответствующей конструкции.
Синтаксис — совокупность правил записи конструкций языка. Он отвечает на вопрос: можно ли так записать программу? Например, в Python после условия if требуется двоеточие, а команды тела должны иметь отступ.
1x = 7 2if x > 0: 3 print("positive")
В этом фрагменте присваивание, условие и вызов функции записаны синтаксически правильно. Оператор присваивания связывает имя x со значением 7, условие содержит сравнение, а тело условной конструкции образует блок.
Если конструкция не соответствует грамматике языка, это синтаксическая ошибка. Если конструкция записана правильно, но во время выполнения приводит к недопустимому действию или неверному результату, это семантическая или логическая ошибка.
Какая часть строки a = b + 2 является числовым литералом?
a — идентификатор, то есть имя.= — оператор присваивания.b — идентификатор.2 — числовой литерал, одна лексема.Семантика: что означает программа
Семантика описывает результат или действие синтаксически правильной конструкции. Две записи могут иметь разный синтаксис, но одинаковый смысл, и наоборот — почти одинаковые записи могут давать разные результаты.
Семантика — смысл программной конструкции, то есть изменение данных, вычисление значения, вывод на экран, переход к другой команде или другое действие при выполнении.
Например, x = 2 + 3 синтаксически корректно и имеет смысл: сначала вычисляется выражение \(2+3\), затем полученное значение 5 записывается в x. Запись x = 2 + нарушает синтаксис: после знака сложения отсутствует второй операнд. Запись 10 / 0 может быть синтаксически правильной, но при выполнении вызывает ошибку деления на ноль.
При анализе программы последовательно спросите: 1) входят ли используемые знаки в алфавит; 2) образуют ли они правильные лексемы и конструкцию; 3) что эта конструкция делает при выполнении?
Структура программы
Структура программы зависит от языка, но обычно включает объявления данных, последовательность команд, условия, циклы и подпрограммы. Внутри команды могут находиться выражения, а выражение состоит из операндов и операций.
- Заголовок или служебная часть — подключение модулей, объявление программы или функции.
- Объявления — создание переменных, констант, типов и параметров.
- Исполняемая часть — команды, которые выполняются в определённом порядке.
- Блоки — группы команд, объединённые условием, циклом или подпрограммой.
В экзаменационных задачах важно понимать границы команды и порядок вычислений. Например, условие выбирает одну из ветвей, составной оператор объединяет несколько команд, а функция может вычислить и вернуть результат. Передача данных в функцию может выполняться по значению или по ссылке — это отдельные механизмы, описанные на соседних страницах.
Разобранный пример: синтаксис и смысл
Определите значение переменной s после выполнения программы и укажите, почему строка if n > 2 без двоеточия является ошибочной.
1n = 4 2s = 1 3if n > 2: 4 s = s * n 5print(s)
n = 4 и s = 1 синтаксически корректны: создаются две переменные.n и 2.s.Двоеточие после условия и отступ перед s = s * n имеют синтаксическое значение. Если убрать двоеточие, нарушится грамматика условной конструкции. Если оставить двоеточие, но убрать отступ, Python не сможет определить тело блока.
Команда if n > 2: с неправильным отступом содержит синтаксическую ошибку. Команда s = s / 0 может быть синтаксически правильной, но вызовет ошибку во время выполнения. Программа, которая выполняется, но считает не то, что требуется, содержит логическую ошибку.
Как анализировать запись на экзамене
- Проверьте допустимость символов и правильность кавычек, скобок и разделителей.
- Разделите строку на лексемы: ключевые слова, имена, числа и операции.
- Проверьте грамматику: порядок элементов, двоеточия, скобки и отступы.
- Определите тип каждой конструкции: присваивание, условие, цикл, вызов или возврат значения.
- Проследите семантику: какие значения вычисляются и как изменяются переменные.
Если требуется найти ошибку, сначала ищите нарушение формы: пропущенную скобку, двоеточие, кавычку или оператор. Если форма правильна, вычисляйте значения по шагам и проверяйте смысл каждой команды.
Quick-test
Проверьте себя
x = 42?42 — одна числовая лексема.a = 3; a = a + 2?a получает 3, затем увеличивается на 2.if в Python?Главное
- Алфавит — допустимые символы языка; лексемы — минимальные значимые элементы.
- Синтаксис определяет, как правильно записывать конструкции.
- Семантика объясняет, что происходит при выполнении правильной записи.
- Для анализа программы нужно пройти путь от символов и лексем к структуре, а затем к вычислению результата.
- Синтаксическая ошибка нарушает форму записи, ошибка выполнения или логическая ошибка связана со смыслом и результатом.