diff options
| author | krasimir <krasimir@chalmers.se> | 2015-06-25 09:46:43 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2015-06-25 09:46:43 +0000 |
| commit | c7f18034105beba4a7aad0f835b792080f013559 (patch) | |
| tree | d617116f4b537cb21c5a219e53ac9467cd3578b0 /src/runtime/c/pgf/parser.c | |
| parent | c6cdb66cf2c470233776fbbc5d0a099a969be469 (diff) | |
bugfix in the bottom-up prediction for the parser
Diffstat (limited to 'src/runtime/c/pgf/parser.c')
| -rw-r--r-- | src/runtime/c/pgf/parser.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/runtime/c/pgf/parser.c b/src/runtime/c/pgf/parser.c index 6aa9473ef..7b8fcbe56 100644 --- a/src/runtime/c/pgf/parser.c +++ b/src/runtime/c/pgf/parser.c @@ -1105,7 +1105,9 @@ pgf_parsing_lookahead(PgfParsing *ps, PgfParseState* state, if (seq->idx != NULL) { PgfLexiconIdxEntry* entry = gu_buf_extend(state->lexicon_idx); entry->idx = seq->idx; - entry->offset = (current - ps->sentence); + entry->offset = + (gu_seq_length(seq->syms) == 0) ? state->start_offset + : (size_t) (current - ps->sentence); } if (len+1 <= max) @@ -1218,16 +1220,16 @@ pgf_parsing_predict_lexeme(PgfParsing* ps, PgfItemConts* conts, GuVariantInfo i = { PGF_PRODUCTION_APPLY, entry->papp }; PgfProduction prod = gu_variant_close(i); PgfItem* item = - pgf_new_item(ps, conts, prod); - PgfSymbols* syms = entry->papp->fun->lins[conts->lin_idx]->syms; - item->sym_idx = gu_seq_length(syms); - prob_t prob = item->inside_prob+item->conts->outside_prob; + pgf_new_item(ps, conts, prod); + PgfSymbols* syms = entry->papp->fun->lins[conts->lin_idx]->syms; + item->sym_idx = gu_seq_length(syms); + prob_t prob = item->inside_prob+item->conts->outside_prob; PgfParseState* state = pgf_new_parse_state(ps, offset, BIND_NONE, prob); if (state->viterbi_prob > prob) { state->viterbi_prob = prob; } - gu_buf_heap_push(state->agenda, pgf_item_prob_order, &item); + gu_buf_heap_push(state->agenda, pgf_item_prob_order, &item); } static void |
