কমান্ড প্রসেসিং অ্যাপ্লিকেশনটি কীভাবে বাস্তবায়ন করা উচিত?


9

আমি একটি সাধারণ, প্রুফ-অফ-কনসেপ্ট অ্যাপ্লিকেশন (আরপিএল) তৈরি করতে চাই যা একটি নম্বর নেয় এবং তারপরে সেই নম্বরটিতে আদেশগুলি প্রসেস করে।

উদাহরণ: আমি 1 দিয়ে শুরু করি "তারপর আমি" add 2" লিখি , এটি আমাকে 3 দেয় 3. তারপর আমি" multiply 7" লিখি , এটি আমাকে 21 দেয় Then তারপর আমি জানতে চাই যে এটি প্রধান কিনা, তাই আমি লিখি" is prime"(বর্তমান সংখ্যায় - 21), এটি আমাকে মিথ্যা দেয়। " is odd" আমাকে সত্য দিতেন। ইত্যাদি।

এখন কয়েকটি কমান্ড সহ একটি সাধারণ অ্যাপ্লিকেশনটির জন্য, এমনকি একটি সাধারণ switchকমান্ডগুলি প্রক্রিয়াজাতকরণ করতে পারে। তবে আমি যদি এক্সটেনসিবিলিটি চাই, তবে কীভাবে আমার কার্যকারিতা বাস্তবায়ন করতে হবে? আমি কি কমান্ড প্যাটার্ন ব্যবহার করব? আমি কি ভাষার জন্য একটি সাধারণ পার্সার / দোভাষী তৈরি করতে পারি? আমি যদি আরও জটিল কমান্ড চাই, " multiply 5 until >200"? এটির পুনঃনির্মাণ না করে (নতুন কমান্ড যুক্ত করা) সহজ উপায় কী হবে?

সম্পাদনা করুন: কয়েকটি বিষয় পরিষ্কার করার জন্য, আমার শেষ লক্ষ্যটি ওল্ফ্রামআল্ফার মতো কিছু তৈরি করা হবে না, বরং একটি তালিকা (সংখ্যার) প্রসেসরের হবে। তবে আমি প্রথমে (একক সংখ্যায়) আস্তে আস্তে শুরু করতে চাই।

তালিকাগুলি প্রসেস করার জন্য হাসকলকে যেভাবে ব্যবহার করা হবে তার অনুরূপ কিছু আমি মনে করছি, তবে একটি খুব সাধারণ সংস্করণ। আমি ভাবছি কমান্ড প্যাটার্ন (বা সমতুল্য) এর মতো কিছু যথেষ্ট কিনা, বা আমার লক্ষ্যগুলি অর্জনের জন্য যদি আমাকে নতুন মিনি-ভাষা এবং পার্সার তৈরি করতে হয়?

সম্পাদনা 2: সমস্ত প্রতিক্রিয়ার জন্য ধন্যবাদ, সবই আমার পক্ষে খুব সহায়ক হয়েছে, তবে এমদাদ করিম আমাকে সবচেয়ে বেশি সাহায্য করেছে, তাই আমি এটিকে উত্তর হিসাবে বেছে নেব। আবার ধন্যবাদ!


2
ডাউনভোটস পাই না। দয়া করে আপনার যুক্তিটি বর্ণনা করুন যাতে আমি আমার প্রশ্নটি আরও ভাল করে পরবর্তী বারের মতো সূত্রিত করতে পারি।
নিনি মাইকেলস

2
আমি এই প্রশ্নটি সত্যিই পছন্দ করি। লোকেরা কী পরামর্শ দেয় তা দেখার জন্য অপেক্ষায় রয়েছি। আপনি কি বিশেষভাবে অবজেক্ট অরিয়েন্টেড ডিজাইনের সন্ধান করছেন (আপনি কমান্ড প্যাটার্নটি উল্লেখ করেছেন যা কোন ওও প্যাটার্ন?)
বার্জার ফ্রেইন্ড-হ্যানসেন

