سؤال

أحاول استخدام الشجرة تحليل وهو الملف ERB.أنا بحاجة إلى أن تكون قادرة على التعامل مع خطوط مثل التالية:

<% ruby_code_here %>
<%= other_ruby_code %>

لأن الشجرة هو مكتوب في روبي ، و تكتب الشجرة قواعد النحو في روبي, هل هناك بالفعل بعض الموجودة في الشجرة أن أقول "مرحبا ابحث عن روبي البرمجية هنا ، انهيارها" دون الحاجة إلي كتابة قواعد منفصلة للتعامل مع جميع أجزاء روبي اللغة ؟ أنا أبحث عن وسيلة ، .treetop النحوي الملف أن يكون شيئا مثل:

rule erb_tag
  "<%" ruby_code "%>" {
    def content
      ...
    end
  }
end

حيث ruby_code هو التعامل معها من قبل بعض القواعد التي من الشجرة ؟

تحرير: شخص آخر تحليل إرب باستخدام روبي-ليكس لكن حصلت أخطاء في محاولة لإعادة إنتاج ما فعل.على rlex البرنامج لم يحقق الدرجة الكاملة عندما ولدت محلل من الدرجة.

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

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

المحلول

بقدر ما أعرف, لا أحد لديه حتى الآن خلق الشجرة النحوي عن روبي.(في الواقع, لا أحد لديه أي وقت مضى قادرة على خلق أي النحوي عن روبي وغيرها من YACC النحوي الذي يأتي مع التصوير بالرنين المغناطيسي YARV.) أنا أعرف أن صاحب الشجرة وقد تم العمل على واحد لعدة سنوات, ولكن ليس من مهمة تافهة.الحصول على ANTLR اللغة التي تستخدم في XRuby حق استغرق حوالي 5 سنوات و لا تزال غير متوافقة تماما.

روبي الجملة بجنون, mindbogglingly المعقدة.

نصائح أخرى

لا


أنا لا أعتقد ذلك.تحديد معقدة وخفية روبي النحوي في الشجرة سيكون إنجازا كبيرا ، ولكن ينبغي أن يكون من الممكن.

الفعلية روبي نحوي هو مكتوب في yacc.الآن yacc الأسطوري أداة ولكن الشجرة يولد أقوى فئة من موزعي, لذلك ينبغي أن يكون من الممكن و ربما شخص ما قد فعلت ذلك.

ليس بعد الظهر المشروع.

قد يكون أنا أمزح ولكن إذا yacc هو أقل تعقيدا من روبي ثم يمكن أن تدرك yacc في الشجرة التي من يستخدم روبي قواعد إنشاء yacc.

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

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

ما يستحق, الشجرة نفسها "يوزع" روبي كتل بهذه الطريقة ؛ هو فقط يحسب { و } الأحرف حتى الإغلاق تم العثور على أحد.حتى إذا كان لديك كتلة يحتوي على } في سلسلة حرفية أنت مكسورة (ولكن يمكنك العمل في جميع أنحاء بما في ذلك مطابقة واحدة في تعليق).

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