উপরের উত্তরগুলি এটির একটি খুব ভাল সংজ্ঞা দেয়। আসুন দেখুন আমি এটি আমার নিজের কথায় রাখতে পারি কিনা, যাতে আপনার 20 এর পরিবর্তে 23 টি ব্যাখ্যা থাকে a ব্যাকরণ, কোনও ব্যাকরণের পুরো উদ্দেশ্যটি নির্দিষ্ট ভাষায় প্রদত্ত ভাষায় একটি বাক্য কিনা তা নির্ধারণ করা। তবে, আমরা আসলে ব্যাকরণ এবং বিশ্লেষণের জন্য যা ব্যবহার করি তা হল বাক্যটির অর্থ কী তা বোঝা। এটি স্কুলে ইংরেজি ক্লাসে ফিরে নাও করতে পারে এমন বাক্যটির পুরানো চিত্রের মতো। একটি বাক্য একটি বিষয় অংশ এবং একটি প্রাকটিক অংশ দিয়ে তৈরি করা হয়, একটি বিষয়ের অংশ বিশেষ্য এবং সম্ভবত কিছু বিশেষণ থাকে, একটি প্রাকটিক অংশে একটি ক্রিয়া থাকে এবং সম্ভবত কোনও অবজ বিশেষ্য থাকে, আরও কয়েকটি বিশেষণ ইত্যাদি দিয়ে থাকে with
যদি ইংরেজির জন্য ব্যাকরণ থাকত (এবং আমি মনে করি না যে এটি কম্পিউটার বিজ্ঞানের অর্থে নেই) তবে এটির নীচের ফর্মগুলির বিধি থাকবে, যাকে বলা হয় প্রডাকশন।
Sentence -> SubjectPart PredicatePart
SubjectPart -> Adjective Noun
ইত্যাদি ...
তারপরে আপনি একটি প্রোগ্রাম লিখতে এবং কোনও বাক্য হস্তান্তর করতে পারেন, এবং প্রোগ্রামটি প্রতিটি শব্দটির বাক্যটির কোন অংশ, এবং একে অপরের সাথে কী সম্পর্ক রয়েছে তা নির্ধারণ করতে ব্যাকরণটি ব্যবহার করতে পারে।
যদি প্রতিটি উত্পাদনে, বাম দিকে কেবল একটি জিনিস থাকে, তবে এর অর্থ হ'ল যখনই আপনি বাক্যে ডান দিকটি দেখেন, আপনাকে বাম পাশের স্থানে স্থান দেওয়ার অনুমতি দেওয়া হয়। উদাহরণস্বরূপ আপনি যখনই বিশেষণ বিশেষ্যটি দেখেন, আপনি এই বাক্যাংশের বাইরের কোনও বিষয়ে মনোযোগ না দিয়েই "এটি একটি সাবজেক্ট পার্ট" বলতে পারেন।
তবে, ইংরেজি (উপরে বর্ণিত ইংরাজির সরল বিবরণও) প্রসঙ্গ সংবেদনশীল। "বিশেষণ বিশেষ্য" সর্বদা সাবজেক্ট পার্ট হয় না, এটি একটি প্রিডিকেট পার্টে একটি NounPrasse হতে পারে। ইহা পারিপার্শ্বিক অবস্থা উপর নির্ভর করে। আসুন আমাদের ছদ্ম-ইংরেজি ব্যাকরণটি কিছুটা প্রসারিত করুন:
Sentence -> SubjectPart PredicatePart
SubjectPart -> Adjective Noun
PredicatePart -> VerbPhrase ObjectNounPhrase
VerbPhrase ObjectNounPhrase -> VerbPhrase Adjective Noun
ভার্বফ্রেসের পরে ঠিক যদি আসে তবে আপনি কেবলমাত্র একটি অবজেক্টনউনফ্রেসে একটি "বিশেষণ বিশেষ্য" তৈরি করতে পারেন।
মূলত, আপনার যদি কোনও উত্পাদন হয় এবং আপনি যে কোনও সময় এটি প্রয়োগ করতে পারেন, এটি যতই ঘিরে থাকুক না কেন, এটি প্রসঙ্গমুক্ত।
কোনও ব্যাকরণ সহজেই প্রসঙ্গে মুক্ত কিনা তা আপনি সর্বদা বলতে পারেন। তীরগুলির বাম দিকে একাধিক চিহ্ন রয়েছে কিনা তা পরীক্ষা করে দেখুন।
যে কোনও ভাষা একাধিক ব্যাকরণ দ্বারা বর্ণিত হতে পারে। যদি কোনও ভাষার জন্য কিছু ব্যাকরণ প্রসঙ্গমুক্ত হয় তবে ভাষাটি প্রসঙ্গমুক্ত। এটি কয়েকটি ভাষার ক্ষেত্রে প্রমাণিত হতে পারে যে কোনও প্রসঙ্গমুক্ত ব্যাকরণ সম্ভব নয়। আমি মনে করি যে উপরে বর্ণিত সরলিকৃত সিউডো-ইংলিশ উপসেটটির জন্য প্রসঙ্গমুক্ত ব্যাকরণ থাকতে পারে।
কেন এটি গুরুত্বপূর্ণ, এটি প্রসঙ্গমুক্ত ব্যাকরণকে বিশ্লেষণ করার জন্য একটি সহজ ধরণের প্রোগ্রামের প্রয়োজন। অন্যান্য উত্তরে যেমন উল্লেখ করা হয়েছে, প্রসঙ্গমুক্ত ব্যাকরণকে বিশ্লেষণ করার জন্য ট্যুরিং মেশিনের সম্পূর্ণ শক্তি প্রয়োজন হয় না। নির্দিষ্ট প্রসঙ্গমুক্ত ব্যাকরণের জন্য লাকহেড এলআর (1) পার্সার (যা এক ধরণের পুশডাউন মেশিন) সেই ব্যাকরণের কোনও বাক্যকে সময় এবং স্পেস রৈখিক বাক্যটির দৈর্ঘ্য পর্যন্ত পার্স করতে পারে। বাক্যটি যদি ভাষায় হয় তবে পার্সার একটি কাঠামো গাছ তৈরি করবে যা সনাক্ত করে বাক্যটির প্রতিটি প্রতীক কী বোঝায় (বা কমপক্ষে এটি কাঠামোর অংশে কী ভূমিকা নেয়)। যদি বাক্যটি ব্যাকরণে না থাকে, তবে পার্সারটি প্রথম চিহ্নটিতে লক্ষ্য করবেন এবং থামবেন যা ব্যাকরণ এবং পূর্ববর্তী চিহ্নগুলির সাথে মিলিত হওয়া অসম্ভব (প্রথম "ত্রুটি")।
আরও ভাল এটি হ'ল এমন প্রোগ্রাম রয়েছে যা আপনি ব্যাকরণের একটি বিবরণ দিতে পারবেন এবং প্রতিটি অংশের সাথে কী করবেন সে সম্পর্কে নির্দেশাবলীর একটি তালিকা (এক অর্থে প্রতিটি উত্পাদনের সাথে "অর্থ" সংযুক্ত করে) এবং প্রোগ্রামটি পার্সার লিখবে তোমার জন্য. প্রোগ্রামটি বাক্যটিকে বিশ্লেষণ করবে, কাঠামোটি সন্ধান করবে এবং কাঠামোর প্রতিটি অংশে আপনার নির্দেশাবলী চালাবে। এই জাতীয় প্রোগ্রামকে পার্সার-জেনারেটর বা সংকলক-সংকলক বলা হয়।
এই জাতীয় ভাষা বিশ্লেষণটি প্রাকৃতিক ভাষার (যেমন ইংরেজি) স্বয়ংক্রিয় বিশ্লেষণের জন্য উদ্ভাবিত হয়েছিল তবে এটি প্রমাণিত হয়েছে যে এটি কম্পিউটারের ভাষা বিশ্লেষণের জন্য সবচেয়ে কার্যকর most কোনও ভাষা ডিজাইনার একটি ব্যাকরণ লিখতে পারে যা তার নতুন ভাষা ক্যাপচার করে, তারপরে পার্সার-জেনারেটরের মাধ্যমে এমন একটি প্রোগ্রাম পাওয়ার জন্য চালায় যা তার ভাষার বিশ্লেষণ করে, এবং অনুবাদ করতে পারে, অনুবাদ করে, সংকলন করে, কার্যকর করে, ইত্যাদি যদি সে চায়।
আসলে, বেশিরভাগ ক্ষেত্রে আপনি সত্যই এটি করতে পারবেন না। উদাহরণস্বরূপ, সুষম বন্ধনীগুলি একটি প্রসঙ্গ-মুক্ত ভাষা, তবে এমন একটি ভাষা যেখানে আপনার সমস্ত ভেরিয়েবলগুলি ব্যবহার করার আগে এটি ঘোষণার প্রয়োজন হয় প্রসঙ্গ সংবেদনশীল। পার্সার সংকলকের একটি অংশ, তবে এই অন্যান্য প্রয়োজনীয়তা প্রয়োগের জন্য অতিরিক্ত যুক্তি প্রয়োজন। তারপরে আপনাকে যা করতে হবে তা হল একটি ব্যাকরণ লিখুন যা আপনার ভাষা যতটা সম্ভব ক্যাপচার করে, পার্সার-জেনারেটরের মাধ্যমে চালান, তারপরে কোডটি লিখুন যা বাকী প্রয়োজনীয়তা প্রয়োগ করে (প্রতীক টেবিল হ্যান্ডলার ইত্যাদি)।
আমরা সাধারণত প্রসঙ্গ-সংবেদনশীল ব্যাকরণ ব্যবহার করি না কারণ এগুলি আরও খারাপভাবে সমর্থিত। প্রসঙ্গ সংবেদনশীল ভাষার জন্য কোনও এলআর (কে) পার্সার-জেনারেটরের সমতুল্য কিনা তা আমি জানি না। হ্যাঁ, একটি ট্যুরিং মেশিন (বা লিনিয়ার বাউন্ড মেশিন) একটিকে বিশ্লেষণ করতে পারে, তবে আমি জানি না যে কোনও ট্যুরিং মেশিনের প্রোগ্রামে প্রসঙ্গে সংবেদনশীল ব্যাকরণকে রূপান্তরিত করার জন্য একটি সাধারণ অ্যালগরিদম আছে, এই অর্থে যে এলআর (1) ) জেনারেটর একটি পুডডাউন মেশিনের জন্য পার্স টেবিল তৈরি করে। আমার অনুমান যে পার্সারটি যে টেবিলগুলি অন্তর্ভূক্ত করে তা তাত্পর্যপূর্ণভাবে বড় হবে। যে কোনও ক্ষেত্রে, সিএস শিক্ষার্থীরা (আমার মতো, দিনের বেলা) সাধারণত প্রাসঙ্গিক মুক্ত ব্যাকরণ এবং এলআর (1) পার্সার জেনারেটর যেমন ওয়াইএসিসি শেখানো হয়।