আপনাকে ধন্যবাদ :) হ্যাঁ, আমি ওওপি পছন্দ করব, তবে অন্য পদ্ধতিগুলির পরামর্শ দিলে আমার আপত্তি হবে না!
নিনি মাইকেলস

2
এটি বিপরীত পোলিশ নোটেশন , একটি খুব দুর্দান্ত প্রোগ্রামিংয়ের বিষয় বলে মনে হচ্ছে !
আলবার্তো দে কারো

2
আপনি সম্ভবত বইয়ের অনুচ্ছেদে অবিচ্ছিন্ন হয়ে পড়ছেন আমি এখানে কোন ধরণের প্রশ্ন জিজ্ঞাসা করব না ? এফএকিউ-তে, অর্থাত্ যদি আপনি এমন কোনও পুরো বইটি কল্পনা করতে পারেন যা আপনার প্রশ্নের উত্তর দেয়, আপনি খুব বেশি জিজ্ঞাসা করছেন
মার্ক বুথ

উত্তর:


5

এটি দোভাষীর মতো শোনাচ্ছে। দেখে মনে হচ্ছে আপনি বাস্তব কার্যকারিতাটির চেয়ে বাস্তবায়নের বিষয়ে বেশি চিন্তিত (আমি এখানে কেবল অনুমান করছি) am এই প্রকল্পটি প্রসারিত হলে তুচ্ছ কাজ নয়। আপনি স্পেসটি স্পষ্টভাবে অধ্যয়ন করেছেন তা নিশ্চিত করুন কারণ এটির জন্য ইঞ্জিনিয়ারিং পদ্ধতির প্রয়োজন এবং প্রায়শই কেবলমাত্র কাজ করে এমন 1000 টি প্যাচ সহ একটি পণ্য নির্ভরযোগ্য পণ্য পাওয়ার জন্য কোনও অ্যাডহক ডেভলপমেন্ট পদ্ধতির প্রয়োজন নেই।

একটি সিনট্যাক্সের বিষয়ে সিদ্ধান্ত নিন এবং এটিকে বিশ্লেষণ এবং প্রয়োজনীয় বাক্য গঠন পরীক্ষা করতে প্রস্তুত হন। এই লিঙ্কটি আপনাকে এটিতে সহায়তা করতে পারে: আপনার নিজের পার্সার তৈরি করুন

এক নজরে দেখুন: এই বিষয়টি যেমন কাজের বিভিন্ন দিকগুলিকে স্পর্শ করে তেমনি ভাল লিংক রয়েছে যা আপনাকে সহায়তা করতে পারে (বিশেষত আরএমকে দ্বারা উত্তর): একটি ভাষা অনুবাদক তৈরি করা । আপনি দেখতে সুন্দর দেখতে কোনও প্রকল্পের উদাহরণ দেখতে চাইতে পারেন যা কিছুটা অনুরূপ: চূড়ান্ত প্রোগ্রামেবল বৈজ্ঞানিক ক্যালকুলেটর । আপনি কমান্ড লাইন সি # দোভাষী জন্য সোর্স কোড এবং কার্যকারী প্রোগ্রাম সন্ধান করতে পারেন এখানে কমান্ড-লাইন-বাস্তবায়ন-সি-# শিক্ষার জন্য তৈরি করুন । আপনার জন্য পার্সিং এবং ভেরিয়েবল টাইপিং ইত্যাদির মতো জটিল কাজগুলি করতে সংকলকটি ব্যবহার করা নিজেই এই সমস্ত লেখার জটিলতাগুলি থেকে বাঁচার জন্য একটি চতুর উপায় হতে পারে। এছাড়াও, মনো বিকল্প রয়েছে যা একটি চার্প শেল বৈশিষ্ট্য সরবরাহ করে যা আপনি একবার খেয়াল করতে চাইতে পারেন: CsharpRepl


ধন্যবাদ, আপনার লিঙ্কগুলি সত্যই সহায়ক! সুতরাং আমি অনুমান করি যে কোনও অনুবাদক যদি এটিকে সহজেই প্রসারিত করতে চান তবে সেরা পছন্দ হবে।
নিনি মাইকেলস

