আমি বর্তমানে নীচের উপর ভিত্তি করে একটি এক্সপ্রেশন মূল্যায়নকারী (একক লাইন এক্সপ্রেশন, সূত্রের মতো) বাস্তবায়ন করছি:
- প্রবেশ করা এক্সপ্রেশনটি আক্ষরিক বুলিয়ান, পূর্ণসংখ্যা, দশমিক, স্ট্রিং, ফাংশন, আইডেন্টিফায়ার (ভেরিয়েবল) আলাদা করতে টোকানাইজড
- প্রথম বন্ধন থেকে মুক্তি পেতে অপারেটরদের একটি পোস্টফিক্সড অর্ডারে শালীন অগ্রাধিকার দিয়ে অর্ডার করার জন্য আমি শান্টিং-ইয়ার্ড অ্যালগরিদম (পরিবর্তনশীল সংখ্যক যুক্তিযুক্ত ফাংশনগুলি সামলানোর জন্য হালকাভাবে সংশোধিত) প্রয়োগ করেছি
- আমার শান্টিং-ইয়ার্ডটি কেবল টোকেনের একটি (সিমুলেটেড) সারি তৈরি করে (একটি অ্যারের মাধ্যমে, আমার পাওয়ারবিল্ডার ক্লাসিক ভাষা বস্তুগুলি সংজ্ঞায়িত করতে পারে তবে কেবল গতিশীল অ্যারেগুলিকে স্থানীয় স্টোরেজ হিসাবে বলা যায় - সত্য তালিকা নয়, কোনও অভিধান নেই) যা আমি ক্রমানুসারে মূল্যায়ন করি একটি দিয়ে সাধারণ স্ট্যাক মেশিন
আমার মূল্যায়নকারী সুন্দরভাবে কাজ করছেন, তবে আমি এখনও একটি অনুপস্থিত if()
এবং কীভাবে এগিয়ে যেতে হবে তা নিয়ে আমি ভাবছি।
আমার শান্টিং-ইয়ার্ড পোস্টফিক্সড এবং স্ট্যাক ভিত্তিক মূল্যায়ন সহ, আমি যদি if()
সত্য এবং মিথ্যা অংশগুলির সাথে অন্য ফাংশন হিসাবে যুক্ত করি তবে একটিমাত্র if(true, msgbox("ok"), msgbox("not ok"))
উভয় বার্তা প্রদর্শন করবে যখন আমি কেবল একটিই প্রদর্শন করতে চাই। এটি কারণ যখন আমার কোনও ফাংশনটি মূল্যায়ন করা দরকার তখন এর সমস্ত যুক্তি ইতিমধ্যে মূল্যায়ন এবং স্ট্যাকের উপর রেখে দেওয়া হয়েছে।
আপনি কি আমাকে if()
অলস উপায়ে বাস্তবায়নের জন্য কিছু উপায় দিতে পারেন ?
আমি যদিও এগুলিকে এক ধরণের ম্যাক্রো হিসাবে প্রক্রিয়াজাতকরণ সম্পর্কে, তবে প্রথমদিকে আমার এখনও শর্তের মূল্যায়ন হয়নি। সম্ভবত আমার শর্ত এবং সত্য / মিথ্যা এক্সপ্রেশন পৃথক রাখতে একটি সারির চেয়ে অন্য ধরণের কাঠামো ব্যবহার করা দরকার? আপাতত মূল্যায়নের আগে প্রকাশটি পার্স করা হয়েছে তবে আমি মধ্যবর্তী প্রতিনিধিত্বকে ভবিষ্যতের মূল্যায়নের জন্য প্রম্পম্পাইল্ড এক্সপ্রেশন হিসাবে সংরক্ষণ করার পরিকল্পনা করছি।
সম্পাদনা করুন : কিছু সমস্যা হলেও, আমি মনে করি যে আমি আমার অভিব্যক্তির একটি গাছের উপস্থাপনা (লিনিয়ার টোকেন স্ট্রিমের পরিবর্তে একটি এএসটি) তৈরি করতে পারি, যা থেকে আমি আমার একটি বা অন্য শাখা সহজেই উপেক্ষা করতে পারি if()
।