ميتا
أوميتا هي لغة برمجة كائنية التوجه متخصصة في مطابقة الأنماط ، طُوِّرت بواسطة أليساندرو وارث وإيان بيومارتا عام 2007 في معهد فيوبوينتس للأبحاث . تعتمد اللغة على قواعد التعبير التحليلية (PEGs)، بدلاً من القواعد الخالية من السياق ، بهدف توفير "طريقة طبيعية ومريحة للمبرمجين لتنفيذ أدوات التجزئة ، والمحللات ، والزائرين ، ومحولات الأشجار". [ 1 ]
يهدف OMeta بشكل أساسي إلى تمكين جمهور أوسع من استخدام تقنيات متاحة عادةً لمبرمجي اللغات فقط، مثل التحليل النحوي. [ 1 ] كما يُعرف باستخدامه في إنشاء نماذج أولية بسرعة، مع العلم أن البرامج المكتوبة بلغة OMeta تُعتبر عمومًا أقل كفاءة من تلك المكتوبة بلغات البرمجة الأساسية (اللغة الأصلية)، مثل جافا سكريبت . [ 2 ] [ 3 ]
تشتهر لغة OMeta باستخدامها في إنشاء لغات خاصة بمجالات محددة ، وخاصةً لسهولة صيانة تطبيقاتها (نيوكوم). تتطلب OMeta، مثل غيرها من اللغات الوصفية ، لغة مضيفة؛ وقد تم إنشاؤها في الأصل كتطبيق للغة COLA. [ 1 ]
وصف
لغة OMeta هي لغة وصفية تُستخدم لإنشاء نماذج أولية للغات خاصة بمجالات محددة . وقد طُرحت في البداية كلغة كائنية التوجه لمطابقة الأنماط. [ 1 ] تستخدم قواعد نحوية لتحليل التعبيرات (أوصاف للغات "تعتمد على التعرف على السلاسل النصية بدلاً من توليدها" [ 4 ] ) مصممة "للتعامل مع أنواع مختلفة من البيانات"، مثل الأحرف والأرقام والسلاسل النصية والذرات والقوائم. وهذا ما يزيد من مرونتها، مما يُمكّنها من العمل على البيانات المهيكلة وغير المهيكلة على حد سواء . [ 1 ]
تتمثل الميزة الرئيسية للغة OMeta مقارنةً باللغات المشابهة في قدرتها على استخدام نفس الشيفرة لجميع خطوات الترجمة، مثل التحليل المعجمي والتحليل النحوي. كما تدعم OMeta تعريف قواعد الإنتاج بناءً على الوسائط؛ ويمكن استخدام هذه الميزة لإضافة هذه القواعد إلى OMeta، وإلى لغة البرمجة المضيفة التي تعمل بها. بالإضافة إلى ذلك، يمكن لهذه القواعد استخدام بعضها البعض كوسائط، مما يُنشئ "قواعد من الرتبة العليا"، كما يمكنها أن ترث من بعضها البعض للحصول على قواعد إنتاج من الشيفرة الموجودة. وتستطيع OMeta استخدام القيم المنطقية (صواب/خطأ) للغة البرمجة المضيفة أثناء مطابقة الأنماط؛ ويُشار إلى هذه القيم باسم "المسندات الدلالية". وتستخدم OMeta مطابقة الأنماط المعممة لتمكين المبرمجين من تنفيذ مراحل الترجمة وتوسيعها بسهولة أكبر باستخدام أداة واحدة. [ 1 ]
تستخدم OMeta قواعد نحوية لتحديد القواعد التي تعمل وفقها. وتستطيع هذه القواعد استيعاب عدد غير محدود من المتغيرات بفضل استخدام دالة __init__ التي تُستدعى عند إنشاء قاعدة نحوية. ويمكن للقواعد النحوية أن ترث من بعضها البعض وتستدعي بعضها (باستخدام "آلية استدعاء الإنتاج الخارجي"، مما يُمكّن القواعد النحوية من "استعارة" تدفقات الإدخال من بعضها البعض)، تمامًا مثل الفئات في لغات البرمجة الكاملة. [ 1 ] كما تُعطي OMeta الأولوية للخيارات داخل قاعدة نحوية معينة لإزالة الغموض، على عكس معظم اللغات الوصفية. بعد مطابقة نمط الإدخال مع قاعدة نحوية معينة، تُسند OMeta كل مكون من مكونات النمط إلى متغير، ثم تُمرر هذا المتغير إلى اللغة المضيفة. [ 5 ]
تستخدم OMeta مطابقة الأنماط لتنفيذ جميع خطوات الترجمة التقليدية تلقائيًا. تبدأ بالعثور على أنماط في الأحرف لإنشاء رموز، ثم تطابق هذه الرموز مع قواعدها النحوية لإنشاء أشجار بناء الجملة. بعد ذلك، تُطابق مدققات الأنواع الأنماط على أشجار بناء الجملة لإنشاء أشجار مُعَلَّمة، ويقوم الزوار بالمثل لإنتاج أشجار أخرى. ثم يُطابق مُولِّد الشفرة الأنماط بين الأشجار لإنتاج الشفرة. [ 3 ] في OMeta، من السهل "التنقل عبر شجرة التحليل نظرًا لأن هذه الوظيفة مدعومة أصلاً". [ 3 ]
تُعرف لغة OMeta بسهولة استخدامها في معظم لغات البرمجة، على الرغم من أنها تُستخدم بشكل شائع في لغة تنفيذها - على سبيل المثال، تُستخدم OMeta/JS في JavaScript. [ 5 ] ولأنها تتطلب لغة مضيفة، يُشير إليها مُبتكرو OMeta باسم "اللغة الطفيلية". [ 6 ]
تطوير
قام أليساندرو وارث وإيان بيومارتا بتطوير OMeta في معهد فيوبوينتس للأبحاث، وهي منظمة تهدف إلى تحسين أنظمة البحث والحوسبة الشخصية، عام 2007. استخدموا في البداية بنية كائنات لامدا المدمجة (COLA)، وهي لغة ذاتية الوصف تم بحثها في معهد فيوبوينتس للأبحاث، كلغة مضيفة لـ OMeta، ثم قاموا لاحقًا، بمساعدة يوشيكي أوشيما، بنقلها إلى لغة Squeak Smalltalk للتحقق من قابليتها للاستخدام مع لغات مضيفة متعددة. كما استُخدمت OMeta "لتنفيذ مجموعة فرعية شبه كاملة من... جافا سكريبت" كدراسة حالة في ورقتها التمهيدية. [ 1 ]
يستخدم
تُستخدم لغة OMeta، كغيرها من اللغات الوصفية، بشكل أساسي لإنشاء لغات خاصة بمجال معين (DSLs)؛ وتحديدًا، تُستخدم لإنشاء نماذج أولية سريعة لهذه اللغات. إلا أن بطء تشغيلها وعدم وضوح تقارير الأخطاء يُقللان من وظيفتها كلغة برمجة كاملة (Heirbaut 73–74). تكمن فائدة OMeta في قدرتها على استخدام صيغة واحدة لكل مرحلة من مراحل الترجمة، مما يسمح باستخدامها بدلًا من عدة أدوات منفصلة لإنشاء مُترجم. [ 5 ] كما تُقدّر OMeta لسرعتها في إنشاء لغات DSLs، وانخفاض حجم الشيفرة المطلوبة لإنجاز هذه المهمة بشكل ملحوظ مقارنةً بالتطبيقات التقليدية، حيث تُشير التقارير إلى أنها تتطلب حوالي 26% فقط من عدد أسطر الشيفرة الوظيفية مقارنةً بالتطبيقات التقليدية. [ 2 ]
أمثلة
فيما يلي مثال على لغة الآلة الحاسبة الأساسية في لغة C# باستخدام OMeta:
ometa BasicCalc < : Parser { Digit = super : d -> d . ToDigit (), Number = Number : n Digit : d -> ( n * 10 + d ) | Digit , AddExpr = AddExpr : x ' + ' MulExpr : y -> ( x + y ) | AddExpr : x ' - ' MulExpr : y -> ( x - y ) | MulExpr , MulExpr = MulExpr : x ' * ' primExpr : y -> ( x * y ) | MulExpr : x ' / ' primExpr : y -> ( x / y ) | PrimExpr , PrimExpr = ' ( ' Expr : x ' ) ' -> x | Number , Expr = AddExpr }من الممكن أيضاً إنشاء فئات فرعية من اللغات التي قمت بكتابتها:
ometa ExponentCalc < : BasicCalc { MulExpr = MulExpr : x ' ^ ' PrimExpr : e -> Math . pow ( x , e ) | super }يمكن أيضًا استدعاء اللغات المكتوبة مسبقًا بدلاً من توريثها:
ometa ScientificCalc < : Parser { MathFunc : n = Token ( n ) Spaces , AdvExp = MathFunc ( ' sqrt ' ) AdvExp : x -> Math . Sqrt ( x ) | FacExp FacExp = PrimExp : x ' ! ' -> { var r = 1 ; for (; x > 1 ; x -- ) { r *= x ; } return r ; } | PrimExp PrimExp = foreign ( ExponentCalc . Expr ): x -> x Expr = AdvExp }الإصدارات
يمكن نظريًا تطبيق OMeta في أي لغة برمجة، ولكن يُستخدم غالبًا كـ OMeta/JS، وهو تطبيق مكتوب بلغة جافا سكريبت. [ 5 ] وقد ذكر وارث أن الأنماط في "OMeta/X - حيث X هي لغة برمجة معينة" من الأفضل تركها تتأثر بـ "X" بدلًا من توحيدها داخل OMeta، نظرًا لأن لغات البرمجة المختلفة تتعرف على أنواع مختلفة من الكائنات. [ 6 ]
ميتاكولا
كانت MetaCOLA أول تطبيق للغة OMeta، وقد استُخدمت في الورقة التعريفية للغة. نفّذت MetaCOLA أولى أكواد الاختبار للغة OMeta، وكانت إحدى الأشكال الثلاثة (الأشكال الأخرى هي OMeta/Squeak وOMeta/JS شبه المكتملة) للغة التي تم تطويرها قبل إصدارها. [ 1 ]
أوميتا/سكويك
كان OMeta/Squeak نسخةً معدلةً من OMeta استُخدمت خلال العرض التوضيحي الأولي للنظام. يُستخدم OMeta/Squeak "لتجربة صيغ بديلة لنظام Squeak EToys". يتطلب OMeta/Squeak استخدام الأقواس المربعة والأقواس المعقوفة (الأقواس المدببة) في عمليات القواعد، على عكس OMeta/JS الذي يتطلب الأقواس المربعة فقط. [ 6 ] مع ذلك، يتميز OMeta/Squeak 2 بصيغة أقرب إلى صيغة OMeta/JS. [ 7 ] على عكس تطبيق COLA لـ OMeta، لا يحفظ إصدار Squeak النتائج الوسيطة (لا يخزن الأرقام المستخدمة مسبقًا في الحساب). [ 1 ]
OMet/JS
OMeta/JS هي OMeta مُطبقة بلغة جافا سكريبت. تتميز تطبيقات اللغات التي تستخدم OMeta/JS بسهولة استخدامها وكفاءتها العالية في استهلاك المساحة مقارنةً بتلك المكتوبة بلغة جافا سكريبت الأصلية، إلا أن الأولى أظهرت أداءً أبطأ بكثير. لهذا السبب، تُعتبر OMeta/JS أداةً بالغة الأهمية لإنشاء النماذج الأولية، ولكنها ليست الخيار المُفضل لتطبيقات لغات الإنتاج. [ 3 ]
مقابل جافا سكريبت
يُعتبر استخدام أدوات تطوير لغات المجال المحددة (DSL)، مثل OMeta، أسهل بكثير في الصيانة من تطبيقات JavaScript التقليدية، وذلك لانخفاض عدد أسطر التعليمات البرمجية غير المعلقة (NCLOC) فيها. ويعود ذلك جزئيًا إلى "التعليمات البرمجية الدلالية التي تُنشئ كائنات شجرة بناء الجملة المجردة (AST) أو تُجري عمليات محدودة على السلاسل النصية". كما أن افتقار OMeta إلى "بنية خالية من السياق" يسمح باستخدامها في إنشاء كلٍ من المحلل اللغوي والمحلل المعجمي، على حساب إضافة أسطر إضافية من التعليمات البرمجية. ومن العوامل الأخرى التي تُشير إلى سهولة صيانة OMeta ارتفاع مؤشر سهولة الصيانة، بينما يُشير مؤشر Halstead Effort إلى أن المحلل اللغوي التقليدي يتطلب جهد تطوير أكبر بثلاث مرات مقارنةً بمحلل OMeta. ومثل JavaScript، تدعم OMeta/JS "صيغة Waebric الكاملة". [ 3 ]
إحدى المزايا الرئيسية لـ OMeta، المسؤولة عن الفرق في عدد أسطر التعليمات البرمجية غير القابلة للحذف (NCLOC)، هي إعادة استخدام OMeta لآلية "التنقل بين أسطر الشجرة" الخاصة بها، حيث تسمح لمدقق الأنواع بتوريث هذه الآلية من المحلل اللغوي، مما يُمكّنه من التكيف مع التغييرات في محلل OMeta، بينما تحتوي آلية التنقل بين أسطر الشجرة في JavaScript على كمية أكبر من التعليمات البرمجية، ويجب تعديلها يدويًا لتتوافق مع هذه التغييرات. ميزة أخرى هي أن قواعد OMeta تتمتع بمستوى تجريد أعلى من مستوى تجريد التعليمات البرمجية للبرنامج. ويمكن اعتبارها أيضًا "نتيجة للتعليمات البرمجية الدلالية التي تُنشئ كائنات شجرة بناء الجملة المجردة (AST) أو تُجري عمليات محدودة على السلاسل النصية"، على الرغم من أن الجوانب غير الدلالية للقواعد تُؤدي إلى الحاجة لعدد كبير نسبيًا من أسطر التعليمات البرمجية لكل دالة بسبب تعريف المسافات البيضاء الصريح - وهي آلية مُطبقة لتمكين OMeta من العمل كأداة واحدة لإنشاء لغات برمجة خاصة بالمجال (DSL). [ 3 ]
من حيث الأداء، وُجد أن OMeta تعمل بسرعة بطيئة مقارنةً بالتطبيقات الأصلية. يُعد استخدام تقنيات التراجع في OMeta سببًا رئيسيًا محتملاً لذلك (يتضمن محلل OMeta سبعة عوامل استباقية... هذه العوامل ضرورية لتمييز قواعد معينة عن بعضها البعض ولا يمكن حذفها من القواعد النحوية)؛ ومع ذلك، فمن المرجح أن يكون هذا الانخفاض في الأداء ناتجًا عن طريقة التخزين المؤقت في OMeta.
يؤدي تخزين خطوات التحليل الوسيطة إلى زيادة حجم جدول التحليل بما يتناسب مع عدد الرموز الطرفية وغير الطرفية (المعاملات) المستخدمة في القواعد النحوية. ونظرًا لأن قواعد محلل OMeta تحتوي على 446 معاملًا، فمن المعتقد أن الأداء يتأثر سلبًا. [ 3 ]
لكنّ ميزة OMeta في تحسين الأداء مقارنةً بالتنفيذ الافتراضي تكمن في تحليل اللغة. إذ يتباطأ محلل اللغة الافتراضي في جافا سكريبت بشكل ملحوظ بسبب طريقة تحويل البرنامج بأكمله إلى سلسلة نصية باستخدام جافا قبل بدء التحليل. مع ذلك، فإنّ تنفيذ OMeta أبطأ بكثير بشكل عام. [ 3 ]
يُعاني OMeta أيضًا من قصور في الإبلاغ عن الأخطاء. فبينما تُعيد التطبيقات الأساسية رسالة الخطأ الصحيحة في حوالي 92% من حالات الاختبار من حيث موقع الخطأ، يُعيد OMeta ببساطة عبارة "فشل المطابقة!" لأي خطأ مُعطى. ويتطلب تحديد مصدر الخطأ عبر OMeta "حساب أحرف السطر الجديد يدويًا في رمز الإجراء الدلالي لإخراج رقم السطر الذي فشل عنده التحليل على الأقل". [ 3 ]
ميتا#
OMeta# هو مشروع من ابتكار جيف موزر، يهدف إلى ترجمة OMeta/JS إلى دالة C#؛ ولذلك، يستند تصميم OMeta# إلى تصميم أليساندرو وارث لـ OMeta/JS. يهدف المشروع إلى تمكين المستخدمين من إنشاء لغات فعّالة بسهولة بالغة. تحديدًا، صُمم OMeta# ليكون أداةً واحدةً لتطوير لغات .NET ، مما يُسهّل عملية تعلم تطوير اللغات، ويُصبح موردًا تعليميًا مفيدًا، وقابلًا للتطبيق العملي في التطبيقات الحقيقية. [ 5 ] يستخدم OMeta# حاليًا C# 3.0 كلغة مضيفة لـ OMeta بدلًا من 4.0؛ ولأن C# 3.0 لغة ثابتة وليست ديناميكية، فإن التعرف على اللغة المضيفة داخل OMeta# يكون "أكثر تعقيدًا وأكبر حجمًا بمرتين إلى ثلاث مرات مما كان عليه الحال" في لغة ديناميكية. [ 8 ]
تستخدم OMeta# فئات .NET، أو أنواعها، كقواعد نحوية وأساليب لقواعدها الداخلية. وتستخدم OMeta# الأقواس المعقوفة ({ و}) للتعرف على لغة البرمجة المضيفة في القواعد النحوية. تركز اللغة على كتابة قوية ونظيفة وثابتة، على غرار لغة البرمجة المضيفة، مما يزيد من تعقيد عملية إنشائها. يجب أن تكون التطبيقات الجديدة في C# متوافقة مع لغة .NET الوصفية، مما يزيد من تعقيد عملية الإنشاء. ولمنع المستخدمين من إساءة استخدام القواعد الوصفية في OMeta# عن طريق الخطأ، اختار موسر تنفيذها كواجهة صريحة تُعرض عبر خاصية (على سبيل المثال، بدلاً من "_apply"، لدي "MetaRules.Apply"). كُتبت الأجزاء اللاحقة من OMeta# بلغة OMeta# نفسها، مع أن وظائف اللغة لا تزال مرتبطة إلى حد كبير بلغة C#. [ 9 ] نُشر كود مصدر OMeta# على Codeplex، ومن المُخطط أن يبقى مشروعًا مفتوح المصدر. ومع ذلك، فقد توقفت التحديثات إلى أجل غير مسمى منذ فترة وجيزة بعد بدايات المشروع، مع إعادة الالتزامات من قبل الخادم في 1 أكتوبر 2012. [ 5 ]
IronMeta
قام جوردون تيشر بإنشاء IronMeta لـ .NET في عام 2009، وعلى الرغم من تشابهه مع OMeta#، إلا أنه تطبيق مدعوم بشكل أكبر وأكثر قوة، ويتم توزيعه بموجب ترخيص BSD على GitHub.
أوم
يُعدّ أوم خليفةً لأوميتا، ويهدف إلى تحسينه من خلال (من بين أمور أخرى) فصل القواعد النحوية عن الأفعال الدلالية. [ 10 ]
انظر أيضاً
- ANTLR (أداة أخرى للتعرف على اللغة)، وهي لغة وصفية مماثلة
- META II: مُترجم-مُترجم مبكر ، كان له تأثير كبير في تطبيق OMeta
مراجع
- 1 2 3 4 5 6 7 8 9 10 وارث، أليساندرو، وإيان بيومارتا. " OMeta: لغة كائنية التوجه لمطابقة الأنماط ". ندوة ACM SIGPLAN 2007 للغات الديناميكية (DLS '07). الطبعة الثالثة. المجلد TR-2007. غلينديل، كاليفورنيا: معهد فيوبوينتس للأبحاث، 2007. تقرير فني من VPRI. موقع إلكتروني. 30 سبتمبر 2013.
- 1 2 كلينت، بول، تيجس فان دير ستورم، ويورغن فينجو. " حول تأثير أدوات لغات المجال المحددة على قابلية صيانة تطبيقات اللغة ". وقائع ورشة العمل العاشرة حول أوصاف اللغات والأدوات والتطبيقات (LDTA '10). نيويورك، نيويورك. بدون ناشر، 2010. موقع إلكتروني. 30 سبتمبر 2013.
- 1 2 3 4 5 6 7 8 9 هيربوت، نيكولاس. "مقارنة بين تقنيتين لتنفيذ لغات خاصة بالمجال: OMeta/JS مقابل جافا سكريبت". أطروحة. جامعة أمستردام، 2009. موقع إلكتروني. 30 سبتمبر 2013. < http://dare.uva.nl/document/153293 >.
- ↑ ماسكارينهاس، فابيو، سيرجيو ميديروس، وروبرتو إيروساليمسكي . قواعد تحليل التعبيرات للبيانات المهيكلة. بدون مكان نشر: بدون ناشر، بدون تاريخ. موقع إلكتروني. < http://www.lbd.dcc.ufmg.br/colecoes/sblp/2011/003.pdf مؤرشف بتاريخ 21-10-2013 في أرشيف الإنترنت >.
- 1 2 3 4 5 6 7 8 9 موسر، جيف. "موسروير".: OMeta#: من؟ ماذا؟ متى؟ أين؟ لماذا؟، مدونة، 24 يونيو 2008. موقع إلكتروني. 30 سبتمبر 2013.
- 1 2 3 وارث، أليساندرو. "[أوميتا] حول بناء جملة أوميتا." [أوميتا] حول بناء جملة أوميتا. بدون مكان نشر، 4 يوليو 2008. موقع إلكتروني. 16 أكتوبر 2013. < http://vpri.org/pipermail/ometa/2008-July/000051.html مؤرشف في 20 نوفمبر 2008 في Wayback Machine >.
- ↑ وارث، أليساندرو. "OMeta/Squeak 2". OMeta/Squeak 2. بدون مكان نشر، بدون تاريخ. موقع إلكتروني. 16 أكتوبر 2013. < http://tinlizzie.org/ometa/ometa2.html >.
- ↑ موسر، جيف. "موسروير".: ميتا-فيزباز ، مدونة، 25 أغسطس 2008. موقع إلكتروني. 30 سبتمبر 2013.
- ↑ موسر، جيف. "موسروير": بناء لغة وصفية طفيلية موجهة للكائنات. بلوجر، 31 يوليو 2008. موقع إلكتروني. 30 سبتمبر 2013.
- ↑ "فلسفة أوم" . جيت هاب .
روابط خارجية
- مولدات المحلل اللغوي
- لغات البرمجة الكائنية التوجه
