कुछ दिन पहले, मैंने एक ब्लॉग एंट्री (http://ayende.com/Blog/archive/2008/09/08/Implementing-generic-natural-language-DSL.aspx) पढ़ा था जहां लेखक .NET का उपयोग कर एक सामान्य प्राकृतिक भाषा डीएसएल पार्सर के विचार पर चर्चा करते थे।जावा में एक प्राकृतिक डीएसएल बनाने के लिए सबसे अच्छा उपकरण क्या होगा?
मेरी राय में, उनके विचार का शानदार हिस्सा यह है कि टेक्स्ट को वाक्यों के समान नाम का उपयोग करके कक्षाओं के खिलाफ पार्स किया गया है और मिलान किया गया है। एक उदाहरण के रूप
लेते हुए निम्नलिखित लाइनों:
Create user user1 with email [email protected] and password test Log user1 in Take user1 to category t-shirts Make user1 add item Flower T-Shirt to cart Take user1 to checkout
"ज्ञात" वस्तुओं का संग्रह, कि पार्स का परिणाम लेता है का उपयोग कर परिवर्तित हो सकते हैं। कुछ उदाहरण वस्तुओं होगा (मेरे उदाहरण के लिए जावा का उपयोग कर):
public class CreateUser {
private final String user;
private String email;
private String password;
public CreateUser(String user) {
this.user = user;
}
public void withEmail(String email) {
this.email = email;
}
public String andPassword(String password) {
this.password = password;
}
}
तो, जब पहला वाक्य प्रसंस्करण, CreateUser वर्ग एक मैच होगा (जाहिर है क्योंकि यह "उपयोगकर्ता बनाने" का एक संयोजन है) और, यह बाद से कन्स्ट्रक्टर पर पैरामीटर लेता है, पार्सर उपयोगकर्ता उपयोगकर्ता के रूप में "user1" ले जाएगा।
उसके बाद, पार्सर यह पहचान लेगा कि अगला ईमेल "ईमेल के साथ" एक विधि नाम से भी मेल खाता है, और चूंकि उस विधि में पैरामीटर होता है, तो यह "[email protected]" को ईमेल पैरामीटर के रूप में पार्स करेगा।
मुझे लगता है कि अब तक आपको विचार मिल गया है, है ना? इसका एक स्पष्ट अनुप्रयोग, कम से कम मेरे लिए, एप्लिकेशन परीक्षकों को प्राकृतिक भाषा में "परीक्षण स्क्रिप्ट" बनाने की अनुमति देना होगा और फिर वाक्यों को उन वर्गों में पार्स करना होगा जो ऐप व्यवहार की जांच के लिए जुनीट का उपयोग करते हैं।
मैं उपकरण या संसाधन पर विचार, टिप्स और राय सुनना चाहता हूं जो जावा का उपयोग कर ऐसे पार्सर को कोड कर सकता है। बेहतर अभी तक अगर हम जटिल लेक्सर्स या एएनटीएलआर जैसे ढांचे का उपयोग करने से बच सकते हैं, जो मुझे लगता है कि शायद एक फ्लाई को मारने के लिए हथौड़ा का उपयोग करना होगा।
इससे अधिक, यदि कोई इसके लिए ओपन सोर्स प्रोजेक्ट शुरू करने के लिए तैयार है, तो मुझे निश्चित रूप से दिलचस्पी होगी।
ग्लर्क के उत्तर के समान, इसलिए टिप्पणी के रूप में: यदि आप निष्पादन योग्य "प्राकृतिक" भाषा चश्मे की तलाश करते हैं, तो आपको ककड़ी (http://cukes.info/) को आज़माएं। JRuby (और RSpec) के साथ, आप जावा-आधारित बीडीडी (http://behaviour-driven.org/) के लिए इसका उपयोग कर सकते हैं। विकल्प में ईज़ीबी और जेबीहेव शामिल हैं। –
डीएसएल क्या है? क्या यह समान भाषाओं का असंबद्ध है? देखें corporavm.uni-koeln.de/vardial/sharedtask.html – alvas