এলআর পার্সিংয়ের সাথে পেরমুটেশন বাক্যাংশ


16

একটি বিন্যাস ফ্রেজ: একটি বিন্যাস ফ্রেজ মানক (ই) বিএনএফ প্রসঙ্গে বিনামূল্যে ব্যাকরণ সংজ্ঞা একটি এক্সটেনশান রয়েছে প্রযোজনার (অথবা equivalently, nonterminals) মাধ্যমে । ক্রমবিন্যাস বাক্যাংশের অবস্থানে, আমরা এই প্রযোজনার প্রতিটি একবারে দেখতে চাই, তবে আমরা এই নন-টার্মিনালগুলির ক্রমগুলিতে আগ্রহী নই।{A1,,An}nA1An

উদাহরণ স্বরূপ:

S <- X { A, B, C } Y

সমান:

S <- X  A B C  Y
S <- X  A C B  Y
S <- X  B A C  Y
S <- X  B C A  Y
S <- X  C A B  Y
S <- X  C B A  Y

ধারণাটি "পরিচ্ছেদের বাক্যাংশ সহ প্রসঙ্গ-মুক্ত ব্যাকরণগুলি প্রসারিত করা" তে প্রবর্তিত হয়েছে বলে মনে হয় । এর মধ্যে এটি কীভাবে এলএল (1) পার্সার ব্যবহার করে এই বাক্যাংশগুলিকে রৈখিক সময়ে পার্স করতে হবে তাও বর্ণিত হয়েছে।

পার্সিং কম্বিনেটরগুলি ব্যবহার করে পারমিটেশন বাক্যাংশগুলি পার্স করার জন্য একটি পদ্ধতি "পার্সিং পারমিটেশন বাক্যাংশগুলি" কাগজটি বর্ণনা করে। এই কেবলমাত্র দুটি পেপারই আমি খুঁজে পেয়েছি যে ক্রমশক্তি বাক্যাংশ এবং সেগুলি কীভাবে পার্স করা যায় সে সম্পর্কে আলোচনা।

আমরা সহজেই এলএল (1) ভিত্তিক পার্সারগুলির সাথে এই ধরণের ক্রমবর্ধমান বাক্যাংশগুলি সহজেই পার্স করতে পারি তা দেখে আমার অনুমান হবে যে আমরা এলআর (1) স্টাইল পার্সার দিয়ে একই কাজ করতে পারি। আমার প্রশ্ন তাই:

যথাযথ আকারের টেবিলটি বজায় রেখে এলআর (1) মেশিনারি ব্যবহার করে ইনপুট স্ট্রিং আকারে ক্রমবিন্যাসের বাক্যাংশগুলি সহ একটি ব্যাকরণকে কি টাইম লিনিয়ারে পার্স করা যায়?

অনুমান বাক্যাংশগুলি প্রসঙ্গ-মুক্ত ভাষার শক্তি বাড়ায় না: যেমন আমার উদাহরণে উপরের মতো কেবল সমস্ত সম্ভাব্য ক্রমশক্তি গণনা করা যায়। যাইহোক, ব্যাকরণটি তখন বিস্ফোরিত হয় কারণ ফলাফলের ব্যাকরণটি আকারের হতে পারে । এটি লিনিয়ার সময় পার্সিংয়ের অনুমতি দেয় তবে ব্যাকরণের আকারটি খুব বড় হয়ে যায়।O(|G|!)

উপরোক্ত পদ্ধতির কোনও পার্সিং অ্যালগরিদম (যদিও এটি দরকারী নয়) এর জন্য কাজ করে, তাই সম্ভবত আমরা নির্দিষ্ট অ্যালগোরিদমের জন্য আরও ভাল করতে পারি। এলআর টেবিলের মধ্যে বাক্যাংশগুলি এনকোড করে আমরা 'নিছক' ঘনিষ্ঠভাবে ( ) ঘাটতিটি কমিয়ে আনতে পারি: আমাদের কাছে LR আইটেমগুলি এনকোড থাকতে পারে যা এখনও প্রযোজনা দেখা যায়নি, এবং ফলস্বরূপ হ্রাস করতে পারে ক্রমবিন্যাস বাক্যাংশের সমস্ত উপগ্রহে।হে(2|জি|)

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

