السلام عليكم
قبل مدة وانا اقرا في كتاب حول تصميم المترجمات وبنائها لك واجهتني مشكلة وهي ان معظم الامثلة تدور حول PostFix وصراحة انا لفهم بناء PostFix وكيفية استعملها في تركيب الجمل الرياضية
فارجو منكم شرح بسيط حول فكرتها
شكرا
السلام عليكم
قبل مدة وانا اقرا في كتاب حول تصميم المترجمات وبنائها لك واجهتني مشكلة وهي ان معظم الامثلة تدور حول PostFix وصراحة انا لفهم بناء PostFix وكيفية استعملها في تركيب الجمل الرياضية
فارجو منكم شرح بسيط حول فكرتها
شكرا
يمكن كتابة التعابير باكثر من طريقة :
مثلا التعبير الحسابي 3+4 هنا مكتوب بطريقة الInfix اي ان العملية في الوسط بين المعاملين :
يمكن كتابته بطريقة الPolish notation او prefix notation :
+ ثم 3 ثم 4 بحيث العملية في الاول ثم المعاملات
و يمكن كتابته بطريقة الRrevers Polish notation او Postfix notation :
3 ثم 4 ثم + بحيث العملية في الاخر وقبلها المعاملات
توجد خوارزمية سريعة لحساب التعابير تعتمد على الPostfix لذلك تستخدم في المترجمات.
اعتقد الويكي يشرح الموضوع بالتفصيل :
http://en.wikipedia.org/wiki/Reverse_Polish_notation
بالتوفيق
ibr_exn كتب:يمكن كتابة التعابير باكثر من طريقة :مثلا التعبير الحسابي 3+4 هنا مكتوب بطريقة الInfix اي ان العملية في الوسط بين المعاملين :
يمكن كتابته بطريقة الPolish notation او prefix notation :
+ ثم 3 ثم 4 بحيث العملية في الاول ثم المعاملات
و يمكن كتابته بطريقة الRrevers Polish notation او Postfix notation :
3 ثم 4 ثم + بحيث العملية في الاخر وقبلها المعاملات
توجد خوارزمية سريعة لحساب التعابير تعتمد على الPostfix لذلك تستخدم في المترجمات.
اعتقد الويكي يشرح الموضوع بالتفصيل :
http://en.wikipedia.org/wiki/Reverse_Polish_notation
بالتوفيق
مشكور يااخي على الرد
لقد قرات الموضوع في الويكي وفهمت المبدء لكني لم اوفق بحل الامثلة المتقدمة
اتمنى منك ان تعطي مثال اكثر تعقيدا لكي يفهم الموضوع بطريقة افضل
شكرا جزيلا
تم تعديل هذه المشاركة بواسطة زيد الرافدين في 23 يوليو 2009 في 23:49
a+(b+c)= abc++ (a+b)+c = ab+c+a-b*c a-b*c = abc*- (a/b)*(c/d) = ab/cd/* a/(b+c*d-e) = abcd*+e-/ a-b*c+d/e = abc*-de/+
الفكرة ببساطة
1. ان تجعل العملية اخر شيء وقبلها المعاملات تضعهم برتيبهم كما هم
2. ان تنتبه لاولويات العمليات يعني تبدأ بالاقواس ، الضرب والقسمة قبل الجمع والطرح وهكذا
3. الاقواس تلغى.
مثلا : لاحظ التعبير الثالث : ستبدا تكتب التعبيرالذي يحتوي عملية الضرب لان لها اولوية على عملية الطرح
bc ثم *
الان اعتبر ان ال ذي كتبته من قبل كله عدد وبالتالي اصبح معك عملية طرح عددين لذا ستضع اشارة الطرح في الاخير وتضع المعاملات كما هي بالترتيب فنبدا بالمعامل الاول
a
ثم الناتج من عملية الضرب السابقة - ستضعه كله كما هو اعتبره كله عدد وضعه في مكانه بالترتيب
ثم اشارة الطرح
ارجو ان يكون المثال واضح
جرب اعمل كم تعبير معقد وحاول حله ودعنا نرى حلك
بالتوفيق
تم تعديل هذه المشاركة بواسطة ibr_exn في 24 يوليو 2009 في 00:13
تم تعديل هذه المشاركة بواسطة YDVIPER في 24 يوليو 2009 في 00:36
[bg=#000000]
La filosofia e scritta in questo grandissimo libro che continuamente ci sta aperto innanzi a gli occhi (io dico l’universo), ma non si pu o intender se prima non s’impara a intender la lingua e conoscere i caratteri ne’ quali e scritto. Egli e scritto in lingua matematica e i caratteri sono triangoli, cerchi, ed altre figure geometriche senza i quali mezi e impossibile a intenderne umanamente parola; senza questi e un aggirarsi vanamente per un oscuro laberinto.
Galileo
لقد كُتبت الفلسفة في هذا الكتاب العظيم الذي يوجد دائماً أمام أعيننا (و أعني به الكون)، و لكن لا يمكن لأحدٍ أن يفهمه ما لم يتعلم في البدء حروفَ اللغة التي كُتب بها. لقد كُتب بلغة الرياضيات، و الحروف هي مثلثاتٌ و دوائر و أشكالٌ هندسية أخرى؛ بدون هذه اللغة يكون من المستحيل على البشر أن يفهموا و لو كلمة، بدون هذه اللغة نُمسي كمن يتخبطُ بلا هدى في متاهةٍ مظلمة.
جاليليو
[/bg]
Yasser
اخ YDVIPER شكرا على التوضيح المفيد اشكرك كثير الشكر :lol:
اخ ابراهيم شكرا جزيلا على شرحك المفصل للموضوع
لقد استعطت حل جميع الامثلة ووصلت الى جميع نتائجك وسوف اطرح بعض المعادلات وحلها التي كتبتها من بنات افكاري
(a+B)/(c*d)+e=ab+cd*e+/ ((a*B)/c)*d=ab*c/d* a/b+c*d-e =ab/cd*+e-
اتمنى ان تكون حلولي صحيحة :blush:
وشكرا جزيلا على تفاعلكم مع سؤالي
تحياتي
تم تعديل هذه المشاركة بواسطة زيد الرافدين في 24 يوليو 2009 في 01:19
اهلا بالغائب ،كيفك د. ياسر
كعادتي ما زلت فاشل في التنسيق ،
لك جزيل الشكر على مشاركتك
اخي زيد تأكد من الاولى
تم تعديل هذه المشاركة بواسطة ibr_exn في 24 يوليو 2009 في 01:35
عفواً أخي إبراهيم أنا الضيف و أنتم أهل الدار.. -_-
[bg=#000000]
La filosofia e scritta in questo grandissimo libro che continuamente ci sta aperto innanzi a gli occhi (io dico l’universo), ma non si pu o intender se prima non s’impara a intender la lingua e conoscere i caratteri ne’ quali e scritto. Egli e scritto in lingua matematica e i caratteri sono triangoli, cerchi, ed altre figure geometriche senza i quali mezi e impossibile a intenderne umanamente parola; senza questi e un aggirarsi vanamente per un oscuro laberinto.
Galileo
لقد كُتبت الفلسفة في هذا الكتاب العظيم الذي يوجد دائماً أمام أعيننا (و أعني به الكون)، و لكن لا يمكن لأحدٍ أن يفهمه ما لم يتعلم في البدء حروفَ اللغة التي كُتب بها. لقد كُتب بلغة الرياضيات، و الحروف هي مثلثاتٌ و دوائر و أشكالٌ هندسية أخرى؛ بدون هذه اللغة يكون من المستحيل على البشر أن يفهموا و لو كلمة، بدون هذه اللغة نُمسي كمن يتخبطُ بلا هدى في متاهةٍ مظلمة.
جاليليو
[/bg]
Yasser
(a+B)/(c*d)+e=ab+cd*/e+
ارجو ان يكون صحيح هذه المرة
كما يقدم طرقاً أفضل لحساب التعبيرات الرياضياتية عن طريق الـ Stack فيما يسمى Stack-Oriented Programming..
كلامك صحيح YDVIPER 100% فتحليل الجمل الرياضية في جميع المترجمات يعتمد في اغلب الاحيان Stack-Oriented Programming
و Posfix
انا جديد في علم بناء المترجمات وقد رايته بالامر غير هين ( حتى مع خبرتي الطويلة البرمجة ) الامر الصعب بالموضوع هو قلة المصادر مقارنة بباقي المواضيع وكذلك ان طريقة البرمجة التي تستخدم والاهداف المرجوة من كتابة البرنامج تختلف عن الاهداف المتعارف عليها من قبل المبرمجين العرب
تم تعديل هذه المشاركة بواسطة زيد الرافدين في 24 يوليو 2009 في 02:09
ممتاز زيد حلك صحيح.
لتدرس المترجمات تحتاج ان تكون متمكن من موضوع ال Computation Theory و خصوصا ال PDA =Push Down Automata كتاب لينز Linz يعتبر مرجع ممتاز لهذا الموضوع.
بالتوفيق
هذه بعض المحاضرات المبسطة عن الموضوع، و الأولى تحتوي على مثال تفاعلي بـ Java Script
[bg=#000000]
La filosofia e scritta in questo grandissimo libro che continuamente ci sta aperto innanzi a gli occhi (io dico l’universo), ma non si pu o intender se prima non s’impara a intender la lingua e conoscere i caratteri ne’ quali e scritto. Egli e scritto in lingua matematica e i caratteri sono triangoli, cerchi, ed altre figure geometriche senza i quali mezi e impossibile a intenderne umanamente parola; senza questi e un aggirarsi vanamente per un oscuro laberinto.
Galileo
لقد كُتبت الفلسفة في هذا الكتاب العظيم الذي يوجد دائماً أمام أعيننا (و أعني به الكون)، و لكن لا يمكن لأحدٍ أن يفهمه ما لم يتعلم في البدء حروفَ اللغة التي كُتب بها. لقد كُتب بلغة الرياضيات، و الحروف هي مثلثاتٌ و دوائر و أشكالٌ هندسية أخرى؛ بدون هذه اللغة يكون من المستحيل على البشر أن يفهموا و لو كلمة، بدون هذه اللغة نُمسي كمن يتخبطُ بلا هدى في متاهةٍ مظلمة.
جاليليو
[/bg]
Yasser
اقتباسممتاز زيد حلك صحيح.لتدرس المترجمات تحتاج ان تكون متمكن من موضوع ال Computation Theory و خصوصا ال PDA =Push Down Automata كتاب لينز Linz يعتبر مرجع ممتاز لهذا الموضوع.
شكرا جزيلا لك لمتابعة حلولي وتصحيحها لقد كنت خير استاذ لي .. وسوف اقرا الموضوع التي نصحتني به
اقتباسهذه بعض المحاضرات المبسطة عن الموضوع، و الأولى تحتوي على مثال تفاعلي بـ Java ScriptPostfix Notation
Infix, Postfix and Prefix
شكرا على المحاضرات القيمة فقد افادتني كثيرا لاني بالفعل كنت اواجه مشكلة في ماذا اسوف يحدث للارقام في stack بعد تنفيذ العمليات الحاسبية عليها واين تخزن النتيجة ... ولقد جاءت محاضراتك بالحل :lol:
في نهاية ادعو الله ان يوفقكم بحياتكم وان شاء الله نبقى على تواصل
مع تقديري
زيد
تم تعديل هذه المشاركة بواسطة زيد الرافدين في 24 يوليو 2009 في 14:55
السلام عليكــم ورحمـة الله وبركاتــه ،،
لدي سؤال جديد حول الموضوع
اذا اردنا تحويل العملية الرياضية التالية الى Postfix
23-65
فانها ستصبح
2365-
لكن السؤال هو كيف سنعرف اذا اردنا تحويلها عكسيا مرة اخرى انها تعني
236 - 5
ام
23 -65
ام
2 - 365
وتكثر الاحتمالات ...
شكرا
اعتقد انه يجب فصل الاعداد برمز خاص كالفارزه مثلا ، او خزن كل عدد في متغير مستقل مثلا العدد الاول A والثاني B وهكذا.
وفي الاخير وكما يقول المثل : "المبرمج ما رح يغلب" =" المبرمج دائما يجد نوع من الحل".
تم تعديل هذه المشاركة بواسطة ibr_exn في 11 أغسطس 2009 في 18:47
ibr_exn كتب:اعتقد انه يجب فصل الاعداد برمز خاص كالفارزه مثلا ، او خزن كل عدد في متغير مستقل مثلا العدد الاول A والثاني B وهكذا.وفي الاخير وكما يقول المثل : "المبرمج ما رح يغلب" =" المبرمج دائما يجد نوع من الحل".
وهو كذلك :happy: