таблиці.  
 В· Enum блок - визначення С + + енумераторов, використовуваних у визначенні таблиці. 
  В· Code блок - блок сирого С + + коду встраімого безпосереднього в результуючий файл. 
  Транслятор складається з 3 основних частин лексики, семантики і пускового модуля, написаних на мові Perl. 
  Лексичний аналізатор створений з урахуванням цієї граматики і має наступний інтерфейс. 
  Prepare (array of lines);// Normal result == 0 
  token Next (); 
  Він підтримує також препроцессірованіе на рівні вкладень include. 
  Семантичний аналізатор складається з API, що викликаються як обробники подій (для інтерфейсу yapp вказуються у визначенні граматики). 
  Пусковий модуль є оболонкою для запуску синтаксичного аналізатора, з розбором вхідних параметрів 
  Формат: 
  1) HibaseCompiler.pl [-f ім'я файлу] [-p шлях до hibase] [-d каталог, куди приміщ. сген стаб] 
  2) program | HibaseCompiler.pl [-p шлях до hibase] [-d каталог, куди приміщ. сген стаб]. 
    6.Прімер роботи програми  
   В якості прикладу розглянемо таке визначення бази даних 
   Tables  .   def  
  code def top 
  {* 
  # include 
  # include 
  # include 
  # include 
   # include "../Hblib/consts.hh" 
  # include "../Hblib/ll.hh" 
  # include "../Hblib/utils.hh" 
  # include "../Hblib/hdb.hh" 
   # include "Tbmain.hh" 
  # include "Dbmain.hh" 
  *} 
   option 
  {
  file = "Main"; 
  namespace = "Hb"; 
 }; 
   table supplier 
  {
  char [12] name.!;// key uh;// unq, hash 
  char [40] desc; 
 }; 
   table thing 
  {
  supplier + tsupplier;// зовнішнє посилання 
  char [12] name.!;// key uh;// unq, hash 
  char [40] desc; 
 }; 
  end 
   У результаті роботи транслятора отримуємо 3 файлу: файл опису структур записів таблиць, файл визначення самих таблиць та бази і файл її реалізації: 
   hbmain.hh  
   namespace hb {
  using namespace hb; 
  class mainEnv; 
   struct supplierKey 
  {
  db_recno_t key; 
   inline void Export (FILE * f); 
  inline void Import (char *, uint); 
  supplierKey (const db_recno_t & key_temp); 
  supplierKey () {} 
 } __attribute__ ((Packed)); 
  struct supplierVal 
  {
  char name [12]; 
				
				
				
				
			  char desc [40]; 
   inline void Export (FILE * f); 
  inline void Import (char *, uint); 
  supplierVal (char * name_temp, char * desc_temp); 
  supplierVal () {} 
 } __attribute__ ((Packed)); 
  class qsupplier: public hbTable {
  mainEnv & menv; 
  public: 
  qsupplier (mainEnv &); 
  inline void RefInit (); 
  static void GetRef_supplier (uint, char *, char *, db_recno_t * &, uint &); 
  static int qsupplier :: idx_name (Db * db, const Dbt * pk, const Dbt * pv, Dbt * fv); 
 }; 
  struct isupplier_na me 
  {
  char name [12]; 
  char * Getname () {return name;} 
  isupplier_name (char * name_temp); 
 } __attribute__ ((Packed)); 
  // --------------------------------------------- --------------------------------- 
   struct thingKey 
  {
  db_recno_t key; 
   inline void Export (FILE * f); 
  inline void Import (char *, uint); 
  thingKey (const db_recno_t & key_temp); 
  thingKey () {} 
 } __attribute__ ((Packed)); 
  struct thingVal 
  {
  db_recno_t tsupplier; 
  char name [12]; 
  char desc [40]; 
   inline void Export (FILE * f); 
  inline void Import (char *, uint); 
  thingVal (const db_recno_t & tsupplier_temp, char * name_temp, char * desc_temp); 
  thingVal () {} 
 } __attribute__ ((Packed)); 
    class qthing: public hbTable {
  mainEnv & menv; 
  public: 
  qthing (mainEnv &); 
  inline void RefInit (); 
  static void GetRef_thing (uint, char *, char *, db_recno_t * &, uint &); 
  static int qthing :: idx_name (Db * Db, const Dbt * pk, const Dbt * pv, Dbt * fv); 
 }; 
  struct ithing_name 
  {
  char name [12]; 
  char * Getname () {return name;} 
  ithing_name (char * name_temp); 
 } __attribute__ ((Packed)); 
  // --------------------------------------------- --------------------------------- 
 }; 
    dbmain.hh  
   namespace hb {
  using namespace hb; 
  enum idxNames {
  dbn_supplier_name = 0, dbn_thing_name = 0}; 
  class mainEnv; 
  class mainEnv: public...