Синтаксис языка 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. может идти какой угодно текст, он не будет обрабатываться компилятором.