শনাক্তকারীদের কেন একটি সংখ্যা দিয়ে শুরু করা উচিত নয়?


32

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


4
আপনার কী কোনও পরিবর্তনশীল নামের একক উদাহরণ রয়েছে যেখানে এটির স্বচ্ছতা এবং পাঠযোগ্যতার জন্য কোনও উপকার হবে?
সুরক্ষিত করুন

5
@ সিকিউর: 3 ডিস্প্ললাইন, 4 সিজনপিজা, 2 পিডিএফ কনভার্টার, 8 বিট ইন্ট, ...
ব্যবহারকারী অজানা

6
ফোর্থ এটি অনুমতি দেয়। বিল্ট-ইনগুলির মধ্যে: 2ডিপি, 2 ড্রপ, 2 এসডব্লিউ, 2> আর, 2 আর @, 2 আর>, 0 =, ইত্যাদি
পিটার মর্টেনসেন

টিসিএল যেমন করে তবে আমি মনে করি না যে কোনও মানক টিসিএল কমান্ডের কোনও নম্বর
জেকে

1

উত্তর:


51

সি / সি ++ এ, কোনও অক্ষরের পরে সংখ্যার সংখ্যার ধ্রুবক হিসাবে বিবেচনা করা হয় এবং স্ট্রিংটি অনুসরণ করে, ধ্রুবকের প্রকারকে যোগ্য করে তোলে। সুতরাং উদাহরণস্বরূপ (এগুলি ভিসি ++, তারা কতটা মানক তা নিশ্চিত নয়):

  • 0 - স্বাক্ষরিত পূর্ণসংখ্যা
  • 0 এল - স্বাক্ষরিত দীর্ঘ পূর্ণসংখ্যা
  • 0 ইউ - স্বাক্ষরবিহীন পূর্ণসংখ্যা
  • 0i64 - 64 বিট স্বাক্ষরিত পূর্ণসংখ্যা

সুতরাং ক) ড্যানিয়েল যেমন বলেছিলেন তেমন লেক্সারের পক্ষে এটি আরও সহজ তবে খ) এটি 0 0 এর পরিবর্তনশীল হতে পারে তবে 0u কখনও হয় না বলে এটি একটি স্পষ্ট পার্থক্য করে । প্লাসের অন্যান্য যোগ্যতা যেমন "আই 6464" এর পরে "এল" বা "ইউ" এর চেয়ে যুক্ত করা হয়েছিল এবং তারা প্রয়োজনে আরও সংযোজনের বিকল্পটি উন্মুক্ত রাখতে চান।


7
এছাড়াও, হেক্স নম্বরগুলি 0xd + আকারে লেখা হয় যেখানে d + আরও 1 টি হেক্স অঙ্ক 0-এফ হয় - সুতরাং 0xবিফ একটি পুরোপুরি বৈধ "নম্বর"।
tcrosley

20
আপনি ছেলেরা বুঝতে পারি যে আমি কোনও ভাষার বৈশিষ্টের জন্য যাচ্ছি না, তবে কেবলমাত্র পয়েন্টটি বর্ণনা করার জন্য কয়েকটি উদাহরণ সরবরাহ করেছে, তাই না?
DXM

6
পুনরায়: "তারা প্রয়োজনে আরও সংযোজনের বিকল্পটি উন্মুক্ত রাখতে চায়": এবং সি ++ 11 এমনকি আপনাকে নিজের যোগ করতে দেয়; দেখতে http://en.wikipedia.org/wiki/C++11#User-defined_literals
রুখ

2
আমি মনে করি না এটি সঠিক ব্যাখ্যা। "শনাক্তকারী একটি অঙ্ক দিয়ে শুরু করতে পারে না" নিয়মটি আলগোল, পাস্কাল এবং অন্যান্য ভাষার ক্ষেত্রে সত্য যেগুলি বর্ণের প্রত্যয়কে সংখ্যার ধ্রুবকগুলিতে অনুমতি দেয়নি।
ল্যারি গ্রিটজ

1
@ ল্যারিগ্রিটস: "ধারাবাহিকভাবে ফাঁক দিয়ে শব্দগুলি পৃথক করা দশম শতাব্দীর প্রায় এক সাধারণ রীতি হয়ে দাঁড়িয়েছিল এবং ১৯৫7 সাল পর্যন্ত স্থায়ী হয়েছিল, যখন ফোর্টরান অনুশীলন ত্যাগ করেছিল।" সান ফরটারের রেফারেন্স ম্যানুয়াল (উইকি থেকে) iki ফোর্টরানের নিজস্ব বিশেষ কারণ ছিল কারণ তারা সিদ্ধান্ত নিয়েছিলেন যে সাধারণভাবে স্থানগুলি wereচ্ছিক। আধুনিক ভাষাগুলি তাদের সাদা অংশের মতো। আপনি নিজেই আলগোলের সাথে রয়েছেন তবে আমি যে কতটা আধুনিক তা আমি নই। অন্যদিকে সি / সি ++ / সি # / এফ # সকলের প্রত্যয় রয়েছে।
ডিএক্সএম

