Rewrite quantifier oeprations
- Simplify control flow by having a single return at the end of the function. - Follow enum order for case order.
This commit is contained in:
parent
1f1a449c76
commit
1d513bcf67
1 changed files with 107 additions and 69 deletions
176
lib/src/query.c
176
lib/src/query.c
|
|
@ -467,90 +467,82 @@ static TSQuantifier quantifier_mul(
|
||||||
TSQuantifier left,
|
TSQuantifier left,
|
||||||
TSQuantifier right
|
TSQuantifier right
|
||||||
) {
|
) {
|
||||||
|
TSQuantifier result;
|
||||||
switch (left)
|
switch (left)
|
||||||
{
|
{
|
||||||
case Zero:
|
case Zero:
|
||||||
return Zero;
|
result = Zero;
|
||||||
case One:
|
|
||||||
return right;
|
|
||||||
case OneOrMore:
|
|
||||||
switch (right) {
|
|
||||||
case Zero:
|
|
||||||
return Zero;
|
|
||||||
case ZeroOrOne:
|
|
||||||
case ZeroOrMore:
|
|
||||||
return ZeroOrMore;
|
|
||||||
case One:
|
|
||||||
case OneOrMore:
|
|
||||||
return OneOrMore;
|
|
||||||
};
|
|
||||||
break;
|
break;
|
||||||
case ZeroOrOne:
|
case ZeroOrOne:
|
||||||
switch (right) {
|
switch (right) {
|
||||||
case Zero:
|
case Zero:
|
||||||
return Zero;
|
result = Zero;
|
||||||
|
break;
|
||||||
case ZeroOrOne:
|
case ZeroOrOne:
|
||||||
case One:
|
case One:
|
||||||
return ZeroOrOne;
|
result = ZeroOrOne;
|
||||||
|
break;
|
||||||
case ZeroOrMore:
|
case ZeroOrMore:
|
||||||
case OneOrMore:
|
case OneOrMore:
|
||||||
return ZeroOrMore;
|
result = ZeroOrMore;
|
||||||
|
break;
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case ZeroOrMore:
|
case ZeroOrMore:
|
||||||
switch (right) {
|
switch (right) {
|
||||||
case Zero:
|
case Zero:
|
||||||
return Zero;
|
result = Zero;
|
||||||
|
break;
|
||||||
case ZeroOrOne:
|
case ZeroOrOne:
|
||||||
case ZeroOrMore:
|
case ZeroOrMore:
|
||||||
case One:
|
case One:
|
||||||
case OneOrMore:
|
case OneOrMore:
|
||||||
return ZeroOrMore;
|
result = ZeroOrMore;
|
||||||
|
break;
|
||||||
};
|
};
|
||||||
return ZeroOrMore;
|
break;
|
||||||
|
case One:
|
||||||
|
result = right;
|
||||||
|
break;
|
||||||
|
case OneOrMore:
|
||||||
|
switch (right) {
|
||||||
|
case Zero:
|
||||||
|
result = Zero;
|
||||||
|
break;
|
||||||
|
case ZeroOrOne:
|
||||||
|
case ZeroOrMore:
|
||||||
|
result = ZeroOrMore;
|
||||||
|
break;
|
||||||
|
case One:
|
||||||
|
case OneOrMore:
|
||||||
|
result = OneOrMore;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static TSQuantifier quantifier_join(
|
static TSQuantifier quantifier_join(
|
||||||
TSQuantifier left,
|
TSQuantifier left,
|
||||||
TSQuantifier right
|
TSQuantifier right
|
||||||
) {
|
) {
|
||||||
|
TSQuantifier result;
|
||||||
switch (left)
|
switch (left)
|
||||||
{
|
{
|
||||||
case Zero:
|
case Zero:
|
||||||
switch (right) {
|
switch (right) {
|
||||||
case Zero:
|
case Zero:
|
||||||
return Zero;
|
result = Zero;
|
||||||
|
break;
|
||||||
case ZeroOrOne:
|
case ZeroOrOne:
|
||||||
case One:
|
case One:
|
||||||
return ZeroOrOne;
|
result = ZeroOrOne;
|
||||||
|
break;
|
||||||
case ZeroOrMore:
|
case ZeroOrMore:
|
||||||
case OneOrMore:
|
case OneOrMore:
|
||||||
return ZeroOrMore;
|
result = ZeroOrMore;
|
||||||
};
|
break;
|
||||||
break;
|
|
||||||
case One:
|
|
||||||
switch (right) {
|
|
||||||
case Zero:
|
|
||||||
case ZeroOrOne:
|
|
||||||
return ZeroOrOne;
|
|
||||||
case ZeroOrMore:
|
|
||||||
return ZeroOrMore;
|
|
||||||
case One:
|
|
||||||
return One;
|
|
||||||
case OneOrMore:
|
|
||||||
return OneOrMore;
|
|
||||||
};
|
|
||||||
break;
|
|
||||||
case OneOrMore:
|
|
||||||
switch (right) {
|
|
||||||
case Zero:
|
|
||||||
case ZeroOrOne:
|
|
||||||
case ZeroOrMore:
|
|
||||||
return ZeroOrMore;
|
|
||||||
case One:
|
|
||||||
case OneOrMore:
|
|
||||||
return OneOrMore;
|
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case ZeroOrOne:
|
case ZeroOrOne:
|
||||||
|
|
@ -558,63 +550,109 @@ static TSQuantifier quantifier_join(
|
||||||
case Zero:
|
case Zero:
|
||||||
case ZeroOrOne:
|
case ZeroOrOne:
|
||||||
case One:
|
case One:
|
||||||
return ZeroOrOne;
|
result = ZeroOrOne;
|
||||||
|
break;
|
||||||
case ZeroOrMore:
|
case ZeroOrMore:
|
||||||
case OneOrMore:
|
case OneOrMore:
|
||||||
return ZeroOrMore;
|
result = ZeroOrMore;
|
||||||
|
break;
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case ZeroOrMore:
|
case ZeroOrMore:
|
||||||
return ZeroOrMore;
|
result = ZeroOrMore;
|
||||||
|
break;
|
||||||
|
case One:
|
||||||
|
switch (right) {
|
||||||
|
case Zero:
|
||||||
|
case ZeroOrOne:
|
||||||
|
result = ZeroOrOne;
|
||||||
|
break;
|
||||||
|
case ZeroOrMore:
|
||||||
|
result = ZeroOrMore;
|
||||||
|
break;
|
||||||
|
case One:
|
||||||
|
result = One;
|
||||||
|
break;
|
||||||
|
case OneOrMore:
|
||||||
|
result = OneOrMore;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case OneOrMore:
|
||||||
|
switch (right) {
|
||||||
|
case Zero:
|
||||||
|
case ZeroOrOne:
|
||||||
|
case ZeroOrMore:
|
||||||
|
result = ZeroOrMore;
|
||||||
|
break;
|
||||||
|
case One:
|
||||||
|
case OneOrMore:
|
||||||
|
result = OneOrMore;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static TSQuantifier quantifier_add(
|
static TSQuantifier quantifier_add(
|
||||||
TSQuantifier left,
|
TSQuantifier left,
|
||||||
TSQuantifier right
|
TSQuantifier right
|
||||||
) {
|
) {
|
||||||
|
TSQuantifier result;
|
||||||
switch (left)
|
switch (left)
|
||||||
{
|
{
|
||||||
case Zero:
|
case Zero:
|
||||||
return right;
|
result = right;
|
||||||
case One:
|
|
||||||
switch (right) {
|
|
||||||
case Zero:
|
|
||||||
return One;
|
|
||||||
case ZeroOrOne:
|
|
||||||
case ZeroOrMore:
|
|
||||||
case One:
|
|
||||||
case OneOrMore:
|
|
||||||
return OneOrMore;
|
|
||||||
};
|
|
||||||
break;
|
break;
|
||||||
case OneOrMore:
|
|
||||||
return OneOrMore;
|
|
||||||
case ZeroOrOne:
|
case ZeroOrOne:
|
||||||
switch (right) {
|
switch (right) {
|
||||||
case Zero:
|
case Zero:
|
||||||
return ZeroOrOne;
|
result = ZeroOrOne;
|
||||||
|
break;
|
||||||
case ZeroOrOne:
|
case ZeroOrOne:
|
||||||
case ZeroOrMore:
|
case ZeroOrMore:
|
||||||
return ZeroOrMore;
|
result = ZeroOrMore;
|
||||||
|
break;
|
||||||
case One:
|
case One:
|
||||||
case OneOrMore:
|
case OneOrMore:
|
||||||
return OneOrMore;
|
result = OneOrMore;
|
||||||
|
break;
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
case ZeroOrMore:
|
case ZeroOrMore:
|
||||||
switch (right) {
|
switch (right) {
|
||||||
case Zero:
|
case Zero:
|
||||||
return ZeroOrMore;
|
result = ZeroOrMore;
|
||||||
|
break;
|
||||||
case ZeroOrOne:
|
case ZeroOrOne:
|
||||||
case ZeroOrMore:
|
case ZeroOrMore:
|
||||||
return ZeroOrMore;
|
result = ZeroOrMore;
|
||||||
|
break;
|
||||||
case One:
|
case One:
|
||||||
case OneOrMore:
|
case OneOrMore:
|
||||||
return OneOrMore;
|
result = OneOrMore;
|
||||||
|
break;
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
|
case One:
|
||||||
|
switch (right) {
|
||||||
|
case Zero:
|
||||||
|
result = One;
|
||||||
|
break;
|
||||||
|
case ZeroOrOne:
|
||||||
|
case ZeroOrMore:
|
||||||
|
case One:
|
||||||
|
case OneOrMore:
|
||||||
|
result = OneOrMore;
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case OneOrMore:
|
||||||
|
result = OneOrMore;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create new capture quantifiers structure
|
// Create new capture quantifiers structure
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue