"প্রসঙ্গমুক্ত ব্যাকরণ" শব্দটির অর্থ "প্রসঙ্গমুক্ত" অর্থ কী?


55

প্রসঙ্গমুক্ত ব্যাকরণ (সিএফজি) কী কী তা বোঝানোর চেষ্টা করার পরিমাণের পরিপ্রেক্ষিতে, আমি অবাক করে দেখলাম যে খুব কম সংখ্যক (আমার নমুনায়, ২০ এর মধ্যে ১ এরও কম) এই ধরনের ব্যাকরণগুলিকে কেন "প্রসঙ্গে- বলা হয়" তার একটি ব্যাখ্যা দেয় মুক্ত "। এবং, আমার মনে, কেউই এটি করতে সফল হয় না।

আমার প্রশ্ন, প্রসঙ্গমুক্ত ব্যাকরণগুলিকে কেন প্রসঙ্গমুক্ত বলা হয়? "প্রসঙ্গ" কী? আমার একটি অন্তর্দৃষ্টি ছিল যে প্রসঙ্গটি বর্তমানে বিশ্লেষিত নির্মাণের চারপাশে থাকা অন্য ভাষা নির্মাণগুলি হতে পারে, তবে এটি মনে হয় না। কেউ কি একটি সঠিক ব্যাখ্যা দিতে পারে?


4
সি ++ এর জন্য "সর্বাধিক ভেক্সিং পার্স" সন্ধান করুন যা আপনাকে শিখিয়ে দেবে কেন প্রেক্ষাপট-নির্দ্বিধায়তা সহজ
রাচেট ফ্রিক

6
আমি ভেবেছিলাম যে আমি কিছু গুগলড সংজ্ঞা না পড়ার আগে পর্যন্ত প্রসঙ্গমুক্ত ব্যাকরণটি কী তা জানি। এখন আমি আশা করি আমার একটি ইচ-এ-স্কেচ এবং একটি নরম ফাঁকা জায়গা রয়েছে ... সম্ভবত আমি খুব ভাল প্রশ্নের জন্য বাইরে যাব ... + 1 কিছু বোধগম্য উত্তরের অপেক্ষায় রয়েছি!
ব্রায়ানএইচ

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

1
প্রসঙ্গমুক্ত ব্যাকরণ এবং চমস্কি শ্রেণিবিন্যাসের উইকিপেজগুলি দেখুন । অনুশীলনে প্রোগ্রামিং ল্যাঙ্গুয়েজ পার্সিংয়ের কিছু প্রসঙ্গ থাকে, প্রায়শই "কনটেক্সট-ফ্রি" (এলআর বা এলএল)
পার্সিংয়ের

1
এখানে, একটি এক্সকেসিডি রেফারেন্স রয়েছে: xkcd.com/1090
ক্যাপ্টেন কোডম্যান

উত্তর:


61

এর অর্থ এটির সমস্ত উত্পাদনের নিয়মগুলির বাম পাশে একটি একক টার্মিনাল রয়েছে।

উদাহরণস্বরূপ, এই ব্যাকরণ যা ম্যাচ করা প্রথম বন্ধনী ("()", "() (") "," ("()) ()", ...) এর স্ট্রিংকে স্বীকৃতি দেয়:

S → SS
S → (S)
S → ()

প্রতিটি নিয়মের বাম দিকটি একটি একক অ টার্মিনাল নিয়ে গঠিত হয় (এই ক্ষেত্রে এটি সর্বদা S, তবে আরও কিছু হতে পারে be)

এখন এই অন্যান্য ব্যাকরণ বিবেচনা করুন যা ফর্মটির স্ট্রিংকে স্বীকৃতি দেয় {a ^ nb ^ nc ^ n: n> = 1} (উদাঃ "abc", "aabbcc", "aabbbccc"):

S  → abc
S  → aSBc
cB → WB
WB → WX
WX → BX
BX → Bc
bB → bb