প্রতিক্রিয়াটির জন্য আপনাকে ধন্যবাদ, আমি অনুমান করি কোডপোজেক্টের লিঙ্কটি দিয়ে শুরু করা ভাল ধারণা হতে পারে।
NoChance

2

আপনি যদি নিজের জন্য প্রকৃত পার্সার লেখার বিষয়ে বিশেষভাবে আগ্রহী না হন তবে আমি পার্সার জেনারেটরের ফ্রেমওয়ার্কগুলির একটিতে একবার দেখার পরামর্শ দিই। সি এর জন্য আপনার কাছে ওয়াইএসিসি বা বাইসন রয়েছে , তবে আপনি যদি পছন্দ করেন তবে অন্যান্য ভাষার জন্য অন্যান্য বিকল্প থাকতে হবে।

এটি জটিল ব্যাকরণকে পার্সিংয়ের জটিলতাগুলি সরিয়ে নিয়ে যায় এবং আপনাকে যে কাজটি করতে চান তাতে মনোনিবেশ করতে দেয়। আপনার প্রশ্নের যে ব্যাকরণটি সম্ভবত প্রস্তাব করা হয়েছে এটির জন্য অবশ্যই এটি অতিরিক্ত পরিমাণে হতে পারে তবে আপনি যেহেতু পরে আরও জটিল ব্যাকরণে প্রসারিত করার বিকল্পটি উল্লেখ করেছেন, তাই এই কাঠামোগুলি থেকে কিছুটা অনুপ্রেরণা পাওয়া কমপক্ষে মূল্যবান।


1
বেশিরভাগ পার্সার জেনারেটরগুলির সমস্যা হ'ল তাদের শিল্পকর্মগুলি অচল এবং এগুলি সহজেই প্রসারণে ধার দেয় না। আমি মনে করি নিয়ম ইঞ্জিনের মতো আরও কিছু দিয়ে ওপি আরও ভাল পরিবেশন করা হবে, যেখানে "বিধি" (কীওয়ার্ড এবং বাক্য গঠন) একটি নমনীয় ডেটা কাঠামোতে সংরক্ষণ করা হয় এবং প্রতিটি ইনপুট পরে মূল্যায়ন করা হয়।
টিএমএন

2

আপনি কি বর্ণনা খুব কাছাকাছি স্ট্যাক ভাষা

উদাহরণস্বরূপ ফ্যাক্টারে আপনি যা বর্ণনা করেন তা করা হবে

1
2 +
7 *
even? not

অথবা আপনি নিজের শব্দগুলি সংজ্ঞায়িত করতে পারেন এবং তারপরে এগুলি ব্যবহার করতে পারেন like

: add ( x y -- sum ) + ;
: multiply ( x y -- product ) * ;
: odd? ( n -- ? ) even? not ;

এই সংজ্ঞা দিয়ে উপরের উদাহরণটি হয়ে যায়

1
2 add
7 multiply
odd?

সাধারণত স্ট্যাকের ভাষা পার্স করার জন্য তুচ্ছ হয় কারণ এগুলি পৃথক পৃথক একক শব্দ ব্যবহার করে। আমি আপনাকে ফ্যাক্টরটি একবার দেখানোর পরামর্শ দিচ্ছি - আপনি যা চান তা নিখুঁতভাবে হতে পারে। আপনার প্রয়োজনীয় প্রসেসিংয়ের শব্দগুলি সংজ্ঞায়িত করা সহজ হওয়া উচিত।

সম্পাদনা : আপনি যদি অন্যরকম একটি ভাষা ডিজাইন করতে চান তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি যে কোনওভাবেই তাদের সাথে খেলুন। স্ট্যাক ল্যাঙ্গুয়েজ পার্স করা তুচ্ছ - আপনি ফাঁকা জায়গায় বিভক্ত হন এবং প্রক্রিয়াজাতকরণের একটি নির্বিকার বাস্তবায়ন সহজ: একটি স্ট্যাকের মধ্যে কী ঘটে তা আপনাকে কেবল যত্ন নেওয়া দরকার।


