লেসার্স বনাম পার্সার্স


307

লেক্সার এবং পার্সাররা কি তাত্ত্বিকভাবে সত্যই আলাদা

: এটা রেগুলার এক্সপ্রেশনের ঘৃণা করতে কেতাদুরস্ত বলে মনে হয় কোডিং ভয়াবহ , অন্য ব্লগ পোস্টে

তবে, জনপ্রিয় লেক্সিং ভিত্তিক সরঞ্জামগুলি: পাইগমেন্টস , গেশি বা প্রিট্টিফাই , সমস্ত নিয়মিত অভিব্যক্তি ব্যবহার করে। তারা কিছু লেক্স বলে মনে হচ্ছে ...

যখন পর্যাপ্ত পরিমাণে লেক্সিং করা হয়, আপনার কখন ইবিএনএফ প্রয়োজন?

এই লেক্সারদের দ্বারা উত্পাদিত টোকেনগুলি বাইসন বা অ্যান্ট্রাল পার্সার জেনারেটরগুলির সাথে কি কেউ ব্যবহার করেছেন?


2
হ্যাঁ. আমি অটোহোটকি পার্স করার চেষ্টা করছি। আমি পাইগমেন্টগুলি খুব দ্রুত ব্যবহার করে একটি সিনট্যাক্স হাইলাইটার তৈরি করতে সক্ষম হয়েছি। তবে অ্যান্টলার অনেক বেশি সময় নিচ্ছে ... দুটি সরঞ্জামের মধ্যে আমি খুব বেশি ক্রস পরাগায়ন দেখিনি।
নবীন

67
নিয়মিত অভিব্যক্তিগুলি যখন তাদের অপব্যবহার করা হয় তখন এটি ঘৃণা করা কেবল ফ্যাশনেবল। প্রসঙ্গ-মুক্ত পার্সিংয়ের প্রয়োজন হলে অনেকে নিয়মিত ভাব প্রকাশ করার চেষ্টা করেন। তারা সর্বদা ব্যর্থ হয়। এবং তারা নিয়মিত অভিব্যক্তি প্রযুক্তিকে দোষ দেয়। এটি অনেকটা অভিযোগ করার মতো যে আপনার হাতুড়িটি একটি ক্রোমি করাত। সত্য, তবে আপনি অনেক সহানুভূতি পাবেন না।
ইরা বাক্সটার 21

2
আমি অ্যান্টলারের সাথে কিছু গতি বাড়াতে শুরু করছি, ধন্যবাদ। প্রচুর লেক্সিং প্রসঙ্গ-মুক্ত এবং কখনও কখনও এমনকি প্রসঙ্গও নির্ভর করে by
নবীন

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

এটা লক্ষনীয় যে lexers এবং পারজার না আছে আলাদা হতে, যেমন LLLPG এবং ANTLR 'র পূর্ববর্তী সংস্করণে একই কলিজা (ট) উভয় lexers এবং পারজার জন্য পার্স সিস্টেমটি ব্যবহার করুন। মূল পার্থক্য হ'ল রেজেক্সগুলি সাধারণত লেক্সারের পক্ষে যথেষ্ট তবে পার্সার্স নয়।
কিওয়ার্টি

উত্তর:


475