আমি বর্তমানে একটি পার্সার জেনারেটর বাস্তবায়ন করছি, এবং সমস্যায় ডোমেনের ক্রমবর্ধমান বাক্যাংশটি স্বর্গের উপহার হবে। যেহেতু আমি এলআর (1) যন্ত্রপাতি ব্যবহার করছি, উপরের প্রশ্নটি অনুসরণ করেছে।


এলআর (১) পার্সিংয়ের জটিলতা ব্যাকরণের আকার ছাড়াই ইতিমধ্যে ব্যাকরণের বাক্যাংশ ছাড়াই উদ্ঘাটিত হয় --- যদি আপনি পার্সারের "ফ্লাইতে" গণনাটি প্রয়োগ করেন তবে এটির চেয়ে আর্লি পার্সারের মতো মনে হয় আসল এলআর (1) এক।
সিলভাইন

2
আপনার বাকি প্রশ্ন সম্পর্কে: cstheory.stackexchange.com/questions/4962/… অনুমোদনের জন্য একটি সিএফজির আকারের উপর তাত্পর্যপূর্ণ নীচে আবদ্ধ দেখায় এবং পিডিএ থেকে সিএফজির সাধারণ বহুপদী নির্মাণের ফলে এটি নিম্নতম আবদ্ধকে আবদ্ধ করে পিডিএ আকার হিসাবে।
সিলভাইন

1
আমি এলএল (1) এর কাগজের দিকে তাকাইনি। প্রকৃতপক্ষে, প্রয়োগ করা পার্সার আর পিডিএ নয়। আমি এখনও "যুক্তিসঙ্গত আকারের টেবিলের" ​​অস্তিত্বে বিশ্বাস করি না, যেহেতু পরিবহনের প্রেক্ষাপট মুক্ত ব্যাকরণগুলির সদস্যপদ এনপি-সম্পূর্ণ (উদাহরণস্বরূপ dx.doi.org/10.3233/FI-1997-3112 দেখুন ) তবে এটি সত্য যাতে হার্ড দৃষ্টান্তগুলি LR ​​না হয় (1)।
সিলভাইন

2
@ সিলভাইন: আপনি কীভাবে 4962 প্রশ্নটির সাথে এটি সম্পর্কিত ব্যাখ্যা করতে পারেন? 4962 প্রশ্নের মধ্যে, প্রতিটি ইনপুট দৈর্ঘ্যের জন্য ক্রমিটেশন স্থির করা হয়, এবং স্ট্রিমগুলি পরিবর্তন করতে হবে। বর্তমান প্রশ্নে, আমরা ক্রমবিন্যাসটি ঠিক করি না। সুতরাং আমি তাদের মধ্যে কোনও বাস্তব সংযোগ দেখতে ব্যর্থ।
Tsuyoshi Ito

2
@ শুয়ুইটো ইটো: এলআর (1) এ ইনপুট ব্যাকরণের সমতুল্য একটি ডিপিডিএ তৈরি করে প্রথমে স্বীকৃতি দেওয়ার জন্য স্ট্রিংয়ের বিপরীতে চালানো হয়। যেহেতু প্রতিটি অনুচ্ছেদের ভাষার অনুমিত বাক্যাংশের সাথে একটি রৈখিক আকারের সিএফজি রয়েছে, যুবল ফিল্মাসের কাগজ (যা সিস্টেরির উপর তার উত্তরের চেয়ে আরও ব্যাপক: দেখুন cs.toronto.edu/~yuvalf/CFG-LB.pdf ) দেখায় যে নেই এই জাতীয় ডিপিডিএ ইনপুট ব্যাকরণের আকারে বহুতল আকার হতে পারে।
সিলভাইন

