antlr

2013-02-14 14 views
9

को छोड़कर किसी भी चरित्र से मेल खाते हैं मैं टुकड़ा के निम्नलिखित deffinition है:antlr

fragment CHAR :'a'..'z'|'A'..'Z'|'\n'|'\t'|'\\'|EOF; 

अब मैं स्ट्रिंग के लिए एक lexer नियम निर्धारित किया है। मैंने निम्नलिखित किया:

STRING : '"'(CHAR)*'"' 

हालांकि स्ट्रिंग में मैं नई लाइन '\ n' को छोड़कर अपने सभी पात्रों से मेल खाना चाहता हूं। कोई विचार है कि मैं इसे कैसे प्राप्त कर सकता हूं?

उत्तर

11

आपको लाइन ब्रेक के अलावा " को बाहर करने की भी आवश्यकता होगी। इसे आज़माएं:

STRING : '"' ~('\r' | '\n' | '"')* '"' ; 

~ चार सेट को अस्वीकार करता है।

ut मैं अपने CHAR से केवल नई लाइन नकारना करना चाहते

इस AFAIK से कोई अन्य रास्ता सेट:

STRING : '"' CHAR_NO_NL* '"' ; 

fragment CHAR_NO_NL : 'a'..'z'|'A'..'Z'|'\t'|'\\'|EOF; 
+0

ठीक है और जहां स्ट्रिंग में वर्णों जाते हैं? – Andrey

+0

अच्छी तरह से खेद है कि मैं antlr के लिए नया हूं ... मैं जो पूछ रहा हूं वह है: मैंने पहले स्ट्रिंग को अनुक्रम के अनुक्रम के रूप में परिभाषित किया था। STRING की आपकी भयावहता में मैं नहीं देख सकता कि आपने चार्ज कहां रखा था। तो कार्यक्रम कैसे पता चलेगा कि इसे नए लाइन चरित्र को छोड़कर चार्स से सबकुछ लेना चाहिए? – Andrey

+0

हाँ, लेकिन मैं अपने चार्ज सेट से केवल नई लाइन को अस्वीकार करना चाहता हूं .. आपके मामले में मैं नई लाइन – Andrey

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