সীমাবদ্ধ রাষ্ট্রীয় মেশিনগুলির উদাহরণ [বন্ধ]


25

আমি সীমাবদ্ধ মেশিনের ভাল উদাহরণগুলি খুঁজছি; ভাষা বিশেষ গুরুত্বপূর্ণ নয়, কেবলমাত্র ভাল উদাহরণ।

কোড বাস্তবায়ন কার্যকর (সাধারণ ছদ্ম-কোড) কার্যকর তবে এফএসএম এর বিভিন্ন ব্যবহার সংগ্রহ করতে এটি খুব দরকারী।

উদাহরণস্বরূপ কম্পিউটার ভিত্তিক হওয়ার দরকার নেই, উদাহরণস্বরূপ মাইক ডুনলাভের রেলপথ নেটওয়ার্ক উদাহরণ, খুব দরকারী।


12
নিয়মিত এক্সপ্রেশন হ'ল সীমাবদ্ধ রাষ্ট্র মেশিন।
chrisaycock

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

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

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

3
আমি এখনও লোকদের এই প্রশ্নটি আবার খুলতে অনুরোধ করব, কারণ আরও উদাহরণগুলি দুর্দান্ত great দুঃখজনক সত্যটি হ'ল, যদি নতুন উত্তর যুক্ত না করা হয়, তবে প্রশ্নটি উন্মুক্ত থাকত।
ocodo

উত্তর:


28

একটি নিরাপদ (ইভেন্ট ট্রিগার)

  • যুক্তরাষ্ট্র : একাধিক "লকড" রাজ্য, একটি "আনলকড" রাষ্ট্র
  • রূপান্তর : সঠিক সংমিশ্রণ / কীগুলি আপনাকে প্রাথমিক লক করা রাজ্যগুলি থেকে লক করা রাজ্যে আনলকের নিকটে সরিয়ে নিয়ে যায়, যতক্ষণ না আপনি অবশেষে আনলক না হয়ে যান। ভুল সমন্বয় / কী আপনি প্রাথমিক লক রাষ্ট্র (কখনও কখনও নামে পরিচিত জমি ফিরে অলস

ট্র্যাফিক লাইট (সময় ট্রিগারযুক্ত | সেন্সর [ইভেন্ট] ট্রিগার)

  • রাজ্য : রেড, ইয়েলো, গ্রিন (সহজতম উদাহরণ)
  • রূপান্তর : টাইমার পরিবর্তনের পরে RED এ GREEN, GREEN to YELLOW, এবং REL এ RED করুন। বিভিন্ন (আরও জটিল) রাজ্যে গাড়ি সংবেদনের ক্ষেত্রেও ট্রিগার করা যেতে পারে।

ভেন্ডিং মেশিন (ইভেন্ট ট্রিগারযুক্ত, নিরাপদ একটি বৈচিত্র )

  • রাজ্য : আইডিএল, 5_CENTS, 10_CENTS, 15_CENTS, 20_CENTS, 25_CENTS, ইত্যাদি, ভেন্ড, পরিবর্তন
  • রূপান্তর : কয়েন, বিল, ভেন্ডে সঠিক ক্রয়ের পরিমাণ (বা আরও) সন্নিবেশের পরে রাষ্ট্র পরিবর্তন, তারপরে পরিবর্তন বা আইডলিতে স্থানান্তর (আপনার ভেন্ডিং মেশিনটি কতটা নৈতিক নির্ভর করে)

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

@ ইভানপ্লাইস: কোনও আইটেম নির্বাচন করা কি আইডিএল থেকে ভেন্ডে পরিবর্তিত হওয়ার মতো ইভেন্ট হবে না? আপনি যদি বিক্রেতার আগে নির্বাচনটি নিশ্চিত করার পদ্ধতিটি কল্পনা না করে থাকেন।
মিসকো

এই দুটির জন্য কোনও চিত্রের কোনও সুযোগ?
অক্টোডো

এফএসএম উইকিপিডিয়া পৃষ্ঠায় প্রদত্ত উদাহরণগুলির মতোই , যা লিফটগুলিকেও অন্তর্ভুক্ত করে: "সহজ উদাহরণগুলি হ'ল ভেন্ডিং মেশিনগুলি , যা কয়েনগুলির যথাযথ সংমিশ্রণ জমা হলে পণ্য সরবরাহ করে, লিফটগুলি , যার স্টপগুলির ক্রমটি অনুরোধ করা মেঝে দ্বারা নির্ধারিত হয় রাইডার, ট্র্যাফিক লাইট দ্বারা , যা গাড়ি অপেক্ষা করার সময় ক্রম পরিবর্তন করে এবং সংমিশ্রিত লকগুলির জন্য , যাতে সঠিক ক্রমে সংমিশ্রণ সংখ্যার ইনপুট প্রয়োজন। "
icc97

1
@ আইসিসি ৯7 এফএসএম উদাহরণগুলি প্রতিদিনের জীবন জুড়ে প্রচুর এবং সাধারণ। ঘটনাক্রমে, স্ট্যাক এক্সচেঞ্জ পোস্টটি উইকিপিডিয়া পৃষ্ঠায় উদাহরণের তথ্য অন্তর্ভুক্ত করার প্রাক-তারিখ করেছে :)
অ্যাকোয়া

