// **************************************************************************
//   Описание языка Эсперанто в меру моих слабых сил
//   Протранслируйте меня с помощью команды g++ -E -o lang.txt -I. lang.cpp
// **************************************************************************

# define NO_ESTI_S

@Версия 00_00_00

// **************************************************************************
//    Описание атомов
// **************************************************************************
@Атомы_источника
{  // ----------------- язык Эсперанто --------------------
   @Параметр падеж   {  И ,В   };
   @Параметр число   {  Ед,Мн  };
   @Параметр род     {  М,Ж,С  };
   @Параметр лицо    {  1е,2е,3е  };
   @Параметр время   {  прошлое, настоящее, будущее  };
   @Параметр форма   {  Inf,Глагол,Повелит,Услов,Причастие,Прич_пасс,Деепричастие  }; // форма глагола

   @Параметр смысл_наречия {  степени, времени, пространства, частоты, прочее  }; // нс нв нп нч .

   @Часть_речи глагол ( форма Форма, время Время, число Число, падеж Падеж ) ;
   @Часть_речи связка ( форма Форма, время Время, число Число, падеж Падеж ) ;
   @Часть_речи сущ    ( число Число, падеж Падеж );
   @Часть_речи прил   ( число Число, падеж Падеж );
   @Часть_речи прил11  ; // правое определение
   @Часть_речи наречие( смысл_наречия &Смысл ) ;

   @Часть_речи числительное ;   
   @Часть_речи числ_порядковое ;
   @Часть_речи вопрос ;
   @Часть_речи мест( род &Род, лицо &Лицо, число &Число, падеж Падеж );
   @Часть_речи мест_прил( число Число, падеж Падеж );
   @Часть_речи мест_числ ;
   @Часть_речи предлог( падеж &Падеж ) ;
   @Часть_речи союз ;
   @Часть_речи частица ( форма &Форма ) ;
   @Часть_речи затычка ; // часть речи, не входящая ни в какие конструкции

   @Часть_речи вопрос_к_подлежащему_пп( число Число, падеж Падеж );
   @Часть_речи вопрос_к_дополнению_пп = ;
   @Часть_речи вопрос_к_обстоятельству_пп = ;
   @Часть_речи вопрос_к_прил_пп( число Число, падеж Падеж );

   @Структура1 гр_сущ_п0 ( число Число, падеж Падеж ) = сущ( &Число, &Падеж ) ;
   @Структура1 гр_прил_п0( число Ч, падеж П ) = прил( &Ч, &П ) ;

   @Структура1 гр_сущ_п1( число Число, падеж Падеж ) =
               прил( Число1, Падеж1 )
	       сущ( &Число, &Падеж ) ;

   @Множество  @знаковые_части_речи = 
               сущ( &Ч, &П ) прил( &Ч, &П ) глагол( &Ф, &В, &Ч, &П ) наречие( &S ) междометие ;


   # include <format_es.h>

   @Файлы глагол                   формат1  { dicts/zform/esperanto/es_verb_r };
   @Файлы связка                   формат11 { dicts/zform/esperanto/es_esti };
   @Файлы сущ                      формат2  { dicts/zform/esperanto/es_sub_r  };
   @Файлы прил                     формат21 { dicts/zform/esperanto/es_adj_r  };
   @Файлы мест_прил                формат22 { dicts/zform/esperanto/es_rel  };
   @Файлы вопрос_к_подлежащему_пп  формат23 { dicts/zform/esperanto/es_qsub };
   @Файлы вопрос_к_прил_пп         формат24 { dicts/zform/esperanto/es_qadj };
   @Файлы мест                     формат3  { dicts/zform/esperanto/es_pronoun  };
}
// *************************************************************************
//
// *************************************************************************
@Атомы_приемника
{  // ------------------------- русский язык ------------------
   @Параметр падеж   {  И,Р,Д,В,Т,П  };
   @Параметр число   {  Ед,Мн  };
   @Параметр род     {  М,Ж,С,Мн  };
   @Параметр степень {  сравнительная,превосходная  };
   @Параметр лицо    {  1е,2е,3е  };
   @Параметр время   {  прошлое,настоящее,будущее  };
   @Параметр залог   {  Актив,Пассив,Повелит  };
   @Параметр совершенность {  Сов,Несов  };
   @Параметр форма   {  Inf,глагол,причастие,деепричастие  };
   @Параметр вид     {  личное,возвратное  }; // вид местоимения
   @Параметр присутствие { Да,Нет };
   @Параметр душа    {  О,Н  };
   @Параметр ч_падеж {  Уступаю,Р,РВсе };
   @Параметр ч_число {  Ед,Мн,ЕдИ  };

   @Часть_речи глагол ( совершенность СС, форма Форма, лицо Лицо, 
                        число Число, время Время, род Род, залог Залог,
			    падеж Падеж ) ;
   @Часть_речи связка ( совершенность СС, форма Форма, лицо Лицо,
                            число Число, время Время, род Род, залог Залог ) ;
   @Часть_речи сущ  ( род &Род, душа &Душа, падеж Падеж, число Число );
   @Часть_речи прил ( род  Род, душа  Душа, падеж Падеж, число Число );
   @Часть_речи прил11  ; // правое определение
   @Часть_речи наречие ;
   @Часть_речи числительное( ч_падеж &ЧПадеж, ч_число &ЧЧисло, падеж Падеж ) ;
   @Часть_речи числ_порядковое( падеж Падеж ) ;

   @Часть_речи вопрос(  род Род, падеж Падеж, число Число );
   @Часть_речи мест ( род &Род, лицо &Лицо, число &Число, падеж Падеж ); // подлежащее
   @Часть_речи мест_прил ( род  Род, падеж Падеж, число Число );
   @Часть_речи мест_числ ; //( ч_падеж &ЧПадеж, ч_число &ЧЧисло, падеж Падеж ); // должно быть число
   @Часть_речи предлог ( падеж &Падеж ) ;
   @Часть_речи союз ;
   @Часть_речи частица ( присутствие Присутствие ) ;
   @Часть_речи затычка ; // часть речи, не входящая ни в какие конструкции

   @Часть_речи вопрос_к_подлежащему_пп( падеж Падеж ) ;
   @Часть_речи вопрос_к_дополнению_пп = ;
   @Часть_речи вопрос_к_обстоятельству_пп = ;
   @Часть_речи вопрос_к_прил_пп( род  Род, душа  Душа, падеж Падеж, число Число ) ;

   @Структура1 гр_сущ_п0( род Род, душа Душа, падеж &Падеж, число &Число ) =
               сущ( &Род, &Душа, Падеж, Число ) ;
   @Структура1 гр_прил_п0( род &Род, душа &Душа, падеж &Падеж, число &Число ) =
               прил( Род, Душа, Падеж, Число ) ;

   @Структура1 гр_сущ_п1( род Род, душа Душа, падеж &Падеж, число &Число ) =
               прил( Род, Душа, Падеж, Число )
	       сущ( &Род, &Душа, Падеж, Число ) ;
   @Структура1 гр_сущ_п2( род Род, душа Душа, падеж &Падеж, число &Число ) =
	       сущ( &Род, &Душа, Падеж, Число )
	       @1 ;
   @Структура1 гр_сущ_п3( род Род, душа Душа, падеж &Падеж, число &Число ) =
               прил( Род,  Душа, Падеж, Число )
	       сущ( &Род, &Душа, Падеж, Число )
	       @1 ;
   @Структура1 гр_сущ_п4( род Род, душа Душа, падеж &Падеж, число &Число ) =
               прил( Род,  Душа, Падеж, Число )
               прил( Род,  Душа, Падеж, Число )
	       сущ( &Род, &Душа, Падеж, Число ) ;
//   @Структура1 гр_сущ_п5( род Род, душа Душа, падеж &Падеж, число &Число ) =
//	       сущ( &Род, &Душа, Падеж, Число )	       
//	       гр_сущ_а( &Падеж1 ) ;
   @Структура1 гр_сущ_п6( род Род, душа Душа, падеж &Падеж, число &Число ) =
               прил( Род,  Душа, Падеж, Число )
	       сущ( &Род, &Душа, Падеж, Число )
	       сущ( &Род1, &Душа1, &Падеж1, Число ) ;
   @Структура1 гр_сущ_п7( род Род, душа Душа, падеж &Падеж, число &Число ) =
               прил( Род,  Душа, Падеж, Число )
	       сущ( &Род, &Душа, Падеж, Число )
	       @1
	       сущ( &Род1, &Душа1, &Падеж1, Число ) ;
//   @Структура1 гр_сущ_п8( род Род, душа Душа, падеж &Падеж, число &Число ) =
//	       сущ( &Род, &Душа, Падеж, Число )
//	       @1
//	       гр_сущ_а( &Падеж1 );
   @Структура1 гр_сущ_п9( род Род, душа Душа, падеж &Падеж, число &Число ) =
	       @1
	       прил( Род,  Душа, Падеж, Число )
	       сущ( &Род, &Душа, Падеж, Число ) ;
   @Структура1 гр_сущ_п10( род Род, душа Душа, падеж &Падеж, число &Число ) =
	       сущ( &Род, &Душа, Падеж, Число )
	       прил( Род,  Душа, Падеж, Число ) ;

   @Структура1 гр_прил_п1( род &Род, душа &Душа, падеж &Падеж, число &Число ) =
               прил( Род, Душа, Падеж, Число )
	       @1 ;
//   @Структура1 гр_прил_п2( род &Род, душа &Душа, падеж &Падеж, число &Число ) =
//               прил( Род, Душа, Падеж, Число )
//	       гр_сущ_а( &Падеж1 ) ;
   @Структура1 гр_прил_п3( род &Род, душа &Душа, падеж &Падеж, число &Число ) =
               прил( Род, Душа, Падеж, Число )
	       @1
	       сущ( &Род1, Душа, &Падеж1, &Число1 ) ;
   @Структура1 гр_прил_п4( род &Род, душа &Душа, падеж &Падеж, число &Число ) =
   	       @1
               прил( Род, Душа, Падеж, Число )
	       @1 ;
   @Структура1 гр_прил_п5( род &Род, душа &Душа, падеж &Падеж, число &Число ) =
   	       прил( Род, Душа, Падеж, Число )
               прил( Род, Душа, Падеж, Число ) ;
   @Структура1 гр_прил_п6( род &Род, душа &Душа, падеж &Падеж, число &Число ) =
   	       @1
               прил( Род, Душа, Падеж, Число );

   # include <format_r.h>

   @Файлы  глагол                   формат1   { dicts/zform/russkij/ru_verb_r  };
   @Файлы  связка                   формат1_б { dicts/zform/russkij/ru_esti  };
   @Файлы  сущ                      формат2   { dicts/zform/russkij/ru_sub_r };
   @Файлы  прил                     формат3_1 { dicts/zform/russkij/ru_adj_r };
   @Файлы  вопрос                   формат3   { dicts/zform/russkij/ru_quest };
   @Файлы  мест                     формат4_1 { dicts/zform/russkij/ru_pronoun_1 };
   @Файлы  вопрос_к_подлежащему_пп  формат4_2 { dicts/zform/russkij/ru_quest_s };
   @Файлы  вопрос_к_прил_пп         формат3_3 { dicts/zform/russkij/ru_quest_a };
   @Файлы  мест_прил                формат3_2 { dicts/zform/russkij/ru_pronoun_4 };
   @Файлы  частица                  формат5   { dicts/zform/russkij/ru_tiny };
   @Файлы  числительное             формат4   { dicts/zform/russkij/ru_num  };
   @Файлы  числ_порядковое          формат3   { dicts/zform/russkij/ru_num2 };
}
/***************************************************************************/
//    Описание словарей перевода
/***************************************************************************/
@Словари_перевода
{
   @Формат_перевод формат1
   {
      @Псевдоним  нс степени
      @Псевдоним  нв времени 
      @Псевдоним  нп пространства
      @Псевдоним  нч частоты
      @Псевдоним  .  прочее

      @Части_речи_источника
      {
	 v  глагол ;
	 b  связка ;
	 s  сущ    ;
	 a  прил   ;
	 d  наречие ;
	 i  числительное ;
	 ia числ_порядковое ;
	 I  гр_числ2 ;
	 I3 гр_числ3 ;
         o1 мест ;
	 o2 мест_прил ;
	 p  предлог ;
	 PP предлог_п ;
	 c  союз ;
	 t  частица ;
         z  затычка ;
	 zz междометие ;

	 AB прил11 ;

	 DD гр_наречие_пп ;

	 S0 гр_сущ_п0 ;
	 S1 гр_сущ_п1 ;
 	 Sb гр_сущ_пп ;
	 A0 гр_прил_п0 ;
//         SS гр_сущ_И ;
	 Sn сл_сущестительное_И ;
	 Sa сл_сущестительное_В ;
	 
	 V1 глагол_пп ;
	 VV фраза_пп ;
	 F  фраза_повест ;
	 F1 фраза_без_подлежащего ;
	 v1 ядро ;

         QS вопрос_к_подлежащему_пп ;
         QO вопрос_к_дополнению_пп ;
         QV вопрос_к_обстоятельству_пп ;
         QA вопрос_к_прил_пп ;
      }
      @Части_речи_приемника
      {
	 v  глагол ;
	 b  связка ;
	 s  сущ    ;
	 a  прил   ;
	 d  наречие ;
	 i  числительное ;
	 ia числ_порядковое ;
	 I  гр_числ2 ;
	 I3 гр_числ3 ;
         o1 мест ;
	 o2 мест_прил ; 
	 p  предлог ;
	 PP предлог_п ;
	 c  союз ;
	 t  частица ;
         z  затычка ;
	 zz междометие ;

	 AB прил11 ;
	 
 	 DD гр_наречие_пп ;
	 
	 S0 гр_сущ_п0 ;
	 S1 гр_сущ_п1 ;
	 S2 гр_сущ_п2 ;
	 S3 гр_сущ_п3 ;
	 S4 гр_сущ_п4 ;
///	 S5 гр_сущ_п5 ;
	 S6 гр_сущ_п6 ;
	 S7 гр_сущ_п7 ;
//	 S8 гр_сущ_п8 ;
	 S9 гр_сущ_п9 ;
	 SA гр_сущ_п10 ;
	 Sb гр_сущ_пп ;

	 A0 гр_прил_п0 ;
	 A1 гр_прил_п1 ;
//	 A2 гр_прил_п2 ;
	 A3 гр_прил_п3 ;
	 A4 гр_прил_п4 ;
	 A5 гр_прил_п5 ;
 	 A6 гр_прил_п6 ;
//	 AA гр_прил_пп ;

//	 SS гр_сущ_И ;
	 Sn сл_сущестительное_И ;
	 Sa сл_сущестительное_В ;
         F  фраза_повест ;
	 F1 фраза_без_подлежащего ;
	 V1 глагол_пп ;
	 VV фраза_пп ;
	 v1 ядро ;

         QS вопрос_к_подлежащему_пп ;
         QO вопрос_к_дополнению_пп ;
         QV вопрос_к_обстоятельству_пп ;
         QA вопрос_к_прил_пп ;
      }
   }
   @Файлы_препроцессоров  формат1 {  dicts/esperanto_russkij/es_macro  };
   @Файлы_переводов       формат1 {  dicts/esperanto_russkij/base_esru1
                                     dicts/esperanto_russkij/base_esru  };
// @Файлы_постпроцессоров формат1 {  dicts/esperanto_russkij/base_post  };
}
@Словари_человека
{
   @Формат_словаря  формат1 
   {  @Разделитель  = ;
      @Сортировка   0 ;
   }   
   @Файлы_словарей  формат1 { dicts/esperanto_russkij/bokarev  };
}

# define table_chislo( A )       \
   @Таблица( число A = число A ) \
   {  Ед  = Ед ;                 \
      Мн = Мн ;                  \
   }
# define table_lizo( A )       \
   @Таблица( лицо A = лицо A ) \
   {  1е = 1е ;                \
      2е = 2е ;                \
      3е = 3е ;                \
   }
# define table_rod( A )      \
   @Таблица( род A = род A ) \
   {  М = М ;                \
      Ж = Ж ;                \
      С = С ;                \
   }
