পার্ল-সামঞ্জস্যপূর্ণ নিয়মিত প্রকাশগুলি কোন ভাষাগুলি স্বীকৃতি দেয়?


23

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

আপনি যদি পিসিআরই কি তা জানেন না, দয়া করে এটি এবং এটি পড়ুন

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

বিশেষত: পিসিআরই স্পষ্টতই নিয়মিত ভাষার সুপারসেট (যেমন পিসিআরই সিন্টেক্সে নিয়মিত সমস্ত ভাষা অপারেটর রয়েছে)।

যে কোনও সিএফজিকে গ্রিবাচ স্বাভাবিক ফর্মের মধ্যে রাখা যেতে পারে, যা বাম পুনরাবৃত্তি সরিয়ে দেয়। আমি মনে করি এটির সাহায্যে (?(DEFINE)...)গ্রুপগুলির মাধ্যমে ব্যাকরণটিকে মিলে যাওয়া সাবরুটিনগুলিতে "অনুবাদ" করতে, বাম পুনরাবৃত্তিতে চেপানো এড়ানো এড়িয়ে, অনুবাদ করে ব্যবহার করা যেতে পারে :

  • প্রতিটি উত্পাদনের মাথায় অ-টার্মিনাল একটি সাবরুটিন হয়ে যায় (?<HEAD>...)
  • প্রতিটি উত্পাদন শরীর subroutine করা হয়; টার্মিনালগুলি যেমন রয়েছে তেমনই রয়েছে, নন-টার্মিনালগুলি প্রক্রিয়া আমন্ত্রণে পরিণত হয় (যেমন (?&NONTERMINAL));
  • মাথার মতো একই অযৌক্তিক সমস্ত প্রযোজনাগুলি |অপারেটরের মাধ্যমে একত্রে অর্ড করা হয় ( (?:...)প্রয়োজনে অতিরিক্ত গ্রুপিং , প্রয়োজনে)
  • প্যাটার্নটি তখন একটি (?(DEFINE)...)গোষ্ঠীতে পরিণত হয় যা সমস্ত "অনুবাদিত" প্রোডাকশনগুলিকে ধারণ করে এবং পুরো স্ট্রিংয়ের সাথে ম্যাচ করার জন্য প্রারম্ভিক প্রতীকটির পদ্ধতির জন্য একটি অনুরোধ ie^(?(DEFINE)...)(?&START)$

এটি যে কোনও সিএফজির সাথে ডিল করা উচিত। অতএব, পিসিআরইগুলি যে কোনও সিএফএল মেলাতে সক্ষম হওয়া উচিত।

আরও রয়েছে: আসুন সহজ ভাষাটি অর্থাত্ স্ট্রিংয়ের ভাষা দুবার পুনরাবৃত্তি হয়েছিল। এই ভাষাটি কোনও সিএফএল নয় - সিএফএলগুলির পাম্পিং লেমা ব্যর্থ হয়। (বিশেষ মনোযোগ দিন যে অবশ্যই ধরে রাখতে হবে, সুতরাং আপনি কেবল দুটি পুনরাবৃত্ত স্ট্রিংয়ের সূচনা বা শেষ পাম্প করতে পারবেন না))| v x w | পি

L={ww|wΛ}
|vxw|p

যাইহোক, এই ভাষা সহজেই একটি PCRE দ্বারা মেলানো হয়: ^(.*)\1$। অতএব, আমরা সিএফএল থেকে কঠোরভাবে উপরে।

কত উপরে? ঠিক আছে, আমি যেমন বলেছি, আমার কোনও ধারণা নেই। আমার মন তৈরি করার জন্য আমি সিএসএল বা অন্য সমস্ত শ্রেণীর মধ্যে কোনও সংস্থান খুঁজে পাইনি। কোন বিশেষজ্ঞ এই আলোচনা করতে ইচ্ছুক?

সংযোজন: পিসিআরআই সিনট্যাক্সের কোন উপসেটটি অবশ্যই মঞ্জুর করতে হবে তা নির্দিষ্ট করতে আমাকে বলা হয়েছিল। আমি পোস্টের শুরুতে যেমন লিখেছি, আমি এমন কোনও অপারেটরকে বাদ দিতে চেয়েছি যা প্যাটার্নের অভ্যন্তরে স্বেচ্ছাসেবক কোড কার্যকর করতে দেয় ??{}

