পার্স গাছ এবং এএসটির মধ্যে পার্থক্য কী?


94

তারা কি একটি সংকলন প্রক্রিয়ার বিভিন্ন পর্যায় দ্বারা উত্পন্ন? বা তারা কি একই জিনিসটির জন্য কেবল আলাদা নাম?


পার্স ট্রি এটির নিদর্শনগুলির সাথে আপনার ব্যাকরণের ফলাফল (আপনি একই ভাষার জন্য ব্যাকরণগুলির একটি অনন্ত লিখতে পারেন), একটি এএসটি ভাষার পার্স ট্রিটিকে সবচেয়ে কাছেরতম হ্রাস করে। একই ভাষার বেশ কয়েকটি ব্যাকরণ বিভিন্ন পার্স গাছ দিবে তবে একই এএসটির ফলাফল হওয়া উচিত। (আপনি একই এবং AST একই ব্যাকরণ থেকে আলাদা স্ক্রিপ্ট (বিভিন্ন পার্স গাছ) কমে যায়)
Guillaume86

4
এই এইরকম উত্তর দেন বিস্তারিতভাবে dfference আলোচনা stackoverflow.com/a/1916687/120163
ইরা ব্যাক্সটার

উত্তর:


98

এটি টেরেন্স পারর দ্বারা প্রকাশিত মূল্যায়ন ব্যাকরণের উপর ভিত্তি করে ।

উদাহরণস্বরূপ ব্যাকরণ:

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)

পার্স গাছ

পার্স গাছটি ইনপুটটির একটি দৃ a় প্রতিনিধিত্ব। পার্স গাছটি ইনপুটটির সমস্ত তথ্য ধরে রাখে। খালি বাক্সগুলি হোয়াইটস্পেসের প্রতিনিধিত্ব করে, মানে লাইনের শেষ।

পার্স গাছ

এএসটি

এএসটি ইনপুটটির একটি বিমূর্ত উপস্থাপনা। লক্ষ করুন যে পেরেনগুলি এএসটিতে উপস্থিত নেই কারণ সমিতিগুলি গাছের কাঠামো থেকে উদ্ভূত।

এএসটি

ব্যাখ্যার মাধ্যমে আরও তথ্যের জন্য কম্পাইলার এবং সংকলক জেনারেটর pg দেখুন। পৃষ্ঠাতে 23
বা বিমূর্ত সিনট্যাক্স গাছ T প্রোগ্রামিং ভাষার সিনট্যাক্স এবং শব্দার্থবিজ্ঞানের মধ্যে 21


4
পার্স গাছ থেকে আপনি কীভাবে এএসটি পাবেন? একটি এএসএসে পার্স গাছটিকে সরল করার পদ্ধতি কী?
সিএমসিডিগ্রাগনকাই

4
পার্স গাছ থেকে এএসটি প্রাপ্ত করার জন্য কোনও নির্দিষ্ট অ্যালগরিদম নেই। এএসটিতে যা যায় সেটি ব্যক্তিগত পছন্দ বেশি তবে কাজটি সম্পাদন করতে পর্যাপ্ত তথ্য থাকতে হবে। আমি এএনটিএলআর ব্যবহার করে পেরসকে এএসটি থেকে বাদ দিয়েছি ! ব্যাকরণে অপারেটর যেহেতু তাদের প্রয়োজন হয় না তবে ডিফল্টরূপে এএনটিএলআর তাদের অন্তর্ভুক্ত করত। আমি পার্স গাছটিকে আপনার প্রয়োজন কিনা এবং আপনার প্রয়োজন নয় এবং এএসটি আপনাকে সর্বনিম্ন ন্যূনতম হিসাবে দেবে বলে মনে করি। মনে রাখবেন আপনি গাছগুলিকে প্রচুর পরিমাণে অতিক্রম করবেন, তাই আকারের বিষয়টি গুরুত্বপূর্ণ।
গাই কোডার

4
আপনার মানে সিএসটি (কংক্রিট সিনট্যাক্স ট্রি) বনাম এএসটি (বিমূর্ত সিনট্যাক্স ট্রি)?
সিএমসিডিগ্রাগনকাই

পার্সার বা পার্সার জেনারেটরের সিনট্যাক্স ফাইলগুলিতে এম্বেড করা শব্দার্থক ক্রিয়া / বিধিগুলি শব্দার্থ বিশ্লেষণ এবং একটি এএসটি তৈরির স্বাভাবিক উপায়, যখন পার্স ট্রিটি ব্যবহারকারীর কোড দ্বারা নির্মিত বা ব্যবহৃত হয়, সম্ভবত পার্সার নির্ভুলতা যাচাইকরণ ব্যতীত।


16

আমি যা বুঝতে পেরেছি তা থেকে, এএসটি উত্স কোডের উপাদানগুলির মধ্যে বিমূর্ত সম্পর্কের দিকে আরও বেশি জোর দেয়, যখন পার্স গাছটি নাইটপিকির বিবরণ সহ ভাষা দ্বারা ব্যবহৃত ব্যাকরণটির প্রকৃত বাস্তবায়নের দিকে মনোনিবেশ করে। এগুলি অবশ্যই এক নয়, যেহেতু "পার্স ট্রি" এর আরেকটি শব্দ হ'ল "কংক্রিট সিনট্যাক্স ট্রি"।

আমি এই পৃষ্ঠাটি পেয়েছি যা এই সঠিক প্রশ্নটি সমাধান করার চেষ্টা করে।


11

ডিএসএল বই মার্টিন জালিয়া থেকে এই চমত্কারভাবে ব্যাখ্যা করে। এএসটিটিতে কেবলমাত্র সমস্ত 'দরকারী' উপাদান রয়েছে যা আরও প্রক্রিয়াজাতকরণের জন্য ব্যবহৃত হবে, যখন পার্স ট্রিটিতে আপনি যে মূল নথিটি পার্স করেন সেগুলি থেকে সমস্ত শিল্পকর্ম (স্পেস, বন্ধনী, ...) থাকে while


4

পাস্কাল অ্যাসাইনমেন্ট বয়সটি নিন: = 42;

সিনট্যাক্স ট্রিটি উত্স কোডের মতো দেখায়। নীচে আমি নোডের চারপাশে বন্ধনী রাখছি। [বয়স] [: =] [42] [;]

একটি বিমূর্ত গাছটি দেখতে দেখতে [=] [বয়স] [42]

অ্যাসাইনমেন্টটি 2 উপাদান, বয়স এবং 42 এর সাথে নোডে পরিণত হয় idea ধারণাটি হ'ল আপনি অ্যাসাইনমেন্টটি কার্যকর করতে পারেন।

এছাড়াও নোট করুন যে প্যাসকাল সিনট্যাক্স অদৃশ্য হয়ে যায়। সুতরাং একাধিক ভাষা একই এএসটি তৈরি করা সম্ভব। এটি ক্রস ল্যাঙ্গুয়েজ স্ক্রিপ্ট ইঞ্জিনগুলির জন্য দরকারী।


1

পার্স ট্রি গাছের অভ্যন্তর নোডগুলি নন টার্মিনাল, পাতাগুলি টার্মিনাল। সিনট্যাক্স ট্রি এন্টিরির নোডগুলি অপারেটর হয়, পাতাগুলি অপারেশন হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.