Exemple #1
0
tchildrencount count()
    {
    if(next)
        return 1 + next->count();
    else
        return 1;
    }
Exemple #2
0
    int cmp(const Lemma * lt)
        {
        assert(Type != 0);
        assert(lt->Type != 0);
        int strdif = strcmp(Type,lt->Type);
        if(strdif)
            return strdif;

        assert(BaseForm != 0);
        assert(lt->BaseForm != 0);
        strdif = strcmp(BaseForm,lt->BaseForm);
        if(strdif)
            return strdif;

        if(S.Offset > lt->S.Offset)
            return 1;
        else if(S.Offset < lt->S.Offset)
            return -1;

        if(S.frequency > lt->S.frequency)
            return 1;
        else if(S.frequency < lt->S.frequency)
            return -1;

        if(next)
            {
            assert(lt->next);
            return next->cmp(lt->next);
            }
        else
            return 0;
        }
Exemple #3
0
 int print(FILE * fp)
     {
     fprintf(fp,"%d %s %s %d",S.Offset,BaseForm,Type,S.frequency);
     if(next)
         {
         fprintf(fp,",");
         return 1 + next->print(fp);
         }
     return 1;
     }
Exemple #4
0
tcount strcnt()
    {
    tcount ret = 0;
    if(*Type)
        ret = 1;
    if(*BaseForm)
        ret += 1;
    if(next)
        ret += next->strcnt();
    return ret;
    }
Exemple #5
0
 void move(tcount pos)
     {
     LEMMAS[pos].Type = Type;
     LEMMAS[pos].BaseForm = BaseForm;
     LEMMAS[pos].S = S;
     if(next)
         {
         LEMMAS[pos].next = LEMMAS + pos + 1;
         next->move(pos + 1);
         }
     }
Exemple #6
0
 bool addFreq(char * lextype,int n,char * bf,bool relaxed,unsigned int offset)
     {
     bool added = false;
     int off = offset - S.Offset;
     if(!strcmp(lextype,Type) && (!bf || /*S.Offset == offset*/ off >= 0))
         {
         if(relaxed) 
             {
             assert(bf);
             char * bfoff = bf + S.Offset;
             int len = strlen(bfoff);
             if(!strncmp(BaseForm,bfoff,len) && BaseForm[len] == ',')
                 {
                 S.frequency += n;
                 added = true;
                 //return true;
                 }
             }
         else
             {
             if(!bf || !strcmp(bf + S.Offset,BaseForm))
                 {
                 S.frequency += n;
                 added = true;
                 //return true;
                 }
             }
         }
     /*else*/ // Full form may have several (equal or different) base forms
              // all having the same type!
     if(next)
         // TODO Bart 20060829. Shouldn't the next line be 
         // return next->addFreq(lextype,n,bf,relaxed,offset) || added;
         // ?
         // Bart 20061114 added || added
         return next->addFreq(lextype,n,bf,relaxed,offset) || added;
     else
         {
         if(added)
             {
             return true;
             }
         else
             {
             notypematch++;
             notypematchcnt += n;
             return false;
             }
         }
     }
Exemple #7
0
tcount Lemma::printLemmas(tcount pos,DictNode * parent,FILE * fp)
    {
    if(parent)
        {
        fprintf(fp,PERCLD ": ",pos);
        }
    fprintf(fp,"%d %s %s %d",S.Offset,BaseForm,Type,S.frequency);
    if(next)
        {
        fprintf(fp,",");
        return next->printLemmas(pos + 1,NULL,fp);
        }
    else
        return pos + 1;
    }
Exemple #8
0
 bool add(char * lextype,char * baseform,int offset)
     {
     if(  strcmp(lextype,Type) 
       || strcmp(baseform,BaseForm)
       || (unsigned int)offset != S.Offset
       )
         {
         if(next)
             return next->add(lextype,baseform,offset);
         else
             {
             next = new Lemma(lextype,baseform,offset);
             return true;
             }
         }
     return false;
     }
Exemple #9
0
 bool addFreq(char * lextype,int n,char * bf,bool relaxed,ptrdiff_t offset)/*20120709 unsigned int -> ptrdiff_t*/
     {
     bool added = false;
     ptrdiff_t off = offset - S.Offset;/*20120709 int -> ptrdiff_t*/
     if(!strcmp(lextype,Type) && (!bf || off >= 0))
         {
         if(relaxed) 
             {
             assert(bf);
             char * bfoff = bf + S.Offset;
             size_t len = strlen(bfoff); 
             if(!strncmp(BaseForm,bfoff,len) && BaseForm[len] == ',')
                 {
                 S.frequency += n;
                 added = true;
                 //return true;
                 }
             }
         else
             {
             if(!bf || !strcmp(bf + S.Offset,BaseForm))
                 {
                 S.frequency += n;
                 added = true;
                 //return true;
                 }
             }
         }
     /*else*/ // Full form may have several (equal or different) base forms
              // all having the same type!
     if(next)
         return next->addFreq(lextype,n,bf,relaxed,offset) || added;
     else
         {
         if(added)
             {
             return true;
             }
         else
             {
             notypematch++;
             notypematchcnt += n;
             return false;
             }
         }
     }
Exemple #10
0
 void getStrings()
     {
     if(*Type)
         pstrings[istrings++] = &Type;
     else
         {
         delete [] Type;
         Type = nul;
         }
     if(*BaseForm)
         pstrings[istrings++] = &BaseForm;
     else
         {
         delete [] BaseForm;
         BaseForm = nul;
         }
     if(next)
         next->getStrings();
     }
Exemple #11
0
 int cmp(const Lemma * lt)
     {
     int d = Type - lt->Type;
     if(d)
         return d;
     d = BaseForm - lt->BaseForm;
     if(d)
         return d;
     d = S.Offset - lt->S.Offset;
     if(d)
         return d;
     d = S.frequency - lt->S.frequency;
     if(d)
         return d;
     if(next)
         {
         assert(lt->next);
         return next->cmp(lt->next);
         }
     else
         return 0;
     }
Exemple #12
0
 void Lemmacnt(tcount * nLemmas)
     {
     ++*nLemmas;
     if(next)
         next->Lemmacnt(nLemmas);
     }