14

বর্ডার গেটওয়ে প্রোটোকল উদাহরণ

বিজিপি একটি প্রোটোকল যা ইন্টারনেটে মূল রাউটিং সিদ্ধান্তকে সমর্থন করে। এটি প্রদত্ত নোড থেকে হোস্টের পুনঃব্যবহারযোগ্যতা নির্ধারণের জন্য একটি সারণী বজায় রাখে এবং ইন্টারনেটকে সত্যই বিকেন্দ্রীভূত করে তুলেছে।

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

বিজিপি প্রোটোকল তাদের অবস্থা পরিবর্তন করার জন্য পিয়ারদের যে বার্তাগুলি প্রেরণ করা হয়েছে তা নির্ধারণ করে।

বিপিজি স্টেটচার্ট

বিজিপি স্টেটচার্ট

অলস

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

কানেক্ট

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

সক্রিয়

ইন সক্রিয় রাষ্ট্র, রাউটারে শূন্য এবং আয় ConnectRetry টাইমার রিসেট কানেক্ট রাষ্ট্র।

OpenSent

ইন OpenSent রাষ্ট্র, রাউটার একটি ওপেন বার্তা এবং বিনিময়ে এক জন্য অপেক্ষা করছে পাঠায়। ক্যাপালাইভ বার্তাগুলি এক্সচেঞ্জ হয় এবং সফল প্রাপ্তির পরে, রাউটারটি প্রতিষ্ঠিত অবস্থায় স্থাপন করা হয় ।

প্রতিষ্ঠিত

ইন প্রতিষ্ঠিত রাষ্ট্র, রাউটার পাঠাতে পারেন / পাই: keepalive; হালনাগাদ; এবং এর পিয়ারকে / থেকে বিজ্ঞপ্তি বার্তা।

বিজিপি সম্পর্কে আরও তথ্য উইকিপিডিয়ায় রয়েছে


@ টিক্রোসলে - এটি উইকিপিডিয়া থেকে এসেছে, সুতরাং সত্যিকারের creditণের প্রাপ্য নয়।
ocodo

1
ঠিক আছে, একটি ডায়াগ্রাম অন্তর্ভুক্ত করার জন্য +1 । :)
tcrosley

আমি চার্জের লেবেলটি বিজিপি-তে সংশোধন করার চেষ্টা করেছি, তবে এটি আমাকে করতে দেয়নি - পর্যাপ্ত অক্ষর নেই :)
মাইক ডুনলাভে

এটি আঁকার আরও ভাল উপায় থাকতে হবে।
কাজ

1
@ জোব - কিছুটা দেরিতে সাড়া পেয়েছি, দুঃখিত, তবে আমি এখন এটিকে অনেক বেশি ছদ্মবেশী উদাহরণ বলে মনে করি, সেফ, ভেন্ডিং মেশিন ইত্যাদি আমার মনে হয় আরও কার্যকর।
ocodo

7

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

এগুলি গেমের অন্যান্য দিকগুলিতেও ব্যবহৃত হয়: এআই প্রায়শই রাষ্ট্র-ভিত্তিক হয়; মেনু এবং স্তরগুলির মধ্যে রূপান্তর, এবং মৃত্যুর পরে বা শেষ পর্যায়ে স্থানান্তরগুলি এফএসএম দ্বারা প্রায়শই ভালভাবে মডেল করা হয়।


++ দুর্দান্ত উদাহরণ।
মাইক ডুনলাভে

