java - I don't know how to implement a recursive syntax analyzer -


मेरे पास निम्नलिखित संदर्भ मुक्त व्याकरण हैं:

  ई = (ई) ई = i | Îμ   

एक इनपुट स्ट्रिंग को देखते हुए मुझे यह निर्धारित करना होगा कि यह स्ट्रिंग इस व्याकरण द्वारा स्वीकृत है या नहीं, पुनरावर्ती सिंटैक्स विश्लेषक के साथ। उदाहरण के लिए, अगर मेरे पास इनपुट है:

  ((i)) & lt; - यह मान्य है (((i)))) & lt; - यह अमान्य है () & lt; - यह मान्य है   

और मेरे पास ऐसा कोड है जो इन सभी को करना है

  सार्वजनिक स्थिर बूलीयन ई () {int pOpen; POpen = 0; If (lexico.equals ("(")) {pOpen ++; E ();} और यदि (lexico.equals ("i")) {if (pOpen == 0) सत्य वापस आती है; // यह वैध है सत्यापित करेंपैरेन्टिसिस ( );}} सार्वजनिक स्थैतिक बूलियन सत्यापित करेंपेरिन्थीसिस () {int pClose = 0; जबकि ((लेक्सिको = अगली सिम्बोल ())। बराबर (")")) pClose ++; }   

लेकिन मुझे यकीन नहीं है कि कैसे खुला कन्टेन्ट्स की संख्या ( बंद कोष्ठकों की संख्या के समान है ) ।

क्या मुझे सत्यापन कोड के आधार पर जबकि का उपयोग करना है?

के रूप में आप के रूप में पुनरावर्ती आनंद लें।

  सार्वजनिक स्थिर बूलियन अभिव्यक्तिआवकता (स्ट्रिंग एक्सस्प) {यदि (! Expr.contains ("(") और amp;! Expr.contains (")")) {वापस सत्य; } Int indexOfLeft = -1; इंट इंडेक्सऑफ़राइट = -1; IndexOfLeft = expr.indexOf ("("); indexOfRight = expr.lastIndexOf (")"); यदि (indexOfLeft & gt; = indexOfRight) {वापसी झूठी; } वापसी की अभिव्यक्ति IsCorrect (expr.substring (indexOfLeft + 1, indexOfRight)); }   

यदि आप समझ नहीं पा रहे हैं कि क्या हो रहा है, तो सवाल पूछने में संकोच न करें, लेकिन इसे स्वयं प्राप्त करने का प्रयास करें।

Comments

Popular posts from this blog

Out of index C/C++ -

algorithm - Graph cut with python: How to set up the graph correctly? -

objective c - how Set autolayout for multiple dynamic buttons and labells in iOS? -