শিরোনাম অনুসারে, আমি গত সপ্তাহান্তে পার্ল-সামঞ্জস্যপূর্ণ নিয়মিত এক্সপ্রেশনগুলির সাথে মিলে যাওয়া ভাষাগুলির ক্লাস সম্পর্কে আমার মন গুটিয়ে দেওয়ার চেষ্টা করেছি , প্যাটার্নের ভিতরে স্বেচ্ছাসেবক কোড চালানোর অনুমতি দেয় এমন কোনও ম্যাচিং অপারেটর বাদ দিয়ে ।
আপনি যদি পিসিআরই কি তা জানেন না, দয়া করে এটি এবং এটি পড়ুন ।
সমস্যাটি হ'ল, ইন্টারনেটে উপলব্ধ সংস্থানগুলি প্রসঙ্গ-মুক্ত ভাষাগুলিতে খুব বেশি থামে এবং পিসিআরইগুলি সেগুলির চেয়ে বেশি মিলতে পারে (নীচে দেখুন); তবে আমি জানি না এই ধরণের স্টাফ সম্পর্কে আরও উপপাদ্য বা কাগজপত্র কোথায় পাওয়া যায়।
বিশেষত: পিসিআরই স্পষ্টতই নিয়মিত ভাষার সুপারসেট (যেমন পিসিআরই সিন্টেক্সে নিয়মিত সমস্ত ভাষা অপারেটর রয়েছে)।
যে কোনও সিএফজিকে গ্রিবাচ স্বাভাবিক ফর্মের মধ্যে রাখা যেতে পারে, যা বাম পুনরাবৃত্তি সরিয়ে দেয়। আমি মনে করি এটির সাহায্যে (?(DEFINE)...)
গ্রুপগুলির মাধ্যমে ব্যাকরণটিকে মিলে যাওয়া সাবরুটিনগুলিতে "অনুবাদ" করতে, বাম পুনরাবৃত্তিতে চেপানো এড়ানো এড়িয়ে, অনুবাদ করে ব্যবহার করা যেতে পারে :
- প্রতিটি উত্পাদনের মাথায় অ-টার্মিনাল একটি সাবরুটিন হয়ে যায়
(?<HEAD>...)
- প্রতিটি উত্পাদন শরীর subroutine করা হয়; টার্মিনালগুলি যেমন রয়েছে তেমনই রয়েছে, নন-টার্মিনালগুলি প্রক্রিয়া আমন্ত্রণে পরিণত হয় (যেমন
(?&NONTERMINAL)
); - মাথার মতো একই অযৌক্তিক সমস্ত প্রযোজনাগুলি
|
অপারেটরের মাধ্যমে একত্রে অর্ড করা হয় ((?:...)
প্রয়োজনে অতিরিক্ত গ্রুপিং , প্রয়োজনে) - প্যাটার্নটি তখন একটি
(?(DEFINE)...)
গোষ্ঠীতে পরিণত হয় যা সমস্ত "অনুবাদিত" প্রোডাকশনগুলিকে ধারণ করে এবং পুরো স্ট্রিংয়ের সাথে ম্যাচ করার জন্য প্রারম্ভিক প্রতীকটির পদ্ধতির জন্য একটি অনুরোধ ie^(?(DEFINE)...)(?&START)$
এটি যে কোনও সিএফজির সাথে ডিল করা উচিত। অতএব, পিসিআরইগুলি যে কোনও সিএফএল মেলাতে সক্ষম হওয়া উচিত।
আরও রয়েছে: আসুন সহজ ভাষাটি অর্থাত্ স্ট্রিংয়ের ভাষা দুবার পুনরাবৃত্তি হয়েছিল। এই ভাষাটি কোনও সিএফএল নয় - সিএফএলগুলির পাম্পিং লেমা ব্যর্থ হয়। (বিশেষ মনোযোগ দিন যে অবশ্যই ধরে রাখতে হবে, সুতরাং আপনি কেবল দুটি পুনরাবৃত্ত স্ট্রিংয়ের সূচনা বা শেষ পাম্প করতে পারবেন না))| v x w | ≤ পি
যাইহোক, এই ভাষা সহজেই একটি PCRE দ্বারা মেলানো হয়: ^(.*)\1$
। অতএব, আমরা সিএফএল থেকে কঠোরভাবে উপরে।
কত উপরে? ঠিক আছে, আমি যেমন বলেছি, আমার কোনও ধারণা নেই। আমার মন তৈরি করার জন্য আমি সিএসএল বা অন্য সমস্ত শ্রেণীর মধ্যে কোনও সংস্থান খুঁজে পাইনি। কোন বিশেষজ্ঞ এই আলোচনা করতে ইচ্ছুক?
সংযোজন: পিসিআরআই সিনট্যাক্সের কোন উপসেটটি অবশ্যই মঞ্জুর করতে হবে তা নির্দিষ্ট করতে আমাকে বলা হয়েছিল। আমি পোস্টের শুরুতে যেমন লিখেছি, আমি এমন কোনও অপারেটরকে বাদ দিতে চেয়েছি যা প্যাটার্নের অভ্যন্তরে স্বেচ্ছাসেবক কোড কার্যকর করতে দেয় ??{}
।
যুক্তির স্বার্থে, আমি মনে করি আমরা pcresyntax (3) ম্যান পৃষ্ঠা দ্বারা সংজ্ঞায়িত বাক্য গঠনটি আটকে রাখতে পারি , যা পার্ল ৫.১০-১১.১২ প্রস্তাব দেয়, কলআউটগুলি বিয়োগ করবে (তারা প্যাটার্নের অভ্যন্তরে নয়)। আমি নিশ্চিত নই যে ব্যাকট্র্যাকিং নিয়ন্ত্রণ ক্রিয়াগুলি যোগ করা বা অপসারণের ফলে আমরা যে ভাষাটি চিনতে পারি তা পরিবর্তন করে; যদি তা হয় তবে, আমরা কোন ক্লাসগুলি এবং সেগুলি ছাড়া পাব তা নির্ধারণ করা ভাল লাগবে।