Ðåôåðàòû. Ðåàëèçàöèÿ âûñîêîóðîâíåãî èíòåðôåéñà âîêðóã áàçû äàííûõ Berclee DB

            |   idxmod1 id '(' flist1 ')' '{*' rawcode '*}' 

           {[0,$_[1],$_[2],$_[4],$_[7]]}

            |   idxmod2 id '(' flist2 ')'                               {[1,$_[1],$_[2],$_[4],'']}

            |   idxmod2 id '(' flist2 ')' '{*' rawcode '*}'

            {[1,$_[1],$_[2],$_[4],$_[7]]}

;


idxmod1:        '.!'

            |   ':!'

            |   '%!'

;


idxmod2:        '.'

            |   ':'

            |   '%'

;


flist1:         id                                                      {[[$_[1],'']]}

            |   id ',' flist1                                           {unshift

@{$_[3]},[$_[1],''];$_[3]}

;


flist2:         idxmod3 id                                              {[[$_[2],$_[1]]]}

            |   idxmod3 id ',' flist2                                   {unshift

@{$_[4]},[$_[2],$_[1]];$_[4]}

;


idxmod3:        '+'

            |   '-'

            |   '^'

;


#---------------------------------------------------------

codeblock: code 'decl' '{*' rawcode '*}'

                          {tblproc::CodeBlockPrint('hh',  \$_[4],0);}

            |   code 'tab' '{*' rawcode '*}'

                            {tblproc::CodeBlockPrint('tab', \$_[4],0);}

            |   code 'def' '{*' rawcode '*}'

                           {tblproc::CodeBlockPrint('cc',  \$_[4],0);}

            |   code 'def' 'top'  '{*' rawcode '*}'

                    {tblproc::CodeBlockPrint('cc',  \$_[5],1);}

            |   code '{*' rawcode '*}' 

                                {tblproc::CodeBlockPrint('all', \$_[3],0);}

;


#---------------------------------------------------------

enumblock:      'enum' id '{' enumlist '}' ';' 

                        {tblproc::EnumBlockPrint($_[2],$_[4]);}

            |   'enum' id ';'

                                          {tblproc::EnumBlockPrint($_[2],[]);}

;

enumlist:       enumitem                                                {[$_[1]]}

            |   enumitem ',' enumlist                                   {unshift @{$_[3]}, $_[1]; $_[3]}

;

enumitem:       id                                                      {[$_[1],'']}

            |   id '=' num                                              {[$_[1],$_[3]]}

;


#---------------------------------------------------------


structblock:    'struct' id '{' structlist  '}' ';'

                    {tblproc::StructBlockPrint($_[2],$_[4]);}

;


structlist:     structitem                                              {[$_[1]]}

            |   structitem structlist                                   {unshift @{$_[2]}, $_[1]; $_[2]}

;


structitem:     id  pnlistid ';'   

                                    {[$_[1],@{$_[2]}[0],@{$_[2]}[1]]}

;


#---------------------------------------------------------

tableblock:     tableforward  

                       {tblproc::TableBlockPrint(@{$_[1]}[0],'',[],[]);}

            |   tablehead ';' 

                                 {tblproc::TableBlockPrint(@{$_[1]}[0],@{$_[1]}[1],@{$_[1]}[2], []);}

            |   tablehead tail ';' 

                                    {tblproc::TableBlockPrint(@{$_[1]}[0],@{$_[1]}[1],@{$_[1]}[2], $_[2]);}

;


tail:           idxtailitem                                             {$_[1]}

            |   idxtailitem    tail                                     {unshift @{$_[2]},$_[1];$_[2]}

            |   optiontailitem

            |   optiontailitem tail

;


tableforward:   'table' id ';'                                          {[$_[2]]}

;


tablehead: 'table' memmodifid '{' memberlist '}'

                  {[@{$_[2]}[0],@{$_[2]}[1],$_[4]]}

;


memmodifid:     id                                                      {[$_[1],'']}

            |   memmodificator id                                       {[$_[2],'$']}

;


memberlist:     memberitem                                              {[$_[1]]}

            |   memberitem memberlist                                   {unshift @{$_[2]}, $_[1]; $_[2]}

;

memberitem:     id  pnlistid ';' 

                                      {[$_[1],@{$_[2]}[0],@{$_[2]}[1],[]]}

            |   id  pnlistid modificator1 ';' 

                         {[$_[1],@{$_[2]}[0],@{$_[2]}[1],$_[3]]}

;


modificator1:   idxmodificator                                          {[$_[1], '']}

#           |   idxmodificator memmodificator                           {[$_[1], '$','']}

            |   idxmodificator '{*' rawcode '*}'                        {[$_[1],  $_[3]]}

#           |   idxmodificator memmodificator '{*' rawcode '*}'         {[$_[1], '$', $_[4]]}

;


pnlistid:       pnlist id                                               {[$_[1], $_[2]]}

            |   id                                                      {[[],  $_[1]]}

;


pnlist:         pointer                                                 {[$_[1],'']}

            |   pointer array                                           {[$_[1],$_[2]]}

            |   array                                                   {['',$_[1]]}

;


pointer:        '+'

            |   '-'

            |   '*'

;


array:          '[' id ']'                                              {$_[2]}

            |   '[' num ']'                                             {$_[2]}

;


idxmodificator: '.!'

            |   ':!'

            |   '%!'

            |   '.+'

            |   ':+'

            |   '%+'

            |   '.-'

            |   ':-'

            |   '%-'

            |   '.^'

            |   ':^'

            |   '%^'

;


memmodificator: '$'

;


idxtailitem:    'idx' idxitem                                           {[$_[2]]}

            |   'idx' '{' idxitemlist '}'                               {$_[3]}

;




optiontailitem: 'option' '{' oplist '}'

            |   'option' opitem

;

#---------------------------------------------------------

%%

use tblproc;



Îñíîâíûìè êîìïîíåíòàìè ýòîé ãðàììàòèêè ÿâëÿþòñÿ:

·                   option         – ýëåìåíò ÿçûêà, îïðåäåëÿþùèé íàñòðîéêè ê êîíêðåòíîé òàáëèöå.

·                   Idx áëîê     – ýòî áëîê, îïðåäåëÿþùèé ïàðàìåòðû èíäåêñíîé òàáëèöû.

·                   Table áëîê  - áëîê, îïðåäåëÿþùèé òàáëèöó, åå çàïèñè è èíäåêñû.

·                   Struct áëîê - áëîê, àíàëîãè÷åí table, ñ òîé ðàçíèöåé, ãåíåðèðóåò òîëüêî îïðåäåëåíèÿ ñòðóêòóð çàïèñåé áåç îïðåäåëåíèÿ ñàìîé òàáëèöû.

·                   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 <stdio.h>

#include <stdlib.h>

#include <pthread.h>

#include <db_cxx.h>


#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<supplierKey,supplierVal>{

    mainEnv&    menv;

public:

    qsupplier(mainEnv&);

    inline      void RefInit();

Ñòðàíèöû: 1, 2, 3, 4, 5, 6, 7



2012 © Âñå ïðàâà çàùèùåíû
Ïðè èñïîëüçîâàíèè ìàòåðèàëîâ àêòèâíàÿ ññûëêà íà èñòî÷íèê îáÿçàòåëüíà.