Estoy tratando de construir un analizador sintáctico en scala que pueda analizar cadenas sencillas similares a SQL. Tengo los conceptos básicos de trabajo y se puede analizar algo como:analizando estructuras recursivas en scala
select id from users where name = "peter" and age = 30 order by lastname
Pero ahora me preguntaba cómo analizar y clases anidadas, es decir
select name from users where name = "peter" and (age = 29 or age = 30)
La producción actual de mi 'combinedPredicate' se parece a esto :
def combinedPredicate = predicate ~ ("and"|"or") ~ predicate ^^ {
case l ~ "and" ~ r => And(l,r)
case l ~ "or" ~ r => Or(l,r)
}
Traté de hacer referencia de forma recursiva la producción combinedPredicate dentro de sí mismo, sino que se traduce en una stackoverflow.
por cierto, sólo estoy experimentando aquí ... no implementar toda la especificación ANSI-99;)
con respecto a "lazy val", por favor, también cambie las declaraciones explícitas de tipo de ": Analizador [Cualquiera]" a ": PackratParser [Cualquiera]" para usar las nuevas capacidades de paquete. (Como señaló en mi pregunta http://stackoverflow.com/questions/3343697/scala-parser-combinators-tricks-for-recursive-bnf) – svrist