একটি স্ট্রিং এবং একটি সিএফজি দেওয়া, কোন অক্ষরগুলি স্ট্রিংটি অনুসরণ করতে পারে (সিএফজির সেনটেন্টিয়াল ফর্মগুলিতে)?


10

আসুন টার্মিনালের সেট এবং কোনও প্রসঙ্গমুক্ত ব্যাকরণ এর নন-টার্মিনাল প্রতীকগুলির সেট ।ΣNG

বলুন আমার কাছে স্ট্রিং যেমন যেখানে এবং হ'ল সেনসেন্টাল ফর্ম ।a(ΣN)+xayS(G)x,y(ΣN)S(G)G

প্রদত্ত , আমি একটি সেট নির্ধারণ করতে চাই ।GC={bwabzS(G),bΣN}

পরিষ্কার করার জন্য, এক্ষেত্রে টার্মিনাল এবং নন-টার্মিনালগুলির স্ট্রিং এবং দৈর্ঘ্যের এক।w,x,y,z,a,bb

আমি এই কিভাবে করতে হবে যদি দেখতে পারেন দৈর্ঘ্য এক হয়; প্রতিটি ফলো সেট একজন সদস্য (অ-টার্মিনাল সহ)।aba

যাইহোক, আমি যদি কৌতূহল অনুক্রমের জন্য এটি সম্ভব হয় তা আগ্রহী। আমার আবেদন জন্য, স্ট্রিং অনেক লম্বা মধ্যে প্রযোজনার ডান দিকে চেয়ে নয় ।aG

টার্মিনাল এবং নন-টার্মিনালগুলির মধ্যে পার্থক্যটি আমার অ্যাপ্লিকেশনটিতে কিছুটা নিঃশব্দ কারণ আমি একটি উত্পাদনশীল ব্যাকরণ ব্যবহার করছি; এবং আমি বিশ্বাস করি যে এর দৈর্ঘ্য এক হওয়ায় এটি বেশি সমস্যায় পড়বে না ।b


1
আপনার আবেদন কি? আপনি কি পার্সার তৈরি করছেন?
রাফেল

ব্যাকরণটি যে কোনও সাধারণ আকারে অনুমান করতে পারি বা এটি স্বেচ্ছাসেবীদের জন্য কাজ করতে হবে?
রাফেল

@ অ্যালেক্সটেনব্রিংক - এবং নির্বিচারে স্ট্রিং। আমি কেবল একটি খণ্ড / স্ট্রিংয়ের দিকে তাকিয়ে আছি। yxy
টমাস

@ রাফেল - আমি এল-সিস্টেম ব্যাকরণগুলির রূপান্তর স্বয়ংক্রিয় করার চেষ্টা করছি ... সুতরাং এটি সাধারণ আকারে নয়। প্রকৃতপক্ষে আমি এই প্রশ্নটি আরও সুনির্দিষ্ট করে তুলতে আবার সম্পাদনা করব।
টমাস

আমি আশা করি যে আমি প্রশ্নটি খুব বেশি পরিবর্তন করি নি - এটির এখন অন্যরকম প্রকৃতি রয়েছে।
টমাস

উত্তর:


6

আমি একটি অ্যালগরিদম বর্ণনা করব যা কাজ করে। সময়টি খুব খারাপ হওয়া উচিত নয়। আপনি এটির বেশ কিছুটা প্রাক্পম্প্ট করতে পারেন।

আমি অনুমান পাবেন যে nonterminals রয়েছে নেই (সম্ভবত এটি সহজ যে ক্ষেত্রে মানিয়ে নিতে যদিও) এবং আপনি জানেন না যে , অথবা শিক্ষাদীক্ষা । আমি আপনার ব্যাকরণে এমন কোনও প্রযোজনাও ধারণ করে না যা কখনই কোনও উপার্জনে ব্যবহৃত হয় না ( উদাহরণস্বরূপ )।x y a A AaxyaAA

প্রধান সমস্যাটি সত্যিই বিশ্লেষণ করতে হয় , যেমন আপনাকে জানতে হবে রাজ্যের কি ধরনের শেষ পর্যন্ত চাই, তাই আপনি কি জানেন অনুসরণ করতে পারেন । আপনি জানেন না হিসাবে এটি এত সহজ নয় ।একটি এক্সaax

আমরা আর্লির অ্যালগরিদমের একটি অভিযোজন ব্যবহার করি । আপনি প্রথমে সেই অ্যালগরিদমটি বুঝতে চাইবেন। আমাদের সূচনা এবং সমাপ্তির পদক্ষেপগুলি ভিন্ন, আমাদের অ্যালগরিদম প্রায় একইভাবে কাজ করে।

আরম্ভের জন্য, আমরা প্রতিটি সংঘটন একটি Earley আইটেম আমাদের প্রথম সেট বীজ (প্রথম অক্ষরের আপনার ব্যাকরণ কোন উৎপাদনে)। আমরা এই আইটেমটির ব্যাক পয়েন্টারটি -1 এ সেট করেছিলাম, এটি একটি অবৈধ মান। এটি আমাদের পরিবর্তিত সমাপ্তিতে গুরুত্বপূর্ণ। মূলত, -1 এর অর্থ 'এই উত্পাদনটি কোথায় শুরু হয়েছিল আমার কোনও ধারণা নেই'। aa1a

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

