findMatcher static method
Implementation
static Expression? findMatcher(
Expression expression, Set<Expression> processed) {
if (!processed.add(expression)) {
return null;
}
switch (expression.kind) {
case ExpressionKind.anyCharacter:
case ExpressionKind.characterClass:
case ExpressionKind.literal:
return expression;
case ExpressionKind.andPredicate:
case ExpressionKind.notPredicate:
final predicate = expression as PrefixExpression;
return findMatcher(predicate.expression, processed);
case ExpressionKind.capture:
case ExpressionKind.oneOrMore:
case ExpressionKind.optional:
case ExpressionKind.zeroOrMore:
return null;
case ExpressionKind.orderedChoice:
case ExpressionKind.sequence:
final multiple = expression as MultipleExpression;
final expressions = multiple.expressions;
if (expressions.length > 1) {
return null;
}
final child = expressions.first;
return findMatcher(child, processed);
case ExpressionKind.nonterminal:
case ExpressionKind.terminal:
case ExpressionKind.subterminal:
final symbol = expression as SymbolExpression;
return findMatcher(symbol.expression!, processed);
}
}