nom:toni AND (data:ENTRE 17-FEB-2010 I 25-MAR-2010 OR ciutat:Barcelona)
(no exactament això, però com a exemple ens serveix)
Aquesta consulta expressada d'aquesta manera calia validar-la i convertir-la, entre altres coses, a una consulta SQL.
Per fer aquesta feina podíem haver fet un codi basat en substrings i molts if, però el resultat seria poc flexible (i poc fiable). El millor és sempre fer servir l'eina adequada per cada problema, i en aquest cas el més adient semblava ANTLR.
ANTLR (ANother Tool for Language Recognition) és una eina que permet construir aplicacions per reconèixer i interpretar llenguatges. S'assembla al lex i el yacc que vam veure a les assignatures de Compiladors, o al Flex i Bison que trobem a GNU/Linux, o al JavaCC.
Amb ANTLR pots construir un lexer i un parser, definint el llenguatge amb notació similar a BNF, igual que fèiem amb yacc, però amb moltes facilitats. Entre altres coses hi ha una eina visual per anar provant la gramàtica a mesura que la vas escrivint. I s'integra perfectament amb Eclipse.
Resulta molt fàcil crear DSL (Domain-Specific Languages) fent servir ANTLR, i això obre un món de possibilitats.
Tot i que no he estat jo el que al final a desenvolupat el parser al projecte, he pogut veure tot el potencial de ANTLR. A la seva plana Web els usuaris han anat pujant gramàtiques per molts llenguatges, entre d'altres el PL/SQL. Això m'ha fet recordar un munt de projectes personals abandonats, com el formatejador de PL/SQL o, molt més interessant, un analitzador estàtic de codi PL/SQL que doni informació com:
- variables no usades
- funcions i procediments no usats
- us adequat de convencions pels noms
- tipus de dades coherents