49

জনগণের সুবিধাগুলি লেজার প্রয়োগ করছে। (না, গুরুত্বের সাথে, এটি এ সম্পর্কে Various বিভিন্ন ভাষার অন্যান্য কারণ রয়েছে, তবে শেষ পর্যন্ত তা নেমে আসে))


2
পিইজি বা অন্যান্য আধুনিক পার্সিং কৌশলগুলি ব্যবহার করে অঙ্কগুলি দিয়ে শুরু করে অবিচ্ছেদ্য আক্ষরিক এবং শনাক্তকারীদের মধ্যে পার্থক্য করা সহজ। এমনকি আদিম লেক্সার ব্যবহারকারী সংকলকরাও তাদের একই টোকেন বিভাগে রাখতে পারেন এবং পরে আলাদা করতে পারেন। এটি খুব বিশ্রী হবে যদি উদাহরণস্বরূপ 0fluআক্ষরিক এবং 0gluস্থানীয় সনাক্তকারী হয়।
ড্যানিয়েল লুবারভ

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

2
@ ড্যানিয়েলপিটম্যান: যে কোনও প্রকারের নির্ভরযোগ্য দ্ব্যর্থহীনতা করার জন্য আপনাকে অর্থশাস্ত্র বিশ্লেষণের প্রয়োজন হবে, যাতে লেক্সারে এটি করা যায় না। সিদ্ধান্ত গ্রহণকারীকে সিদ্ধান্তের বাইরে ধাক্কা দেওয়া পার্সারকে আরও জটিল করে তোলে এবং এতে কী লাভ? খুব খারাপ ব্যয় / উপকারের পরিস্থিতি ছাড়াও কেস পরিচালনা করার খুব ভাল উপায় নেই int 0u = 5; unsigned int x = 0u;তবে আপনি এই কোডটির ব্যাখ্যা সংজ্ঞায়িত করতে বেছে নিয়েছেন (সম্ভবত x == 0 বা x == 5), মানুষ বিভ্রান্ত হতে চলেছে অস্পষ্টতার কারণে এইভাবে সংকলকটি প্রয়োগ করা তুচ্ছ হলেও, একজন ভাল ডিজাইনার সম্ভবত এটি না করে।
জোরেেন

10
প্রধান সুবিধাটি আমার মাথায় পার্সারের জন্য, ভাষা স্রষ্টার পক্ষে নয়।
কোডসইনচাউস

2
এটি এখনও অনেকের কাছে অবাক হওয়ার মতো বিষয় অবলম্বন করে যে লিক্সিকাল বিশ্লেষণ সাধারণত একটি সংকলক / দোভাষীর ধীরতম পর্যায়ে থাকে a
হিপ্পিট্রেইল

20

নিম্নলিখিত 2 টি মামলা বিবেচনা করুন:

মামলা 1

ধরে নিই যে একটি শনাক্তকারী একটি সংখ্যা দিয়ে শুরু করতে পারে।

সুতরাং নীচের মতো একটি বিবৃতি বৈধ হবে (যেহেতু কোনও সনাক্তকারীতে 1 বা আরও বেশি অক্ষর থাকতে পারে):

int 3;

আমি যখন কোনও প্রোগ্রামে উপরের ভেরিয়েবলটি ব্যবহার করার চেষ্টা করি, এর ফলে সংকলক অস্পষ্ট হয়ে যাবে:

int 3, a;
3 = 5;
একটি = 3;

বিবৃতিতে a=33 এর ভূমিকা কী (এটি 5 এর মান সহ একটি পরিবর্তনশীল বা এটি 3 সংখ্যাটি)?

