2012-08-30 17 views
7

में रेंज क्वांटिफ़ायर सिंटैक्स यह काफी सरल होना चाहिए। मैं एएनटीएलआर का उपयोग कर लेक्सर व्याकरण पर काम कर रहा हूं, और अधिकतम अक्षरों की अधिकतम लंबाई को 30 वर्णों तक सीमित करना चाहता हूं। मैं (- के लिए '' बात को छोड़कर - सामान्य regex निम्न सिंटैक्स) इस लाइन के साथ यह पूरा करने का प्रयास किया:एएनटीएलआर रेगेक्स

ID : ('a'..'z'|'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'){0,29} {System.out.println("IDENTIFIER FOUND.");} 
    ; 

कोड पीढ़ी में कोई त्रुटि नहीं है, लेकिन संकलन तैयार किए गए कोड कि बस था में एक पंक्ति के कारण विफल :

0,29

जाहिर antlr कोष्ठक के बीच पाठ की धारा लेने और प्रिंट लाइन के साथ स्वीकार राज्य क्षेत्र में रखने से है। मैंने एएनटीएलआर साइट की खोज की, और मुझे समकक्ष अभिव्यक्ति का कोई उदाहरण या संदर्भ नहीं मिला। इस अभिव्यक्ति का वाक्यविन्यास क्या होना चाहिए?

उत्तर

8

एएनटीएलआर {m,n} क्वांटिफायर वाक्यविन्यास का समर्थन नहीं करता है। एएनटीएलआर आपके क्वांटिफायर के {} देखता है और उन्हें आपके कार्यों को घेरने वाले {} से अलग नहीं बता सकता है।

समाधान:

  1. शब्दार्थ सीमा लागू करें। इसे एक असीमित आकार आईडी इकट्ठा करने दें और उसके बाद अपने एक्शन कोड के हिस्से के रूप में या बाद में संकलक में शिकायत/छंटनी करें।
  2. मैन्युअल रूप से मात्रा नियम बनाएं।

यह एक पुस्तिका नियम है कि 8.

SUBID : ('a'..'z'|'A'..'Z'|'0'..'9'|'_') 
     ; 
ID : ('a'..'z'|'A'..'Z') 
    (SUBID (SUBID (SUBID (SUBID (SUBID (SUBID SUBID?)?)?)?)?)?)? 
    ; 

व्यक्तिगत रूप से करने के लिए आईडी की सीमा का एक उदाहरण है, मैं अर्थ समाधान के साथ जाना चाहते हैं (# 1)। इस तरह के नियम का उल्लंघन होने पर इन दिनों पहचानकर्ताओं को सीमित करने के लिए बहुत कम कारण है, और सिंटैक्स त्रुटि (संकलन के प्रारंभिक निरस्त) का कारण बनने के लिए भी कम कारण है।

+0

आपकी मदद के लिए धन्यवाद। – user1634761

+1

यदि एएनटीएलआर केवल प्रोग्रामिंग भाषाओं के लिए कंपाइलर उत्पन्न करने के लिए उपयोग किया जाता है तो क्वांटिफायर के लिए थोड़ा उपयोग हो सकता है। लेकिन किसी भी प्रकार के संरचित डेटा को सत्यापित करने के लिए एक व्याकरण (स्कीमा) निश्चित रूप से उनकी आवश्यकता है - क्रेडिट कार्ड नंबर 16 अंक हैं, 13 या 25 नहीं। एएनटीएलआर 4 पुस्तक में जेएसओएन और एक्सएमएल व्याकरण हैं, लेकिन मूल टोकन बाधाओं के बिना इसे उपयोग करना मुश्किल होगा जेएसओएन स्कीमा और एक्सएसडी के एक सार (कोडेक-स्वतंत्र) संस्करण के रूप में एएनटीएलआर व्याकरण। – Dave

+0

"इन दिनों एक भाषा में पहचानकर्ताओं को सीमित करने के लिए बहुत कम कारण है" - इसका मतलब यह नहीं है कि सीमित पहचानकर्ताओं के साथ कोई भाषा मौजूद नहीं है, न ही लोग उनके लिए पार्सर्स लिखना चाहेंगे। –

संबंधित मुद्दे