পার্সার এবং লেক্সারদের মধ্যে যা মিল রয়েছে তা:

  1. তারা তাদের ইনপুট থেকে কিছু বর্ণমালার প্রতীক পড়েন ।

    • ইঙ্গিত: বর্ণমালাটি অক্ষর হতে হবে না। তবে এটি এমন চিহ্নগুলির মধ্যে থাকতে হবে যা পার্সার / লেক্সারের দ্বারা বোঝা ভাষার জন্য পারমাণবিক
    • লেসারের জন্য প্রতীক: এএসসিআইআই অক্ষর।
    • পার্সারের জন্য প্রতীকসমূহ: নির্দিষ্ট টোকেনগুলি, যা তাদের ব্যাকরণের টার্মিনাল প্রতীক।
  2. তারা এই চিহ্নগুলি বিশ্লেষণ করে এবং তারা যে ভাষা বোঝে তার ব্যাকরণের সাথে তাদের মিলানোর চেষ্টা করে ।

    • এখানে আসল পার্থক্য সাধারণত থাকে। আরও জন্য নীচে দেখুন।
    • লেকরারদের দ্বারা ব্যাকরণ বোঝা যায়: নিয়মিত ব্যাকরণ (চমস্কির স্তর 3)।
    • ব্যাকরণ পার্সারদের দ্বারা বোঝা হয়েছে: প্রসঙ্গমুক্ত ব্যাকরণ (চমস্কির স্তর 2)।
  3. তারা ভাষার টুকরোগুলির সাথে শব্দার্থক (অর্থ) যুক্ত করে।

    • Lexers classifying দ্বারা অর্থ সংযুক্ত করুন lexemes বিশেষ হিসাবে (ইনপুট থেকে চিহ্ন স্ট্রিং) টোকেন । এই যেমন সকল lexemes: *, ==, <=, ^"অপারেটর" সি / সি ++ lexer টোকেনটি হিসাবে শ্রেণীবদ্ধ করা হবে।
    • পার্সাররা ইনপুট (বাক্য) থেকে টোকেনের স্ট্রিংগুলিকে নির্দিষ্ট অযৌক্তিক হিসাবে শ্রেণিবদ্ধ করে এবং পার্স ট্রি তৈরি করে অর্থ সংযুক্ত করে । যেমন এই সব টোকেন স্ট্রিং: [number][operator][number], [id][operator][id], [id][operator][number][operator][number]হিসাবে "অভিব্যক্তি" সি / সি ++ পার্সার দ্বারা nonterminal শ্রেণীবদ্ধ করা হবে না।
  4. তারা স্বীকৃত উপাদানগুলির সাথে কিছু অতিরিক্ত অর্থ (ডেটা) সংযুক্ত করতে পারে।

    • যখন কোনও লেসচার একটি যথাযথ সংখ্যা গঠন করে একটি চরিত্রের অনুক্রমকে স্বীকৃতি দেয়, তখন এটি এটিকে তার বাইনারি মানতে রূপান্তর করতে পারে এবং "নম্বর" টোকেন দিয়ে সঞ্চয় করতে পারে।
    • একইভাবে, যখন কোনও পার্সার কোনও অভিব্যক্তি সনাক্ত করে, এটি সিনট্যাক্স ট্রিটির "এক্সপ্রেশন" নোডের সাথে তার মানটি এবং সঞ্চয় করতে পারে।
  5. তারা সকলেই তাদের আউটপুটে তাদের স্বীকৃত ভাষার যথাযথ বাক্য উত্পাদন করে ।

    • Lexers উত্পাদন টোকেন , যা হয় বাক্য এর নিয়মিত ভাষা তারা স্বীকার করে। প্রতিটি টোকেনের একটি অভ্যন্তরীণ সিনট্যাক্স থাকতে পারে (যদিও স্তর 3, স্তর 2 নয়) তবে আউটপুট ডেটার জন্য এবং সেগুলি পড়ার জন্য এটি কোনও ব্যাপার নয়।
    • Parsers উত্পাদন সিনট্যাক্স গাছ , যার উপস্থাপনা বাক্য এর প্রেক্ষাপটে মুক্ত ভাষা তারা স্বীকার করে। সাধারণত পুরো দস্তাবেজ / উত্স ফাইলের জন্য এটি কেবলমাত্র একটি বড় গাছ, কারণ পুরো দস্তাবেজ / উত্স ফাইলটি তাদের জন্য উপযুক্ত বাক্য । তবে কোনও কারণ নেই কারণ কেন পার্সার তার আউটপুটে সিরিজ গাছের সিরিজ উত্পাদন করতে পারেনি। উদাহরণস্বরূপ, এটি কোনও পার্সার হতে পারে যা প্লেইন-পাঠ্যে আটকে থাকা এসজিএমএল ট্যাগগুলি সনাক্ত করে। সুতরাং এটি করব tokenize টোকেন সিরিজের মধ্যে যার SGML দস্তাবেজ: [TXT][TAG][TAG][TXT][TAG][TXT]...

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

