і освічених з них конструкцій, що дозволяють представити описуваний мову за допомогою визначених раніше понять і відносин між ними. При цьому кожне поняття мови має на увазі деяку синтаксичну одиницю (конструкцію) і обумовлені нею властивості програмних об'єктів або процесу обробки даних.
Для опису синтаксису мов програмування найбільшого поширення набула форма Бекуса-Наура і її різні модифікації
Форма Бекуса-Наура
Форма Бекуса-Наура (БНФ) являє собою дуже природний спосіб опису синтаксису. У БНФ кожне визначається поняття - це металінгвістіческая змінна. Значним металінгвістіческая змінної може бути будь-яка конструкція з деякого фіксованого для цього поняття набору конструкцій. Кожна металінгвістіческая форма визначає одну металінгвістіческая змінну і складається з двох частин: лівої і правої. У лівій частині записується обумовлена ??металінгвістіческая змінна, яка полягає в кутові дужки" <" і «>» (Передбачається, що ці дужки є метасимвол і не належать алфавітом що визначається мови), наприклад: <двійкове число>, <мітка>, <арифметичне висловлю-ня>. У правій частині форми записуються всі варіанти визначення конструкції, що задається цією формою. Кожен варіант представляє собою ланцюжок основних символів визначається мови та металінгвістичних змінних. Варіанти поділяються металінгвістіческая зв'язкою «|», що має сенс «або». Ліва і права частини форми поділяються метасимволом «: =», що означає «за визначенням є».
На практиці для опису синтаксису мов програмування часто використовують розширення БНФ, що дозволяють більш природно представляти альтернативні, необов'язкові і повторювані частини металінгвістичних формул. Так, одне з розширень БНФ (РБНФ) дозволяє використовувати такі спрощення:
1. необов'язкові елементи синтаксичної конструкції полягають у квадратні дужки « [» і «]»;
2. альтернативні варіанти можуть у разі необхідності полягати у квадратні дужки для освіти багатоваріантного вибору;
. елементи синтаксичної конструкції, повторювані нуль і більше разів, полягають у фігурні дужки « {» і «}».
Форма Бекуса-Наура для завдання
<програма>:=[ program <ідентифікатор>] {<опис об'єктів програми>;} <розділ операторів>. p>
<опис об'єктів програми>:=<розділ міток> | <розділ опису типів> | <розділ опису змінних> | <розділ опису констант>
<розділ міток>:= label <мітка> {, <Мітка>}
<мітка>:=<ідентифікатор> | <ціле без знака>
<розділ опису типів>:= type <визначення типу> {; <Визначення типу>}
<визначення типу>:=<ім'я типу>=<тип>
<ім'я типу>:=<ідентифікатор>
<тип>:=<простий тип> | <складовою тип> | <ім'я типу>
<простий тип>:= integer | char | <діапазонний тип> p>
<складовою тип>:=<рядок>
<рядок>:= string
<діапазонний тип>:=<константа> .. <константа>
<розділ опису констант>:= const <визначення константи> ...