সমাপ্তির পদক্ষেপের জন্য, আমাদের কেবল -১ ব্যাক পয়েন্টারগুলি হ্যান্ডেল করার জন্য একটি পরিবর্তন করতে হবে। আমরা যেমন একটি উত্পাদন সম্পন্ন করেছি যার উত্স আমরা জানি না, আমরা সমস্যায় পড়েছি। যাইহোক, পেনেলো এবং ডিআমিমার দ্বারা LALR লুকোহেড সেটগুলি গণনা করার জন্য ব্যবহৃত পদ্ধতিটিLALR(1) আমাদের সংরক্ষণ করে: আমাদের এখানে যা দরকার তা হ'ল লুকোহেড সেট। এই লুকোহেড সেটগুলির প্রতিটি আইটেমের ব্যাকরণে একটি অনুরূপ অবস্থান রয়েছে, যা পরিবর্তিতভাবে সম্পূর্ণ উত্পাদনের সম্ভাব্য ধারাবাহিকতার সাথে মিলে যায়। এল এল আর ( 1 )LALR(1)

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

আপনি পরলোক উপরে অ্যালগরিদম একটি অক্ষর অবিরত আপনি খুঁজছেন সেট, যেখানে আপনি এই অতিরিক্ত বিবেচনা, ভার্চুয়াল চরিত্র 'কোনো চরিত্র', যা অবিলম্বে আপনি 'ফলো' দেয় হতে - যে কোনো সময় এই চূড়ান্ত জন্য স্ক্যানার ফেজ খুঁজে বের করে কিছু সেট, আপনি আপনার উত্তর সেট এই অক্ষর যোগ করতে পারেন।a

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

স্ক্যানার এবং ভবিষ্যদ্বাণীকারী পদক্ষেপে শনাক্তকারীরা নতুন আইটেমগুলিতে নিয়ে যায়। একই আর্লি সেটটিতে আর্লি আইটেমগুলি যা কেবল তাদের শনাক্তকারীদের সাথে পৃথক হয় তাদের শনাক্তকারীদের একত্রিত করে একত্রিত করা হয়। নোট করুন যে আমরা সনাক্তকারীদের সাথে এই নতুন আইটেমগুলিতে স্ক্যানার এবং ভবিষ্যদ্বাণীকারী পদক্ষেপগুলি সম্পাদন করতে পারি, প্রতিটি সনাক্তকারীর জন্য পৃথকভাবে এই পদক্ষেপটি না করেই।

সম্পূর্ণকারী শনাক্তকারীদের আলাদা আলাদাভাবে বিবেচনা করে এবং কেবলমাত্র একটি আইটেম সম্পূর্ণ করে যদি পূর্ববর্তী আইটেমসেটে সংশ্লিষ্ট আইটেমটির একটি সনাক্তকারী থাকে যা সনাক্তকারীটির উপসর্গ থাকে pre প্রতিটি সম্ভাব্য সমাপ্তির জন্য (সুতরাং প্রতিটি আইটেমের জন্য লুক হেড সেট), আমরা সম্পূর্ণ হওয়া আইটেমগুলির সনাক্তকারীদের জন্য একটি অনন্য চরিত্র যুক্ত করি endLALR(1)

মূলত, আমরা এই সনাক্তকারীদের ব্যবহার করে ব্যাকট্র্যাকিং করি, যাতে আমরা স্ক্যানার এবং ভবিষ্যদ্বাণীকারী পদক্ষেপগুলিতে দ্বিগুণ কাজ না করি।


আপনার প্রতিক্রিয়াটির জন্য আপনাকে অনেক ধন্যবাদ - আমরা কী অবস্থায় পড়েছি তা দেখার জন্য আসলে পার্স করার এই অন্তর্দৃষ্টিটির প্রশংসা করি Ear আমি আর্লির পার্সার স্ক্যানিং স্টেজটি কীভাবে নন-টার্মিনালগুলি পরিচালনা করবে তা অবধি আমি উত্তর হিসাবে চিহ্নিত করতে দ্বিধায় পড়েছি এবং আমার ক্ষেত্রে অ টার্মিনাল রয়েছে (এবং আমি ক্ষমাপ্রার্থী যে সমস্যাটি আমার প্রাথমিক বিবরণ থেকে পরিষ্কার করা হয় নি!)একটিaa
থমাস

@ থমাস এটি খুব বেশি কঠিন নয়: আপনি কেবল পার্সের নির্দিষ্ট অবস্থানের জন্য অবিচ্ছিন্নটিকে একটি টার্মিনাল হিসাবে বিবেচনা করেন: আপনি এখনও এটি পূর্বাভাস দিয়েছেন এবং এটি সাধারণ হিসাবে সম্পূর্ণ করেছেন, তবে স্ক্যান করার সময় আপনি এটিকেও বিবেচনা করেন।
অ্যালেক্স দশ ব্রিংক

হ্যাঁ, প্রকৃতপক্ষে - এখন আমি আপনার সমাধানটি বুঝতে পেরেছি, এটির কোনও পার্থক্য করা উচিত নয়।
থমাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.