1
+1 একটি ডিএফএম (ডিট্রিমেন্টিক ফাইনাইট স্টেট মেশিন) এর ভাল উদাহরণ কারণ পথগুলি।
ইভান প্লেস

4

Jquery-csv প্লাগ- ইনতে ব্যবহৃত সিএসভি পার্সার

এটি একটি বেসিক চমস্কি টাইপ তৃতীয় ব্যাকরণ পার্সার।

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

টোকেনাইজার:

var tokenizer = /("|,|\n|\r|[^",\r\n]+)/;

ম্যাচের প্রথম সেটটি হ'ল কন্ট্রোল অক্ষর: মান ডিলিমিটার (") মান পৃথককারী (,) এবং এন্ট্রি বিভাজক (নতুন লাইনের সমস্ত প্রকরণ) The

এখানে 10 টি নিয়ম রয়েছে যা পার্সারকে অবশ্যই সন্তুষ্ট করতে হবে:

  • নিয়ম # 1 - প্রতি লাইনে একটি করে প্রবেশ, প্রতিটি লাইন একটি নতুন লাইনের সাথে শেষ হয়
  • বিধি # 2 - ফাইলের শেষে ট্রেলিং করা নতুন লাইন বাদ দেওয়া হয়েছে
  • বিধি # 3 - প্রথম সারিতে শিরোনামের ডেটা রয়েছে
  • নিয়ম # 4 - স্পেসগুলি ডেটা হিসাবে বিবেচিত হয় এবং এন্ট্রিগুলিতে একটি পিছনে কমা থাকা উচিত নয়
  • নিয়ম # 5 - লাইনগুলি ডাবল-কোট দ্বারা সীমিত করা যেতে পারে বা নাও পারে
  • বিধি # 6 - লাইন ব্রেক, ডাবল-কোটস এবং কমাগুলি সহ ক্ষেত্রগুলিকে ডাবল-কোটে আবদ্ধ করা উচিত
  • নিয়ম # 7 - যদি ক্ষেত্রগুলি আবদ্ধ করতে ডাবল-কোট ব্যবহার করা হয়, তবে ক্ষেত্রের ভিতরে উপস্থিত একটি দ্বৈত উদ্ধৃতিটিকে অন্য একটি দ্বিগুণ উদ্ধৃতি দিয়ে পূর্ববর্তী করে পালাতে হবে
  • সংশোধন # 1 - একটি অব্যক্ত ক্ষেত্র হতে পারে বা পারে
  • সংশোধন # 2 - একটি উদ্ধৃত ক্ষেত্রটি নাও পারে
  • সংশোধন # 3 - একটি এন্ট্রিতে সর্বশেষ ক্ষেত্রটি নাল মান বা নাও থাকতে পারে

দ্রষ্টব্য: শীর্ষ 7 টি নিয়ম সরাসরি আইইটিএফ আরএফসি 4180 থেকে প্রাপ্ত । সর্বশেষ 3 টি আধুনিক স্প্রেডশিট অ্যাপ্লিকেশন (প্রাক্তন এক্সেল, গুগল স্প্রেডশিট) দ্বারা প্রবর্তিত প্রান্ত কেসগুলিতে যুক্ত করা হয়েছিল যা ডিফল্টরূপে সমস্ত মান সীমাবদ্ধ করে না (অর্থাৎ উদ্ধৃতি) ote আমি আরএফসিতে পরিবর্তনগুলি ফিরিয়ে দেওয়ার চেষ্টা করেছি তবে এখনও আমার তদন্তের কোনও প্রতিক্রিয়া শুনতে পাইনি।

উইন্ড-আপ দিয়ে যথেষ্ট, এখানে চিত্রটি রয়েছে:

সিএসভি পার্সার সীমাবদ্ধ রাষ্ট্র মেশিন

যুক্তরাষ্ট্র:

  1. একটি এন্ট্রি এবং / অথবা একটি মান জন্য প্রাথমিক অবস্থা
  2. একটি উদ্বোধনী উদ্ধৃতি সম্মুখীন হয়েছে
  3. একটি দ্বিতীয় উদ্ধৃতি সম্মুখীন হয়েছে
  4. একটি অ-উদ্ধৃত মান সম্মুখীন হয়েছে