এটি বেশ সহজ শোনায় এবং শুরু করার জন্য একটি ভাল জায়গা। ধন্যবাদ!
নিনি মাইকেলস

1

তবে আমি যদি এক্সটেনসিবিলিটি চাই, তবে কীভাবে আমার কার্যকারিতা বাস্তবায়নের প্রয়োজন হবে?

আপনার উচিত হবে না। এক্সটেনসিবিলিটি খুব অল্প লাভের জন্য সম্পূর্ণ জটিলতা তৈরি করে। এটি বলেছিল, আপনাকে বিদ্যমান অবস্থায় একটি হুক সরবরাহ করতে হবে। রাজ্যটি দেখার, রাষ্ট্রকে সংশোধন করার এবং অন্যান্য ফলাফলগুলি (স্ক্রিনে মুদ্রণ) ফেরত দেওয়ার জন্য একটি ব্যবস্থা সরবরাহ করার উপায়। মূল কোডটি মডিউলগুলি আবিষ্কার করতে, এগুলি লোড করতে এবং তাদের কাছে আদেশ পাঠানোর জন্য আপনার একটি উপায়ের প্রয়োজন হবে।

আমি কি কমান্ড প্যাটার্ন ব্যবহার করব?

আপনি পারেন, তবে এটি সম্ভবত উপযুক্ত নয়।

আপনি পুরো ইনপুটটি নেবেন না এবং এটি প্রক্রিয়াজাতকরণের জন্য প্রেরণ করবেন না, পরিবর্তে ইনপুটটি বিশ্লেষণ করুন, সঠিক হ্যান্ডলারের কাছে প্রেরণ করুন এবং এটির কাজটি করতে দিন। আদেশটি সেই যোগাযোগের ক্ষেত্রে আলাদা হয় না; সুতরাং কোন কমান্ড প্যাটার্ন।

আমি কি ভাষার জন্য একটি সাধারণ পার্সার / দোভাষী তৈরি করতে পারি?

টোকেনগুলিতে ইনপুটটি ভেঙে ফেলার জন্য আপনাকে কিছু দরকার হবে। একটি এক্সটেনসিবল সমাধানের জন্য, আপনি সম্ভবত আরও কিছু করতে পারবেন না। একটি সংজ্ঞায়িত সমাধানের জন্য, একটি সম্পূর্ণ পার্স গাছ থাকা আরও ভাল কর্মক্ষমতা, ত্রুটি পরিচালনা ও ডিবাগ-ক্ষমতা সরবরাহ করে।

বরং একটি তালিকা (সংখ্যার) প্রসেসর

তারপরে সম্ভবত আপনার LISt প্রসেসিংয়ের ভাষাটি দেখা উচিত । কোড এবং ডেটার সংক্ষিপ্তসার আপনার বর্ণনার সাথে পুরোপুরি ফিট করা উচিত।


পরামর্শ করার জন্য আপনাকে ধন্যবাদ। এলআইএসপি হিসাবে, আমি এটির সাথে পরিচিত, এবং হাস্কেলের সাথে আরও বেশি পরিচিত, যা আমাকে এই ধারণাটি দিয়ে অনুপ্রাণিত করেছিল। তবে, যদিও আমি চাকাটিকে কিছুটা পুনর্বহাল করতে চাইছি, আমি কমান্ডগুলি প্রসেসিং করে এবং তাদের ব্যাখ্যা দিয়ে আমার হাতকে নোংরা করতে চাই। সুতরাং এটির আসল "তালিকা প্রক্রিয়াকরণ" ছাড়াও একটি শিক্ষামূলক উদ্দেশ্য রয়েছে :)
নিনি মাইকেলস

@ নিনিমিচেলস অবশ্যই, তবে এক্সটেনসিবিলিটির ডিজাইন হিসাবে লিস্পের সংগঠন ব্যবহার / কোড / ডেটা শাইনিং করা কোনও খারাপ বিকল্প নয়।
টেলাস্টিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.