Parse Trees और Abstract Syntax Trees में अंतर बताने के लिए सबसे सरल उदाहरण क्या है?


14

मेरी समझ से, एक तोता एक पार्स ट्री बनाता है, और फिर उसके बाद उसे त्याग देता है। हालांकि, यह एक सार वाक्यविन्यास पेड़ को भी पॉप आउट कर सकता है, जिसे कंपाइलर कथित तौर पर उपयोग करता है।

मुझे आभास हो रहा है कि पार्स ट्री और एब्सट्रैक्ट सिंटेक्स ट्री दोनों पार्सिंग स्टेज के तहत बनाए गए हैं। तब कोई समझा सकता था कि ये अलग क्यों हैं?


3
उन्हें अलग क्यों होना पड़ता है? क्या वे दो भिन्न दृष्टिकोणों से समान नहीं हो सकते?
S.Lott

1
यकीन नहीं होता कि मैं इन दोनों को "थोड़े अलग दृष्टिकोण" से समझता हूं :-(
कॉम्बिनेटर लॉजिक

यही तो बात है। वे एक ही बात कर रहे हैं, इसलिए भ्रम। आपके दृष्टिकोण के आधार पर आपके पास अलग-अलग शब्द हैं: पार्सिंग बनाम कोड जनरेशन (या एक्सप्रेशन, एक दुभाषिया के मामले में)।
S.Lott

इसमें कोई फर्क नही है। थोड़ी कल्पना के साथ कोई भी संभव सार वाक्य रचना के पेड़ के लिए एक वाक्यविन्यास प्रतिनिधित्व का आविष्कार कर सकता है। कल्पना की कमी के साथ, लिस्प का एस-एक्सप्रेशंस एक डिफ़ॉल्ट वाक्यविन्यास होगा जो हर चीज के लिए उपयुक्त है।
एसके-तर्क

1
आप सभी को टिप्पणी करने से पहले उत्तर को पढ़ना चाहिए। एक अंतर है, लेकिन उन्हें अलग या संयुक्त करना एक कार्यान्वयन मुद्दा है।
पॉल

जवाबों:


20

एक पार्स ट्री को कंक्रीट सिंटैक्स ट्री के रूप में भी जाना जाता है।

मूल रूप से, अमूर्त पेड़ में कंक्रीट के पेड़ की तुलना में कम जानकारी होती है। कंक्रीट के पेड़ में भाषा में प्रत्येक तत्व होता है, जबकि अमूर्त पेड़ ने निर्बाध टुकड़ों को फेंक दिया है।

उदाहरण के लिए अभिव्यक्ति: (2 + 5) * 8

कंक्रीट इस तरह दिखता है

  ( 2  + 5 )  * 8
  |  \ | / |  | |
  |   \|/  |  | |
   \___|__/   | |
       \______|/

जबकि सार पेड़ है:

2  5 
 \/   
  +  8
   \/
   *

ठोस मामलों में कोष्ठक और भाषा के सभी टुकड़ों को पेड़ में शामिल किया गया है। अमूर्त मामले में कोष्ठक चले गए हैं, क्योंकि उनकी जानकारी को पेड़ की संरचना में शामिल किया गया है।


आप इस बात का उल्लेख करना भूल गए कि किस संकलक के लिए यह किस भाषा में लागू किया गया है। क्योंकि, आप जानते हैं, आपके पास नहीं है ... पार्सर कोष्ठक को तुरंत दूर फेंक सकता है।
इंगो

1
@Ingo, मेरे जवाब में कुछ भी कहने के लिए कुछ भी नहीं है जब एक कंपाइलर कोष्ठक फेंकता है। यह पूछ रहा है कि एक ठोस तोते के पेड़ और एक सार पेड़ के बीच क्या अंतर है।
विंस्टन ईवर्ट

तो, निश्चित रूप से, आप अपने दावे के लिए एक स्रोत का नाम दे सकते हैं? या यह सिर्फ आपकी निजी परिभाषा है?
ingo



0

पहली चीज़ जो आपको समझने की ज़रूरत है, वह यह है कि कोई भी आपको एक निश्चित तरीके से पार्सर या कंपाइलर लिखने के लिए मजबूर नहीं करता है। विशेष रूप से, यह जरूरी नहीं है कि एक पार्सर का परिणाम एक पेड़ होना चाहिए। यह किसी भी डेटा संरचना हो सकती है जो इनपुट का प्रतिनिधित्व करने के लिए उपयुक्त है।

उदाहरण के लिए, निम्न भाषा:

prog:
      definition 
    | definition ';' prog
    ;

definition: .....

परिभाषाओं की एक सूची के रूप में प्रतिनिधित्व किया जा सकता है। (Nitpickers का कहना है कि एक सूची है एक पतित पेड़ है, लेकिन वैसे भी।)

दूसरा, पार्स ट्री (या पार्सर जो भी डेटा संरचना लौटाता है) पर पकड़ की आवश्यकता नहीं है। इसके विपरीत, आमतौर पर कंपाइलरों का निर्माण पास के अनुक्रम के रूप में किया जाता है, जो पिछले पास के परिणामों को बदल देते हैं। इसलिए कंपाइलर का समग्र लेआउट इस प्रकार हो सकता है:

parser :: String             -> Maybe [Definitions]      -- parser
pass1  :: [Definitions]      -> Maybe DesugaredProg      -- desugarer
pass2  :: DesugaredProg      -> Maybe TypedProg          -- type checker
pass3  :: TypedProg          -> Maybe AbstractTargetLang -- code generation
pass4  :: AbstractTargetLang -> Maybe String             -- pretty printer

compiler :: String           -> Maybe String    -- transform source code to target code
compiler source = do
   defs  <- parser source
   desug <- pass1 defs
   typed <- pass2 desug
   targt <- pass3 typed
   pass4 targt

निचला रेखा: यदि आप लोगों को पार्स ट्री , एब्सट्रैक्ट सिंटेक ट्री , कंक्रीट सिंटैक्स ट्री आदि के बारे में बात करते हुए सुनते हैं , तो हमेशा दिए गए उद्देश्य के लिए उपयुक्त डेटा संरचना द्वारा स्थानापन्न करें , और आप ठीक हैं।


2
यह सवाल का जवाब कैसे है?
विंस्टन एवर्ट

@WinstonEwert मेरा दावा है कि "पार्स ट्री" और "एब्सट्रैक्ट सिंटैक्स ट्री" अमूर्त हैं और इसका मतलब "उपयुक्त डेटा संरचनाओं" से अधिक कुछ नहीं है। तो, इसका उत्तर यह है कि इसकी व्यापकता में सवाल का कोई मतलब नहीं है, जब तक कि आप पार्सर की वापसी प्रकार और भाषा एल के संकलक XY में कुछ अन्य पास के रिटर्न प्रकार के बीच का अंतर नहीं पूछते हैं
Ingo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.