বাইনারি ডেটাতে লেক্সার / পার্সার ব্যবহার করা এত ভুল কেন?


13

আমি প্রায়শই লেসার / পার্সারদের সাথে কাজ করি , পার্সার সংযোজকের বিপরীতে এবং এমন ব্যক্তিদের দেখি যারা কখনও পার্সিংয়ে ক্লাস নেন নি, বাইনারি ডেটা পার্সিং সম্পর্কে জিজ্ঞাসা করে। সাধারণত ডেটা বাইনারি নয় প্রসঙ্গ সংবেদনশীলও হয়। এটি মূলত কেবলমাত্র এক ধরণের টোকেন, বাইটের জন্য একটি টোকেন রাখে।

কেউ যদি ব্যাখ্যা করতে পারেন যে কেন কোনও লেএসার / পার্সারের সাথে বাইনারি ডেটা পার্স করা এমন কোনও সিএস শিক্ষার্থীর পক্ষে পার্সিং ক্লাস নেননি, তবে তত্ত্বের ভিত্তিতে কোনও পদক্ষেপ নিয়ে যথেষ্ট স্পষ্টতার সাথে এত ভুল?


আমার ধারণা লেক্সার সম্ভবত বাইট / শব্দের চেয়ে ছোট টোকেনগুলি খুঁজে পাবেন না। আপনার যদি এটির প্রয়োজন হয়, বাইনারিগুলি পার্সিংয়ের
ডেভ ক্লার্ক

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

@ গুয়কোডার: ব্যাকরণের জন্য অনেকগুলি ক্লাসিক উদাহরণ বাইনারি বর্ণমালা ব্যবহার করে, যেমন । S0S10S
রাফেল

1
যাইহোক: "কেবলমাত্র এক ধরণের টোকেন রয়েছে, বাইটের জন্য একটি টোকেন" " - ভাল না, এটি বাইট টোকেন করবে। 28
রাফেল

5
@ গুয়কোডার: অন্য প্রোগ্রাম দ্বারা উত্পন্ন সমস্ত ডেটা ব্যাকরণ দ্বারা বর্ণনা করা যেতে পারে। যদিও এটি প্রসঙ্গমুক্ত নাও হতে পারে।
রাফেল

উত্তর:


10

নীতিগতভাবে, এখানে কোনও ভুল নেই।

প্রস্তুতিতে,

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

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

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

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


"ভাষাগুলি নিয়মিত" তবে "তবে প্রসঙ্গে সংবেদনশীলও বাইনারি ডেটা ব্যাকরণ হিসাবে বোঝানো হয়েছিল, আমি উত্তরে তা স্পষ্ট করে বলব That সমস্যাটির কিছুটা অংশ পাওয়া যায়; লোকেরা একবার ব্যাকরণ বা নিয়মিত ভাষা ভাবেন you পার্সারের উল্লেখ করুন
গাই কোডার

7

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

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

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

আপনার প্রশ্নটি দ্বিতীয় বিভাগ সম্পর্কে: আমাদের কাছে যদি বাইনারি থাকে এমন ডেটা থাকে তবে এটি প্রায় সর্বদা একটি কম্পিউটার প্রোগ্রামের একটি পণ্য, অন্য কম্পিউটার প্রোগ্রামের উদ্দেশ্যে তৈরি। এটি অবিলম্বে এর অর্থ হ'ল যে ফর্ম্যাটটিতে ডেটা রয়েছে সেটি প্রোগ্রামের দ্বারা তৈরির জন্য বেছে নেওয়া হয়েছে।

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

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


2
এটি একটি দুর্দান্ত দৃষ্টিকোণ, তবে আমার মনে হচ্ছে এটি প্রশ্নের উত্তর দেয় না।
রাফেল

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

0

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

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

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


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

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