Support {} quantifier syntax in regexes

This commit is contained in:
Max Brunsfeld 2018-07-25 10:51:54 -07:00
parent 16376c43f5
commit e88dd223b2
2 changed files with 141 additions and 0 deletions

View file

@ -274,6 +274,76 @@ describe("parse_regex", []() {
CharacterSet{{'/'}},
}),
},
{
"characters with quantifiers",
"a{3}",
Rule::seq({
CharacterSet{{'a'}},
CharacterSet{{'a'}},
CharacterSet{{'a'}},
}),
},
{
"character classes with quantifiers",
"[a-f]{3}",
Rule::seq({
CharacterSet().include('a', 'f'),
CharacterSet().include('a', 'f'),
CharacterSet().include('a', 'f'),
}),
},
{
"characters with open range quantifiers",
"a{,} b{1,} c{,2}",
Rule::seq({
Rule::seq({
Repeat{CharacterSet{{'a'}}},
}),
CharacterSet{{' '}},
Rule::seq({
CharacterSet{{'b'}},
Repeat{CharacterSet{{'b'}}},
}),
CharacterSet{{' '}},
Rule::seq({
Rule::choice({CharacterSet{{'c'}}, Blank{}}),
Rule::choice({CharacterSet{{'c'}}, Blank{}}),
}),
}),
},
{
"characters with closed range quantifiers",
"a{2,4}",
Rule::seq({
CharacterSet{{'a'}},
CharacterSet{{'a'}},
Rule::choice({CharacterSet{{'a'}}, Blank{}}),
Rule::choice({CharacterSet{{'a'}}, Blank{}}),
}),
},
{
"curly braces that aren't quantifiers",
"a{1b} c{2,d}",
Rule::seq({
CharacterSet{{'a'}},
CharacterSet{{'{'}},
CharacterSet{{'1'}},
CharacterSet{{'b'}},
CharacterSet{{'}'}},
CharacterSet{{' '}},
CharacterSet{{'c'}},
CharacterSet{{'{'}},
CharacterSet{{'2'}},
CharacterSet{{','}},
CharacterSet{{'d'}},
CharacterSet{{'}'}},
}),
}
};
struct InvalidInputRow {
@ -313,6 +383,11 @@ describe("parse_regex", []() {
"a]",
"unmatched close square bracket",
},
{
"numbers out of order in range quantifiers",
"a{3,1}",
"numbers out of order in {} quantifier",
},
};
for (auto &row : valid_inputs) {