"সিনট্যাক্স" এবং "সিনট্যাকটিক চিনির" মধ্যে পার্থক্য কী?


45

পটভূমি

সিন্ট্যাকটিক চিনির উইকিপিডিয়া পৃষ্ঠাতে বলা হয়েছে:

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

সিনট্যাকটিক সুগার এবং সিনট্যাক্সের মধ্যে পার্থক্য কী তা আমি সত্যিই বুঝতে পারি না।

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

একই উইকিপিডিয়া পৃষ্ঠা থেকে:

সংকলক, স্থির বিশ্লেষক এবং এর মতো ভাষা প্রসেসরগুলি প্রায়শই প্রসেসিংয়ের আগে সুগার্ট কনস্ট্রাক্টগুলি আরও মৌলিক কাঠামোতে প্রসারিত করে, এমন একটি প্রক্রিয়া যা কখনও কখনও "ডিজুগারিং" নামে পরিচিত।

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

এই সাইটের একটি খুব সম্পর্কিত প্রশ্ন "সিনট্যাকটিক চিনির কঠোর সংজ্ঞা?" একটি উত্তর যা শুরু হয়:

আইএমএইচওও আমি মনে করি না সিনট্যাকটিক চিনির জন্য আপনার একটি সংজ্ঞা থাকতে পারে, কারণ বাক্যাংশটি বিএস এবং সম্ভবত এমন লোকেরা ব্যবহার করবেন যা "রিয়েল অপারেটিং সিস্টেমগুলি" "রিয়েল অপারেশন সিস্টেমগুলি" ব্যবহার করে "রিয়েল প্রোগ্রামার" সম্পর্কে কথা বলে থাকে

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

প্রশ্নের হৃদয়

সুতরাং ... প্রশ্নের সংক্ষিপ্ত সংস্করণ:

  • সিনট্যাক্স এবং সিনট্যাকটিক চিনির মধ্যে একটি বাস্তব পার্থক্য আছে?
  • কার কাছে তাতে কিছু যায় আসে না?

চিন্তার অতিরিক্ত খাবার

বিষয়ের দ্বন্দ্বের উপর বোনাস:

উইকিপিডিয়া পৃষ্ঠায় একটি উদাহরণ দেওয়া হয়েছে:

উদাহরণস্বরূপ, সি ভাষায় a[i]স্বরলিপিটি সিনট্যাকটিক চিনি*(a + i)

যেখানে উপরোক্ত লিঙ্কযুক্ত প্রশ্নের অন্য উত্তর একই উদাহরণটি সম্পর্কে কথা বলছে:

এখন বিবেচনা করুন a[i] == *(a + i)। যে কোনও সি প্রোগ্রাম সম্পর্কে ভাবুন যা কোনও অ্যারেটিভ উপায়ে অ্যারে ব্যবহার করে।

এবং সংক্ষিপ্তসার যে:

[]স্বরলিপি এই বিমূর্ততা সমাধা। এটি সিনট্যাকটিক চিনি নয়।

একই উদাহরণের জন্য বিপরীত উপসংহার!


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

7
একটি সমস্যা হ'ল কিছু লোক মনে হয় "সিনট্যাকটিক চিনি" একটি নোংরা শব্দ, যখন এটি হয় না। আপনি কোনও সিস্টেমে যুক্ত প্রতিটি ক্রিয়াকলাপ বা শ্রেণিটিকে "সিনট্যাকটিক চিনি" হিসাবে বিবেচনা করা যেতে পারে, যেহেতু তারা এমন ধারণা তৈরি করেন যা ভাষায় স্পষ্টভাবে প্রকাশযোগ্য কিছুটা (বা অনেক) প্রকাশ করা সহজ easier
জোরিস টিমারম্যানস

স্পষ্টতই, এটি আপনার পক্ষে গুরুত্বপূর্ণ।
শশাহীন

11
শেষ পর্যন্ত, এগুলি কেবলমাত্র বিদ্যুতের উপরে সিনট্যাটিক চিনি।
অ্যান্টনি পেগ্রাম

উত্তর:


34

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

