示例#1
0
static void test_chars() {
  CC_Class *cc[CC_BITS], *cc_input, *temp, *all;
  ATerm input, output;
  int i;
 
  input = ATparse("char-class([0,range(9,10),12,23,range(30,50),range(128,256)])");
  cc_input = CC_ClassFromTerm(input);

  temp = CC_makeClassEmpty();
  CC_addATermClass(temp, input);
  assert(CC_isEqual(temp, cc_input));
  CC_free(temp);

  temp = CC_makeClassEmpty();
  assert(CC_isEmpty(temp));
  for (i=0; i<CC_BITS; i++) {
    cc[i] = CC_ClassFromInt(i);
    if (i == CC_EOF) {
      assert(CC_isEOF(cc[i]));
    } else {
      assert(!CC_isEOF(cc[i]));
    }
    CC_union(temp, cc[i], temp);
    assert(!CC_isEOF(temp));
  }
  all = CC_makeClassAllChars();
  assert(!CC_isEmpty(all));

  assert(CC_isEqual(temp, all));
  CC_difference(temp, all, temp);
  assert(CC_isEmpty(temp));

  CC_copy(all, temp);
  CC_difference(temp, cc_input, temp);
  CC_complement(temp, temp);
  assert(CC_isEqual(temp, cc_input));


  CC_copy(all, temp);
  CC_difference(temp, cc_input, temp);
  CC_union(temp, cc_input, temp);
  assert(CC_isEqual(temp, all));

  CC_copy(all, temp);
  CC_intersection(temp, cc_input, temp);
  assert(CC_isEqual(temp, cc_input));

  assert(CC_isSubset(cc_input, all));

  output = CC_ClassToTerm(cc_input);
  /*
  ATwarning("input = %t\noutput = %t\n", input, output);
  assert(ATisEqual(output, input));
  */
}
示例#2
0
CC_Class *first_no_epsilon(PT_Symbols symbols) {
  CC_Class *result;

  result = CC_makeClassEmpty();
  first(result, symbols);
  CC_removeChar(result, CC_EPSILON);

  return result;
}
示例#3
0
CC_Class *get_first_set(PT_Symbol symbol, ATbool create) {
  long index;
  int old_size;

  /* Associate a unique integer with a symbol. */
  index = internSymbol(symbol);
  if (index >= max_first_sets) {
    old_size = max_first_sets;
    max_first_sets *= 2;
    first_sets = (CC_Class **)realloc(first_sets, max_first_sets*sizeof(CC_Class *));
    if (!first_sets) {
      ATerror("out of memory in get_first_set %d\n", max_first_sets);
    }
    memset(&first_sets[old_size], 0, old_size*sizeof(CC_Class *));
  }
  if (create && first_sets[index] == NULL) {
    first_sets[index] = CC_makeClassEmpty();
  }

  return first_sets[index];
}