بسم الله الرحمن الرحيم
المرحلة الثانيةالجزء الثاني
الخصائص الخاصة لقواعد اللغة Special Grammar Features
1-الRecursion (الحقيقة لا أعرف ترجمتها بالعربية)
و هي أن تُعرف non-terminals بقواعد تحوي نفس الnon-terminal على الجانب الأيمن و لها حالتان
الأولى Direct Recusrion
u ::= ...u...
و الثانية Indirect Recusrion
u ::=> ...u....
و كمثال على الRecursion تعريف الList of Variables
list ::= [list,] variable
2- التضارب Ambiguity
عند وضع الGrammar الخاص باللغة يجب ان يوضع في الاعتبار أن لا يكون الGrammar متضارب أي تكون unambiguous حتى لا يتسبب الGrammar الخاطئ في استحالة الحصول على Compiler في النهاية...
مثال على الAmbiguity
1-exp ::= exp + exp 2- exp ::= exp * exp 3- exp ::= A | B | C
و هكذا لو أننا أدخلنا هذه الجملة على الCompiler
A + B * C
فإن الCompiler لن يستطيع أن يُقرر أي القاعدتين 1 , 2 سيستخدم أولاً فكلا القاعدتين تنطبق و لكنهما قاعدتين مختلفتين تؤدي إلى نتائج مختلفة أي أنه إذا استخدم الترتيب 1,2,3 سينتج
A + (B * C)
أما إذا استخدم الترتيب 2,1,3 سينتج
(A + B ) * C
و هذا سيؤدي في النهاية إلى نتيجتين متضاربتين...........
3- كيف تبني قاعدة لغة How To Build a Grammar Rule
أولاً
يجب وضع اتجاه تنفيذ العوامل في الإعتبار Operator Associativity
بمعنى ...
A + B * C
يجب أن يتم تطبيق B * C أولاً لأن العلامة * لها الأولوية Precedenceعلى عملية ال+ و هذا النوع من الoperator يسمى Left Associative
أيضاً
A ^ B ^ C حيث العلامة ^ هي علامة الأس
يجب أن تتطبق العلامة B^C أولاً ثم A ^ ( B ^ C) و هذا النوع يُسمى Right Associative
و هذا مثال يوضح ال Associativity و الPrecedence للMathematical Operations
( ) ^ ~ Righ Associative * / Left Associative + - Right Associative
حيث ال () هما الأعلى في الPrecedence و ماتحتهم أقل و العلامة ~ هي علامة الNegate أو السالب
و من هنا يمكن تعريف أي Mathematical Expression مهما بلغ تعقيده بالقواعد التالية
primary ::= U | (expression)
factor ::= primary ^ factor | ~factor | primary
term ::= term { * | / } | factor
expression ::= expression { + | - } term | termالدرس قصير و لكن أتمنى أن أجد تفاعل ايجابي بالأسئلة حتى يتم تغطية المرحلة تماماً قبل البدء بالمراحل الأصعب ان شاء الله

