পার্সারের আউটপুট কি গাছ হতে পারে বা এটি সাধারণ গ্রাফও হতে পারে?
তদুপরি, কোন বিদ্যমান ভাষা বা উপলব্ধিযোগ্য ভাষা আছে যা তাদের সিনট্যাক্সের জন্য গাছের পরিবর্তে সাধারণ গ্রাফের উপস্থাপনা ব্যবহার করে?
পার্সারের আউটপুট কি গাছ হতে পারে বা এটি সাধারণ গ্রাফও হতে পারে?
তদুপরি, কোন বিদ্যমান ভাষা বা উপলব্ধিযোগ্য ভাষা আছে যা তাদের সিনট্যাক্সের জন্য গাছের পরিবর্তে সাধারণ গ্রাফের উপস্থাপনা ব্যবহার করে?
উত্তর:
পার্সারের আউটপুট গাছ হতে হবে না। প্রকৃতপক্ষে, আপনি যখন বিমূর্ত সিনট্যাক্স ট্রিতে তার ডিফাইনিশন ওভারলেডের কোনও ভেরিয়েবলের ইউএসই থেকে রেফারেন্সের মতো বিষয়গুলি বিবেচনা করেন, তখনই আপনার সাথে সাথে একটি গ্রাফ উপস্থিত থাকে।
জিনিসটি হ'ল পার্সিংটি সাধারণত একটি একক পাসে ডিজাইন করার জন্য ডিজাইন করা হয় - এটি historicalতিহাসিক কারণে যেমন স্থান এবং প্রসেসরের গতির অভাবের জন্য গুরুত্বপূর্ণ, তবে কারণ এটি সম্পর্কে তর্ক করা সহজ। তারপরে পর্যায়ক্রমে অতিরিক্ত তথ্যের সাথে পার্স গাছটি সাজাই।
গ্রাফ ব্যাকরণ হিসাবে কিছু আছে, যদিও আমি জানি না যে সেগুলি প্রোগ্রামিং ভাষার পার্সিংয়ের জন্য ব্যবহৃত হয়।
ওপির প্রশ্নটি কিছুটা পিছিয়ে আছে। অবশ্যই, একটি পার্সিং অ্যালগরিদম যা চায় তা আউটপুট করতে পারে। প্রশ্নটি পার্সিংয়ের জন্য কী এবং পার্সার এই লক্ষ্যটি পূরণ করে এমন কোনও ফলাফল আউটপুট দেয় কিনা তা বোঝার জন্য আরও বেশি। তারপরে কেউ ভাবতে পারেন যে এর জন্য উপযুক্ত উপস্থাপনা কী, উদাহরণস্বরূপ একটি গাছ বা গ্রাফ।
ঠিক আছে, আমি অনুমান করি পার্সার একটি আলগোরিদিম যা আপনাকে ভাষার বাক্য গঠনের একটি আনুষ্ঠানিক সংজ্ঞা অনুসারে ইনপুট হিসাবে প্রদত্ত একটি বাক্যটির সিনট্যাকটিক কাঠামো দেবে।
নোট করুন যে ভাষার ভাষার বাক্য গঠনটি কী গঠন করে সে সম্পর্কে লোকেরা দ্বিমত পোষণ করতে পারে। কেউ কেউ এটিকে খাঁটি আনুষ্ঠানিক ভাষার ব্যাকবোন পর্যন্ত সীমাবদ্ধ করতে পারেন, অন্যরা টাইপ, জেনার, সংখ্যা বা আরও জটিল বিষয়গুলির মতো কিছুটা শব্দার্থগত বিবেচনা (যেমন আমি এনএলপি বা প্রোগ্রামিং ভাষার পার্থক্য করছি না) প্রবর্তন করতে পারে। বেশিরভাগ ভাষায় এমন বৈশিষ্ট্য রয়েছে যার জন্য গ্রাফগুলি উপস্থাপিত করা প্রয়োজন, তবে সিনট্যাক্সে তিনি সেটিকে অন্তর্ভুক্ত করতে চান কিনা তা সিদ্ধান্ত নেওয়া "বাস্তবায়নকারী" এর উপর নির্ভর করে (আরও ভাল শব্দের অভাবে)।
সুতরাং আপনি সিনট্যাক্সটি কী হিসাবে সংজ্ঞায়িত করছেন তার উপর নির্ভর করে আপনাকে বিভিন্ন ধরণের formalতিহ্যবাহী কাঠামো আউটপুট করতে হতে পারে।
খাঁটি প্রসঙ্গ-মুক্ত পার্সিংয়ের সাধারণ ক্ষেত্রে, নীচে বর্ণিত অস্পষ্টতার সমস্যা বাদে বা একটি এএসটি পেতে আপনি কিছুটা সংশোধন করতে চাইতে পারেন (নীচে দেখুন) তবে কোনও পার্স ট্রি থাকতে পারে।
তবে আরও জটিল ক্ষেত্রে আপনার বিভিন্ন কাঠামোর প্রয়োজন হতে পারে, প্রায়শই গাছের লিঙ্কগুলি দ্বারা প্রতিনিধিত্ব করা হয়, ফলে গ্রাফের কাঠামো তৈরি হয়। এটি আপনার ভাষা সিনট্যাক্সের সংজ্ঞা সম্পর্কে খুব বেশি নির্ভর করে।
এছাড়াও, আপনার কোন গাছটি আউটপুট করা উচিত তা স্পষ্ট নয়। আপনি যদি গাছ-সংলগ্ন ব্যাকরণগুলির (TAG) ক্ষেত্রে বিবেচনা করেন তবে এগুলি এমনভাবে কাজ করে যে বাক্য গঠনটি ডেরিভিশন গাছের মতো নয়, যদিও পূর্ববর্তীটি সামনের অংশ থেকে নেওয়া যেতে পারে। আপনি যেটি আউটপুট দিতে চান তা একটি প্রাসঙ্গিক প্রশ্ন হতে পারে।
অস্পষ্টতা সম্পর্কিত আরও একটি বিষয় রয়েছে। আপনার ভাষার সাথে সম্পর্কিত একটি প্রদত্ত বাক্যটি বিভিন্ন উপায়ে এটি করতে পারে, বিভিন্ন উপায়ে সিনট্যাকটিক কাঠামো নির্ধারিত হতে পারে।
তারপরে আপনি এগুলির মধ্যে একটির আউটপুট চয়ন করতে পারেন, এলোমেলোভাবে চয়ন করা হয়েছে বা কিছু সংজ্ঞায়িত মানদণ্ড অনুসারে (উদাহরণস্বরূপ পছন্দসই)। আপনি বেশ কয়েকটি বা তাদের সমস্ত আউটপুট চয়ন করতে পারেন। আপনি যদি বেশ কয়েকটি আউটপুট করতে চান তবে এটি অনন্য কাঠামোয় প্যাক করা সাধারণত সুবিধাজনক যা তাদের সাধারণ জিনিসগুলি ভাগ করে দেবে। এটি স্থান এবং গণনার সময় সাশ্রয় করে এবং জটিলতা একটি আসল সমস্যা হতে পারে।
আপনি যখন তাদের সকলের আউটপুট দিতে চান, তখন আপনার ভাগ করে নেওয়া ছাড়া আর কোনও উপায় নেই, কারণ সেখানে সম্ভাব্য পার্সের সংখ্যা অসীম হতে পারে। এবং অসীমভাবে কেবল কোনও গ্রাফে কোনও চক্র রেখে চূড়ান্তভাবে পুনরায় প্রতিস্থাপন করা যায়। সুতরাং আপনাকে সাধারণভাবে একটি গ্রাফ কাঠামো তৈরি করতে হবে। তবে এই গ্রাফের কাঠামোর বৈশিষ্ট্যগুলি আপনার চয়ন করা ফর্মাল সিনট্যাক্সের সাথে সম্পর্কিত।
এখন প্রশ্নটি ছিল অ্যাবস্ট্রাক্ট সিনট্যাক্স ট্রি সম্পর্কেও। আমি "বিমূর্ত" অংশটি এড়িয়ে গেছি যেহেতু এটি বিভ্রান্তি আনবে, ইমো ho প্রকৃতপক্ষে প্রশ্নটি তার বিভিন্ন পুনঃস্থাপনে ইতিমধ্যে বিভ্রান্ত করছে।
STতিহাসিক দৃষ্টিকোণে এএসটি সম্পর্কিত, তারা 1960-1970 সালে লিস্প এবং প্রোগ্রাম ম্যানিপুলেশন সিস্টেমগুলির সাথে উদ্ভূত। পরিকল্পনাগুলিকে গণিতের সূত্র হিসাবে উভয়ই হেরফেরের উদ্দেশ্যে এবং বৈশিষ্ট্য বিশ্লেষণ করা বা একটি আনুষ্ঠানিক উপায়ে শব্দার্থবিজ্ঞানের সংজ্ঞা দেওয়া, যেগুলি গণিতবিদ সূত্রে কীভাবে করবেন তা জানেন programs সূত্র হিসাবে, এগুলি প্রাকৃতিকভাবে কাঠের কাঠামোযুক্ত ছিল, তবে বিভিন্ন তথ্য দিয়ে সজ্জিত হতে পারে যা এই গাছগুলিকে গ্রাফে পরিণত করেছিল। এটি আনুষ্ঠানিকভাবে এবং ব্যবহারিকভাবে উভয়ই সুবিধাজনক ছিল এবং আরও সংকলক এবং প্রোগ্রামিং সিস্টেম দ্বারা এটি ব্যবহৃত হয়েছিল।
সুতরাং মৌলিকভাবে, একটি এএসটি হ'ল একটি গাছ, নাম দ্বারা সূচিত, তবে আরও তথ্য বহন করতে পারে। বাকিগুলি বাস্তবায়নকারীদের পছন্দগুলিতে এবং দর্শকের চোখে। এটি গ্রাফ বা সজ্জিত গাছ? যাইহোক, বেসিক এএস ট্রি বিষয়টি বিবেচনা করে, কারণ এটি তাত্ত্বিক এবং প্রোগ্রামিং উভয় ক্ষেত্রেই আপনার তৈরি করা ভারা।
নোট করুন যে আনুষ্ঠানিক ভাষা তত্ত্বের অধ্যয়ন অনুসারে অ্যালগরিদমকে পার্সিং দ্বারা উত্পাদিত এএসটি পার্স ট্রি (সিনট্যাক্সটি প্রাসঙ্গিক-ভিত্তিক ছিল) থেকে আলাদা ছিল। কারণটি ছিল সিনট্যাক্সের নকশাটি সেই সময়ের পার্সিং প্রযুক্তির দ্বারা সীমাবদ্ধ ছিল, এটি স্বয়ংক্রিয়ভাবে কম কম্পিউটারিং পাওয়ার দ্বারা সীমাবদ্ধ। ফলস্বরূপ যে সিনট্যাক্স গাছগুলি কেবল যেটিকে প্রাকৃতিকভাবে প্রোগ্রামটির কাঠামো বিবেচনা করবে তার কেবল বৈষম্যমূলক আচরণ করা হয়েছিল, এবং আরও প্রক্রিয়াকরণ, এটি বেসিক আনুষ্ঠানিক বিশ্লেষণ প্রক্রিয়াটির প্রকৃত অংশ নয়, এএসটি নামক ক্লিনার এবং সহজ সংস্করণটি অর্জন করতে হয়েছিল performed
যাইহোক, আপনি যখন অস্পষ্ট বাক্যটির সমস্ত কাঠামোর প্রতিনিধিত্ব করতে চান তখন কম্পিউটারে গাছের উপস্থাপনা, বিমূর্ত হোক বা না হোক কিছুটা বাধা হয়ে দাঁড়ায়। বিশেষত, এটি জটিলতার সমস্যাগুলি লুকায়। গ্রাফের কাঠামোয় অস্পষ্টতা সংরক্ষণ, যখন পার্স গাছ থেকে এএস ট্রিগুলিতে অনুবাদ করাও সমস্যা হতে পারে। তবে, যদি আপনি এটি নিয়ে উদ্বিগ্ন হন তবে প্রায়শই আপনার কংক্রিটের বাক্য গঠনটি এমনভাবে সংজ্ঞায়িত করা সম্ভব যে পার্স গাছটি এএসটি হিসাবে পরিবেশন করতে পারে। অস্পষ্টতা পরিচালনা করে এমন খুব সাধারণ অ্যালগরিদম দ্বারা এবং বর্তমান কম্পিউটারগুলির শক্তি দ্বারা এটি অনুমোদিত।
আপনি যদি জিএলআর পার্সিং (জেনারেলাইজড এলআর) ব্যবহার করে পার্স করেন, এবং যদি ইনপুটটির বিশ্লেষণ অস্পষ্ট হয় (ইনপুট পার্স করার একাধিক সম্ভাব্য উপায় রয়েছে) তবে পার্সের ফলাফলটিকে পার্স ডিএজি হিসাবে বিবেচনা করা যেতে পারে, পার্স গাছ পার্স ডিএজি সংক্ষিপ্তভাবে বহু সম্ভাব্য পার্সকে এনকোড করেছে: একাধিক সম্ভাব্য পার্স গাছ trees
তবে, নীচের অংশটি থেকে যায় যে আপনার যদি প্রসঙ্গমুক্ত ব্যাকরণ থাকে, এবং যদি আপনার ইনপুট স্ট্রিংটি অস্পষ্টভাবে বিশ্লেষণযোগ্য হয় (ব্যাকরণে কেবল একটি একক ডেরাইভেশন রয়েছে যা এই ইনপুট স্ট্রিং তৈরি করে), এবং যদি পার্সিংয়ের কাজটি উত্পাদন করা হয় যে ব্যয়টি ... তারপর এই পরিস্থিতিতে, বিশদকরণের ফলাফলটি সর্বদা একটি পার্স গাছ হতে হবে, কারণ প্রসঙ্গমুক্ত ব্যাকরণের যে কোনও উত্পাদন সহজাতভাবে গাছের কাঠামো ধারণ করে।
আমি একবার সি এর জন্য একটি দোভাষী লিখেছিলাম যেখানে + = অপারেটরের (উদাহরণস্বরূপ) "এএসটি" গাছ ছিল না। বিবেচনা করুন a[i++] += d
যেখানে a[i++]
হয় int
এবং d
হয় double
। অন্তর্নিহিত রূপান্তর এবং আনার ক্রিয়াকলাপগুলি গাছটিতে স্পষ্ট ছিল, সুতরাং সমস্যাটি হ'ল যেখানে আনতে হবে a[i++]
এবং রূপান্তরটি দ্বিগুণ করা উচিত। আমাদের সমাধান ছিল গাছ পরিত্যাগ করা। ফলস্বরূপ "এএসজি" দেখে মনে হয়েছিল
+=
/ | \
/ | \
/ | \
/ convert \
| | \
| fetch fetch
| / |
index d
/ \
a postinc
|
i
আমি নিজেই এ নিয়ে হতবাক হয়েছি, যতক্ষণ না আমি বুঝতে পেরেছি যে এটি গাছটি বিমূর্ত নয়, এটি কোনও বিমূর্ত "সিনট্যাক্স ট্রি" সম্পর্কে নয়, তবে সিনট্যাক্সটি বিমূর্ত।
সুতরাং, আপনার প্রশ্নের উত্তর দেওয়ার জন্য, আমি উপসংহারে পৌঁছেছি যে একটি বিমূর্ত সিনট্যাক্স ট্রি, পাশাপাশি একটি কংক্রিট সিনট্যাক্স ট্রি বা সিদ্ধান্ত গাছ, বা অন্য কোনও গাছের গাছ ভাল হওয়া উচিত।
অন্যদিকে, কোনও কিছুই কাউকে বিমূর্ত সিনট্যাক্স গ্রাফ, বা একটি বিমূর্ত সিনট্যাক্স ডায়াগ্রাম, বা একটি বিমূর্ত সিনট্যাক্স কিউব, বা একটি বিমূর্ত সিনট্যাক্স স্পেসিফিকেশন ব্যবহার থেকে বিরত রাখা উচিত।
আমি মনে করি "বিমূর্ত সিনট্যাক্স ট্রি" এর একটি বিমূর্ত সিনট্যাক্স ট্রি আমাকে বিভ্রান্তি এড়াতে সহায়তা করবে have