Parsec.Expr.buildExpressionParser
के लिए दस्तावेज़ का कहना है:Parsec.Expr दोहराया उपसर्ग/पोस्टफिक्स ऑपरेटर
उपसर्ग और पोस्टफ़िक्स ही पूर्वता के ऑपरेटरों केवल एक बार हो सकता है (यानी -2 यदि अनुमति नहीं है - उपसर्ग है नकारना)।
और वास्तव में, यह, मुझे काट भाषा मैं पार्स करने के लिए कोशिश कर रहा हूँ का उपसर्ग और पोस्टफ़िक्स ऑपरेटरों की मनमानी पुनरावृत्ति (**a[1][2]
की तरह एक सी अभिव्यक्ति के बारे में सोच) की अनुमति देता है के बाद से किया गया है।
तो, Parsec
क्यों इस प्रतिबंध को बनाते हैं, और मैं इसके आसपास कैसे काम कर सकता हूं?
मुझे लगता है कि मैं अपने उपसर्ग/पोस्टफिक्स पार्सर्स को term
पार्सर में नीचे ले जा सकता हूं क्योंकि उनके पास सबसे ज्यादा प्राथमिकता है।
यानी
**a + 1
(*(*(a)))+(1)
लेकिन क्या के रूप में पार्स किया गया है मैं अगर मैं के रूप में
*(*((a)+(1)))
है कि मैं क्या चाहता हूँ buildExpressionParser
था कि यह पार्स करने के लिए चाहता था कर सकता था, मैं मेज में ऑपरेटरों के आदेश को फिर से व्यवस्थित कर सकता था।
नोट एक बेहतर समाधान के लिए here देखें
मुझे आपका उत्तर बहुत उपयोगी पाया गया, लेकिन मैं एक और समस्या में भाग गया, विस्तृत [यहां] (http://stackoverflow.com/questions/11174775), और यदि आप एक नज़र डाल सकते हैं, तो मैं इसकी सराहना करता हूं मौका है कि आपके पास समाधान है। –
उपयोगी उत्तर के लिए धन्यवाद। मुझे इस समस्या के सामान्यीकरण के साथ कुछ कठिनाइयों का सामना करना पड़ रहा है। यदि आपके पास कोई सुझाव है, तो उनका बहुत स्वागत होगा (देखें http://stackoverflow.com/questions/33214163/parsec-expr-repeated-prefix-with-different-priority/33217888#33217888) – BartBog