স্থানান্তর:

  • ক। উদ্ধৃত মান (1), অব্যক্ত মান (3), নাল মান (0), নাল এন্ট্রি (0) এবং নতুন এন্ট্রি (0) উভয়ের জন্য চেক
  • খ। দ্বিতীয় উদ্ধৃতি চরের জন্য চেক (2)
  • গ। একটি পালানো উদ্ধৃতি (1), মানের শেষে (0) এবং প্রবেশের সমাপ্তি (0)
  • ঘ। মান (0) এর শেষে এবং প্রবেশের শেষ (0) পরীক্ষা করে

দ্রষ্টব্য: এটি আসলে একটি রাষ্ট্র অনুপস্থিত। 'সি' -> 'বি' থেকে '1' রাজ্যের সাথে চিহ্নিত একটি রেখা থাকা উচিত কারণ একজন পলায়িত দ্বিতীয় ডিলিমিটার মানে প্রথম ডিলিমিটারটি এখনও খোলা রয়েছে। প্রকৃতপক্ষে, সম্ভবত এটি অন্য রূপান্তর হিসাবে প্রতিনিধিত্ব করা ভাল। এগুলি তৈরি করা একটি শিল্প, কোনও সঠিক উপায় নেই।

দ্রষ্টব্য: এটি একটি প্রস্থান স্থিতিও হারিয়েছে তবে বৈধ ডেটা অনুসারে পার্সার সর্বদা রূপান্তর 'এ' এ শেষ হয় এবং রাজ্যগুলির কোনওটিই সম্ভব হয় না কারণ এখানে বিশ্লেষণের কিছুই নেই nothing

রাজ্য এবং স্থানান্তরের মধ্যে পার্থক্য:

একটি রাষ্ট্র সীমাবদ্ধ, যার অর্থ এটি কেবল একটি জিনিসকে বোঝাতেই অনুমান করা যায়।

একটি রূপান্তর রাষ্ট্রগুলির মধ্যে প্রবাহকে উপস্থাপন করে যাতে এর অর্থ অনেক কিছুই হতে পারে।

মূলত, রাষ্ট্র-> রূপান্তর সম্পর্কটি 1 -> * (অর্থাত্ এক-বহু)। রাষ্ট্র 'এটি কী' সংজ্ঞা দেয় এবং রূপান্তর 'এটি কীভাবে পরিচালিত হয়' সংজ্ঞা দেয়।

দ্রষ্টব্য: রাজ্যগুলির / সংক্রমণগুলির প্রয়োগ যদি স্বজ্ঞাত না অনুভব করে চিন্তিত হবেন না, এটি স্বজ্ঞাত নয়। অবশেষে ধারণাটি আঁকড়ে ধরার আগে আমার চেয়ে অনেক বেশি স্মার্ট কারও সাথে এটির জন্য কিছু বিস্তৃত লেগেছে।

সিউডো কোড:

csv = // csv input string

// init all state & data
state = 0
value = ""
entry = []
output = []

endOfValue() {
  entry.push(value)
  value = ""
}

endOfEntry() {
  endOfValue()
  output.push(entry)
  entry = []
}

tokenizer = /("|,|\n|\r|[^",\r\n]+)/gm

// using the match extension of string.replace. string.exec can also be used in a similar manner
csv.replace(tokenizer, function (match) {
  switch(state) {
    case 0:
      if(opening delimiter)
        state = 1
        break
      if(new-line)
        endOfEntry()
        state = 0
        break
      if(un-delimited data)
        value += match
        state = 3
        break
    case 1:
      if(second delimiter encountered)
        state = 2
        break
      if(non-control char data)
        value += match
        state = 1
        break
    case 2:
      if(escaped delimiter)
        state = 1
        break
      if(separator)
        endOfValue()
        state = 0
        break
      if(newline)
        endOfEntry()
        state = 0
        break
    case 3:
      if(separator)
        endOfValue()
        state = 0
        break
      if(newline)
        endOfEntry()
        state = 0
        break
  }
}

দ্রষ্টব্য: এটি আক্ষেপ, বাস্তবে আরও অনেক কিছু বিবেচনা করা উচিত। উদাহরণস্বরূপ, ত্রুটি পরীক্ষা করা, নাল মান, একটি অনুসরণকারী ফাঁকা রেখা (যার অর্থ বৈধ) ইত্যাদি

এই ক্ষেত্রে, যখন রাজেন ম্যাচ ব্লক একটি পুনরাবৃত্তি সমাপ্ত করে তখন রাষ্ট্রগুলি জিনিসগুলির শর্ত। স্থানান্তর কেস স্টেটমেন্ট হিসাবে প্রতিনিধিত্ব করা হয়।

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

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

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


1
ওহো! খুব সুন্দর অবদান।
ocodo

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

আমি নিজেও শিখিয়েছি, তবে আমি 30 বছর আগে শুরু করেছি, সুতরাং এখনই আমি সিএস পাঠ্যক্রমটি কভার করেছি :) আমি আপনার এবং আমার মতো লোকদের জন্য এই প্রশ্নটি পোস্ট করেছি। আমি মনে করি তত্ক্ষণাত্ খুব নিম্ন স্তরের তত্ত্বটি শিখতে সহজতর হয়েছিল, কেবলমাত্র সেখানে কারণেই সেখানে কম বিভ্রান্তি ছিল, এবং ধাতুর কাছাকাছি কাজ করার আরও বেশি সুযোগ ছিল, যদিও সেখানে আসলে কোনও ইন্টারনেট ছিল না, এবং আমরা সবাই গুহায় বাস করতাম।
ocodo

