Sto provando a calcolare un parser in scala che può analizzare semplici stringhe simili a SQL. Ho le basi di lavoro e in grado di analizzare qualcosa come:parsing di strutture ricorsive in scala
select id from users where name = "peter" and age = 30 order by lastname
Ma ora mi chiedevo come analizzare e classi nidificate, cioè
select name from users where name = "peter" and (age = 29 or age = 30)
La produzione attuale di mio 'combinedPredicate' si presenta così :
def combinedPredicate = predicate ~ ("and"|"or") ~ predicate ^^ {
case l ~ "and" ~ r => And(l,r)
case l ~ "or" ~ r => Or(l,r)
}
ho provato ricorsivamente riferimento alla produzione combinedPredicate in sé, ma che si traduce in una StackOverflow.
btw, sto solo sperimentando qui ... non attuare l'intero ANSI-99 spec;)
per quanto riguarda "lazy val", si prega inoltre di modificare anche le dichiarazioni di tipo esplicito da ": Parser [Any]" a ": PackratParser [Any]" per utilizzare le nuove funzionalità di packrat. (Come hai sottolineato nella mia domanda http://stackoverflow.com/questions/3343697/scala-parser-combinators-tricks-for-recursive-bnf) – svrist