Tôi đang cố gắng để đối chiếu một trình phân tích cú pháp trong scala có thể phân tích các chuỗi giống SQL đơn giản. Tôi đã có những điều cơ bản làm việc và có thể phân tích cái gì đó như:phân tích cú pháp cấu trúc đệ quy trong scala
select id from users where name = "peter" and age = 30 order by lastname
Nhưng bây giờ tôi tự hỏi làm thế nào để phân tích và các lớp lồng nhau, tức là
select name from users where name = "peter" and (age = 29 or age = 30)
Việc sản xuất hiện tại của 'combinedPredicate' của tôi trông như thế này :
def combinedPredicate = predicate ~ ("and"|"or") ~ predicate ^^ {
case l ~ "and" ~ r => And(l,r)
case l ~ "or" ~ r => Or(l,r)
}
Tôi đã cố gắng đệ quy tham chiếu kết quả sản xuất được kết hợp trong chính nó nhưng kết quả là luồng ngăn xếp.
btw, tôi chỉ thử nghiệm ở đây ... không thực hiện toàn bộ ansi-99 đặc tả;)
liên quan đến "lazy val", hãy nhớ cũng thay đổi các khai báo kiểu rõ ràng từ ": Parser [Any]" thành ": PackratParser [Any]" để sử dụng các khả năng đóng gói mới. (Như bạn đã chỉ ra trong câu hỏi của tôi http://stackoverflow.com/questions/3343697/scala-parser-combinators-tricks-for-recursive-bnf) – svrist