From a9b8e240070c1e99a1af925208d518fdc3671a08 Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Fri, 25 Oct 2024 14:16:56 +0100 Subject: [PATCH] Handle . in parse_term() --- lib/parser.c | 17 ++++++++++++----- tests/parser_tests.c | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/parser.c b/lib/parser.c index f4b7b0f..60e724e 100644 --- a/lib/parser.c +++ b/lib/parser.c @@ -14,6 +14,7 @@ static bool is_special(char c) { switch (c) { case '|': + case '.': return true; default: return false; @@ -34,12 +35,18 @@ static int parse_term(const char *input, int rem, term_t *out) { int result, used = 0; - result = parse_literal(input + used, rem - used, &out->literal); - if (result < 0) - return -1; + if (used < rem && '.' == input[0]) { + out->type = TERM_TYPE_WILDCARD; + ++used; + } else { + result = parse_literal(input + used, rem - used, &out->literal); + if (result < 0) + return -1; + out->type = TERM_TYPE_LITERAL; + used += result; + } + out->quantifier = QUANTIFIER_NONE; - out->type = TERM_TYPE_LITERAL; - used += result; return used; } diff --git a/tests/parser_tests.c b/tests/parser_tests.c index 35554c9..1fab8b2 100644 --- a/tests/parser_tests.c +++ b/tests/parser_tests.c @@ -84,6 +84,19 @@ static void abc_is_parsed_as_sequence_of_unquantified_literals(void) regex_free_children(&r); } +static void dot_is_parsed_as_unquantified_wildcard_term(void) +{ + regex_t r = { 0 }; + const int result = PARSE_REGEX_STRING(".", &r); + ASSERT_NE(-1, result); + + ASSERT_EQ(1, r.sequence.len); + ASSERT_EQ(QUANTIFIER_NONE, r.sequence.contents[0].quantifier); + ASSERT_EQ(TERM_TYPE_WILDCARD, r.sequence.contents[0].type); + + regex_free_children(&r); +} + int main(void) { TESTING_BEGIN(); @@ -93,5 +106,6 @@ int main(void) a_is_parsed_as_unquantified_literal(); b_is_parsed_as_unquantified_literal(); abc_is_parsed_as_sequence_of_unquantified_literals(); + dot_is_parsed_as_unquantified_wildcard_term(); return TESTING_END(); }