মামলা 2

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

  • ভেরিয়েবল সম্পর্কিত ভাষার নিয়ম যা বলে যে একটি ভেরিয়েবল 1 বা ততোধিক অক্ষর নিয়ে গঠিত হতে পারে তাকে একটি জটিল নিয়মে নতুন সংজ্ঞা দিতে হবে: ভেরিয়েবলের এক বা একাধিক অক্ষর থাকতে পারে এবং যদি এটি সংখ্যার সাথে শুরু না হয় তবে অবশ্যই অনন্য হতে হবে সংখ্যা (ইত্যাদি ..) দিয়ে শুরু করার সময় এটি একক অক্ষরের দৈর্ঘ্যের হতে পারে না

  • সমস্ত সংখ্যক (যেমন 333) এবং বৈধ বর্ণমালা প্রত্যয় (যেমন 34 এল) ভেরিয়েবলের নাম হিসাবে ব্যবহার করা হচ্ছে তখন সংকলকটিকে ত্রুটির ক্ষেত্রেগুলি পরীক্ষা করতে হবে এবং প্রতিবেদন করতে হবে। পাইথন এবং জেএসের মতো আলগাভাবে টাইপ করা ভাষাগুলিতে যেখানে আপনি ফ্লাইতে ভেরিয়েবলগুলি না জানিয়েই ব্যবহার করতে পারেন, সমস্ত সংখ্যার সাথে জড়িত বিশেষ কেসগুলি পরীক্ষা করা এমনকি অসম্ভব if (33==5)হতে পারে উদাহরণস্বরূপ, এখানে 33 টি ভ্রান্ত অঘোষিত ভেরিয়েবল হতে পারে যা ব্যবহারকারী ঘোষণা করেছেন। তবে সংকলক এটি সনাক্ত করতে এবং ত্রুটির প্রতিবেদন করতে সক্ষম হবে না।

এই সীমাবদ্ধতা তৈরি করা প্রোগ্রামারকে সনাক্তকারী নাম হিসাবে নম্বর ব্যবহার করা থেকে বিরত রাখবে।


2
এই যুক্তির অধীনে, সনাক্তকারীগুলিতে অক্ষরগুলি থাকতে পারে না কারণ তারা কীওয়ার্ডগুলির সাথে দ্ব্যর্থক হবে। আপনি কি কল্পনা করতে পারেন যে কত বিপর্যয়কর int char = floatহবে?
পাব্বি

4
@ পাব্বি: আমি দেখতে পাচ্ছি না যে আমি কিছুটা অজ্ঞান হয়ে বলেছিলাম যা আমি এখনও বের করতে পারি না। আপনার মন্তব্য মানে কি?
aml90

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

@ পাব্বি: অস্পষ্টতার দ্বারা আমি বোঝাতে চেয়েছিলাম যে কম্পাইলারটি জানতে পারবে না আমি কোন প্রসঙ্গে ভেরিয়েবল নামটি ব্যবহার করছি (এমনকি সংক্ষিপ্ত নজির ব্যবহার করছি)। উদাহরণস্বরূপ, এই কোডটি বিবেচনা করুন: int 3,a; 3=5; a=3; বিবৃতিতে a = 3, 3 কী সনাক্তকারী হিসাবে বা একটি সংখ্যা হিসাবে ব্যাখ্যা করা হয়? এটি দ্ব্যর্থহীনতার কারণ হয়। আশা করি এটা পরিষ্কার হয়ে গেছে।
aml90

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

11

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

তার ভাষা ডিজাইনার ভেবেছিলাম এটা যেমন শুধু সাধারণ সংখ্যা 1 টি পছন্দ সাংখ্যিক লিটারেল লিখতে পাবে চমৎকার হবে 1

কোনও ভাষার সিনট্যাক্স ডিজাইন করা বেশ সম্ভব হবে যেখানে সংখ্যার আক্ষরিক উদাহরণটি টিল্ডাসের জন্য কিছু উপায়ে উদ্ধৃত করা হয়েছিল সুতরাং এক নম্বর সংখ্যার জন্য সংখ্যাগত আক্ষরিককে ~ 1 enc হিসাবে এনকোড করা হয়েছিল এবং কোন শব্দটি নয় এবং উদ্ধৃতিতে আবদ্ধ নয় এমন একটি পরিবর্তনশীল নাম হিসাবে গণ্য হত ।

সুতরাং আপনি যেমন বিবৃতি কোড করতে পারে:

1 = ~2~
two = 1 * ~2~

তবে এছাড়াও:

2 = ~3~
six = 2 + 2

আপনি যে বাক্য গঠনটি দ্বিধাহীন এবং কোড অনুসরণ করা কঠিন তা বেছে নেবেন না।

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

010  // Octal 10 = 8;
0x10 // Hexadecimal 10 = 16;
5l   // long integer with decimal value 5
2.0d // double float with value 2

সুতরাং আপনি যদি ভেরিয়েবলের নাম সংখ্যা এবং বর্ণের সংমিশ্রণের পরে কোনও সংখ্যার সাথে শুরু করার অনুমতি দিয়ে থাকেন তবে অন্তত একটি অক্ষর অন্তর্ভুক্ত থাকে তবে আপনি প্রদত্ত গোষ্ঠীটি একটি ভেরিয়েবল নাম বা একটি সংখ্যার আক্ষরিক গঠিত কিনা তা নির্ধারণের সমস্যায় প্রোগ্রামারকে উপস্থাপন করবেন

