Lexer hack
کمپیوٹر پروگرامنگ میں، لیکسر ہیک اے این ایس آئی سی کو تجزیہ کرنے کے مسائل کا ایک عام حل ہے، کیونکہ حوالہ گرائمر سیاق و سباق کے لحاظ سے حساس ہے۔ سی میں، حروف کی ترتیب کو متغیر نام یا قسم کے نام کے طور پر درجہ بندی کرنے کے لیے جملے کے ڈھانچے کی سیاق و سباق سے متعلق معلومات کی ضرورت ہوتی ہے، جو کسی کو سیاق و سباق سے پاک لیکسر رکھنے سے روکتی ہے۔ مسئلہ یہ ہے کہ مندرجہ ذیل کوڈ میں، A کی لفظی کلاس کا تعین مزید سیاق و سباق کی معلومات کے بغیر نہیں کیا جا سکتا: (A) * B یہ کوڈ دو متغیرات کا ضرب ہو سکتا ہے، جس صورت میں A ایک متغیر ہے ؛ غیر واضح طور پر لکھا گیا: A * B متبادل طور پر، یہ B کی غیر حوالہ شدہ قدر کو ٹائپ A میں ڈال سکتا ہے، جس صورت میں A ایک ٹائپ ڈیف نام ہے ؛ غیر واضح طور پر لکھا گیا: (A) (* B) مزید تفصیل سے، ایک مرتب میں، لیکسر سورس کوڈ کو پروگرام میں تبدیل کرنے کے ابتدائی مراحل میں سے ایک انجام دیتا ہے۔ یہ الفاظ، اعداد اور تار جیسے بامعنی ٹوکن نکالنے کے لیے متن کو اسکین کرتا ہے۔ پارسر ٹوکن کے ترتیبات کا تجزیہ کرتا ہے جو انہیں زبان کے ڈھانچے کی نمائندگی کرنے والے نحو کے اصولوں سے ملنے کی کوشش کرتے ہیں، جیسے لوپس اور متغیر اعلانات۔ اگر ٹوکن کی ایک واحد ترتیب مبہم طور پر ایک سے زیادہ نحو اصول سے میل کھا سکتی ہے تو یہاں ایک مسئلہ پیدا ہوتا ہے۔ یہ ابہام سی میں ہو سکتا ہے اگر لیکسر متغیر اور ٹائپ ڈیف شناخت کاروں کے درمیان فرق نہیں کرتا ہے۔ مثال کے طور پر، C اظہار میں: (A) * B لیکسر کو یہ ٹوکن مل سکتے ہیں: بائیں قوسین کی شناخت کرنے والا 'A' دائیں قوسین کے آپریٹر '*' شناخت کرنے والا 'B' مسئلہ قطعی طور پر یہ ہے کہ A کی لفظی کلاس کا تعین مزید سیاق و سباق کے بغیر نہیں کیا جا سکتا: تجزیہ کار اس کی تشریح متغیر A کو B سے ضرب دے کر یا قسم A کے طور پر کر سکتا ہے جس میں B کی غیر حوالہ شدہ قدر کاسٹ کی جا سکتی ہے۔ اسے "ٹائپ ڈیف نام: شناخت کنندہ" مسئلہ کے نام سے جانا جاتا ہے، اس کی وجہ دشواری پیدا کرنے والے اصول کا نام ہے۔ ہیک حل حل عام طور پر سیمنٹک علامت ٹیبل سے معلومات کو لیکسر میں واپس لانے پر مشتمل ہوتا ہے۔ یعنی لیکسر سے پارسر تک خالص یک طرفہ پائپ لائن کے طور پر کام کرنے کے بجائے، سیمنٹک تجزیہ سے لے کر لیکسر تک بیک چینل ہوتا ہے۔ تجزیہ اور الفاظ کے تجزیے کے اس اختلاط کو عام طور پر غیر معقول سمجھا جاتا ہے، اسی وجہ سے اسے "ہیک" کہا جاتا ہے۔ اضافی سیاق و سباق کے بغیر، لیکسر ٹائپ شناخت کاروں کو دوسرے شناخت کاروں سے الگ نہیں کر سکتا کیونکہ تمام شناخت کاروں کی شکل ایک جیسی ہوتی ہے۔ مندرجہ بالا مثال میں ہیک کے ساتھ، جب لیکسر کو شناخت کنندہ A مل جاتا ہے تو اسے ٹوکن کو ٹائپ شناخت کنندہ کے طور پر درجہ بندی کرنے کے قابل ہونا چاہیے۔ زبان کے قواعد کو یہ واضح کرتے ہوئے واضح کیا جائے گا کہ ٹائپ کاسٹ کے لیے ٹائپ شناخت کار کی ضرورت ہوتی ہے اور ابہام ختم ہو جاتا ہے۔ یہ مسئلہ C + + میں بھی موجود ہے اور تجزیہ کار اسی ہیک کو استعمال کر سکتے ہیں۔ متبادل حل لیکسر لیس پارسنگ تکنیک کا استعمال کرتے وقت یہ مسئلہ پیدا نہیں ہوتا ہے (اور اس لیے اسے حل کرنے کے لیے "ہیک" کی ضرورت نہیں ہے)، کیونکہ یہ اندرونی طور پر سیاق و سباق سے متعلق ہیں۔ تاہم، انہیں عام طور پر کم خوبصورت ڈیزائنوں کے طور پر دیکھا جاتا ہے، کیونکہ ان میں پائپ لائن میں ہم آہنگی والے لیکسر اور پارسر کی ماڈیولرتا کی کمی ہوتی ہے۔ کچھ پارسر جنریٹر، جیسے بائی اے سی سے ماخوذ بی ٹی وائی اے سی ("بیک ٹریکنگ یاک")، تیار شدہ پارسر کو ٹوکن کو تجزیہ کرنے کی متعدد کوششوں کو آزمانے کی صلاحیت دیتے ہیں۔ یہاں بیان کردہ مسئلے میں، اگر شناخت کنندہ کے بارے میں بامعنی معلومات کی وجہ سے کوئی کوشش ناکام ہوجاتی ہے، تو وہ پیچھے ہٹ سکتی ہے اور دوسرے اصولوں کی کوشش کر سکتی ہے۔ کلانگ پارسر صورتحال کو بالکل مختلف طریقے سے سنبھالتا ہے، یعنی غیر حوالہ لفظی گرائمر کا استعمال کرتے ہوئے۔ کلانگ کا لیکسر قسم کے ناموں اور متغیر ناموں کے درمیان فرق کرنے کی کوشش نہیں کرتا ہے: یہ صرف موجودہ ٹوکن کو شناخت کنندہ کے طور پر رپورٹ کرتا ہے۔ اس کے بعد تجزیہ کار شناخت کنندہ کی نوعیت کا تعین کرنے کے لیے کلانگ کی سیمنٹک تجزیہ لائبریری کا استعمال کرتا ہے۔ یہ خدشات کو بہت زیادہ صاف کرنے اور لیکسر اور پارسر کو منسلک کرنے کی اجازت دیتا ہے، اور اس وجہ سے کچھ مرتب کرنے والے ڈویلپرز اسے لیکسر ہیک کے مقابلے میں بہت زیادہ خوبصورت حل سمجھتے ہیں۔ یہ وہ نقطہ نظر بھی ہے جو زیادہ تر دوسری جدید زبانوں میں استعمال ہوتا ہے، جو لفظی گرائمر میں شناخت کاروں کی مختلف کلاسوں میں فرق نہیں کرتے، بلکہ کافی معلومات دستیاب ہونے پر انہیں تجزیہ یا الفاظ کے تجزیے کے مرحلے میں موخر کر دیتے ہیں۔ ڈینگلنگ ایلز حوالہ جات http://www.cs.berkeley.edu ~ smcpeak/elkhound/ذرائع/elkhound/انڈیکس. ایچ ٹی ایم ایل http://cs.nyu.edu/rgrimm/papers/pldi06.pdf http://cens.ioc.ee/local/man/CompaqCompilers/ladebug/ladebug-manual-details.html DOI.org http://groups.google.com/group/comp.compilers/browse_frm/thread/db7f68e9d8b49002/fa20bf5de9c73472?lnk=st&q=%2B%22the + lexer + hack% 22 & rnum = 1 اور ایچ ایل = en#fa20bf5de9c73472 سی (پروگرامنگ زبان) سی + + پارسنگ مضامین مثال سی کوڈ کے ساتھ