ব্যাকরণকে সাধারণত কনটেক্সট ফ্রি ব্যাকরণ হিসাবে সংজ্ঞায়িত করা হয় - উইকিপিডিয়া পৃষ্ঠায় একটি সুনির্দিষ্ট সংজ্ঞা দেওয়া হয়, তবে এটি PLY তে যেমন কাজ করে, যা বাইসনের উপর ভিত্তি করে , যা ইয়্যাকের ভিত্তিতে পরিবর্তিত হয় ।
এটি এখানে বলে যে PLY একটি LALR পার্সার ব্যবহার করে । এটি মূলত একটি এলআর পার্সার যেখানে লুকিং সারণিগুলি সংশ্লেষিত হয়, সম্ভবত পার্সিং দ্বন্দ্বগুলি প্রবর্তন করে, কোনও এলআর ব্যাকরণের (যার অর্থ একটি প্রসঙ্গমুক্ত ব্যাকরণ যা একটি এলআর পার্সার পার্স করতে পারে) কিছুটা হ্রাস করে। যদি আপনি পার্সার এবং অন্যান্য পার্সারগুলির এই নির্দিষ্ট শাখার সীমাবদ্ধতা সম্পর্কে জানতে চান তবে সমস্ত ধরণের পার্সিং কৌশল (এলএল, এলআর এবং অন্যান্য) এর একটি সংক্ষিপ্ত বিবরণ এখানে দেওয়া হয়েছে ।
আপনার প্রশ্নের উত্তর দেওয়ার জন্য: ভাষা অস্পষ্ট থাকলেও (যেমন, ইনপুটটি ব্যাখ্যা করার একাধিক উপায় রয়েছে) এমনকি কোনও প্রসঙ্গ-মুক্ত ভাষায় পার্সিং করতে সক্ষম অ্যালগরিদমগুলিতে পার্সিং রয়েছে:
এই জাতীয় প্রথম অ্যালগরিদম ছিল সিওয়াইকে অ্যালগরিদম , যা দুর্ভাগ্যক্রমে এর চলমান সময় রয়েছে , যেখানে এন ইনপুট স্ট্রিংয়ের দৈর্ঘ্য এবং | জি | ব্যাকরণের আকার এবং তাই ভাষা পার্সিংয়ের জন্য এটি ব্যবহারিকর নয়।ও ( এন)3| জি | )এন| জি |
দ্বিতীয় অ্যালগরিদম হ'ল আর্লি অ্যালগরিদম । এই অ্যালগরিদম কোনও প্রসঙ্গবিহীন ব্যাকরণকে বিশ্লেষণ করতেও সক্ষম। যদিও একটি দ্ব্যর্থক ভাষা পার্স করার জন্য অ্যালগরিদমের সময় প্রয়োজন, এটি কেবল দ্ব্যর্থহীন ভাষার পার্স করার জন্য ও ( এন 2 ) সময় প্রয়োজন। তদতিরিক্ত, এটি বেশিরভাগ এলআর ব্যাকরণগুলির জন্য স্পষ্টতই রৈখিক সময়ে কাজ করে এবং বামে পুনরাবৃত্তি ব্যাকরণগুলিতে বিশেষত ভাল কাজ করে।ও ( এন)3)ও ( এন)2)
আপনি এখানে আর্লি অ্যালগরিদমের (অভিযোজন) ব্যবহারিক প্রয়োগ সম্পর্কে আলোচনা করা একটি কাগজ পেতে পারেন। তারা এই সিদ্ধান্তে পৌঁছেছে: "এলএলআর (1) পার্সিংয়ের তুলনায় আর্লি পার্সিংয়ের সাধারণতা দেওয়া (যা প্রায় পিএলওয়াই করে)) এবং বিবেচনা করে যে পিইপি'র ((আর্লির অ্যালগরিদম তাদের বাস্তবায়ন)) খারাপ সময়টিও একটি দ্বারা লক্ষণীয় হবে না ব্যবহারকারী, এটি একটি দুর্দান্ত ফলাফল "।
সর্বশেষ প্রকারের পার্সার হলেন জিএলআর পার্সার । এটি এলআর পার্সিংয়ের একটি সাধারণ সংস্করণ, কোনও প্রসঙ্গ-মুক্ত ভাষায় বিশ্লেষণ করতে সক্ষম।
জিএলআরের একটি পরিপক্ক বাস্তবায়ন হ'ল এএসএফ + এসডিএফ । বাইসন একটি জিএলআর পার্সারও তৈরি করতে পারে, যদিও এর বাস্তবায়নগুলি 'স্ট্যান্ডার্ড' জিএলআর অ্যালগরিদম থেকে কিছুটা আলাদা। Elkhound অ্যালগরিদম একটি GLR / LALR সংকর আলগোরিদিম হয়। এটি যখন প্রয়োজন হয় তখন এলএলআর এবং যখন প্রয়োজন হয় তখন জিএলআর ব্যবহার করে, যাতে কোনও ব্যাকরণকে পার্সিং করার জন্য দ্রুত এবং সক্ষম উভয়ই হয়ে থাকে।
প্রসঙ্গ নিখরচ্য ব্যাকরণ ছাড়াও প্রসঙ্গ সংবেদনশীল ব্যাকরণ রয়েছে , তবে এগুলি পার্স করা সাধারণভাবে কঠোর এবং এতটা ভাববাদীতা যুক্ত করবেন না: আপনি তাদের সাথে আরও কিছু করতে পারেন, তবে বেশিরভাগ অ্যাপ্লিকেশনগুলির জন্য অতিরিক্ত ব্যবহারগুলি প্রাসঙ্গিক নয়, যদি না আপনি পার্স করছেন একটি প্রাকৃতিক ভাষা।
চূড়ান্ত পদক্ষেপ হিসাবে সীমাবদ্ধ ব্যাকরণ আছে । এই মুহুর্তে ব্যাকরণটি টিউরিং-সম্পূর্ণ, সুতরাং নির্দিষ্ট ভাষার পার্সিং করতে কতক্ষণ সময় লাগবে সে সম্পর্কে কোনও বাঁধা নেই, যা বেশিরভাগ বিশ্লেষণকারী অ্যাপ্লিকেশনগুলির জন্য অনাকাঙ্ক্ষিত। অতিরিক্ত শক্তি প্রায় প্রয়োজন হয় না। আপনি যদি সেই সমস্ত শক্তি ব্যবহার করতে চান তবে ভাষা মেশিনটি উপলব্ধ।
শেষ অবধি, আপনার নিজের পার্সার-জেনারেটর বাস্তবায়ন কোনও তুচ্ছ বিষয় নয়, বিশেষত এটি দ্রুত হওয়া। আমি ব্যক্তিগতভাবে আমার নিজস্ব সংস্করণ ফ্লেক্স (লেক্সার জেনারেটর) তৈরি করা শেষ করেছি এবং এটি তুলনামূলকভাবে সহজ অ্যালগোরিদমিক সমস্যাগুলির অনুশীলনের মতো বলে মনে হয়েছিল, বিশেষত যখন আমি ইউনিকোডকে সমর্থন করার চেষ্টা করেছি তখন এটি সঠিকভাবে পাওয়া বেশ জটিল হয়ে উঠল। আপনার নিজের লেখার পরিবর্তে ইতিমধ্যে বিদ্যমান বাস্তবায়নটি বিবেচনা করুন।