Пример #1
0
static void first(CC_Class *cc, PT_Symbols symbols) {
  PT_Symbol symbol;
  CC_Class *set;

  while(!PT_isSymbolsEmpty(symbols)) {
    symbol = PT_getSymbolsHead(symbols);
    symbols = PT_getSymbolsTail(symbols);

    set = get_first_set(symbol, ATtrue);
    CC_union(cc, set, cc);
    if (!CC_containsChar(set, CC_EPSILON)) {
      CC_removeChar(cc, CC_EPSILON);
      return;
    }
  }
  CC_addChar(cc, CC_EPSILON);
}
Пример #2
0
static void test_sets() {
  CC_Set set;
  CC_Class *cc[10];

  CC_initSet(&set);

  cc[0] = CC_addToSet(&set);
  CC_addChar(cc[0], 1);
  CC_addChar(cc[0], 2);
  CC_addChar(cc[0], 3);
  CC_addChar(cc[0], 9);
  CC_addChar(cc[0], 10);
  CC_addChar(cc[0], 11);

  cc[1] = CC_addToSet(&set);
  CC_addChar(cc[1], 3);
  CC_addChar(cc[1], 4);

  cc[2] = CC_addToSet(&set);
  CC_addChar(cc[2], 4);
  CC_addChar(cc[2], 5);
  CC_addChar(cc[2], 6);
  CC_addChar(cc[2], 7);
  CC_addChar(cc[2], 8);

  cc[3] = CC_addToSet(&set);
  CC_addChar(cc[3], 3);
  CC_addChar(cc[3], 8);
  CC_addChar(cc[3], 9);

  CC_partitionSet(&set);

  /*
  printf("partitioned set:\n");
  CC_writeSetToFile(stdout, &set);
  printf("\n");
  */

  CC_flushSet(&set);

  cc[0] = CC_addToSet(&set);
  CC_addATermClass(cc[0], ATparse("char-class([range(65,90)])"));

  cc[1] = CC_addToSet(&set);
  CC_addATermClass(cc[1], ATparse("char-class([range(65,90)])"));

  cc[2] = CC_addToSet(&set);
  CC_addATermClass(cc[2], ATparse("char-class([76])"));

  CC_partitionSet(&set);

  /*
  printf("partitioned set:\n");
  CC_writeSetToFile(stdout, &set);
  printf("\n");
  */
}