একটি "টোকেনাইজার", "পার্সার" এবং "লেক্সার" কী এবং কীভাবে তারা একে অপরের সাথে সম্পর্কিত এবং ব্যবহৃত হয় তার স্পষ্ট সংজ্ঞা খুঁজছেন?


151

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

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

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

উত্তর:


166

একটি টোকেনাইজার সাধারণত সাদা অংশ (ট্যাবস, স্পেস, নতুন লাইন) সন্ধান করে টোকেনের পাঠ্যের একটি প্রবাহ ভেঙে দেয়।

একটি লেক্সার মূলত একটি টোকেনাইজার তবে এটি সাধারণত টোকেনগুলিতে অতিরিক্ত প্রসঙ্গ সংযুক্ত করে - এই টোকেনটি একটি সংখ্যা, যে টোকেনটি একটি স্ট্রিং আক্ষরিক, এই অন্যান্য টোকেনটি একটি সমতা অপারেটর।

কোনও পার্সার লেকসারের কাছ থেকে টোকেনের প্রবাহটি নেয় এবং এটিকে মূল পাঠ্য দ্বারা উপস্থাপিত (সাধারণত) প্রোগ্রাম উপস্থাপন করে এমন একটি বিমূর্ত সিনট্যাক্স ট্রিতে রূপান্তরিত করে।

শেষ আমি পরীক্ষা করেছিলাম, বিষয়টির সেরা বইটি ছিল "সংকলক: মূলনীতি, কৌশল এবং সরঞ্জামগুলি" সাধারণত "দ্য ড্রাগন বুক" নামে পরিচিত।


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

5
কেবল নিশ্চিত হতেই, আমি আপনার প্রস্তাবটি ঠক করছি না। "ড্রাগন বুক" সংকলক প্রযুক্তিতে আমার প্রথম বই ছিল, তবে এটি রাইথের বইয়ের সাথে তুলনা করা খুব কঠিন ছিল যা আপনি কয়েক ঘন্টার মধ্যে ছাঁটাই করতে পারেন book এরপরে আমার কাছে কয়েকটি বিকল্প ছিল কারণ এটি কেবলমাত্র আমার হাতে পাওয়া বই ছিল (এটি ১৯৯১, অ্যামাজন এবং ডাব্লুডাব্লুডাব্লুর আগে)। আমার কাছে এটি ছিল এবং জ্যাক ডব্লু। ক্রেণশো "লেটস বিল্ড এ কমপ্লায়ার" (ধন্যবাদ জ্যাক!) নামে উত্পাদিত পাঠ্য ফাইলগুলির একটি সংগ্রহ ছিল। নীতিগুলি সম্পর্কে আরও সম্পূর্ণ বোঝার জন্য এটি এখনও বই, তবে বেশিরভাগ প্রোগ্রামারদের কেবল একটি বাস্তব ভূমিকা প্রয়োজন introduction
আন্দ্রে আর্টাস

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

2
"চলুন একটি সংকলক তৈরি করুন" এখানে: সংযোজন.ইইসিসি / ক্রেনশো । আমি এখান থেকে লিঙ্কটি পেয়েছি: prog21. دادgum.com/30.html
রজার

1
@ পিথকোস: যদি সেগুলি কেবলমাত্র প্রতিবন্ধকতা হয় তবে আপনি যা বলেছিলেন তা হ'ল ফাংশনটি একটি নামবিহীন (গাণিতিক) ডোমেনে একটি ইনপুট নেয় এবং অন্য একটি নামহীন ডোমেনে উত্পাদন করে এবং আউটপুট দেয়, যেমন, এফ (এক্স) -> ওয়াই প্রেটি এর অনেক অর্থ আপনি এটিকে কেবল "ফাংশন" বলতে পারেন। যদি আপনি জোর দিয়ে থাকেন যে এক্স ডোমেনটি <স্ট্রিমঅফচ্যাকারেক্টর, ব্যাকরণ> এবং ওয়াই এর ডোমেনটি সেই সংখ্যার সাথে গাছের গাছ যা এটি ব্যাকরণের আকারকে প্রতিবিম্বিত করে, তবে F (এক্স, জি) -> টি এমন কিছু হবে যা আমি কল করব পার্সার। প্রায়শই আমরা জি এর প্রতি শ্রদ্ধা দিয়ে F কারি করি কারণ জি প্রায়শই পরিবর্তিত হয় না, সুতরাং এফ [জি] (এক্স) -> টি আপনি সাধারণত পার্সার হিসাবে দেখেন।
ইরা

