এটি কি ব্যাকরণ প্রোগ্রামগুলির একটি সংস্কার ? পূর্ববর্তী ভ্যাগ দ্বারা জিজ্ঞাসা করা হয়েছিল এবং মন্তব্যকারীদের অনেক পরামর্শ সহ।
কোন ব্যাকরণকে গণনার মডেল নির্দিষ্ট করে দেখা যায়? উদাহরণস্বরূপ, যদি আমরা একটি সাধারণ প্রসঙ্গমুক্ত ব্যাকরণ গ্রহণ করি যেমন
G ::= '1' -> '0' '+' '1'
'1' -> '1' '+' '0'
'2' -> '2' '+' '0'
'2' -> '1' '+' '1'
'2' -> '0' '+' '2'
'3' -> '3' '+' '0'
'3' -> '2' '+' '1'
'3' -> '1' '+' '2'
'3' -> '1' '+' '2'
ধরে নিলাম যে এখানে পার্সারটি টার্মিনাল এবং অযৌক্তিক চিহ্নগুলির মধ্যে পার্থক্য করে না যেমন আমি এখানে দেখিয়েছি, তবে 3 পর্যন্ত সংখ্যাগুলির জন্য সহজ গাণিতিক সম্পাদন করা সম্ভব।
উদাহরণস্বরূপ, স্ট্রিং নিন
"2 + 0 + 1"
এই স্ট্রিংটিতে একটি এলআর (1) পার্সার চালনা করে নীচের কংক্রিট সিনট্যাক্স ট্রিটি দেওয়া উচিত যেখানে গণনার ফলাফল গাছের গোড়ায় সংরক্ষণ করা হয়:
'3'
/ | \
/ | \
'2' '+' '1'
/ | \
/ | \
'2' '+' '0'
সুতরাং, আমরা যদি একটি প্রোগ্রামার হিসাবে ব্যাকরণ এবং সংকলক হতে পার্সার জেনারেটর গ্রহণ করি, আমরা কি ব্যাকরণ নির্দিষ্টকরণের ভাষাটিকে প্রোগ্রামিং ভাষা হিসাবে দেখতে পারি ?
উপরন্তু, আমরা আপনার কিভাবে সম্পূর্ণ প্রোগ্রাম টুরিং নির্মান করতে পারে অনুরূপ ব্যাকরণ নির্দিষ্ট করে টুরিং-সম্পূর্ণ প্রোগ্রাম নির্মান করতে পারে celullar অটোমাটা বা ল্যামডা ক্যালকুলাস ?
অন্য কথায়, এটি জানা যায় যে অর্থে স্বীকৃতি একটি ভাষা, নিয়মিত ভাষায় মিলা সসীম রাষ্ট্র অটোমাটা , প্রসঙ্গ-মুক্ত ভাষায় মিলা অটোমাটা নিচে ধাক্কা , এবং প্রসঙ্গ-সংবেদী ভাষায় মিলা বেষ্টিত অটোমাটা রৈখিক । তবে, যদি আমরা ব্যাকরণগুলিকে গণনার যন্ত্র হিসাবে বিবেচনা করি ( যেমন উপরের উদাহরণের অর্থে প্রোগ্রামগুলি ), তবে আমরা কীভাবে চমস্কি শ্রেণিবিন্যাসের প্রতিটি শ্রেণির ব্যাকরণগুলির গণনীয় শক্তিকে শ্রেণিবদ্ধ করব?
- নিয়মিত ব্যাকরণ
- প্রসঙ্গমুক্ত ব্যাকরণ
- প্রসঙ্গ সংবেদনশীল ব্যাকরণ
- সীমাবদ্ধ ব্যাকরণ ( পুনরাবৃত্তিযোগ্য গণনার জন্য )
এছাড়াও, ব্যাকরণগুলির যেমন কম পরিচিত উপ-চশমা সম্পর্কে কীভাবে
- নির্ধারিত প্রসঙ্গমুক্ত ব্যাকরণ (এছাড়াও এলআর (কে) / এলএল (কে) / এসএলআর / এলএলআর ইত্যাদি)
- নেস্টেড শব্দ ব্যাকরণ
- গাছ সংলগ্ন ব্যাকরণ
- সূচকযুক্ত ব্যাকরণ
সম্পাদনা করুন: যাইহোক, এটি আমার নিজের প্রশ্নের একটি নিটপিক তবে আমি উল্লেখ করিনি যে আমি উদাহরণস্বরূপ ব্যাকরণের জন্য কোনও শুরুর প্রতীক দিই নি এবং টার্মিনাল এবং নন-টার্মিনালগুলির মধ্যে পার্থক্য করার প্রয়োজনে হাত-ওয়েভ করা। টেকনিক্যালি বা ঐতিহ্যগতভাবে আমি মনে করি ব্যাকরণ সম্ভবত এর মত একটি আরো জটিল আকারে লেখা যেতে হবে (যেখানে এস শুরু প্রতীক এবং $ শেষ অফ প্রবাহ টার্মিনাল প্রতিনিধিত্ব করে):
G ::= S -> R0 '$'
S -> R1 '$'
S -> R2 '$'
R0 -> '0'
R0 -> R0 '+' '0'
R1 -> '1'
R1 -> R0 '+' '1'
R1 -> '1' '+' R0
R1 -> R0 '+' '1' '+' R0
R2 -> '2'
R2 -> R0 '+' '2'
R2 -> '2' '+' R0
R2 -> R0 '+' '2' '+' R0
R2 -> R1 '+' '1'
R2 -> R1 '+' '1' '+' R0
... না যে এটি সত্যিই কিছু পরিবর্তন করে, তবে আমি ভেবেছিলাম আমার এটি উল্লেখ করা উচিত।
সম্পাদনা: আমি যখন গ্যাসের উত্তর পড়ি তখন মনে মনে অন্য কিছু আসে যে আমার উদাহরণে গাছের প্রতিটি শাখা একটি উপ-গণনা উপস্থাপন করে। আপনি যদি প্রতিটি উত্পাদনের নিয়মকে কোনও ফাংশন হিসাবে দেখেন যেখানে এলএইচএস ফলাফলকে উপস্থাপন করে এবং আরএইচএস তার যুক্তিগুলি উপস্থাপন করে, তবে ব্যাকরণের গঠনটি নির্ধারণ করে যে কীভাবে কার্যগুলি রচনা করা হয়।
অন্য কথায় পার্সারের প্রসঙ্গটি তার লুকোচুরি প্রক্রিয়াটির সাথে একত্রিত করে কোন ফাংশনগুলি প্রয়োগ করতে হবে তা কেবল তা নির্ধারণ করতে সহায়তা করে (প্যারামেট্রিক পলিমারফিজমের মতো 'কিন্ডা') নয় তবে কীভাবে তাদের একসাথে নতুন ফাংশন গঠন করা উচিত।
কমপক্ষে, আমি অনুমান করি যে আপনি এটিকে এটিকে দ্ব্যর্থহীন সিএফজির জন্য দেখতে পারেন, অন্যান্য ব্যাকরণের ক্ষেত্রে এখনই আমার জন্য মানসিক জিমন্যাস্টিক্স কিছুটা বেশি।