অনুশীলনে, সিনট্যাকটিক চিনি কেবলমাত্র কোনও ভাষায় যুক্ত সিনট্যাক্সের ব্যবহারের সহজলভ্যতার জন্য ইনফিক্স lhs + rhsমানচিত্র তৈরির মতো বর্ণনা করতে ব্যবহৃত হয় lhs.Add(rhs)। আমি সি এর অ্যারে সূচকে সিনট্যাকটিক চিনির হিসাবে বিবেচনা করব।

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


"আপনি সেই কার্যকারিতাটিতে পৌঁছার সাথে সাথেই অন্য যে কোনও সিনট্যাক্স আপনাকে একই কাজ করতে দেয় তা চিনিকে বিবেচনা করা হয়।": সিনট্যাকটিক চিনির পক্ষে এটি যথেষ্ট নয়, কারণ একই ফাংশনটি গণনা করা অন্য কোনও প্রোগ্রাম সিনট্যাকটিক চিনি হতে পারে । সুগারড এবং ডি-সুগার্ড প্রোগ্রামের অবশ্যই শব্দার্থকতা থাকতে হবে
জর্জিও

3
@ জর্জিও "এই দুটি প্রোগ্রাম একই শব্দার্থতত্ত্ব" থেকে পৃথক "এই দুটি প্রোগ্রাম একই ফাংশন গণনা" কিভাবে? এগুলি বাদ দিয়ে আপনি প্রোগ্রামগুলিতে মনোনিবেশ করছেন, সিনট্যাকটিক উপাদানগুলিতে নয়। পুরো প্রোগ্রাম সিনট্যাকটিক চিনি হতে পারে না। একটি অপারেটর, এক ধরণের বিবৃতি ইত্যাদি সিনট্যাকটিক চিনি হতে পারে।

@ জর্জিও - প্রকৃতপক্ষে, আমি বিভিন্ন শব্দার্থবিজ্ঞানের সাথে অনুরূপ কার্যকারিতাটিকে ভিন্ন কার্যকারিতা হিসাবে বিবেচনা করছি। এবং হ্যাঁ, আপনার নিজের কম্পাইলার লিখার মতো হুপ জাম্প হতে পারে যা একই শব্দার্থবিজ্ঞানযুক্ত এবং সেই "চিনি" বলে calling সত্যি বলতে, এই ধরনের অনানুষ্ঠানিক ধারণার জন্য একটি আনুষ্ঠানিক সংজ্ঞা ঘটতে চলেছে না।
তেলস্তিন

1
@ জর্জিও অইগেন, আমার গরুর মাংস আপনার সমতুল্যতার সাথে নয়, তবে আপনি প্রোগ্রামগুলিতে সিনট্যাকটিক চিনির ধারণাটি প্রয়োগ করে প্রয়োগ করেছেন। শব্দটি পুরো প্রোগ্রামগুলিকে বোঝায় না! আপনার সংজ্ঞা অনুসারে, এটি হয় কেবলমাত্র পারমাণবিক বিল্ডিং ব্লক, বা কেবল সংক্ষিপ্ত প্রোগ্রামের টুকরো (প্রথমটি> 80% কভার করে মনে হয়, তবে আমি নিশ্চিত নই যে এটি সাধারণভাবে সিনট্যাকটিক চিনি হিসাবে বিবেচিত সমস্ত কিছুকে কভার করে)।

3
@ জিওর্জিও উদাহরণস্বরূপ, পুরো প্রোগ্রামগুলি ;-) বা এত বড় যে কোনও কিছু উভয় সূত্রগুলি বেশ কয়েকটি সম্পর্কিত সম্পর্কযুক্ত ভাষার কীওয়ার্ডকে জড়িত। এমন কিছু যা আমি কখনই সিনট্যাকটিক চিনির হিসাবে বিবেচনা করি না এটি if (a) return blah; ...বনাম result_type res; if (a) res = blah; else {...}; return res;। এই প্রোগ্রামগুলির মধ্যে কোনও পার্থক্য খুঁজে পেতে আপনার নির্দিষ্ট ভাষাগুলি ধরে নেওয়া এবং চূড়ান্ত ভাষা-আইনজীবী-ওয় (প্রায়শই ছোট-পদক্ষেপের অপারেশনাল শব্দার্থের বিন্দুতে) আসা দরকার get

