Я хотел бы иметь возможность вычислять набор всех символов, которые могут быть сопоставлены как первый символ в строке для данного экземпляра java.util.regex.Pattern
. Более формально, учитывая DFA, эквивалентный определенному регулярному выражению, я хочу получить набор всех исходящих переходов из начального состояния.
Пример:
Pattern p = Pattern.compile("[abc]def|daniel|chris|\\s+");
Set<Character> first = getFirstSet(p);
Набор first
должен содержать следующие элементы:
{ 'a', 'b', 'c', 'd', ' ', '\n', '\r', '\t' }
Есть идеи? Я хорошо знаю, что мог бы сам создать DFA и определить соответствующие состояния таким образом, но я бы хотел избежать такого рода хлопот (читай: это не так уж и много для меня). Обратите внимание, что моим языком хоста на самом деле является Scala, поэтому у меня есть доступ ко всем основным библиотекам Scala (насколько это возможно).