এই সঠিক উদাহরণটি খসড়া সি 99 স্ট্যান্ডার্ড ( সি 11 তে একই বিবরণ ) বিভাগে is াকা হয়েছে 4.4 লেজিক্যাল এলিমেন্টের অনুচ্ছেদে 4 যা বলেছে:
যদি ইনপুট স্ট্রিম কোনও প্রদত্ত চরিত্রের প্রিপ্রোসেসিং টোকনে বিভক্ত করা হয়, তবে পরবর্তী প্রিপ্রোসেসিং টোকন হ'ল অক্ষরের দীর্ঘতম ক্রম যা প্রিপ্রোসেসিং টোকেন গঠন করতে পারে। [...]
যা সর্বাধিক মামুনের নিয়ম হিসাবেও পরিচিত যা অস্পষ্টতাগুলি এড়ানোর জন্য লেজিকাল বিশ্লেষণে ব্যবহৃত হয় এবং একটি বৈধ টোকেন গঠনের জন্য যতগুলি উপাদান গ্রহণ করে কাজ করে।
অনুচ্ছেদে দুটি উদাহরণ রয়েছে যা দ্বিতীয়টি আপনার প্রশ্নের সঠিক মিল এবং এটি নিম্নরূপ:
উদাহরণ 2 প্রোগ্রামের খণ্ড x +++++ y কে x +++++ y হিসাবে পার্স করা হয়েছে, যা ইনক্রিমেন্ট অপারেটরগুলির একটি সীমাবদ্ধতা লঙ্ঘন করে, যদিও পার্স x ++ + ++ y একটি সঠিক ভাব প্রকাশ করতে পারে।
যা আমাদের বলে:
a+++++b
হিসাবে বিশ্লেষণ করা হবে:
a ++ ++ + b
যা প্রথম পোস্টের ইনক্রিমেন্টের ফলাফল একটি মূল্যায়ন এবং পোস্ট বৃদ্ধি বৃদ্ধির জন্য লভ্যালু দরকার বলে পোস্ট বর্ধনের ক্ষেত্রে সীমাবদ্ধতা লঙ্ঘন করে। এটি বিভাগে 6.5.2.4
পোস্টফিক্স ইনক্রিমেন্ট এবং হ্রাস অপারেটরগুলির মধ্যে আচ্ছাদিত রয়েছে যা বলে ( জোর দেওয়া খনি ):
পোস্টফিক্স ইনক্রিমেন্ট বা হ্রাস অপারেটরের অপারেন্ডের যোগ্য বা অযোগ্য রিয়েল বা পয়েন্টার টাইপ থাকতে হবে এবং এটি একটি পরিবর্তনযোগ্য মূল্য হতে হবে।
এবং
পোস্টফিক্স ++ অপারেটরের ফলাফল অপারেন্ডের মান।
বই সি ++ Gotchas এছাড়াও এই ক্ষেত্রে কভার Gotcha #17
সর্বধিক মুখ না খুলিয়া চিবানো সমস্যা এটা একই সমস্যা সি ++ পাশাপাশি এবং এটি কিছু উদাহরণ দেয়। এটি ব্যাখ্যা করে যে নিম্নলিখিত অক্ষরগুলির সেট নিয়ে কাজ করার সময়:
->*
লেজিকাল বিশ্লেষক তিনটি জিনিসের মধ্যে একটি করতে পারেন:
- তিন টোকেন যেমন আচরণ:
-
, >
এবং*
- এটি দুটি টোকেন হিসাবে বিবেচনা করুন:
->
এবং*
- এটি একটি টোকেন হিসাবে বিবেচনা করুন:
->*
সর্বাধিক মুখ না খুলিয়া চিবানো নিয়ম এই অস্পষ্টতা এড়াতে পারেন। লেখক উল্লেখ করেছেন যে এটি ( সি ++ প্রসঙ্গে ):
এটি তৈরির চেয়ে অনেক বেশি সমস্যার সমাধান করে তবে দুটি সাধারণ পরিস্থিতিতে এটি বিরক্ত হয়।
প্রথম উদাহরণটি টেমপ্লেটগুলি হবে যার টেম্পলেট আর্গুমেন্টগুলিও টেমপ্লেট ( যা সি ++ 11 এ সমাধান করা হয়েছিল ), উদাহরণস্বরূপ:
list<vector<string>> lovos;
^^
যা সমাপনকারী কোণ বন্ধনীগুলিকে শিফট অপারেটর হিসাবে ব্যাখ্যা করে এবং তাই বিশৃঙ্খলার জন্য একটি স্থান প্রয়োজন:
list< vector<string> > lovos;
^
দ্বিতীয় ক্ষেত্রে পয়েন্টারগুলির জন্য ডিফল্ট যুক্তি জড়িত থাকে, উদাহরণস্বরূপ:
void process( const char *= 0 );
^^
*=
এসাইনমেন্ট অপারেটর হিসাবে ব্যাখ্যা করা হবে , এই ক্ষেত্রে সমাধানটি ঘোষণার পরামিতিগুলির নামকরণ করা।