তাহলে এই "চমস্কির ব্যাকরণ স্তরগুলি" সম্পর্কে সমস্ত কি? ঠিক আছে, নোম চমস্কি ব্যাকরণগুলিকে তাদের জটিলতার উপর নির্ভর করে চার স্তরে শ্রেণিবদ্ধ করেছেন:

  • স্তর 3: নিয়মিত ব্যাকরণ

    তারা রেগুলার এক্সপ্রেশনের ব্যবহার করেন, যে, তারা শুধুমাত্র বর্ণমালার প্রতীকের দ্বারা গঠিত হতে পারে ( a, b), তাদের concatenations ( ab, aba, bbbetd।), অথবা বিকল্প (যেমন a|b)।
    এগুলি এনএফএ (ননডেটারিস্টিনিস্টিক ফিনাইট অটোমেটন) বা আরও ভাল ডিএফএ (ডিট্রেস্টিনিস্টিক ফিনাইট অটোমেটন) এর মতো সসীম স্টেট অটোমেটা (এফএসএ) হিসাবে প্রয়োগ করা যেতে পারে।
    নিয়মিত ব্যাকরণগুলি নেস্টেড সিনট্যাক্সের সাহায্যে পরিচালনা করতে পারে না , যেমন সঠিকভাবে নেস্টেড / (()()(()()))ম্যাচ করা বন্ধনী , নেস্টেড এইচটিএমএল / বিবিকোড ট্যাগস, নেস্ট ব্লকস ইত্যাদি because কারণ এটি মোকাবেলায় রাষ্ট্রীয় অটোম্যাটাকে অসীম অনেকগুলি নেস্টিং স্তর হ্যান্ডেল করার জন্য অসীম অনেকগুলি রাজ্য থাকা উচিত।
  • স্তর 2: প্রসঙ্গমুক্ত ব্যাকরণ

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

  • স্তর 0: সীমাহীন ব্যাকরণকে
    পুনরাবৃত্তভাবে গণনাযোগ্য ব্যাকরণও বলা হয়।


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

3
@ সাসকিউ এটা কি বলা উচিত যে লেক্সার এবং পার্সার উভয়ই কিছু ব্যাকরণ এবং কিছু টোকেনকে ইনপুট হিসাবে গ্রহণ করে?
প্যারাগ

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

6
উদাহরণস্বরূপ, আপনি STMT_ENDনির্দেশগুলির সমাপ্তি বোঝাতে আপনার সিনট্যাক্সে (পার্সারের জন্য) একটি টার্মিনাল চিহ্ন ব্যবহার করতে পারেন । লেসারের দ্বারা উত্পাদিত একই নামের সাথে এখন আপনার সাথে একটি টোকেন থাকতে পারে। তবে আপনি প্রকৃত লেক্সেমিকে এটি পরিবর্তন করতে পারেন for যেমন। আপনি সি / সি ++ আছে - উত্স কোডের মতো STMT_ENDহিসাবে সংজ্ঞায়িত করতে পারেন ;। বা আপনি এটি endপাস্কেল-স্টাইলের মতো কোনওরকমের হিসাবে সংজ্ঞায়িত করতে পারেন । অথবা আপনি '\n'পাইথনের মতো লাইনের শেষের সাথে নির্দেশনা শেষ করার জন্য এটি সংজ্ঞায়িত করতে পারেন । তবে নির্দেশের বাক্য গঠন (এবং পার্সার) অপরিবর্তিত রয়েছে :-) কেবল লেক্সার পরিবর্তন করা দরকার।
সাসকিউ

