Compiler Description Language
مرتب وضاحتی زبان (سی ڈی ایل) ایک پروگرامنگ زبان ہے جو افیکس گرامر پر مبنی ہے۔ یہ بیکس-نور فارم (بی این ایف) نوٹیشن سے بہت ملتا جلتا ہے۔ اسے مرتب کرنے والوں کی ترقی کے لیے ڈیزائن کیا گیا تھا۔ یہ اپنی صلاحیتوں اور کنٹرول کے بہاؤ میں بہت محدود ہے، اور جان بوجھ کر۔ ان حدود کے فوائد دوگنا ہیں۔ ایک طرف، وہ انتہائی موثر کوڈ کے نتیجے میں سی ڈی ایل 2 آپٹیمائزرز کے ذریعہ استعمال ہونے والے جدید ترین ڈیٹا اور کنٹرول فلو تجزیہ کو ممکن بناتے ہیں۔ دوسرا فائدہ یہ ہے کہ وہ ایک انتہائی لفظی نام کے رواج کو فروغ دیتے ہیں۔ یہ، بدلے میں، ایسے پروگراموں کی طرف لے جاتا ہے جو کافی حد تک خود دستاویزی ہوتے ہیں۔ زبان کچھ حد تک پرولاگ کی طرح نظر آتی ہے (یہ حیرت کی بات نہیں ہے کیونکہ دونوں زبانیں تقریبا ایک ہی وقت میں ایفیکس گرامر پر کام سے نکلی تھیں)۔ تاہم، پرولاگ کے برعکس، سی ڈی ایل میں کنٹرول فلو فیصلہ کن طور پر کامیابی/ناکامی پر مبنی ہے، یعنی جب موجودہ کامیاب ہوتا ہے تو کوئی دوسرا متبادل نہیں آزمایا جاتا ہے۔ یہ خیال اظہار گرائمر کو تجزیہ کرنے میں بھی استعمال ہوتا ہے۔ سی ڈی ایل 3 سی ڈی ایل زبان کا تیسرا ورژن ہے، جو پچھلے دو ورژن سے نمایاں طور پر مختلف ہے۔ اصل ورژن، جسے نیمیگن یونیورسٹی میں کارنیلیس ایچ اے کوسٹر نے ڈیزائن کیا تھا، جو 1971 میں ابھرا تھا، اس کا ایک غیر معمولی تصور تھا: اس کا کوئی بنیادی حصہ نہیں تھا۔ ایک عام پروگرامنگ زبان کے ماخذ کا ترجمہ مشین ہدایات یا ان ہدایات کے ڈبے میں بند ترتیبات میں کیا جاتا ہے۔ وہ بنیادی، سب سے بنیادی تجریدوں کی نمائندگی کرتے ہیں جن کی دی گئی زبان حمایت کرتی ہے۔ اس طرح کے ابتدائی اعداد کے اضافے، متغیرات کو ایک دوسرے میں نقل کرنا وغیرہ ہو سکتے ہیں۔ سی ڈی ایل 1 میں اس طرح کے کور کا فقدان ہے۔ یہ پروگرامر کی ذمہ داری ہے کہ وہ ابتدائی کارروائیوں کو ایک ایسی شکل میں فراہم کرے جسے پھر روایتی زبان کے لیے اسمبلر یا مرتب کے ذریعے مشین ہدایات میں تبدیل کیا جا سکے۔ سی ڈی ایل 1 زبان میں خود پرائمیٹوز کا کوئی تصور نہیں ہے، مشین ورڈ کے علاوہ ڈیٹا ٹائپز کا کوئی تصور نہیں ہے (اسٹوریج کی ایک تجریدی اکائی-ضروری نہیں کہ ایک حقیقی مشین ورڈ ہو)۔ تشخیصی اصول بلکہ بیکس-نور فارم کی نحو کی وضاحت سے ملتے جلتے ہیں۔ درحقیقت، بی این ایف میں بیان کردہ زبان کے لیے تجزیہ کار لکھنا سی ڈی ایل 1 میں کافی آسان ہے۔ بنیادی طور پر زبان اصولوں پر مشتمل ہوتی ہے۔ ایک قاعدہ کامیاب یا ناکام ہو سکتا ہے۔ ایک قاعدہ متبادلات پر مشتمل ہوتا ہے جو دیگر اصولوں کی دعاؤں کے سلسلے ہوتے ہیں۔ ایک قاعدہ کامیاب ہو جاتا ہے اگر اس کا کوئی بھی متبادل کامیاب ہو جائے ؛ ان کو ترتیب میں آزمایا جاتا ہے۔ ایک متبادل کامیاب ہو جاتا ہے اگر اس کی تمام حکمرانی کی دعائیں کامیاب ہو جائیں۔ زبان آپریٹرز کو بغیر تکرار کے تشخیصی لوپس بنانے کے لیے فراہم کرتی ہے (حالانکہ یہ سی ڈی ایل 2 میں سختی سے ضروری نہیں ہے کیونکہ آپٹیمائزر اسی اثر کو حاصل کرتا ہے) اور دوسری صورت میں تکرار تشخیص کی کارکردگی کو بڑھانے کے لیے کچھ شارٹ کٹ، لیکن بنیادی تصور اوپر جیسا ہے۔ سیاق و سباق سے پاک گرائمر پارسنگ میں واضح اطلاق کے علاوہ، سی ڈی ایل ایپلی کیشنز کو کنٹرول کرنے کے لیے بھی موزوں ہے کیونکہ بہت سی کنٹرول ایپلی کیشنز بنیادی طور پر اگر-تب کے قوانین کو گہرائی سے جکڑے ہوئے ہیں۔ ہر سی ڈی ایل 1 قاعدہ، جب اس کا جائزہ لیا جا رہا ہو، ڈیٹا پر عمل کر سکتا ہے، جو غیر متعینہ قسم کا ہے۔ مثالی طور پر، ڈیٹا کو اس وقت تک تبدیل نہیں کیا جانا چاہیے جب تک کہ قاعدہ کامیاب نہ ہو (ناکامی پر کوئی مضر اثرات نہ ہوں)۔ اس سے مسائل پیدا ہوتے ہیں جیسے کہ یہ قاعدہ کامیاب ہو سکتا ہے، اس کی درخواست کرنے والا قاعدہ پھر بھی ناکام ہو سکتا ہے، ایسی صورت میں ڈیٹا کی تبدیلی اثر انداز نہیں ہونی چاہیے۔ اگر تمام ڈیٹا متحرک طور پر اسٹیک پر مختص کیا جاتا ہے تو مندرجہ بالا رویے کو یقینی بنانا کافی آسان (اگرچہ میموری کی شدت) ہے۔ تاہم، جب جامد ڈیٹا موجود ہو تو یہ کافی مشکل ہوتا ہے، جو اکثر ہوتا ہے۔ سی ڈی ایل 2 مرتب ممکنہ خلاف ورزیوں کو نشان زد کرنے کے قابل ہے اس ضرورت کی بدولت کہ پیرامیٹرز کی سمت (ان پٹ، آؤٹ پٹ، ان پٹ آؤٹ پٹ) اور قواعد کی قسم (ناکام ہو سکتا ہے: ٹیسٹ، پیش گوئی ؛ ناکام نہیں ہو سکتا: فنکشن، ایکشن ؛ ایک ضمنی اثر ہو سکتا ہے: پیش گوئی، عمل ؛ ضمنی اثر نہیں ہو سکتا: ٹیسٹ، فنکشن) پروگرامر کے ذریعہ متعین کیا جانا چاہیے۔ چونکہ قاعدے کی تشخیص آسان اور آسان اصولوں کو کال کرنے پر مبنی ہے، اس لیے سب سے نیچے، کچھ ابتدائی اصول ہونے چاہئیں جو اصل کام کرتے ہیں۔ یہی وہ جگہ ہے جہاں سی ڈی ایل 1 بہت حیران کن ہے: اس میں وہ ابتدائی نہیں ہیں۔ آپ کو وہ اصول خود فراہم کرنے ہوں گے۔ اگر آپ کو اپنے پروگرام میں اضافے کی ضرورت ہے، تو آپ کو دو ان پٹ پیرامیٹرز اور ایک آؤٹ پٹ پیرامیٹر کے ساتھ ایک قاعدہ بنانا ہوگا، اور آؤٹ پٹ کو آپ کے کوڈ کے ذریعہ دو ان پٹ کا مجموعہ مقرر کیا جاتا ہے۔ سی ڈی ایل مرتب آپ کے کوڈ کو سٹرنگ کے طور پر استعمال کرتا ہے (ان پٹ اور آؤٹ پٹ متغیرات کا حوالہ دینے کے بارے میں کنونشن موجود ہیں) اور اسے صرف ضرورت کے مطابق خارج کرتا ہے۔ اگر آپ اسمبلی کا استعمال کرتے ہوئے اپنے اضافی اصول کی وضاحت کرتے ہیں، تو آپ کو سی ڈی ایل مرتب کے آؤٹ پٹ کو مشین کوڈ میں ترجمہ کرنے کے لیے ایک اسمبلر کی ضرورت ہوگی۔ اگر آپ پاسکل یا سی میں تمام ابتدائی اصولوں (سی ڈی ایل اصطلاحات میں میکرو) کو بیان کرتے ہیں، تو آپ کو سی ڈی ایل مرتب کے بعد چلانے کے لیے پاسکل یا سی مرتب کی ضرورت ہے۔ بنیادی ابتدائی کی یہ کمی بہت تکلیف دہ ہو سکتی ہے جب آپ کو کوڈ کا ایک ٹکڑا لکھنا پڑتا ہے، یہاں تک کہ آسان ترین مشین انسٹرکشن آپریشن کے لیے بھی۔ تاہم، دوسری طرف، یہ آپ کو غیر ملکی تجریدی اشیاء پر کام کرنے والے خفیہ، تجریدی ابتدائی کو نافذ کرنے میں بہت زیادہ لچک دیتا ہے (سی ڈی ایل میں 'مشین ورڈ' زیادہ تر 'ڈیٹا اسٹوریج کی اکائی' کی طرح ہے، جس میں وہاں ذخیرہ شدہ ڈیٹا کی قسم کا کوئی حوالہ نہیں ہے)۔ مزید برآں، بڑے منصوبوں میں احتیاط سے تیار کردہ ابتدائی کتب خانوں کا استعمال کیا گیا۔ اس کے بعد ان کو ہر ٹارگٹ آرکیٹیکچر اور او ایس کے لیے نقل کیا گیا جس سے سب کے لیے انتہائی موثر کوڈ تیار کیا جا سکے۔ زبان کا احساس حاصل کرنے کے لیے، یہاں کوڈ کا ایک چھوٹا سا ٹکڑا ہے جو سی ڈی ایل 2 دستی سے ڈھال لیا گیا ہے: ایکٹیون کوئکسورٹ +> سے +> سے-پی-کیو: کم + سے + تک، تقسیم + سے + سے + پی + کیو، کوئکسورٹ + سے + کیو، کوئکسورٹ + پی + سے ؛ +۔ ایکشن اسپلٹ +> i +> j + p> + q>-m: بنائیں + p + i، بنائیں + q + j، شامل کریں + i + j + m، آدھا کریں + m، (دوبارہ: اوپر جائیں + j + p + m، نیچے جائیں + i + q + m، (کم + p + q، سویپ آئٹم + p + q، انکر + p، ڈیکر + q، * دوبارہ ؛ کم + p + m، سویپ آئٹم + p + m، انکر + p ؛ کم + m + q، سویپ آئٹم + q + m، ڈیکر + q ؛ +)۔ فنکشن اوپر +> جے +> پی> +> ایم: کم + جے + پی ؛ چھوٹی آئٹم + ایم + پی ؛ انکر + پی، *۔ فنکشن نیچے منتقل کریں +> i +> q> +> m: کم + q + j ؛ چھوٹی آئٹم + q + m ؛ ڈیکر + q، *۔ ٹیسٹ کم +> a +> b: = a "<" b۔ فنکشن + a> +> b: = a "=" b "بناتا ہے۔ فنکشن +> a +> b + sum>: = sum "=" a "+" b "شامل کریں۔ فنکشن نصف +> a>: = a "/= 2"۔ فنکشن انکر +> a>: = a "+ +"۔ فنکشن ڈیکر +> a>: = a "--"۔ ٹیسٹ چھوٹی آئٹم +> i +> j: = "آئٹمز [" i "] <آئٹمز [" j "]"۔ ایکٹیون سویپ آئٹمز +> i +> j-t: = t "= آئٹمز [" i "] ؛ آئٹمز [" i "] = آئٹمز [" j "] ؛ آئٹمز [" j "] =" t۔ ابتدائی کارروائیوں کی وضاحت یہاں جاوا (یا C) کے لحاظ سے کی گئی ہے۔ یہ ایک مکمل پروگرام نہیں ہے ؛ ہمیں جاوا صف آئٹمز کی وضاحت کہیں اور کرنی چاہیے۔ سی ڈی ایل 2، جو 1976 میں شائع ہوا، نے سی ڈی ایل 1 کے اصولوں کو برقرار رکھا لیکن زبان کو بڑے منصوبوں کے لیے موزوں بنا دیا۔ اس نے ماڈیولز متعارف کروائے، ڈیٹا-تبدیلی-صرف-کامیابی پر نافذ کیا، اور زبان کی صلاحیتوں کو کسی حد تک بڑھایا۔ سی ڈی ایل 2 مرتب میں اور خاص طور پر سی ڈی ایل 2 لیبارٹری (سی ڈی ایل 2 کے لیے ایک آئی ڈی ای) میں اصلاح کرنے والے عالمی معیار کے تھے اور نہ صرف اپنے وقت کے لیے۔ سی ڈی ایل 2 لیبارٹری آپٹیمائزر کی ایک خصوصیت تقریبا منفرد ہے: یہ تالیف اکائیوں میں اصلاح انجام دے سکتا ہے، یعنی پورے پروگرام کو ایک تالیف کے طور پر ماننا۔ سی ڈی ایل 3 ایک حالیہ زبان ہے۔ اس نے پچھلے سی ڈی ایل ورژن کی اوپن اینڈ خصوصیت کو ترک کر دیا، اور یہ بنیادی ریاضی اور اسٹوریج تک رسائی کو ابتدائی فراہم کرتا ہے۔ پہلے کے سی ڈی ایل ورژن کے انتہائی پیوریٹن نحو (مطلوبہ الفاظ اور علامتوں کی تعداد دونوں ایک ہندسوں میں چلتے ہیں) میں بھی نرمی کی گئی ہے۔ کچھ بنیادی تصورات اب واضح الفاظ کے بجائے نحو میں ظاہر کیے گئے ہیں۔ اس کے علاوہ، ڈیٹا کی اقسام کو زبان میں متعارف کرایا گیا ہے۔ تجارتی ایم بی پی کوبول (پی سی کے لیے ایک کوبول مرتب) کے ساتھ ساتھ ایمپرولوج سسٹم (ایک صنعتی طاقت والا پرولاگ نفاذ جو متعدد آرکیٹیکچرز (آئی بی ایم مین فریم، وی اے ایکس، پی ڈی پی-11، انٹیل 8086، وغیرہ) پر چلتا ہے) کا استعمال کریں۔ اور او ایس-ایس (ڈی او ایس/او ایس/سی ایم ایس/بی ایس 2000، وی ایم ایس/یونکس، ڈی او ایس/ونڈوز/او ایس 2)۔ مؤخر الذکر، خاص طور پر، سی ڈی ایل 2 کی پورٹیبلٹی کا ثبوت ہے۔ اگرچہ سی ڈی ایل کے ساتھ لکھے گئے زیادہ تر پروگرام مرتب کرنے والے رہے ہیں، کم از کم ایک تجارتی جی یو آئی ایپلی کیشن ہے جو سی ڈی ایل میں تیار اور برقرار رکھی گئی تھی۔ یہ ایپلی کیشن ڈینٹل امیج کے حصول کی ایپلی کیشن تھی جو اب ڈیکسس کی ملکیت ہے۔ ایک بار سی ڈی ایل میں ڈینٹل آفس مینجمنٹ سسٹم بھی تیار کیا گیا تھا۔ میفسٹو III شطرنج کمپیوٹر کے لیے سافٹ ویئر سی ڈی ایل 2 کے ساتھ لکھا گیا تھا۔ حوالہ جات مزید پڑھنا سی ڈی ایل 1/سی ڈی ایل 2 زبان کے بارے میں ایک کتاب سی ڈی ایل 3 بیڈو ارپاڈ کی تفصیل: پروگرامکیزیٹیسی موڈززیریک ؛ کوزگازڈاساگی és جوگی کونیوکیڈو، 1979۔ پارسر جنریٹر مرتب کنسٹرکشن رسمی زبانیں مرتب نظریہ