Pascal/Синтаксис

Матеріал з Вікіпідручника

Цей розділ містить формальний опис синтаксису найзагальнішої частини мови Паскаль, що працює в усіх компіляторах.

Формат[ред.]

Вираз Означає
A ::= B A означає B
A ::= B C A означає B, за яким іде C
A ::= B
A ::= C
A означає B або C
A ::= B | C
[A] A може бути відсутнім
Жирний текст Термінальний символ (символ алфавіту)

Між будь-якими лексемами може бути розділювач; якщо відсутність розділювача призводить до зміни виразу (наприклад, злиття двох ідентифікаторів в один), розділювач має бути обов'язково.

Вміст файлу з кодом[ред.]

Вміст ::= програма | модуль

Програма ::= [заголовок_програми] [розділи] програмний_блок .
Заголовок_програми ::= program ідентифікатор ;
Розділи ::= розділ [розділи]
Розділ ::= розділ_uses | розділ_type | розділ_var | розділ_const | розділ_label | підпрограма
Модуль ::= заголовок_модуля [розділи] закінчення_модуля
Заголовок_модуля ::= unit ідентифікатор ;
Закінчення_модуля ::= програмний_блок | end .

Розділи[ред.]

Uses[ред.]

Розділ_uses ::= uses список_модулів ;

Список_модулів ::= ім'я_модуля [, список_модулів]
Ім'я_модуля ::= ідентифікатор

Type[ред.]

Розділ_type ::= type список_визначень_типів

Список_визначень_типів ::= визначення_типу ; [список_визначень_типів]
Визначення_типу ::= ім'я_типу = опис_типу ;
Ім'я_типу ::= ідентифікатор
Прості типи:
Опис_типу ::= ім'я_типу | ^ опис_типу | інтервал | ( список_значень_переліку )
Інтервал ::= значення_перелічуваного_типу .. значення_перелічуваного_типу
Значення_перелічуваного_типу ::= ціле_число | символ | значення_переліку | константа
Значення_переліку ::= ідентифікатор
Константа ::= індентифікатор
Список_значень_переліку ::= значення переліку [, список_значень_переліку]
Контейнерні типи:
Опис_типу ::= array [ [ інтервал ] [список_інтервалів] ] of опис_типу | set of опис_типу | string [[ інтервал ]] | file [ of опис_типу ] | text
Список_інтервалів ::= інтервал [, список_інтервалів]
Складні типи:
Опис_типу ::= record вміст_record end | object
Функціональні типи:
Опис_типу ::= procedure ( список_параметрів ) | function ( список_параметрів ) : опис_типу

Var[ред.]

Розділ_var ::= var список_проголошень_змінних
Список_проголошень_змінних ::= список_ідентифікаторів : опис_типу ; [список_проголошень_змінних]
Список_ідентифікаторів ::= ідентифікатор [, список_ідентифікаторів]

Const[ред.]

Розділ_const ::= const список_проголошень_констант
Список_проголошень_констант ::= ідентифікатор [ : опис_типу ] = значення ; [список_проголошень_констант]

Label[ред.]

Розділ_label ::= label список_міток ;
Список_міток ::= мітка [, список_міток]
Мітка ::= ідентифікатор | число

Підпрограма[ред.]

Підпрограма ::= заголовок_підпрограми [розділи] програмний_блок ;
Заголовок_підпрограми ::= function ідентифікатор [( список_формальних_параметрів )] : опис_типу | procedure ідентифікатор [( список_формальних_параметрів )]
Список_формальних_параметрів ::= [var] список_ідентифікаторів : опис_типу [; список_формальних_параметрів]

Програмний блок[ред.]

Програмний_блок ::= begin [список_тверджень] end

Список_тверджень ::= [мітка :] твердження [; список_тверджень]
Твердження ::= програмний_блок
Твердження ::= goto мітка
Твердження ::= ім'я_процедури [( список_параметрів )]
Список_параметрів ::= вираз [, список_параметрів]
Твердження ::= ім'я_змінної := вираз
Твердження ::= if вираз then твердження
Твердження ::= if вираз then твердження else твердження
Твердження ::= case вираз of список_варіантів end
Список_варіантів ::= варіант [; список_варіантів]
Варіант ::= вираз : список_тверджень
Твердження ::= while вираз do твердження
Твердження ::= repeat список_тверджень until вираз
Твердження ::= for ім'я_змінної := вираз [to | downto] вираз do твердження
Вираз ::= число | змінна | рядок | символ | ім'я_змінної | ім'я_константи
Вираз ::= ім'я_функції [( список_параметрів )]
Вираз ::= унарний_оператор вираз
Унарний_оператор ::= @ | + | - | not
Вираз ::= вираз бінарний_оператор вираз
Бінарний_оператор ::= + | - | * | / | mod | div | and | or | xor

Лексеми[ред.]

Всередині лексем розділювачі неприпустимі.

Ідентифікатор ::= перший_символ_ідентифікатора [кілька_символів_ідентифікатора]

Перший_символ_ідентифікатора ::= літера | _

Кілька_символів_ідентифікатора ::= символ_ідентифікатора [кілька_символів_ідентифікатора]

Cимвол_ідентифікатора ::= літера | цифра | _

Літера ::= A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

Цифра ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Ціле_число ::= [знак_числа] кілька_цифр

Кілька_цифр ::= цифра [кілька_цифр]

Дійсне число ::= ціле_число [. [кілька_цифр] ][ E ціле_число ] | [знак_числа] . кілька_цифр [ E ціле_число ]