2010-06-24 12 views
5

सी ++ 0x स्टाइल कच्चे स्ट्रिंग अक्षरों का समर्थन करने के लिए लेक्सर और पार्सर (उदाहरण: फ्लेक्स और बाइसन) के एक कामकाजी सेट को परिभाषित करने के लिए कैसे करें?सी ++ 0x कच्चे स्ट्रिंग शाब्दिक को कैसे कार्यान्वित करें?

जैसा कि आप पहले ही जानते हैं, सी ++ 0x में नए स्ट्रिंग अक्षर बहुत ही लचीले तरीके से व्यक्त किए जा सकते हैं।

R"<delim>...<delim>"; - इस कोड में <delim> बहुत कुछ हो सकता है और कोई भी बचने के पात्रों की आवश्यकता नहीं है।

R";***************************(
    ; TINY BASIC FOR INTEL 8080 
    ;  VERSION 2.0 
    ;  BY LI-CHEN WANG 
    ; MODIFIED AND TRANSLATED 
    ; TO INTEL MNEMONICS 
    ;  BY ROGER RAUSKOLB 
    ;  10 OCTOBER, 1976 
    ;  @COPYLEFT 
    ; ALL WRONGS RESERVED  ) 
    ;***************************"; 

अधिक:

R"(I love those who yearn for the impossible. (Von Goethe, "Faust"))";

पाठ के ब्लॉक बस एक ही पात्रों के बराबर घटनाओं का उपयोग कर परिभाषित किया जा सकता:

कोष्ठकों किसी भी तरह का स्ट्रिंग के अंत परिसीमित करने के लिए इस्तेमाल किया जा सकता जानकारी here (विकिपीडिया) और here (एटी) मिल सकती है।

मैं इस शानदार सुविधा का उपयोग उस भाषा में करना चाहता हूं जो मैं अभी विकसित कर रहा हूं।

तो, मैं परिणाम प्राप्त करने के लिए उचित टोकननाइज़र और वाक्यविन्यास विश्लेषक को कैसे परिभाषित कर सकता हूं?

आपके उत्तरों के लिए अग्रिम धन्यवाद!

+0

मुझे लगता है कि आपका दूसरा उदाहरण वैध कच्चे शाब्दिक नहीं है, इसमें ब्रांड्स (आर "(; *** ...") होना चाहिए। – Motti

+0

नहीं, नहीं ... अनुक्रम; *** ... है स्ट्रिंग का एक डिलीमीटर; कच्ची स्ट्रिंग सामग्री कोष्ठक के बाद शुरू होता है। – Rizo

+0

यहां विकिपीडिया: आर "डिलीमीटर (स्ट्रिंग डेटा \ स्टफ") डिलीमीटर से उदाहरण है। – Rizo

उत्तर

2

आप व्याख्यात्मक विश्लेषण चरण में शाब्दिक प्रकोप कर सकते हैं और उन्हें मेटा टोकन जैसे कुछ में बदल सकते हैं।

Input: 
    int a; 
    char *b = R"...."; 

Preprocessed: 
    int a; 
    char *b = R*literal[0]*; 

Tokenized: 
    INT symbol[0] DELIM 
    CHAR OP_ASTR symbol[1] OP_EQ symbol[2] *literal[0]* DELIM 

Symbol table contents { "a", "b", "R" } 

Literal table contents { "...." } 

शाब्दिक [0] मूल शाब्दिक पाठ करने के लिए सूचक है।

+0

आप किसी भी गैर-नियमित, लेक्सिकल विश्लेषण चरण usin में विशेष वाक्यविन्यास संरचना जी कस्टम subroutines। – 9dan

+0

यह हाइब्रिड लेक्सिको-व्याकरण संबंधी विश्लेषण है; मुझे लगता है कि मैं विचार समझ गया! धन्यवाद! – Rizo

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