উত্তর:


1

আপনি কি এটিকে সিনেমিক সমস্যায় রূপান্তরিত করে বিবেচনা করেছেন? নন-টার্মিনালস {এ, বি, সি all এর সমস্ত বিভাজনের ব্যাকরণের নিয়মের পরিবর্তে, কেবলমাত্র একটি বিশেষ নিয়ম রয়েছে (এ | বি | সি) ^ 3 একসাথে বিশেষ অভ্যন্তরীণ কোডের সাথে যা নিশ্চিত করে তোলে যে প্রতিটির মধ্যে একটিরই স্বীকৃতি রয়েছে, অন্যথায় এটি ঘোষনা করে একটি ভুল. আমি উপরের ধারাটির আগে একটি খালি উত্পাদন সন্নিবেশ করবো, যার হ্রাস আপনি এ, বি এবং সি এর গণনা করতে যা ব্যবহার করছেন তা আরম্ভ করার পরে আর তার পরে, যার হ্রাস কাউন্টার চেককে ট্রিগার করে এবং (যদি প্রয়োজন হয়) ত্রুটি দৃ as় করে তোলে। (অবশ্যই ব্যাকরণ A, B, এবং / অথবা C এর মাধ্যমে পুনরাবৃত্ত হলে এটি কিছুটা জটিল হয়ে উঠতে পারে)


0

আমি মনে করি না যে একজনের কাউন্টার দরকার। মূলত আপনি কেবলমাত্র সমস্ত অনুমতি পরীক্ষা করে দেখুন তবে বিরতি

সুডোকোড:

perm-match(input, pattern)
     if pattern = nil return true

     foreach(rule in pattern)
         if (match(input, rule))
             perm-match(input - matchedpart, pattern - rule)
             break
         end
     end
     return false
end

এখানে আরও দৃ concrete় উদাহরণ

ধরুন আমরা abcd এর যেকোন অনুক্রমের সাথে মেলে চেষ্টা করছি এবং আমাদের স্ট্রিংটি বিসিডিএ

  • পদক্ষেপ 1: প্রথম মিলিত প্রতীকটি সন্ধান করুন। এই ক্ষেত্রে এটি খ
  • পদক্ষেপ 2: আমাদের নিদর্শন থেকে সেই প্রতীকটি সরান এবং স্ট্রিং হ্রাস করুন: যেমন, এসিডি এবং সিডিএ বাকি রয়েছে
  • পদক্ষেপ 3: নতুন স্ট্রিংগুলিতে 1 ধাপটি পুনরাবৃত্তি করুন
    • সিডিএতে সি মেলে যা আমাদের বিজ্ঞাপন এবং দা দিয়ে ফেলে
    • দাতে একটি ম্যাচ যা আমাদের সাথে ডি এবং ডি যোগ করে
    • ডি মিলে যা আমাদের উভয় স্ট্রিংয়ে শূন্য করে

সুতরাং আপনি দেখতে পাচ্ছেন যে এই সাধারণ অ্যালগরিদম কেবলমাত্র "স্ট্রিংস" কে অর্ডার আউট করে তুলনা করে খুব সহজেই ক্রমচরণের জন্য পরীক্ষা করতে পারে। নোট করুন যে ফাংশনটির জটিলতা হ'ল ও (এন!) আরও খারাপ কেস এবং ও (1) সেরা কেস। একটি অর্থে আমরা একটি অ্যারেতে মিলতে প্রতীকগুলি সঞ্চয় করে গণনা রাখছি। আমি মনে করি এটি সাধারণভাবে "দ্রুত" হবে যেহেতু বেশিরভাগ ক্ষেত্রেই কেউ খুব বড় এন নিয়ে কাজ করে না।


2
এনএন=50
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.