diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2013-11-01 13:05:17 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2013-11-01 13:05:17 +0000 |
| commit | 981a728d13f5e97aeb1b0406a9bdacf87f3238a8 (patch) | |
| tree | aeff83dcc7ca4cd3825da57603927a84eb6b273f /src/runtime/c | |
| parent | ad7d18a44873fa328200261a612785bc72bf1d8d (diff) | |
fix the robust parser for unknown tokens
Diffstat (limited to 'src/runtime/c')
| -rw-r--r-- | src/runtime/c/pgf/parser.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/runtime/c/pgf/parser.c b/src/runtime/c/pgf/parser.c index 104872b19..4e4724c75 100644 --- a/src/runtime/c/pgf/parser.c +++ b/src/runtime/c/pgf/parser.c @@ -1359,16 +1359,23 @@ static void pgf_parsing_meta_scan(PgfParsing* ps, PgfItem* meta_item, prob_t meta_prob) { -/* PgfToken tok = after->ts->fn->get_token(after->ts); + PgfItem* item = pgf_item_copy(meta_item, ps); + item->inside_prob += meta_prob; - if (*tok == 0) { - PgfItem* item = pgf_item_copy(meta_item, before->ps); - item->inside_prob += meta_prob; + size_t offset = ps->before->end_offset; + while (ps->sentence[offset] != 0 && + !gu_is_space(ps->sentence[offset])) { + offset++; + } + + size_t len = offset - ps->before->end_offset; + char* tok = gu_malloc(ps->pool, len+1); + memcpy(tok, ps->sentence+ps->before->end_offset, len); + tok[len] = 0; - pgf_add_extern_tok(item, tok, ps->pool); + pgf_add_extern_tok(&item->curr_sym, tok, ps->pool); - gu_buf_heap_push(before->agenda, pgf_item_prob_order, &item); - }*/ + gu_buf_heap_push(ps->before->agenda, pgf_item_prob_order, &item); } typedef struct { @@ -1679,7 +1686,7 @@ pgf_parsing_item(PgfParsing* ps, PgfItem* item) if (ps->before->meta_item != NULL) break; ps->before->meta_item = item; - + if (ps->before->end_offset == strlen(ps->sentence)) { PgfExprProb *ep = gu_new(PgfExprProb, ps->pool); ep->expr = ps->meta_var; |
