java库将正则表达式解析为语法树

时间:2012-01-02 03:41:48

标签: java regex lexical-analysis

我想要一个可以获取正则表达式的字符串表示并将其转换为语法树以便于编程操作的库。会改变的东西:

(\ s?)bla [a-z]

成像:

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

2 个答案:

答案 0 :(得分:2)

看起来你正在寻找的是语法分析器,对吗?

我想看看antlr(http://www.antlr.org/),你可以创建语法,它会生成一个语法树,你可以走,翻译等。

答案 1 :(得分:0)

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());
}