библиотека Java для синтаксического анализа регулярных выражений в синтаксическом дереве - PullRequest
4 голосов
/ 02 января 2012

Мне нужна библиотека, которая может взять строковое представление регулярного выражения и преобразовать его в синтаксическое дерево для облегчения программных манипуляций. Что-то, что изменится:

(\ s?) Бла [a-z]

в нечто вроде:

PARENTHESIS
  CHAR:SPACE
    WILD
WORD:bla
CHAR:a-z

Ответы [ 2 ]

2 голосов
/ 02 января 2012

Похоже, что вы ищете синтаксический анализатор, верно?

Я бы посмотрел на antlr (http://www.antlr.org/), вы можете создавать грамматики, и он будет генерировать синтаксическое дерево, по которому вы можете ходить, переводи и т. д.

0 голосов
/ 02 января 2012

Parboiled выглядит хорошим выбором для того, что вы хотите сделать.

Позволяет легко писать грамматики, намного проще, чем antlr или javacc.

Образец:

Rule Digit()
{
    return CharRange('0', '9');
}

Rule Integer()
{
    return OneOrMore(Digit());
}

Rule WhiteSpace()
{
    return ZeroOrMore(AnyOf(" \t"));
}

Rule NToMQuantifier()
{
    return Sequence(
        '{',
        WhiteSpace(),
        Integer(),
        Optional(
            WhiteSpace(),
            Integer()
        ),
        '}'
    );
}

Rule OtherQuantifiers()
{
    return Sequence(AnyOf("+?*"), Optional(AnyOf("+?")));
}

Rule Quantifier()
{
    return FirstOf(OtherQuantifiers(), NToMQuantifier());
}
...