24
উইকিপিডিয়া এবং গুগলের ঘন্টাগুলি কোনও সহায়তা করেনি, তবে আপনি চমস্কির ব্যাকরণটি 3 মিনিটের মধ্যে ব্যাখ্যা করেছেন। ধন্যবাদ.
এনরে 15

107

হ্যাঁ, তারা তত্ত্ব এবং বাস্তবায়নের ক্ষেত্রে খুব আলাদা।

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

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

লেক্সিং বা পার্সিং প্রযুক্তি দু'টিই খুব শীঘ্রই চলে যাওয়ার সম্ভাবনা নেই।

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


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

আমার ধারণা একটি পার্সার একটি লেক্সারের কাছে যেমন ট্রি ওয়াকার পার্সারকে হয়। আমি নিশ্চিত নই যে এই তত্ত্বটি আলাদা: antlr.org/wiki/display/~admin/ANTLR+v4+lexers তবে আমি তাদের মধ্যে সম্মেলনের পার্থক্য বুঝতে শুরু করছি ...
নবীন

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

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

1
আমার অফিসমেট বিভাগের তত্ত্বে ছিল into তিনি দেখিয়েছেন কীভাবে শেভগুলির শ্রেণিবদ্ধ তত্ত্ব ধারণাটি সমস্ত ধরণের প্যাটার্ন মেলাকে coveredেকে রাখে এবং একটি বিমূর্ত শ্রেণিবদ্ধ স্পেসিফিকেশন থেকে এলআর পার্সিং করতে সক্ষম হয়েছিল। সুতরাং প্রকৃতপক্ষে, আপনি যদি যথেষ্ট বিমূর্তে যান তবে আপনি এই জাতীয় সাধারণতা খুঁজে পেতে পারেন। বিভাগের তত্ত্বের বিষয়টি হ'ল আপনি প্রায়শই "সমস্ত উপায়" বিমূর্ত করতে পারেন; আমি নিশ্চিত আপনি পার্থক্য মুছে ফেলা একটি বিভাগ তত্ত্ব পার্সার তৈরি করতে পারেন। তবে এর কোনও ব্যবহারিক ব্যবহারের জন্য নির্দিষ্ট সমস্যা ডোমেনটি তাত্ক্ষণিকভাবে চালিত করতে হবে এবং তারপরে পার্থক্যগুলি বাস্তব হিসাবে প্রদর্শিত হবে।
ইরা

32

যখন পর্যাপ্ত পরিমাণে লেক্সিং করা হয়, আপনার কখন ইবিএনএফ প্রয়োজন?

ইবিএনএফ সত্যিই ব্যাকরণের শক্তিতে খুব বেশি যোগ করে না । চমকস্কির নরমাল ফর্ম (সিএনএফ) ব্যাকরণ নিয়মগুলির তুলনায় এটি কেবল একটি সুবিধা / শর্টকাট স্বরলিপি / "সিনট্যাকটিক চিনি" । উদাহরণস্বরূপ, EBNF বিকল্প:

S --> A | B

আপনি প্রতিটি বিকল্প উত্পাদন আলাদাভাবে তালিকাভুক্ত করে সিএনএফ অর্জন করতে পারেন:

S --> A      // `S` can be `A`,
S --> B      // or it can be `B`.

EBNF থেকে alচ্ছিক উপাদান:

S --> X?

আপনি সিএনএফ-এ একটি অবিচ্ছিন্ন উত্পাদন ব্যবহার করে অর্জন করতে পারেন , এটি হ'ল একটি যা খালি স্ট্রিং দ্বারা প্রতিস্থাপিত হতে পারে (এখানে কেবল খালি উত্পাদন দ্বারা চিহ্নিত করা হয়; অন্যরা এপিসিলন বা ল্যাম্বদা বা ক্রস সার্কেল ব্যবহার করে):

S --> B       // `S` can be `B`,
B --> X       // and `B` can be just `X`,
B -->         // or it can be empty.