যদি নন-টার্মিনালটি Bটার্মিনাল / আক্ষরিক চরিত্রের আগে হয় তবে cআপনি সেই পদটি পুনরায় লিখবেন WBতবে এর আগে যদি হয় তবে bআপনি bbপরিবর্তে প্রসারিত করুন। প্রসঙ্গ-সংবেদনশীল ব্যাকরণগুলির প্রসঙ্গ-সংবেদনশীলতা এটিই সম্ভবত অনুমান করে।

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

ক্রিয়াকলাপটি দেখতে, আপনি প্রতিবার যখন একবার মুখোমুখি হচ্ছেন তখন বাম থেকে ডান দিকে সরানো এবং একটি বাম বন্ধনী ঠেলাঠেলি করে, এবং প্রতিবার যখন কোনও ডান প্রথম বন্ধনীর মুখোমুখি হবেন তখন পপিং করতে পারেন n যদি আপনি কোনও খালি স্ট্যাক থেকে পপ করার চেষ্টা না করেন এবং স্ট্রিংয়ের শেষে স্ট্যাকটি খালি হয় তবে স্ট্রিংটি বৈধ।

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

(যদি আপনি ভাবছেন যে কোনও ফাইনাইট স্টেট মেশিন কী চিনতে পারে তবে উত্তরটি নিয়মিত প্রকাশের। মত অপারেটরদের সঙ্গে [abc], |, *, +, এবং ?। আপনি দেখতে পারেন abbbzRegex সাথে মিলে যায় ab*zশুধু STRING এবং Regex আপনার বর্তমান অবস্থান রেখে, কোন স্ট্যাক প্রয়োজনীয়।)


14
খুব সুন্দর ব্যাখ্যা। যদিও, একটি ট্যুরিং মেশিনের টেপটি অসীম হওয়ার দরকার নেই, কেবল সীমাহীন। উভয় প্রান্তে একটি টেপ-কারখানা থাকতে পারে, যখন মেশিনটি এতে প্রবেশ করে, কেবল আরও টেপ তৈরি করে। এই পথে, যে কোনও সময় এটি সীমাবদ্ধ।
মাইক ডুনলাভে

2
@ মাইকডুনলাভে স্পষ্টির জন্য ধন্যবাদ, এটি ঠিক করে দিয়েছে।
ডোভাল

10
তবে টেপ কারখানার জন্য লাগবে অসীম টেপ তৈরি উপকরণ, বা অসীম টেপ তৈরির উপকরণ তৈরি করার উপকরণ, বা ... [ওভারফ্লো]
ফ্ল্যামিংপেনগুইন

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

10
@ জার্গডব্লিউমিত্যাগ: দুটি স্ট্যাক টেপের মতোই ভাল। হাতের ভারে: আপনার বর্তমান অবস্থানের তুলনায় টেপের বাম হাত হিসাবে একটি স্ট্যাক এবং অন্য স্ট্যাকটি ডান হাত হিসাবে ব্যবহার করুন। সুতরাং একটি 2-PDA হল একটি টুরিং মেশিন। আদিমদের জন্য আপনাকে কেবল একটি স্ট্যাকের থেকে একটি মান পপ করতে এবং অন্যটির দিকে চাপ দিতে সক্ষম হতে হবে, এটিই আপনি নিজের টেপ বরাবর যান move
স্টিভ জেসপ

20

অন্য উত্তরগুলি সঠিক এবং সঠিক হলেও, বেশ দীর্ঘ। এটি সংক্ষিপ্ত সংস্করণ।

আপনার যদি অক্ষরগুলির একটি স্ট্রিং থাকে (টার্মিনাল এবং নন-টার্মিনালগুলি) এবং আপনি স্ট্রিংটিতে একটি ননটার্মিনাল প্রতিস্থাপন করতে চান, তবে একটি প্রসঙ্গমুক্ত ব্যাকরণ আপনাকে ননটারিনালকে ঘিরে অক্ষর নির্বিশেষে তা করতে দেয়।

নিম্নলিখিত নিয়মগুলি বিবেচনা করুন (ছোট হাতের টার্মিনালগুলি, বড় হাতেরটি অবিচ্ছিন্ন)

