سؤال

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

إذا لاحظت ، فإن الخطوة الأولى من الخوارزمية هي "قراءة رمز". هذا ليس بالضبط شيء غير تميز. يمكن أن تتكون الرموز من الأرقام والمشغلين والباريس.

إذا كنت تفعل شيئًا مثل:

(5+1)

سوف تعطيني سلسلة بسيطة.

ومع ذلك ، يصبح الأمر أكثر تعقيدًا إذا كان لديك أرقام بأرقام متعددة مثل:

((2048*124) + 42)

الآن سلسلة ساذجة. split () لن تقوم بالخدعة. الأرقام متعددة الأرقام مشكلة.

أعلم أنه يمكنني كتابة Lexer ، لكن هل هناك طريقة للقيام بذلك دون كتابة Lexer الكامل؟

أنا أقوم بتنفيذ هذا في JavaScript وأود تجنب الاضطرار إلى النزول في مسار Lexer إن أمكن. سأستخدم المشغلون "*" و "+" و "-" و "/" ، إلى جانب الأعداد الصحيحة.

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

المحلول

ماذا عن التعبيرات العادية؟ يمكنك بسهولة كتابة Regex لتقسيمها بالطريقة التي تريدها ، وتقبل طريقة js.split regex كمعلمة أيضًا.

على سبيل المثال ... (تعديل لتضمين جميع chars التي تحتاجها وما إلى ذلك)

/([0-9]+|[*+-\/()])/

نصائح أخرى

يمكنك استخدام تطابق عالمي كما هو موضح في http://mikesamuel.blogspot.com/2009/05/fetication-parsing-in-javaScript.html

في الأساس ، يمكنك إنشاء regex واحد يصف رمزًا

/[0-9]+|false|true|\(|\)/g

ووضع 'g' في النهاية بحيث تتطابق مع العالم ، ثم تسمي طريقة المطابقة الخاصة بها

var tokens = myRegex.match(inputString);

واستعادة صفيف.

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