2lll = 22 // OK
2ll  = 2  // compiler error

এই ধরনের অস্পষ্টতা কাউকে প্রোগ্রাম লিখতে বা পড়তে সহায়তা করে না।

একটি ঘনিষ্ঠভাবে সম্পর্কিত বাস্তব বিশ্বের উদাহরণের জন্য আপনি PL / 1 ভাষার দিকে নজর রাখতে পারেন যার ডিজাইনাররা ভেরিয়েবলের নাম হিসাবে কীওয়ার্ড ব্যবহার করতে সক্ষম হবেন বলে একটি ভাল ধারণা ছিল যাতে:

IF THEN THEN THEN = ELSE; ELSE ELSE = THEN;
IF IF THEN ELSE = IF; ELSE THEN = ELSE;
DO WHILE (WHILE = DO); END = WHILE + DO; END;

বৈধ কোড যা সংকলন এবং কার্যকর করে।


সি ইউনিক্সের জন্য বহনযোগ্য সমাবেশ হিসাবে ডিজাইন করা হয়েছিল। ইউনিক্সটি মূলত একটি 18-বিট মেশিনের জন্য ডিজাইন করা হয়েছিল, যেখানে 8/16/32-বিট মেশিনের মানগুলি মুদ্রণের জন্য হেক্টস একইভাবে মুদ্রণের জন্য উপযুক্ত fit অতএব তাদের আসলে অষ্টাল প্রয়োজন।

বিট টুইডলিংয়ের জন্য (ওআর, এক্সওআর, এ্যান্ড, না) এবং প্রয়োগকারী ডিভাইস ড্রাইভারদের জন্য আক্ষরিকের সঠিক আকারের পাশাপাশি মানটিরও নির্দিষ্ট করা গুরুত্বপূর্ণ!
জেমস অ্যান্ডারসন

10

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

if if .eq. then then = else else else = endif endif
K  I   K   K    I      I    K    I      I     K

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

do 10 i = 1,10

এটি:

do 10 i = 1.10

প্রথমটি একটি ল লুপ - 10 বার কোডের একটি ব্লককে পুনরাবৃত্তি করে। দ্বিতীয়টি, তবে কমাটি দশমিক বিন্দুতে পরিবর্তিত হয়েছিল, সুতরাং এটি 1.10নামের একটি ভেরিয়েবলের মান নির্ধারণ করে do 10 i

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

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

প্রারম্ভিক বেসিক, উদাহরণস্বরূপ, মূলত বলেন আপনি এমনকি একটি কী শব্দ ব্যবহার করতে পারছিল না অংশ একটি শনাক্তকারীর - উদাহরণস্বরূপ, fora=1যেমন পার্স করা হবে for a = 1(যেমন, শুরুতে forলুপ, না একটি কাজ)। এটি স্পষ্টতই যথেষ্ট অভিযোগ উত্পন্ন করেছিল যে এটি খুব বেশি দিন স্থায়ী হয়নি। একটি অঙ্ক দিয়ে একটি শনাক্তকারী শুরু করার নিয়ম স্পষ্টতই প্রচুর অভিযোগ উত্পন্ন করেনি, তাই এটি ব্যবহার করা অব্যাহত রয়েছে (কমপক্ষে বেশিরভাগ ভাষায়)।


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

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

1

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

সুতরাং, সম্মেলনটি প্রজন্মের প্রজন্মের অভ্যস্ত হয়ে ওঠে।


1

প্রোগ্রামিং ভাষার জন্য এটি কোনও যৌক্তিকভাবে প্রয়োজনীয় নিয়ম নয় বরং অনেক ভাষা ডিজাইনারদের দ্বারা ব্যবহৃত কনভেনশন।

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

01234567890123456789 01234567890123456789 01234567890123456789

decl symbol          12345                
assign value         12345                12345
decl symbol          99999                
assign value         99999                12345
push                 12345
push                 99999
add
print top

এই কোডটি সি হিসাবে অনুবাদ করা যেতে পারে নীচে:

int i12345 = 12345;
int i99999 = 12345;
printf("%d", i12345+i9999);

এখানেই শেষ. এটি অর্থহীন এবং নম্বর-না-শনাক্তকারীদের নিয়মটিও যৌক্তিক ভিত্তিতে অর্থহীন।


0

"লেসারের সুবিধার্থে" পাশাপাশি, "পাঠকের সুবিধার্থে" বিবেচনা করাও উপযুক্ত বলে আমি মনে করি।

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


0

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

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