A -> a
AB -> a

প্রথম নিয়মে আপনি এর A চারপাশে (প্রসঙ্গ) যা প্রদর্শিত হবে তা নির্বিশেষে আপনি প্রতিস্থাপন করতে পারেন । দ্বিতীয় নিয়মে Aএটি অনুসরণ না করে আপনি প্রতিস্থাপন করতে পারবেন না B। উভয় ননটার্মিনালালগুলি সেই ক্ষেত্রে প্রতিস্থাপন করা হবে, তবে গুরুত্বপূর্ণ বিষয়টি হ'ল Aবিষয়টি ঘিরে থাকা ননটার্মিনালগুলি । কেউ এর BAসাথে aবা এর Bসাথে প্রতিস্থাপন করতে পারে না a: কেবল তার Aপরে একটি Bকারণ অর্ডার, ননটারমিনালগুলির প্রসঙ্গটি গুরুত্বপূর্ণ। এর অর্থ দ্বিতীয় নিয়মে একটি অযৌক্তিক বিষয়গুলির প্রসঙ্গকে প্রসঙ্গ-সংবেদনশীল করে তোলা হয়, যখন প্রথম নিয়মটি প্রসঙ্গমুক্ত হয়।


এটি সত্যই ভাল ব্যাখ্যা, যদিও আমি এর যথার্থতা বা সম্পূর্ণতার জন্য প্রমাণ দেওয়ার যোগ্য নই। এটা কি সব আছে?
রিক

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

@Snowman: অত্যন্ত crisp.It ভাল হবে যদি আপনি বলে যে, "আপনাকে আহরণ করতে পারবে না aথেকে ABযদি না Aদ্বারা অনুসরণ করা হয় Bআপনি প্রতিস্থাপন করতে পারবেন না বলে পরিবর্তে" A"যা সম্ভব নাও হতে পারে, কারণ আসলে আপনি প্রতিস্থাপন করছেন ABনয় এটা?
জাস্টিন

ঠিক আছে আমি এই সম্পর্কে আরও পরিষ্কার হতে আমার উত্তর আপডেট।

@ সোনমান: আপনার অর্থ কি প্রতিস্থাপন করার Aবা ABদ্বিতীয় নিয়মে (প্রসঙ্গে-সংবেদনশীল)? আমি মনে করি আপনি এখনও Aআপনার উত্তর থেকে যা বলেছেন তা প্রতিস্থাপনের চেষ্টা করছেন ।
জাস্টিন

7

পার্থক্য এবং পরিভাষাটি আরও ভালভাবে বোঝার জন্য, এন বি বি এন এর মতো প্রসঙ্গ-মুক্ত ভাষার সাথে একটি এন বি বি সি সি এন এর মতো প্রসঙ্গ-সংবেদনশীল ভাষার সাথে আলাদা করা ভাল ধারণা । (স্বরলিপি: ক, খ, এবং সি এখানে আক্ষরিক এবং এক্সপোনেন্ট এন এর অর্থ আক্ষরিক n বার পুনরাবৃত্তি করা , n > 0, বলুন)) উদাহরণস্বরূপ, aabbcবা aabbbccপরবর্তী ভাষায় নেই, যেখানে aabbccরয়েছে।

প্রসঙ্গ-মুক্ত ভাষার জন্য একটি গ্রহীতা একটি এন বি এন একজোড়া চুক্তি করতে aএবং bনির্বিশেষে এটি প্রায় কি (অর্থাত যা প্রেক্ষাপটে AB মনে হচ্ছে, নির্বিশেষে) এবং এটি সঠিকভাবে নাও কাজ করবে শুধুমাত্র ভাষায় স্ট্রিং গ্রহণ এবং অন্য কিছু প্রত্যাখ্যান, অর্থাত ব্যাকরণ হয় S -> aSb | ab। লক্ষ্য করুন যে উত্পাদন (গুলি) এর বাম দিকে কোনও টার্মিনাল নেই । (দুটি উত্পাদনের নিয়ম রয়েছে, তবে আমরা কেবল সেগুলি সংক্ষিপ্তভাবে লিখছি)) গ্রহণকারী মূলত একটি স্থানীয়, প্রসঙ্গ-মুক্ত সিদ্ধান্ত নিতে পারেন।

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

