2012-10-29 8 views
5

JavaSpecialists समाचार पत्र के नवीनतम संस्करण में, लेखक कोड का एक टुकड़ा है कि जावा में अन-compilableकुछ चरित्र अक्षर जावा में सिंटेक्स त्रुटियों का कारण क्यों बनाते हैं?

public class A1 { 
    Character aChar = '\u000d'; 
} 

प्रयास करें यह संकलन है का उल्लेख है, और आप इस तरह के रूप में एक त्रुटि प्राप्त होगी,:

A1.java:2: illegal line end in character literal 
       Character aChar = '\u000d'; 
           ^

क्यों सी # कोड का समतुल्य टुकड़ा ऐसी समस्या नहीं दिखाता है?

public class CharacterFixture 
{ 
    char aChar = '\u000d'; 
} 

क्या मुझे कुछ याद आ रही है?

संपादित करें: प्रश्न का मेरा मूल उद्देश्य यह था कि सी # कंपाइलर को यूनिकोड फ़ाइल को सही ढंग से पार्सिंग (अगर ऐसा है) और क्यों जावा को अभी भी गलत (यदि ऐसा है) पार्सिंग के साथ चिपकना चाहिए? संपादित करें: मैं भी अपने मूल प्रश्न शीर्षक को बहाल करना चाहता हूं? इतनी भारी संपादन क्यों है और मुझे दृढ़ता से संदेह है कि यह मेरे इरादों को भारी रूप से संशोधित करता है।

+0

हाहा। जावा बदलने के अलावा आप? मुझे उस हंसी की ज़रूरत है :) –

+2

आप अपना मूल शीर्षक पुनर्स्थापित कर सकते हैं (संशोधन देखने के लिए "संपादित एक्स टाइम पहले" लिंक पर क्लिक करें)। हालांकि, मूल शीर्षक जावा के "मार्ग" और सी # के "मार्ग" की तुलना करने के लिए व्यक्तिपरक और तर्कसंगत था। वे अलग-अलग विनिर्देशों के साथ अलग-अलग भाषाएं हैं। –

+0

@pst - लेकिन इस शीर्षक के साथ, मुझे सवाल नहीं पूछा जाना चाहिए क्योंकि एक ही न्यूजलेटर पर्याप्त स्पष्टीकरण देता है। मैं संपादन का सम्मान करता हूं और इसे पुनर्स्थापित करने के लिए मजबूर नहीं हूं। मेरा इरादा इस संदर्भ में दो समान कंपाइलरों के बीच अंतर क्यों था। – suhair

उत्तर

12

जावा का कंपाइलर \uxxxx एस्केप दृश्यों को पहले चरण में से एक के रूप में अनुवाद करता है, यहां तक ​​कि टोकननाइज़र को कोड पर एक दरार मिलने से पहले भी। जब तक यह वास्तव में टोकनिंग शुरू होता है, तब तक \uxxxx अनुक्रम नहीं होते हैं; वे पहले से ही वर्णित वर्णों में बदल गए हैं, इसलिए संकलक के लिए आपका जावा उदाहरण वैसा ही दिखता है जैसे कि आप वास्तव में टाइप किसी भी तरह कैरिज रिटर्न टाइप करते हैं। यह स्रोत फ़ाइल के एन्कोडिंग के बावजूद, स्रोत के भीतर यूनिकोड का उपयोग करने का एक तरीका प्रदान करने के लिए करता है। यदि आवश्यक हो तो भी ASCII पाठ यूनिकोड वर्णों को पूरी तरह से प्रस्तुत कर सकता है (पठनीयता की लागत पर), और चूंकि यह बहुत जल्दी हो गया है, तो आप उन्हें कोड में लगभग कहीं भी रख सकते हैं। (आप \u0063\u006c\u0061\u0073\u0073\u0020\u0053\u0074\u0075\u0066\u0066\u0020\u007b\u007d कह सकते हैं, और यदि आप परेशान होना चाहते हैं या खुद को यातना देना चाहते हैं तो संकलक इसे class Stuff {} के रूप में पढ़ेगा।)

सी # ऐसा नहीं करता है। \uxxxx का अनुवाद बाद में किया गया है, शेष कार्यक्रम के साथ, और केवल कुछ प्रकार के टोकन (अर्थात्, पहचानकर्ता और स्ट्रिंग/चार अक्षर) में मान्य है। इसका मतलब है कि इसका उपयोग कुछ स्थानों पर नहीं किया जा सकता है जहां इसका उपयोग जावा में किया जा सकता है। उदाहरण के लिए cl\u0061ss कोई कीवर्ड नहीं है।

+0

क्या आप कृपया "बाद में", "कुछ प्रकार के टोकन", "कुछ स्थानों" पर विस्तृत जानकारी दे सकते हैं? – Vic

+1

@Vic: "बाद में" जितना स्पष्ट हो उतना स्पष्ट है जितना मैं इसे बना सकता हूं, और "कुछ स्थानों" भी एक उदाहरण के साथ आया था। मैंने "कुछ प्रकार के टोकन" के लिए स्पष्टीकरण जोड़ा है। – cHao

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