2011-04-15 17 views
6

मैं yypush_parse() फ़ंक्शन पर एक अतिरिक्त पैरामीटर (प्रकार YYSTYPE का टोकन नाबालिग नहीं) कैसे पास कर सकता हूं?बाइसन - पुश और शुद्ध पार्सर के लिए अतिरिक्त पैरामीटर

पार्सर वास्तव में पुनर्वित्तक है, लेकिन यह एक अतिरिक्त चरम अनुप्रयोग के थ्रेड-सुरक्षा के लिए महत्वपूर्ण है, जिसमें मुझे अपने पार्सर को एकीकृत करने की आवश्यकता है (यह एक PHP एक्सटेंशन है, इसलिए हम TSRM के बारे में बात कर रहे हैं)।

मैं केवल उस पैरामीटर से छुटकारा नहीं पा सकता क्योंकि एक्शन कोड के अंदर मैं फ़ंक्शंस कॉल करने जा रहा हूं जो उपयोगकर्तालैंड-सुलभ रूप में एएसटी उत्पन्न करेगा।

मैं YYPUSH_DECLS आसपास हैक करने की कोशिश की है और यह समारोह की घोषणा के रूप में जहाँ तक काम करता है का सवाल है, लेकिन कुछ हजार locs नीचे yypush_parse के कार्यान्वयन आता है, और मैं समारोह हस्ताक्षर जहां अधिलेखित करने के लिए किसी भी तरह से नहीं देख सकते हैं yypush_parse का कार्यान्वयन शुरू होता है।

YYPARSE_PARAM केवल तभी उपयोग किया जाता है जब पार्सर एक पुश नहीं है (जहां तक ​​मैं कह सकता हूं), लेकिन मेरे मामले में मुझे प्रसंस्करण लूप में जो चीजें करना है, उसके कारण मुझे धक्का देना चाहिए, पार्सिंग स्टैक में एक नया टोकन जोड़ने से पहले।

तो मुझे आश्चर्य है कि %directive या कुछ ऐसा मदद कर सकता है या नहीं।

दूसरी तरफ, मुझे लगता है कि YYPARSE_PARAM का उपयोग तब तक किया जाना चाहिए जब तक यह परिभाषित नहीं किया गया हो, इससे कोई फर्क नहीं पड़ता कि यह किस प्रकार का पार्सर है। यह एक दयालुता है यह नहीं है।

उत्तर

0

%parse-paramYYPARSE_PARAM बहिष्कृत है और इसका उपयोग नहीं किया जाना चाहिए।

+0

अफसोस की बात है, '% parse-param'' yyparse() 'फ़ंक्शन के लिए है, न कि yypush_parse()'। –

+0

आप किसके बारे में बात कर रहे हैं? यह मेरे लिए काम करता है, बाइसन 2.4.3 – Flavius

+0

ठीक है: आइए मेरी टिप्पणी संशोधित करें - दुख की बात है कि दस्तावेज का उल्लेख नहीं है कि 'yypush_parse()', AFAICS के साथ '% parse-param' का उपयोग किया जा सकता है। आपके अनुभवजन्य साक्ष्य बताते हैं कि इसका उपयोग किया जा सकता है; हमें शायद बाइसन टीम को एक नोट प्राप्त करना चाहिए कि यह बिट दस्तावेज़ीकरण से गुम है। –