এমন কোনও সংকলক আছে যা তাদের নিজেরাই সিনট্যাক্স ত্রুটিগুলি ঠিক করার চেষ্টা করে? [বন্ধ]


15

আমি কিছুক্ষণ আগে শুনেছিলাম যে সেখানে একটি সংকলক থাকত যা প্রসঙ্গে বিশ্লেষণ করে এবং উদ্দেশ্য কী তা নির্ধারণ করে সিনট্যাক্স ত্রুটিগুলি সমাধান করার চেষ্টা করেছিল।

এই ধরনের সংকলক কি আসলেই বিদ্যমান? স্পষ্টতই এর ব্যবহারিক মূল্য খুব সামান্য রয়েছে তবে এটি খেলতে এবং শিখতে খুব আকর্ষণীয় হবে।


3
IntelliSense এই বিভাগে পড়ে? অনেক সংকলকগুলির প্রত্যাশিত [সেমিকোলন] এর মতো ত্রুটি রয়েছে।
রবার্ট হার্ভে

1
@ রবার্ট: না, তবে এটি একটি ভাল বিষয়।
নাথান ওসমান

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

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

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

উত্তর:


28

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

সুতরাং, না, এরকম কোনও সংকলক নেই, সত্যই, কারণ প্রশ্নটি বোঝায় না। কিছু নিয়মের সেট অনুসারে কী সিনট্যাক্স ত্রুটিগুলি বোঝানো হয়েছে তা অনুমান করে কেবল সিনট্যাক্সের অংশ হয়ে যায়।

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


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

পার্ল উত্স কোড আকারের জন্য শব্দভাণ্ডার ত্যাগ করে।
নাথান ওসমান

@ জর্জ এডিসন: এটি হয় টোটোলজি বা একটি বৈপরীত্য।
জন পুরী

বা একটি গভীর অন্তর্দৃষ্টি। :)
লেনার্ট রেজেব্রো

23

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

এর মতো একটি সংকলক সম্ভবত এমন কিছু যা খুব ইচ্ছাকৃতভাবে তৈরি হয়নি।


5
আমি জানি। এই ধরনের সংকলক সংকলনের জন্য কোনও ব্যবহার করতে পারে না, তবে ধারণাটি বেশ আকর্ষণীয় এবং সম্ভাবনাময় শেখার রয়েছে।
নাথান ওসমান

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

আমি এই জাতীয় সংকলক ব্যবহার করব না। এটি 'কালো যাদু' শিরোনামে আসে।
মাইকেল কে

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

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

12

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

তবে সাধারণত ত্রুটি পুনরুদ্ধার বৈশিষ্ট্যটি কেবল সম্পাদনার সময় ব্যবহৃত হয়; এটি "মাইনলাইন" পরিস্থিতিতে দৃশ্যের প্রকৃত সংকলনের জন্য অনুমতি দেওয়ার পক্ষে খুব একটা অর্থবোধ করে না।

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

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

পিটার টর, যিনি সেদিন ফিচারটি ফিরিয়ে দিয়েছিলেন, তিনি 2003 থেকে এই ব্লগ পোস্টে সংক্ষেপে আলোচনা করেছেন ।

যদিও আমরা JScript .NET ইঞ্জিনের স্ক্রিপ্ট হোস্টিং এপিআইয়ের মাধ্যমে এই বৈশিষ্ট্যটি উদ্ভাসিত করেছি, আমি কখনও এটি ব্যবহার করে এমন কোনও সত্যিকারের গ্রাহককে জানি না।