3

জাভাতে সহজ এফএসএম

int i=0;

while (i<5) {
 switch(i) {
   case 0:
     System.out.println("State 0");
     i=1;
     break;
   case 1:
     System.out.println("State 1");
     i=6;
     break;
   default:
     System.out.println("Error - should not get here");
     break;      
  }

} 

এই নাও. ঠিক আছে, এটি উজ্জ্বল নয়, তবে এটি ধারণাটি দেখায়।

আপনি প্রায়শই টেলিকম পণ্যগুলিতে এফএসএম পাবেন কারণ তারা অন্যথায় জটিল পরিস্থিতিতে একটি সহজ সমাধান সরবরাহ করে।


3
এগুলি লেক্সিকাল বিশ্লেষণে সংকলক নির্মাণের একটি গুরুত্বপূর্ণ অংশ।
জেএমকিউ

@jmquigley, আপনি একটি উত্তর যোগ করতে পারেন দয়া করে?
ocodo

1
আমি আপনার জন্য কয়েকটি লিঙ্কের সাথে একটি পৃথক উত্তর যুক্ত করেছি।
জেএমকিউ

3

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

রাজ্যগুলি উদাহরণস্বরূপ, নিচতলায়, প্রথম তল ইত্যাদিতে, এবং স্থলটি প্রথম তলায় চলেছে বা তৃতীয় স্থল তলে চলেছে তবে বর্তমানে তল 3 এবং 2 এর মধ্যে রয়েছে and

লিফ্ট খাঁচায় এবং মেঝেগুলিতে বোতামগুলির প্রভাব নিজেই ইনপুট সরবরাহ করে, যার প্রভাব বর্তমান অবস্থার পাশাপাশি চাপানো বোতাম উভয়ের উপর নির্ভর করে।

উপরের এবং নীচে বাদে প্রতিটি তলায় দুটি বোতাম থাকবে: একটি লিফ্টটি উপরে যেতে অনুরোধ করবে, অন্যটি নীচে নামবে।


2

ঠিক আছে, এখানে একটি উদাহরণ। মনে করুন আপনি একটি পূর্ণসংখ্যা পার্স করতে চান। এটি একটি পূর্ণসংখ্যা dd*যেখানে যেখানে কিছু যেতে হবে d

state0:
    if (!isdigit(*p)) goto error;
    p++;
    goto state1;
state1:
    if (!isdigit(*p)) goto success;
    p++;
    goto state1;

অবশ্যই, যেমন @ গ্যারি বলেছিলেন, আপনি gotoএকটি স্যুইচ স্টেটমেন্ট এবং রাষ্ট্র পরিবর্তনশীলের মাধ্যমে সেগুলি ছদ্মবেশে ফেলতে পারেন। এই কোডটিতে কাঠামোবদ্ধ হতে পারে তা লক্ষ্য করুন, যা মূল নিয়মিত অভিব্যক্তির কাছে বিস্মৃত:

if (isdigit(*p)){
    p++;
    while(isdigit(*p)){
        p++;
    }
    // success
}
else {
    // error
}

অবশ্যই আপনি এটি দেখতে একটি টেবিল দিয়ে করতে পারেন।

সীমাবদ্ধ রাষ্ট্রের মেশিনগুলি অনেক উপায়ে তৈরি করা যায় এবং অনেক কিছুই সীমাবদ্ধ রাষ্ট্রের মেশিনগুলির উদাহরণ হিসাবে বর্ণনা করা যায়। জিনিস সম্পর্কে চিন্তাভাবনা করার জন্য এটি কোনও ধারণা হিসাবে এতটা "জিনিস" নয়।

