Handle . in parse_term()
This commit is contained in:
parent
f434af5c96
commit
a9b8e24007
17
lib/parser.c
17
lib/parser.c
@ -14,6 +14,7 @@ static bool is_special(char c)
|
|||||||
{
|
{
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case '|':
|
case '|':
|
||||||
|
case '.':
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
@ -34,12 +35,18 @@ static int parse_term(const char *input, int rem, term_t *out)
|
|||||||
{
|
{
|
||||||
int result, used = 0;
|
int result, used = 0;
|
||||||
|
|
||||||
result = parse_literal(input + used, rem - used, &out->literal);
|
if (used < rem && '.' == input[0]) {
|
||||||
if (result < 0)
|
out->type = TERM_TYPE_WILDCARD;
|
||||||
return -1;
|
++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->quantifier = QUANTIFIER_NONE;
|
||||||
out->type = TERM_TYPE_LITERAL;
|
|
||||||
used += result;
|
|
||||||
|
|
||||||
return used;
|
return used;
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,19 @@ static void abc_is_parsed_as_sequence_of_unquantified_literals(void)
|
|||||||
regex_free_children(&r);
|
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)
|
int main(void)
|
||||||
{
|
{
|
||||||
TESTING_BEGIN();
|
TESTING_BEGIN();
|
||||||
@ -93,5 +106,6 @@ int main(void)
|
|||||||
a_is_parsed_as_unquantified_literal();
|
a_is_parsed_as_unquantified_literal();
|
||||||
b_is_parsed_as_unquantified_literal();
|
b_is_parsed_as_unquantified_literal();
|
||||||
abc_is_parsed_as_sequence_of_unquantified_literals();
|
abc_is_parsed_as_sequence_of_unquantified_literals();
|
||||||
|
dot_is_parsed_as_unquantified_wildcard_term();
|
||||||
return TESTING_END();
|
return TESTING_END();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user