সবচেয়ে শক্তিশালী ধরণের পার্সার কী?


28

পার্শ্ব-প্রকল্প হিসাবে, আমি পাইথন ব্যবহার করে একটি ভাষা লিখছি। আমি প্লাই নামে একটি ফ্লেক্স / বাইসন ক্লোন ব্যবহার করে শুরু করেছিলাম, তবে আমি সেই ব্যাকরণের সেই স্টাইলটি দিয়ে কী প্রকাশ করতে পারি তার শক্তিতে প্রান্তে আসছি এবং প্রতিবন্ধকতা মেলে না বলে আমার ভাষা হ্যাক করতে আগ্রহী নই যন্ত্রটি. অতএব, আমি নিজের লেখার প্রতি বিরূপ নই।

সুতরাং পার্সার সবচেয়ে শক্তিশালী টাইপ কি? কাগজপত্রের উদ্ধৃতি (পাশাপাশি আরও প্রারম্ভিক নিবন্ধগুলি) স্বাগত জানানো হবে।

(আমি জানি যে 'শক্তিশালী' সুনির্দিষ্টভাবে সংজ্ঞায়িত করা হয়নি, তবে আসুন আমরা এটির সাথে কিছুটা আলগা হয়ে যাই এবং উত্তরগুলি কোথায় যায় তা দেখুন)


1
ডাউনভোটেড: গবেষণা স্তর নয়।
ওয়ারেন শুডি

3
@ ওয়ারেন: জিজ্ঞাসার আগে আমি প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী পরীক্ষা করেছিলাম - এটি কোনও প্রয়োজন বলে মনে হয় না।
পল বিগগার

1
দুটি সাধারণ জিজ্ঞাসিত প্রশ্ন রয়েছে, একটি সাধারণ সাইটের জন্য এবং একটি সিএসথেরির জন্য। সিএসথেরির একটি নির্দেশ করে যে উইকিপিডিয়া পড়ার দ্বারা উত্তর দেওয়া যেতে পারে এমন প্রশ্নগুলি অফ-বিষয়; "কী ধরণের প্রশ্ন খুব মৌলিক?" মধ্যে meta.cstheory.stackexchange.com/questions/225/...
ওয়ারেন স্কুডি

1
@ ওয়ারেন: এটি আমি প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী। আমি উইকিপিডিয়া পড়েছি, তবে আমি এটির সত্যিকারের অন্তর্দৃষ্টি অনুভব করেছি।
পল বিগগার

1
আপনার কাছে উত্পাদনের পার্সার বা তাত্ত্বিক বিষয়গুলি বোঝানো হয়েছে, অর্থাত্ সিএফজি ব্যতীত ব্যাকরণের ধরণগুলি কী?
রাফেল

উত্তর:


33

ব্যাকরণকে সাধারণত কনটেক্সট ফ্রি ব্যাকরণ হিসাবে সংজ্ঞায়িত করা হয় - উইকিপিডিয়া পৃষ্ঠায় একটি সুনির্দিষ্ট সংজ্ঞা দেওয়া হয়, তবে এটি PLY তে যেমন কাজ করে, যা বাইসনের উপর ভিত্তি করে , যা ইয়্যাকের ভিত্তিতে পরিবর্তিত হয় ।

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

আপনার প্রশ্নের উত্তর দেওয়ার জন্য: ভাষা অস্পষ্ট থাকলেও (যেমন, ইনপুটটি ব্যাখ্যা করার একাধিক উপায় রয়েছে) এমনকি কোনও প্রসঙ্গ-মুক্ত ভাষায় পার্সিং করতে সক্ষম অ্যালগরিদমগুলিতে পার্সিং রয়েছে:

এই জাতীয় প্রথম অ্যালগরিদম ছিল সিওয়াইকে অ্যালগরিদম , যা দুর্ভাগ্যক্রমে এর চলমান সময় রয়েছে , যেখানে এন ইনপুট স্ট্রিংয়ের দৈর্ঘ্য এবং | জি | ব্যাকরণের আকার এবং তাই ভাষা পার্সিংয়ের জন্য এটি ব্যবহারিকর নয়।হে(এন3|জি|)এন|জি|

