Skip to content
Snippets Groups Projects
Select Git revision
  • 568cf30a95f4e02efeefe9dd272aceebf355245d
  • master default protected
  • johannes
  • partial_parser
  • Aloui_Dary
  • ignore_punct
  • AC
  • classifier
  • fixhelp
  • libmacaon2
  • error_predictor
  • morpho
  • ssrnn
  • tfparsing
  • silvio
  • tagger_options
  • maca_trans_frame_parser
  • alexis
  • new_config
  • tagparse
  • maca_graph_parser
21 results

depset.c

Blame
  • depset.c 4.22 KiB
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include"depset.h"
    #include"util.h"
    
    depset *depset_new(void)
    {
      depset *d = (depset *)memalloc(sizeof(depset));
      d->length = 1;
      d->array = (dependency *)memalloc(d->length * sizeof(dependency));
      d->array[0].gov = NULL;
      d->array[0].dep = NULL;
      d->array[0].label = -1;
      return d;
    }
    
    void depset_free(depset *d)
    {
      /* int i;  */
      
      /*  for(i=0; i < d->length; i++){
        word_free(d->array[i].dep);
        }*/
      free(d->array);
      free(d);
    }
    
    depset *depset_copy(depset *d)
    {
      int i;
      if(d == NULL) return NULL;
      depset *copy = depset_new();
    
      for(i=0; i < d->length; i++){
        depset_add(copy, d->array[i].gov, d->array[i].label, d->array[i].dep);
      }
      return copy;
    }
    
    void depset_add(depset *d, word *gov, int label, word *dep)
    {
      int i;
      int new_length;
    
      if(gov == NULL || dep == NULL) return;
      word *max = (word_get_index(gov) > word_get_index(dep)) ? gov : dep;
    
      if(word_get_index(max) >= d->length){
        new_length = word_get_index(max) + 1;
        d->array = (dependency *)realloc(d->array, new_length * sizeof(dependency));
        for(i=d->length; i < new_length; i++){
          d->array[i].gov = NULL;
          d->array[i].dep = NULL;
          d->array[i].label = -1;
        }
        d->length = new_length;
      }
      d->array[word_get_index(dep)].gov = gov;
      d->array[word_get_index(dep)].dep = dep;
      d->array[word_get_index(dep)].label = label;
    }
    
    void depset_print(FILE *f, depset *d)
    {
      int i;
      for(i=0; i < d->length; i++){
        if((d->array[i].gov) && (d->array[i].dep))
          fprintf(f, "(%d, %d, %d) ", word_get_index(d->array[i].dep), d->array[i].label, word_get_index(d->array[i].gov));
      }