অস্পষ্ট ব্যাকরণগুলি খারাপ কেন?


30

আমি বুঝতে পারি যে যদি 2 বা ততোধিক বাম বা ডান ডেরাইভেশন গাছ উপস্থিত থাকে তবে ব্যাকরণটি দ্ব্যর্থক, তবে কেন এটি এত খারাপ যে সবাই এ থেকে মুক্তি পেতে চায় তা বুঝতে আমি অক্ষম।




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

3
"প্রত্যেকে এ থেকে মুক্তি পেতে চায়"। ঠিক আছে, এটা ঠিক সত্য নয়। বাণিজ্যিকভাবে প্রাসঙ্গিক ভাষায়, ভাষা বিকশিত হওয়ার সাথে সাথে অস্পষ্টতা যুক্ত হওয়া দেখা যায়। উদাহরণস্বরূপ, সি ++ ইচ্ছাকৃতভাবে std::vector<std::vector<int>>2011 সালে অস্পষ্টতা যুক্ত করেছিল , যার >>আগে একটি স্পেসের প্রয়োজন হত । মূল অন্তর্দৃষ্টিটি হ'ল এই ভাষাগুলিতে বিক্রেতাদের তুলনায় আরও অনেক বেশি ব্যবহারকারী রয়েছে, সুতরাং ব্যবহারকারীদের জন্য একটি সামান্য বিরক্তি স্থির করে প্রয়োগকারীরা অনেক কাজকে ন্যায্যতা দেয়।
ম্যাসাল্টারস

উত্তর:


52

পাটিগণিতের এক্সপ্রেশনগুলির জন্য নিম্নলিখিত ব্যাকরণটি বিবেচনা করুন:

XX+XXXXXX/Xvarconst
নিম্নোক্ত অভিব্যক্তিটি বিবেচনা করুন:
abc
এর মান কী? এখানে সম্ভাব্য দুটি পার্স গাছ রয়েছে:

(এক্স - এক্স) - এক্স এখানে চিত্র বর্ণনা লিখুন

বাম দিকের একটি অনুসারে, আমাদের abc হিসাবে (ab)c ব্যাখ্যা করা উচিত, যা সাধারণ ব্যাখ্যা। ডানদিকে থাকা ব্যক্তির মতে, আমাদের এটিকে a(bc)=ab+c হিসাবে ব্যাখ্যা করা উচিত , যা সম্ভবত উদ্দেশ্য ছিল না।

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


সিনট্যাক্স ট্রি জেনারেটর ব্যবহার করে উত্পন্ন গাছগুলি পার্স করুন ।


12
@ হিরাকমনোডাল সিনট্যাক্স দ্ব্যর্থহীন যে সত্য তা আসলে বাস্তব বিষয় নয়। সমস্যাটি হল দুটি পৃথক পার্স গাছের আচরণ আলাদা। যদি আপনার ভাষাতে একটি দ্ব্যর্থতার ব্যাকরণ থাকে তবে অভিব্যক্তির জন্য সমস্ত পার্স গাছ যথার্থভাবে সমতুল্য হয় তবে সমস্যা হবে না (উদাহরণস্বরূপ ইউভাল উদাহরণটি ধরুন এবং আপনার একমাত্র অপারেটর ক্ষেত্রে বিবেচনা করুন +)।
বাকুরিউ

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

কিছু কিছু ভাষা আজকাল সংখ্যার অতিরিক্ত সংখ্যার অতিরিক্ত প্রবাহের জন্য পরীক্ষা করে, সুতরাং এমনকি পূর্ণসংখ্যার জন্য একটি + বি + সিও মূল্যায়নের ক্রমের উপর নির্ভর করে।
gnasher729

3
আরও খারাপ, কিছু ক্ষেত্রে ব্যাকরণ বিকল্প অর্থ অর্জনের কোনও উপায় সরবরাহ করে না। আমি এটিকে কোয়েরি ভাষায় দেখেছি, যেখানে পালানোর ব্যাকরণের পছন্দ (উদাহরণস্বরূপ, এটি থেকে বাঁচতে বিশেষ চরিত্রের দ্বিগুণ) নির্দিষ্ট প্রশ্নগুলি প্রকাশ করা অসম্ভব করে তোলে।
মনিকা

12

