में रेंज क्वांटिफ़ायर सिंटैक्स यह काफी सरल होना चाहिए। मैं एएनटीएलआर का उपयोग कर लेक्सर व्याकरण पर काम कर रहा हूं, और अधिकतम अक्षरों की अधिकतम लंबाई को 30 वर्णों तक सीमित करना चाहता हूं। मैं (- के लिए '' बात को छोड़कर - सामान्य regex निम्न सिंटैक्स) इस लाइन के साथ यह पूरा करने का प्रयास किया:एएनटीएलआर रेगेक्स
ID : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'){0,29} {System.out.println("IDENTIFIER FOUND.");}
;
कोड पीढ़ी में कोई त्रुटि नहीं है, लेकिन संकलन तैयार किए गए कोड कि बस था में एक पंक्ति के कारण विफल :
0,29
जाहिर antlr कोष्ठक के बीच पाठ की धारा लेने और प्रिंट लाइन के साथ स्वीकार राज्य क्षेत्र में रखने से है। मैंने एएनटीएलआर साइट की खोज की, और मुझे समकक्ष अभिव्यक्ति का कोई उदाहरण या संदर्भ नहीं मिला। इस अभिव्यक्ति का वाक्यविन्यास क्या होना चाहिए?
आपकी मदद के लिए धन्यवाद। – user1634761
यदि एएनटीएलआर केवल प्रोग्रामिंग भाषाओं के लिए कंपाइलर उत्पन्न करने के लिए उपयोग किया जाता है तो क्वांटिफायर के लिए थोड़ा उपयोग हो सकता है। लेकिन किसी भी प्रकार के संरचित डेटा को सत्यापित करने के लिए एक व्याकरण (स्कीमा) निश्चित रूप से उनकी आवश्यकता है - क्रेडिट कार्ड नंबर 16 अंक हैं, 13 या 25 नहीं। एएनटीएलआर 4 पुस्तक में जेएसओएन और एक्सएमएल व्याकरण हैं, लेकिन मूल टोकन बाधाओं के बिना इसे उपयोग करना मुश्किल होगा जेएसओएन स्कीमा और एक्सएसडी के एक सार (कोडेक-स्वतंत्र) संस्करण के रूप में एएनटीएलआर व्याकरण। – Dave
"इन दिनों एक भाषा में पहचानकर्ताओं को सीमित करने के लिए बहुत कम कारण है" - इसका मतलब यह नहीं है कि सीमित पहचानकर्ताओं के साथ कोई भाषा मौजूद नहीं है, न ही लोग उनके लिए पार्सर्स लिखना चाहेंगे। –