18

উদাহরণ:

int x = 1;

কোনও লেক্সার বা টোকেনাইজার এটিকে টোকেনের 'ইন্ট', 'এক্স', '=', '1', ';' তে ভাগ করে দেবে।

কোনও পার্সার সেই টোকেনগুলি নেবে এবং সেগুলি কোনও উপায়ে বোঝার জন্য ব্যবহার করবে:

  • আমাদের একটি বিবৃতি আছে
  • এটি একটি পূর্ণসংখ্যার সংজ্ঞা
  • পূর্ণসংখ্যাটিকে 'x' বলা হয়
  • 'x' এর মান 1 দিয়ে শুরু করা উচিত

9
একটি লেক্সার নোট করবে যে "ইনট", "=", এবং ";" আরও অর্থ ছাড়াই টোকেনগুলি হ'ল, "x" একটি সনাক্তকারী নাম বা কিছু, মান "x" এবং "1" একটি পূর্ণসংখ্যা বা সংখ্যা, মান "1"। একটি টোকেনাইজার অগত্যা তা করবে না।
ডেভিড থর্নলি

5

আমি বলব যে একটি লেক্সার এবং একটি টোকেনাইজার মূলত একই জিনিস এবং তারা টেক্সটটিকে এর উপাদান অংশগুলিতে ('টোকেন') ভেঙে দেয়। পার্সার তার পরে ব্যাকরণ ব্যবহার করে টোকেনগুলি ব্যাখ্যা করে।

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


1
পিইজি পার্সারদের সাথে টোকেনাইজার এবং পার্সারের পার্থক্য আরও কম স্পষ্ট।
আন্দ্রে আর্টাস

0

( প্রদত্ত উত্তরে যুক্ত করা )

  • Tokenizer হবে এছাড়াও কোনো মন্তব্যও মুছে, এবং শুধুমাত্র আসতে টোকেন Lexer করতে।
  • Lexer হবে এছাড়াও ঐ টোকেন জন্য সুযোগ সংজ্ঞায়িত (ভেরিয়েবল / ফাংশন)
  • পার্সার তারপরে কোড / প্রোগ্রাম কাঠামো তৈরি করবে

1
হ্যালো @ ডাউনভোটার, আপনি আসলে কেন ডাউনটি করেছেন বলে আপনি বিশদ বর্ণনা করতে পারেন?
Koray Tugay

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

1) আমি "লেক্সার" এবং "টোকেনাইজার" এর মধ্যে আপনার সামগ্রীর পার্থক্য বুঝতে পারি না। আমি 50+ ভাষার জন্য পার্সার তৈরি করেছি এবং আমার কাছে কখনও কখনও দুটি পৃথক প্রক্রিয়া হয়নি যা উত্সের পাঠ্যটিকে পরমাণুতে বিভক্ত করে, তাই আমার কাছে এগুলি কেবল প্রতিশব্দ। 2) আপনি যদি সংকলন করছেন, মন্তব্য এবং সাদা স্থান স্পেসিফিকেশন লেক্সারের মধ্যে অর্থবোধ করে। যদি আপনি উত্স থেকে উত্স রূপান্তর সরঞ্জাম তৈরি করে থাকেন তবে আপনি মন্তব্যগুলি হারাতে পারবেন না কারণ তাদের অবশ্যই রূপান্তরিত পাঠ্যে প্রদর্শিত হবে। সুতরাং সর্বদা মন্তব্য অপসারণ করা ভুল; কেউ কীভাবে সাদা স্থান রক্ষা করতে পরিচালিত করে সে সম্পর্কে আমরা তর্ক করতে পারি। ...
ইরা

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

... 3) লেক্সারগুলি কেবল আশ্বাসজনক বিশ্রী পার্সারগুলিতে "স্কোপগুলি" সংজ্ঞায়িত করে যাদের সিনট্যাক্টিক অস্পষ্টতাগুলি পরিচালনা করতে খুব সময় লাগে। সি এবং সি ++ পার্সারগুলি ক্যানোনিকাল উদাহরণ; আমার আলোচনা stackoverflow.com/a/1004737/120163 এ দেখুন )। এটির (কুৎসিত) উপায়ে কাউকেই করতে হবে না। সুতরাং আমি আপনার উত্তরটি কেবল বিভ্রান্ত বলে মনে করি।
ইরা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.