Компилятор. Синтаксис и семантика
Особое значение для программиста имеет предупреждение и исправление ошибок в алгоритме и программе решения задачи. Прежде чем выполнить программу, ее текст необходимо ввести в компьютер. Для ввода и изменения (редактирования) текстов используется специальная программа — текстовый редактор.
Текст набранной программы, для того чтобы быть "понятым" компьютером, должен быть переведен на язык машинных кодов. Такой перевод называется компиляцией и выполняется специальной программой — компилятором. Компилятор анализирует программу и определяет, содержит ли она ошибки. В случае их обнаружения вся работа останавливается. Если же правила языка программирования не нарушены, то формируется модуль на машинном языке, который затем и исполняется.
В отличие от естественных языков, таких как русский, английский и др., язык программирования имеет очень ограниченное количество "слов", понятных компилятору, и строгие правила записи команд. Совокупность этих требований образует синтаксис языка программирования, а смысл команд и других конструкций языка — его семантику.
Типы ошибок
Программирование является творческим процессом, поэтому ошибки неизбежно встречаются даже у опытных программистов. Различают следующие типы ошибок: синтаксические ошибки (ошибки компиляции), ошибки выполнения и ошибки в алгоритме программы (семантические).
1. Синтаксические ошибки возникают при нарушении правил языка (в нашем случае — языка Turbo Pascal), их обнаруживает компилятор, который не может из-за ошибки "понять" назначение команды.
2. Ошибки выполнения не нарушают синтаксис языка. Однако они приводят к ошибочным операциям в процессе выполнения программы, например попытке деления на ноль или извлечения квадратного корня из отрицательного числа. Перечень Turbo Pascal об ошибках содержит более 200 сообщений (см. приложение 1).
3. Ошибки в алгоритме программы при верных исходных данных и внешне безошибочной работе программы приводят к неверным результатам. Этот тип ошибок наиболее коварен и труден для исправления, т. к. пользователь, получая ошибочный результат, считает его верным, поскольку никаких сообщений об ошибках не было. Семантические ошибки должен обнаруживать сам программист. В поиске и исправлении ошибок ему может оказать существенную помощь интегрированная среда разработки Turbo Pascal и ее встроенный отладчик.
Алфавит языка Турбо Паскаль. Программа
Система программирования Т-П представляет собой единство двух самостоятельных начал:
· Компилятора с языка программирования Паскаль
· Инструментальной оболочки Турбо.
Язык так назван в честь выдающегося французского математика и философа Блеза Паскаля (1623-1662). Разработал язык Паскаль в 1970 году Никлас Вирт. Турбо Паскаль разработан фирмой Borland. Предназначен для решения широкого круга задач. Все компоненты формируются из множества стандарта ASCII.
Алфавит– совокупность допустимых в языке символов.
Элементы языка можно условно разбить на 4 группы:
· Символы, используемые в идентификаторах;
· Разделители;
· Специальные символы;
· Неиспользуемые символы.
Идентификаторы
Идентификатор – любая последовательность символов, удовлетворяющая требованиям:
· Может состоять из латинских букв (стр. и проп.), цифр 0..9,знака подчеркивания;
· Может начинаться только с буквы или знака подчеркивания;
· Не должна совпадать с зарезервированным словом;
· Длина может быть произвольной, но значащими являются только первые 63 символа.
Разделители
Разделитель – используется только для отделения др. от др. идентификаторов, чисел, зарезервированных слов. В качестве разделителя можно использовать:
· Пробел (код 32);
· Любой управляющий символ (коды 0..31);
· Комментарий.
Комментарий заключается в фигурные скобки {}, (* *).
Специальные символы
Специальные символы – символы, выполняющие в языке определенные функции, их 3 категории:
· Знаки пунктуации,
· Знаки операций,
· Зарезервированные слова.
Таблица 1. Знаки пунктуации.
Знак | Применение |
{ } | Скобки, комментарии |
(**) | Скобки, комментарии |
[ ] | Выделение индексов массивов, элементов множеств |
‘ | Апостроф для выделения символа или строковой const |
:= | Знак присвоения значения переменной |
; | Разделение операторов и объявлений |
: | Отделение переменной или типизированной const от типа или метки оператора |
= | Отделение идентификатора типа от описания типа или типизированной const от ее значения |
, | Запятая для разделения элементов списка |
… | Разделение границ диапазона |
, | Точка для: - обозначения конца программы; - отделения целой части от дробной в вещественных числах; - отделения полей в записи; - отделения идентификатора от имени модуля в котором он находится |
^ | Обозначение типа указатель, значение величины по ее указателю или управляющего символа (коды 0-31) |
# | Обозначение символа по его коду |
$ | Обозначение директивы компилятора или знак шестнадцатеричного числа |
Знаки операций предназначены для обозначения тех или иных арифметических действий
Приоритет | Операция |
Not, @ | |
*, /, div, mod, and, shl, shr | |
+, -, or, xor | |
=, <>, <, >, <=, >=, in |
Зарезервированные слова включают в себя служебные слова(begin, end, div и т.д.) и имена директив (external, forward и т.д.).
Неиспользуемые символы (%, “ и т.д.) не используются в Т-П, но могут использоваться в комментариях