
- •Лекция №4 Темы «Синтаксис и семантика языка программирования Паскаль»
- •4.1. Общие определения
- •4.2. Словарь языка Pascal
- •4.3. Компиляция
- •4.4. Структура программы на языке Паскаль
- •Раздел меток (label)
- •Раздел констант (const)
- •Раздел типов (type)
- •Раздел переменных (var)
- •Раздел процедур и функций
- •Раздел действий (операторов)
- •4.5. Пунктуация в программах на Паскале
Лекция №4 Темы «Синтаксис и семантика языка программирования Паскаль»
4.1. Общие определения
Любой язык, в том числе и язык программирования, подчиняется ряду правил. Их принято разделять на правила, определяющие синтаксис языка, и правила, определяющие его семантику.
Синтаксис языка - совокупность правил, определяющих допустимые конструкции (слова, предложения) языка, его форму.
Семантика языка - совокупность правил, определяющих смысл синтаксически корректных конструкций языка, его содерэюание.
Языки программирования относятся к группе формальных языков, для которых в отличие от естественных языков однозначно определены синтаксис и семантика. Описание синтаксиса языка включает определение алфавита и правил построения различных конструкций языка из символов алфавита и более простых конструкций. Для этого обычно используют форму Бэкуса-Наура (БНФ) или синтаксические диаграммы. Описание конструкции в БНФ состоит из символов алфавита языка, названий более простых конструкций и двух специальных знаков:
«::=» - читается как «может быть заменено на», «|» - читается как «или».
При этом символы алфавита языка, которые часто называют терминальными символами или терминалами, записывают в неизменном виде. Названия конструкций языка (нетерминальные символы или нетерминалы), определяемых через некоторые другие символы, при записи заключают в угловые скобки («< », « >»).
Например, правила построения конструкции <Целое>, записанные в БНФ, могут выглядеть следующим образом:
<Целое> ::= <3нак> <Целое без знака> | <Целое без знака>
<Целое без знака> ::= <Целое без знака> <Цифра> | <Цифра>
<Цифра> ::= О | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<3нак> ::= + | -
Для отображения того, что конструкция <Целое без знака> может включать неограниченное количество цифр, использовано правило с левосторонней рекурсией. Многократное применение этого правила позволяет построить целое число с любым количеством цифр.
Синтаксические диаграммы отображают правила построения конструкций в более наглядной форме. На такой диаграмме символы алфавита изображают блоками в овальных рамках, названия конструкций - в прямоугольных, а правила построения конструкций - в виде линий со стрелками на концах. При этом, если линия входит в блок, то в описываемую конструкцию должен входить соответствующий символ. Разветвление линии означает, что при построении конструкции возможны варианты.
На рис.4.1 представлена синтаксическая диаграмма, иллюстрирующая первые два правила описания конструкции <Целое>. Из диаграммы видно, что целое число может быть записано со знаком или без и включать произвольное количество цифр.
Рис.4.1. Синтаксическая диаграмма конструкции <Целое>
Для описания синтаксических конструкций своего языка Н.Вирт использовал именно синтаксические диаграммы, поэтому в тех случаях, когда словесное описание синтаксиса конструкции длинно и нечетко, мы будем использовать синтаксические диаграммы.
4.2. Словарь языка Pascal
Язык программирования Pascal использует следующий набор символов:
Английские и русские буквы, которые могут быть как строчными, так и прописными.
Арабские цифры.
Знаки операций и знаки, входящие в составное обозначение операций: + - * / : = < >
Ограничители: . , ( ) [ ] { } : ; ‘ “
Специальные символы: $ @ # & ^ _ ~ %
Для обеспечения использования ячеек памяти служат переменные. Переменная – это имя физического участка памяти, в котором в любой момент времени может храниться только одно значение. Для обозначения участков памяти используют идентификаторы (имена).
Идентификаторы (имена переменных, констант программ, модулей, функций, процедур) записываются с помощью допустимых в Pascal символов и должны удовлетворять следующим правилам:
имя должно состоять только из английских букв, цифр и символов подчеркивания (в идентификаторах в Паскале прописные и строчные буквы не различаются);
имя может начинаться только с английской буквы или символа подчеркивания.
Слова, употребляемые в большинстве языков программирования, в том числе и Pascal, делятся на три группы: зарезервированные (ключевые) слова; предопределенные имена и идентификаторы, определяемые программистом.
Служебные (зарезервированные, ключевые) слова – это слова языка программирования, которые имеют специальное, раз и навсегда закрепленное за ними значение. В программе нельзя использовать идентификаторы, совпадающие по написанию ключевыми словами (например, нельзя обозначить переменную именем begin).
Ключевые слова языка программирования Паскаль:
and |
end |
nil |
set |
array |
file |
not |
then |
begin |
for |
of |
to |
case |
function |
or |
type |
const |
goto |
packed |
until |
div |
if |
procedure |
var |
do |
in |
program |
while |
downto |
label |
record |
with |
else |
mod |
repeat |
|
Предопределенные (стандартные) имена также имеют специальный (заранее заданный) смысл. Однако программист может обходить закрепленные за ними значения и использовать их в качестве имен, определяемых программистом. Если программист не определит явно, для каких целей применяется то или иное стандартное имя в программе, оно будет восприниматься в присущем данному имени предопределенном смысле (например, предопределенными являются имена Integer, Writeln и др.).
Пользовательские имена определяются программистом и должны быть явно объявлены в программе.
Десятичные числа всегда начинаются с цифры, перед которой может стоять знак числа, + или -.
Действительные числа изображаются в двух форматах. В формате с фиксированной точкой явно указывают положение десятичной точки (например, 4.505, -16.25, +1.0). В формате с плавающей точкой используется десятичный порядок, обозначаемый прописной или строчной буквой E, после которой идет целое число, указывающее значение порядка, например, 8e10, 1.62e-3, 0.8E+3.
В языке Pascal максимально допустимое целое число равняется 2147483647 (оно содержится в предопределенной целой константе MaxLongInt). Чтобы получить это число достаточно выполнить выражение
writeln(maxlongint);
Диапазон целых чисел от -2147483647 до 2147483647. Предопределенная в Паскале целая константа MaxInt содержит в себе значение 32767
writeln(maxint);
Распространенные компиляторы с Pascal позволяют оперировать действительными числами до 38 порядка, а некоторые – до 67 порядка.
Целое число может задаваться не только в десятичной, но и в шестнадцатеричной системе счисления. Шестнадцатеричному числу предшествует знак $.
Текстовым литералом (строкой) в языке Pascal называют последовательность любых допустимых символов, стоящих между апострофами (например, ‘Hello World!’). Если в качестве символа строки необходимо использовать апостроф, то записывают подряд два апострофа
writeln('Don''t do it')
Строку можно задавать также в виде последовательности, образованной из символов # с последующим цифровым кодом требуемого символа (например, запись #72#73#33 эквивалентна строке 'HI!'). В строковых данных прописные и строчные буквы различаются.
Пробелы являются разделителями. Между любыми именами, числами, ключевыми словами должен стоять, по крайней мере, один разделитель, а может их быть и сколько угодно. Но нельзя отделять один символ от другого внутри имени, числа, либо ключевого слова.