क्या वे एक संकलन प्रक्रिया के विभिन्न चरणों द्वारा उत्पन्न होते हैं? या वे एक ही चीज के लिए सिर्फ अलग-अलग नाम हैं?
क्या वे एक संकलन प्रक्रिया के विभिन्न चरणों द्वारा उत्पन्न होते हैं? या वे एक ही चीज के लिए सिर्फ अलग-अलग नाम हैं?
जवाबों:
यह Terrence Parr द्वारा एक्सप्रेशन इवैल्यूएटर व्याकरण पर आधारित है ।
इस उदाहरण के लिए व्याकरण:
grammar Expr002;
options
{
output=AST;
ASTLabelType=CommonTree; // type of $stat.tree ref etc...
}
prog : ( stat )+ ;
stat : expr NEWLINE -> expr
| ID '=' expr NEWLINE -> ^('=' ID expr)
| NEWLINE ->
;
expr : multExpr (( '+'^ | '-'^ ) multExpr)*
;
multExpr
: atom ('*'^ atom)*
;
atom : INT
| ID
| '('! expr ')'!
;
ID : ('a'..'z' | 'A'..'Z' )+ ;
INT : '0'..'9'+ ;
NEWLINE : '\r'? '\n' ;
WS : ( ' ' | '\t' )+ { skip(); } ;
इनपुट
x=1
y=2
3*(x+y)
पार्स ट्री
पार्स ट्री इनपुट का एक ठोस प्रतिनिधित्व है। पार्स ट्री इनपुट की सारी जानकारी को बरकरार रखता है। खाली बक्से लाइन के व्हाट्सएप, यानी अंत का प्रतिनिधित्व करते हैं।
एएसटी
एएसटी इनपुट का एक सार प्रतिनिधित्व है। ध्यान दें कि parens एएसटी में मौजूद नहीं हैं क्योंकि संघ पेड़ की संरचना से व्युत्पन्न हैं।
स्पष्टीकरण के माध्यम से अधिक जानकारी के लिए कंपाइलर और कंपाइलर जेनरेटर पीजी देखें। 23
या सार सिंटैक्स पेड़ पृष्ठ पर। 21 प्रोग्रामिंग भाषाओं के सिंटैक्स और शब्दार्थ में
मैं जो समझता हूं, एएसटी स्रोत कोड के घटकों के बीच अमूर्त रिश्तों पर अधिक ध्यान केंद्रित करता है, जबकि पार्स ट्री भाषा द्वारा उपयोग किए जाने वाले व्याकरण के वास्तविक कार्यान्वयन पर ध्यान केंद्रित करता है, जिसमें नाइटपिक विवरण भी शामिल है। वे निश्चित रूप से समान नहीं हैं, क्योंकि "पार्स ट्री" के लिए एक और शब्द "कंक्रीट सिंटैक्स ट्री" है।
मुझे यह पृष्ठ मिला जो इस सटीक प्रश्न को हल करने का प्रयास करता है।
मार्टिन फावलर की डीएसएल पुस्तक इसे अच्छी तरह से समझाती है। एएसटी में केवल सभी 'उपयोगी' तत्व होते हैं जो आगे की प्रक्रिया के लिए उपयोग किए जाएंगे, जबकि पार्स ट्री में आपके द्वारा पार्स किए गए मूल दस्तावेज से सभी कलाकृतियां (रिक्त स्थान, कोष्ठक, ...) शामिल हैं।
पास्कल असाइनमेंट लें आयु: = 42;
वाक्यविन्यास वृक्ष स्रोत कोड की तरह दिखेगा। नीचे मैं नोड्स के चारों ओर कोष्ठक लगा रहा हूं। [उम्र] [: =] [42] [;]
एक सार पेड़ इस तरह दिखेगा [=] [आयु] [४२]
असाइनमेंट 2 तत्वों, आयु और 42 के साथ एक नोड बन जाता है। विचार यह है कि आप असाइनमेंट निष्पादित कर सकते हैं।
यह भी ध्यान दें कि पास्कल सिंटैक्स गायब हो जाता है। इस प्रकार एक से अधिक भाषा एक ही एएसटी उत्पन्न करना संभव है। यह क्रॉस लैंग्वेज स्क्रिप्ट इंजन के लिए उपयोगी है।
पार्स ट्री में आंतरिक नोड्स गैर टर्मिनल हैं, पत्तियां टर्मिनल हैं। सिंटैक्स ट्री में आंतरिक नोड्स ऑपरेटर होते हैं, पत्तियां ऑपरेंड होती हैं।