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); }
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"); */ }