سؤال

لدي فكرة عن مشروع هواية يقوم ببعض تحليل التعليمات البرمجية والتلاعب. سيتطلب هذا المشروع من كل من أشجار بناء الجملة الخرسانية والمجموعة من ملف مصدر معين. بالإضافة إلى ذلك، ستكون المراجع الثنائية بين الشجرتين مفيدة. أود تجنب عمل نسخ قواعد اللغة لإنشاء Lexer الخاص بي ومحلل.

هل هناك تنسيق قياسي لوصف إما أشجار بناء الجملة الخرسانية أو مجردة؟ هل تدعم أي سلاسل أداة تستخدم على نطاق واسع الإخراج إلى هذه التنسيقات؟

ليس لدي لغة برمجة مستهدفة معينة في الاعتبار. أي واحد شائع سوف يفعله لنموذج أولي، لكنني أفضل أن أعرف جيدا: بيثون، ج #، جافا سكريبت، أو C / C ++.

أود القدرة على تشغيل ملف مصدر من خلال أداة أو مكتبة واسترجع كلا الشجرتين. في عالم مثالي، سيكون من العملي تشغيل هذه الأداة على التعليمات البرمجية حيث يتم تحريره من قبل مستخدم ويكون متسامحا من الأخطاء. مرة أخرى، أنا ببساطة أحاول تطوير النموذج الأولي، لذلك هذه المتطلبات هي الرموز LAX جميلة.

شكرا!

هل كانت مفيدة؟

المحلول

في مشروعنا حددنا Metamodel AST في UML واستخدام Antlr (Java) لملء النموذج. نحافظ أيضا على معلومات الرمز المميز من Antlr بعد التحليل، لكننا لم نحاول بعد تحديث الملف النصي الأساسي مع تعديلات مصنوعة على النموذج.

يحتوي هذا على النفقات العامة البشعة (في البنية التحتية، مثل Eclipse UML2 / EMF)، ولكن هدفنا هو استخدام الأدوات الرفيعة المستوى لتطوير النموذج / المدفوعة (MDD، MDA) على أي حال، لذلك قررنا استخدامه على كل مستوى وبعد

أعتقد أن أحد طلابنا قد لعبوا مرة واحدة openarchittureware. وتمكنت من الحصول على تغييرات من المحرر المستند إلى الكسوف، مرة أخرى إلى شجرة بناء الجملة (غير المرتبطة بنموذج UML أعلاه) تلقائيا، لكنني لا أعرف التفاصيل حول هذا الموضوع.

قد ترغب أيضا في النظر في Antlr's قواعد النهر الشجرة.

نصائح أخرى

قرر مجتمع البحث أن تبادل الرسم البياني كان الشيء الصحيح الذي يجب القيام به عند نقل المعلومات من أداة تحليل برنامج إلى آخر. يرى http://www.gupro.de/gxl.

في الآونة الأخيرة، حددت OMG معيارا لأشجار بناء الجملة التجريدية التجريبية. يرى http://www.omg.org/spec/astm/1.0/beta1/

يبدو أن هذه المشكلة قد تم حلها مرارا وتكرارا. هناك نصف مقترحات "حافلة الأدوات" نصف دزينة التي تم إجراؤها على مر السنين التي تحلها جميعا، مع عدم تجاوز أي شخص في الصناعة. المشكلة هي أن أ) من السهل تمثيل ASTS باستخدام أي نوع من الترميزات المعتيمين [أقواس مثل Lisp، مثل XML، ...] حتى يقوم الأشخاص بفة حلهم الخاص بسهولة، و B) لأداة واحدة لتبادل AST مع آخر ، يجب أن يوافقوا بشكل أساسي على ما تعني العقد AST؛ لكن معظم ests مستمدة عن طريق الخطأ إلى حد ما من تقنية قواعد النحوية / التحليل المستخدمة من قبل كل أداة، وهناك دائما تقريبا الخلاف حول ذلك بين الأدوات. لذلك، لقد رأيت عدد قليل جدا من الأدوات التي تبادل asts هادفة.

إذا كنت تقوم بعمل هواية، فسأمسك بترميز الأشجار مثل LISP، حيث يحتوي كل عقدة على التنسيق التالي: (...) سهل الإنشاء، وسهل القراءة.

أنا أعمل على أداة المهنية لمعالجة البرامج. وبعد إذا قمنا بطباعة AST، فإننا نفعل ما سبق. معظمهم من المتقدمة الفردية معقدة للغاية للنظر في الممارسة العملية، لذلك بالكاد طباعت بأكملها AST، في أحسن الأحوال عقدة وعدد قليل من الأطفال. لا تبادل الأداة asts مع أي شخص (انظر الأسباب المذكورة أعلاه :) ولكن فقط بناء عليه في الذاكرة، والقيام بأشياء whizzy معها لأسباب تحليل أو أسباب التحول، ثم مجرد حذفه (لا حاجة لإرساله في أي مكان) أو تجديد نص اللغة الأصلية من الشجرة. [هذا الأخير يعني أنك بحاجة إلى تقنية مكافحة التحليل أو "الطبيمي"

معايير محددة هي توقع، في حين أن معايير الأغراض العامة أكثر قد تكون مناسبة أيضا. جيريلا باكستر المذكورة بالفعل GXL., ، و RDF. قد يتم إضافته أيضا، فقط سيتطلب الأمر من الأطباق المناسبة وهو موجه نحو الدلالي من بناء الجملة. لا يزال قد يكون خيارا للتحقيق.

لمعايير محددة، جيريلا باكستر سابقا ASTM., ، واحد آخر، على الرغم من أنه يستهدف نوعا محددا من لغة البرمجة (لغات المنطق)، معيار للرسوم البيانية الدلالية / المفاهيمية, ، معروف ك ISO-IEC 24707 2007.

ليس معيارا بمفرده، ولكن ورقة حول هذا الموضوع: نحو تمثيلات شفرة المصدر المحمولة باستخدام XML.

لا أعرف أي معيار يستخدم بفعالية (في هذا المجال، هذا هو دائما الطبخ من المنزل في كل مكان)، أنا مهتم فقط في هذا الموضوع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top