নিয়মিত এক্সপ্রেশন এর ভাষাটির বিশ্লেষণের জন্য অটোম্যাটাকে পুশ ডাউন করার দরকার আছে কি?


12

আমি কোনও ব্যবহারকারীর নিয়মিত প্রকাশিত প্রবেশকে একটি এনএফএতে রূপান্তর করতে চাই যাতে আমি মিলে যাওয়ার উদ্দেশ্যে স্ট্রিংয়ের বিপরীতে এনএফএ চালাতে পারি। নূন্যতম মেশিনটি কী যা নিয়মিত এক্সপ্রেশনকে বিশ্লেষণ করতে ব্যবহার করা যেতে পারে?

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


1
"পার্সিং" করার অর্থ কী? আপনি কি ইনপুটটি সত্যই কোনও নিয়মিত বহিঃপ্রকাশ কিনা তা যাচাই করার অর্থ কি আপনার মনে আরও জটিল বিষয় রয়েছে, উদাহরণস্বরূপ কোনও মেশিন সংশ্লিষ্ট এনএফএর বর্ণনা বর্ণনা করে? (যদি আপনি নিশ্চিত না হন যে ইনপুটটি সত্যই একটি নিয়মিত অভিব্যক্তি কিনা এবং আপনাকে এটি পরীক্ষা করে নেওয়া দরকার তবে আপনার প্রথম বার্থটি সঠিক কিনা তা পরীক্ষা করা দরকার এবং এর সাধারণ অর্থ স্ট্যাক ব্যবহার করা দরকার means)
কাভেঃ

বাস্তবসম্মত উত্তরের জন্য আপনি তাকান পারে grep.y পরিকল্পনা 9 Grep উৎস
ব্রুস এডিগার 21'12

উত্তর:


8

আপনি সঠিক. এটি দেখানো সহজ যে নিয়মিত এক্সপ্রেশনগুলির বাক্য গঠনটি স্ট্যান্ডার্ড কৌশলগুলি ব্যবহার করে নিয়মিত হয় না ।

আরজি(পি)পি

এটি বলেছিল, আপনি সম্ভবত হাতে হাতে কোনও পিডিএ কোড করতে চান না। মত একটি পার্সার জেনারেটর ব্যবহার করার কথা বিবেচনা ANTLR বা byacc । অন্যদিকে, আপনি নিজেরাই পার্সারিং প্রোগ্রামিংয়ের মাধ্যমে ভাষার পার্সিংয়ের তদন্ত করতে চান, আপনার অন্যান্য প্রাথমিক পার্সিং অ্যালগরিদম যেমন সিওয়াইকে , আর্লি , রিকার্সি ডেসেন্ট এবং এলআর দিয়ে চালিয়ে যাওয়া উচিত ।


ধন্যবাদ। এই কাজের জন্য লিখনের কোডটি আরও ভাল বোঝার সৃষ্টি করে এবং লেক্স, ইয়্যাক, বাইসন ইত্যাদির মতো বিদ্যমান ইউটিলিটির মতো দক্ষ হওয়ার উদ্দেশ্যে নয়
ফিল রাইট

@ ফিলিলাইট: আমি দেখছি, দুর্দান্ত! আমি এই মামলার জন্য আরও পয়েন্টারে সম্পাদনা করেছি।
রাফেল

আমি এইটির জন্য একটি হ্যান্ড-কোডড রিকার্সি ডেসেন্ট পার্সারের পক্ষে চাই।
ডেভ ক্লার্ক

যদি এটির জন্য হাত দিয়ে পার্সার লিখতে হয়, হয় পুনরাবৃত্ত বংশোদ্ভূত (ফ্যাক্টরিং এবং ম্যাসেজ করার পরে) একটি বিকল্প, সি <<<.google.com/site/lccretargetablecompiler > এর জন্য এলসিসি পার্সার প্রচুর অপারেটর পরিচালনা করার জন্য একটি আকর্ষণীয় গ্রহণ রয়েছে। তবে সম্ভবত হাতে তৈরির পক্ষে সবচেয়ে সহজ হল অগ্রাধিকার পার্সিং।
ভনব্র্যান্ড

3

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

উদাহরণস্বরূপ, "সংকুচিত" নিয়মিত এক্সপ্রেশন পাওয়ার জন্য আমরা নিম্নরূপে মানক স্বরলিপিটি সংশোধন করতে পারি :

  • (গুলি) এর ক্রম সমন্বিত যে কোনও উপসর্গ সরাতে আপনাকে অনুমতি দেওয়া হয়েছে
  • আপনি এর) এর ক্রম সমন্বিত যে কোনও প্রত্যয় মুছে ফেলার অনুমতি পাবেন

অর্থাৎ ((a|b)*c)de(f|g), ব্যবহার "সংকুচিত" স্বরলিপি প্রকাশ করা যেতে পারে উদাহরণস্বরূপ নীচের ফর্মগুলি মধ্যে একটি: a|b)*c)de(f|gবা ((a|b)*c)de(f|gবা (a|b)*c)de(f|g)

[...]

"সংকুচিত" স্বরলিপি (একটি নিয়মিত প্রকাশের) একটি নিয়মিত ভাষা।

এটি নিয়মিত প্রকাশের ভাষাতে একটি আকর্ষণীয় (আমার মতে) "ভিন্ন দৃষ্টিভঙ্গির" কেবল একটি লিঙ্ক; নীচের মন্তব্যে বর্ণিত হিসাবে, এটি সিনট্যাক্স ট্রি তৈরির জন্য কার্যকর নয়। আপনি যদি নিজের পার্সার কোডটি হ্যান্ড করতে চান তবে আমি আপনাকে কোডড্রজেক্ট " রাইটিং-নিজস্ব-নিয়মিত-এক্সপ্রেশন-পার্সার " -তে এই সহজ নিবন্ধটি প্রস্তাব করব ।


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

4
আপনি (এবং জুক্কা) কেবল রেগেক্সপ্সকে পার্স করছেন না, কেবল সেগুলি সনাক্ত করে। "হ্যাঁ, এটি একটি (সংকুচিত) রিজেক্সপ।"
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.