﻿#PASCAL-программа#      program   #имя# ( #список стандартных имен#  ) ; #блок# .
#имя константы#     CONST_NAME
#целое без знака#   DIGIT
#имя#               IDN
#литерная строка#   LITER_STR
#имя процедуры#    PROC_NAME
#имя функции#      FUNC_NAME
#имя типа#         TYPE_NAME
!                #простой тип#

#список стандартных имен#   #имя# #продолжение списка стандартных имен#
#продолжение списка стандартных имен#  , #список стандартных имен#
!

#блок#  #сегмент меток# #сегмент констант# #сегмент типов#
   #сегмент переменных# #сегмент процедур и функций#
   #составной оператор#
#сегмент меток#      label #список меток#  ;
!
#список меток#       #метка#  #продолжение списка меток#
#продолжение списка меток#    ,  #список меток#
!

#сегмент констант#     const   #список определения констант#
!
#список определения констант#      #имя#  = #константа# ; #продолжение списка определения констант#
#продолжение списка определения констант#  #список определения констант#
!

#сегмент типов#      type  #список типов#
!
#список типов#       #имя# = #тип# ; #продолжение списка типов#
#продолжение списка типов#   #список типов#
!

#сегмент переменных#     var   #список переменных типа#
!
#список переменных типа#    #список имен переменных#  :  #тип# ;
   #продолжение списка имен переменных типа#
#продолжение списка имен переменных типа#     #список переменных типа#
!
#список имен переменных#   #имя# #продолжение списка имен переменных#
#продолжение списка имен переменных#     ,  #список имен переменных#
!

#сегмент процедур и функций#  procedure   #имя#    #список формальных параметров#  ;
   #блок#  ;  #сегмент процедур и функций#
!                             function   #имя#  #список формальных параметров# :
   #имя типа# ;
   #блок#  ;  #сегмент процедур и функций#
!


#оператор#  #целое без знака# :  #оператор без метки#
!           #оператор без метки#

#оператор без метки#    #оператор присваивания#
!                       #вызов процедуры#
!                       #составной оператор#
!                       #условный оператор#
!                       #оператор выбора#
!                       #оператор цикла типа while#
!                       #оператор цикла типа repeat#
!                       #оператор цикла типа for#
!                       #конструкция with#
!                       #оператор безусловного перехода#
!

#оператор присваивания#   #переменная#  :=  #выражение#
!                         #имя функции# :=  #выражение#

#вызов процедуры#   #имя процедуры#   #список фактических параметров#
#список фактических параметров#     ( #список выражений или функций#  )
!
#список выражений или функций#   #имя процедуры# #продолжение списка выражений или функций#
!                                #выражение#  #продолжение списка выражений или функций#
#продолжение списка выражений или функций#   ,  #список выражений или функций#
!


#составной оператор#    begin   #последовательность операторов#   end
#последовательность операторов#   #оператор#   #продолжение операторов#
#продолжение операторов#          ;  #последовательность операторов#
!

#условный оператор#     if #выражение# then #оператор#  else  #оператор#
#оператор выбора#      case  #выражение#   of   #список альтернатив выбора#  end
#список альтернатив выбора#  #альтернатива выбора#   #продолжение списка альтернатив выбора#
!
#продолжение списка альтернатив выбора#  ;  #список альтернатив выбора#
!
#альтернатива выбора#   #список констант#  :  #оператор#
#список констант#       #константа#   #продолжение списка констант#
#продолжение списка констант#     ,  #список констант#
!

#оператор цикла типа while#    while  #выражение#    do   #оператор#
#оператор цикла типа repeat#   repeat  #последовательность операторов#   until  #выражение#
#оператор цикла типа for#      for #переменная#  := #выражение# #направление#  #выражение#   do  #оператор#
#направление#   to
!               downto
#конструкция with#             with  #список переменных#   do   #оператор#
#список переменных#     #переменная#   #продолжение списка переменных#
#продолжение списка переменных#    ,   #список переменных#
!
#оператор безусловного перехода#  goto  #целое без знака#

