একটি সংকলক সংকলক রচনা - ব্যবহার এবং বৈশিষ্ট্যগুলির অন্তর্দৃষ্টি


10

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

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

আমি সেই বিন্দুতে পৌঁছে যাচ্ছি যেখানে প্রদত্ত ব্যাকরণ থেকে পার্স গাছটি বের করা শুরু করব, তারপরে একটি রিকার্সিভ ডেসেন্ট পার্সার থাকবে যা ডিএফএ ব্যবহার করে সামনের পথগুলি সনাক্ত করতে (এএনটিএলআর 4 এর এলএল (*)) এর সমান, তাই আমি অন্তর্দৃষ্টি পেতে আমি এটি খুলতে চাই অনুভূত।

পার্সার সংকলকটিতে, কী ধরণের বৈশিষ্ট্য আদর্শ?

এখন পর্যন্ত কী বাস্তবায়িত হয়েছে তার একটি সংক্ষিপ্ত বিবরণ এখানে দেওয়া হয়েছে:

  1. টেমপ্লেট
  2. একটি নির্দিষ্ট বিন্দুতে বৈধ কি তা জেনে ভবিষ্যদ্বাণীটি দেখুন।
  3. বিধিগুলির মধ্যে আক্ষরিক গ্রহণ করা এবং কোন টোকেনটি সেগুলি থেকে সমাধান করে সেটিকে 'ডিলিটালাইজেশন' বিধি বিধান করুন।
  4. ননডেটেরিমেন্টিক অটোমাতা
  5. নির্ধারক অটোমাতা
  6. টোকেন স্বীকৃতির জন্য সরল লেজিকাল স্টেট মেশিন
  7. টোকেন অটোমেশন পদ্ধতি:
    • স্ক্যান - মন্তব্যগুলির জন্য দরকারী: মন্তব্য: = "/ *" স্ক্যান ("* /");
    • বিয়োগ - সনাক্তকারীদের জন্য দরকারী: সনাক্তকারী: = বিয়োগ (আইডেন্টিফায়ারবডি, কীওয়ার্ড);
      • শনাক্তকারী কীওয়ার্ড গ্রহণ না করে তা নিশ্চিত করে।
    • এনকোড - বেস এন ট্রানজিশনের সিরিজ এক্স গণনা হিসাবে একটি অটোমেশনকে এনকোড করে।
      • ইউনিকোডেস্কেপ: = "\\ u" বেসইনকোড (আইডেন্টিফায়ারচর্নোস্কেপ, 16, 4);
        • হেক্সা 4-ট্রানজিশন সহ হেক্সাডেসিমালে একটি ইউনিকোড পলায়ন করে। এই এবং: [0-9A-Fa-f] {4 between এর মধ্যে পার্থক্য হ'ল এনকোড সহ ফলাফলযুক্ত অটোমেশন হেক্সাডেসিমাল মানগুলির অনুমোদিত সেটটিকে আইডেন্টিফায়ারচরনোস্ক্রপের স্কোপে সীমিত করে। সুতরাং আপনি যদি এটি \ u005c দেন তবে এনকোড সংস্করণ মানটি গ্রহণ করবে না। এর মতো জিনিসের একটি গুরুতর সতর্কতা রয়েছে: অল্প পরিমাণে ব্যবহার করুন। ফলাফল অটোমেশন বেশ জটিল হতে পারে।

যা বাস্তবায়িত হয়নি তা হ'ল সিএসটি জেনারেশন, এই কাজটি করার জন্য যথাযথ প্রসঙ্গটি বহন করার জন্য আমাকে ডিটারমিনিস্টিক অটোমেশনগুলি সামঞ্জস্য করতে হবে।

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

যদি আরও প্রসঙ্গে প্রয়োজন হয়, দয়া করে সেই অনুযায়ী পোস্ট করুন।

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


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

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

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

1
এই প্রকল্পের লক্ষ্য পার্সার জেনারেশনকে সহজ করে তোলা। হ্যাঁ, YACC / বাইসন এবং FLEX / LEX তে। প্রধান পার্থক্য হ'ল এই প্রোগ্রামগুলিতে জড়িত জটিলতা এড়ানো। বিষয়গুলিকে সরল এবং বিন্দুতে রাখা মূল লক্ষ্য। এ কারণেই আমি এমন একটি ফর্ম্যাট তৈরি করেছি যা বিজোড় বিভাগকরণ বিহীন নয়, বরং লক্ষ্যটি হ'ল এটি নিয়মিত প্রোগ্রামিংয়ের অনুরূপ করা: কেবলমাত্র ভাষা বিকাশের সাথে নির্দিষ্ট। টোকেনগুলি তাদের নামের পরে ': =' ব্যবহার করে সংজ্ঞায়িত করা হয়, বিধিগুলি তাদের নামের পরে :: = ব্যবহার করে সংজ্ঞায়িত করা হয়। টেমপ্লেটগুলি তাদের যুক্তিগুলির জন্য '<' এবং '>' ব্যবহার করে তারপরে ":: =" অনুসরণ করে যেহেতু তারা নিয়ম বাক্য গঠন ভাগ করে।
অ্যালেন ক্লার্ক কোপল্যান্ড জুনিয়র

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

উত্তর:


5

এটি একটি চমৎকার প্রশ্ন।

আমি সম্প্রতি প্রচুর পার্সিংয়ের কাজ করছি, এবং কয়েকটি মূল বৈশিষ্ট্য হ'ল আইএমএইচও:

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

  • @ গাইশারম্যান যেমন উল্লেখ করেছেন ত্রুটি প্রতিবেদন করা। যখন কোনও ত্রুটি পাওয়া যায়, আমি জানতে চাই যে ত্রুটিটি কোথায় ছিল এবং কখন এটি ঘটছিল। দুর্ভাগ্যক্রমে, ব্যাকট্র্যাকিং যখন খেলতে আসে তখন কীভাবে শালীন ত্রুটি উত্পন্ন করা যায় তা বোঝানোর জন্য আমি ভাল উত্স খুঁজে পেতে সক্ষম হইনি। (যদিও নীচে @ এস-লজিকের মন্তব্য নোট করুন)।

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

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

  • আমি আপনার # 2 (চেহারা এগিয়ে ভবিষ্যদ্বাণী) সাথে একমত। আমি মনে করি এটি ভাল ত্রুটি প্রতিবেদন তৈরি করতে সহায়তা করে। এটি অন্য কিছুর জন্য উপকারী?

  • পার্সিং ট্রি হিসাবে পার্সিং গাছ তৈরির জন্য সমর্থন ঘটে, সম্ভবত:

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

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

  • কাস্টম ত্রুটি বার্তা, যাতে আমি নির্দিষ্ট পরিস্থিতিতে ত্রুটি রিপোর্টগুলি টিউন করতে পারি এবং সম্ভবত আরও দ্রুত সমস্যাগুলি বুঝতে এবং সমাধান করতে পারি।

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


আমি 'টেমপ্লেটস' পড়ার বুলেটে প্রিসেডেন্সহেল্পারের একটি লিঙ্ক অন্তর্ভুক্ত করার জন্য প্রশ্ন সংস্থার সম্পাদনা করেছি। এটি প্যারামিটার অ্যারে টিপলসকে অনুমতি দেয়, সুতরাং আপনার যদি চারটি পরামিতি থাকে, প্রতিটি প্যারামিটার অ্যারে থাকে তবে টেমপ্লেটটি অবশ্যই চারটি আর্গুমেন্ট সেটে ব্যবহার করা উচিত।
অ্যালেন ক্লার্ক কোপল্যান্ড জুনিয়র

আপনি সিএসটি নির্মাণের মূল কারণটি পার্স করা ফাইলের সামগ্রিক বিন্যাস। আপনি চেয়েছিলেন prettyprint দস্তাবেজ, আপনার সেরা বাজি একটি হতে CST ব্যবহার কারণ তাদের নামের ASTs বিজোড় ব্যবধান করে একটি হতে CST ক্যাপচার হবে হ্যান্ডেল করতে অভাব তথ্য থেকেই বোঝা হয়। কোনও ভাল সিএসটি হলে কোনও সিএসটি রূপান্তর করা বেশ সহজ হয়।
অ্যালেন ক্লার্ক কোপল্যান্ড জুনিয়র

আমি ব্যবহারের জন্য উপলব্ধ বিল্ট-ইন ফাংশনগুলির বিষয়ে আবার প্রশ্নটি সম্পাদনা করেছি।
অ্যালেন ক্লার্ক কোপল্যান্ড জুনিয়র

আমি মনে করি যে আমি টেমপ্লেট / ফাংশন সম্পর্কে আমার বক্তব্যটি প্রকাশ করে একটি দুর্দান্ত কাজ করতে যাইনি: আমি বোঝাতে চাইছিলাম যে আপনি কখনই পর্যাপ্ত পরিমাণে থাকতে পারবেন না, কোনও সিস্টেমের আগে তাদের আগে বের করার চেষ্টা করা উচিত নয়: ব্যবহারকারী তৈরি করতে সক্ষম হওয়া দরকার তার নিজের.

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

5

আমি ভাষা নকশায় অভিজ্ঞ নই, তবে আমি যখন গেম ইঞ্জিন তৈরি করতে এবং আইডিই তৈরি করছিলাম তখন একবার পার্সার লিখতে গিয়েছিলাম।

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

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

আমি বুঝতে পারি যে আমি সত্যিই কঠিন কিছু বা মূর্খতার সাথে সুস্পষ্ট কিছু প্রস্তাব দিচ্ছি, যদি এটি হয় তবে দুঃখিত। যদি আপনি যে ধরণের জিনিসটি সন্ধান করছেন এটি যদি না হয় তবে আমি খুশিতে আমার উত্তরটি মুছব।


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

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

0

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

ডান পুনরাবৃত্তির জন্য একটি উদাহরণ (ইয়্যাক সিনট্যাক্স ব্যবহার করে):

list: 
      elem                  { $$ = singleton($1); }
    | elem ',' list         { $$ = cons($1, $2);  }
    ;

বাম পুনরাবৃত্তির জন্য একটি উদাহরণ (ইয়্যাক সিনট্যাক্স ব্যবহার করে):

funapp:
    term                    { $$ = $1; }
    | funapp term           { $$ = application($1, $2); }
    ;

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

উন্নত সরঞ্জামগুলি থেকে কেউ প্রত্যাশা করতে পারে যে তারা স্টাফ লিখে রাখার প্রাকৃতিক উপায়ে সমর্থন করে, যার পরিবর্তে একজনকে "রিফ্যাক্টর" থেকে সমস্ত কিছু বাম / ডান রিকভার্সি ফর্ম হিসাবে সরঞ্জামের উপর চাপিয়ে দেওয়া দরকার হয়।


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

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

প্রতিক্রিয়ার জন্য আপনাকে ধন্যবাদ. আমি মনে করি আমি এখন আরও ভাল বুঝতে পেরেছি - আমি সেই উদাহরণগুলি লিখতে পছন্দ করি list = sepBy1(',', elem)এবং funapp = term{+}(এবং অবশ্যই sepBy1এবং +বাম / ডান-পুনরাবৃত্তির ক্ষেত্রে প্রয়োগ করা হবে এবং মানক সিনট্যাক্স ট্রি তৈরি করা হবে)। সুতরাং এটি আমি বাম- এবং ডান-পুনরাবৃত্তি খারাপ বলে মনে করি না, এটি কেবলমাত্র আমি অনুভব করি যে তারা নিম্ন স্তরের এবং তারা আরও পরিষ্কার করতে যেখানে উচ্চতর স্তরের বিমূর্ততা ব্যবহার করতে চাই। আবার ধন্যবাদ!

1
আপনি @ ম্যাটফেনউইক স্বাগতম। তবে তখন এটি স্বাদের বিষয় হতে পারে। আমার জন্য, পুনরাবৃত্তি হ'ল (অন্তত ভাষাগুলির প্রসঙ্গে, যা অন্তর্গতভাবে পুনরাবৃত্তি বা সম্পূর্ণ উদ্দীপনাযুক্ত) এটিকে চিন্তা করার আরও প্রাকৃতিক উপায়। এছাড়াও, একটি গাছ একটি পুনরাবৃত্ত তথ্য কাঠামো, তাই আমি পুনরাবৃত্তি অনুকরণ করতে পুনরাবৃত্তিতে ফিরে পড়ার দরকার নেই see তবে অবশ্যই পছন্দগুলি আলাদা different
ইনগো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.