﻿#С-программа# #описание/определение данных/функций# #продолжение С-программы#
#продолжение С-программы# #С-программа#
!
#идентификатор# IDN
#константа#	CONST
#строка# 	STRING
#спецификация памяти внешняя# extern
!		      static
!		      
#спецификация памяти#  auto
!		      extern
!		      static
!		      register

#спецификация типа# #спецификация базового типа#
!		#спецификация структурного типа#
#спецификация базового типа# unsigned #уточнение типа unsigned#
!		char
!		long #уточнение типа long#
!		short #уточнение для long/short#
!		int
! 		float
!		double
!		#идентификатор типа#
!		void
#идентификатор типа# TYPE

#уточнение типа unsigned# char
!		long #уточнение для long/short#
!		short #уточнение для long/short#
!		int
!
#уточнение для long/short# int
!
#уточнение типа long# float
!		      int
!

#спецификация структурного типа# struct #прод_1 struct/union# 
!		        union  #прод_1 struct/union#
!	      		enum   #прод_1 enum#
#прод_1 enum#    { #список констант enum# }
!                #идентификатор#  #прод_2 enum#
#прод_2 enum#   { #список констант enum# }
!
#прод_1 struct/union# { #описание полей записи#  }
!            #идентификатор# #прод_2 struct/union#
#прод_2 struct/union#  { #описание полей записи#  }
!
#список констант enum# #идентификатор# #прод_1 константы enum#
#прод_1 константы enum# = #conditional_expr# #прод_2 константы enum#
!                #прод_2 константы enum#
#прод_2 константы enum#  , #список констант enum#
!

#описание/определение данных/функций# #спецификация памяти внешняя#
      #прод_0 опис/опред данных/функций#