#выражение#    #простое выражение#  #продолжение выражения#
#продолжение выражения#   #операция сравнения#   #простое выражение#
!
#операция сравнения#   =
!    <
!    >
!    \!=
!     >=
!     <=
!     in
#простое выражение#   #унарная операция#   #слагаемое#   #продолжение простого выражения#
#продолжение простого выражения#   #аддитивная операция#   #слагаемое#
				   #продолжение простого выражения#
!
#аддитивная операция#   +
!    -
!     or
#унарная операция#     +
!      -
!
#слагаемое#     #множитель#  #продолжение слагаемого#
#продолжение слагаемого# #мультипликативная операция#   #множитель#
			 #продолжение слагаемого#
!
#мультипликативная операция#     *
!      /
!      div
!      mod
!      and
#множитель#    #константа без знака#
!     #переменная#
!     #обращение к функции#
!     ( #выражение# )
!      not #множитель#
!     [ #выражение с интервалом#  ]
#обращение к функции#   #имя функции#   #список фактических параметров#

#выражение с интервалом#      #список выражений с интервалом#
!
#список выражений с интервалом#   #элемент выражения с интервалом#  #продолжение списка выражений с интервалом#
#продолжение списка выражений с интервалом#  , #список выражений с интервалом#
!
#элемент выражения с интервалом#  #выражение#   #продолжение элемента выражения с интервалом#
#продолжение элемента выражения с интервалом#  ..  #выражение#
!

#переменная#     #имя#   #уточнение имени переменной#
#уточнение имени переменной#  [  #список выражений#   ]   #уточнение имени переменной#
!                             .  #имя#   #уточнение имени переменной#
!                             ^  #уточнение имени переменной#
!
#список выражений#   #выражение#   #продолжение списка выражений#
#продолжение списка выражений#     ,  #список выражений#
!

#метка#   #целое без знака#
#константа#   #знак константы#   #вариант константы#
!    #литерная строка#
!    nil
!   true
!   false
#знак константы#    +
!     -
!
#вариант константы#   #имя константы#
!                     #целое без знака#

#константа без знака#     #вариант константы#
#тип#  #простой тип#
!      #тип указателя#
!      #тип с возможностью упаковки#
#тип с возможностью упаковки#  packed #упакованый тип#
!      #упакованый тип#
#упакованый тип#   #тип массива#
!      #тип записи#
!      #тип файла#
!      #тип множества#
#простой тип#  integer
!              real
!              boolean
!              char
!  (  #список имен#  )
!   #константа#   ..  #константа#
#список имен#  #имя#  #продолжение списка имен#
#продолжение списка имен#  , #список имен#
!

#тип указателя#    ^ #имя типа#
#тип массива#    array [  #список типа компонент индекса#  ]  of #тип#
#список типа компонент индекса#   #простой тип#   #продолжение списка типа компонент индекса#
#продолжение списка типа компонент индекса#   ,   #список типа компонент индекса#
!
#тип файла#  file of  #тип#
#тип множества#    set of  #простой тип#
#тип записи#  record  #список полей#   end
#список полей#  #основная компонента#  #продолжение основной компоненты#
!               #вариантная компонента#
#продолжение основной компоненты#  ; #основная или вариантная компонента#
!
#основная или вариантная компонента#
		  #основная компонента# #продолжение основной компоненты#
!                 #вариантная компонента#

#основная компонента#   #список имен переменных#  : #тип#
#вариантная компонента#   case  #имя#  :   #имя типа#  of
		     #список констант#  :  (  #список полей#  )
		     #продолжение вариантной компоненты#

#продолжение вариантной компоненты# ; #список констант#  :  (  #список полей#  )
			#продолжение вариантной компоненты#
!

#список формальных параметров#   (   #уточнение списка формальных параметров#  )
!
#уточнение списка формальных параметров#   #список имен#  :  #имя типа#
   #продолжение списка формальных параметров#
!  function    #список имен#  :  #имя типа#
   #продолжение списка формальных параметров#
!  var         #список имен#  :  #имя типа#
   #продолжение списка формальных параметров#
!  procedure   #список имен#  #продолжение списка формальных параметров#
#продолжение списка формальных параметров#    ;   #уточнение списка формальных параметров#
!   