S -> abc | aBSc
Ba -> aB
Bb -> bb

নোট করুন যে আপনার গত দুটি নিয়মে বাম দিকে টার্মিনাল এবং নন-টার্মিনাল রয়েছে। বামে টার্মিনালগুলি প্রসঙ্গটি যেখানে নন-টার্মিনালগুলি প্রসারিত করা যায়।


"চুক্তি" বনাম "সম্প্রসারণ" পরিভাষা ইত্যাদি সম্পর্কিত বুটনোট: যদিও আনুষ্ঠানিক ব্যাকরণগুলি [আনুষ্ঠানিকভাবে, হ্যাঁ] জেনারেটরি হয় তবে পার্সারে বাস্তবে যেভাবে প্রয়োগ করা হয় তা আসলে হ্রাসপ্রবণতা, অর্থাৎ আপনি মূলত অ-টার্মিনালের সাথে সমস্ত কিছুতে যোগাযোগ করেন, "বিপরীতে" বিধি প্রয়োগ করা, এজন্য উপরোক্ত প্রথম ব্যাকরণ এমনকি কোনও প্রোগ্রামে ব্যবহারিক নয় (এটি আপনাকে বিখ্যাত শিফট-হ্রাস সংঘাত দেয় কারণ আপনি কোন নিয়ম প্রয়োগ করবেন তা সিদ্ধান্ত নিতে পারেন না), তবে উপরের দুটি প্রসঙ্গ-মুক্ত এবং প্রসঙ্গ-সংবেদনশীলের মধ্যে পার্থক্য বোঝানোর জন্য ব্যাকরণ যথেষ্ট। প্রসঙ্গমুক্ত ব্যাকরণগুলিতে অস্পষ্টতার বিষয়টি বরং জটিল, এবং সত্যই এই প্রশ্নের বিষয় নয় তাই আমি এখানে আরও কিছু বলব না, বিশেষত যেহেতু দেখা যাচ্ছে যে উইকিপিডিয়ায় একটি শালীন নিবন্ধ রয়েছে। বিপরীতে এর প্রবন্ধগুলি নিখরচায় এবং বিশেষত প্রসঙ্গ-সংবেদনশীল ভাষার উপরের একটি নিবন্ধগুলি হ'ল @ @ $ @! # If বিশেষত আপনি যদি এই বিষয়টিতে নতুন হন ... আমার ধারণা এটি আমার টোডো তালিকায় আরও রয়েছে।


5

উপরের উত্তরগুলি এটির একটি খুব ভাল সংজ্ঞা দেয়। আসুন দেখুন আমি এটি আমার নিজের কথায় রাখতে পারি কিনা, যাতে আপনার 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) পার্সার জেনারেটর যেমন ওয়াইএসিসি শেখানো হয়।


-1

প্রসঙ্গমুক্ত ব্যাকরণগুলি উত্পাদনের নিয়মের কোনও প্রসঙ্গ বিবেচনা করে না। প্রসঙ্গটি হয় টার্মিনাল বা নন-টার্মিনাল।

সুতরাং: প্রসঙ্গবিহীন ব্যাকরণগুলির কেবলমাত্র উত্পাদন নিয়মের বাম দিকে একটি একক নন-টার্মিনাল রয়েছে।


3
এটি বিদ্যমান উত্তরের সাথে কী যুক্ত করে? এছাড়াও, বাম পাশে দুটি বা ততোধিক নন-টার্মিনাল সহ একটি উত্পাদনের নিয়ম প্রসঙ্গটিও বিনামূল্যে নয়।

আমি মনে করি প্রদত্ত উত্তরগুলি অনেক দীর্ঘ। যদি কেউ একটি টিএল; ডিআর যোগ করে তবে আমি এটি মুছে ফেলব।
মার্টিন থোমা

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