Bউপরের শেষের মতো একটি ফর্মের একটি উত্পাদনকে "ইরেজোর" বলা হয়, কারণ এটি অন্যান্য প্রযোজনায় (যা কিছু অন্যের পরিবর্তে খালি স্ট্রিং তৈরি করে) মুছতে পারে।

ইবিএনএফ থেকে শূন্য বা আরও পুনরাবৃত্তি:

S --> A*

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

S --> S A    // `S` is just itself ended with `A` (which can be done many times),
S -->        // or it can begin with empty-string, which stops the recursion.

এটি শূন্য বা তার বেশি মাত্র পরে একটি খালি স্ট্রিং (শেষ পর্যন্ত) উত্পন্ন করে জেনেও Aএকই স্ট্রিং ( তবে একই ভাষা নয়! ) রাইট-রিকার্সন ব্যবহার করে প্রকাশ করা যেতে পারে :

S --> A S    // `S` can be `A` followed by itself (which can be done many times),
S -->        // or it can be just empty-string end, which stops the recursion.

এবং যখন +EBNF থেকে এক বা একাধিক পুনরাবৃত্তি আসে:

S --> A+

এটি একটিকে প্রমাণ Aকরে *এবং আগের মতো ব্যবহার করে করা যেতে পারে:

S --> A A*

যা আপনি সিএনএফ-তে প্রকাশ করতে পারেন (আমি এখানে সঠিক রিক্রুশন ব্যবহার করি; অন্যকে নিজে অনুশীলন হিসাবে বের করার চেষ্টা করুন):

S --> A S   // `S` can be one `A` followed by `S` (which stands for more `A`s),
S --> A     // or it could be just one single `A`.

এটি জেনে, আপনি সম্ভবত একটি নিয়মিত প্রকাশের (যা নিয়মিত ব্যাকরণ ) ব্যাকরণকে চিনতে পারবেন যা কেবলমাত্র টার্মিনাল প্রতীকগুলি নিয়ে গঠিত একটি একক EBNF উত্পাদনে প্রকাশ করা যেতে পারে। আরও সাধারণভাবে, আপনি যখন প্রযোজনাগুলির সাথে অনুরূপ দেখতে পান আপনি নিয়মিত ব্যাকরণগুলি চিনতে পারবেন:

A -->        // Empty (nullable) production (AKA erasure).
B --> x      // Single terminal symbol.
C --> y D    // Simple state change from `C` to `D` when seeing input `y`.
E --> F z    // Simple state change from `E` to `F` when seeing input `z`.
G --> G u    // Left recursion.
H --> v H    // Right recursion.

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

তবে যখন আপনার সিনট্যাক্সটি নীচের মতো গাছের মতো, স্ব-অনুরূপ, নেস্টেড কাঠামো উত্পাদন করতে একটি অ-তুচ্ছ উপায় হিসাবে পুনরাবৃত্তি ব্যবহার করে:

S --> a S b    // `S` can be itself "parenthesized" by `a` and `b` on both sides.
S -->          // or it could be (ultimately) empty, which ends recursion.

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

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

A R B --> A S B

বিধি প্রয়োগের "প্রসঙ্গ" হিসাবে আপনি বাম দিকের এই অতিরিক্ত চিহ্নগুলি সম্পর্কে ভাবতে পারেন। কিছু পূর্বশর্ত হতে পারে, postconditions ইত্যাদি উদাহরণস্বরূপ, উপরে নিয়ম প্রতিস্থাপন করে দেবে Rমধ্যে S, কিন্তু শুধুমাত্র যখন এটি মধ্যে আছে Aএবং Bসেই যাব Aএবং Bনিজেদের অপরিবর্তিত। এই জাতীয় বাক্য গঠনটি পার্স করা সত্যিই শক্ত, কারণ এটির জন্য একটি পূর্ণ-বিকাশযুক্ত ট্যুরিং মেশিন প্রয়োজন। এটি সম্পূর্ণ অন্য গল্প, তাই আমি এখানেই শেষ করব।


