Синтаксис языка Pascal. Алфавит, комментарии, идентификаторы, константы, служебные слова
Трансляция программ. Виды трансляторов. Типы ошибок в программах. Компиляция и отладка программ.
Трансля́тор — программа или техническое средство, выполняющее трансляцию программы.
Транслятор - в широком смысле - программа, преобразующая текст, написанный на одном языке, в текст на другом языке.
Транслятор - в узком смысле - программа, преобразующая: программу, написанную на одном (входном) языке в программу, представленную на другом (выходном) языке.
Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати тексты программы и т. д.
Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой.
Язык, на котором представлена входная программа, называется исходным языком, а сама программа — исходным кодом. Выходной язык называется целевым языком или объектным кодом.
Трансляторы подразделяют:
- Адресный. Функциональное устройство, преобразующее виртуальный адрес (англ. Virtual address) в реальный адрес.
- Диалоговый. Обеспечивает использование языка программирования в режиме разделения времени.
- Многопроходной. Формирует объектный модуль за несколько просмотров исходной программы.
- Обратный. То же, что детранслятор.
- Однопроходной. Формирует объектный модуль за один последовательный просмотр исходной программы.
- Оптимизирующий. Выполняет оптимизацию кода в создаваемом объектном модуле.
- Синтаксически-ориентированный (синтаксически-управляемый). Получает на вход описание синтаксиса и семантики языка и текст на описанном языке, который и транслируется в соответствии с заданным описанием.
- Тестовый. Набор макрокоманд языка ассемблера, позволяющих задавать различные отладочные процедуры в программах, составленных на языке ассемблера.
Транслятор, который преобразует программы в машинный язык, принимаемый и исполняемый непосредственно процессором, называется компилятором.
Типы ошибок в программах:
1) ошибки компиляции. Среда Турбо-Паскаля обладает мощными средствами обнаружения и локализации ошибок. В случае обнаружения ошибки она идентифицируется курсором. При этом в верхней строке окна редактора появляется диагностическое сообщение. После нажатия на любую клавишу, кроме(F1) верхняя строка восстанавливает свой первоначальный вид, и среда переходит к режиму редактирования. Если после появления сообщения об ошибке нажать функциональную клавишу F1, на экране появиться окно справочной службы с детальной информацией об ошибке и рекомендациями по ее устранению. Некоторые ошибки в исходном тексте обнаруживаются не сразу, а в ходе продолжающегося контекстного разбора.
2) ошибки, возникающие во время выполнения программы. Некоторые ошибки, обнаруженные во время выполнения программы, приводят к
появлению на экране сообщения вида:
Runtime error nnn at xxxx:yyyy
(ошибка периода исполнения nnn по адресу xxxx:yyyy), где nnn- номер ошибки,
xxxx:yyyy- адрес (сегмент и смещение). После этого сообщения программа завершает
свою работу.
Ошибки периода исполнения делятся на четыре категории:
1) Ошибки, обнаруживаемые ДОС (коды ошибок 1-99);
2) Ошибки ввода\вывода (100-149);
3) Критические ошибки (150-199);
4) Фатальные ошибки (200-255);
3) ошибки, обнаруживаемые ДОС (например, File not found (Не найден файл) и Path not found (Путь не найден)).
4) критические ошибки (например, Disk is write protected (Диск защищен от записи)).
5) фатальные ошибки. Эти ошибки всегда приводят к немедленной остановке программы(например, Division by zero (Деление на нуль))
Синтаксис языка Pascal. Алфавит, комментарии, идентификаторы, константы, служебные слова.
АлфавитPascal включает буквы, цифры, шестнадцатеричные цифры, специальные символы, пробелы и зарезервированные слова.
Буквы – это буквы латинского алфавита от a до z и от A до Z, а также знак подчеркивания _. Нет различия между прописными и строчными буквами алфавита, если только они не входят в символьные или строковые выражения.
Цифры – арабские цифры от 0 до 9.
Каждая шестнадцатеричная цифра имеет значение от 0 до 15. Первые 10 значений обозначаются арабскими цифрами 0..9, остальные шесть – латинскими A..F.
Специальные символы – это символы + – * / = , ‘ . : ; , . [ ] ( ) { } ^ @ $ #
К специальным также относятся следующие пары символом: < > <= >= := (* *) (. .)
Зарезервированные (служебные) слова: and, asm, array, begin, case, const, construction, destructor, div, do, downto, else, end, file, for, function, goto, if, implementation, in, inline, interface, label, mod, nil, not, object, of, or, packed, procedure, program, record, repeat, set, shl, shr, string, then, to, type, unit, until, uses, var, while, with, xor.
Идентификаторы – имена констант, переменных, меток, типов, объектов, процедур, функций, модулей, программ и т.д. В качестве идентификатора можно использовать любые последовательности символов, удовлетворяющих следующим ограничениям:
1. идентификатор может состоять из букв латинского алфавита, цифр, знака подчеркивания; другие символы в идентификаторе не допустимы;
2. идентификатор не может начинаться с цифры;
3. идентификатор не может совпадать ни с одним из зарезервированных слов;
4. длина идентификатора может быть произвольной, но значащими считаются первые 63 символа.
Константы. В качестве констант могут использоваться целые, вещественные, шестнадцатеричные числа, логические константы, символы, строки символов, конструкторы множеств и признак неопределенного указателя NIL.
Тип константы определяется способом записи ее значения. Например:
Const
с1 = 17; (константа типа integer)
c2 = 3.14; (константа типа real)
c3 = ‘A’; (константа типа char)
c4 = ‘3.14’; (константа типа string)
c5 = false; (константа типа boolean)
Целые числа записываются со знаком или без него по обычным правилам, могут принимать значения от -2147483648 до +2147483847.
Вещественные числа записываются со знаком или без него с использованием десятичной точки и/или экспоненциальной части (е или Е за которой следуют «+» или «-» и десятичный порядок – например, 3.14е-2 = 3.14*10-2).
Шестнадцатеричное число – состоит из шестнадцатеричных цифр, которым предшествует знак $. Диапазон – от $00000000 до $FFFFFFFF.
Логическая константа – это либо слово FALSE (ложь) либо TRUE (истина).
Символьная константа – это любой символ, заключенный в апострофы (пример – ‘z’).
Строковая константа – любая последовательность символов, заключенная в апострофы.
Конструктор множества – список элементов множества, обрамленных квадратными скобками (пример [1, 2, 3, 4..7, 12).
Комментарии разрешается вставлять в любое место программы, где по смыслу может стоять пробел. Комментарии обрамляются ограничителями – {комментарий} или (* комментарий *). Можно вкладывать комментарии с ограничителями разных типов друг в друга: { (* *) } или (* { } *).
Синтаксис на примере программы:
Program My_first_program;
Const
text = ‘Ya programmiruyu na Pascale’;
Begin
wtiteln(text);
end.
В данной программе-примере 6 строк. Строки выделяют некоторые смысловые фрагменты текста и могут не связываться с конкретными действиями в программе. Пробел в Pascal используется как разделитель отдельных конструкций языка и не может использоваться произвольно. Поэтому в названии программы (My_first_program) используются символы подчеркивания. В языке игнорируется различие по высоте букв (заглавные и строчные), если только это не связано с текстовыми константами.
Первая строка – слово Program зарезервировано и содержит объявление имени программы. Зарезервированные слова не могут использоваться в качестве идентификатора (имени) объекта программы – переменной, константы и т.д. Вторая строка – const – содержит зарезервированное слово const,означающее, чтодалее будут описываться одна или несколько констант. Константы – такие объекты программы, которые не могут изменять свои значения. Описать константу – значит указать ее имя и значение (третья строка: text – имя константы, ‘Ya programmiruyu na Pascale’ – значение константы). text – константа типа строки символов (признаком этого являются апострофы). Четвертая строка – зарезервированное слово begin – начало главной части программы (раздела операторов). Пятая строка: оператор wtiteln(text) – вывод значения константы textна экран. Слово writeln не является зарезервированным, но является средством вывода данных, поэтому переопределять его не стоит. Шестая строка: зарезервированное слово end с точкой – конец программы. За сочетанием end. может идти какой угодно текст, он не будет обрабатываться компилятором.