Example #1
0
int main(void)
{
	CharVector *x = CharVector_new();
	CharVector_insert_array(x, 0, "aaaa", 4);
	CharVector_push_back(x, '\0');
	printf("%s\n", CharVector_at(x, 0));
	printf("size:%d\n", CharVector_size(x));

	CharVector_pop_back(x);
	CharVector_insert_array(x, CharVector_size(x), "bbbb", 4);
	CharVector_push_back(x, '\0');
	printf("%s\n", CharVector_at(x, 0));
	printf("size:%d\n", CharVector_size(x));

	*CharVector_at(x, 0) = 'c';
	*CharVector_at(x, 1) = 'd';
	*CharVector_at(x, 4) = 'e';
	*CharVector_at(x, 5) = 'f';
	printf("%s\n", CharVector_at(x, 0));

	CharVector_erase(x, 2, 4);
	printf("%s\n", CharVector_at(x, 0));

	CharVector_insert(x, 0, 'g');
	CharVector_insert(x, 0, 'h');
	CharVector_insert(x, 0, 'i');
	CharVector_insert_array(x, 0, "jklm", 4);
	printf("%s\n", CharVector_at(x, 0));

	CharVector_delete(x);
	return 0;
}
Example #2
0
Machine* createMachine_palindrome() {

    StringVector* states = StringVector_new();
    StringVector_append(states, "New");
    StringVector_append(states, "Next");
    StringVector_append(states, "Accept");
    StringVector_append(states, "Reject");
    StringVector_append(states, "A");
    StringVector_append(states, "B");
    StringVector_append(states, "C");
    StringVector_append(states, "EndA");
    StringVector_append(states, "EndB");
    StringVector_append(states, "EndC");

    CharVector* input_alphabet = CharVector_new();
    CharVector_append(input_alphabet, 'a');
    CharVector_append(input_alphabet, 'b');
    CharVector_append(input_alphabet, 'c');

    CharVector* tape_alphabet = CharVector_clone(input_alphabet);
    CharVector_append(tape_alphabet, BLANK_SYMBOL);
    CharVector_append(tape_alphabet, WILDCARD_SYMBOL);
    CharVector_append(tape_alphabet, 'X');

    char* initial_state = "New";

    StringVector* accepting_states = StringVector_new();
    StringVector_append(accepting_states, "Accept");

    TransitionFunction* function = TransitionFunction_new();

    // Get a new character to inspect
    TransitionFunction_addRule(function,     "New",    BLANK_SYMBOL, "Accept", BLANK_SYMBOL, RIGHT);
    TransitionFunction_addRule(function,     "New",             'X', "Accept",          'X', RIGHT);
    TransitionFunction_addRule(function,     "New",             'a',      "A",          'X', RIGHT);
    TransitionFunction_addRule(function,     "New",             'b',      "B",          'X', RIGHT);
    TransitionFunction_addRule(function,     "New",             'c',      "C",          'X', RIGHT);

    // Now find the end character
    TransitionFunction_addRule(function,       "A",    BLANK_SYMBOL,   "EndA",    BLANK_SYMBOL, LEFT);
    TransitionFunction_addRule(function,       "B",    BLANK_SYMBOL,   "EndB",    BLANK_SYMBOL, LEFT);
    TransitionFunction_addRule(function,       "C",    BLANK_SYMBOL,   "EndC",    BLANK_SYMBOL, LEFT);
    TransitionFunction_addRule(function,       "A",             'X',   "EndA",             'X', LEFT);
    TransitionFunction_addRule(function,       "B",             'X',   "EndB",             'X', LEFT);
    TransitionFunction_addRule(function,       "C",             'X',   "EndC",             'X', LEFT);
    TransitionFunction_addRule(function,       "A", WILDCARD_SYMBOL,      "A", WILDCARD_SYMBOL, RIGHT);
    TransitionFunction_addRule(function,       "B", WILDCARD_SYMBOL,      "B", WILDCARD_SYMBOL, RIGHT);
    TransitionFunction_addRule(function,       "C", WILDCARD_SYMBOL,      "C", WILDCARD_SYMBOL, RIGHT);

    // If the character prior to the end is uppercase, we've checked every character
    TransitionFunction_addRule(function,    "EndA",             'X', "Accept",             'X', RIGHT);
    TransitionFunction_addRule(function,    "EndB",             'X', "Accept",             'X', RIGHT);
    TransitionFunction_addRule(function,    "EndC",             'X', "Accept",             'X', RIGHT);

    // If the character prior to the end is lowercase, we still have characters to check
    TransitionFunction_addRule(function,    "EndA",             'a',   "Next",             'X', LEFT);
    TransitionFunction_addRule(function,    "EndB",             'b',   "Next",             'X', LEFT);
    TransitionFunction_addRule(function,    "EndC",             'c',   "Next",             'X', LEFT);

    // Once we've found the beginning, check a new character
    TransitionFunction_addRule(function,    "Next",             'X',    "New",             'X', RIGHT);

    // If we haven't reach the beginning, keep going
    TransitionFunction_addRule(function,    "Next", WILDCARD_SYMBOL,   "Next", WILDCARD_SYMBOL, LEFT);

    Machine* machine = Machine_new("Palindrome", states, input_alphabet, tape_alphabet,
                                   initial_state, accepting_states, function);

    StringVector_delete(states);
    CharVector_delete(input_alphabet);
    CharVector_delete(tape_alphabet);
    StringVector_delete(accepting_states);
    TransitionFunction_delete(function);

    return machine;
}