diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2012-11-12 21:48:22 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2012-11-12 21:48:22 +0000 |
| commit | 182e366f5dc7814695eb9cb2967f5d98e21c38ce (patch) | |
| tree | 22d74a190314c31c2c9278856b23fe65f4cb8e35 /src/runtime | |
| parent | 7ad4436502543b34879910cc8998b93baf81c0ad (diff) | |
a simple refactoring in the statistical parser
Diffstat (limited to 'src/runtime')
| -rw-r--r-- | src/runtime/c/pgf/parser.c | 75 |
1 files changed, 37 insertions, 38 deletions
diff --git a/src/runtime/c/pgf/parser.c b/src/runtime/c/pgf/parser.c index fbe3d8f94..b3df837fd 100644 --- a/src/runtime/c/pgf/parser.c +++ b/src/runtime/c/pgf/parser.c @@ -1559,49 +1559,47 @@ pgf_parsing_item(PgfParseState* before, PgfParseState* after, PgfItem* item) } static void -pgf_parsing_proceed(PgfParseState* state, void** output) { - while (*output == NULL) { - prob_t best_prob = INFINITY; - PgfParseState* before = NULL; - - PgfParseState* st = state; - while (st != NULL) { - if (gu_buf_length(st->agenda) > 0) { - PgfItem* item = gu_buf_get(st->agenda, PgfItem*, 0); - prob_t item_prob = item->inside_prob+item->conts->outside_prob; - if (item_prob < best_prob) { - best_prob = item_prob; - before = st; - } +pgf_parsing_proceed(PgfParseState* state) { + prob_t best_prob = INFINITY; + PgfParseState* before = NULL; + + PgfParseState* st = state; + while (st != NULL) { + if (gu_buf_length(st->agenda) > 0) { + PgfItem* item = gu_buf_get(st->agenda, PgfItem*, 0); + prob_t item_prob = item->inside_prob+item->conts->outside_prob; + if (item_prob < best_prob) { + best_prob = item_prob; + before = st; } - st = st->next; } + st = st->next; + } - if (before == NULL) - break; + if (before == NULL) + return; - PgfParseState* after = NULL; + PgfParseState* after = NULL; - st = state; - while (st != before) { - PgfParseState* tmp = st->next; - st->next = after; - after = st; - st = tmp; - } + st = state; + while (st != before) { + PgfParseState* tmp = st->next; + st->next = after; + after = st; + st = tmp; + } - PgfItem* item; - gu_buf_heap_pop(before->agenda, &pgf_item_prob_order, &item); - pgf_parsing_item(before, after, item); + PgfItem* item; + gu_buf_heap_pop(before->agenda, &pgf_item_prob_order, &item); + pgf_parsing_item(before, after, item); - while (after != NULL) { - PgfParseState* tmp = after->next; - after->next = before; - before = after; - after = tmp; - } - state = before; + while (after != NULL) { + PgfParseState* tmp = after->next; + after->next = before; + before = after; + after = tmp; } + state = before; } static PgfParsing* @@ -1693,7 +1691,8 @@ pgf_parser_next_state(PgfParseState* prev, PgfToken tok, GuPool* pool) pgf_new_parse_state(prev->ps, prev, ts, pool); state->ps->target = NULL; - pgf_parsing_proceed(state, (void**) &state->ps->target); + while (state->ps->target == NULL) + pgf_parsing_proceed(state); if (state->ps->target != NULL) { return state; } @@ -1815,8 +1814,8 @@ pgf_parse_result_next(PgfParseResult* pr, GuPool* pool) for (;;) { if (pr->state->ps->completed == NULL) { - pgf_parsing_proceed(pr->state, - (void**) &pr->state->ps->completed); + while (pr->state->ps->completed == NULL) + pgf_parsing_proceed(pr->state); if (pr->state->ps->completed == NULL) return NULL; pgf_result_cat_init(pr, NULL, 0, pr->state->ps->completed); |
