আমি আর্লির কাগজ থেকে পরিভাষা এবং স্বরলিপি ব্যবহার করছি । সম্ভবত আপনি যে বর্ণনাটি পড়েছেন তা ভিন্ন।
এটি প্রায়শই মনে হয় যে সাধারণ সিএফ পার্সিং অ্যালগরিদমগুলি প্রথমে একটি সনাক্তকারী হিসাবে উপস্থাপিত হয় এবং তারপরে প্রকৃতপক্ষে পার্স গাছ এবং পার্স অরণ্য গঠনের জন্য প্রয়োজনীয় তথ্য ব্যবস্থাপনাকে উত্তরোত্তর হিসাবে যুক্ত করা হয়। একটি কারণ হতে পারে যে ভাগ করা বন নির্মানের জন্য প্রয়োজনীয় তথ্য রাখার জন্য ঘনকেন্দ্র
যেখানে ইনপুট স্ট্রিংটির দৈর্ঘ্য পার্স করা হচ্ছে, তবে স্বীকৃতির জন্য স্থানের প্রয়োজনটি কেবল বর্গাকার , যখন এই তথ্য সংরক্ষণ করা হয় না। এই স্থান জটিলতা বৃদ্ধির কারণটি বেশ সহজ: পার্স অরণ্যের আকার ঘনক হতে পারে।O(n3)nO(n2)
সবচেয়ে খারাপ ক্ষেত্রে সময়ের জটিলতা হ'ল , যেমনটি সুপরিচিত।O(n3)
আর্লির অ্যালগরিদমের জন্য সর্বোত্তম রেফারেন্স অবশ্যই আর্লির কাগজ , তবে এটি পার্স অরণ্য নির্মাণ সম্পর্কে খুব স্পষ্ট নয়। এটি প্রকৃতপক্ষে একটি অগোছালো ব্যবসা হতে পারে, সেকশন page পৃষ্ঠা 101 এর দ্রুত আলাপের চেয়ে আরও অনেক বেশি প্রদর্শিত হতে পারে। সত্য কথা বলতে গেলে, আর্লি পার্স ফরেস্ট বা বন সম্পর্কিত কথা বলেন না, " সমস্ত সম্ভাব্য পার্স গাছের একটি উপস্থাপনা " এর কথা বলেন। এবং এর একটি যুক্তিসঙ্গত কারণ রয়েছে: যদি তিনি তার ব্যাকরণ অনুসারে বন উত্পাদন করার চেষ্টা করেন, তবে তার স্থান (অতএব সময়) জটিলতার সাথে উঠবে যেখানে দীর্ঘতমের আকার ডান-হাত শাসন। এ কারণেই অন্যান্য অ্যালগরিদমগুলি বাইনারি আকারে ব্যাকরণ ব্যবহার করে (অগত্যা চমস্কি নরমাল ফর্ম (সিএনএফ) নয়)।O(ns+1)s
প্রকৃতপক্ষে, আর্লি স্পষ্টভাবে বাইনারি ফর্ম ব্যবহার করে , কারণ এটি কিউবিক সময়ের জটিলতার জন্য প্রয়োজনীয়। এটি রাজ্যগুলিতে রুল ডটের অন্যতম প্রধান ভূমিকা। তবে এই অন্তর্নিহিত বাইনারি ফর্মটি বাইনারিযুক্ত ব্যাকরণ অনুসারে পার্স এবং বন উত্পাদন করে, মূলটি নয়, যা আমি আশঙ্কা করি, এটি অস্পষ্টতার একটি প্রধান উত্স। এটি আরও নীচে বিস্তারিত is
বন কীভাবে প্রাপ্ত হয় তা বোঝার একটি ভাল উপায় হ'ল এটি সহজ সরল ক্ষেত্রে এটি দেখুন, সিওয়াইকে অ্যালগরিদম । এটি প্রায়শই একটি সনাক্তকারী হিসাবেও বর্ণনা করা হয়, এবং পার্সার দিকটি শেষে যুক্ত করা হয়। আপনি উইকিপিডিয়ায় বর্ণনাটি দেখতে পারেন। বন তৈরির জন্য প্রয়োজনীয় তথ্য হ'ল তারা "ব্যাকপয়েন্টার" এর টেবিলে সঞ্চয় করে।
ব্যাকপয়েন্টারগুলি মূলত সাবস্ট্রিংগুলিতে (একটি সম্পর্কিত প্রতীক) পয়েন্টার যা কোনও নিয়ম অনুসারে একটি স্ট্রিংয়ের উপাদান গঠন করে। তারা একটি স্ট্রিংকে পার্স করার সমস্ত সম্ভাব্য উপায় দেয়। স্মরণ করুন যে সিওয়াইকে বাইনারি ফর্ম ব্যবহার করে, সাধারণত সিএনএফ, যাতে জিনিসগুলি সহজ হয়। সিওয়াইকে পার্সারের প্রাথমিকভাবে আর্লির মতো একই গতিশীল প্রোগ্রামিং কাঠামো রয়েছে তবে এটি আরও সহজ। সুতরাং এটি ভালভাবে বোঝা একটি উল্লেখযোগ্য সহায়তা হতে পারে।
আর্লির অ্যালগরিদমে ফিরে যাওয়া, আমি বিশ্বাস করি না যে গ্রহণযোগ্যতা সিদ্ধান্ত নিতে বা পার্স গাছ এবং বন নির্মাণের জন্য আপনার আরলি ভেক্টর দরকার। আর্লি তার কাগজে ভেক্টরকে কী বলেছে তা বাস্তবায়নের তৃতীয় অনুচ্ছেদে কেবল 97 পৃষ্ঠায় প্রদর্শিত হবে। উন্নততর জটিলতা পেতে কোনও নির্দিষ্ট স্ট্রিং অবস্থান কেকে নির্দেশ করে রাজ্যগুলির অনুসন্ধানকে ত্বরান্বিত করা এটি কেবল একটি ডিভাইস। তবে সমস্ত তথ্য রাজ্যের তালিকাতে রয়েছে, রাজ্যের তালিকা হিসাবে প্রয়োগ করা হয়। তবে, পার্স গাছের বন নির্মাণে এই তথ্য যথেষ্ট নয়, কারণ অ্যালগরিদম কোনও রাজ্য যেভাবে পাবে সেগুলি ট্র্যাক করে না। প্রকৃতপক্ষে, ভেক্টরটি ইতিমধ্যে পাওয়া একটি রাষ্ট্রকে কীভাবে এটি সন্ধান করা হয়েছিল তার থেকে স্বাধীনভাবে কার্যকরভাবে বাতিল করতে ব্যবহার করা হয়।
আর্লির নিবন্ধের section নং বিভাগে তিনি ব্যাখ্যা করেছেন যে "সনাক্তকারীকে পার্সারে পরিণত করতে", অর্থাৎ পার্স গাছগুলি পুনরুদ্ধার করতে সক্ষম হওয়ার জন্য, সম্পূর্ণকরণগুলি যেভাবে সম্পন্ন হয়েছে তার খোঁজ রাখা দরকার।
প্রতিবার আমরা একটি রাজ্য perform adding যুক্ত পরিপূর্ণ অপারেশন সম্পাদন করি
(lookahead উপেক্ষা করে) আমরা সেই রাজ্যে এর উদাহরণ থেকে রাজ্য একটি পয়েন্টার তৈরি করি যা আমাদের অপারেশন করতে সাহায্য করে। এটি নির্দেশ করে যে হিসাবে পার্স করা হয়েছিল । যদি ডি অস্পষ্ট হয় তবে এর থেকে পয়েন্টারগুলির একটি সেট থাকবে, প্রতিটি পরিপূর্ণ ক্রিয়াকলাপের জন্য একটি হ'ল যা caused সৃষ্টি করেছিল নির্দিষ্ট রাজ্যে সেট যোগ করা হবে। প্রতিটি চিহ্নের
এটির থেকে পয়েন্টার থাকবে (এটি যদি টার্মিনাল না হয়), এবং এইভাবে, জন্য ডেরিভিশন ট্রি উপস্থাপন করে ।E→αD.βgDD→γ.fDγE→αD.βgγD
নোট করুন যে এই পাঠ্যটিতে, এবং পার্সড স্ট্রিংয়ের সূচকগুলি রয়েছে যেখানে নির্দেশ করা হয়েছে যেখানে নিয়মের বাম-হাতের স্বীকৃতি শুরু হয়েছিল (ডান-হাতের প্রতীকটি যেমন ভবিষ্যদ্বাণী করা হয়েছিল। সুতরাং স্ট্রিং সূচকটি যেখানে স্বীকৃতি স্বীকৃতি দিয়েছে শুরু, এবং এটা সূচিতে শেষ হয়েছে । এই "সমাপ্তির পয়েন্টার" backpointers এর Earley সমতুল্য (খুব ভাল না উইকিপিডিয়া) বর্ণনা CYK এর পার্সার সংস্করণের জন্য হয়।fgfD→γg
যেমন একটি পয়েন্টার (উদ্ধৃতি বর্ণনা অনুযায়ী) আমরা জানি থেকে যে
নিয়ম ইনস্ট্যান্সের মধ্যে নিজেই একটি গাছ (অথবা বন) যে ইনপুট স্ট্রিং parses মধ্যে developped যাবে সূচি থেকে সূচক , যা আমরা করে মনে রাখবেন । এর ঠিক নীচে নোডগুলি নিয়ম দ্বারা দেওয়া হয় । দিকে নিয়ে যাওয়া সমাপ্তির সন্ধান করে আমরা এর পরেও এই জাতীয় পয়েন্টার খুঁজে পেতে পারি যে কীভাবে শেষ প্রতীকDE→αD.βgwf+1gwf+1:gDD→γD→γ.fDপ্রাপ্ত হয়েছিল, এবং তাই সম্ভাব্য পার্স গাছগুলি সম্পর্কে আরও তথ্য। এছাড়াও শেষের দিকে ইয়ারলিয়ার স্টেট সেটে শেষ হওয়ার আগে প্রতীকটিকে স্বীকৃতি দেওয়ার সমাপ্তি দেখে আপনি কীভাবে এটি প্রাপ্ত হয়েছিল তা আবিষ্কার করেন and
ধরে নিলাম যে আপনি কাগজে উল্লিখিত সমস্ত প্রয়োজনীয় পয়েন্টার রেখেছেন, আপনি পার্সার দ্বারা স্বীকৃত শেষ চিহ্ন থেকে শুরু করে সমস্ত ভাগ করা গাছের উপস্থাপনা পেতে পারেন যা অবশ্যই ব্যাকরণের প্রাথমিক প্রতীক।
তবে আমি অগোছালো অংশও এড়িয়ে গেছি । ধরুন আপনার একটি
, যা আমি 2 টি প্রতীকের চেয়ে দীর্ঘ ডান হাতের সাথে বেছে নিয়েছি এবং একটি বিস্মৃত ব্যাকরণের জন্য আরেকটি নিয়ম ।U→XYZW→UV
এটা ভাল ঘটতে পারে যে পার্সার পার্স হবে মধ্যে ,
মধ্যে এবং উভয় এবং মধ্যে
। সুতরাং, নিয়মটি সহ , উভয় এবং
পার্স করুন ।wf+1:gXwg+1:hYwh+1:iwh+1:jZU→XYZwf+1:iwf+1:jU
তারপরে এমনও হতে পারে যে উভয়ই এবং উভয়ই । তারপরে, নিয়মের সাহায্যে স্ট্রিং
দুটি আলাদাভাবে বিভক্ত করুন , যা ব্যাকরণের একটি অস্পষ্টতার সাথে মিলে যায়।wi+1:kwj+1:kVW→UVwf+1:kW
অবশ্যই গণনা পুনরাবৃত্তি এড়ানোর জন্য, আর্লির অ্যালগরিদম দুটি পার্সিং কম্পিউটেশন যতটা সম্ভব ভাগ করে নেওয়ার চেষ্টা করবে। এটি আসলে যা ভাগ করবে তা হ'ল এবং মধ্যে এবং of এর স্বীকৃতি (এবং পার্সিং) । তবে এটি আসলে আরও কিছু করবে: এটি দুটি পৃথক পার্সের সূচনাও ভাগ করে নেবে যা আপনাকে বিধি দিয়ে স্বীকৃতি দেয় । আমি যা বলতে চাইছি তা হল রাজ্যটি শুধুমাত্র একবার পাওয়া যাবে (আমি যা বর্ণনা করছি তার প্রতি শ্রদ্ধায়), রাষ্ট্র সেট । এটি দুটি পার্সের একটি সাধারণ অংশ হবে। অবশ্যই পার্স করার সময় জিনিসগুলি অস্থায়ীভাবে অন্যদিকে চলে যাবেwf+1:gwg+1:hXYUU→XYZU→XY.ZfShZ যেহেতু তারা সাবস্ট্রিংগুলিকে বিভক্ত করার সাথে সামঞ্জস্য করে, যতক্ষণ না তারা আবার রূপান্তর না করে সমস্ত কিছু ডাব্লুতে বিভক্ত হয়, যখন রাষ্ট্ররাষ্ট্রের সেট দু'বার উত্পাদিত হয় ।W→UV.fSk
সুতরাং সিনট্যাক্স গাছের বনটি খুব অদ্ভুত হতে পারে, এমন এক ধরণের সাইমাস টুইন সাবট্রি যা কিছু নোডের প্রথম দুটি কিনারা ভাগ করে নিতে পারে তবে তৃতীয় প্রান্তটি নয়। অন্য কথায়, এটি খুব বিশ্রী কাঠামো হতে পারে। এটি ব্যাখ্যা করতে পারে যে কেন আর্লি এটিকে আরও সুনির্দিষ্ট না করে " সমস্ত সম্ভাব্য পার্স গাছের কল্পিত উপস্থাপনা " বলেছেন calls
ব্যাকরণ পরিবর্তন না করেই সার্জিকভাবে সাইমিজ যমজকে আলাদা করার জন্য যে কোনও মনোযোগ দেওয়ার ফলে জটিলতা বাড়বে। এটি করার সঠিক উপায় হ'ল ব্যাকরণকে দ্বির্মুখী করা।
আমি আশা করি এটা তোমাকে সাহায্য করবে। আমাকে জানতে দাও. তবে আমি জোর দিয়ে বলছি যে সিওয়াইকে পার্সিংয়ের একটি ভাল বোঝা সাহায্য করতে পারে। অন্যান্য অ্যালগরিদম রয়েছে, আর্লির চেয়ে সহজ, যা দক্ষতার সাথে সমস্ত সিএফ ভাষা পার্স করতে পারে।
আমি অন্য দুটি উত্তর দিয়েছি এমন এই পার্সে বন সম্পর্কিত সমস্যা সম্পর্কে আপনি আরও সাধারণ তথ্য পেতে পারেন: /cstheory/7374#18006 এবং https://linguistics.stackexchange.com/questions/4619#6120 । তবে তারা আর্লির অ্যালগরিদমের নির্দিষ্ট বিবরণে যায় না।