আমি আশা করি আমার নিয়োগকর্তার মতো পরীক্ষা করার মতো সংস্থান রয়েছে; আমরা রাতে ইউনিট পরীক্ষাও চালাই না কারণ সংযোজন করার জন্য অনেকগুলি বৈশিষ্ট্য রয়েছে এবং বাগগুলি ঠিক করা রয়েছে :(
কাজের

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

1
@ জোব: সাধারণ জ্ঞান হ'ল আপনি যদি নিয়মিত ইউনিট পরীক্ষা চালান না, আপনার আরও অনেক বাগ ঠিক করতে হবে
এরিক লিপার্ট

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

10

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

এটি বলার অপেক্ষা রাখে না যে এটি আরও ভাল কাজ করতে পারে না। যদি এটি নিম্নলিখিত রেখার দিকে চেয়ে থাকে তবে প্রোগ্রামারের উদ্দেশ্য সম্পর্কে এটি আরও ভাল অনুমান করতে সক্ষম হতে পারে তবে দিনের শেষে যদি সিনট্যাক্সটি একাধিক বৈধ উপায় থাকতে পারে তবে সত্যিকারের বিকল্প নেই no প্রোগ্রামার স্পষ্ট থাকার জন্য।


1
আমি আন্তরিকভাবে জাভাস্ক্রিপ্ট আধা-কোলন সন্নিবেশ বৈশিষ্ট্যটির সাথে একমত - সম্পূর্ণ অকেজো।
নাথান ওসমান

7

আমার কাছে মনে হচ্ছে যে যদি কোনও সংকলক ভুল বাক্য গঠন ঠিক করতে পারে তবে সেই বাক্য গঠনটি ভাষায় নথিভুক্ত করা উচিত।

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

int x = 5 6;

হওয়ার কথা ছিল:

int x = 5 + 6;

এটা ঠিক যেমন সহজে নিম্নলিখিত কোন হতে পারে: 56, 5 - 6, 5 & 6। সংকলকটি জানার উপায় নেই।

সেই প্রযুক্তি এখনও বিদ্যমান নেই।


1
এ জাতীয় প্রযুক্তি থাকতে পারে না। মন পড়ার অনুমতি নেই; সমস্ত নির্দেশাবলী অবশ্যই দ্ব্যর্থহীনভাবে কোড থেকে আসতে হবে।
জব

সত্য, তবে আমি যা বোঝাতে চেয়েছি তা হ'ল "এমন কোনও সংকলক আছে যা প্রসঙ্গে ভিত্তিতে অনুমান করে অবৈধ সিনট্যাক্স সংশোধন করার চেষ্টা করে?" সংকলকটি অবৈধ সিনট্যাক্স সংশোধন করে সিনট্যাক্সটি বৈধ করে না। এছাড়াও, আমি বুঝতে পারি যে কোড বিকাশের জন্য এই জাতীয় সরঞ্জামটি অকেজো হবে।
নাথান ওসমান 0

6

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

এরিক লিপার্ট অনুমান হিসাবে, এইগুলি অনেকগুলি আইডিই দ্বারা পরিচালনা করা হয়, সংকলকটি নয়। এটি আপনাকে স্বয়ংক্রিয় বিটগুলি আপনার জন্য কী আঁকতে চেষ্টা করছে তা দেখতে দিন।

আমি যে কৌশলটিকে এখন প্রধান বলে মনে করি তা সংকলকটি আলগা করার পরিবর্তে ধারাবাহিক ভাষা সংশোধন করা: এটি যদি সত্যই কিছু হয় যা সংকলকটি স্বয়ংক্রিয়ভাবে বের করতে পারে তবে তার চারপাশে একটি সুসংজ্ঞাত ভাষা গঠন প্রবর্তন করুন।

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

যা তখন আমাকে ভাবতে বাধ্য করে: বেশিরভাগ সি স্টাইলের ভাষা ইতিমধ্যে কিছুটা হলেও এটি করে। স্বয়ংক্রিয়ভাবে সন্ধান করা যায় এমন জিনিসগুলির জন্য, কেবল বাক্যটিকে সংশোধন করুন:

 if (true == x)
 {
    dothis();
 }
 else
 {
    dothat();
 }

এটিকে হ্রাস করা যেতে পারে:

if (true == x)
    dothis();
else
    dothat();

শেষ পর্যন্ত, আমি মনে করি এটি এটিতে নেমে আসে: প্রবণতা হ'ল আপনি সংকলকটিকে "স্মার্ট" বা "আলগা" করবেন না। এটি এমন ভাষা যা চৌকস বা আলগা হয়।

এছাড়াও অতিরিক্ত "সহায়তা" বিপজ্জনক হতে পারে যেমন ক্লাসিক "যদি" বাগ:

if (true == x)
    if (true == y)
       dothis();
else
    dothat();

এটি লক্ষ করা উচিত যে এক্সএইচটিএমএল এইচটিএমএল এর দুর্বল স্পেসিফিকেশন তৈরি করেছে এমন গণ্ডগোলের জন্য একটি সমাধান সরবরাহ করেছিল।
নাথান ওসমান

2
if (x && y) dothis(); else dothat();কিছুটা ভাল লাগবে।
চাকরি

1
যখনই কেউ বিয়ের তুলনা করে trueবা বিড়াল মারা যায় false
জেনসজি

2

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


2
এই সংকলকগুলি অবিরত থাকবে, তবে আরও ত্রুটিগুলি অনুসন্ধান করার চেষ্টা করার উদ্দেশ্যে তারা কেবল চালিয়ে যাবে, যাতে আপনি (সম্ভাব্য) পুনরায় জমা দেওয়ার আগে বেশ কয়েকটি জিনিস ঠিক করতে পারেন। আধুনিক পিসিগুলি যথেষ্ট দ্রুতগতি সম্পন্ন যে কোনও "ইন্টারেক্টিভ" সংকলকটির পক্ষে প্রথম সিনট্যাক্স ত্রুটিতে থামানো এবং আপনাকে সম্পাদক হিসাবে ফেলে দেওয়া সম্পূর্ণরূপে সম্ভব। (এবং প্রকৃতপক্ষে, মূল টার্বো পাস্কেল, ১৯৮০ এর দশকের গোড়ার দিকে, ঠিক
সেভাবেই

1
হ্যাঁ, আমি মনে করি আইবিএম পিএল / আমি সংযোজনকারী সংযোজনকারী অনুপস্থিত বিগিন এবং এন্ড স্টেটমেন্টগুলি মাঝে মাঝে সরবরাহ করবো, আইআরটিএস এটি অনুপস্থিত অর্ধপরিমাণ সরবরাহ করবে।
টিএমএন

1

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

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

const double oneTenth = 0.1;
const float  oneTenthF = 0.1f;
...
float f1 = oneTenth;
double d1 = oneTenthF;

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

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


0

সিনট্যাক্স ত্রুটিগুলি সংশোধন করা বিশেষত শক্ত। অনুপস্থিত অধিকারের ক্ষেত্রে বিবেচনা করুন ): আমরা জানি যে আমরা কোডটি সন্নিবেশ করিয়ে সংশোধন করতে পারি, তবে এমন অনেকগুলি জায়গা রয়েছে যেখানে আমরা একটি সন্নিবেশ করতে পারি এবং সিন্ট্যাক্টিকভাবে সঠিক প্রোগ্রামটি পেতে পারি।

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


-1

এই ধরনের সংকলক হ'ল এটি যে কোনও ভাষা সংকলন করে একটি স্বাচ্ছন্দ্য, অ-মানক বাস্তবায়ন হবে।


-2

এটি একাধিকবার চেষ্টা করা হয়েছে, তবে প্রায়শই এটি পছন্দসই প্রভাব অর্জন করতে পারে না: মনে করুন HAL 9000 বা গ্লাডস।


-3

সি তে, আপনি মান অনুসারে অ্যারে পাস করতে পারবেন না, তবুও সংকলক আপনাকে লেখার অনুমতি দেয়:

void foo(int array[10]);

যা নিঃশব্দে আবার লিখে দেওয়া হয়:

void foo(int* array);

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

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