पैकेज जे

पैकेज जय

यह जय का मुखपृष्ठ है, एक एलएएलआर (1) पार्सर जनरेटर: बर्कले yacc © सी # और जावा के लिए retargeted।

देख:

विवरण

कक्षा सारांश
डमी डमीनकली वर्ग, javadoc ट्रिगर्स।

 

यह जय का मुखपृष्ठ है, एक एलएएलआर (1) पार्सर जनरेटर: बर्कले yacc © सी # और जावा के लिए retargeted।

  •  प्रयोग
  • इनपुट प्रारूप
  •  नेरिक्स
  • कंकाल फाइलें
  • कक्षा प्रबंधन
  • डाउनलोड

प्रयोग

जय एक फ़ाइल से व्याकरण विनिर्देश पढ़ता है और इसके लिए एक एलएएलआर (1) पार्सर उत्पन्न करता है। एक पार्सर में पार्सिंग टेबल का एक सेट होता है और एक कंकाल से ड्राइवर चालक होता है जो मानक इनपुट से पढ़ा जाता है। जावा और सी # के लिए उपयुक्त कंकाल मौजूद हैं। टेबल्स और ड्राइवर मानक आउटपुट के लिए लिखे गए हैं।

जय [-ctv] [-b फ़ाइल-उपसर्ग] व्याकरण कंकाल | <कंकाल

जावा-jar jay.jar [-ctv] [-b फ़ाइल-उपसर्ग] व्याकरण कंकाल | <कंकाल

निम्न विकल्प उपलब्ध हैं:

-b फ़ाइल-उपसर्ग फ़ाइल_prefix द्वारा निर्दिष्ट स्ट्रिंग में द्वितीयक आउटपुट फ़ाइल नामों के लिए प्रीफ़िक्स को पूर्ववत करता है। डिफ़ॉल्ट उपसर्ग चरित्र वाई है।

-सी आउटपुट में शामिल होने के लिए सी प्रीप्रोसेसर #लाइन निर्देशों के लिए व्यवस्था करता है। यह केवल सी # के लिए उपयोगी है।

आउटपुट में शामिल करने के लिए डीबगिंग जानकारी के लिए व्यवस्था नहीं है। वास्तविक जानकारी को कंकाल फाइलों द्वारा नियंत्रित किया जाता है; वितरित के रूप में यह अतिरिक्त रनटाइम पैकेज पर निर्भर करता है। सी # के लिए यह स्रोत डाउनलोड का हिस्सा है, जावा के लिए jay.yydebug देखें।

 

-v जेनरेटेड पार्सर के फ़ाइल फ़ाइल_prefix.output पर लिखा जाने वाला मानव-पठनीय वर्णन का कारण बनता है।

यदि पर्यावरण चर में से एक TMPDIR, TMP, या TEMP सेट है, तो पर्यावरण चर से स्ट्रिंग का उपयोग उस निर्देशिका के नाम के रूप में किया जाएगा जहां अस्थायी फ़ाइलें बनाई गई हैं।

इनपुट प्रारूप

इनपुट प्रारूप और एलएएलआर (1) एल्गोरिदम yacc से नहीं बदला गया है। लिखित और डिबगिंग व्याकरण, त्रुटि वसूली, कार्यों के लिए रणनीतियों इत्यादि के विवरण के लिए किसी को yacc पर व्यापक साहित्य से परामर्श लेना चाहिए।

एकमात्र मतभेद वैल्यू स्टैक, क्लास में जेनरेटेड पार्सर का एम्बेडिंग और स्कैनर के लिए इंटरफ़ेस हैं। इन सभी को कंकाल फ़ाइलों को संशोधित करके बदला जा सकता है। इस खंड का शेष जे के साथ वितरित कंकाल फ़ाइलों पर आधारित है।

