এলআর পার্সাররা ডিজাইনের সাহায্যে দ্ব্যর্থতার ব্যাকরণ নিয়মগুলি পরিচালনা করতে পারে না। (১৯ 1970০ এর দশকে যখন ধারণাগুলি তৈরি করা হচ্ছিল তখন তত্ত্বটি আরও সহজ করে তুলেছিল)।
সি এবং সি ++ উভয়ই নিম্নলিখিত বিবৃতিটির অনুমতি দেয়:
x * y ;
এর দুটি পৃথক পার্স রয়েছে:
- এটি এক্স টাইপের নির্দেশক হিসাবে y এর ঘোষণা হতে পারে
- এটি এক্স এবং y এর গুণক হতে পারে, উত্তরটি ফেলে দেয়।
এখন, আপনি ভাবতে পারেন যে আধুনিকটি বোকা এবং এড়ানো উচিত। বেশিরভাগ আপনার সাথে একমত হবে; তবে এমন কিছু ক্ষেত্রে রয়েছে যেখানে এর পার্শ্ব প্রতিক্রিয়া থাকতে পারে (যেমন, যদি গুণকে ওভারলোড করা হয়)। কিন্তু এটি বিন্দু নয়। বিন্দু আছে হয় দুটি ভিন্ন পার্স এবং সেই কারণেই প্রোগ্রামের উপর কিভাবে এই নির্ভর করে বিভিন্ন জিনিস অর্থ করতে পারেন উচিত পার্স করা হয়েছে।
সংকলককে যথাযথ পরিস্থিতিতে উপযুক্তটিকে গ্রহণ করতে হবে এবং অন্য কোনও তথ্যের অভাবে (যেমন, x এর ধরণের জ্ঞান) পরে কী করতে হবে তা সিদ্ধান্ত নিতে উভয়কেই সংগ্রহ করতে হবে। সুতরাং একটি ব্যাকরণ অবশ্যই এটি অনুমতি দেয়। এবং এটি ব্যাকরণকে দ্বিধাগ্রস্ত করে তোলে।
সুতরাং খাঁটি এলআর পার্সিং এটি পরিচালনা করতে পারে না। বা অ্যান্টলার, জাভাসিসি, ওয়াইএসিসি, বা traditionalতিহ্যবাহী বাইসন, এমনকি পিইজি-স্টাইলের পার্সারগুলির মতো, "বিশুদ্ধ" উপায়ে ব্যবহার করা যেতে পারে না এমন অনেকগুলি বহুল পরিমাণে পার্সার জেনারেটরও পাওয়া যায় না।
আরও অনেক জটিল কেস রয়েছে (টেমপ্লেট সিনট্যাক্সকে পার্সিংয়ের জন্য স্বেচ্ছাসেবীর চেহারা আবশ্যক, যেখানে এলএলআর (কে) বেশিরভাগ কে টোকেনের দিকে এগিয়ে যেতে পারে), তবে খাঁটি এলআর (বা অন্যদের) পার্সিংয়ের জন্য কেবলমাত্র একটি পাল্টা নমুনা লাগে ।
বেশিরভাগ আসল সি / সি ++ পার্সার একটি অতিরিক্ত হ্যাক দিয়ে কিছু ধরণের ডিটারমিনিস্টিক পার্সার ব্যবহার করে এই উদাহরণটি পরিচালনা করে: তারা প্রতীক টেবিল সংগ্রহের সাথে পার্সিং করে ... যাতে "এক্স" এর সম্মুখীন হওয়ার পরে, পার্সার জেনে যায় যে এক্সটি টাইপ কিনা বা না, এবং এইভাবে দুটি সম্ভাব্য পার্সের মধ্যে চয়ন করতে পারে। তবে এমন কোনও পার্সার যা প্রসঙ্গটি মুক্ত নয় এবং এলআর পার্সারগুলি (খাঁটিগুলি ইত্যাদি) প্রসঙ্গটি মুক্ত।
এই প্রতারণাপূর্ণতা করতে এলআর পার্সারগুলিতে কেউ প্রতারণা করতে পারে এবং প্রতি-নিয়ম হ্রাস-সময়ের সিনমেটিক চেকগুলি যুক্ত করতে পারে। (এই কোডটি প্রায়শই সহজ হয় না)। অন্যান্য পার্সার ধরণের বেশিরভাগের পার্সিংয়ের বিভিন্ন পয়েন্টে শব্দার্থবিজ্ঞানের চেক যুক্ত করার কিছু উপায় রয়েছে যা এটি করতে ব্যবহৃত হতে পারে।
এবং যদি আপনি যথেষ্ট প্রতারণা করেন তবে আপনি এল আর পার্সারগুলিকে সি এবং সি ++ এর জন্য কাজ করতে পারেন। জিসিসি ছেলেরা কিছুক্ষণের জন্য করেছিল, কিন্তু হ্যান্ড-কোডেড পার্সিংয়ের জন্য এটি ছেড়ে দিয়েছে, আমি মনে করি কারণ তারা আরও ভাল ত্রুটি নির্ণয়ের চেয়েছিল wanted
যদিও আরও একটি পদ্ধতির রয়েছে, যা দুর্দান্ত এবং পরিষ্কার এবং সি এবং সি ++ পার্স করে কোনও চিহ্ন সারণী হ্যাকারি ছাড়া ঠিক জরিমানা: জিএলআর পার্সার্স । এগুলি হ'ল সম্পূর্ণ প্রসঙ্গ মুক্ত পার্সার (কার্যকরভাবে অসীম চেহারা রয়েছে)। জিএলআর পার্সাররা কেবল দুটোই গ্রহণ করে পার্স , একটি "ট্রি" তৈরি করে (আসলে একটি নির্দেশিত অ্যাসাইক্লিক গ্রাফ যা বেশিরভাগ গাছের মতো হয়) যা অস্পষ্ট পার্সকে উপস্থাপন করে। পোস্ট-পার্সিং পাস অস্পষ্টতাগুলি সমাধান করতে পারে।
আমরা এই প্রযুক্তিটি আমাদের ডিএমএস সফটওয়্যার পুনর্বিবেচনা টুকিটের জন্য সি এবং সি ++ সামনের প্রান্তে ব্যবহার করি (জুন ২০১ 2017 পর্যন্ত এই এমএস এবং জিএনইউ উপভাষায় পুরো সি ++ 17 হ্যান্ডেল করে)। এগুলি সোর্স কোডের সম্পূর্ণ বিবরণ সহ সম্পূর্ণ, সুনির্দিষ্ট পার্সগুলি এএসটি উত্পাদন করে কয়েক মিলিয়ন লম্বা সি এবং সি ++ সিস্টেমের প্রক্রিয়াজাতকরণে ব্যবহৃত হয়েছে। ( সি ++ এর সর্বাধিক ভেক্সিং পার্সের জন্য এএসটি দেখুন ))