मैं बेस क्लास श्रोता को विस्तारित कर रहा हूं और कुछ मूल्यों में पढ़ने का प्रयास कर रहा हूं, हालांकि आदेश में कोई पदानुक्रम नहीं लगता है। इस प्रकारएएनटीएलआर 4: वृक्ष निर्माण
एक मेरी व्याकरण का संस्करण है कटौती:
start: config_options+
config_options: (KEY) EQUALS^ (PATH | ALPHANUM) (' '|'\r'|'\n')* ;
KEY: 'key' ;
EQUALS: '=' ;
ALPHANUM: [0-9a-zA-Z]+ ;
हालांकि इस कार्यान्वयन की पार्स पेड़ config_options स्तर (टर्मिनल स्तर) पर सपाट है iethe शासन शुरू config_options के कई बच्चे हैं, लेकिन बराबर होती है config_options के उप-नियमों की जड़ नहीं है, सभी टोकन के पास रूट नोड के रूप में नियम config_options है। मैं टर्मिनलों में से एक को रूट नोड कैसे बना सकता हूं?
इस विशेष नियम में मैं नहीं चाहता कि किसी भी रिक्त स्थान पर कब्जा कर लिया जाए, मुझे पता है कि>> लेक्सर के लिए निर्देशित छोड़ दिया गया है, हालांकि कुछ ऐसे मामले हैं जहां मुझे अंतरिक्ष चाहिए। स्ट्रिंग में यानी ' "' (ALPHANUM | '') '"'
(नोट:^काम करने के लिए प्रतीत नहीं होता है) इनपुट के लिए
एक उदाहरण है:
कुंजी = abcdefg
कुंजी = 90weata
कुंजी = acbefg9
सभी मैं करना चाहता हूँ कुंजी और मान जोड़े निकालने है। मैं उम्मीद करता हूं कि '=' जड़ होगी और दो बच्चे कुंजी और मूल्य होंगे।
आप टर्मिनलों के बीच संबंध परिभाषित करने में सक्षम कैसे होंगे? यानी बराबर चिह्न के बच्चे मिलते हैं। या यह एएनटीएलआर 4 में मान्य विचार नहीं है? क्या पार्स पेड़ के बजाय एएसटी बनाने का कोई तरीका है? – Har
@ user1932405, उदाहरण के लिए एक अतिरिक्त नियम, 'मान' बनाएं:' config_options: कुंजी इक्विटी मान; मूल्य: (पथ | अल्फानम) ('' | '\ r' | '\ n') *; –
ओह ठीक है, इसके लिए धन्यवाद, इसलिए बीमार को पार्स नियमों के आधार पर एएसटी बनाना है, न कि टोकन। – Har