যুক্তির স্বার্থে, আমি মনে করি আমরা pcresyntax (3) ম্যান পৃষ্ঠা দ্বারা সংজ্ঞায়িত বাক্য গঠনটি আটকে রাখতে পারি , যা পার্ল ৫.১০-১১.১২ প্রস্তাব দেয়, কলআউটগুলি বিয়োগ করবে (তারা প্যাটার্নের অভ্যন্তরে নয়)। আমি নিশ্চিত নই যে ব্যাকট্র্যাকিং নিয়ন্ত্রণ ক্রিয়াগুলি যোগ করা বা অপসারণের ফলে আমরা যে ভাষাটি চিনতে পারি তা পরিবর্তন করে; যদি তা হয় তবে, আমরা কোন ক্লাসগুলি এবং সেগুলি ছাড়া পাব তা নির্ধারণ করা ভাল লাগবে।


2
সংস্করণগুলির মধ্যে পরিবর্তিত হওয়ায় দয়া করে আপনার প্রশ্নের মধ্যে পিসিআরই-র আপনার নির্বাচিত সংজ্ঞাটি অন্তর্ভুক্ত করুন। আসল পার্ল রেজেক্সসগুলিতে নির্বিচারে পার্ল কোড থাকতে পারে, এগুলি টুরিং-সম্পূর্ণ করে তোলে।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

আমি শেষে একটি নোট যুক্ত করেছি, আমি আশা করি এটি এই বিষয়টিকে আরও সুস্পষ্ট করে তুলেছে।
মুরগি

উত্তর:


7

আমি এই ব্লগ পোস্টটি অত্যন্ত আকর্ষণীয় http://nikic.github.io/2012/06/15/The-true-power-of-regular-expressions.html খুঁজে পেয়েছি । এটি সত্য প্রমাণের আগে আমি যে একইভাবে প্রমাণ দিয়েছিলাম তা প্রমাণিত করে যে রেগেক্সপস সিএফএলকে স্বীকৃতি দেয় ( DEFINEব্লকের মাধ্যমে ব্যাকরণটি পুনরায় লিখে) এবং এমনকি কিছু সিএসএল (পুনরাবৃত্ত স্ট্রিংয়ের ভাষার মতো); এটি সেটির উপরে তৈরি করে এবং এগিয়ে যায়, একটি প্রমাণ দেয় যে ব্যাক-রেফারেন্স সহ রিজেক্সপ্সগুলি এনপি-হার্ড (3-স্যাটকে একটি রেজিপ্সে হ্রাস করে)।


2
লেখক যখন "এনপি-সম্পূর্ণ" বলেন তখন তাদের উচিত "এনপি-হার্ড" বলা উচিত। তারা কোনও প্রমাণ দেয় না যে পিসিআরই ভাষার ক্লাসটি এনপিতে রয়েছে।
আন্দ্রেস সালামন

সত্য, এটি মন্তব্যগুলিতেও উল্লেখ করা হয়েছে।
পেপে

5

তারা বেশিরভাগ প্রসঙ্গে-সংবেদনশীল ভাষাগুলি স্থির করে (যা আপনি দেখিয়েছেন, প্রসঙ্গ-মুক্ত ভাষাগুলির একটি সুপারস্টার)। দেখুন এই Perl সন্ন্যাসী পোস্টে

প্রাথমিক অন্তর্দৃষ্টিটি হ'ল মেশিনের "মেমরি" হ'ল ক্যাপচার গ্রুপগুলির সংখ্যা, যা লাইনারিভাবে আবদ্ধ।


5
যুক্তি আপনি দ্বিতীয় অনুচ্ছেদে দিতে ব্যাখ্যা দিয়েছে কেন PCRE গ্রহণ করতে পারে না আরো সি এস চেয়ে, কিন্তু কেন এই অন্তর্ভুক্তি সঠিক হয় (যা আপনি আপনার প্রথম অনুচ্ছেদে সুপারিশ)। লিঙ্কিত নিবন্ধটি তার কোনও প্রমাণ দিয়েছে বলে মনে হয় না either
রাফেল

ঠিক আছে, আপনি ইনপুট স্ট্রিংয়ের চেয়ে বেশি গোষ্ঠী করতে পারবেন না এবং একটি নির্দিষ্ট প্যাটার্নে গ্রুপের সংখ্যা নির্দিষ্ট করা আছে, তাই কোনও প্যাটার্ন ব্যবহার করে এমন মেমোরির আপনার একটি উচ্চ (রৈখিক) সীমা রয়েছে। তবুও, আমি একটি পিসিআরই -> লিনিয়ার বাউন্ডেড অটোমেটনের রূপান্তর ... এর আনুষ্ঠানিক প্রমাণটি মিস করছি ...
পেপ্পে

হ্যাঁ, আপনি দুজনই ঠিক বলেছেন। আমি উত্তরটি পরিবর্তন করেছি।
Xodarap

পূর্বের আলোচনার জন্য আরও দেখুন perlmonks.org/?node_id=406253
আন্দ্রেস সালামন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.