में एस-एक्सप्रेशन को पार्स करने का सही तरीका मैं एक एस-एक्सप्रेशन रीडर (बाद में एक योजना दुभाषिया और एक कंपाइलर दोनों के साथ उपयोग करने के लिए) को लागू करने का एक तरीका ढूंढ रहा हूं, लेकिन मैं खुद से पूछ रहा हूं कि कैसे (अगर बिल्कुल) मुझे इसके लिए एएसटी लिखना चाहिए।ओओपी
मैं एसआईसीपी पढ़ रहा हूं, और यह योजना के भीतर से काफी सरल है, लेकिन मैं ओओ फैशन में सी ++ में दुभाषिया और कंपाइलर को कार्यान्वित करना चाहता हूं।
कृपया ध्यान रखें कि मैं केवल सीखने के उद्देश्यों के लिए ऐसा कर रहा हूं, इसलिए मैं वास्तव में ऐसा करने का सबसे आसान या तेज़ तरीका नहीं ढूंढ रहा हूं, बल्कि इसे करने का सही और पुन: प्रयोज्य तरीका ढूंढ रहा हूं।
मैं कुछ योजना कार्यान्वयन है कि लोगों को पार्स एस भाव और आसानी से उत्पादन विपक्ष कोशिकाओं, कुछ इस तरह में देखा है:
struct Sexpr
{
};
struct Cons : public Sexpr
{
Sexpr* left;
Sexpr* right;
};
struct IntAtom : Sexpr
{
int value;
};
और एक साथ योजना Atom
, या कुछ और के प्रत्येक प्रकार के लिए Sexpr के उपवर्ग उन पंक्तियों।
मुझे यकीन नहीं है, लेकिन यह मेरे लिए एक हैक जैसा लगता है ... क्या यह काम पाठक के बजाय दुभाषिया द्वारा नहीं किया जाना चाहिए?
मैं क्या जानना चाहता हूं कि यह एस-एक्सप्रेशन पढ़ने का सबसे अच्छा (या सही) तरीका माना जाता है, या यह पार्सर की तुलना में दुभाषिया का काम है? क्या पार्सर को विपक्षी कोशिकाओं पर भरोसा करने के बजाय अपना स्वयं का एएसटी होना चाहिए?
यदि मैं यह सही पढ़ रहा हूं, तो प्रश्न को पार्सिंग के साथ बहुत कुछ नहीं करना है। इसके बजाय, मुझे लगता है कि आप पूछ रहे हैं: एस-अभिव्यक्ति डेटा प्रकार के लिए सबसे उचित प्रतिनिधित्व क्या है। क्या आप सहमत हैं? – dyoo
@dyoo हां और नहीं। हां, आप सही हैं, मैं एस-एक्सप्रेशन के लिए सबसे उपयुक्त प्रतिनिधित्व की तलाश में हूं। और नहीं, आप गलत हैं, इस सवाल को स्पष्ट रूप से पार्सिंग के साथ करना है। अगर मैं केवल सेक्सप्र के लिए सबसे उपयुक्त प्रतिनिधित्व की तलाश में था, तो इसमें कोई संदेह नहीं होगा कि यह विपक्षी कोशिकाएं होगी। हालांकि, मैं विशेष रूप से ** पार्सिंग के लिए sexpr का सबसे उचित प्रतिनिधित्व ढूंढ रहा हूं। – ivanmp
ठंडा। अच्छी स्पष्टीकरण। फिर: एक चीज जो पार्सिंग कार्य को अलग कर सकती है वह स्रोत स्थान जानकारी की आवश्यकता है। सादा विपक्ष कोशिकाओं को याद नहीं है कि वे मूल स्रोत से कहां से आए थे। पार्सिंग के दौरान, आप त्रुटि संदेशों का समर्थन करना चाह सकते हैं जो स्रोत को इंगित कर सकते हैं। पार्सिंग के लिए हमें और क्या चीजें चाहिए? – dyoo