यह कमांड बायएसीसी है जिसे हमारे कई मुफ्त ऑनलाइन वर्कस्टेशन जैसे कि उबंटू ऑनलाइन, फेडोरा ऑनलाइन, विंडोज ऑनलाइन एमुलेटर या मैक ओएस ऑनलाइन एमुलेटर का उपयोग करके ऑनवर्क्स फ्री होस्टिंग प्रदाता में चलाया जा सकता है।
कार्यक्रम:
नाम
वाईएसीसी - ए एलएएलआर(1) पार्सर जनरेटर
SYNOPSIS
याक [ -BdgilLPrtvVy ] [ -b फ़ाइल_उपसर्ग ] [ -o निर्गम संचिका ] [ -p प्रतीक_उपसर्ग ] फ़ाइल का नाम
वर्णन
याक फ़ाइल में व्याकरण विनिर्देश पढ़ता है फ़ाइल का नाम और एक उत्पन्न करता है एलएएलआर(1) पार्सर
इसके लिए। पार्सर्स में एक सेट होता है एलएएलआर(1) पार्सिंग टेबल और ड्राइवर रूटीन
सी प्रोग्रामिंग भाषा में लिखा गया है। याक आम तौर पर पार्स टेबल और लिखता है
फ़ाइल के लिए ड्राइवर रूटीन y.tab.c.
निम्न विकल्प उपलब्ध हैं:
-b फ़ाइल_उपसर्ग
RSI -b विकल्प आउटपुट फ़ाइल नामों से जुड़े उपसर्ग को स्ट्रिंग में बदल देता है
द्वारा चिह्नित फ़ाइल_उपसर्ग. डिफ़ॉल्ट उपसर्ग वर्ण है y.
-B एक बैकट्रैकिंग पार्सर बनाएं (संकलन-प्रकार कॉन्फ़िगरेशन के लिए)। btyacc).
-d RSI -d विकल्प हेडर फ़ाइल का कारण बनता है वाई.टैब.एच लिखा जाना है. इसमें #define शामिल है
टोकन पहचानकर्ताओं के लिए.
-g RSI -g विकल्प उत्पन्न का एक ग्राफिकल विवरण का कारण बनता है एलएएलआर(1) पार्सर होना
फ़ाइल में लिखा है y.dot ग्राफ़विज़ प्रारूप में, द्वारा संसाधित होने के लिए तैयार डॉट(1).
-i RSI -i विकल्प एक पूरक हेडर फ़ाइल का कारण बनता है वाई.टैब.आई लिखा जाना है. इसमें है
पारंपरिक को मैप करने के लिए आवश्यकतानुसार बाहरी घोषणाएँ और पूरक #परिभाषाएँ
याक yy-किसी भी चीज़ के आगे नाम जोड़ा गया -p विकल्प निर्दिष्ट कर सकता है. कोड फ़ाइल, उदाहरण के लिए,
y.tab.c इस फ़ाइल के साथ-साथ #शामिल करने के लिए संशोधित किया गया है वाई.टैब.एच फ़ाइल, प्रवर्तन
उन फ़ाइलों में परिभाषित प्रतीकों का लगातार उपयोग।
पूरक हेडर फ़ाइल लेक्स- और के संकलन को अलग करना आसान बनाती है
yacc-files.
-l अगर -l विकल्प निर्दिष्ट नहीं है, याक डालेंगे #रेखा उत्पन्न निर्देश
कोड. #रेखा निर्देश सी कंपाइलर को उत्पन्न कोड में त्रुटियों से संबंधित होने देते हैं
उपयोगकर्ता का मूल कोड. यदि -l विकल्प निर्दिष्ट है, याक नहीं डालेगा
#रेखा दिशा निर्देशों। #रेखा उपयोगकर्ता द्वारा निर्दिष्ट निर्देश बरकरार रहेंगे.
-L स्थिति प्रसंस्करण सक्षम करें, उदाहरण के लिए, "% स्थान" (संकलन-प्रकार कॉन्फ़िगरेशन के लिए)।
btyacc).
-o निर्गम संचिका
पार्सर फ़ाइल के लिए फ़ाइल नाम निर्दिष्ट करें। यदि यह विकल्प नहीं दिया गया है, तो आउटपुट
फ़ाइल नाम फ़ाइल प्रत्यय के साथ संयोजित फ़ाइल उपसर्ग है, उदाहरण के लिए, y.tab.c। इस
को ओवरराइड करता है -b विकल्प.
-p प्रतीक_उपसर्ग
RSI -p विकल्प yacc-जनरेट किए गए प्रतीकों से जुड़े उपसर्ग को स्ट्रिंग में बदल देता है
द्वारा चिह्नित प्रतीक_उपसर्ग. डिफ़ॉल्ट उपसर्ग स्ट्रिंग है Y Y।
-P एक रीएंट्रेंट पार्सर बनाएं, उदाहरण के लिए, "%pure-parser"।
-r RSI -r विकल्प कारण याक कोड और तालिकाओं के लिए अलग-अलग फ़ाइलें तैयार करना। कोड
फ़ाइल का नाम है y.code.c, और टेबल फ़ाइल को नाम दिया गया है y.tab.c. उपसर्ग "y." हो सकता है
का उपयोग करके ओवरराइड किया गया -b विकल्प.
-s दबाओ"#define"स्ट्रिंग अक्षर के लिए तैयार किए गए कथन"% टोकन" कथन,
मूल से अधिक निकटता से मेल खाने के लिए याक व्यवहार.
सामान्यतः जब याक जैसे एक लाइन देखता है
%टोकन OP_ADD "जोड़ें"
यह नोटिस करता है कि उद्धृत "ADD" एक वैध C पहचानकर्ता है, और एक #define not उत्पन्न करता है
केवल OP_ADD के लिए, लेकिन ADD के लिए भी, उदाहरण के लिए,
#ओपी_एडीडी 257 को परिभाषित करें
#परिभाषित करें जोड़ें 258
मूल याक दूसरा उत्पन्न नहीं करता"#define"। -s विकल्प दबा देता है
यह "#define".
POSIX (IEEE 1003.1 2004) केवल नाम और संख्याओं का दस्तावेजीकरण करता है।% टोकन", यद्यपि
मूल याक और बाइसन भी स्ट्रिंग अक्षर स्वीकार करते हैं।
-t RSI -t विकल्प द्वारा उत्पन्न प्रीप्रोसेसर निर्देशों को बदल देता है याक ताकि डिबगिंग हो सके
संकलित कोड में कथनों को शामिल किया जाएगा।
-v RSI -v विकल्प उत्पन्न पार्सर के मानव-पठनीय विवरण का कारण बनता है
फ़ाइल में लिखा है y.आउटपुट.
-V संस्करण संख्या को मानक आउटपुट पर प्रिंट करें।
-y याक इस विकल्प को अनदेखा करता है, जो बाइसन प्रत्यक्ष POSIX संगतता के लिए समर्थन करता है।
एक्सटेंशन
याक बाइसन और अन्य कार्यान्वयनों के साथ अनुकूलता के लिए कुछ एक्सटेंशन प्रदान करता है
हाँ %विनाशक और % स्थान सुविधाएँ तभी उपलब्ध हैं जब याक कर दिया गया है
बैक-ट्रैकिंग का समर्थन करने के लिए कॉन्फ़िगर और संकलित किया गया (btyacc) कार्यक्षमता.
शेष सुविधाएँ हमेशा उपलब्ध हैं:
%विनाशक { कोड } प्रतीक+
उस कोड को परिभाषित करता है जो तब लागू होता है जब त्रुटि के दौरान कोई प्रतीक स्वचालित रूप से खारिज हो जाता है
वसूली। इस कोड का उपयोग गतिशील रूप से आवंटित मेमोरी को पुनः प्राप्त करने के लिए किया जा सकता है
उन मामलों के लिए संबंधित अर्थपूर्ण मान के साथ जहां उपयोगकर्ता क्रियाएं प्रबंधित नहीं की जा सकतीं
स्मृति स्पष्ट रूप से.
पार्स त्रुटि का सामना करने पर, उत्पन्न पार्सर स्टैक पर प्रतीकों को हटा देता है
और इनपुट टोकन जब तक यह उस स्थिति तक नहीं पहुंच जाता जो पार्सिंग को जारी रखने की अनुमति देगा।
इस त्रुटि पुनर्प्राप्ति दृष्टिकोण के परिणामस्वरूप मेमोरी लीक हो जाती है यदि YYSTYPE मूल्य है, या
इसमें गतिशील रूप से आवंटित मेमोरी के संकेतक शामिल हैं।
ब्रैकेटेड कोड जब भी पार्सर किसी प्रतीक को हटा देता है तो इसे लागू किया जाता है।
अंदर कोड, "$$या "$ $” के साथ जुड़े अर्थपूर्ण मूल्य को निर्दिष्ट करता है
त्याग दिया गया प्रतीक, और "@$"इसके स्थान को निर्दिष्ट करता है (देखें)। % स्थान निर्देश)।
एक प्रति-प्रतीक विध्वंसक को एक व्याकरण प्रतीक को सूचीबद्ध करके परिभाषित किया जाता है प्रतीक+. एक प्रति-
टाइप डिस्ट्रक्टर को सिमेंटिक टाइप टैग सूचीबद्ध करके परिभाषित किया जाता है (उदाहरण के लिए, " ") में
प्रतीक+; इस मामले में, पार्सर लागू होगा कोड जब भी यह किसी व्याकरण को त्याग देता है
वह प्रतीक जिसमें वह सिमेंटिक प्रकार का टैग हो, जब तक कि उस प्रतीक का अपना प्रति-प्रतीक न हो
विध्वंसक.
डिफॉल्ट डिस्ट्रक्टर की दो श्रेणियां समर्थित हैं जिन्हें त्यागते समय लागू किया जाता है
कोई भी व्याकरण प्रतीक जिसमें कोई प्रति-प्रतीक और कोई प्रति-प्रकार नाशक नहीं है:
· " के लिए कोड<*>" का उपयोग उन व्याकरण प्रतीकों के लिए किया जाता है जिनकी स्पष्ट रूप से घोषणा की गई है
सिमेंटिक टाइप टैग (के माध्यम से)%प्रकार");
· " के लिए कोड<>" का उपयोग उन व्याकरण प्रतीकों के लिए किया जाता है जिनका कोई घोषित अर्थ नहीं है
टैग टाइप करें.
%अपेक्षा करना संख्या
बताता है याक बदलाव/संघर्षों में कमी की अपेक्षित संख्या। उससे ही बनता है
यदि संख्या भिन्न हो तो सूचित करें।
%उम्मीद-आरआर संख्या
कहना याक संघर्षों को कम करने/कम करने की अपेक्षित संख्या। उससे ही बनता है
यदि संख्या भिन्न हो तो सूचित करें। यह (बाइसन के विपरीत) एलएएलआर पार्सर्स में स्वीकार्य है।
% स्थान
बताता है याक प्रत्येक से जुड़ी स्थिति की जानकारी के प्रबंधन को सक्षम करने के लिए
टोकन, वैश्विक चर में लेक्सर द्वारा प्रदान किया गया yylloc, प्रबंधन के समान
में प्रदान की गई शब्दार्थ मूल्य संबंधी जानकारी yylval.
जहाँ तक शब्दार्थ मूल्यों का सवाल है, स्थानों का उपयोग क्रियाओं के भीतर संदर्भित किया जा सकता है @$ सेवा मेरे
बायीं ओर के प्रतीक के स्थान को देखें, और @N (N एक पूर्णांक) संदर्भित करने के लिए
दाहिनी ओर के प्रतीकों में से एक के स्थान पर। अर्थ संबंधी मूल्यों के लिए भी,
जब किसी नियम का मिलान किया जाता है, तो स्थान की गणना करने के लिए एक डिफ़ॉल्ट क्रिया का उपयोग किया जाता है
द्वारा प्रतिनिधित्व @$ पहले प्रतीक की शुरुआत और आखिरी के अंत के रूप में
नियम के दाहिनी ओर प्रतीक. यह डिफ़ॉल्ट गणना हो सकती है
को स्पष्ट असाइनमेंट द्वारा ओवरराइड किया गया @$ एक नियम कार्रवाई में.
के जैसा yylloc is YYL प्रकार, जिसे डिफ़ॉल्ट रूप से इस प्रकार परिभाषित किया गया है:
टाइपडिफ़ संरचना YYLTYPE {
int फर्स्ट_लाइन;
int प्रथम_कॉलम;
int अंतिम_लाइन;
int अंतिम_कॉलम;
} YYLTYPE;
YYL प्रकार उपयोगकर्ता द्वारा पुनः परिभाषित किया जा सकता है (YYLTYPE_IS_DEFINED परिभाषित किया जाना चाहिए, को
विनिर्देश फ़ाइल के घोषणा अनुभाग में डिफ़ॉल्ट को रोकें)। के रूप में
बाइसन, मैक्रो YYLLOC_DEFAULT हर बार जब गणना के लिए किसी नियम का मिलान किया जाता है तो इसे लागू किया जाता है
संबंधित कार्रवाई से पहले, नियम के बाईं ओर के लिए एक स्थिति है
निष्पादित; इस मैक्रो को उपयोगकर्ता द्वारा पुनः परिभाषित किया जा सकता है।
यह निर्देश एक जोड़ता है YYL प्रकार करने के लिए पैरामीटर yyerror()। अगर %शुद्ध-पार्सर
निर्देश मौजूद है, ए YYL प्रकार पैरामीटर जोड़ा गया है yylex() कहता है।
%लेक्स-परम { तर्क-घोषणा }
डिफ़ॉल्ट रूप से, लेक्सर कोई पैरामीटर स्वीकार नहीं करता है, उदाहरण के लिए, yylex(). इस निर्देश का उपयोग करें
अपने अनुकूलित लेक्सर के लिए पैरामीटर घोषणाएँ जोड़ें।
% पार्स-परम { तर्क-घोषणा }
डिफ़ॉल्ट रूप से, पार्सर कोई पैरामीटर स्वीकार नहीं करता है, उदाहरण के लिए, yyparse(). इस निर्देश का प्रयोग करें
अपने अनुकूलित पार्सर के लिए पैरामीटर घोषणाएँ जोड़ने के लिए।
%शुद्ध-पार्सर
अधिकांश चर (इसके अलावा) yydebug और yynerrs) भीतर स्टैक पर आवंटित किए जाते हैं
य्यपारसे, पार्सर को यथोचित पुनःप्रवेशी बनाना।
%टोकन-तालिका
टोकन के लिए पार्सर के नाम उपलब्ध कराएं yytname सरणी. हालाँकि, याक
इस सरणी में "$end", "$error" या "$unDefined" को पूर्वनिर्धारित नहीं करता है।
पोर्टेबिलिटी
रॉबर्ट कॉर्बेट के अनुसार,
बर्कले याक एक है एलएएलआर(1) पार्सर जनरेटर। बर्कले याक को बनाया गया है
AT&T Yacc के साथ यथासंभव संगत। बर्कले Yacc किसी भी इनपुट को स्वीकार कर सकता है
विशिष्टता जो AT&T Yacc दस्तावेज़ीकरण के अनुरूप है। विशेष विवरण
यह संभवतः AT&T Yacc की अप्रलेखित सुविधाओं का लाभ उठाएगा
अस्वीकृत।
में तर्क
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/yacc.html
AT&T yacc की कुछ विशेषताओं का दस्तावेजीकरण करता है जिनकी अब POSIX अनुपालन के लिए आवश्यकता नहीं है।
जैसा कि कहा गया है, आपको कुछ अन्य कार्यान्वयन के साथ व्याकरण फ़ाइलों का पुन: उपयोग करने में रुचि हो सकती है
जो AT&T yacc के साथ पूरी तरह संगत नहीं है। उदाहरण के लिए, बाइसन है। यहाँ हैं
कुछ अंतर:
· याक किसी क्रिया के बाएँ घुंघराले ब्रेस से पहले एक बराबर चिह्न स्वीकार करता है (जैसा कि
मूल व्याकरण फ़ाइल एफटीपीवाई):
| स्टेट सीआरएलएफ
= {
statcmd();
}
· याक और बाइसन अलग-अलग क्रम में कोड उत्सर्जित करता है, और विशेष रूप से बाइसन आगे बढ़ता है
बिना प्रदान किए yylex, yyparse और yyerror जैसे सामान्य कार्यों का संदर्भ
प्रोटोटाइप।
· "%उम्मीद" के लिए बाइसन का समर्थन एक से अधिक रिलीज में टूट गया है। अछे नतीजे के लिये
बाइसन का उपयोग करके, उस निर्देश को हटा दें।
· बाइसन के पास कुछ के लिए कोई समकक्ष नहीं है याकके कमांड-लाइन विकल्पों पर निर्भर है
व्याकरण फ़ाइल में सन्निहित निर्देश।
· बाइसन का "-y"विकल्प एटी एंड टी वाईएसीसी की सुविधाओं के लिए बाइसन के समर्थन की कमी को प्रभावित नहीं करता है
जिन्हें अप्रचलित माना गया।
निदान
यदि ऐसे नियम हैं जो कभी कम नहीं होते हैं, तो ऐसे नियमों की संख्या बताई जाती है
मानक त्रुटि। अगर वहां कोई है एलएएलआर(1) संघर्ष, संघर्षों की संख्या बताई गई है
मानक त्रुटि पर.
onworks.net सेवाओं का उपयोग करके बायएसीसी का ऑनलाइन उपयोग करें