আমি একটি অ্যালগরিদম বর্ণনা করব যা কাজ করে। সময়টি খুব খারাপ হওয়া উচিত নয়। আপনি এটির বেশ কিছুটা প্রাক্পম্প্ট করতে পারেন।
আমি অনুমান পাবেন যে nonterminals রয়েছে নেই (সম্ভবত এটি সহজ যে ক্ষেত্রে মানিয়ে নিতে যদিও) এবং আপনি জানেন না যে , অথবা শিক্ষাদীক্ষা । আমি আপনার ব্যাকরণে এমন কোনও প্রযোজনাও ধারণ করে না যা কখনই কোনও উপার্জনে ব্যবহৃত হয় না ( উদাহরণস্বরূপ )।x y a A → AaxyaA→A
প্রধান সমস্যাটি সত্যিই বিশ্লেষণ করতে হয় , যেমন আপনাকে জানতে হবে রাজ্যের কি ধরনের শেষ পর্যন্ত চাই, তাই আপনি কি জানেন অনুসরণ করতে পারেন । আপনি জানেন না হিসাবে এটি এত সহজ নয় ।একটি এক্সaax
আমরা আর্লির অ্যালগরিদমের একটি অভিযোজন ব্যবহার করি । আপনি প্রথমে সেই অ্যালগরিদমটি বুঝতে চাইবেন। আমাদের সূচনা এবং সমাপ্তির পদক্ষেপগুলি ভিন্ন, আমাদের অ্যালগরিদম প্রায় একইভাবে কাজ করে।
আরম্ভের জন্য, আমরা প্রতিটি সংঘটন একটি Earley আইটেম আমাদের প্রথম সেট বীজ (প্রথম অক্ষরের আপনার ব্যাকরণ কোন উৎপাদনে)। আমরা এই আইটেমটির ব্যাক পয়েন্টারটি -1 এ সেট করেছিলাম, এটি একটি অবৈধ মান। এটি আমাদের পরিবর্তিত সমাপ্তিতে গুরুত্বপূর্ণ। মূলত, -1 এর অর্থ 'এই উত্পাদনটি কোথায় শুরু হয়েছিল আমার কোনও ধারণা নেই'। aa1a
এখন, আমরা প্রতিটি প্রাথমিক এয়ারলি আইটেমের জন্য আলাদাভাবে আর্লি অ্যালগরিদম সম্পাদন করি। পার্সগুলি একে অপরের সাথে হস্তক্ষেপ করতে পারে বলে আমরা কেবল একই সাথে সবগুলি করতে পারি না। আমি এখানে ব্যাকট্র্যাকিংয়ের চেয়ে দ্রুত কোনও দ্রুত পদ্ধতি দেখতে পাচ্ছি না।
সমাপ্তির পদক্ষেপের জন্য, আমাদের কেবল -১ ব্যাক পয়েন্টারগুলি হ্যান্ডেল করার জন্য একটি পরিবর্তন করতে হবে। আমরা যেমন একটি উত্পাদন সম্পন্ন করেছি যার উত্স আমরা জানি না, আমরা সমস্যায় পড়েছি। যাইহোক, পেনেলো এবং ডিআমিমার দ্বারা LALR লুকোহেড সেটগুলি গণনা করার জন্য ব্যবহৃত পদ্ধতিটিLALR(1) আমাদের সংরক্ষণ করে: আমাদের এখানে যা দরকার তা হ'ল লুকোহেড সেট। এই লুকোহেড সেটগুলির প্রতিটি আইটেমের ব্যাকরণে একটি অনুরূপ অবস্থান রয়েছে, যা পরিবর্তিতভাবে সম্পূর্ণ উত্পাদনের সম্ভাব্য ধারাবাহিকতার সাথে মিলে যায়। এল এ এল আর ( 1 )LALR(1)
দুর্ভাগ্যক্রমে, আমি এখানে আবার ব্যাকট্র্যাক করা ছাড়া সত্যই আর কোনও পছন্দ দেখতে পাচ্ছি না। লুহহেড সেটে প্রতিটি অবস্থানের জন্য, আপনি এই অবস্থানের সাথে সমাপ্তির পদক্ষেপটি সম্পাদন করুন এবং সেখান থেকে পার্স চালিয়ে যান। আপনি প্রতিটি পার্সের জন্য আলাদাভাবে এটি করেন। মনে রাখবেন যে যদি আপনার ব্যাকরণটি আপনার চেহারাটি অনন্যভাবে নির্ধারণ করবে যে আপনাকে কোন অবস্থানে যেতে হবে, তাই আপনাকে ব্যাকট্র্যাক করতে হবে না।LALR(1)
আপনি পরলোক উপরে অ্যালগরিদম একটি অক্ষর অবিরত আপনি খুঁজছেন সেট, যেখানে আপনি এই অতিরিক্ত বিবেচনা, ভার্চুয়াল চরিত্র 'কোনো চরিত্র', যা অবিলম্বে আপনি 'ফলো' দেয় হতে - যে কোনো সময় এই চূড়ান্ত জন্য স্ক্যানার ফেজ খুঁজে বের করে কিছু সেট, আপনি আপনার উত্তর সেট এই অক্ষর যোগ করতে পারেন।a
সম্পাদনা: আমি মনে করি আমি এমন একটি পদ্ধতি খুঁজে পেয়েছি যা ব্যাকট্র্যাকিংয়ের মাধ্যমে প্রবর্তিত বেশিরভাগ ওভারহেড সরিয়ে দেয়। আমরা প্রতিটি আর্লি আইটেমের সাথে শনাক্তকারীদের একটি সেট, যা স্ট্রিংগুলির সাথে সংযুক্ত করি, কারণ আমাদের এই সনাক্তকারীদের উপসর্গগুলি ব্যবহার করতে হবে। আরম্ভের সময়, আমরা আর্লি সেটটিতে সমস্ত প্রাথমিক আইটেম যুক্ত করি এবং প্রতিটি সেটের সাথে একটি অনন্য সনাক্তকারীকে যুক্ত করি associate
স্ক্যানার এবং ভবিষ্যদ্বাণীকারী পদক্ষেপে শনাক্তকারীরা নতুন আইটেমগুলিতে নিয়ে যায়। একই আর্লি সেটটিতে আর্লি আইটেমগুলি যা কেবল তাদের শনাক্তকারীদের সাথে পৃথক হয় তাদের শনাক্তকারীদের একত্রিত করে একত্রিত করা হয়। নোট করুন যে আমরা সনাক্তকারীদের সাথে এই নতুন আইটেমগুলিতে স্ক্যানার এবং ভবিষ্যদ্বাণীকারী পদক্ষেপগুলি সম্পাদন করতে পারি, প্রতিটি সনাক্তকারীর জন্য পৃথকভাবে এই পদক্ষেপটি না করেই।
সম্পূর্ণকারী শনাক্তকারীদের আলাদা আলাদাভাবে বিবেচনা করে এবং কেবলমাত্র একটি আইটেম সম্পূর্ণ করে যদি পূর্ববর্তী আইটেমসেটে সংশ্লিষ্ট আইটেমটির একটি সনাক্তকারী থাকে যা সনাক্তকারীটির উপসর্গ থাকে pre প্রতিটি সম্ভাব্য সমাপ্তির জন্য (সুতরাং প্রতিটি আইটেমের জন্য লুক হেড সেট), আমরা সম্পূর্ণ হওয়া আইটেমগুলির সনাক্তকারীদের জন্য একটি অনন্য চরিত্র যুক্ত করি endLALR(1)
মূলত, আমরা এই সনাক্তকারীদের ব্যবহার করে ব্যাকট্র্যাকিং করি, যাতে আমরা স্ক্যানার এবং ভবিষ্যদ্বাণীকারী পদক্ষেপগুলিতে দ্বিগুণ কাজ না করি।