1
আপনি উল্লেখ করেছেন যে ইবিএনএফ স্ট্যান্ডার্ড চমস্কির নরমাল ফর্ম (সিএনএফ) ব্যাকরণের নিয়মগুলির তুলনায় "কেবল একটি সুবিধা / শর্টকাট স্বরলিপি /" সিনট্যাকটিক চিনি "। তবে সিএনএফের হাতে এই বিষয়টির সাথে খুব কমই কিছু করার আছে। ইবিএনএফ সহজেই স্ট্যান্ডার্ড বিএনএফ-তে রূপান্তরিত হতে পারে। সময়কাল। এটি স্ট্যান্ডার্ড বিএনএফের জন্য সিনট্যাকটিক চিনি।
বাবু

11

জিজ্ঞাসা করা প্রশ্নের উত্তর দেওয়ার জন্য (অন্যান্য উত্তরে যা প্রদর্শিত হবে তা অযথা পুনরাবৃত্তি না করে)

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

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

এ কারণেই "নিয়মিত অভিব্যক্তি ঘৃণা করা ফ্যাশনেবল মনে হয়"। যদিও তারা অনেক কিছু করতে পারে তবে এগুলি অর্জনের জন্য তাদের মাঝে মাঝে খুব অপঠনযোগ্য কোডিংয়ের প্রয়োজন হয়, বাস্তবায়নে বিভিন্ন বর্ধিতাংশ এবং বিধিনিষেধগুলি তাদের তাত্ত্বিক সরলতার কিছুটা হ্রাস করে বলে উল্লেখ না করে। লেক্সাররা সাধারণত এটি করে না এবং সাধারণত টোকেনকে পার্স করার জন্য একটি সহজ, দক্ষ এবং উপযুক্ত প্রযুক্তি। টোকেনের জন্য সিএফ পার্সার ব্যবহার করা ওভারকিল হবে, যদিও এটি সম্ভব।

লেক্সারদের জন্য সিএফ আনুষ্ঠানিকতা ব্যবহার না করার আরেকটি কারণ হ'ল এটি তখন সম্পূর্ণ সিএফ শক্তি ব্যবহার করার লোভজনক হতে পারে। তবে এটি প্রোগ্রাম পড়ার বিষয়ে কাঠামোগত সমস্যা উত্থাপন করতে পারে।

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

যাইহোক, সিএফ (সিএফ ট্রান্সডুসারগুলির মাধ্যমে ... গণিতের জন্য দুঃখিত) সিএফ দিয়ে তৈরি সিএফ অগত্যা সিএফ দেয় না এবং জিনিসগুলিকে আরও সাধারণ করে তোলে, তবে অনুশীলনে কম ট্র্যাকটেবল হতে পারে। সুতরাং সিএফ লেক্সারদের জন্য উপযুক্ত সরঞ্জাম নয়, যদিও এটি ব্যবহার করা যায়।

নিয়মিত এবং সিএফের মধ্যে একটি প্রধান পার্থক্য হ'ল নিয়মিত ভাষা (এবং ট্রান্সডুসার) বিভিন্ন উপায়ে প্রায় কোনও আনুষ্ঠানিকতার সাথে খুব ভাল রচনা করে থাকে, যখন সিএফ ভাষা (এবং ট্রান্সডুসার) এমনকি নিজের সাথেও না (কিছু ব্যতিক্রম ছাড়া)।

(নোট করুন যে নিয়মিত ট্রান্সডুসারদের অন্যের ব্যবহার থাকতে পারে যেমন কিছু সিনট্যাক্স ত্রুটি পরিচালনা করার কৌশল আনুষ্ঠানিককরণ))

সিএনএফ ব্যাকরণ উপস্থাপনের জন্য বিএনএফ একটি নির্দিষ্ট বাক্য গঠন।