!              	#описание типа typedef#
#прод_0 опис/опред данных/функций# #спецификация базового типа# #прод_11 опис/опред данных/функций#
! 		struct #прод_1 опис/опред данных/функций#
!		union  #прод_1 опис/опред данных/функций#
!		enum   #прод_10 опис/опред данных/функций#
!		#прод_11 опис/опред данных/функций#
#прод_10 опис/опред данных/функций# #идентификатор# #прод_20 опис/опред данных/функций#
!                { #список констант enum# } #прод_12 опис/опред данных/функций#
#прод_20 опис/опред данных/функций# { #список констант enum# } #прод_12 опис/опред данных/функций#
!                #прод_11 опис/опред данных/функций#
#прод_1 опис/опред данных/функций# #идентификатор# #прод_2 опис/опред данных/функций#		 
!               { #описание полей записи#  } #прод_12 опис/опред данных/функций#
#прод_2 опис/опред данных/функций# { #описание полей записи#  } #прод_12 опис/опред данных/функций#
!               #прод_11 опис/опред данных/функций#
#прод_12 опис/опред данных/функций#  ;
!               #прод_11 опис/опред данных/функций#
#прод_11 опис/опред данных/функций#  #описатель#  #прод_13 опис/опред данных/функций#
#прод_13 опис/опред данных/функций#  #инициатор# #прод_3 опис/опред данных/функций#
!       #список описания параметров# #составной оператор#
#прод_3 опис/опред данных/функций# , #описатель# #инициатор# #прод_3 опис/опред данных/функций#
!       ;

#описание полей записи# #описание поля записи# #продолжение описания полей#
#продолжение описания полей# #описание полей записи#
!
#описание поля записи# #спецификация типа# #описатель записи/смеси#
                #прод_1 опред записи#
#прод_1 опред записи# , #описатель записи/смеси# #прод_1 опред записи#
!   		;
#уточнение для описателя записи#     : #conditional_expr#
! 	
#описатель записи/смеси# #описатель# #уточнение для описателя записи#
!		: #conditional_expr#

#описание типа typedef# typedef #спецификация типа# #описатель#
                #продолжение typedef#
#продолжение typedef#  ;
!          ,  #описатель# #продолжение typedef#

#определение данных#  #определение елемента данных# #определение данных#
!
#определение елемента данных# #спецификация памяти# #прод. определения данных#
!        #спецификация базового типа# #описатель# #инициатор# #продолжение опр_1# 
!        struct #уточнение struct/union#
!	 union  #уточнение struct/union#
!	 enum   #уточнение enum#
!        #описание типа typedef#  
#прод. определения данных# #спецификация базового типа#
			#описатель# #инициатор# #продолжение опр_1# 
!        struct #уточнение struct/union#
!	 union  #уточнение struct/union#
!	 enum   #уточнение enum#
#уточнение enum#  #идентификатор# #уточнение_1 enum#
!                 { #список констант enum# } #уточнение_2 struct/union#
#уточнение_1 enum#  #описатель# #инициатор# #продолжение опр_1#
!                 { #список констант enum# } #уточнение_2 struct/union#
#уточнение struct/union# #идентификатор# #уточнение_1 struct/union#
!                  { #описание полей записи#  } #уточнение_2 struct/union#
#уточнение_1 struct/union#   #описатель# #инициатор# #продолжение опр_1# 
!                  { #описание полей записи#  } #уточнение_2 struct/union#
#уточнение_2 struct/union#  ;  
!                  #описатель# #инициатор# #продолжение опр_1# 
#продолжение опр_1#  , #описатель# #инициатор# #продолжение опр_1#
!		;

#описатель#	 #префикс описателя#  #вариант с идентификатором# #вариант массива/функции# 
#вариант массива/функции# ( #список формальных параметров# )
! 	      #многомерный массив#
#многомерный массив# [ #константное выражение# ] #многомерный массив#
!
#префикс описателя#  * #префикс описателя#
!
#вариант с идентификатором#  #идентификатор# 
!		( #уточнение варианта#  )
#уточнение варианта#  (  #уточнение варианта#  ) #вариант массива/функции# 
!		#префикс описателя# #идентификатор#

#список формальных параметров# #описание параметра# #прод. опис. форм. параметра#
!
#прод. опис. форм. параметра# , #прод_1 опис. форм. параметров#
!
#прод_1 опис. форм. параметров# #описание параметра# #прод. опис. форм. параметра#
!   ...
#описание параметра# #спецификация типа#  #описатель параметра#
!           #идентификатор#
#описатель параметра#  #префикс описателя параметра# #прод. описан параметра#
!               #прод. описан параметра#
#префикс описателя параметра# * #продолж префикса описателя параметра#
#продолж префикса описателя параметра# *  #префикс описателя параметра#
!
#прод. описан параметра# #вариант с идентификатором# #вариант массива/функции#
!

#список описания параметров# #описание группы параметров#  #продолжение списка опис. параметров#
!
#продолжение списка опис. параметров# #список описания параметров#
#описание группы параметров# #спецификация типа# #описатель# #продолжение опис. группы параметров#
#продолжение опис. группы параметров# ,  #описатель# #продолжение опис. группы параметров#
!		;

#инициатор# = #список инициализации#
!
#список инициализации# #conditional_expr#
!	       { #список инициаторов# #продолжение инициатора#}
#продолжение инициатора#  ,
!		
#список инициаторов# #conditional_expr# #продолжение списка инициаторов#
!		{ #список инициаторов# } #продолжение списка инициаторов#
#продолжение списка инициаторов# , #список инициаторов#
!

#expression# #assignment_expr# #expression_ext#
#expression_ext#  , #assignment_expr#  #expression_ext#
!
#assignment_expr# #conditional_expr#  #assignment_ext#
#assignment_ext#  #assignm_operation# #assignment_expr#
!
#conditional_expr# #logical_OR_expr# #conditional_ext#
#conditional_ext#  ? #expression# : #conditional_expr# 
!
#logical_OR_expr# #logical_AND_expr# #logical_OR_ext#
#logical_OR_ext# || #logical_AND_expr# #logical_OR_ext#
!
#logical_AND_expr# #inclusive_expr# #logical_AND_ext#
#logical_AND_ext# && #inclusive_expr# #logical_AND_ext#
!
#inclusive_expr#  #exclusive_expr#  #inclusive_ext#
#inclusive_ext# | #exclusive_expr#  #inclusive_ext#
!
#exclusive_expr# #AND_expr# #exclusive_ext#
#exclusive_ext# ^  #AND_expr# #exclusive_ext#
!
#AND_expr#   #equality_expr#    #AND_ext#
#AND_ext#  &  #equality_expr#    #AND_ext#
!
#equality_expr# #relation_expr#  #equality_ext#
#equality_ext# == #relation_expr#  #equality_ext#
!              \!= #relation_expr#  #equality_ext#
!
#relation_expr# #shift_expr# #relation_ext#
#relation_ext# #relation_operation#  #shift_expr# #relation_ext#
!
#shift_expr# #additive_expr# #shift_ext#
#shift_ext# >> #additive_expr# #shift_ext#
!	    << #additive_expr# #shift_ext#
!
#additive_expr# #multyply_expr# #additive_ext#
#additive_ext#  + #multyply_expr# #additive_ext#
!		- #multyply_expr# #additive_ext#
!
#multyply_expr#  #cast_expr# #multyply_ext#
#multyply_ext# * #cast_expr# #multyply_ext#
!	       / #cast_expr# #multyply_ext#
!	       % #cast_expr#  #multyply_ext#
!
#unary_expr# #postfix_expr#
!		++ #unary_expr# 
!		-- #unary_expr#
!		#unary_operation#  #cast_expr# 
! 		sizeof #sizeof_ext#
#cast_expr#  ( #имя типа# )  #cast_expr#
!	     #unary_expr#  
#sizeof_ext#    ( #имя типа# )
!            #unary_expr#

#postfix_expr#  #primery_expr# #postfix_ext#
#postfix_ext#  [ #expression# ] #postfix_ext#
!		( #expressin_list# ) #postfix_ext#
!		. #идентификатор#  #postfix_ext#
!		-> #идентификатор# #postfix_ext#
!		++ #postfix_ext#
!		-- #postfix_ext#
!
#expressin_list# #assignment_expr# #expressin_list_ext# 
!
#expressin_list_ext#  , #assignment_expr# #expressin_list_ext# 
!
#primery_expr# #идентификатор#
!		( #expression# )
!		#константа#
!		#строка#

#имя типа# #спецификация типа# #абстрактный описатель#
    
#абстрактный описатель#	 #префикс описателя#  #вариант_1# #вариант массива/функции# 
#вариант_1#     ( #уточнение варианта_1#  )
!               
#уточнение варианта_1#  (  #уточнение варианта_1#  ) #вариант массива/функции#
!	        * #префикс описателя# 

#константное выражение# #conditional_expr# 
!

#составной оператор# { #определение данных# #список операторов# }
#список операторов# #оператор# #список операторов#
!

#оператор#  #составной оператор#
!	    #идентификатор# :  #оператор#
!		#expression# ;
!		if ( #expression# ) #оператор# else #оператор#
!		while ( #expression# ) #оператор#
!		do #оператор# while ( #expression# )
!		for ( #выр_1# ; #выр_2# ; #выр_3# ) #оператор#
!		switch ( #expression# )
			{ #список case-конструкций#
			  #утверждение default#
			  }
!		break ;
!		continue ;
!		return #условие return# ;
!		goto #идентификатор# ;
!		;
#условие return# #expression#
!
#выр_1#	       #expression#
!
#выр_2#	       #expression#
!
#выр_3#		#expression#
!
#список case-конструкций# #case-конструкция# #список case-конструкций#
!	
#case-конструкция# case #conditional_expr# : #список операторов#
#утверждение default# default : #список операторов#

#unary_operation#  &
!	       *
!		-
!		~
!		\!
#assignm_operation# 	=
!		+=
!		-=
!		*=
!		/=
!		%=
!		>>=
!		<<=
!		&=
!		^=
!		|=
#relation_operation#  >
!		>=
!		<
!		<=














	

