سؤال

أقوم باختبار محول infix-to-postfix إلى infix ووجدت نوعًا من عدم اليقين. على سبيل المثال ، مجموع Infix بسيط

1 + 2 + 3 + 4

يمكن تحويلها إلى postfix واحد

1 2 + 3 + 4 +

على افتراض أن المشغلين ذوي الأسبقية متساوية لا يتم تجميعهم. إذا كانوا إذن أحصل

1 2 3 4 + + +

من ناحية أخرى ، يمكن تحويل جميع تعبيرات postfix التالية إلى المبلغ الأولي

1 2 + 3 + 4 +
1 2 + 3 4 + +
1 2 3 4 + + +

هل كل هذه التعبيرات postfix صحيحة؟

update1

إذا قمت بعمل مثل هذا المحول ، إلى أي نموذج ستختار؟ أحتاج إلى اختيار واحد للاختبار.

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

المحلول

تحتاج إلى تحديد قيد إضافي.

رياضيا ، تعبيرات postfix الخاصة بك كلها متشابهة. ولكن على إضافة عدد صحيح من الكمبيوتر ، ليست بالفعل تبادلًا بسبب الفائض.

استبدال 1 2 3 4 مع ABCD والنظر في إمكانية الفائض. تحدد معظم لغات البرمجة ذلك a + b + c + d يجب تقييم اليسار إلى اليمين بحيث a b + c + d + هي الترجمة الصحيحة الوحيدة.

فقط عندما تحدد أن ترتيب التقييم يكون "غير محدد" جميع إصدارات postfix متكافئة. كان هذا هو الحال بالنسبة لمجموعات المترجمين (أقدم).

نصائح أخرى

نعم ، كل شيء صحيح. أنها تتوافق مع تعبيرات Infix المقصودة:

((1 + 2) + 3) + 4
(1 + 2) + (3 + 4)
1 + (2 + (3 + 4))

+ مربك - إنه مبتدئ ، لذلك في الواقع ، كل نتيجة يبدو صيح.

التفكير في استبدال + مع المشغلين الآخرين: 1 a 2 b 3 c 4.
النتيجة الصحيحة هنا ، للمشغلين اليساريين ، هي

1 2 a 3 b 4 c

لذلك ، في حالتك ، أتوقع 1 2 + 3 + 4 +

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