summaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2015-06-25 09:46:43 +0000
committerkrasimir <krasimir@chalmers.se>2015-06-25 09:46:43 +0000
commitc7f18034105beba4a7aad0f835b792080f013559 (patch)
treed617116f4b537cb21c5a219e53ac9467cd3578b0 /src/runtime
parentc6cdb66cf2c470233776fbbc5d0a099a969be469 (diff)
bugfix in the bottom-up prediction for the parser
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/c/pgf/parser.c14
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