দ্বিতীয় অ্যালগরিদম হ'ল আর্লি অ্যালগরিদম । এই অ্যালগরিদম কোনও প্রসঙ্গবিহীন ব্যাকরণকে বিশ্লেষণ করতেও সক্ষম। যদিও একটি দ্ব্যর্থক ভাষা পার্স করার জন্য অ্যালগরিদমের সময় প্রয়োজন, এটি কেবল দ্ব্যর্থহীন ভাষার পার্স করার জন্য ( এন 2 ) সময় প্রয়োজন। তদতিরিক্ত, এটি বেশিরভাগ এলআর ব্যাকরণগুলির জন্য স্পষ্টতই রৈখিক সময়ে কাজ করে এবং বামে পুনরাবৃত্তি ব্যাকরণগুলিতে বিশেষত ভাল কাজ করে।হে(এন3)হে(এন2)

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

সর্বশেষ প্রকারের পার্সার হলেন জিএলআর পার্সার । এটি এলআর পার্সিংয়ের একটি সাধারণ সংস্করণ, কোনও প্রসঙ্গ-মুক্ত ভাষায় বিশ্লেষণ করতে সক্ষম।

জিএলআরের একটি পরিপক্ক বাস্তবায়ন হ'ল এএসএফ + এসডিএফ । বাইসন একটি জিএলআর পার্সারও তৈরি করতে পারে, যদিও এর বাস্তবায়নগুলি 'স্ট্যান্ডার্ড' জিএলআর অ্যালগরিদম থেকে কিছুটা আলাদা। Elkhound অ্যালগরিদম একটি GLR / LALR সংকর আলগোরিদিম হয়। এটি যখন প্রয়োজন হয় তখন এলএলআর এবং যখন প্রয়োজন হয় তখন জিএলআর ব্যবহার করে, যাতে কোনও ব্যাকরণকে পার্সিং করার জন্য দ্রুত এবং সক্ষম উভয়ই হয়ে থাকে।

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

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

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


1
দুর্দান্ত উত্তর !! পিইজিগুলি কীভাবে খাপ খায় সে সম্পর্কে কোনও চিন্তাভাবনা?
পল বিগগার 0

2
পিইজিগুলি সিএফজির তুলনায় 'পৃথক': এমন সিএফজি রয়েছে যা পিইজি এবং বিপরীত নয়। আমি আপনাকে এখানে উল্লেখ করুন: stackoverflow.com/questions/1857022/…
অ্যালেক্স টেন ব্রিংক


1
প্রকৃতপক্ষে, সর্বাধিক সাধারণ পার্সার জেনারেটর (ইয়্যাক, অ্যান্টলার, বাইসন) ভবিষ্যদ্বাণীগুলি বা স্বেচ্ছাসেবী কোড দ্বারা নন-সিএফ ধারণাগুলি মঞ্জুরি দেয় যা একটি নিয়মকে শ্রদ্ধার সাথে প্রয়োগ করা যায়। অগ্রাধিকার সিদ্ধান্ত। এটি স্ট্যাটিক শব্দার্থ বাস্তবায়নের জন্য ব্যবহার করা যেতে পারে মূলত যেহেতু বেসিক সিনট্যাক্স সারমর্ম প্রসঙ্গে থাকে।
রাফেল

1
পুনরাবৃত্তিমূলক ভাষা হ'ল সর্বদা থামানো ট্যুরিং মেশিনগুলির দ্বারা ডিক্রিজেবল ভাষা। যে কোনও প্রসঙ্গে সংবেদনশীল ভাষাও পুনরাবৃত্তিযোগ্য, তবে যেহেতু প্রসঙ্গে সংবেদনশীল ভাষাগুলি তাত্পর্যপূর্ণ সময়ে নির্ধারিত হয়, তাই এমন পুনরাবৃত্ত ভাষাগুলি রয়েছে যা প্রসঙ্গে সংবেদনশীল নয়। সীমাবদ্ধ ব্যাকরণ আরও বেশি শক্তিশালী: থামানো সমস্যাটি একটি সীমাহীন ব্যাকরণ দ্বারা বর্ণনা করা যায়, তবে এটি পুনরাবৃত্তির ভাষা নয়।
অ্যালেক্স দশ ব্রিংক

