summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf/parser.c
diff options
context:
space:
mode:
authorkrangelov <kr.angelov@gmail.com>2019-06-30 08:48:23 +0200
committerkrangelov <kr.angelov@gmail.com>2019-06-30 08:48:23 +0200
commit32379a8d1118838e8f3487e1c54ab6eee813e7a5 (patch)
treeded3e3ec5e5537fccb1760f04d0bb5d31bbbd8d5 /src/runtime/c/pgf/parser.c
parentb56591c6b6b3315bdb97164dca574c43292f4d98 (diff)
fully supported case-insensitive parsing/lookup
Diffstat (limited to 'src/runtime/c/pgf/parser.c')
-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 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;