আধুনিক ভাষা এখনও পার্সার জেনারেটর ব্যবহার করে?


38

আমি এখানে উইকিপিডিয়ায় জিসিসি সংকলক স্যুটটি নিয়ে গবেষণা করছিলাম , যখন এটি প্রকাশিত হবে:

জিসিসি বাইসনের সাহায্যে উত্পন্ন এলএলআর পার্সারগুলি ব্যবহার শুরু করেছিল, তবে ধীরে ধীরে হাতে লিখিত পুনরাবৃত্ত-বংশদ্ভুত পার্সারগুলিতে স্যুইচ করেছে; ২০০৪ সালে সি ++ এর জন্য, এবং ২০০ in সালে সি এবং অবজেক্টিভ-সি এর জন্য Currently বর্তমানে সমস্ত সামনের প্রান্তটি হস্ত-লিখিত পুনরাবৃত্ত-বংশদ্ভুত পার্সার ব্যবহার করে

সুতরাং এই শেষ বাক্যটি দ্বারা, (এবং যতটা আমি উইকিপিডিয়াতে বিশ্বাস করি) আমি অবশ্যই বলতে পারি যে "সি (জিসিসি), সি ++ (জি ++), উদ্দেশ্য-সি, উদ্দেশ্য-সি ++, ফোর্টরান (গফর্টান), জাভা (জিসিজে), অ্যাডা (জিএনএটি), গো (জিসিটিগো), পাস্কাল (জিপিসি), ... বুধ, মডুলা -২, মডিউলা -৩, পিএল / আই, ডি (জিডিসি), এবং ভিএইচডিএল (জিডিসিএল) "সবই সামনে-প্রান্ত যা নেই আর একটি পার্সার জেনারেটর ব্যবহার করুন। অর্থাৎ, তারা সকলেই হাতের লিখিত পার্সার ব্যবহার করে।

আমার প্রশ্নটি তখন, এই চর্চা কি সর্বব্যাপী? বিশেষত, আমি [পাইথন, সুইফট, রুবি, জাভা, স্কেলা, এমএল, হাস্কেল] এর এক্স এর জন্য "স্ট্যান্ডার্ড / অফিশিয়াল বাস্তবায়নের হাতের লিখিত পার্সার আছে" এর সঠিক উত্তর খুঁজছি? (প্রকৃতপক্ষে, অন্য যে কোনও ভাষার তথ্যেরও এখানে স্বাগত।) আমি নিশ্চিত যে অনেক খনন করার পরে আমি নিজে এটি খুঁজে পেতে পারি। তবে আমি নিশ্চিত যে এটি সম্প্রদায় সহজেই জবাবদিহি করতে পারে। ধন্যবাদ!


3
ডেটা পয়েন্ট: সিপিথনের একটি হোম ব্রিউ এলএলআর পার্সার জেনারেটর (pgen) রয়েছে। বাকি সম্পর্কে জানেন না।

8
ডেটা পয়েন্ট: জিসিসি (হাস্কেল) ওসিএএমএল হিসাবে একটি এলএলআর পার্সার জেনারেটর (খুশি) ব্যবহার করে।
টুভান ভ্যান লাথোভেন

1
হওয়া উচিত "আধুনিক উচ্চ কার্যকারিতা কম্পাইলার ... কি" বা অনুরূপ, কারণ ভাষা, বৈশিষ্ট না বাস্তবায়ন থাকাকালীন এটা কম্পাইলার যে হয় অথবা কোন মেশিন উত্পন্ন পার্সার ব্যবহার করে না হয়।
ডিএমকেকে

@ ডিএমকেকে, হ্যাঁ আপনি ঠিক বলেছেন। তবে নামকরণটি পয়েন্টটিতে দীর্ঘ এবং কম পেতে শুরু করে। আপনি যদি আমার চেয়ে বেশি সৃজনশীল হন তবে এটি সম্পাদনা করতে নির্দ্বিধায়!
ইটোনফিল

এমএল সম্পর্কিত: এমএল্টন এমএসের সাথে নির্দিষ্ট একটি পার্সার জেনারেটর ব্যবহার করে, আমি 90% নিশ্চিত যে এসএমএল / এনজে খুব কম কাজ করে যদিও আমি এর সাথে কম পরিচিত। আপনি "হাতের লেখা" বিবেচনা করতে বা না চাইতে পারেন।
প্যাট্রিক কলিন্স

উত্তর:


34

আফাইক, জিসিসি সিন্ট্যাক্টিক ত্রুটি ডায়াগনস্টিকগুলিকে উন্নত করতে বিশেষত হাতে লিখিত পার্সার ব্যবহার করে (যেমন সিনট্যাক্স ত্রুটিতে মানুষের অর্থপূর্ণ বার্তা দেয়)।

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

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


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

2
Dealing with that context sensitiveness in grammars for parser generators is boringly difficult। এটি আরও কমবেশি অসম্ভব কারণ এই সরঞ্জামগুলি প্রসঙ্গ-মুক্ত পার্সার তৈরি করে। আপনি যদি এই জাতীয় সরঞ্জাম ব্যবহার করেন তবে পার্স ট্রি তৈরি করার পরে সমস্ত প্রসঙ্গ-সংবেদনশীল সীমাবদ্ধতা উপস্থিত রয়েছে কিনা তা পরীক্ষা করার সঠিক জায়গা place
dtech

7

পার্সার জেনারেটর এবং পার্সার ইঞ্জিনগুলি বেশ সাধারণ। সাধারণতার সুবিধাটি হ'ল দ্রুত সামগ্রিক পরিকল্পনায় একটি নির্ভুল পার্সার তৈরি করা এবং এটি কার্যকরভাবে কার্যকর করা সহজ।

পার্সার ইঞ্জিনটি সাধারণতার কারণে পারফরম্যান্সের সামনে নিজেই ভুগছে। যে কোনও হাতে লিখিত কোডটি সর্বদা সারণি চালিত পার্সার ইঞ্জিনগুলির চেয়ে উল্লেখযোগ্যভাবে দ্রুত হবে।

দ্বিতীয় ক্ষেত্র যেখানে পার্সার জেনারেটর / ইঞ্জিনগুলির অসুবিধা রয়েছে তা হ'ল সমস্ত আসল প্রোগ্রামিং ল্যাঙ্গুয়েজ প্রসঙ্গ সংবেদনশীল, প্রায়শই বেশ সূক্ষ্ম উপায়ে। এলআর ভাষাগুলি প্রসঙ্গ-মুক্ত, অর্থাত্ অবস্থান ও পরিবেশ সম্পর্কে অনেক সূক্ষ্মতা রয়েছে যা সিনট্যাক্সে সঠিকভাবে জানানো অসম্ভব। বৈশিষ্ট্যযুক্ত ব্যাকরণগুলি "ব্যবহারের আগে ঘোষণা করুন" ইত্যাদির মতো মৌলিক ভাষার নিয়মগুলি সম্বোধন করার চেষ্টা করে etc. এই প্রসঙ্গে সংবেদনশীলতাটি হাতের লিখিত কোডে তারের করা সোজা এগিয়ে।


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

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

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

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

1
সমস্ত বাস্তব ভাষার জন্য উদ্ধৃতি প্রসঙ্গে সংবেদনশীল?
PSr
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.