রেলপথ নেটওয়ার্ক উদাহরণ

এফএসএম এর একটি উদাহরণ রেলপথ নেটওয়ার্ক।

সীমাবদ্ধ সংখ্যক সুইচ রয়েছে যেখানে দুটি ট্র্যাকের মধ্যে একটি ট্রেন যেতে পারে।

এই স্যুইচগুলি সংযুক্ত করে একটি সীমাবদ্ধ ট্র্যাক রয়েছে।

যে কোনও সময়ে, একটি ট্রেন এক ট্র্যাকের উপরে রয়েছে, একক বিট ইনপুট তথ্যের উপর ভিত্তি করে, এটি একটি স্যুইচ অতিক্রম করে অন্য ট্রাকে পাঠানো যেতে পারে।


(আমি আপনার উত্তরে একটি সম্পাদনা করেছি, আমি আশা করি আপনি অনুমোদিত
হবেন

@ স্লোমোজো: ঠিক আছে। ভাল লাগছে।
মাইক ডুনলাভে

2

রুবিতে সীমাবদ্ধ স্টেট মেশিন:

module Dec_Acts
 def do_next
    @now = @next
    case @now
    when :invite
      choose_round_partner
      @next = :wait
    when :listen
      @next = :respond
    when :respond
      evaluate_invites
      @next = :update_in
    when :wait
      @next = :update_out
    when :update_in, :update_out
      update_edges
      clear_invites
      @next = :exchange
    when :exchange
      update_colors
      clear_invites
      @next = :choose
    when :choose
      reset_variables
      choose_role
    when :done
      @next = :done
    end
  end
end

এটি কোনও বিতরণ সিস্টেমে একটি একক গণনা নোডের আচরণ, লিংক ভিত্তিক যোগাযোগ প্রকল্প স্থাপন করা। বেশি অথবা কম. গ্রাফিক আকারে এটি দেখতে এরকম কিছু দেখাচ্ছে:

এখানে চিত্র বর্ণনা লিখুন


+1 আকর্ষণীয়। ডিজিএমএম কী বোঝায়?
ইভান প্লেস

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

@ স্লোমোজো "জি" "জেনারালাইজড" এর জন্য, ক্রমযুক্ত অ্যালগরিদম যা থেকে এটি উত্পন্ন হয়েছে জেনারেলাইজড সর্বাধিক মিল হিসাবে পরিচিত একটি কৌশল ব্যবহার করে uses
ফিলোসোডাড

@ ফিলোসোডাড আমি যতটা অনুমান করেছি তবে পোস্ট অনুমানগুলি আমি পছন্দ করি না।
অ্যাকোডো

1

লেক্সিকাল এনালাইসিসের কয়েকটি সাধারণ উদাহরণ (এফএসএম) এর জন্য এই লিঙ্কটি দেখুন:

http://ironbark.bendigo.latrobe.edu.au/subjects/SS/clect/clect03.html

উদাহরণস্বরূপ আপনি "ড্রাগন বই "ও পরীক্ষা করে দেখতে পারেন (এটি হালকা পড়া নয়)

http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools


0

অনুশীলনে, স্টেট মেশিনগুলি প্রায়শই এর জন্য ব্যবহৃত হয়:

  • নকশার উদ্দেশ্যে (একটি প্রোগ্রামের বিভিন্ন ক্রিয়াকে মডেলিং করা)
  • প্রাকৃতিক ভাষা (ব্যাকরণ) পার্সার
  • স্ট্রিং পার্সিং

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

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

পাইথন কোড:

import string

STATE_NUMERIC = 1
STATE_ALPHA = 2

CHAR_SPACE = " "

def validate_zipcode(s):
cur_state = STATE_NUMERIC

for char in s:
    if cur_state == STATE_NUMERIC:
        if char == CHAR_SPACE:
            cur_state = STATE_ALPHA
        elif char not in string.digits:
            return False
    elif cur_state == STATE_ALPHA:
        if char not in string.letters:
            return False
return True

zipcodes = [
    "3900 AB",
    "45D6 9A",
]

for zipcode in zipcodes:
    print zipcode, validate_zipcode(zipcode)

উত্স: (সসীম-) বাস্তবে রাষ্ট্রীয় মেশিনগুলি

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