% संघ निर्देश हटा दिया गया है। जे वैल्यू स्टैक के लिए ऑब्जेक्ट (या System.Object में सी #) का उपयोग करता है। नतीजतन, टैग नोटेशन <name> में नाम किसी वर्ग या इंटरफ़ेस को संदर्भित करता है।

इसका जैन उत्पन्न करने वाले जानवरों के लिए प्रभाव पड़ता है: न तो सी # और न ही जाली चर के लिए जावा परमिट असाइनमेंट। इसलिए, नोटेशन $$ किसी ऑब्जेक्ट को कास्ट किए बिना संदर्भित करता है क्योंकि आमतौर पर $$ को असाइन किया जाता है। यदि अन्य उद्देश्यों के लिए $$ का उपयोग किया जाता है, तो आमतौर पर इसे एक स्पष्ट प्रकार $ <name> $ को नियोजित करना होगा जो नाम पर कास्ट में बदल जाता है।

इसी प्रकार, नोटेशन $ n शायद ही कभी असाइन किया गया है। इसलिए, जब तक कास्टिंग को रोकने के लिए नोटेशन $ <> n का उपयोग नहीं किया जाता है, तब तक जय एक कास्ट उत्पन्न करेगा।

जे ऑब्जेक्ट पर उत्सर्जित नहीं करता है। ये जानवर आमतौर पर अनावश्यक होते हैं और यह रणनीति कई चेतावनी संदेशों से बचाती है लेकिन इससे ओवरलोडिंग स्थिति में आश्चर्य हो सकता है।

जय के पास विरासत की कोई धारणा नहीं है। इससे संदिग्ध असाइनमेंट के बारे में शिकायत करने वाले अनचाहे चेतावनी संदेश हो सकते हैं। यह महसूस किया गया था कि ये संदेश आम तौर पर उपयोगी होते हैं, भले ही उनमें से कुछ गलत हैं।

जेनेरिक्स

जय की टेबल और कंकाल फाइलें parametrized प्रकारों का उपयोग नहीं करते हैं। jay.yydebug parametrized प्रकार के बिना कोडित है; हालांकि, स्रोतों में जेनेरिक के साथ कोड होते हैं जो इस बिंदु पर टिप्पणी की जाती हैं।

नोटेशन <टैग> में नेस्टेड कोण ब्रैकेट हो सकते हैं और उनके भीतर वर्ण [] खाली हो सकते हैं? , सामान्य अल्फान्यूमेरिक्स के अलावा और। $ _। हालांकि, मान स्टैक $ n के संदर्भों को लागू टैग का उपयोग करके कास्ट किया जाता है और एक पैरामीटरेटेड प्रकार के लिए एक कास्ट जावा में एक अनचेक चेतावनी खींचा जाएगा।

पार्सर क्लास को @SuppressWarnings (“अनचेक”) के साथ एनोटेट किया जा सकता है; हालांकि, यह जावा 5 के लिए जीवन का एक तरीका हो सकता है, यह शायद मूर्खतापूर्ण है।

कंकाल फाइलें

बाइनरी या स्रोत डाउनलोड में जावा के लिए दो कंकाल फाइलें और सी # के लिए एक शामिल है। एक कंकाल फ़ाइल जेनरेट की गई तालिका के प्रारूप को नियंत्रित करती है और इसमें वास्तविक पार्सर एल्गोरिदम शामिल होता है जो तालिकाओं को व्याख्या करता है। एल्गोरिदम सभी वितरित फ़ाइलों में समान हैं लेकिन skeleton.tables निष्पादन समय पर संसाधन फ़ाइल को पढ़कर विभिन्न तालिकाओं को प्रारंभ करता है; यह एक सीमा से बचाता है जो जावा सिस्टम कक्षा के लिए कोड सेगमेंट के आकार पर लगाता है।

संसाधन फ़ाइल बनाने के लिए, skeleton.tables का उपयोग कर पार्सर उत्पन्न करें। पार्सर स्रोत से // yy से शुरू होने वाली रेखाएं निकालें और बिल्कुल उस उपसर्ग को हटा दें। परिणामस्वरूप फ़ाइल को पार्सर की क्लास फ़ाइल के समान निर्देशिका में स्थित होना चाहिए और पार्सर और प्रत्यय .tables के वर्ग नाम का उपयोग करना चाहिए।

कंकाल फ़ाइलों को बदलने के लिए जरूरी नहीं होना चाहिए, लेकिन अगर वे बड़े पैमाने पर टिप्पणी कर रहे हैं। फाइल लाइन उन्मुख हैं। पहले कॉलम में एक वर्ण निर्धारित करता है कि रेखा के साथ क्या होता है: # एक टिप्पणी को चिह्नित करता है और रेखा को अनदेखा किया जाता है। । एक रेखा को चिह्नित करता है जिसे अग्रणी अवधि के बिना कॉपी किया जाता है।

टी एक रेखा को चिह्नित करता है जो ट्रेसिंग के लिए प्रासंगिक है। आम तौर पर इसे एक अग्रणी // टी के साथ कॉपी किया जाता है; यदि विकल्प-सेट सेट किया गया है तो लाइन को अग्रणी टी के बिना कॉपी किया गया है।

अंत में, एक प्रमुख रिक्त स्थान वाली रेखा में एक कमांड होता है जिसके परिणामस्वरूप कुछ तालिका जानकारी का उत्पादन होता है और जो पैरामीटर के रूप में शेष रेखा का उपयोग कर सकता है।

 

क्रियाएं स्विच के शरीर के रूप में कार्यों से कोड उत्सर्जित करती हैं। epilog दूसरे %% के बाद पाठ उत्सर्जित करें।
स्थानीय%% के बाद पाठ% {%} के भीतर पाठ को उत्सर्जित करता है। prolog पहले %% से पहले% {%} के भीतर पाठ को उत्सर्जित करता है।
टोकन उपसर्ग प्रत्येक टोकन मान को एक उपसर्ग के रूप में लाइन के शेष के साथ प्रारंभिक पहचानकर्ता के रूप में उत्सर्जित करता है। संस्करण टिप्पणी पंक्ति के शेष के साथ एक // टिप्पणी emit।
yycheck उपसर्ग yyDefRed उपसर्ग
yyDgoto उपसर्ग yyGindex उपसर्ग
yyLen उपसर्ग yyLhs उपसर्ग
yyRindex उपसर्ग yy सिंडेक्स उपसर्ग
yyTable उपसर्ग प्रत्येक आउटपुट लाइन के लिए उपसर्ग के रूप में लाइन के शेष के साथ प्रासंगिक तालिका के शरीर को उत्सर्जित करता है। yyFinal उपसर्ग एक उपसर्ग के रूप में लाइन के शेष के साथ एक प्रारंभकर्ता के रूप में मूल्य उत्सर्जित करता है।
yyNames उपसर्ग तालिका के शेष के साथ शब्दों की एक सूची के रूप में प्रत्येक आउटपुट लाइन के उपसर्ग के रूप में उत्सर्जित करता है। yyNames-strings स्ट्रिंग प्रारंभकर्ताओं की एक सूची के रूप में तालिका को उत्सर्जित करें।
yyRule उपसर्ग प्रत्येक आउटपुट लाइन के लिए उपसर्ग के रूप में रेखा के शेष रेखाओं के साथ लाइनों की सूची के रूप में तालिका को उत्सर्जित करता है। yyRule-strings स्ट्रिंग प्रारंभकर्ताओं की एक सूची के रूप में तालिका को उत्सर्जित करें।
क्रियाएं स्विच के शरीर के रूप में कार्यों से कोड उत्सर्जित करती हैं। epilog दूसरे %% के बाद पाठ उत्सर्जित करें।
स्थानीय%% के बाद पाठ% {%} के भीतर पाठ को उत्सर्जित करता है। prolog पहले %% से पहले% {%} के भीतर पाठ को उत्सर्जित करता है।

प्रत्येक तालिका आयाम जानकारी के साथ एक टिप्पणी द्वारा prefixed है।

कक्षा प्रबंधन

कंकाल फ़ाइल के डिज़ाइन को दो समस्याओं पर विचार करना होगा: कक्षा में पार्सर को कैसे एम्बेड करें और स्कैनर को इंटरफ़ेस कैसे करें।

वितरित कंकाल फाइलें उपयोगकर्ता को क्लास हेडर युक्त% {%} के भीतर प्रोलॉग की आपूर्ति करने और इस कक्षा को बंद करने वाले दूसरे %% के बाद एक एपिलॉग की आपूर्ति करने की अपेक्षा करती हैं। जय पार्सर के वर्ग का नाम नहीं जानता है।

स्कैनर yyInput के लिए इंटरफेस प्रत्येक पार्सर वर्ग के सदस्य के रूप में उत्पन्न होता है; यह एक अच्छा विकल्प हो सकता है या नहीं भी हो सकता है। तीन विधियां हैं: अग्रिम में कोई तर्क नहीं है और उसे एक बूलियन मान वापस करना होगा जो दर्शाता है कि स्कैनर ने सफलतापूर्वक एक और इनपुट प्रतीक निकाला है; टोकन में कोई तर्क नहीं है और वर्तमान इनपुट प्रतीक को एक पूर्णांक मान के रूप में वापस करना होगा जो पार्सर अपेक्षा करता है; मान में कोई तर्क नहीं है और इनपुट प्रतीक के लिए राज्य / मूल्य स्टैक पर रखने के लिए ऑब्जेक्ट मान वापस कर सकता है। ट्रेसिंग प्रत्येक कॉल के बीच अग्रिम करने के लिए टोकन और मूल्य निरंतर कार्य होने की अपेक्षा करता है।

स्पष्ट टोकन मान पार्सर कक्षा में स्थिरांक के रूप में उत्पन्न होते हैं। एकल पात्र खुद का प्रतिनिधित्व करते हैं; हालांकि, उन जे के लिए ASCII में मानते हैं, फिर यूनिकोड चरित्र सेट। स्कैनर इंटरफ़ेस में स्थिरांक को परिभाषित करना बेहतर हो सकता है लेकिन यह अपेक्षा की जाती है कि स्कैनर को पार्सर की आंतरिक कक्षा के रूप में कार्यान्वित किया गया हो। पीजे इस दृश्य का समर्थन करता है भले ही स्कैनर स्पष्ट रूप से जेएलएक्स का उपयोग करके बनाया गया हो।

डाउनलोड

संस्करण:

1.1.1, जून 2006।

लेखक:

एक्सेल टी। श्राइनर।

Leave a Comment

Your email address will not be published. Required fields are marked *