سؤال

أحاول الحصول على أساسية من تحليل Treetop. إليك جزءًا بسيطًا جدًا من القواعد حتى أتمكن من القول ArithmeticParser.parse('2+2').value == 4.

grammar Arithmetic
  rule additive
    first:number '+' second:number {
      def value
        first.value + second.value
      end
    }
  end

  rule number
    [1-9] [0-9]* {
      def value
        text_value.to_i
      end
    }
  end
end

تفسير 2+2 يعمل بشكل صحيح ، وإعادة عقدة. ومع ذلك ، التحليل 2 أو 22 عائدات nil.

ماذا افتقد؟

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

المحلول

فهمتك! على الرغم من أنني كنت عادةً ما أحذف السؤال ، إلا أنني لن أفاجأ إذا أساء شخص آخر أيضًا فهم Treetop ، لذلك سأترك هذا هنا للرجوع إليه.

Treetop لا يمر فقط من خلال القواعد ، تبحث عن واحد يطبق. بدلاً من ذلك ، يبدأ في القاعدة الأولى ، وإذا لم تتطابق القاعدة الأولى ، فيجب أن تكون كذلك قسري للنظر في البدائل. وبالتالي، / number يجب أن تظهر في نهاية additive قاعدة.

grammar Arithmetic
  rule additive
    first:number '+' second:number {
      def value
        first.value + second.value
      end
    }
    / number
  end

  rule number
    [1-9] [0-9]* {
      def value
        text_value.to_i
      end
    }
  end
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top