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 ціле_число ]