जब मैं इन नियमों के साथ टोकन प्राप्त करता हूं
STRINGA: '' '(options { लालची = गलत;}: ईएससी |।) * '' '; STRINGB: '\' '(विकल्प {लालची = गलत;}: ईएससी |।) *' '' '; यह सिर्फ text के बजाय 'text' हथियाने को समाप्त होता है मैं आसानी से ' और ' को निकाल सकता हूं लेकिन सोच रहा था कि मैं इसे कैसे हटा सकता हूं? "पोस्ट-पाठ" आइटमप्रॉप = "टेक्स्ट"> इसके लिए आपको कुछ कस्टम कोड की आवश्यकता होगी। इसके अलावा, आपको नियम के अंदर । (डॉट) का उपयोग नहीं करना चाहिए: आपको स्पष्ट रूप से परिभाषित करना चाहिए कि आप को छोड़कर एक बैकस्लैश (यह मानते हुए कि आपका ESQ से शुरू होता है), शायद एक उद्धरण और रेखा विराम के अक्षर । ऐसा कुछ यह करना होगा: <पूर्व> व्याकरण टी; पार्स: STRING EOF {System.out.println ($ STRING.text);}; STRING: '' '(ESQ | ~ (' '' \ '' \ '' \ '' \ '' \ '' \ '')) * '' 'स्ट्रिंग मिलान किया हुआ = मिलन टेक्स्ट (स्ट्रिंगबिल्ल्डर बिल्डर) = नया स्ट्रिंगबइल्डर (); के लिए (int i = 1; i & lt; matched.length () - 1; i ++) {char ch = matched.charAt (i); if (ch == '\\') {i ++; ch = matched.charAt ( I); स्विच (सीएच) {केस 'एन': बिल्डर.एपेंड ('\ n'); ब्रेक; केस 'टी': बिल्डर.एपेंड ('\ t'); ब्रेक; डिफॉल्टः बिल्डर.एपेंड (सीएच) ; Break;}} else {builder.append (ch);}} settext (builder.toString ());}; टुकड़ा ESQ: '\\' ('n' | 't' | '' '' '' \\ '); यदि आप अब इनपुट "टैब: '\ t \ t \ t' \ n गुण: \" \ n बैकस्लैश: \\ " को पार्स करते हैं, तो निम्न होगा कंसोल में मुद्रित किया जा सकता है: टैब: '' उद्धरण: "बैकस्लैश: \ व्याकरण को साफ रखने के लिए, आप निश्चित रूप से कोड को कस्टम पद्धति में स्थानांतरित कर सकते हैं:
व्याकरण टी; @ लक्सर :: सदस्यों {निजी स्ट्रिंग तय (स्ट्रिंग स्ट्र) {...}} पार्स: STRING EOF {System.out.println ($ STRING.text);}; STRING: '' '(ESQ | ~ (' '' '' \ '' \ '\ r' | '\ n')) * '' '{setText (ठीक (getText ()));}; टुकड़ा ESQ: '\\' ('n' | 't' | '' '' '\\');
Comments
Post a Comment