10

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

যে কোনও ভাষার বাক্য বাক্য বাক্যকে বাদ দিয়ে সিনট্যাকটিক চিনি নির্ধারণ করে তা হ'ল যে ভাষাতে রচনা করা যায় এমন প্রোগ্রামগুলিকে প্রভাবিত না করে ভাষা থেকে সিনট্যাকটিক চিনি মুছে ফেলা সম্ভব হবে।

আরও আনুষ্ঠানিক সংজ্ঞা দিতে আমি বলব

সিনট্যাকটিক চিনি একটি ভাষার সিনট্যাক্সের সেই অংশ যাগুলির প্রভাবগুলি ভাষার অন্যান্য বাক্য গঠন গঠনের ক্ষেত্রে সংজ্ঞায়িত হয়।

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


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

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

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

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

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

6

অন্যান্য উত্তরে একটি মূল ধারণাটি উল্লেখ করা হয়নি: বিমূর্ত সিনট্যাক্স ; এটি ছাড়া, "সিনট্যাকটিক চিনি" শব্দটির কোনও অর্থ নেই।

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

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

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

আমি বিশ্বাস করি, লোকেরা যখন "সিনট্যাকটিক চিনি" বলার অর্থ বোঝায় - এমন পরিবর্তনগুলি যা কেবলমাত্র কংক্রিট সিনট্যাক্সকে প্রভাবিত করে তবে এটি বিমূর্ত সিনট্যাক্স বা শব্দার্থবিজ্ঞানগুলিকে প্রভাবিত করে না।

এবং সুতরাং "সিনট্যাকটিক চিনি" এবং "কংক্রিট সিনট্যাক্স" এর মধ্যে পার্থক্য এখন স্পষ্ট। আমার কাছে. :)

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


আমার এও লক্ষ্য করা উচিত যে এটি কেবলমাত্র আমার মতামত; আমি কেবল এটি বিশ্বাস করি কারণ এটিই কেবলমাত্র এমন ব্যাখ্যা যা আমি ভাবতে পারি তা আমার কাছে বোধগম্য।


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

