سؤال

أنا أستخدم Treetop لإنشاء محلل للغة البرمجة الصغيرة.

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

parser = MyParser.new
tree = parser.parse("foobar")
p tree

أحصل على شيء مثل

SyntaxNode offset=0, "foobar":
    SyntaxNode offset=0, "f"
    SyntaxNode offset=1, "o"
    SyntaxNode offset=2, "o"
    SyntaxNode offset=3, "b"
    SyntaxNode offset=4, "a"
    SyntaxNode offset=5, "r"

في الأساس ، أود الحصول على وسيلة للوصول إلى offset سمة معينة SyntaxNode كائن (أو فئة فرعية منه). لسوء الحظ ، حسب http://treetop.rubyforge.org/semantic_interpretation.html الطرق الوحيدة المتاحة على Treetop::Runtime::SyntaxNode نكون terminal?, nonterminal?, text_value و elements, ، لذلك لا يبدو أن هناك طريقة مدمجة للقيام بذلك.

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

المحلول

يحتوي كل بناء جملة على طريقة "فاصل" وهو كائن Ruby Range. الإزاحة هو الفاصل الزمني.

قائمة بريد دعم TRETOP في http://groups.google.com/group/treetop-dev

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