No longer set state zero to be final in fsa_init()

This commit is contained in:
Camden Dixie O'Brien 2024-10-29 13:14:10 +00:00
parent d35fa4e9da
commit 730ec80220
3 changed files with 6 additions and 4 deletions

View File

@ -118,6 +118,7 @@ static void construct_base(fsa_t *out, int symbol)
const int id = fsa_add_state(out); const int id = fsa_add_state(out);
fsa_add_rule(out, id, out->initial, symbol); fsa_add_rule(out, id, out->initial, symbol);
out->initial = id; out->initial = id;
out->states[0].final = true;
} }
static void construct_star(fsa_t *out) static void construct_star(fsa_t *out)
@ -186,6 +187,7 @@ static void construct_union(fsa_t *f, const fsa_t *o)
memcpy(&g, f, sizeof(fsa_t)); memcpy(&g, f, sizeof(fsa_t));
fsa_init(f); fsa_init(f);
f->states[0].final = true;
f->initial = fsa_add_state(f); f->initial = fsa_add_state(f);
int init, final; int init, final;

View File

@ -19,7 +19,7 @@ void fsa_init(fsa_t *fsa)
assert(NULL != fsa->states); assert(NULL != fsa->states);
fsa->initial = fsa_add_state(fsa); fsa->initial = fsa_add_state(fsa);
fsa->states[fsa->initial].final = true; fsa->states[fsa->initial].final = false;
} }
void fsa_free(const fsa_t *fsa) void fsa_free(const fsa_t *fsa)

View File

@ -30,11 +30,11 @@ static void new_fsa_initial_state_has_no_rules(void)
fsa_free(&fsa); fsa_free(&fsa);
} }
static void new_fsa_initial_state_is_final(void) static void new_fsa_initial_state_is_not_final(void)
{ {
fsa_t fsa; fsa_t fsa;
fsa_init(&fsa); fsa_init(&fsa);
ASSERT_TRUE(fsa.states[fsa.initial].final); ASSERT_FALSE(fsa.states[fsa.initial].final);
fsa_free(&fsa); fsa_free(&fsa);
} }
@ -101,7 +101,7 @@ int main(void)
new_fsa_has_single_state_with_no_rules(); new_fsa_has_single_state_with_no_rules();
new_fsa_has_initial_state_zero(); new_fsa_has_initial_state_zero();
new_fsa_initial_state_has_no_rules(); new_fsa_initial_state_has_no_rules();
new_fsa_initial_state_is_final(); new_fsa_initial_state_is_not_final();
adding_state_increases_count(); adding_state_increases_count();
added_state_is_not_final(); added_state_is_not_final();
added_state_has_no_rules(); added_state_has_no_rules();