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