15

এই বছর আইসিএফপি ২০১০-এর একটি গবেষণাপত্রে, টোটাল পার্সার কম্বিনেটরস , পার্সার কম্বিনেটর গ্রন্থাগারকে একটি সম্ভাবনাময় সমাপ্তি বর্ণনা করেছে এবং এটিও প্রমাণ করে যে এই গ্রন্থাগারে "পার্সার সংযুক্তকারীরা যতটা সম্ভব অভিব্যক্তিবদ্ধ" প্রদত্ত যে পার্সারটি সমাপ্ত করার গ্যারান্টিযুক্ত। দুর্ভাগ্যক্রমে লেখক "যতটা সম্ভব ভাবপ্রবণ" এর অর্থের জন্য লেখক যে ব্যাখ্যা দিয়েছিলেন তা আমি মনে করি না তবে এটি "শক্তি" সম্পর্কে আপনার প্রশ্নের সাথে অবশ্যই প্রাসঙ্গিক বলে মনে হয়।


1
আমার কাছে একটি গাড়ি রয়েছে যা দূষিত হয় না, আসলে এটিও চলাচল করে না ... সুতরাং প্রশ্নটি হল: এই লাইব্রেরিটি কোন ধরণের ভাষাকে পার্স করেছে? এই কাজটি অবশ্যই আকর্ষণীয় নয় এর অর্থ নয়।
বাবু

2

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

প্রাকৃতিক ভাষা প্রক্রিয়াকরণে, স্বাদগুলি আলাদা হয়, উদাহরণস্বরূপ, অস্পষ্টতার সাথে ডিলিং (এছাড়াও: সহজাত অস্পষ্টতা) এবং ফ্রি ওয়ার্ড অর্ডার খুব বিশিষ্ট ভূমিকা পালন করে। এখানে কীওয়ার্ডগুলি হালকাভাবে প্রসঙ্গে সংবেদনশীল ভাষাগুলি এবং অটোমেটা পুনরায় চালু করতে আপনাকে পড়া শুরু করতে সহায়তা করতে পারে।


1
প্রশ্নটি যেভাবে জিজ্ঞাসা করা হয়েছিল, এবং সিএফ খুব বিরক্ত করছে এমন অভিযোগ বিবেচনা করে আপনার উত্তর স্পষ্টভাবে সেরা। সুতরাং এটি যায় ...
বাবু

0

পার্সার জেনারেটর সরঞ্জামগুলি:

এএনটিএলআর খুব ভাল। বিকল্পভাবে, আপনি জাভাসিসিসিতে একবার দেখতে পারেন


আমি কম্পিউটার বিজ্ঞানী নই (আমার ডিগ্রি যা বলে তা সত্ত্বেও;), তাই আমার শব্দগুলি এখানে খুব কম ওজন করতে পারে। আমি সাজ্জাদের সাথে একমত - এএনটিএলআর একটি খুব শক্তিশালী হাতিয়ার। এটি খুব সম্পূর্ণ, এবং আমি এখনও পার্সার জেনারেটরের সাথে কোনও সমস্যা খুঁজে পাইনি (এলএল (কে) যদি আমি সঠিকভাবে স্মরণ করি)। অন্যদিকে, কিছুটা জটিল ব্যাকরণের জন্য আমার এখনও একটি সংকলক বাস্তবায়ন করতে
পারিনি

5
আমি মনে করি আপনি প্রশ্নের পয়েন্টটি এবং সম্ভবত পুরো সাইটটি অনুপস্থিত। এটি পার্সিং তত্ত্ব সম্পর্কে, বাস্তবায়ন এবং সরঞ্জামগুলি সম্পর্কে নয়।
পল বিগগার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.