Lexer hack
কম্পিউটার প্রোগ্রামিং-এ, রেফারেন্স ব্যাকরণ প্রসঙ্গ-সংবেদনশীল হওয়ার কারণে এএনএসআই সি বিশ্লেষণের সমস্যাগুলির একটি সাধারণ সমাধান হল লেক্সার হ্যাক। সি-তে, অক্ষরের ক্রমকে একটি পরিবর্তনশীল নাম বা একটি প্রকারের নাম হিসাবে শ্রেণীবদ্ধ করার জন্য বাক্যাংশের কাঠামোর প্রাসঙ্গিক তথ্য প্রয়োজন, যা একজনকে প্রসঙ্গ-মুক্ত লেক্সার হতে বাধা দেয়। সমস্যাটি হল যে নিম্নলিখিত কোডে, এ-এর আভিধানিক শ্রেণী আরও প্রাসঙ্গিক তথ্য ছাড়া নির্ধারণ করা যায় নাঃ (এ) * বি এই কোডটি দুটি চলকের গুণন হতে পারে, যে ক্ষেত্রে এ একটি পরিবর্তনশীল; দ্ব্যর্থহীনভাবে লেখা হয়েছেঃ এ * বি বিকল্পভাবে, এটি বি-এর অনির্দিষ্ট মানকে টাইপ এ-তে ঢালতে পারে, যে ক্ষেত্রে এ একটি টাইপডেফ নাম; দ্ব্যর্থহীনভাবে লেখা হয়েছেঃ (এ) (* বি) আরও বিস্তারিতভাবে, একটি সংকলকের মধ্যে, লেক্সার উৎস কোডটিকে একটি প্রোগ্রামে রূপান্তর করার প্রাথমিক পর্যায়গুলির মধ্যে একটি সম্পাদন করে। এটি শব্দ, সংখ্যা এবং স্ট্রিংয়ের মতো অর্থপূর্ণ টোকেনগুলি বের করার জন্য পাঠ্যটি স্ক্যান করে। পার্সার টোকেনের ক্রমগুলি বিশ্লেষণ করে যা তাদের ভাষা কাঠামোর প্রতিনিধিত্বকারী বাক্য গঠন নিয়মের সাথে মেলানোর চেষ্টা করে, যেমন লুপ এবং পরিবর্তনশীল ঘোষণা। এখানে একটি সমস্যা দেখা দেয় যদি টোকেনের একটি একক ক্রম অস্পষ্টভাবে একাধিক বাক্য গঠন নিয়মের সাথে মেলে। এই অস্পষ্টতা সি-তে ঘটতে পারে যদি লেক্সার পরিবর্তনশীল এবং টাইপডেফ শনাক্তকারীগুলির মধ্যে পার্থক্য না করে। উদাহরণস্বরূপ, সি অভিব্যক্তিঃ (এ) * বি-তে লেক্সার এই টোকেনগুলি খুঁজে পেতে পারেঃ বাম বন্ধনী শনাক্তকারী 'এ' ডান বন্ধনী অপারেটর '*' শনাক্তকারী 'বি' সমস্যাটি হ 'ল এ-এর আভিধানিক শ্রেণীটি আরও প্রসঙ্গ ছাড়া নির্ধারণ করা যায় নাঃ পার্সার এটিকে পরিবর্তনশীল এ গুণিত বি হিসাবে বা টাইপ এ হিসাবে ব্যাখ্যা করতে পারে যা বি-এর অনির্দিষ্ট মানকে কাস্ট করে। সমস্যাযুক্ত উৎপাদন নিয়মের নামের কারণে এটি "টাইপেডেফ-নেমঃ আইডেন্টিফায়ার" সমস্যা হিসাবে পরিচিত। হ্যাক সমাধান সমাধানটি সাধারণত শব্দার্থিক প্রতীক টেবিল থেকে তথ্যকে লেক্সারে ফিরিয়ে নিয়ে আসে। অর্থাৎ, লেক্সার থেকে পার্সার পর্যন্ত বিশুদ্ধ একমুখী পাইপলাইন হিসাবে কাজ করার পরিবর্তে, শব্দার্থিক বিশ্লেষণ থেকে লেক্সার পর্যন্ত একটি ব্যাক চ্যানেল রয়েছে। পার্সিং এবং শব্দার্থিক বিশ্লেষণের এই মিশ্রণকে সাধারণত অকার্যকর হিসাবে বিবেচনা করা হয়, যে কারণে এটিকে "হ্যাক" বলা হয়। যোগ করা প্রসঙ্গ ছাড়া, লেক্সার অন্যান্য শনাক্তকারী থেকে টাইপ শনাক্তকারীকে আলাদা করতে পারে না কারণ সমস্ত শনাক্তকারীর একই বিন্যাস থাকে। উপরের উদাহরণে হ্যাকের সাথে, যখন লেক্সার সনাক্তকারী এ খুঁজে পায় তখন এটি টোকেনটিকে একটি টাইপ সনাক্তকারী হিসাবে শ্রেণীবদ্ধ করতে সক্ষম হওয়া উচিত। ভাষার নিয়মগুলি নির্দিষ্ট করে স্পষ্ট করা হবে যে টাইপকাস্টের জন্য একটি টাইপ শনাক্তকারী প্রয়োজন এবং অস্পষ্টতা অদৃশ্য হয়ে যায়। সমস্যাটি সি + +-এও রয়েছে এবং পার্সাররা একই হ্যাক ব্যবহার করতে পারে। বিকল্প সমাধান লেক্সারলেস পার্সিং কৌশল ব্যবহার করার সময় এই সমস্যাটি দেখা দেয় না (এবং তাই সমাধান করার জন্য কোনও "হ্যাক" প্রয়োজন হয় না), কারণ এগুলি অভ্যন্তরীণভাবে প্রাসঙ্গিক। এগুলিকে সাধারণত কম মার্জিত নকশা হিসাবে দেখা হয়, কারণ এগুলির পাইপলাইনে সমবর্তী লেক্সার এবং পার্সার থাকার মডুলারিটির অভাব রয়েছে। কিছু পার্সার জেনারেটর, যেমন বাইএক-উদ্ভূত বি. টি. ওয়াক ("ব্যাকট্র্যাকিং ওয়াক"), উৎপন্ন পার্সারকে টোকেনগুলি বিশ্লেষণ করার একাধিক প্রচেষ্টা করার ক্ষমতা দেয়। এখানে বর্ণিত সমস্যায়, যদি সনাক্তকারী সম্পর্কে শব্দার্থিক তথ্যের কারণে কোনও প্রচেষ্টা ব্যর্থ হয়, তবে এটি ব্যাকট্র্যাক করতে পারে এবং অন্যান্য নিয়মের চেষ্টা করতে পারে। ক্ল্যাং পার্সার একটি সম্পূর্ণ ভিন্ন উপায়ে পরিস্থিতি পরিচালনা করে, যথা একটি অ-রেফারেন্স আভিধানিক ব্যাকরণ ব্যবহার করে। ক্ল্যাং-এর লেক্সার প্রকারের নাম এবং পরিবর্তনশীল নামের মধ্যে পার্থক্য করার চেষ্টা করে নাঃ এটি কেবল একটি শনাক্তকারী হিসাবে বর্তমান টোকেনকে রিপোর্ট করে। পার্সার তারপর সনাক্তকারীটির প্রকৃতি নির্ধারণ করতে ক্ল্যাং-এর শব্দার্থিক বিশ্লেষণ গ্রন্থাগার ব্যবহার করে। এটি উদ্বেগের আরও পরিষ্কার পৃথকীকরণ এবং লেক্সার এবং পার্সারের এনক্যাপসুলেশনকে অনুমতি দেয় এবং তাই কিছু সংকলক বিকাশকারী এটিকে লেক্সার হ্যাকের তুলনায় অনেক বেশি মার্জিত সমাধান হিসাবে বিবেচনা করেন। এটি বেশিরভাগ অন্যান্য আধুনিক ভাষাগুলিতেও ব্যবহৃত পদ্ধতি, যা আভিধানিক ব্যাকরণে বিভিন্ন শ্রেণীর শনাক্তকারীকে আলাদা করে না, বরং পর্যাপ্ত তথ্য পাওয়া গেলে তাদের পার্সিং বা শব্দার্থিক বিশ্লেষণ পর্যায়ে পিছিয়ে দেয়। এছাড়াও দেখুন ড্যাংলিং এ্যালস রেফারেন্স উদ্ধৃতি http://www.cs.berkeley.edu ~ smcpeak/elkhound/ذرائع/elkhound/অনুক্রমণিকা. এইচটিএমএল http://cs.nyu.edu/rgrimm/papers/pldi06.pdf http://cens.ioc.ee/local/man/CompaqCompilers/ladebug/ladebug-manual-details.html DOI.org http://groups.google.com/group/comp.compilers/browse_frm/thread/db7f68e9d8b49002/fa20bf5de9c73472?lnk=st&q=%2B%22the + lexer + hack% 22 & rnum = 1 & হ৆চ্এল = en#fa20bf5de9c73472 সি (প্রোগ্রামিং ভাষা) সি + + পার্সিং নিবন্ধগুলি উদাহরণস্বরূপ সি কোড সহ