/***************************************************************************/ // "Меркурий"-"Правда" - open source переводчик // распространяется в соответсвии с лицензией GNU v 2.0 // // словарь переводов слов и словосочетаний // Анисимов Д.В. сегодня /***************************************************************************/ # ifndef SLOWO3_H # define SLOWO3_H # include <mylib.h> # include <grammar.h> struct t_sWord { long sy ; // ссылка на слово t_Slowo3->Mass char *str ; // ссылка на слово t_Slowo3->Mass short i_struct ; // индекс структуры в t_Grammar->Trans short order ; // смысловой индекс типа<1> t_Form Param ; // константные параметры } ; // -------- структура оригинала или перевода ---------- struct t_sStruct { long sy_word ; // индекс первого слова структуры в t_Slowo3->Word // сюда же можно запихнуть число n_From при трансляции t_sWord *Word ; // ссылка на то же самое short n_Word ; // число слов в этой структуре short i_struct ; // индекс структуры в t_Grammar->Trans t_Form Param ; // константные параметры long i_relation ;// индекс таблицы передачи параметров t_Slowo3->Relation } ; // -------- одна строка перевода ------------------------- struct t_sRecord { long sy_struct, // индекс первой структуры в t_Slowo3->Struct n_struct ; // число таких структур (минимум две) long i_dict ; // индекс словаря }; // --------- элемент дерева поиска ------------------------ struct t_sTree { long up,down,n_down ; long first,last ; // индекс первой и последней (включительно) Record, // входящих в это поддерево short rang ; // номер слова в искомой структуре char empty ; // признак, в поддереве нельзя использовать // алфавитный поиск char unused ; } ; // ---------- словарь переводов --------------------------------------- class t_Slowo3 { private: char FileName[40] ; t_Format1 *Format ; // формат словаря uchar *Mass ; // массив слов, запись типа "S[word]=S[слово]" t_sWord *Word ; // ссылка на одну запись типа "S<1>(Р)[собака]" t_sStruct *Struct ; // ссылка на одну запись типа "GS:@0[a hot]S<1>[dog];" t_sRecord *Record ; // индекс Struct, с которой начинается очередная // запись типа S[word]=S[слово] t_sTree *Tree ; // дерево для поиска структур t_Relation *Relation ;// таблицы передачи параметров long l_Mass,l_Mass1 ; // длинна массива Mass long n_Word ; long n_Struct ; // число структур long n_Record ; // число записей long n_Tree ; // длинна Tree long n_Relation;// длинна Relation private: t_longList Antwort ; // массив ответов public: t_Slowo3( void ); void del( void ); void read( char *Dir, t_Grammar *Gr ); void read( char *File, t_Format1 *Format ); char read_bin( char *File ); void write_bin( char *File ); void make( char *_Mass, t_Format1 *Format ); void s_universe( short i_word, short i_struct ); void find( char *From, short i_struct, t_longList *Antwort ); char *translate_word_i( char *From, long i_slowo, short i_slowo1=0 ); char *translate_word_s( char *From, short i_struct, short i_slowo1=0 ); short part( char *From, short *i_Part ); t_Form struct_param( long i_slowo, long i_variant=0 ); t_Form word_param( long i_slowo, long i_variant, long i_word ); t_Format1 *format( void ); t_sRecord *record( long i_record ); long n_record( void ); char is_atom( long i_record ); t_sTree *tree( long i_tree ); inline t_sStruct *sstruct( long i_struct ); t_sStruct *get_from( long i_slowo ); t_sStruct *get_to( long i_slowo, long i_slowo1=0 ); t_RelationList1 get_relation( long i_slowo, long i_variant ); short get_n_perevod( long i_slowo ); char *word_src( long i_tree ); char *word_src1( long i_slowo ); void print_record( FILE *fw, long i_record ); void print_param( FILE *fw, char to, short i_struct, t_Form &Param ); void add_new( char *Dir, char *str ); private: void read0( char *File ); void make0( char *Mass ); void parse( void ); void make_relation1( char fdst, t_sStruct *S, char *Str ); void make_relation2( char fdst, t_sStruct *S, long i_word, char *Str, long &j_Relation ); short find_value1( short i_struct, short i_param, char fdst, char *Str1 ); short find_rename( char *Str ); void sort0( void ); void split_unorder( void ); void make_tree( void ); void s_universe1( short i_word, long i_tree ); void s_universe2( char *From, short i_word, long i_tree ); char find_bin( char *From1, long i_tree ); char find_bin1( char *From1, long i_tree ); long find_mutt( long i_tree ); long root_of_struct( short i_struct ); friend class t_Core ; }; # endif