অন্যান্য বিদ্যমান উত্তরগুলির বিপরীতে [ 1 , 2 ], প্রকৃতপক্ষে প্রয়োগের ক্ষেত্র রয়েছে, যেখানে অস্পষ্ট ব্যাকরণগুলি কার্যকর । প্রাকৃতিক ভাষা প্রক্রিয়াকরণের ক্ষেত্রে (এনএলপি), যখন আপনি আনুষ্ঠানিক ব্যাকরণ দিয়ে প্রাকৃতিক ভাষা (এনএল) পার্স করতে চান, আপনি সমস্যাটি পেয়েছেন যে এনএল বিভিন্ন স্তরের সহজাতভাবে অস্পষ্ট [কোহ 18, সিএফ থেকে অভিযোজিত)। 6.4]:

  • সিনট্যাকটিক অস্পষ্টতা:

    পিটার লাল স্পোর্টসের গাড়িতে করে লোকটিকে তাড়া করলেন

    পিটার নাকি লাল স্পোর্টসের গাড়ীর লোক ছিল?

  • শব্দার্থক অস্পষ্টতা:

    পিটার তীরে গেল

    কোন ব্যাংক বসে বা একটি ব্যাংক থেকে টাকা তুলতে হবে?

  • ব্যবহারিক অস্পষ্টতা:

    দু'জন লোক দুটি ব্যাগ বহন করল

    তারা ব্যাগগুলি একসাথে নিয়েছিল বা প্রতিটি মানুষ দুটি ব্যাগ বহন করেছিল?

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

  1. অস্পষ্ট ব্যাকরণের সাথে পার্স এনএল
  2. প্রতিটি ফলাফলিত এএসটি-র জন্য: অস্পষ্ট অর্থপূর্ণ অর্থ তৈরি করতে এবং পদক্ষেপ 1 থেকে অসম্ভব সিনট্যাকটিক দ্বিধা প্রকাশ করতে মডেল জেনারেশন চালান
  3. প্রতিটি ফলাফলের মডেলের জন্য: এটি আপনার ক্যাশে সংরক্ষণ করুন।

আপনি প্রতিটি বাক্যটির জন্য এই পাইপলাইনটি করেন। আপনার পাঠানো একই বই থেকে যত বেশি পাঠ্য বলা যায়, তত বেশি আপনি অসম্ভব অনাবৃষ্টি মডেলগুলিকে বাতিল করতে পারবেন, যা পূর্ববর্তী বাক্যগুলি থেকে ৩ য় ধাপ অবধি বেঁচে ছিল।

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

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


তথ্যসূত্র

[কোহ 18]: মাইকেল কোহলহেস। "লজিক ভিত্তিক প্রাকৃতিক ভাষা প্রক্রিয়াজাতকরণ। শীতকালীন সেমিস্টার 2018/19। বক্তৃতা নোট।" ইউআরএল: https://kwarc.info/teaching/LBS/notes.pdf । কোর্সের বর্ণনার URL: https://kwarc.info/courses/lbs/ (জার্মান ভাষায়)

[কোহ 18, সিএইচ। 5]: [কোহ 18] এর 5 ম অধ্যায়, "প্রয়োগকারী খণ্ডগুলি: ব্যাকরণ ও যৌক্তিক কাঠামো" দেখুন

[কোহ 18, সিএইচ। .4.৪] অধ্যায় 18.৪ দেখুন, "দ্ব্যর্থতার গণ্য ভূমিকা", [কোহ ১৮]


ধন্যবাদ একটি টন .. আমারও একই সন্দেহ ছিল এবং আপনি এটি সাফ করলেন .. :)
হিরাক মোড়ল

1
উপযুক্ত সংখ্যক মহিষের জন্য মহিষ মহিষ মহিষ মহিষের মহিষের সমস্যাগুলির কথা উল্লেখ করবেন না
হ্যাগেন ভন ইটজেন

আপনি লিখুন, "বিপরীতে," তবে আমি যা উত্তর দিয়েছি তা থেকে মুদ্রার অন্য দিকে কল করব call তাদের অস্পষ্ট ব্যাকরণগুলির সাথে প্রাকৃতিক ভাষাগুলি পার্স করা এত কঠিন যে traditionalতিহ্যগত পার্সাররা এটি করতে পারে না!
ডেভিস্লোর

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

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

10

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

কিছু সীমাবদ্ধ ডোমেনে আপনি সম্ভবত প্রমাণ দিয়ে দূরে যেতে সক্ষম হবেন যে কোনও এক্সপ্রেশনকে বিশ্লেষণের সমস্ত সম্ভাব্য উপায় সমতুল্য (উদাহরণস্বরূপ, কারণ তারা কোনও সহযোগী ক্রিয়াকলাপকে উপস্থাপন করে)। (a + b) + c = a + (b + c)।


9

নেই IF a THEN IF b THEN x ELSE yমানে

IF a THEN
    IF b THEN
        x
    ELSE
        y