@ জর্জিও, দুর্ভাগ্যক্রমে, আমি দৃ know়তার সাথে জানাতে পারি না যে এগুলির কোনওটির জন্য অন্যটির জন্য সিনট্যাকটিক চিনি রয়েছে, বা তাদের বিমূর্ত সিনট্যাক্স গাছগুলি কেমন হবে। অথবা সি এর অনুমান আসলে একটি বিমূর্ত সিনট্যাক্স সংজ্ঞা দেয় এমনকি যদি। :(

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

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

1
"উভয় এক্সপ্রেশন একটি অভিন্ন ক্রিয়া আছে (পয়েন্টার টাইপ রেফারেন্স টাইপ রূপান্তর করুন, তারপর সদস্য এক্স রেফারেন্স পেতে)": এটি শব্দার্থবিজ্ঞান, বিমূর্ত বাক্য গঠন নয়। অ্যাবস্ট্রাক্ট সিনট্যাক্স বলতে কোনও প্রোগ্রামের প্রকৃত কাঠামোর প্রতিফলন করে এমন একটি গাছ উত্পাদন করে কংক্রিট সিনট্যাক্সের (যেমন (বা ;) বেহুদা বিবরণ রেখে যাওয়া বোঝায় ( en.wikedia.org/wiki/Abstract_syntax_tree দেখুন )। যাইহোক, বিমূর্ত সংশ্লেষে প্রোগ্রামটির শব্দার্থকতা সম্পর্কে কিছুই বলা হয়নি (এখনও)।
জর্জিও

4

সিনট্যাকটিক চিনি ভাষা সিনট্যাক্সের একটি উপসেট। মূল ধারণাটি হ'ল একই কথা বলার একাধিক উপায় রয়েছে।

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

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

বাস্তবে, বিষয়টি এভাবেই বাস্তবতার সিদ্ধান্ত নেওয়া হয়।


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

3

সত্যিই, উইকিপিডিয়ায় আপনার প্রথম উক্তিটি এটিকে সমস্ত "... ... পড়া সহজ করে তোলে ...", ".... মানুষের ব্যবহারের জন্য মিষ্টি ...."।

লেখার ক্ষেত্রে, "না" বা "না" এর মতো সংক্ষিপ্ত রূপগুলি সিনট্যাকটিক চিনি হিসাবে বিবেচনা করা যেতে পারে।


(1) "আমার এখনই যাওয়া উচিত" বনাম (2) "আমার এখনই যাওয়া উচিত": (1) সিনট্যাকটিক চিনির জন্য (2)?
জর্জিও

1
@ জর্জিও আমি না বলব
ozz

পাঠযোগ্যতার কারণে ("উচিত" "" করা উচিত "এর চেয়ে বেশি পঠনযোগ্য নয়) বা অর্থের কারণে (" উচিত "এবং" পৃথক অর্থ থাকা উচিত ")।
জর্জিও

@ জর্জিও ফর্সা যথেষ্ট :)
ozz

1
আহ আমি দেখছি :) অনুমান করার মতো আমার আরও অনুভূত হয়, আমি মনে করি না যে একটি উদাহরণের মধ্যে
অন্যটির

3

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

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

do { f }            ~> f
do { g; h }         ~> g >> do h
do { x <- f; h }    ~> f >>= \x -> do h
do { let x = f; h } ~> let x = f in do h

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

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

একইভাবে সিতে আপনি পুনর্লিখনের নিয়মটি নির্ধারণ করতে পারেন (অপারেটর ওভারলোডিং ইত্যাদির কারণে এটি সি ++ এর ক্ষেত্রে সত্য নয়):

f->h ~> (*f).h
f[h] ~> *(f + h)

আপনি এই প্রোগ্রামটি ব্যবহার না করে ->বা []সি তে সমস্ত প্রোগ্রাম লেখার কল্পনা করতে পারেন । তবে প্রোগ্রামারদের পক্ষে এটি সিনট্যাক্স চিনির সরবরাহ করা ব্যবহার করা আরও কঠিন হবে (আমার ধারণা 70 এর দশকে এটি সংকলকগুলির জন্যও কাজ সহজীকরণ করতে পারে)। আপনি প্রযুক্তিগতভাবে নিম্নলিখিত, পুরোপুরি বৈধ, পুনর্লিখনের নিয়মটি যুক্ত করতে পারেন বলে এটি সম্ভবত কম পরিষ্কার:

*f ~> f[0] -- * and [] have the same expressiveness 

সিনট্যাক্স চিনির কি খারাপ? অগত্যা নয় - বিপদ রয়েছে যে এটি গভীর অর্থ না বুঝে কার্গো কাল্ট হিসাবে ব্যবহৃত হবে। উদাহরণস্বরূপ নিম্নোক্ত ফাংশনগুলি হাস্কেলের সমতুল্য হলেও অনেক শিখর তারা প্রথম বাক্যটি না বুঝে বোঝে যে তারা সিনট্যাক্স চিনির অতিরিক্ত ব্যবহার করছে:

f1 = do x <- doSomething
        return x
f2 = doSomething

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


3

আমি মনে করি সর্বাধিক সুস্পষ্ট উদাহরণটি সিতে "+ =" বাক্য গঠন হবে think

i = i + 1;

এবং

 i +=  1;

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

আমি "++" পোস্ট / প্রিফিক্স অপারেটরটিকে ক্যানোনিকাল উদাহরণ হিসাবে উদ্ধৃত করতে যাচ্ছিলাম তবে বুঝতে পারলাম যে এটি সিনট্যাকটিক চিনির চেয়ে বেশি। i = i + 1সিনট্যাক্স ব্যবহার করে একক অভিব্যক্তিতে ++ i এবং i ++ এর মধ্যে পার্থক্যটি প্রকাশ করার কোনও উপায় নেই ।


+ = এর মতো ক্ষেত্রে সুবিধাজনক হতে পারে a[f(x)] += 1
ফ্লোরিয়ান এফ

1

প্রথমে, আমি অন্যান্য কয়েকটি উত্তরের একটি দৃ concrete় উদাহরণ দিয়ে সম্বোধন করব। লুপের জন্য সি ++ 11 পরিসীমা-ভিত্তিক (অনেক অন্যান্য ভাষায় ফোরাচ লুপের মতো)

for (auto value : container) {
    do_something_with(value);
}

একেবারে সমান (যেমন, একটি সুগার্ড সংস্করণ)

for (auto iterator = begin(container); iterator != end(container); ++iterator) {
    do_something_with(*iterator);
}

এখন, ভাষায় কোনও নতুন বিমূর্ত সিনট্যাক্স বা শব্দার্থবিজ্ঞান যুক্ত না করেও এর আসল উপযোগিতা রয়েছে।

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

উদাহরণস্বরূপ, দ্বিতীয় সংস্করণে একটি-চরিত্রের ভুল:

for (auto iterator = begin(container); iterator <= end(container); ++iterator) {
    do_something_with(*iterator);
}

একটি অতীত-শেষের ত্রুটি এবং অনির্ধারিত আচরণ দেয়।

সুতরাং, সুগারযুক্ত সংস্করণটি সঠিকভাবে কার্যকর কারণ এটি আরও সীমাবদ্ধ এবং বিশ্বাস ও বোঝা সহজ।


দ্বিতীয়ত, মূল প্রশ্নে:

সিনট্যাক্স এবং সিনট্যাকটিক চিনির মধ্যে একটি বাস্তব পার্থক্য আছে?

না, "সিনট্যাকটিক চিনি" (কংক্রিট) ভাষার বাক্য গঠন, এটি "চিনা" হিসাবে বিবেচনা করা হয় কারণ এটি ভাষার বিমূর্ত বাক্য গঠন বা মূল কার্যকারিতা প্রসারিত করে না। আমি এই বিষয়ে ম্যাট ফেনউইকের উত্তরটি পছন্দ করি।

কার কাছে তাতে কিছু যায় আসে না?

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

অবশেষে, বোনাস প্রশ্নে

[]] স্বরলিপিটি এই বিমূর্ততাটি সহজ করে।

