में पार्सिंग रिकर्सिव संरचनाएं मैं स्कैला में एक पार्सर का निर्माण करने की कोशिश कर रहा हूं जो सरल एसक्यूएल-जैसी तारों को पार्स कर सकता है। मैं काम कर रहा मूल बातें मिल गया है और की तरह कुछ पार्स कर सकते हैं:स्कैला
select id from users where name = "peter" and age = 30 order by lastname
लेकिन अब मैं नेस्टेड और कक्षाओं पार्स करने के लिए कैसे सोचा, यानी
select name from users where name = "peter" and (age = 29 or age = 30)
मेरे 'combinedPredicate' के वर्तमान उत्पादन इस तरह दिखता है :
def combinedPredicate = predicate ~ ("and"|"or") ~ predicate ^^ {
case l ~ "and" ~ r => And(l,r)
case l ~ "or" ~ r => Or(l,r)
}
मैंने संयुक्त रूप से संयुक्त राष्ट्र उत्पादन को संदर्भित करने की कोशिश की लेकिन इसका परिणाम स्टैक ओवरफ्लो में हुआ।
btw, मैं बस यहाँ प्रयोग कर रहा हूँ ... को लागू पूरे एएनएसआई -99 कल्पना नहीं;)
"आलसी वाल" के संबंध में कृपया नई पैट्रेट क्षमताओं का उपयोग करने के लिए ": पार्सर [किसी भी]" से ": पैट्रैटपार्सर [किसी भी]" से स्पष्ट प्रकार की घोषणाओं को बदलने के लिए भी याद रखें। (जैसा कि आपने मेरे प्रश्न में बताया है http://stackoverflow.com/questions/3343697/scala-parser-combinators-tricks-for-recursive-bnf) – svrist