diff options
| author | krangelov <kr.angelov@gmail.com> | 2019-06-30 08:48:23 +0200 |
|---|---|---|
| committer | krangelov <kr.angelov@gmail.com> | 2019-06-30 08:48:23 +0200 |
| commit | 32379a8d1118838e8f3487e1c54ab6eee813e7a5 (patch) | |
| tree | ded3e3ec5e5537fccb1760f04d0bb5d31bbbd8d5 /src/runtime/c/pgf/parser.c | |
| parent | b56591c6b6b3315bdb97164dca574c43292f4d98 (diff) | |
fully supported case-insensitive parsing/lookup
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 baf1e3eb3..be672d571 100644 --- a/src/runtime/c/pgf/parser.c +++ b/src/runtime/c/pgf/parser.c @@ -1078,8 +1078,8 @@ pgf_parsing_scan_helper(PgfParsing *ps, PgfParseState* state, ptrdiff_t len = current.ptr - start.ptr; found = true; - if (min <= len-1) - pgf_parsing_scan_helper(ps, state, i, k-1, min, len-1); + if (min <= len) + pgf_parsing_scan_helper(ps, state, i, k-1, min, len); // Here we do bottom-up prediction for all lexical categories. // The epsilon productions will be predicted in top-down @@ -1141,8 +1141,8 @@ pgf_parsing_scan_helper(PgfParsing *ps, PgfParseState* state, } } - if (len+1 <= max) - pgf_parsing_scan_helper(ps, state, k+1, j, len+1, max); + if (len <= max) + pgf_parsing_scan_helper(ps, state, k+1, j, len, max); break; } @@ -1633,6 +1633,9 @@ pgf_parsing_set_default_factors(PgfParsing* ps, PgfAbstr* abstr) } } +PGF_INTERNAL_DECL bool +pgf_is_case_sensitive(PgfConcr* concr); + static PgfParsing* pgf_new_parsing(PgfConcr* concr, GuString sentence, PgfCallbacksMap* callbacks, PgfOracleCallback* oracle, @@ -1643,8 +1646,7 @@ pgf_new_parsing(PgfConcr* concr, GuString sentence, ps->pool = pool; ps->out_pool = out_pool; ps->sentence = sentence; - ps->case_sensitive = - (gu_seq_binsearch(concr->cflags, pgf_flag_order, PgfFlag, "case_sensitive") == NULL); + ps->case_sensitive = pgf_is_case_sensitive(concr); ps->expr_queue = gu_new_buf(PgfExprState*, pool); ps->max_fid = concr->total_cats; ps->before = NULL; |
