एक पार्स ट्री को अपडेट करने के लिए कुशल एल्गोरिदम


14

मान लीजिए कि मेरे पास कोड का एक बड़ा ब्लॉक है जिसे मैंने पहले ही लेक्स किया है और पार्स किया है।
मान लीजिए कि सिर्फ एक चरित्र बदलता है; मैं अपनी पार्सिंग को अपडेट करना चाहता हूं, लेकिन चूंकि संशोधन पूरी चीज की तुलना में बहुत छोटा है, इसलिए मैं जानना चाहूंगा कि क्या पूरी चीज को फिर से पार्स करना संभव नहीं है, लेकिन अगर फिर से पार्स करने के लिए सीमा निर्धारित करने के लिए एल्गोरिदम हैं , और ठीक से चलती हुई सीमाओं से निपटने के लिए।

अग्रिम में धन्यवाद!


1
हाय, और आपका स्वागत है! मैं इस विषय का विशेषज्ञ नहीं हूं, लेकिन मुझे लगता है कि आप जिस कीवर्ड की तलाश कर रहे हैं वह वृद्धिशील पार्सिंग या वृद्धिशील संकलन है
एमएस डौस्टी

@ सूचक संकेत के लिए धन्यवाद! क्या आप कुछ विवरणों के साथ उत्तर जोड़ने पर विचार करेंगे? यह बहुत सराहना की जाएगी!
अगोस

जवाबों:


9

@Agos अनुरोध के अनुसार, मैंने टिप्पणी को एक उत्तर में बदल दिया।

सबसे पहले, मुझे यह मानना ​​होगा कि मैं वास्तव में इस क्षेत्र का जानकार नहीं हूं। फिर भी मैं आपको सुझाव देता हूं कि पेपर बिल्डिंग फ्रेंडली पार्सर और एफिशिएंट एंड फ्लेक्सिबल इंक्रीमेंटल पार्सिंग में देखें कि 2000 से पहले इंक्रीमेंटल पार्सिंग के लिए एल्गोरिदम का क्या उपयोग किया गया था।

अद्यतित उपचारों के लिए, आप इन पत्रों पर एक नज़र डाल सकते हैं:

अधिक जानकारी: पार्सिंग / संकलन के लिए दो दृष्टिकोण हैं (कम से कम):

  • बैच दृष्टिकोण, जिसमें कोड के पूरे ब्लॉक पार्स किया गया है / संकलित।
  • वृद्धिशील दृष्टिकोण, जिसमें दस्तावेज़ पहले पार्स किया गया है / बैच मोड में संकलित, और फिर परिवर्तन का पता चलता है और कम से कम फिर से पार्स / पुनः संकलन लागू किया जाता है। यह दृष्टिकोण न केवल पार्स / संकलन की गति बढ़ाता है, बल्कि पृष्ठभूमि संकलन जैसे आईडीई निफ्टी सुविधाओं में भी मदद करता है , जो आलसी संकलन से संबंधित है । (आप IntelliSense जैसे वाणिज्यिक सुविधाओं के बारे में भी खोज कर सकते हैं )।

1

यदि आपका वृद्धिशील पार्सर लाइन के प्रत्येक छोर पर स्थिति को बचाता है, तो आप अंतिम वैध पार्सर स्थिति से बस फिर से पार्स करते हैं (सर्वोत्तम मामले में, उदाहरण के लिए एक पूर्ण-पार्स के बाद यह सिर्फ लाइन की शुरुआत है जहां संशोधन शुरू होता है) और अंत में रुकना बंद करें जहां संशोधन समाप्त होता है (आंतरिक रूप से पार्सर ठीक से संरचना को पहचानने के लिए संशोधन से आगे देख सकता है)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.