ইবিএনএফ বিএনএফের জন্য একটি সিনট্যাকটিক চিনি , নিয়মিত স্বরলিপি ব্যবহার করে বিএনএফ ব্যাকরণের সংক্ষিপ্ত সংস্করণ দেয় give এটি সর্বদা একটি সমতুল্য খাঁটি বিএনএফ এ রূপান্তরিত হতে পারে।

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

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

আমি এএইচআরের উত্তরটিও দেখার পরামর্শ দেব ।

তবে এটি একটি প্রশ্ন উন্মুক্ত করে: গাছ কেন?

গাছগুলি সিনট্যাক্স নির্দিষ্ট করার জন্য একটি ভাল ভিত্তি কারণ

  • তারা পাঠ্যে একটি সাধারণ কাঠামো দেয়

  • উপরে কাঠামোর সাথে গাণিতিকভাবে সুবিদিত প্রযুক্তি (হোমোর্ফিজমের মাধ্যমে রচনাশক্তি) সহ কাঠামোর সাথে শব্দার্থবিদ্যার সাথে সংযুক্ত করার জন্য খুব সুবিধাজনক রয়েছে। গাণিতিক আনুষ্ঠানিকতার শব্দার্থবিজ্ঞানের সংজ্ঞা দেওয়ার জন্য এটি একটি মৌলিক বীজগণিত সরঞ্জাম tool

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

প্রোগ্রামিং ভাষাগুলি সিএফের চেয়ে প্রসঙ্গে সংবেদনশীল (সিএস) হ'ল এ বিষয়ে বিবৃতি স্বেচ্ছাসেবী এবং বিতর্কিত।

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

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

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


হ্যাঁ, পার্স গাছ এবং এএসটি আলাদা, তবে সত্যিই দরকারী উপায়ে নয়। এটি সম্পর্কে আমার আলোচনা দেখুন: stackoverflow.com/a/1916687/120163
ইরা

@ ইরাক্যাক্সটার আমি আপনার সাথে একমত নই, তবে আপনার পোস্টের একটি পরিষ্কার উত্তর খসড়া করার জন্য আমার এখন সত্যিই সময় নেই। মূলত, আপনি একটি ব্যবহারিক দৃষ্টিভঙ্গি নিচ্ছেন (এবং আপনার নিজের সিস্টেমকেও রক্ষা করছেন, আমি মনে করি)। এটি আরও সহজ কারণ আপনি কিছু সিস্টেমের মতো ডিটারমিনিস্টিকদের চেয়ে সাধারণ সিএফ পার্সার (তবে জিএলআর সবচেয়ে কার্যকর নাও হতে পারেন) ব্যবহার করছেন। আমি রেফারেন্সের উপস্থাপনা, যা নিজেই আনুষ্ঠানিকভাবে সংজ্ঞায়িত চিকিত্সা, provably সঠিক রূপান্তরের, গাণিতিক প্রমাণের ধার হিসাবে এবং AST বিবেচনা, ইত্যাদি একাধিক কংক্রিট উপস্থাপনাগুলির ক্ষেত্রেও unparsing
babou

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

সুতরাং আসলে আমি আমার মন্তব্যে আপনার আপত্তির কোনও অংশই বুঝতে পারি না। আপনাকে সেই "পরিষ্কার উত্তর" লিখতে হবে।
ইরা

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

7

সংকলকটির বিশ্লেষণ অংশটি সাধারণত লাক্ষিক বিশ্লেষণ এবং পার্সিং (সিনট্যাক্স বিশ্লেষণ) পর্যায়ে বিভক্ত হওয়ার বিভিন্ন কারণ রয়েছে।

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

রিসোর্স ___ সংকলক (দ্বিতীয় সংস্করণ) লিখেছেন- আলফ্রেড ভি। অ্যাবো কলম্বিয়া বিশ্ববিদ্যালয় মনিকা এস। লাম স্ট্যানফোর্ড বিশ্ববিদ্যালয় রবি শেঠি আভায়া জেফ্রি ডি। উলমান স্ট্যানফোর্ড বিশ্ববিদ্যালয়

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