Cuando no está vinculado solo a Java, puede usar el analizador PEG de otro idioma o Rebol (tiene un "dialecto" de análisis que es PEG-equivalente) - o alcanzar WAY para Icon o Unicon o ahora incluso Object Icon en code.google.com/p/objecticon
Fue un momento lamentable cuando me di cuenta de que el lenguaje de contenido web MIT Curl (www.curl.com) había optado por la expresión regular para los usuarios a pesar de que Curl tiene macros y ofrece acceso a un AST.
tema general: Grafica de expresión de analizador (PEG) y análisis sintáctico de paquetes en general.
El uso de Perl nos ha legado PCRE, entonces ¿qué podemos hacer sino evitarlo cuando no es necesario (hay antlr y bisonte ...y sin duda también tienen su lugar donde encajan fácilmente)
Nota: Rebol, Icon y Curl son idiomas basados en expresiones (el icono tiene un retroceso limitado).
Otras opciones hacia fuera-a-la forma en que incluyen Oz y Mercurio (este último Erlang puede hacer salir)
No estoy usando pyPEG porque yo estoy confinado a Python 2.6.6; el parse de Python Lepl ya no es compatible, pero se instalará para 2.6
Las opciones de análisis en Python incluyen YAPPS en http://theory.stanford.edu/~amitp/yapps/ y varias otras; Nota: pyparsing no se puede instalar en algunos pitón de env
Y para Scala/Java existe este proyecto PEG: https://github.com/sirthias/parboiled/wiki
Usted puede encontrar un equivalente Java para PEG y la pierna por http://piumarta.com/software/peg/
CiteSeer tiene la Ralph Artículo de Becket sobre el análisis de packrat y Mercury (google para PEG parse mercury site: psu.edu)
También hay una serie de 3 publicaciones de blog en el blog AdventuresInMercury.
Sí, antlr es la solución. No debe usar expresiones regulares para el levantamiento pesado de análisis de lenguaje. Un muy buen ejemplo es el desbordamiento de pila: http://stackoverflow.com/questions/1931307/antlr-is-there-a-simple-example –
A menudo, estos lenguajes personalizados para fines específicos se llaman [Idioma específico del dominio] (http : //en.wikipedia.org/wiki/Domain-specific_language). –