এটি সিনট্যাকটিক চিনির সংজ্ঞার মতো অনেকটা শোনাচ্ছে : এটি অ্যারে হিসাবে পয়েন্টার ব্যবহার করে (এবং ভাষা লেখকদের আশীর্বাদ সরবরাহ করে) সমর্থন করে। p[i]ফর্ম না চেয়ে বেশি নিয়ন্ত্রণমূলক সত্যিই *(p+i)তাই শুধু পার্থক্য অভিপ্রায় সুস্পষ্ট যোগাযোগ (এবং সামান্য পাঠযোগ্যতা লাভ) নেই।


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

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

0

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

প্রোগ্রামারদের যারা সত্যিকার অর্থে ভাষা বোঝেন না তাদের ক্র্যাচ সরবরাহ করার জন্য সিন্ট্যাক্স যা অন্যান্য আরও ব্যাপকভাবে প্রয়োগযোগ্য সিনট্যাক্সের সাথে অপ্রয়োজনীয়।

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


আমি মনে করি শব্দের সংক্ষিপ্ত অর্থ ("এটি কেবল সিনট্যাকটিক চিনি") থেকে আসে যে সিনট্যাকটিক চিনির কোনও তথ্য যুক্ত হয় না।
জর্জিও

1
এটি ধারণা থেকে আসে যে সিনট্যাকটিক কোনও তথ্য যুক্ত করে না , তবে এই ধারণাটি সত্য নয়। অভিপ্রায় সম্পর্কে তথ্য (উদাহরণস্বরূপ, একটি সুপরিচিত আইডিয়াম ব্যবহার করা) এখনও তথ্য।
অপ্রয়োজনীয়

@ ব্যবহারহীন: তথ্য দ্বারা আমি বোঝাতে চেয়েছিলাম একটি প্রোগ্রাম সিনট্যাকটিক চিনির সাথে বা ছাড়াই একই আচরণ করে। অবশ্যই এটি সিনট্যাকটিক চিনির সাথে আরও পঠনযোগ্য হতে পারে (এটি পাঠকের জন্য তথ্য / ডকুমেন্টেশন যুক্ত করে) যা একটি সুবিধা।
জর্জিও

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

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