অথবা

IF a THEN
    IF b THEN x
ELSE
    y

? একে একে ঝাঁকুনির সমস্যা অন্যরকম


1
এটি একটি উত্তম উদাহরণ যা দেখায় যে এমনকি একটি দ্বি-দ্বিবিজ্ঞান ব্যাকরণ (যেমন জাভা, সি, সি ++, ...) মানুষের দৃষ্টিভঙ্গি থেকে আপাত (!) অস্পষ্টতাকে অনুমতি দেয় allows যদিও আমরা আনুষ্ঠানিকভাবে এবং কম্পিউটেশনালি সুক্ষ্ম, আমরা এখন আরও একটি ইউএক্স / বাগ-মুক্ত বিকাশ সমস্যা পেয়েছি।
কমফ্রিচ

5

উদাহরণস্বরূপ সি ++ এ সর্বাধিক ভেক্সিং পার্স নিন:

bar foo(foobar());

এই একটি ফাংশন ঘোষণা হয় fooধরনের bar(foobar())(প্যারামিটার একটি ফাংশন একটি ফিরতি পয়েন্টার foobarবা, একটি পরিবর্তনশীল ঘোষণা) fooধরনের intএবং একটি ডিফল্ট সঙ্গে সক্রিয়া সক্রিয়া foobar?

প্যারামিটার তালিকার ভিতরে থাকা এক্সপ্রেশনটি কোনও ধরণের হিসাবে ব্যাখ্যা করা না গেলে প্রথমটি ধরে নিয়ে এটি সংকলকগুলিতে পৃথক হয়।

আপনি যখন এই জাতীয় দ্বিধাগ্রস্ত ভাবটি পান তখন সংকলকের 2 টি বিকল্প থাকে

  1. অনুমান করুন যে অভিব্যক্তিটি একটি নির্দিষ্ট অনুভূতি এবং ব্যাকরণের সাথে কিছু বিড়ম্বনা যুক্ত করে যাতে অন্যান্য অনুভূতি প্রকাশ করা যায়।

  2. ত্রুটি আউট এবং উভয় উপায়ে বিশৃঙ্খলা প্রয়োজন

প্রথমটি স্বাভাবিকভাবেই পড়ে যেতে পারে, দ্বিতীয়টির প্রয়োজন সংকলক প্রোগ্রামার অস্পষ্টতা সম্পর্কে জানে knows

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


5

আমি মনে করি যে প্রশ্নটিতে এমন একটি ধারণা রয়েছে যা কেবলমাত্র সীমান্তরেখায় সঠিক।

বাস্তব জীবনে এটি অস্পষ্ট ব্যাকরণগুলির সাথে বেঁচে থাকা খুব সাধারণ, যতক্ষণ না তারা খুব দ্ব্যর্থহীন (যতক্ষণ না বলা যায়)।

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

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

একটি সাধারণ পরিবর্তন বা হ্রাস বিরোধ সাধারণত এই সাধারণ আদেশের ক্ষেত্রে দেখা দেয় (নন-টার্মিনালের জন্য ক্যাপগুলি ব্যবহার করে এবং টার্মিনালের জন্য লোয়ার-কেস ব্যবহার করে):

A -> B | c
B -> a | c

যখন আমরা একটিের মুখোমুখি হই তখন cএকটি দ্বিধাগ্রস্থতা থাকে: আমরা কি cসরাসরি হিসাবে Aএকটিকে পার্স করা উচিত, বা আমরা এটিকে একটি হিসাবে পার্স করা উচিত B, যার ফলস্বরূপ এটি একটি A? এর মতো ক্ষেত্রে, ইয়্যাক এবং এগুলি সহজ / খাটো রুটটি বেছে নেবে এবং -> -> রুটে যাওয়ার পরিবর্তে cসরাসরি হিসাবে পার্স করবে । এটি ভুল হতে পারে, তবে যদি তা হয় তবে এর অর্থ সম্ভবত আপনার ব্যাকরণে আপনার খুব সাধারণ ত্রুটি রয়েছে এবং আপনার সম্ভাবনা হিসাবে কোনও বিকল্পের অনুমতি দেওয়া উচিত নয় ।AcBAcA

এখন, বিপরীতে, আমাদের এর মতো আরও কিছু থাকতে পারে:

A -> B | C
B -> a | c
C -> b | c

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

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


মানুষ, ইচ্ছে করে আমি 5 মাস আগে শিফট-হ্রাস বিরোধগুলির এই দুর্দান্ত ব্যাখ্যাটি দিতাম! ^^; +1
হোটেলকালিফোর্নিয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.