Download as pdf or txt
Download as pdf or txt
You are on page 1of 66

‫ﻣﺘﺮﺟﻢ ﻣﻦ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﺇﻟﻰ ﺍﻟﻌﺮﺑﻴﺔ ‪www.onlinedoctranslator.

com -‬‬

‫‪101‬‬ ‫‪2.19‬ﻟﻐﺔ ‪ NET.‬ﺍﻟﺮﺉﻴﺴﻴﺔ‪# C :‬‬

‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻮﻇﻴﻔﻴﺔ ﻣﻊ ﺍﻟﺘﻤﺪﺩ ﻛﺄﺣﺪ ﺃﻫﺪﺍﻓﻬﺎ ﺍﻷﺳﺎﺳﻴﺔ‪ .‬ﻣﻦ ﺑﻴﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺃﺛﺮﺕ ﻓﻲ‬
‫ﺗﺼﻤﻴﻤﻬﺎ‪ Scheme‬ﻭ ‪ Icon‬ﻭ ‪.Python‬‬
‫ﻳﺸﺒﻪ‪ Lua JavaScript‬ﻣﻦ ﺣﻴﺚ ﺃﻧﻪ ﻻ ﻳﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ﻭﻟﻜﻦ ﻣﻦ‬
‫ﺍﻟﻮﺍﺿﺢﺃﻧﻪ ﺗﺄﺛﺮ ﺑﻬﺎ‪ .‬ﻛﻼﻫﻤﺎ ﻟﻪ ﻛﺎﺉﻨﺎﺕ ﺗﻠﻌﺐ ﺩﻭﺭ ﻛﻞ ﻣﻦ ﺍﻟﻔﺉﺎﺕ ﻭﺍﻟﻜﺎﺉﻨﺎﺕ ﻭﻛﻼﻫﻤﺎ ﻟﻪ‬
‫ﻣﻴﺮﺍﺙﺍﻟﻨﻤﻮﺫﺝ ﺍﻷﻭﻟﻲ ﺑﺪﻻ ًﻣﻦ ﻭﺭﺍﺛﺔ ﺍﻟﻄﺒﻘﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﻲ ‪ ، Lua‬ﻳﻤﻜﻦ ﺗﻮﺳﻴﻊ ﺍﻟﻠﻐﺔ ﻟﺪﻋﻢ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﺸﻴﺉﻴﺔ‪.‬‬

‫ﻛﻤﺎﻫﻮ ﺍﻟﺤﺎﻝ ﻓﻲ ﺍﻟﻤﺨﻄﻂ ‪ ،‬ﻓﺈﻥ ﻭﻇﺎﺉﻒ ‪ Lua‬ﻫﻲ ﻗﻴﻢ ﻣﻦ ﺍﻟﺪﺭﺟﺔ ﺍﻷﻭﻟﻰ‪ .‬ﺃﻳﻀﺎً ‪ ،‬ﻳﺪﻋﻢ‬
‫‪ Lua‬ﻋﻤﻠﻴﺎﺕ ﺍﻹﻏﻼﻕ‪ .‬ﺗﺴﻤﺢ ﻫﺬﻩ ﺍﻟﻘﺪﺭﺍﺕ ﺑﺎﺳﺘﺨﺪﺍﻣﻪ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ‪ .‬ﺃﻳﻀﺎً ﻣﺜﻞ‬
‫‪ ، Scheme‬ﻓﺈﻥ ‪ Lua‬ﻟﺪﻳﻬﺎ ﺑﻨﻴﺔ ﺑﻴﺎﻧﺎﺕ ﻭﺍﺣﺪﺓ ﻓﻘﻂ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﻓﻲ ﺣﺎﻟﺔ ‪، Lua‬‬
‫ﻓﻬﻲﺍﻟﺠﺪﻭﻝ‪ .‬ﺗﻌﻤﻞ ﺟﺪﺍﻭﻝ ‪ Lua‬ﻋﻠﻰ ﺗﻮﺳﻴﻊ ﻣﺼﻔﻮﻓﺎﺕ ‪ PHP‬ﺍﻟﻤﺴﺎﻋﺪﺓ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺸﻤﻞ‬
‫ﻣﺼﻔﻮﻓﺎﺕﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺄﺧﺬ ﺍﻹﺷﺎﺭﺍﺕ ﺇﻟﻰ ﻋﻨﺎﺻﺮ ﺍﻟﺠﺪﻭﻝ ﺷﻜﻞ‬
‫ﻣﺮﺍﺟﻊﺇﻟﻰ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ ﺃﻭ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ﺃﻭ ﺍﻟﺴﺠﻼﺕ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﺪﺍﻻﺕ‬
‫ﻫﻲﻗﻴﻢ ﻣﻦ ﺍﻟﺪﺭﺟﺔ ﺍﻷﻭﻟﻰ ‪ ،‬ﻓﻴﻤﻜﻦ ﺗﺨﺰﻳﻨﻬﺎ ﻓﻲ ﺟﺪﺍﻭﻝ ‪ ،‬ﻭﻳﻤﻜﻦ ﺃﻥ ﺗﻌﻤﻞ ﻫﺬﻩ ﺍﻟﺠﺪﺍﻭﻝ‬
‫ﻛﻤﺴﺎﺣﺎﺕﺃﺳﻤﺎء‪.‬‬
‫ﻳﺴﺘﺨﺪﻡ‪ Lua‬ﻣﺠﻤﻮﻋﺔ ﺍﻟﻘﻤﺎﻣﺔ ﻟﻜﺎﺉﻨﺎﺗﻪ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﺘﻢ ﺗﺨﺼﻴﺺ ﻛﻮﻣﺔ ﻛﻠﻬﺎ‪ .‬ﺗﺴﺘﺨﺪﻡ‬
‫ﺍﻟﻜﺘﺎﺑﺔﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ‪ ،‬ﻛﻤﺎ ﺗﻔﻌﻞ ﻣﻌﻈﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﺍﻷﺧﺮﻯ‪.‬‬
‫ﻟﻮﺍﻫﻲ ﻟﻐﺔ ﺻﻐﻴﺮﺓ ﻭﺑﺴﻴﻄﺔ ﻧﺴﺒﻴﺎً ‪ ،‬ﻭﺗﺤﺘﻮﻱ ﻋﻠﻰ ‪ 21‬ﻛﻠﻤﺔ ﻣﺤﺠﻮﺯﺓ ﻓﻘﻂ‪ .‬ﻛﺎﻧﺖ ﻓﻠﺴﻔﺔ‬
‫ﺗﺼﻤﻴﻢﺍﻟﻠﻐﺔ ﻫﻲ ﺗﻮﻓﻴﺮ ﺍﻷﺳﺎﺳﻴﺎﺕ ﻭﺍﻟﻄﺮﻕ ﺍﻟﺒﺴﻴﻄﺔ ﻧﺴﺒﻴﺎً ﻟﺘﻮﺳﻴﻊ ﺍﻟﻠﻐﺔ ﻟﻠﺴﻤﺎﺡ ﻟﻬﺎ ﺑﺘﻼﺉﻢ‬
‫ﻣﺠﻤﻮﻋﺔﻣﺘﻨﻮﻋﺔ ﻣﻦ ﻣﺠﺎﻻﺕ ﺍﻟﺘﻄﺒﻴﻖ‪ .‬ﺗﻨﺒﻊ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﻗﺎﺑﻠﻴﺘﻬﺎ ﻟﻠﺘﻮﺳﻌﺔ ﻣﻦ ﺑﻨﻴﺔ ﺑﻴﺎﻧﺎﺕ‬
‫ﺍﻟﺠﺪﻭﻝﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺗﺨﺼﻴﺼﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﻔﻬﻮﻡ ‪ Lua‬ﺍﻟﻘﺎﺑﻞ ﻟﻠﺘﻮﺳﻴﻊ‪.‬‬

‫ﻳﻤﻜﻦﺍﺳﺘﺨﺪﺍﻡ ‪ Lua‬ﺑﺴﻬﻮﻟﺔ ﻛﻤﻠﺤﻖ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻟﻠﻐﺎﺕ ﺃﺧﺮﻯ‪ .‬ﻣﺜﻞ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻨﻔﻴﺬ‬
‫ﺍﻟﻤﺒﻜﺮﺓﻟـ ‪ ، Java‬ﺗﻤﺖ ﺗﺮﺟﻤﺔ ‪ Lua‬ﺇﻟﻰ ﺭﻣﺰ ﻭﺳﻴﻂ ﻭﺗﻔﺴﻴﺮﻫﺎ‪ .‬ﻳﻤﻜﻦ ﺑﺴﻬﻮﻟﺔ ﺗﻀﻤﻴﻨﻬﺎ‬
‫ﺑﺒﺴﺎﻃﺔﻓﻲ ﺃﻧﻈﻤﺔ ﺃﺧﺮﻯ ‪ ،‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺟﺰﺉﻴﺎً ﺇﻟﻰ ﺻﻐﺮ ﺣﺠﻢ ﻣﺘﺮﺟﻤﻬﺎ ‪ ،‬ﻭﺍﻟﺬﻱ ﻳﺒﻠﻎ ﺣﻮﺍﻟﻲ‬
‫‪150‬ﻛﻴﻠﻮ ﺑﺎﻳﺖ ﻓﻘﻂ‪.‬‬

‫ﺧﻼﻝﻋﺎﻣﻲ ‪ 2006‬ﻭ ‪ ، 2007‬ﻧﻤﺖ ﺷﻌﺒﻴﺔ ‪ Lua‬ﺑﺴﺮﻋﺔ ‪ ،‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺟﺰﺉﻴﺎً ﺇﻟﻰ‬


‫ﺍﺳﺘﺨﺪﺍﻣﻬﺎﻓﻲ ﺻﻨﺎﻋﺔ ﺍﻷﻟﻌﺎﺏ‪ .‬ﺇﻥ ﺗﺴﻠﺴﻞ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﺍﻟﺘﻲ ﻇﻬﺮﺕ ﻋﻠﻰ ﻣﺪﺍﺭ‬
‫ﺍﻟﻌﺸﺮﻳﻦﻋﺎﻣﺎً ﺍﻟﻤﺎﺿﻴﺔ ﻗﺪ ﺃﻧﺘﺞ ﺑﺎﻟﻔﻌﻞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﻟﻮﺍ ‪،‬‬
‫ﺃﺣﺪﺙﻭﺻﻮﻝ ﺑﻴﻨﻬﻢ ‪ ،‬ﺳﺮﻋﺎﻥ ﻣﺎ ﺃﺻﺒﺢ ﻛﺬﻟﻚ‪.‬‬

‫‪2.19‬ﻟﻐﺔ ‪ NET.‬ﺍﻟﺮﺉﻴﺴﻴﺔ‪# C :‬‬


‫‪ .NET،‬ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﻣﻨﺼﺔ ﺍﻟﺘﻄﻮﻳﺮ ﺍﻟﺠﺪﻳﺪﺓ ‪16C # ،‬ﺗﻢ ﺍﻹﻋﻼﻥ ﻋﻨﻬﺎ ﻣﻦ ﻗﺒﻞ‬
‫‪ Microsoft‬ﻓﻲ ﻋﺎﻡ ‪ .2000‬ﻓﻲ ﻳﻨﺎﻳﺮ ‪ ، 2002‬ﺗﻢ ﺇﺻﺪﺍﺭ ﺇﺻﺪﺍﺭﺍﺕ ﺍﻹﻧﺘﺎﺝ ﻟﻜﻠﻴﻬﻤﺎ‪.‬‬

‫‪2.19.1‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﻳﻌﺘﻤﺪ‪ # C‬ﻋﻠﻰ ‪ ++ C‬ﻭ ‪ Java‬ﻭﻟﻜﻨﻪ ﻳﺘﻀﻤﻦ ﺑﻌﺾ ﺍﻷﻓﻜﺎﺭ ﻣﻦ ‪ Delphi‬ﻭ ‪.Visual BASIC‬‬
‫ﻣﺼﻤﻤﻬﺎﺍﻟﺮﺉﻴﺴﻲ ‪ ، Anders Hejlsberg ،‬ﺻﻤﻢ ﺃﻳﻀﺎً ‪ Turbo Pascal‬ﻭ ‪ ، Delphi‬ﻭﻫﻮ‬
‫ﻣﺎﻳﻔﺴﺮ ﺃﺟﺰﺍء ﺩﻟﻔﻲ ﻣﻦ ﺗﺮﺍﺙ ‪.# C‬‬

‫‪.16‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻧﻈﺎﻡ ﺗﻄﻮﻳﺮ ‪ NET.‬ﺑﺈﻳﺠﺎﺯ ﻓﻲ ﺍﻟﻔﺼﻞ ﺍﻷﻭﻝ‪.‬‬


‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪102‬‬

‫ﺍﻟﻐﺮﺽﻣﻦ ‪ # C‬ﻫﻮ ﺗﻮﻓﻴﺮ ﻟﻐﺔ ﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻘﺎﺉﻤﺔ ﻋﻠﻰ ﺍﻟﻤﻜﻮﻧﺎﺕ ‪ ،‬ﺧﺎﺻﺔ ﻟﻤﺜﻞ ﻫﺬﺍ‬
‫ﺍﻟﺘﻄﻮﻳﺮﻓﻲ ‪ .NET Framework.‬ﻓﻲ ﻫﺬﻩ ﺍﻟﺒﻴﺉﺔ ‪ ،‬ﻳﻤﻜﻦ ﺩﻣﺞ ﻣﻜﻮﻧﺎﺕ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ‬
‫ﻣﻦﺍﻟﻠﻐﺎﺕ ﺑﺴﻬﻮﻟﺔ ﻟﺘﺸﻜﻴﻞ ﺃﻧﻈﻤﺔ‪ .‬ﺟﻤﻴﻊ ﻟﻐﺎﺕ ‪ ، NET.‬ﻭﺍﻟﺘﻲ ﺗﺸﻤﻞ ‪ # C‬ﻭ ‪Basic .NET‬‬
‫‪ Visual‬ﻭ ‪ ++ Managed C‬ﻭ ‪ # F‬ﻭ ‪17، JScript .NET‬ﺍﺳﺘﺨﺪﻡ ﻧﻈﺎﻡ ﺍﻟﻨﻮﻉ ﺍﻟﻤﺸﺘﺮﻙ )‪.(CTS‬‬
‫ﻳﻮﻓﺮ‪ CTS‬ﻣﻜﺘﺒﺔ ﻣﺸﺘﺮﻛﺔ ﻟﻠﻔﺼﻞ‪ .‬ﻛﻞ ﺍﻷﻧﻮﺍﻉ ﻓﻲ ﻛﻞ ﺧﻤﺴﺔ‪ .‬ﺗﺮﺙ ﻟﻐﺎﺕ ‪ NET‬ﻣﻦ ﺟﺬﺭ ﻓﺉﺔ‬
‫ﻭﺍﺣﺪ ‪،‬ﺍﻟﻨﻈﺎﻡ‪.‬ﺗﻘﻮﻡ ﺑﺮﺍﻣﺞ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ ﺍﻟﺘﻲ ﺗﺘﻮﺍﻓﻖ ﻣﻊ ﻣﻮﺍﺻﻔﺎﺕ ‪ CTS‬ﺑﺈﻧﺸﺎء ﻛﺎﺉﻨﺎﺕ‬
‫ﻳﻤﻜﻦﺩﻣﺠﻬﺎ ﻓﻲ ﺃﻧﻈﻤﺔ ﺑﺮﻣﺠﻴﺔ‪ .‬ﻳﺘﻢ ﺗﺠﻤﻴﻊ ﺟﻤﻴﻊ ﻟﻐﺎﺕ ‪ NET.‬ﻓﻲ ﻧﻔﺲ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﻮﺳﻴﻂ ‪،‬‬
‫ﺍﻟﻠﻐﺔﺍﻟﻮﺳﻴﻄﺔ )‪18.(IL‬ﻋﻠﻰ ﻋﻜﺲ ‪ ، Java‬ﻻ ﻳﺘﻢ ﺗﻔﺴﻴﺮ ‪ IL‬ﻣﻄﻠﻘﺎً‪ .‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻣﺘﺮﺟﻢ ‪-Time‬‬
‫‪ Just-in‬ﻟﺘﺮﺟﻤﺔ ‪ IL‬ﺇﻟﻰ ﻛﻮﺩ ﺍﻵﻟﺔ ﻗﺒﻞ ﺗﻨﻔﻴﺬﻩ‪.‬‬

‫‪2.19.2‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺔ‬


‫ﻳﻌﺘﻘﺪﺍﻟﻜﺜﻴﺮ ﺃﻥ ﺃﺣﺪ ﺃﻫﻢ ﺍﻟﺘﻄﻮﺭﺍﺕ ﻓﻲ ‪ Java‬ﻋﻠﻰ ‪ ++ C‬ﻳﻜﻤﻦ ﻓﻲ ﺣﻘﻴﻘﺔ ﺃﻧﻪ ﻳﺴﺘﺒﻌﺪ ﺑﻌﺾ‬
‫ﻣﻴﺰﺍﺕ‪ .++ C‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺪﻋﻢ ‪ ++ C‬ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ ‪ ،‬ﻭﺍﻟﻤﺆﺷﺮﺍﺕ ‪ ،‬ﻭﺍﻟﺒﻨﻰ ‪،‬ﺗﻌﺪﺍﺩ‬
‫ﺍﻷﻧﻮﺍﻉ ‪،‬ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ ﻟﻠﻤﺸﻐﻞ ‪ ،‬ﻭ ﺗﻌﻠﻴﻤﺔ ‪ ، goto‬ﻟﻜﻦ ‪ Java‬ﻻ ﺗﺘﻀﻤﻦ ﺃﻳﺎً ﻣﻦ ﻫﺬﻩ‪ .‬ﻣﻦ‬
‫ﺍﻟﻮﺍﺿﺢﺃﻥ ﻣﺼﻤﻤﻲ ‪ # C‬ﻟﻢ ﻳﻮﺍﻓﻘﻮﺍ ﻋﻠﻰ ﻫﺬﺍ ﺍﻹﺯﺍﻟﺔ ﺑﺎﻟﺠﻤﻠﺔ ﻟﻠﻤﻴﺰﺍﺕ ‪ ،‬ﻷﻧﻪ ﺗﻢ ﺗﻀﻤﻴﻦ ﻛﻞ‬
‫ﻫﺬﻩﺍﻟﻤﻴﺰﺍﺕ ﺑﺎﺳﺘﺜﻨﺎء ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ ﻓﻲ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ‪.‬‬

‫ﻟﺼﺎﻟﺢﻣﺼﻤﻤﻲ ‪ ، # C‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﻲ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﺗﻢ ﺗﺤﺴﻴﻦ ﺇﺻﺪﺍﺭ ‪# C‬‬
‫ﻟﻤﻴﺰﺓ‪ .++ C‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻣﻠﻒﺗﻌﺪﺍﺩﺗﻌﺪ ﺃﻧﻮﺍﻉ ‪ # C‬ﺃﻛﺜﺮ ﺃﻣﺎﻧﺎً ﻣﻦ ﺃﻧﻮﺍﻉ ‪ ، ++ C‬ﻷﻧﻬﺎ ﻻ‬
‫ﻳﺘﻢﺗﺤﻮﻳﻠﻬﺎ ﺿﻤﻨﻴﺎً ﺇﻟﻰ ﺃﻋﺪﺍﺩ ﺻﺤﻴﺤﺔ‪ .‬ﻫﺬﺍ ﻳﺴﻤﺢ ﻟﻬﻢ ﺑﺄﻥ ﻳﻜﻮﻧﻮﺍ ﺃﻛﺜﺮ ﺃﻣﺎﻧﺎً‪ .‬ﺍﻝﻫﻴﻜﻞﺗﻢ ﺗﻐﻴﻴﺮ‬
‫ﺍﻟﻨﻮﻉﺑﺸﻜﻞ ﻛﺒﻴﺮ ‪ ،‬ﻣﻤﺎ ﺃﺩﻯ ﺇﻟﻰ ﺗﻜﻮﻳﻦ ﻣﻔﻴﺪ ﺣﻘﺎً ‪ ،‬ﺑﻴﻨﻤﺎ ﻓﻲ ‪ ++ C‬ﻻ ﻳﺨﺪﻡ ﺃﻱ ﻏﺮﺽ ﺗﻘﺮﻳﺒﺎً‪.‬‬
‫ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﻫﻴﺎﻛﻞ ‪ # C‬ﻓﻲ ﺍﻟﻔﺼﻞ ‪ # C .12‬ﻳﺄﺧﺬ ﻃﻌﻨﺔ ﻓﻲ ﺗﺤﺴﻴﻦ‬

‫ﻳﺤُﻮﻝّﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ‪ C‬ﻭ ‪ ++ C‬ﻭ ‪ .Java‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻣﻔﺘﺎﺡ ‪ # C‬ﻓﻲ ﺍﻟﻔﺼﻞ ‪.8‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ‪ ++ C‬ﺗﺘﻀﻤﻦ ﻣﺆﺷﺮﺍﺕ ﻭﻇﻴﻔﻴﺔ ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﺗﺸﺘﺮﻙ ﻓﻲ ﻧﻘﺺ ﺍﻷﻣﺎﻥ‬


‫ﺍﻟﻤﺘﺄﺻﻞﻓﻲ ﻣﺆﺷﺮﺍﺕ ‪ ++ C‬ﺇﻟﻰ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ‪ .‬ﺗﺘﻀﻤﻦ ‪ # C‬ﻧﻮﻋﺎً ﺟﺪﻳﺪﺍً ‪ ،‬ﻣﻔﻮﺿﻴﻦ ‪ ،‬ﻭﻫﻲ‬
‫ﻣﺮﺍﺟﻊﻣﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ﻭﺁﻣﻨﺔ ﻣﻦ ﺍﻟﻨﻮﻉ ﺇﻟﻰ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ‪ .‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﻨﺪﻭﺑﻴﻦ ﻟﺘﻨﻔﻴﺬ‬
‫ﻣﻌﺎﻟﺠﺎﺕﺍﻷﺣﺪﺍﺙ ‪ ،‬ﻭﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺗﻨﻔﻴﺬ ﻣﺆﺷﺮﺍﺕ ﺍﻟﺘﺮﺍﺑﻂ ‪ ،‬ﻭﻋﻤﻠﻴﺎﺕ ﺍﻻﺳﺘﺮﺟﺎﻋﺎﺕ‪19.‬ﻳﺘﻢ‬
‫ﺗﻨﻔﻴﺬﻋﻤﻠﻴﺎﺕ ﺍﻻﺳﺘﺮﺟﺎﻋﺎﺕ ﻓﻲ ‪ Java‬ﻣﻊ ﻭﺍﺟﻬﺎﺕ ؛ ﻓﻲ ‪ ، ++ C‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻣﺆﺷﺮﺍﺕ‬
‫ﺍﻷﺳﻠﻮﺏ‪.‬‬
‫ﻓﻲ‪ ، # C‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺄﺧﺬ ﺍﻟﻄﺮﻕ ﻋﺪﺩﺍً ﻣﺘﻐﻴﺮﺍً ﻣﻦ ﺍﻟﻤﻌﻠﻤﺎﺕ ‪ ،‬ﻃﺎﻟﻤﺎ ﺃﻧﻬﺎ ﺟﻤﻴﻌﻬﺎ ﻣﻦ‬
‫ﻧﻔﺲﺍﻟﻨﻮﻉ‪ .‬ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺫﻟﻚ ﻋﻦ ﻃﺮﻳﻖ ﺍﺳﺘﺨﺪﺍﻡ ﻣﻌﻠﻤﺔ ﺭﺳﻤﻴﺔ ﻣﻦ ﻧﻮﻉ ﻣﺼﻔﻮﻓﺔ ‪ ،‬ﻣﺴﺒﻮﻗﺔ‬
‫ﺑﺎﻣﺘﺪﺍﺩﺑﺎﺭﺍﻣﺰﻛﻠﻤﺔ ﻣﺤﺠﻮﺯﺓ‪.‬‬
‫ﻳﺴﺘﺨﺪﻡﻛﻞ ﻣﻦ ‪ ++ C‬ﻭ ‪ Java‬ﻧﻈﺎﻣﻴﻦ ﻣﺨﺘﻠﻔﻴﻦ ﻟﻠﻜﺘﺎﺑﺔ‪ :‬ﺃﺣﺪﻫﻤﺎ ﻟﻸﺳﺎﺳﻴﺎﺕ ﻭﺍﻵﺧﺮ‬
‫ﻟﻠﻜﺎﺉﻨﺎﺕ‪.‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﻛﻮﻧﻪ ﻣﺤﻴﺮﺍً ‪ ،‬ﻳﺆﺩﻱ ﻫﺬﺍ ﺇﻟﻰ ﺍﻟﺤﺎﺟﺔ ﺍﻟﻤﺘﻜﺮﺭﺓ ﺇﻟﻰ ﺫﻟﻚ‬

‫‪.17‬ﺗﻢ ﺗﻌﺪﻳﻞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﻟﺘﺼﺒﺢ ﻟﻐﺎﺕ ‪.NET.‬‬


‫‪.18‬ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ‪ ،‬ﺃﻃﻠﻖ ﻋﻠﻰ ‪ IL‬ﺍﺳﻢ ‪) MSIL‬ﻟﻐﺔ ‪ ، (Microsoft Intermediate Language‬ﻭﻟﻜﻦ ﻳﺒﺪﻭ ﺃﻥ ﺍﻟﻜﺜﻴﺮ ﻣﻦ‬
‫ﺍﻟﻨﺎﺱﺍﻋﺘﻘﺪﻭﺍ ﺃﻥ ﻫﺬﺍ ﺍﻻﺳﻢ ﻃﻮﻳﻞ ﺟﺪﺍً‪.‬‬
‫‪.19‬ﻋﻨﺪﻣﺎ ﻳﺴﺘﺪﻋﻲ ﻛﺎﺉﻦ ﻃﺮﻳﻘﺔ ﻛﺎﺉﻦ ﺁﺧﺮ ﻭﻳﺤﺘﺎﺝ ﺇﻟﻰ ﺇﻋﻼﻣﻪ ﻋﻨﺪﻣﺎ ﺗﻨﺘﻬﻲ ﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﻣﻦ ﻣﻬﻤﺘﻬﺎ ‪ ،‬ﺗﺴﺘﺪﻋﻲ‬
‫ﺍﻟﻄﺮﻳﻘﺔﺍﻟﺘﻲ ﺗﻢ ﺍﺳﺘﺪﻋﺎﺅﻫﺎ ﻣﻦ ﻳﺴﺘﺪﻋﻴﻬﺎ ﻣﺮﺓ ﺃﺧﺮﻯ‪ .‬ﻳﻌُﺮﻑ ﻫﺬﺍ ﺑﺎﺳﻢ ﺭﺩ ﺍﻻﺗﺼﺎﻝ‪.‬‬
‫‪103‬‬ ‫‪2.19‬ﻟﻐﺔ ‪ NET.‬ﺍﻟﺮﺉﻴﺴﻴﺔ‪# C :‬‬

‫ﺗﺤﻮﻳﻞﺍﻟﻘﻴﻢ ﺑﻴﻦ ﺍﻟﻨﻈﺎﻣﻴﻦ ‪ -‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻟﻮﺿﻊ ﻗﻴﻤﺔ ﺃﻭﻟﻴﺔ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﺗﺨﺰﻥ‬
‫ﺍﻟﻜﺎﺉﻨﺎﺕ‪.‬ﻳﺠﻌﻞ ‪ # C‬ﺍﻟﺘﺤﻮﻳﻞ ﺑﻴﻦ ﻗﻴﻢ ﻧﻈﺎﻣﻲ ﺍﻟﻜﺘﺎﺑﺔ ﺿﻤﻨﻴﺎً ﺟﺰﺉﻴﺎً ﻣﻦ ﺧﻼﻝ ﻋﻤﻠﻴﺎﺕ‬
‫ﺍﻟﻤﻼﻛﻤﺔﺍﻟﻀﻤﻨﻴﺔ ﻭﺇﻟﻐﺎء ﺍﻟﻌﺒﻮﺓ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪20.12‬‬

‫ﻣﻦﺑﻴﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻷﺧﺮﻯ ﻟـ ‪ # C‬ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﻤﺴﺘﻄﻴﻠﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﻻ ﻳﺘﻢ ﺩﻋﻤﻬﺎ ﻓﻲ‬


‫ﻣﻌﻈﻢﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻭ ‪foreacha‬ﺍﻟﺒﻴﺎﻥ ‪ ،‬ﻭﻫﻮ ﻣﻜﺮﺭ ﻟﻠﻤﺼﻔﻮﻓﺎﺕ ﻭﻛﺎﺉﻨﺎﺕ ﺍﻟﻤﺠﻤﻮﻋﺔ‪.‬‬
‫ﻣﺸﺎﺑﻪ‪foreach‬ﺗﻢ ﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ ﺍﻟﻌﺒﺎﺭﺓ ﻓﻲ ‪ Perl‬ﻭ ‪ PHP‬ﻭ ‪ .Java 5.0‬ﺃﻳﻀﺎً ‪ ،‬ﺗﺘﻀﻤﻦ ‪# C‬‬
‫ﺍﻟﺨﺼﺎﺉﺺ ‪،‬ﻭﺍﻟﺘﻲ ﺗﻌﺪ ﺑﺪﻳﻼ ًﻷﻋﻀﺎء ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻌﺎﻣﺔ‪ .‬ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺍﻟﺨﺼﺎﺉﺺ ﻛﺄﻋﻀﺎء‬
‫ﺑﻴﺎﻧﺎﺕﻣﻊ ﺃﺳﺎﻟﻴﺐ ‪ ، get and set‬ﻭﺍﻟﺘﻲ ﻳﺘﻢ ﺍﺳﺘﺪﻋﺎﺅﻫﺎ ﺿﻤﻨﻴﺎً ﻋﻨﺪ ﺇﺟﺮﺍء ﺍﻟﻤﺮﺍﺟﻊ‬
‫ﻭﺍﻟﺘﻌﻴﻴﻨﺎﺕﻷﻋﻀﺎء ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺮﺗﺒﻄﻴﻦ‪.‬‬

‫ﺗﻄﻮﺭ‪ # C‬ﺑﺸﻜﻞ ﻣﺴﺘﻤﺮ ﻭﺳﺮﻳﻊ ﻣﻨﺬ ﺇﺻﺪﺍﺭﻩ ﺍﻷﻭﻟﻲ ﻓﻲ ﻋﺎﻡ ‪ .2002‬ﺃﺣﺪﺙ ﺇﺻﺪﺍﺭ ﻫﻮ‬
‫‪ .C #2010‬ﻳﻀﻴﻒ ‪ C # 2010‬ﺷﻜﻼ ًﻣﻦ ﺃﺷﻜﺎﻝ ﺍﻟﻜﺘﺎﺑﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ‪ ،‬ﻭﺍﻟﻜﺘﺎﺑﺔ ﺍﻟﻀﻤﻨﻴﺔ ‪،‬‬
‫ﻭﺍﻷﻧﻮﺍﻉﺍﻟﻤﺠﻬﻮﻟﺔ )ﺍﻧﻈﺮ ﺍﻟﻔﺼﻞ ‪.(6‬‬

‫‪2.19.3‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻛﺎﻥﻣﻦ ﺍﻟﻤﻔﺘﺮﺽ ﺃﻥ ﺗﻜﻮﻥ ‪ # C‬ﺗﺤﺴﻴﻨﺎً ﻟﻜﻞ ﻣﻦ ‪ ++ C‬ﻭ ‪ Java‬ﻛﻠﻐﺔ ﺑﺮﻣﺠﺔ ﺫﺍﺕ ﺃﻏﺮﺍﺽ‬
‫ﻋﺎﻣﺔ‪.‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻳﻤﻜﻦ ﺍﻟﻘﻮﻝ ﺃﻥ ﺑﻌﺾ ﻣﻴﺰﺍﺗﻪ ﻫﻲ ﺧﻄﻮﺓ ﺇﻟﻰ ﺍﻟﻮﺭﺍء ‪ ،‬ﺇﻻ ﺃﻥ ‪# C‬‬
‫ﺗﺘﻀﻤﻦﺑﻮﺿﻮﺡ ﺑﻌﺾ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺘﻲ ﺗﻨﻘﻠﻬﺎ ﺇﻟﻰ ﻣﺎ ﻭﺭﺍء ﺳﺎﺑﻘﺎﺗﻬﺎ‪ .‬ﺑﺎﻟﺘﺄﻛﻴﺪ ﺳﻴﺘﻢ ﺍﻋﺘﻤﺎﺩ‬
‫ﺑﻌﺾﻣﻴﺰﺍﺗﻪ ﺑﻮﺍﺳﻄﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﺍﻟﻤﺴﺘﻘﺒﻞ ﺍﻟﻘﺮﻳﺐ‪ .‬ﺍﻟﺒﻌﺾ ﻳﻔﻌﻞ ﺑﺎﻟﻔﻌﻞ‪.‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ‪:# C‬‬

‫‪:‬ﻣﺜﺎﻝﺍﻟﺒﺮﻧﺎﻣﺞ ‪ //‬ﺍﻹﺩﺧﺎﻝ ‪// C #‬‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، listlen ،‬ﺣﻴﺚ ‪ listlen‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺔ ﺑﻘﻴﻢ ‪-listlen‬‬
‫ﺻﺤﻴﺤﺔ‪.‬‬ ‫‪//‬‬
‫‪ //‬ﺍﻹﺧﺮﺍﺝ‪ :‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻷﻛﺒﺮ ‪//‬‬
‫ﻣﻦﻣﺘﻮﺳﻂ ﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ‪ .‬ﻧﻈﺎﻡ؛‬
‫ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻟﻄﺒﻘﺔﺍﻟﻌﺎﻣﺔﻣﺜﺎﻝ ﻋﻠﻰ ‪Ch2‬‬
‫ﺍﻟﻔﺮﺍﻍﺛﺎﺑﺖﺭﺉﻴﺴﻲ)( }‬
‫‪int‬؛ ‪][ intlist‬‬
‫‪listlen، int‬‬
‫ﻋﺪﺍﺩ‪،‬‬
‫ﺍﻟﻤﺠﻤﻮﻉ= ‪، 0‬‬
‫ﻣﺘﻮﺳﻂ‪،‬‬
‫‪0‬؛‬ ‫ﺍﻟﻨﺘﻴﺠﺔ=‬
‫= ‪intList‬ﻛﺜﺎﻓﺔ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ]‪ [99‬؛‬
‫‪ listlen = Int32.Parse )Console.readLine )(( ،‬ﻟﻮ))ﻗﺮﺍءﺓ‬
‫ﺍﻟﻤﺪﺧﻼﺕﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺠﻤﻮﻉ ‪0( && )listlen >100(( }//‬‬
‫<‪listlen‬‬
‫ﻝ)ﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ >‪ listlen‬؛ ﻋﺪﺍﺩ ‪} (++‬‬

‫‪.20‬ﺗﻤﺖ ﺇﺿﺎﻓﺔ ﻫﺬﻩ ﺍﻟﻤﻴﺰﺓ ﺇﻟﻰ ‪ Java‬ﻓﻲ ‪.Java 5.0‬‬


‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪104‬‬

‫= [ﺍﻟﻌﺪﺍﺩ] ‪intList‬‬
‫‪Int32.Parse )Console.readLine )(( ،‬‬
‫؛ { ‪ - //‬ﻧﻬﺎﻳﺔ ﻟـ )ﻋﺪﺍﺩ ‪ // ...‬ﺣﺴﺎﺏ ﺍﻟﻤﺘﻮﺳﻂ [‬
‫ﻋﺪﺍﺩ] ‪sum + = intList‬‬

‫ﺍﻟﻤﺘﻮﺳﻂ= ‪ sum / listlen‬؛‬


‫‪ //‬ﻋﺪ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﺗﻜﻮﻥ< ﻣﺘﻮﺳﻂ‬
‫‪int)foreach‬ﺍﻷﺱﻓﻲ(‪intList‬‬
‫ﻟﻮ)ﺍﻷﺳﻄﻮﺍﻧﺎﺕ< ﺍﻟﻤﺘﻮﺳﻂ( ﻧﺘﻴﺠﺔ ‪ ++‬؛ ‪//‬‬
‫ﻃﺒﺎﻋﺔﺍﻟﻨﺘﻴﺠﺔ‬
‫ﻭﺣﺪﺓﺍﻟﺘﺤﻜﻢ‪.‬‬
‫"ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ‪ + ":‬ﻧﺘﻴﺠﺔ( ؛ { ‪ - //‬ﻧﻬﺎﻳﺔ ﺇﺫﺍ ))‪... listlen‬‬

‫ﺁﺧﺮ‬
‫ﻭﺣﺪﺓﺍﻟﺘﺤﻜﻢ‪.‬‬
‫"ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ"( ؛ { ‪ - //‬ﻧﻬﺎﻳﺔ ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﺍﻟﺮﺉﻴﺴﻴﺔ‬
‫{ ‪ - //‬ﻧﻬﺎﻳﺔ ﺍﻟﻔﺉﺔ ‪Ch2example‬‬

‫‪2.20‬ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ /‬ﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﻬﺠﻴﻨﺔ‬


‫ﻟﻐﺔﺍﻟﺘﺮﻣﻴﺰ ‪ /‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﺨﺘﻠﻄﺔ ﻫﻲ ﻟﻐﺔ ﺗﺮﻣﻴﺰ ﺣﻴﺚ ﻳﻤﻜﻦ ﻟﺒﻌﺾ ﺍﻟﻌﻨﺎﺻﺮ ﺗﺤﺪﻳﺪ ﺇﺟﺮﺍءﺍﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔ ‪،‬ﻣﺜﻞ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺘﺪﻓﻖ ﻭﺍﻟﺤﺴﺎﺏ‪ .‬ﺗﻘﺪﻡ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻟﻐﺘﻴﻦ ﻫﺠﻨﺘﻴﻦ ‪،‬‬
‫‪ XSLT‬ﻭ ‪.JSP‬‬

‫‪2.20.1 XSLT‬‬
‫ﻟﻐﺔﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﻤﻮﺳﻌﺔ )‪ (XML‬ﻫﻲ ﻟﻐﺔ ‪ .metamarkup‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﻟﺘﺤﺪﻳﺪ ﻟﻐﺎﺕ‬
‫ﺍﻟﺘﺮﻣﻴﺰ‪.‬ﺗﺴﺘﺨﺪﻡ ﻟﻐﺎﺕ ﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﻤﺸﺘﻘﺔ ﻣﻦ ‪ XML‬ﻟﺘﺤﺪﻳﺪ ﻣﺴﺘﻨﺪﺍﺕ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰ‬
‫ﻣﺴﺘﻨﺪﺍﺕ‪ .XML‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻣﺴﺘﻨﺪﺍﺕ ‪ XML‬ﻗﺎﺑﻠﺔ ﻟﻠﻘﺮﺍءﺓ ﺍﻟﺒﺸﺮﻳﺔ ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﺗﺘﻢ‬
‫ﻣﻌﺎﻟﺠﺘﻬﺎﺑﻮﺍﺳﻄﺔ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﺗﺘﻜﻮﻥ ﻫﺬﻩ ﺍﻟﻤﻌﺎﻟﺠﺔ ﻓﻲ ﺑﻌﺾ ﺍﻷﺣﻴﺎﻥ ﻓﻘﻂ ﻣﻦ ﻋﻤﻠﻴﺎﺕ‬
‫ﺍﻟﺘﺤﻮﻳﻞﺇﻟﻰ ﺍﻟﻨﻤﺎﺫﺝ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻋﺮﺿﻬﺎ ﺃﻭ ﻃﺒﺎﻋﺘﻬﺎ ﺑﺸﻜﻞ ﻓﻌﺎﻝ‪ .‬ﻓﻲ ﻛﺜﻴﺮ ﻣﻦ ﺍﻟﺤﺎﻻﺕ ‪،‬‬
‫ﺗﻜﻮﻥﻫﺬﻩ ﺍﻟﺘﺤﻮﻳﻼﺕ ﺇﻟﻰ ‪ ، HTML‬ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻋﺮﺿﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺴﺘﻌﺮﺽ ﺍﻟﻮﻳﺐ‪ .‬ﻓﻲ‬
‫ﺣﺎﻻﺕﺃﺧﺮﻯ ‪ ،‬ﺗﺘﻢ ﻣﻌﺎﻟﺠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺍﻟﻤﺴﺘﻨﺪ ‪ ،‬ﺗﻤﺎﻣﺎً ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻣﻊ ﺃﺷﻜﺎﻝ‬
‫ﻣﻠﻔﺎﺕﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻷﺧﺮﻯ‪.‬‬

‫ﻳﺘﻢﺗﺤﺪﻳﺪ ﺗﺤﻮﻳﻞ ﻣﺴﺘﻨﺪﺍﺕ ‪ XML‬ﺇﻟﻰ ﻣﺴﺘﻨﺪﺍﺕ ‪ HTML‬ﺑﻠﻐﺔ ﺗﺮﻣﻴﺰ ﺃﺧﺮﻯ ‪ ،‬ﻭﻫﻲ‬


‫ﺗﺤﻮﻳﻼﺕﻟﻐﺔ ﻭﺭﻗﺔ ﺍﻷﻧﻤﺎﻁ ﺍﻟﻤﻮﺳﻌﺔ )‪www.w3.org/TR/XSLT(.) (XSLT‬ﻳﻤﻜﻦ ﻟـ ‪XSLT‬‬
‫ﺗﺤﺪﻳﺪﻋﻤﻠﻴﺎﺕ ﺗﺸﺒﻪ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻓﺈﻥ ‪ XSLT‬ﻫﻲ ﻟﻐﺔ ﻫﺠﻴﻨﺔ ﻟﻠﺘﺮﻣﻴﺰ ‪ /‬ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﺗﻢ‬
‫ﺗﻌﺮﻳﻒ‪ XSLT‬ﻣﻦ ﻗﺒﻞ ﺍﺗﺤﺎﺩ ﺷﺒﻜﺔ ﺍﻟﻮﻳﺐ ﺍﻟﻌﺎﻟﻤﻴﺔ )‪ (W3C‬ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ‪.‬‬

‫ﻣﻌﺎﻟﺞ‪ XSLT‬ﻫﻮ ﺑﺮﻧﺎﻣﺞ ﻳﺄﺧﺬ ﻛﻤﺪﺧﻼﺕ ﻣﺴﺘﻨﺪ ﺑﻴﺎﻧﺎﺕ ‪ XML‬ﻭﻭﺛﻴﻘﺔ ‪) XSLT‬ﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ‬
‫ﺃﻳﻀﺎًﻓﻲ ﺷﻜﻞ ﻣﺴﺘﻨﺪ ‪ .(XML‬ﻓﻲ ﻫﺬﻩ ﺍﻟﻤﻌﺎﻟﺠﺔ ‪ ،‬ﻳﺘﻢ ﺗﺤﻮﻳﻞ ﻣﺴﺘﻨﺪ ﺑﻴﺎﻧﺎﺕ ‪ XML‬ﺇﻟﻰ ‪XML‬‬
‫ﺁﺧﺮ‬
‫‪105‬‬ ‫‪2.20‬ﺗﺮﻣﻴﺰ ‪ /‬ﺑﺮﻣﺠﺔ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺨﺘﻠﻄﺔ‬

‫ﻭﺛﻴﻘﺔ‪21،‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﺤﻮﻳﻼﺕ ﺍﻟﻤﻮﺿﺤﺔ ﻓﻲ ﻭﺛﻴﻘﺔ ‪ .XSLT‬ﺗﺤﺪﺩ ﻭﺛﻴﻘﺔ ‪ XSLT‬ﺍﻟﺘﺤﻮﻳﻼﺕ ﻋﻦ‬


‫ﻃﺮﻳﻖﺗﻌﺮﻳﻒ ﺍﻟﻘﻮﺍﻟﺐ ‪ ،‬ﻭﻫﻲ ﺃﻧﻤﺎﻁ ﺑﻴﺎﻧﺎﺕ ﻳﻤﻜﻦ ﺍﻟﻌﺜﻮﺭ ﻋﻠﻴﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻣﻌﺎﻟﺞ ‪ XSLT‬ﻓﻲ‬
‫ﻣﻠﻒﺇﺩﺧﺎﻝ ‪ .XML‬ﺗﺮﺗﺒﻂ ﺑﻜﻞ ﻗﺎﻟﺐ ﻓﻲ ﻣﺴﺘﻨﺪ ‪ XSLT‬ﺇﺭﺷﺎﺩﺍﺕ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺨﺎﺻﺔ ﺑﻪ ‪ ،‬ﻭﺍﻟﺘﻲ‬
‫ﺗﺤﺪﺩﻛﻴﻔﻴﺔ ﺗﺤﻮﻳﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻄﺎﺑﻘﺔ ﻗﺒﻞ ﻭﺿﻌﻬﺎ ﻓﻲ ﻣﺴﺘﻨﺪ ﺍﻹﺧﺮﺍﺝ‪ .‬ﻟﺬﺍ ‪ ،‬ﻓﺈﻥ ﺍﻟﻘﻮﺍﻟﺐ )‬
‫ﻭﺍﻟﻤﻌﺎﻟﺠﺔﺍﻟﻤﺮﺗﺒﻄﺔ ﺑﻬﺎ( ﺗﻌﻤﻞ ﻛﺒﺮﺍﻣﺞ ﻓﺮﻋﻴﺔ ‪ ،‬ﻳﺘﻢ "ﺗﻨﻔﻴﺬﻫﺎ" ﻋﻨﺪﻣﺎ ﻳﺠﺪ ﻣﻌﺎﻟﺞ ‪ XSLT‬ﺗﻄﺎﺑﻖ‬
‫ﻧﻤﻂﻓﻲ ﺑﻴﺎﻧﺎﺕ ﻣﺴﺘﻨﺪ ‪.XML‬‬

‫ﻳﺤﺘﻮﻱ‪ XSLT‬ﺃﻳﻀﺎً ﻋﻠﻰ ﺑﻨﻴﺎﺕ ﺑﺮﻣﺠﺔ ﺑﻤﺴﺘﻮﻯ ﺃﺩﻧﻰ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺘﻢ ﺗﻀﻤﻴﻦ‬
‫ﺑﻨﻴﺔﺍﻟﺘﻜﺮﺍﺭ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﺢ ﺑﺘﺤﺪﻳﺪ ﺃﺟﺰﺍء ﻣﺘﻜﺮﺭﺓ ﻣﻦ ﻣﺴﺘﻨﺪ ‪ .XML‬ﻫﻨﺎﻙ ﺃﻳﻀﺎ ﻋﻤﻠﻴﺔ ﻓﺮﺯ‪.‬‬
‫ﻫﺬﻩﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺫﺍﺕ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻷﺩﻧﻰ ﻣﺤﺪﺩﺓ ﺑﻌﻼﻣﺎﺕ ‪ ، XSLT‬ﻣﺜﻞ >ﻟﻜﻞ<‪.‬‬

‫‪2.20.2 JSP‬‬
‫ﺍﻟﺠﺰء"ﺍﻷﺳﺎﺳﻲ" ﻣﻦ ﻣﻜﺘﺒﺔ ﺍﻟﻌﻼﻣﺎﺕ ﺍﻟﻘﻴﺎﺳﻴﺔ ﻟﺼﻔﺤﺎﺕ ﺧﺎﺩﻡ ﺟﺎﻓﺎ )‪ (JSTL‬ﻫﻮ ﻟﻐﺔ ﻫﺠﻴﻨﺔ‬
‫ﺃﺧﺮﻯﻟﻠﺘﺮﻣﻴﺰ ‪ /‬ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺍﺧﺘﻼﻑ ﺷﻜﻠﻬﺎ ﻭﺍﻟﻐﺮﺽ ﻣﻨﻬﺎ ﻋﻦ ﻟﻐﺔ ‪ .XSLT‬ﻗﺒﻞ‬
‫ﻣﻨﺎﻗﺸﺔ‪ ، JSTL‬ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺗﻘﺪﻳﻢ ﺃﻓﻜﺎﺭ ‪ servlets‬ﻭﺻﻔﺤﺎﺕ ﺧﺎﺩﻡ (‪ .Java )JSP‬ﺃ‪servlet‬‬
‫ﻫﻮﻣﺜﻴﻞ ﻟﻔﺉﺔ ‪ Java‬ﺗﻮﺟﺪ ﻋﻠﻰ ﻧﻈﺎﻡ ﺧﺎﺩﻡ ﻭﻳﺐ ﻭﻳﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻋﻠﻰ ﻧﻈﺎﻡ ﺧﺎﺩﻡ ﺍﻟﻮﻳﺐ‪ .‬ﻳﺘﻢ‬
‫ﻃﻠﺐﺗﻨﻔﻴﺬ ‪ servlet‬ﺑﻮﺍﺳﻄﺔ ﻭﺛﻴﻘﺔ ﺗﻌﻠﻴﻢ ﻳﺘﻢ ﻋﺮﺿﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺴﺘﻌﺮﺽ ﻭﻳﺐ‪ .‬ﻳﺘﻢ ﺇﺭﺟﺎﻉ‬
‫ﻣﺨﺮﺟﺎﺕ‪ ، servlet‬ﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻓﻲ ﺷﻜﻞ ﻭﺛﻴﻘﺔ ‪ ، HTML‬ﺇﻟﻰ ﺑﺮﻧﺎﻣﺞ ﺍﻻﺳﺘﻌﺮﺍﺽ ﺍﻟﻤﻄﻠﻮﺏ‪.‬‬
‫ﺑﺮﻧﺎﻣﺞﻳﺘﻢ ﺗﺸﻐﻴﻠﻪ ﻓﻲ ﻋﻤﻠﻴﺔ ﺧﺎﺩﻡ ﺍﻟﻮﻳﺐ ‪ ،‬ﻭﻳﺴﻤﻰ ‪a‬ﺣﺎﻭﻳﺔ ‪ ،servlet‬ﻳﺘﺤﻜﻢ ﻓﻲ ﺗﻨﻔﻴﺬ‬
‫‪ .servlets‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ‪ Servlets‬ﺑﺸﻜﻞ ﺷﺎﺉﻊ ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻨﻤﺎﺫﺝ ﻭﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﻗﺎﻋﺪﺓ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬‬

‫‪ servlet.‬ﺑﻮﺍﺳﻄﺔ ﺣﺎﻭﻳﺔ ‪ JSP‬ﺍﻟﺬﻱ ﺗﻢ ﺇﻧﺘﺎﺟﻪ ﺑﻮﺍﺳﻄﺔ ﻣﻌﺎﻟﺞ ‪ servlet‬ﻛﻤﺎ ﺗﻤﺖ‬


‫ﻣﻨﺎﻗﺸﺘﻪﻓﻲ ﺍﻟﻔﻘﺮﺓ ﺍﻟﺘﺎﻟﻴﺔ‪ .‬ﻳﺘﻢ ﺗﺸﻐﻴﻞ ‪ JSP ،‬ﻓﻲ ﻣﺴﺘﻨﺪ ‪ JSTL‬ﺍﻟﺘﻲ ﺗﺨﺮﺟﻬﺎ ﻛﻤﺎ ﻫﻲ‪ .‬ﺗﺘﻢ‬
‫ﻣﻌﺎﻟﺠﺔﻋﻼﻣﺔ ‪ Java‬ﺍﻟﻌﺎﺩﻱ ﺇﻟﻰ ﻋﺒﺎﺭﺍﺕ ﻃﺒﺎﻋﺔ ‪ HTML‬ﻳﺘﻢ ﻧﺴﺦ ‪ servlet.‬ﺍﻟﻤﻀﻤﻦ ﻟﻠﻮﺛﻴﻘﺔ‬
‫ﺇﻟﻰ‪ Java‬ﻳﺘﻢ ﻧﺴﺦ ﻛﻮﺩ ‪ servlet.‬ﺍﻟﻤﻮﺟﻮﺩ ﻋﻠﻰ ﻧﻈﺎﻡ ﺧﺎﺩﻡ ﺍﻟﻮﻳﺐ ‪ ،‬ﺑﺘﺤﻮﻳﻞ ﺍﻟﻤﺴﺘﻨﺪ ﺇﻟﻰ ‪JSP ،‬‬
‫ﺑﻮﺍﺳﻄﺔﺍﻟﻤﺴﺘﻌﺮﺽ ‪ ،‬ﻳﻘﻮﻡ ﺑﺮﻧﺎﻣﺞ ﻣﻌﺎﻟﺞ ‪ Java ،‬ﻭ ‪ HTML‬ﻭﺍﻟﺬﻱ ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻜﻮﻥ ﺧﻠﻴﻄﺎً ﻣﻦ ‪،‬‬
‫‪ JSP‬ﻋﺒﺎﺭﺓ ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺘﻘﻨﻴﺎﺕ ﺍﻟﻤﺼﻤﻤﺔ ﻟﺪﻋﻢ ﻣﺴﺘﻨﺪﺍﺕ ﺍﻟﻮﻳﺐ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﻭﺗﻮﻓﻴﺮ‬
‫ﺍﺣﺘﻴﺎﺟﺎﺕﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻷﺧﺮﻯ ﻟﻮﺛﺎﺉﻖ ﺍﻟﻮﻳﺐ‪ .‬ﻋﻨﺪﻣﺎ ﻳﺘﻢ ﻃﻠﺐ ﻣﺴﺘﻨﺪ ‪JSP‬‬

‫ﺗﻌﺮﻑ‪ JSTL‬ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻋﻨﺎﺻﺮ ﺗﺼﺮﻑ ‪ XML‬ﺍﻟﺘﻲ ﺗﺘﺤﻜﻢ ﻓﻲ ﻣﻌﺎﻟﺠﺔ ﻭﺛﻴﻘﺔ ‪ JSP‬ﻋﻠﻰ‬


‫ﺧﺎﺩﻡﺍﻟﻮﻳﺐ‪ .‬ﻫﺬﻩ ﺍﻟﻌﻨﺎﺻﺮ ﻟﻬﺎ ﻧﻔﺲ ﺷﻜﻞ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻷﺧﺮﻯ ﻓﻲ ‪ HTML‬ﻭ ‪ .XML‬ﺃﺣﺪ ﺃﻛﺜﺮ‬
‫ﻋﻨﺎﺻﺮﻋﻤﻞ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ‪ JSTL‬ﺷﻴﻮﻋﺎً ﻫﻮﻟﻮ‪،‬ﺍﻟﺘﻲ ﺗﺤﺪﺩ ﺗﻌﺒﻴﺮﺍً ﻣﻨﻄﻘﻴﺎً ﻛﺴﻤﺔ‪22.‬ﻣﺤﺘﻮﻯ ﻣﻠﻒﻟﻮ‬
‫ﻋﻨﺼﺮ)ﺍﻟﻨﺺ ﺍﻟﻤﻮﺟﻮﺩ ﺑﻴﻦ ﻋﻼﻣﺔ ﺍﻟﻔﺘﺢ )>ﺇﺫﺍ<(ﻭﻋﻼﻣﺔ ﺍﻹﻏﻼﻕ ﺍﻟﺨﺎﺻﺔ ﺑﻪ )>‪/‬ﺇﺫﺍ<((ﻫﻮ ﻛﻮﺩ‬
‫‪ HTML‬ﺍﻟﺬﻱ ﺳﻴﺘﻢ ﺗﻀﻤﻴﻨﻪ ﻓﻲ ﻣﺴﺘﻨﺪ ﺍﻹﺧﺮﺍﺝ ﻓﻘﻂ ﺇﺫﺍ ﺗﻢ ﺗﻘﻴﻴﻢ ﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﻤﻨﻄﻘﻲ ﻋﻠﻰ‬
‫ﺻﺤﻴﺢ‪.‬ﺍﻝ‬

‫ﻟﻮﺍﻟﻌﻨﺼﺮ ﻣﺮﺗﺒﻂ ﺑـ ‪# ++ C / C‬ﻟﻮﺃﻣﺮ ﺍﻟﻤﻌﺎﻟﺞ‪JSP .‬‬

‫‪.21‬ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﻭﺛﻴﻘﺔ ﺍﻹﺧﺮﺍﺝ ﺍﻟﺨﺎﺻﺔ ﺑﻤﻌﺎﻟﺞ ‪ XSLT‬ﺑﺘﻨﺴﻴﻖ ‪ HTML‬ﺃﻭ ﻧﺺ ﻋﺎﺩﻱ‪.‬‬


‫‪.22‬ﺗﻮﻓﺮ ﺍﻟﺴﻤﺔ ﻓﻲ ‪ ، HTML‬ﺍﻟﻤﻀﻤﻨﺔ ﻓﻲ ﺍﻟﻌﻼﻣﺔ ﺍﻻﻓﺘﺘﺎﺣﻴﺔ ﻟﻌﻨﺼﺮ ﻣﺎ ‪ ،‬ﻣﺰﻳﺪﺍً ﻣﻦ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺣﻮﻝ ﻫﺬﺍ ﺍﻟﻌﻨﺼﺮ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪106‬‬

‫ﺗﻌﺎﻟﺞﺍﻟﺤﺎﻭﻳﺔ ﺃﺟﺰﺍء ‪ JSTL‬ﻣﻦ ﻣﺴﺘﻨﺪﺍﺕ ‪ JSP‬ﺑﻄﺮﻳﻘﺔ ﻣﺸﺎﺑﻬﺔ ﻟﻜﻴﻔﻴﺔ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻷﻭﻟﻲ ‪C‬‬
‫‪ ++ C /‬ﻟﺒﺮﺍﻣﺞ ‪ C‬ﻭ ‪ .++ C‬ﺃﻭﺍﻣﺮ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻷﻭﻟﻲ ﻫﻲ ﺗﻌﻠﻴﻤﺎﺕ ﻟﻠﻤﻌﺎﻟﺞ ﺍﻷﻭﻟﻲ ﻟﺘﺤﺪﻳﺪ ﻛﻴﻔﻴﺔ‬
‫ﺇﻧﺸﺎءﻣﻠﻒ ﺍﻹﺧﺮﺍﺝ ﻣﻦ ﻣﻠﻒ ﺍﻹﺩﺧﺎﻝ‪ .‬ﻭﺑﺎﻟﻤﺜﻞ ‪ ،‬ﻓﺈﻥ ﻋﻨﺎﺻﺮ ﺗﺼﺮﻑ ﺗﺤﻜﻢ ‪ JSTL‬ﻫﻲ‬
‫ﺗﻌﻠﻴﻤﺎﺕﻟﻤﻌﺎﻟﺞ ‪ JSP‬ﻟﺘﺤﺪﻳﺪ ﻛﻴﻔﻴﺔ ﺑﻨﺎء ﻣﻠﻒ ﻣﺨﺮﺟﺎﺕ ‪ XML‬ﻣﻦ ﻣﻠﻒ ﺇﺩﺧﺎﻝ ‪.XML‬‬

‫ﺃﺣﺪﺍﻻﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻟﺸﺎﺉﻌﺔ ﻟـﻟﻮﻋﻨﺼﺮ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺔ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﻤﻘﺪﻣﺔ ﻣﻦ‬


‫ﻗﺒﻞﻣﺴﺘﺨﺪﻡ ﺍﻟﻤﺴﺘﻌﺮﺽ‪ .‬ﻳﻤﻜﻦ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻨﻤﻮﺫﺝ ﺑﻮﺍﺳﻄﺔ ﻣﻌﺎﻟﺞ ‪ JSP‬ﻭﻳﻤﻜﻦ‬
‫ﺍﺧﺘﺒﺎﺭﻫﺎﺑﺎﺳﺘﺨﺪﺍﻡﻟﻮﻋﻨﺼﺮ ﻟﻠﺘﺄﻛﺪ ﻣﻦ ﺃﻧﻬﺎ ﺑﻴﺎﻧﺎﺕ ﻣﻌﻘﻮﻟﺔ‪ .‬ﺇﺫﺍ ﻟﻢ ﻳﻜﻦ ﻛﺬﻟﻚ ‪ ،‬ﻓﺈﻥ‬
‫ﻟﻮﻳﻤﻜﻦ ﻟﻠﻌﻨﺼﺮ ﺇﺩﺭﺍﺝ ﺭﺳﺎﻟﺔ ﺧﻄﺄ ﻟﻠﻤﺴﺘﺨﺪﻡ ﻓﻲ ﻣﺴﺘﻨﺪ ﺍﻹﺧﺮﺍﺝ‪.‬‬
‫ﻟﻠﺘﺤﻜﻢﻓﻲ ﺍﻻﺧﺘﻴﺎﺭ ﺍﻟﻤﺘﻌﺪﺩ ‪ ،‬ﺗﻤﺘﻠﻚ ‪JSTL‬ﺍﺧﺘﺮ ‪ ،‬ﻣﺘﻰ ‪،‬ﻭﺧﻼﻑ ﺫﻟﻚ‬
‫ﻋﻨﺎﺻﺮ‪.‬ﻳﺘﻀﻤﻦ ‪ JSTL‬ﺃﻳﻀﺎً ﻣﻠﻒﻟﻜﻞﺍﻟﻌﻨﺼﺮ ‪ ،‬ﺍﻟﺬﻱ ﻳﺘﻜﺮﺭ ﻋﻠﻰ ﺍﻟﻤﺠﻤﻮﻋﺎﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ‬
‫ﻋﺎﺩﺓ ًﻗﻴﻢ ﻧﻤﻮﺫﺟﻴﺔ ﻣﻦ ﺍﻟﻌﻤﻴﻞ‪ .‬ﺍﻝﻟﻜﻞﻳﻤﻜﻦ ﺃﻥ ﻳﺸﻤﻞ ﺍﻟﻌﻨﺼﺮﺗﺒﺪﺃ ‪ ،‬ﺗﻨﺘﻬﻲ ‪،‬ﻭﺧﻄﻮﺓﺳﻤﺎﺕ‬
‫ﻟﻠﺘﺤﻜﻢﻓﻲ ﺗﻜﺮﺍﺭﺍﺗﻬﺎ‪.‬‬

‫ﻣﻠﺨﺺ‬

‫ﻟﻘﺪﺑﺤﺜﻨﺎ ﻓﻲ ﺑﻴﺉﺎﺕ ﺍﻟﺘﻄﻮﻳﺮ ﻭﺍﻟﺘﻄﻮﻳﺮ ﻟﻌﺪﺩ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻳﻤﻨﺢ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﺍﻟﻘﺎﺭﺉ‬
‫ﻣﻨﻈﻮﺭﺍًﺟﻴﺪﺍً ﻟﻠﻘﻀﺎﻳﺎ ﺍﻟﺤﺎﻟﻴﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‪ .‬ﻟﻘﺪ ﻣﻬﺪﻧﺎ ﺍﻟﻄﺮﻳﻖ ﻹﺟﺮﺍء ﻣﻨﺎﻗﺸﺔ ﻣﺘﻌﻤﻘﺔ‬
‫ﺣﻮﻝﺍﻟﺴﻤﺎﺕ ﺍﻟﻤﻬﻤﺔ ﻟﻠﻐﺎﺕ ﺍﻟﻤﻌﺎﺻﺮﺓ‪.‬‬

‫ﺣﻮﺍﺷﻲﺑﺒﻠﻴﻮﻏﺮﺍﻓﻴﺔ‬

‫ﺭﺑﻤﺎﻳﻜﻮﻥ ﺃﻫﻢ ﻣﺼﺪﺭ ﻟﻠﻤﻌﻠﻮﻣﺎﺕ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ ﺣﻮﻝ ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﺒﻜﺮﺓ ﻫﻮﺗﺎﺭﻳﺦ ﻟﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﺣﺮﺭﻩ ﺭﻳﺘﺸﺎﺭﺩ ﻭﻳﻜﺴﻠﺒﻼﺕ )‪ .(1981‬ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﻄﻮﻳﺮﻳﺔ ﻭﺍﻟﺒﻴﺉﺔ ﻟـ ‪13‬‬
‫ﻟﻐﺔﺑﺮﻣﺠﺔ ﻣﻬﻤﺔ ‪ ،‬ﻛﻤﺎ ﺭﻭﻯ ﺍﻟﻤﺼﻤﻤﻮﻥ ﺃﻧﻔﺴﻬﻢ‪ .‬ﻋﻤﻞ ﻣﻤﺎﺛﻞ ﻧﺘﺞ ﻋﻦ ﻣﺆﺗﻤﺮ "ﺍﻟﺘﺎﺭﻳﺦ"‬
‫ﺍﻟﺜﺎﻧﻲ ‪،‬ﻧﺸﺮ ﻛﻌﺪﺩ ﺧﺎﺹ ﻣﻦﺇﺷﻌﺎﺭﺍﺕ ‪.)ACM SIGPLAN‬ﺃ(‪ .‬ﻓﻲ ﻫﺬﺍ ﺍﻟﻌﻤﻞ ‪ ،‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ‬
‫ﺗﺎﺭﻳﺦﻭﺗﻄﻮﺭ ‪ 13‬ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺃﺧﺮﻯ ‪ACM ، 1993‬‬

‫ﺍﻟﻮﺭﻗﺔ"ﺍﻟﺘﻄﻮﻳﺮ ﺍﻟﻤﺒﻜﺮ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ" )‪ ، (Knuth and Pardo، 1977‬ﻭﻫﻲ ﺟﺰء ﻣﻦ‬
‫ﻣﻮﺳﻮﻋﺔﻋﻠﻮﻡ ﻭﺗﻜﻨﻮﻟﻮﺟﻴﺎ ﺍﻟﺤﺎﺳﻮﺏ ﻫﻮ ﻋﻤﻞ ﻣﻤﺘﺎﺯ ﻣﻜﻮﻥ ﻣﻦ ‪ 85‬ﺻﻔﺤﺔ ﻳﻌﺮﺽ ﺗﻔﺎﺻﻴﻞ‬
‫ﺗﻄﻮﺭﺍﻟﻠﻐﺎﺕ ﺣﺘﻰ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ‪ .‬ﺗﺘﻀﻤﻦ ﺍﻟﻮﺭﻗﺔ ﺃﻣﺜﻠﺔ ﻋﻠﻰ ﺑﺮﺍﻣﺞ ﻹﺛﺒﺎﺕ ﻣﻴﺰﺍﺕ‬
‫ﺍﻟﻌﺪﻳﺪﻣﻦ ﺗﻠﻚ ﺍﻟﻠﻐﺎﺕ‪.‬‬

‫ﻛﺘﺎﺏﺁﺧﺮ ﺫﻭ ﺃﻫﻤﻴﺔ ﻛﺒﻴﺮﺓﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ :‬ﺍﻟﺘﺎﺭﻳﺦ ﻭﺍﻷﺳﺎﺳﻴﺎﺕ ‪،‬ﺑﻮﺍﺳﻄﺔ ﺟﺎﻥ ﺳﺎﻣﻴﺖ )‬


‫‪ .(1969‬ﺇﻧﻪ ﻋﻤﻞ ﻣﺆﻟﻒ ﻣﻦ ‪ 785‬ﺻﻔﺤﺔ ﻣﻠﻲء ﺑﺘﻔﺎﺻﻴﻞ ‪ 80‬ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻓﻲ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ‬
‫ﻭﺍﻟﺴﺘﻴﻨﻴﺎﺕ‪.‬ﻧﺸﺮﺕ ‪ Sammet‬ﺃﻳﻀﺎً ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﺤﺪﻳﺜﺎﺕ ﻋﻠﻰ ﻛﺘﺎﺑﻬﺎ ‪ ،‬ﻣﺜﻞﻗﺎﺉﻤﺔ ﻟﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔﻟﻸﻋﻮﺍﻡ ‪.(1976)1975-1974‬‬
‫‪107‬‬ ‫ﺭﺍﺟﻊﺍﻷﺳﺉﻠﺔ‬

‫ﺭﺍﺟﻊﺍﻷﺳﺉﻠﺔ‬

‫‪.1‬ﻓﻲ ﺃﻱ ﻋﺎﻡ ﺗﻢ ﺗﺼﻤﻴﻢ ‪Plankalkül‬؟ ﻓﻲ ﺃﻱ ﺳﻨﺔ ﺗﻢ ﻧﺸﺮ ﻫﺬﺍ ﺍﻟﺘﺼﻤﻴﻢ؟‬

‫‪.2‬ﻣﺎ ﺍﺛﻨﻴﻦ ﻣﻦ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺸﺘﺮﻛﺔ ﺍﻟﺘﻲ ﺗﻢ ﺗﻀﻤﻴﻨﻬﺎ ﻓﻲ ‪Plankalkül‬؟‬


‫‪.3‬ﻛﻴﻒ ﺗﻢ ﺗﻨﻔﻴﺬ ﺍﻟﺮﻣﻮﺯ ﺍﻟﺰﺍﺉﻔﺔ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ؟‬
‫‪.4‬ﺗﻢ ﺍﺧﺘﺮﺍﻉ ‪ Speedcoding‬ﻟﻠﺘﻐﻠﺐ ﻋﻠﻰ ﻋﻴﺒﻴﻦ ﻫﺎﻣﻴﻦ ﻓﻲ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﺃﻭﺍﺉﻞ‬
‫ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ‪ .‬ﻣﺎﺫﺍ ﻛﺎﻧﻮﺍ؟‬
‫‪.5‬ﻟﻤﺎﺫﺍ ﻛﺎﻥ ﺍﻟﺒﻂء ﻓﻲ ﺗﻔﺴﻴﺮ ﺍﻟﺒﺮﺍﻣﺞ ﻣﻘﺒﻮﻻ ًﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ؟‬

‫‪.6‬ﻣﺎ ﻫﻲ ﻗﺪﺭﺓ ﺍﻷﺟﻬﺰﺓ ﺍﻟﺘﻲ ﻇﻬﺮﺕ ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ ﻛﻤﺒﻴﻮﺗﺮ ‪ IBM 704‬ﺍﻟﺘﻲ ﺃﺛﺮﺕ ﺑﺸﺪﺓ ﻋﻠﻰ‬
‫ﺗﻄﻮﺭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ؟ ﺍﺷﺮﺡ ﺍﻟﺴﺒﺐ‪.‬‬
‫‪.7‬ﻓﻲ ﺃﻱ ﺳﻨﺔ ﺑﺪﺃ ﻣﺸﺮﻭﻉ ﺗﺼﻤﻴﻢ ﻓﻮﺭﺗﺮﺍﻥ؟‬
‫‪.8‬ﻣﺎ ﻫﻮ ﻣﺠﺎﻝ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻷﺳﺎﺳﻲ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﺍﻟﻮﻗﺖ ﺍﻟﺬﻱ ﺗﻢ ﻓﻴﻪ ﺗﺼﻤﻴﻢ‬
‫‪Fortran‬؟‬
‫‪.9‬ﻣﺎ ﻫﻮ ﻣﺼﺪﺭ ﻛﻞ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺘﺪﻓﻖ ﺍﻟﺨﺎﺻﺔ ﺑـ ‪Fortran I‬؟‬
‫‪.10‬ﻣﺎ ﻫﻲ ﺃﻫﻢ ﻣﻴﺰﺓ ﺗﻤﺖ ﺇﺿﺎﻓﺘﻬﺎ ﺇﻟﻰ ‪ Fortran I‬ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ‪Fortran II‬؟‬

‫‪.11‬ﻣﺎ ﻫﻲ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺘﺪﻓﻖ ﺍﻟﺘﻲ ﺗﻤﺖ ﺇﺿﺎﻓﺘﻬﺎ ﺇﻟﻰ ‪ Fortran IV‬ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ‪Fortran 77‬؟‬

‫‪.12‬ﺃﻱ ﺇﺻﺪﺍﺭ ﻣﻦ ‪ Fortran‬ﻛﺎﻥ ﺃﻭﻝ ﻣﻦ ﺍﻣﺘﻠﻚ ﺃﻱ ﻧﻮﻉ ﻣﻦ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ؟‬

‫‪.13‬ﺃﻱ ﺇﺻﺪﺍﺭ ﻣﻦ ‪ Fortran‬ﻛﺎﻥ ﺃﻭﻝ ﻣﻦ ﺗﻌﺎﻣﻞ ﻣﻊ ﺳﻠﺴﻠﺔ ﺍﻷﺣﺮﻑ؟‬


‫‪.14‬ﻟﻤﺎﺫﺍ ﺍﻫﺘﻢ ﺍﻟﻠﻐﻮﻳﻮﻥ ﺑﺎﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ؟‬
‫‪.15‬ﺃﻳﻦ ﺗﻢ ﺗﻄﻮﻳﺮ ‪LISP‬؟ ﺑﻮﺍﺳﻄﺔ ﻣﻦ؟‬
‫‪.16‬ﻣﺎ ﻫﻲ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﺘﻲ ﻳﻮﺟﺪ ﺑﻬﺎ ﻣﺨﻄﻂ ﻭ ‪ LISP‬ﺍﻟﻤﺸﺘﺮﻙ ﺍﻟﻤﺘﻀﺎﺩﺍﻥ ﻟﺒﻌﻀﻬﻤﺎ ﺍﻟﺒﻌﺾ؟‬
‫‪.17‬ﻣﺎ ﻫﻲ ﻟﻬﺠﺔ ‪ LISP‬ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺩﻭﺭﺍﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻤﻬﻴﺪﻳﺔ ﻓﻲ ﺑﻌﺾ ﺍﻟﺠﺎﻣﻌﺎﺕ؟‬

‫‪.18‬ﻣﺎ ﻫﻲ ﺍﻟﻤﻨﻈﻤﺘﺎﻥ ﺍﻟﻤﻬﻨﻴﺘﺎﻥ ﺍﻟﻠﺘﺎﻥ ﺻﻤﻤﺘﺎ ﻣﻌﺎً ‪ALGOL 60‬؟‬


‫‪.19‬ﻓﻲ ﺃﻱ ﺇﺻﺪﺍﺭ ﻣﻦ ‪ ALGOL‬ﻇﻬﺮﺕ ﺑﻨﻴﺔ ﺍﻟﻜﺘﻠﺔ؟‬
‫‪.20‬ﻣﺎ ﺍﻟﻌﻨﺼﺮ ﺍﻟﻠﻐﻮﻱ ﺍﻟﻤﻔﻘﻮﺩ ﻓﻲ ‪ ALGOL 60‬ﺍﻟﺬﻱ ﺃﺿﺮ ﺑﻔﺮﺹ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻋﻠﻰ ﻧﻄﺎﻕ‬
‫ﻭﺍﺳﻊ؟‬
‫‪.21‬ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ ﻟﻮﺻﻒ ﺑﻨﺎء ﺟﻤﻠﺔ ‪ALGOL 60‬؟‬
‫‪.22‬ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻛﺎﻥ ﻳﻌﺘﻤﺪ ﻋﻠﻴﻬﺎ ‪COBOL‬؟‬
‫‪.23‬ﻓﻲ ﺃﻱ ﺳﻨﺔ ﺑﺪﺃﺕ ﻋﻤﻠﻴﺔ ﺗﺼﻤﻴﻢ ‪COBOL‬؟‬
‫‪.24‬ﻣﺎ ﻫﻲ ﺑﻨﻴﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﻇﻬﺮﺕ ﻓﻲ ‪ COBOL‬ﻭﺍﻟﺘﻲ ﻧﺸﺄﺕ ﻣﻊ ‪Plankalkül‬‬
‫؟‬
‫‪.25‬ﻣﺎ ﻫﻲ ﺍﻟﻤﻨﻈﻤﺔ ﺍﻟﺘﻲ ﻛﺎﻧﺖ ﻣﺴﺆﻭﻟﺔ ﻋﻦ ﺍﻟﻨﺠﺎﺡ ﺍﻟﻤﺒﻜﺮ ﻟـ ‪) COBOL‬ﻣﻦ ﺣﻴﺚ‬
‫ﻣﺪﻯﺍﻻﺳﺘﺨﺪﺍﻡ(؟‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪108‬‬

‫‪.26‬ﻣﺎ ﻫﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺍﻟﺘﻲ ﻛﺎﻧﺖ ﻫﺪﻑ ﺍﻟﻨﺴﺨﺔ ﺍﻷﻭﻟﻰ ﻣﻦ ‪BASIC‬؟‬


‫‪.27‬ﻟﻤﺎﺫﺍ ﻛﺎﻧﺖ ﻟﻐﺔ ‪ BASIC‬ﻟﻐﺔ ﻣﻬﻤﺔ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ؟‬
‫‪.28‬ﺗﻢ ﺗﺼﻤﻴﻢ ‪ PL / I‬ﻟﻴﺤﻞ ﻣﺤﻞ ﻣﺎ ﺍﻟﻠﻐﺘﻴﻦ؟‬
‫‪.29‬ﻷﻱ ﺧﻂ ﺟﺪﻳﺪ ﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﻢ ﺗﺼﻤﻴﻢ ‪PL / I‬؟‬
‫‪.30‬ﻣﺎ ﻫﻲ ﻣﻴﺰﺍﺕ ‪ SIMULA 67‬ﺍﻟﺘﻲ ﻫﻲ ﺍﻵﻥ ﺃﺟﺰﺍء ﻣﻬﻤﺔ ﻣﻦ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻌﺘﺮﺽ‬
‫ﻋﻠﻴﻬﺎ؟‬
‫‪.31‬ﻣﺎ ﻫﻮ ﺍﺑﺘﻜﺎﺭ ﻫﻴﻜﻠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺬﻱ ﺗﻢ ﺗﻘﺪﻳﻤﻪ ﻓﻲ ‪ ALGOL 68‬ﻭﻟﻜﻦ ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻨُﺴﺐ ﺇﻟﻰ‬
‫ﺑﺎﺳﻜﺎﻝ؟‬
‫‪.32‬ﻣﺎ ﻫﻮ ﻣﻌﻴﺎﺭ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ ‪ALGOL 68‬؟‬
‫‪.33‬ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺃﺩﺧﻠﺖﻗﻀﻴﺔﺇﻓﺎﺩﺓ؟‬
‫‪.34‬ﻣﺎ ﺍﻟﻤﺸﻐﻠﻴﻦ ﻓﻲ ‪ C‬ﺗﻢ ﺗﺼﻤﻴﻤﻬﻢ ﻋﻠﻰ ﻏﺮﺍﺭ ﻣﺸﻐﻠﻴﻦ ﻣﺸﺎﺑﻬﻴﻦ ﻓﻲ ‪ALGOL 68‬؟‬
‫‪.35‬ﻣﺎ ﻫﻲ ﺳﻤﺘﺎﻥ ﻟﻠﻐﺔ ‪ C‬ﺗﺠﻌﻠﻬﺎ ﺃﻗﻞ ﺃﻣﺎﻧﺎً ﻣﻦ ﺑﺎﺳﻜﺎﻝ؟‬
‫‪.36‬ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﻏﻴﺮ ﺍﻹﺟﺮﺍﺉﻴﺔ؟‬
‫‪.37‬ﻣﺎ ﻫﻤﺎ ﻧﻮﻋﺎﻥ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﺗﻤﻸ ﻗﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ‪Prolog‬؟‬
‫‪.38‬ﻣﺎ ﻫﻮ ﻣﺠﺎﻝ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻷﺳﺎﺳﻲ ﺍﻟﺬﻱ ﺻﻤﻤﺖ ‪ Ada‬ﻣﻦ ﺃﺟﻠﻪ؟‬
‫‪.39‬ﻣﺎ ﺗﺴﻤﻰ ﻭﺣﺪﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﺘﺰﺍﻣﻨﺔ ﻣﻦ ‪Ada‬؟‬
‫‪.40‬ﻣﺎ ﻫﻮ ﺑﻨﺎء ‪ Ada‬ﺍﻟﺬﻱ ﻳﻮﻓﺮ ﺍﻟﺪﻋﻢ ﻷﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺠﺮﺩﺓ؟‬
‫‪.41‬ﻣﺎ ﺍﻟﺬﻱ ﻳﺴﻜﻦ ﻋﺎﻟﻢ ‪Smalltalk‬؟‬
‫‪.42‬ﻣﺎ ﻫﻲ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻟﺜﻼﺛﺔ ﺍﻟﺘﻲ ﻫﻲ ﺃﺳﺎﺱ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ؟‬
‫‪.43‬ﻟﻤﺎﺫﺍ ﺗﺘﻀﻤﻦ ‪ ++ C‬ﻣﻴﺰﺍﺕ ‪ C‬ﺍﻟﻤﻌﺮﻭﻓﺔ ﺑﺄﻧﻬﺎ ﻏﻴﺮ ﺁﻣﻨﺔ؟‬
‫‪.44‬ﻣﻦ ﺃﻱ ﻟﻐﺔ ﻳﺴﺘﻌﻴﺮ ‪ Objective-C‬ﺑﻨﺎﺉﻪ ﻻﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﻄﺮﻳﻘﺔ؟‬

‫‪.45‬ﻣﺎ ﻫﻮ ﻧﻤﻮﺫﺝ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺬﻱ ﻻ ﺗﺪﻋﻤﻪ ‪ Go‬ﺗﻘﺮﻳﺒﺎً ﺟﻤﻴﻊ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺼﻤﻤﺔ ﺣﺪﻳﺜﺎً؟‬

‫‪.46‬ﻣﺎ ﻫﻮ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻷﺳﺎﺳﻲ ﻟﻠﻬﺪﻑ‪C -‬؟‬


‫‪.47‬ﻣﺎ ﻫﻮ ﻣﺼﻤﻢ ﺍﻟﻠﻐﺔ ﺍﻟﺬﻱ ﻋﻤﻞ ﻋﻠﻰ ﻛﻞ ﻣﻦ ‪ C‬ﻭ ‪Go‬؟‬
‫‪.48‬ﻣﺎ ﻫﻮ ﺍﻟﻘﺎﺳﻢ ﺍﻟﻤﺸﺘﺮﻙ ﺑﻴﻦ ﻟﻐﺘﻲ ‪ Ada‬ﻭ ‪COBOL‬؟‬
‫‪.49‬ﻣﺎ ﻫﻮ ﺃﻭﻝ ﺗﻄﺒﻴﻖ ﻟﺠﺎﻓﺎ؟‬
‫‪.50‬ﻣﺎ ﻫﻲ ﺧﺎﺻﻴﺔ ‪ Java‬ﺍﻷﻛﺜﺮ ﻭﺿﻮﺣﺎً ﻓﻲ ‪JavaScript‬؟‬
‫‪.51‬ﻛﻴﻒ ﻳﺨﺘﻠﻒ ﻧﻈﺎﻡ ﻛﺘﺎﺑﺔ ‪ PHP‬ﻭ ‪ JavaScript‬ﻋﻦ ﻧﻈﺎﻡ ‪Java‬؟‬

‫‪.52‬ﻣﺎ ﻫﻲ ﺑﻨﻴﺔ ﺍﻟﻤﺼﻔﻮﻓﺔ ﺍﻟﻤﻀﻤﻨﺔ ﻓﻲ ‪ # C‬ﻭﻟﻜﻦ ﻟﻴﺲ ﻓﻲ ‪ C‬ﺃﻭ ‪ ++ C‬ﺃﻭ ‪Java‬؟‬


‫‪.53‬ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺘﻴﻦ ﺍﻟﺘﻲ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻔﺘﺮﺽ ﺃﻥ ﺗﺤﻞ ﺍﻟﻨﺴﺨﺔ ﺍﻷﺻﻠﻴﺔ ﻣﻦ ‪ Perl‬ﻣﺤﻠﻬﺎ؟‬
‫‪.54‬ﻷﻱ ﻣﺠﺎﻝ ﺗﻄﺒﻴﻖ ﻳﺴﺘﺨﺪﻡ ‪ JavaScript‬ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ؟‬
‫‪.55‬ﻣﺎ ﻫﻲ ﺍﻟﻌﻼﻗﺔ ﺑﻴﻦ ‪ JavaScript‬ﻭ ‪ PHP‬ﻣﻦ ﺣﻴﺚ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ؟‬

‫‪.56‬ﻫﻴﻜﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻷﺳﺎﺳﻲ ﻟـ ‪ PHP‬ﻫﻮ ﻣﺰﻳﺞ ﻣﻦ ﻫﻴﻜﻠﻴﻦ ﻟﻠﺒﻴﺎﻧﺎﺕ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ؟‬


‫‪109‬‬ ‫ﺗﻢﺿﺒﻂ ﺍﻟﻤﺸﻜﻠﺔ‬

‫‪.57‬ﻣﺎ ﻫﻲ ﺑﻨﻴﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﺗﺴﺘﺨﺪﻣﻬﺎ ﺑﺎﻳﺜﻮﻥ ﺑﺪﻻ ًﻣﻦ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ؟‬


‫‪.58‬ﻣﺎ ﻫﻲ ﺍﻟﺴﻤﺔ ﺍﻟﺘﻲ ﺗﺸﺘﺮﻙ ﻓﻴﻬﺎ ﺭﻭﺑﻲ ﻣﻊ ﺳﻤﺎﻟﺘﺎﻟﻚ؟‬
‫‪.59‬ﻣﺎ ﻫﻲ ﺧﺼﺎﺉﺺ ﻣﻌﺎﻣﻼﺕ ﺭﻭﺑﻲ ﺍﻟﺤﺴﺎﺑﻴﺔ ﺍﻟﺘﻲ ﺗﺠﻌﻠﻬﺎ ﻓﺮﻳﺪﺓ ﻋﻦ ﻏﻴﺮﻫﺎ ﻣﻦ ﺍﻟﻠﻐﺎﺕ؟‬

‫‪.60‬ﻣﺎ ﻫﻲ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻀﻤﻨﺔ ﻓﻲ ‪Lua‬؟‬


‫‪.61‬ﻫﻞ ﻳﺘﻢ ﻋﺎﺩﺓ ًﺗﺠﻤﻴﻊ ‪ Lua‬ﺃﻭ ﺗﻔﺴﻴﺮﻩ ﺑﺤﺘﺔ ﺃﻭ ﺗﻔﺴﻴﺮﻩ ﺑﺸﻜﻞ ﻏﻴﺮ ﺩﻗﻴﻖ؟‬
‫‪.62‬ﻣﺎ ﻫﻲ ﻣﻴﺰﺓ ﻓﺉﺎﺕ ﺩﻟﻔﻲ ﺍﻟﻤﻀﻤﻨﺔ ﻓﻲ ‪# C‬؟‬
‫‪.63‬ﻣﺎ ﻋﻴﺐﻳﺤُﻮﻝّﻳﺘﻢ ﺗﻨﺎﻭﻝ ﺑﻴﺎﻥ ‪ C‬ﻣﻊ ﺍﻟﺘﻐﻴﻴﺮﺍﺕ ﺍﻟﺘﻲ ﺃﺟﺮﺍﻫﺎ ‪ # C‬ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﺒﻴﺎﻥ؟‬

‫‪.64‬ﻣﺎ ﻫﻲ ﺍﻟﻤﻨﺼﺔ ﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﺘﻲ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ‪ # C‬ﻋﻠﻴﻬﺎ؟‬


‫‪.65‬ﻣﺎ ﻫﻲ ﻣﺪﺧﻼﺕ ﻣﻌﺎﻟﺞ ‪XSLT‬؟‬
‫‪.66‬ﻣﺎ ﻫﻮ ﺧﺮﺝ ﻣﻌﺎﻟﺞ ‪XSLT‬؟‬
‫‪.67‬ﻣﺎ ﻫﻮ ﻋﻨﺼﺮ ﻣﻦ ﻋﻨﺎﺻﺮ ‪ JSTL‬ﺍﻟﻤﺮﺗﺒﻂ ﺑﺒﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ؟‬
‫‪.68‬ﻣﺎ ﻫﻲ ﻭﺛﻴﻘﺔ ‪ JSP‬ﺍﻟﻤﺤﻮﻟﺔ ﺑﻮﺍﺳﻄﺔ ﻣﻌﺎﻟﺞ ‪JSP‬؟‬
‫‪.69‬ﺃﻳﻦ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ‪servlets‬؟‬

‫ﺗﻢﺿﺒﻂ ﺍﻟﻤﺸﻜﻠﺔ‬

‫‪.1‬ﻣﺎ ﻫﻲ ﻣﻴﺰﺍﺕ ‪ Plankalkül‬ﺍﻟﺘﻲ ﺗﻌﺘﻘﺪ ﺃﻧﻬﺎ ﺳﻴﻜﻮﻥ ﻟﻬﺎ ﺍﻟﺘﺄﺛﻴﺮ ﺍﻷﻛﺒﺮ ﻋﻠﻰ ‪Fortran 0‬‬
‫ﺇﺫﺍﻛﺎﻥ ﻣﺼﻤﻤﻮ ‪ Fortran‬ﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺑـ ‪Plankalkül‬؟‬

‫‪.2‬ﺗﺤﺪﻳﺪ ﺇﻣﻜﺎﻧﻴﺎﺕ ﻧﻈﺎﻡ ‪ Backus's 701 Speedcoding‬ﻭﻣﻘﺎﺭﻧﺘﻬﺎ ﺑﺈﻣﻜﺎﻧﻴﺎﺕ ﺁﻟﺔ‬


‫ﺣﺎﺳﺒﺔﻳﺪﻭﻳﺔ ﻣﻌﺎﺻﺮﺓ ﻗﺎﺑﻠﺔ ﻟﻠﺒﺮﻣﺠﺔ‪.‬‬

‫‪.3‬ﺍﻛﺘﺐ ﺗﺎﺭﻳﺨﺎً ﻣﻮﺟﺰ ًﺍ ﻷﻧﻈﻤﺔ ‪ A-0‬ﻭ ‪ A-1‬ﻭ ‪ A-2‬ﺍﻟﻤﺼﻤﻤﺔ ﺑﻮﺍﺳﻄﺔ ‪Hopper‬‬


‫‪ Grace‬ﻭﺷﺮﻛﺎﺉﻬﺎ‪.‬‬
‫‪.4‬ﻛﻤﺸﺮﻭﻉ ﺑﺤﺜﻲ ‪ ،‬ﻗﺎﺭﻥ ﻣﺮﺍﻓﻖ ‪ Fortran 0‬ﻣﻊ ﻣﺮﺍﻓﻖ ﻧﻈﺎﻡ ‪ Laning‬ﻭ ‪.Zierler‬‬

‫‪.5‬ﺃﻱ ﻣﻦ ﺍﻷﻫﺪﺍﻑ ﺍﻟﺜﻼﺛﺔ ﺍﻷﺻﻠﻴﺔ ﻟﻠﺠﻨﺔ ﺗﺼﻤﻴﻢ ‪ ، ALGOL‬ﺑﺮﺃﻳﻚ ‪ ،‬ﻛﺎﻥ ﻣﻦ ﺍﻟﺼﻌﺐ‬


‫ﺗﺤﻘﻴﻘﻪﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ؟‬
‫‪.6‬ﻗﻢ ﺑﺘﺨﻤﻴﻦ ﻣﺘﻌﻠﻢ ﺃﻛﺜﺮ ﺍﻷﺧﻄﺎء ﺍﻟﻨﺤﻮﻳﺔ ﺷﻴﻮﻋﺎً ﻓﻲ ﺑﺮﺍﻣﺞ ‪.LISP‬‬

‫‪.7‬ﺑﺪﺃﺕ ‪ LISP‬ﻛﻠﻐﺔ ﻭﻇﻴﻔﻴﺔ ﺧﺎﻟﺼﺔ ﻭﻟﻜﻨﻬﺎ ﺍﻛﺘﺴﺒﺖ ﺗﺪﺭﻳﺠﻴﺎ ًﺍﻟﻤﺰﻳﺪ ﻭﺍﻟﻤﺰﻳﺪ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ‬
‫ﺍﻟﻀﺮﻭﺭﻳﺔ‪.‬ﻟﻤﺎﺫﺍ؟‬
‫‪.8‬ﺻﻒِ ﺑﺎﻟﺘﻔﺼﻴﻞ ﺍﻷﺳﺒﺎﺏ ﺍﻟﺜﻼﺛﺔ ﺍﻷﻛﺜﺮ ﺃﻫﻤﻴﺔ ‪ ،‬ﺑﺮﺃﻳﻚ ‪ ،‬ﻟﻤﺎﺫﺍ ﻟﻢ ﺗﺼﺒﺢ ‪ALGOL 60‬‬
‫ﻟﻐﺔﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪.‬‬
‫‪.9‬ﻟﻤﺎﺫﺍ ‪ ،‬ﻓﻲ ﺭﺃﻳﻚ ‪ ،‬ﺳﻤﺤﺖ ‪ COBOL‬ﺑﻤﻌﺮﻓﺎﺕ ﻃﻮﻳﻠﺔ ﺑﻴﻨﻤﺎ ﻟﻢ ﺗﺴﻤﺢ ‪ Fortran‬ﻭ‬
‫‪ ALGOL‬ﺑﺬﻟﻚ؟‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪110‬‬

‫‪.10‬ﺣﺪﺩ ﺍﻟﺪﺍﻓﻊ ﺍﻟﺮﺉﻴﺴﻲ ﻟﺸﺮﻛﺔ ‪ IBM‬ﻓﻲ ﺗﻄﻮﻳﺮ ‪.PL / I‬‬


‫‪.11‬ﻫﻞ ﻛﺎﻥ ﺍﻓﺘﺮﺍﺽ ‪ ، IBM‬ﺍﻟﺬﻱ ﺍﺳﺘﻨﺪﺕ ﺇﻟﻴﻪ ﻓﻲ ﻗﺮﺍﺭﻫﺎ ﺑﺘﻄﻮﻳﺮ ‪ ، PL / I‬ﺻﺤﻴﺤﺎً ‪ ،‬ﺑﺎﻟﻨﻈﺮ‬
‫ﺇﻟﻰﺗﺎﺭﻳﺦ ﺗﻄﻮﺭﺍﺕ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﺍﻟﻠﻐﺔ ﻣﻨﺬ ﻋﺎﻡ ‪1964‬؟‬

‫‪.12‬ﺻﻒِ ‪ ،‬ﺑﻜﻠﻤﺎﺗﻚ ﺍﻟﺨﺎﺻﺔ ‪ ،‬ﻣﻔﻬﻮﻡ ﺍﻟﺘﻌﺎﻣﺪ ﻓﻲ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪.13‬ﻣﺎ ﻫﻮ ﺍﻟﺴﺒﺐ ﺍﻟﺮﺉﻴﺴﻲ ﻭﺭﺍء ﺍﺳﺘﺨﺪﺍﻡ ‪ PL / I‬ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺃﻛﺜﺮ ﻣﻦ ‪ALGOL 68‬‬
‫؟‬
‫‪.14‬ﻣﺎ ﻫﻲ ﺍﻟﺤﺠﺞ ﺍﻟﻤﺆﻳﺪﺓ ﻭﺍﻟﻤﻌﺎﺭﺿﺔ ﻟﻔﻜﺮﺓ ﺍﻟﻠﻐﺔ ﻏﻴﺮ ﺍﻟﻤﺼﻨﻌّﺔ؟‬

‫‪.15‬ﻫﻞ ﻫﻨﺎﻙ ﺃﻱ ﻟﻐﺎﺕ ﺑﺮﻣﺠﺔ ﻣﻨﻄﻘﻴﺔ ﻏﻴﺮ ‪Prolog‬؟‬


‫‪.16‬ﻣﺎ ﺭﺃﻳﻚ ﻓﻲ ﺍﻟﺤﺠﺔ ﺍﻟﻘﺎﺉﻠﺔ ﺑﺄﻥ ﺍﻟﻠﻐﺎﺕ ﺷﺪﻳﺪﺓ ﺍﻟﺘﻌﻘﻴﺪ ﻫﻲ ﺧﻄﻴﺮﺓ ﻟﻠﻐﺎﻳﺔ ﻭﻻ ﻳﻤﻜﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ‪،‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﻳﺠﺐ ﺃﻥ ﻧﺠﻌﻞ ﻛﻞ ﺍﻟﻠﻐﺎﺕ ﺻﻐﻴﺮﺓ ﻭﺑﺴﻴﻄﺔ؟‬

‫‪.17‬ﻫﻞ ﺗﻌﺘﻘﺪ ﺃﻥ ﺗﺼﻤﻴﻢ ﺍﻟﻠﺠﻨﺔ ﺍﻟﻠﻐﻮﻱ ﻓﻜﺮﺓ ﺟﻴﺪﺓ؟ ﺩﻋﻢ ﺭﺃﻳﻚ‪.‬‬

‫‪.18‬ﺍﻟﻠﻐﺎﺕ ﺗﺘﻄﻮﺭ ﺑﺎﺳﺘﻤﺮﺍﺭ‪ .‬ﻣﺎ ﻧﻮﻉ ﺍﻟﻘﻴﻮﺩ ﺍﻟﺘﻲ ﺗﻌﺘﻘﺪ ﺃﻧﻬﺎ ﻣﻨﺎﺳﺒﺔ ﻟﻠﺘﻐﻴﻴﺮﺍﺕ ﻓﻲ ﻟﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔ؟ﻗﺎﺭﻥ ﺇﺟﺎﺑﺎﺗﻚ ﺑﺘﻄﻮﺭ ‪.Fortran‬‬

‫‪.19‬ﻗﻢ ﺑﺒﻨﺎء ﺟﺪﻭﻝ ﻳﺤﺪﺩ ﺟﻤﻴﻊ ﺍﻟﺘﻄﻮﺭﺍﺕ ﺍﻟﻠﻐﻮﻳﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ ‪ ،‬ﻣﻊ ﻭﻗﺖ ﺣﺪﻭﺛﻬﺎ ‪ ،‬ﻭﺍﻟﻠﻐﺔ‬
‫ﺍﻟﺘﻲﻇﻬﺮﺕ ﺑﻬﺎ ﻷﻭﻝ ﻣﺮﺓ ‪ ،‬ﻭﻫﻮﻳﺎﺕ ﺍﻟﻤﻄﻮﺭﻳﻦ‪.‬‬

‫‪.20‬ﻛﺎﻧﺖ ﻫﻨﺎﻙ ﺑﻌﺾ ﺍﻟﺘﺒﺎﺩﻻﺕ ﺍﻟﻌﺎﻣﺔ ﺑﻴﻦ ‪ Microsoft‬ﻭ ‪ Sun‬ﻓﻴﻤﺎ ﻳﺘﻌﻠﻖ ﺑﺘﺼﻤﻴﻢ ‪J‬‬
‫‪ ++ Microsoft‬ﻭ ‪ # C‬ﻭ ‪ .Sun's Java‬ﺍﻗﺮﺃ ﺑﻌﺾ ﻫﺬﻩ ﺍﻟﻮﺛﺎﺉﻖ ‪ ،‬ﺍﻟﻤﺘﻮﻓﺮﺓ ﻋﻠﻰ‬
‫ﻣﻮﺍﻗﻊﺍﻟﻮﻳﺐ ﺍﻟﺨﺎﺻﺔ ﺑﻜﻞ ﻣﻨﻬﺎ ‪ ،‬ﻭﺍﻛﺘﺐ ﺗﺤﻠﻴﻼ ًﻟﻠﺨﻼﻓﺎﺕ ﺍﻟﻤﺘﻌﻠﻘﺔ ﺑﺎﻟﻤﻨﺪﻭﺑﻴﻦ‪.‬‬

‫‪.21‬ﻓﻲ ﺍﻟﺴﻨﻮﺍﺕ ﺍﻷﺧﻴﺮﺓ ‪ ،‬ﺗﻄﻮﺭﺕ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺩﺍﺧﻞ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻟﺘﺤﻞ ﻣﺤﻞ‬
‫ﺍﻟﻤﺼﻔﻮﻓﺎﺕﺍﻟﺘﻘﻠﻴﺪﻳﺔ‪ .‬ﺍﺷﺮﺡ ﺍﻟﺘﺴﻠﺴﻞ ﺍﻟﺰﻣﻨﻲ ﻟﻬﺬﻩ ﺍﻟﺘﻄﻮﺭﺍﺕ‪.‬‬

‫‪.22‬ﺍﺷﺮﺡ ﺳﺒﺒﻴﻦ ﻳﺠﻌﻞ ﺍﻟﺘﺮﺟﻤﺔ ﺍﻟﺸﻔﻮﻳﺔ ﺍﻟﺨﺎﻟﺼﺔ ﻃﺮﻳﻘﺔ ﺗﻨﻔﻴﺬ ﻣﻘﺒﻮﻟﺔ ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﻟﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻨﺼﻴﺔ ﺍﻟﺤﺪﻳﺜﺔ‪.‬‬
‫‪.23‬ﺑﻴﺮﻝ ‪ ، 6‬ﻋﻨﺪ ﻭﺻﻮﻟﻬﺎ ‪ ،‬ﺳﺘﻜﻮﻥ ﻋﻠﻰ ﺍﻷﺭﺟﺢ ﻟﻐﺔ ﻣﻜﺒﺮﺓ ﺑﺸﻜﻞ ﻣﻠﺤﻮﻅ‪ .‬ﻗﻢ ﺑﺘﺨﻤﻴﻦ‬
‫ﻣﺘﻌﻠﻢﺣﻮﻝ ﻣﺎ ﺇﺫﺍ ﻛﺎﻧﺖ ﻟﻐﺔ ﻣﺜﻞ ‪ Lua‬ﺳﺘﻨﻤﻮ ﺑﺎﺳﺘﻤﺮﺍﺭ ﻋﻠﻰ ﻣﺪﺍﺭ ﺣﻴﺎﺗﻬﺎ‪ .‬ﺍﺩﻋﻢ ﺇﺟﺎﺑﺘﻚ‪.‬‬

‫‪.24‬ﻟﻤﺎﺫﺍ ‪ ،‬ﺑﺮﺃﻳﻚ ‪ ،‬ﺗﻈﻬﺮ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﺍﻟﺠﺪﻳﺪﺓ ﺑﺸﻜﻞ ﻣﺘﻜﺮﺭ ﺃﻛﺜﺮ ﻣﻦ ﺍﻟﻠﻐﺎﺕ‬
‫ﺍﻟﻤﺘﺮﺟﻤﺔﺍﻟﺠﺪﻳﺪﺓ؟‬
‫‪.25‬ﺃﻋﻂ ﻭﺻﻔﺎ ﻋﺎﻣﺎ ﻣﺨﺘﺼﺮﺍ ﻟﻠﺘﺮﻣﻴﺰ ‪ /‬ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﺨﺘﻠﻄﺔ‪.‬‬
‫‪111‬‬ ‫ﺗﻤﺎﺭﻳﻦﺍﻟﺒﺮﻣﺠﺔ‬

‫ﺗﻤﺎﺭﻳﻦﺍﻟﺒﺮﻣﺠﺔ‬

‫‪.1‬ﻟﻔﻬﻢ ﻗﻴﻤﺔ ﺍﻟﺴﺠﻼﺕ ﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺠﺎً ﺻﻐﻴﺮﺍً ﺑﻠﻐﺔ ﺗﺴﺘﻨﺪ ﺇﻟﻰ ‪C‬‬
‫ﺗﺴﺘﺨﺪﻡﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻬﻴﺎﻛﻞ ﺍﻟﺘﻲ ﺗﺨﺰﻥ ﻣﻌﻠﻮﻣﺎﺕ ﺍﻟﻄﺎﻟﺐ ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﺍﻻﺳﻢ‬
‫ﻭﺍﻟﻌﻤﺮﻭﺍﻟﻤﻌﺪﻝ ﺍﻟﺘﺮﺍﻛﻤﻲ ﻛﻌﺎﻣﻞ ﺗﻌﻮﻳﻢ ﻭﻣﺴﺘﻮﻯ ﺍﻟﺼﻒ ﻛﺴﻠﺴﻠﺔ )ﻋﻠﻰ ﺳﺒﻴﻞ‬
‫ﺍﻟﻤﺜﺎﻝ ‪"،‬ﺍﻟﻤﺒﺘﺪﺉﻮﻥ" ‪ ،‬ﺇﻟﺦ‪ .(.‬ﺃﻳﻀﺎً ‪ ،‬ﺍﻛﺘﺐ ﻧﻔﺲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﻨﻔﺲ ﺍﻟﻠﻐﺔ ﺩﻭﻥ ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻟﺒﻨﻴﺎﺕ‪.‬‬
‫‪.2‬ﻟﻔﻬﻢ ﻗﻴﻤﺔ ﺍﻟﻌﻮﺩﻳﺔ ﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺠﺎً ﻳﻘﻮﻡ ﺑﺘﻨﻔﻴﺬ ﺍﻟﻔﺮﺯ ﺍﻟﺴﺮﻳﻊ ‪ ،‬ﺃﻭﻻ ً‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﺍﻟﻌﻮﺩﻳﺔ ﺛﻢ ﺑﺪﻭﻥ ﺍﻟﻌﻮﺩﻳﺔ‪.‬‬

‫‪.3‬ﻟﻔﻬﻢ ﻗﻴﻤﺔ ﺣﻠﻘﺎﺕ ﺍﻟﻌﺪ ‪ ،‬ﺍﻛﺘﺐ ﺑﺮﻧﺎﻣﺠﺎً ﻳﻨﻔﺬ ﻋﻤﻠﻴﺔ ﺿﺮﺏ ﺍﻟﻤﺼﻔﻮﻓﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺗﺮﺍﻛﻴﺐﺣﻠﻘﺔ ﺍﻟﻌﺪ‪ .‬ﺛﻢ ﺍﻛﺘﺐ ﻧﻔﺲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺤﻠﻘﺎﺕ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻓﻘﻂ ‪ -‬ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪،‬ﺑﻴﻨﻤﺎﺍﻟﺤﻠﻘﺎﺕ‪.‬‬
‫ﻫﺬﻩﺍﻟﺼﻔﺤﺔ ﺗﺮﻛﺖ ﻓﺎﺭﻏﺔ ﻋﻤﺪﺍ‬
‫‪3‬‬
‫ﻭﺻﻒﺍﻟﻨﺤﻮ‬
‫ﻭﻋﻠﻢﺍﻟﺪﻻﻟﺔ‬

‫‪3.1‬ﻣﻘﺪﻣﺔ‬
‫‪3.2‬ﺍﻟﻤﺸﻜﻠﺔ ﺍﻟﻌﺎﻣﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‬
‫‪3.3‬ﺍﻟﻄﺮﻕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‬
‫‪3.4‬ﺍﻟﺴﻤﺔ ﺍﻟﻨﺤﻮﻳﺔ‬
‫‪3.5‬ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ :‬ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‬

‫‪113‬‬
‫ﺗﻲ‬
‫ﻭﺻﻒﺍﻟﻨﺤﻮ ﻭﺍﻟﻤﻌﺎﻧﻲ‬ ‫ﺍﻟﻔﺼﻞ‪3‬‬ ‫‪114‬‬

‫ﻳﻐﻄﻲﻓﺼﻠﻪ ﺍﻟﻤﻮﺿﻮﻋﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ‪ .‬ﺃﻭﻻ ‪ ،‬ﺍﻟﺸﺮﻭﻁﺑﻨﺎء ﺍﻟﺠﻤﻠﺔﻭﺩﻻﻻﺕﻳﺘﻢ ﺗﻌﺮﻳﻔﻬﺎ‪ .‬ﺑﻌﺪ‬


‫ﺫﻟﻚ ‪،‬ﻳﺘﻢ ﺗﻘﺪﻳﻢ ﻣﻨﺎﻗﺸﺔ ﻣﻔﺼﻠﺔ ﻟﻠﻄﺮﻳﻘﺔ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ ‪ ،‬ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ‬
‫ﺍﻟﺨﺎﻟﻴﺔﻣﻦ ﺍﻟﺴﻴﺎﻕ )ﺍﻟﻤﻌﺮﻭﻓﺔ ﺃﻳﻀﺎً ﺑﺎﺳﻢ ‪ .(Backus-Naur Form‬ﺗﺘﻀﻤﻦ ﻫﺬﻩ‬
‫ﺍﻟﻤﻨﺎﻗﺸﺔﺍﻟﻤﺸﺘﻘﺎﺕ ‪ ،‬ﻭﺃﺷﺠﺎﺭ ﺍﻟﺘﺤﻠﻴﻞ ‪ ،‬ﻭﺍﻟﻐﻤﻮﺽ ‪ ،‬ﻭﺃﻭﺻﺎﻑ ﺃﺳﺒﻘﻴﺔ ﺍﻟﻤﺸﻐﻞ ﻭﺍﻟﺘﺮﺍﺑﻂ ‪،‬‬
‫ﻭﻧﻤﻮﺫﺝ‪ Backus-Naur‬ﺍﻟﻤﻤﺘﺪ‪ .‬ﺗﺘﻢ ﻣﻨﺎﻗﺸﺔ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺎﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ‬
‫ﻟﻮﺻﻒﻛﻞ ﻣﻦ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻭﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﺑﻌﺪ ﺫﻟﻚ‪ .‬ﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻷﺧﻴﺮ ‪ ،‬ﺗﻢ‬
‫ﺗﻘﺪﻳﻢﺛﻼﺙ ﻃﺮﻕ ﺭﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﺪﻻﻻﺕ ‪ -‬ﺍﻟﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ ‪ ،‬ﻭﺍﻟﺒﺪﻳﻬﻴﺔ ‪ ،‬ﻭﺍﻟﺪﻻﺉﻴﺔ‪ .‬ﺑﺴﺒﺐ‬
‫ﺍﻟﺘﻌﻘﻴﺪﺍﻟﻤﺘﺄﺻﻞ ﻓﻲ ﻃﺮﻕ ﻭﺻﻒ ﺍﻟﺪﻻﻻﺕ ‪ ،‬ﻓﺈﻥ ﻣﻨﺎﻗﺸﺘﻨﺎ ﻟﻬﺎ ﻣﺨﺘﺼﺮﺓ‪ .‬ﻳﻤﻜﻦ ﻟﻠﻤﺮء ﺑﺴﻬﻮﻟﺔ‬
‫ﻛﺘﺎﺑﺔﻛﺘﺎﺏ ﻛﺎﻣﻞ ﻋﻦ ﻭﺍﺣﺪ ﻓﻘﻂ ﻣﻦ ﺍﻟﺜﻼﺛﺔ )ﻛﻤﺎ ﻓﻌﻞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺆﻟﻔﻴﻦ(‪.‬‬

‫‪3.1‬ﻣﻘﺪﻣﺔ‬
‫ﺗﻌﺘﺒﺮﻣﻬﻤﺔ ﺗﻘﺪﻳﻢ ﻭﺻﻒ ﻣﻮﺟﺰ ﻭﻣﻔﻬﻮﻡ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺃﻣﺮﺍً ﺻﻌﺒﺎً ﻭﻟﻜﻨﻪ ﺿﺮﻭﺭﻱ ﻟﻨﺠﺎﺡ ﺍﻟﻠﻐﺔ‪.‬‬
‫ﺗﻢﺗﻘﺪﻳﻢ ‪ ALGOL 60‬ﻭ ‪ ALGOL 68‬ﻷﻭﻝ ﻣﺮﺓ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺃﻭﺻﺎﻑ ﺭﺳﻤﻴﺔ ﻣﻮﺟﺰﺓ ؛ ﻓﻲ ﻛﻠﺘﺎ‬
‫ﺍﻟﺤﺎﻟﺘﻴﻦ ‪،‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻟﻢ ﻳﻜﻦ ﻣﻦ ﺍﻟﺴﻬﻞ ﻓﻬﻢ ﺍﻷﻭﺻﺎﻑ ‪ ،‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺟﺰﺉﻴﺎً ﺇﻟﻰ ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﻛﻞﻣﻨﻬﻤﺎ ﺗﺮﻣﻴﺰﺍً ﺟﺪﻳﺪﺍً‪ .‬ﻧﺘﻴﺠﺔ ﻟﺬﻟﻚ ‪ ،‬ﻋﺎﻧﺖ ﻣﺴﺘﻮﻳﺎﺕ ﻗﺒﻮﻝ ﺍﻟﻠﻐﺘﻴﻦ‪ .‬ﻣﻦ ﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ‪،‬‬
‫ﻋﺎﻧﺖﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﻣﻦ ﻣﺸﻜﻠﺔ ﻭﺟﻮﺩ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻬﺠﺎﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻗﻠﻴﻼ ً‪ ،‬ﻧﺘﻴﺠﺔ ﻟﺘﻌﺮﻳﻒ‬
‫ﺑﺴﻴﻂﻭﻟﻜﻨﻪ ﻏﻴﺮ ﺭﺳﻤﻲ ﻭﻏﻴﺮ ﺩﻗﻴﻖ‪.‬‬

‫ﻭﺍﺣﺪﺓﻣﻦ ﺍﻟﻤﺸﺎﻛﻞ ﻓﻲ ﻭﺻﻒ ﺍﻟﻠﻐﺔ ﻫﻮ ﺗﻨﻮﻉ ﺍﻟﻨﺎﺱ ﺍﻟﺬﻳﻦ ﻳﺠﺐ ﺃﻥ ﻳﻔﻬﻤﻮﺍ ﺍﻟﻮﺻﻒ‪.‬‬
‫ﻭﻣﻦﺑﻴﻦ ﻫﺆﻻء ﺍﻟﻤﻘﻴﻤِّﻮﻥ ﺍﻷﻭﻟﻴﻮﻥ ﻭﺍﻟﻤﻨﻔﺬﻭﻥ ﻭﺍﻟﻤﺴﺘﺨﺪﻣﻮﻥ‪ .‬ﺗﺨﻀﻊ ﻣﻌﻈﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻟﺠﺪﻳﺪﺓﻟﻔﺘﺮﺓ ﻣﻦ ﺍﻟﺘﺪﻗﻴﻖ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺍﻟﻤﺤﺘﻤﻠﻴﻦ ‪ ،‬ﻏﺎﻟﺒﺎً ﺍﻷﺷﺨﺎﺹ ﺩﺍﺧﻞ‬
‫ﺍﻟﻤﻨﻈﻤﺔﺍﻟﺘﻲ ﺗﻮﻇﻒ ﻣﺼﻤﻢ ﺍﻟﻠﻐﺔ ‪ ،‬ﻗﺒﻞ ﺍﻛﺘﻤﺎﻝ ﺗﺼﻤﻴﻤﺎﺗﻬﺎ‪ .‬ﻫﺆﻻء ﻫﻢ ﺍﻟﻤﻘﻴﻤﻮﻥ ﺍﻷﻭﻟﻴﻮﻥ‪.‬‬
‫ﻳﻌﺘﻤﺪﻧﺠﺎﺡ ﺩﻭﺭﺓ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺑﺸﻜﻞ ﻛﺒﻴﺮ ﻋﻠﻰ ﻭﺿﻮﺡ ﺍﻟﻮﺻﻒ‪.‬‬

‫ﻣﻦﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻣﻨﻔﺬﻱ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻧﻮﺍ ﻗﺎﺩﺭﻳﻦ ﻋﻠﻰ ﺗﺤﺪﻳﺪ ﻛﻴﻔﻴﺔ ﺗﻜﻮﻳﻦ‬
‫ﺍﻟﺘﻌﺒﻴﺮﺍﺕﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻭﺣﺪﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻟﻠﻐﺔ ‪ ،‬ﻭﻛﺬﻟﻚ ﺗﺄﺛﻴﺮﻫﺎ ﺍﻟﻤﻘﺼﻮﺩ ﻋﻨﺪ ﺗﻨﻔﻴﺬﻫﺎ‪ .‬ﺗﺘﺤﺪﺩ‬
‫ﺻﻌﻮﺑﺔﻋﻤﻞ ﺍﻟﻤﻨﻔﺬﻳﻦ ‪ ،‬ﺟﺰﺉﻴﺎً ‪ ،‬ﻣﻦ ﺧﻼﻝ ﺍﻛﺘﻤﺎﻝ ﻭﺩﻗﺔ ﻭﺻﻒ ﺍﻟﻠﻐﺔ‪.‬‬

‫ﺃﺧﻴﺮﺍً ‪،‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻣﺴﺘﺨﺪﻣﻮ ﺍﻟﻠﻐﺔ ﻗﺎﺩﺭﻳﻦ ﻋﻠﻰ ﺗﺤﺪﻳﺪ ﻛﻴﻔﻴﺔ ﺗﺸﻔﻴﺮ ﺣﻠﻮﻝ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﻣﻦﺧﻼﻝ ﺍﻟﺮﺟﻮﻉ ﺇﻟﻰ ﺩﻟﻴﻞ ﻣﺮﺟﻌﻲ ﻟﻠﻐﺔ‪ .‬ﺗﺪﺧﻞ ﺍﻟﻜﺘﺐ ﺍﻟﻤﺪﺭﺳﻴﺔ ﻭﺍﻟﺪﻭﺭﺍﺕ ﻓﻲ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔ ‪،‬‬
‫ﻟﻜﻦﻛﺘﻴﺒﺎﺕ ﺍﻟﻠﻐﺔ ﻋﺎﺩﺓ ﻣﺎ ﺗﻜﻮﻥ ﺍﻟﻤﺼﺪﺭ ﺍﻟﻮﺣﻴﺪ ﺍﻟﻤﻮﺛﻮﻕ ﻟﻠﻤﻌﻠﻮﻣﺎﺕ ﺍﻟﻤﻄﺒﻮﻋﺔ ﺣﻮﻝ ﺍﻟﻠﻐﺔ‪.‬‬

‫ﻳﻤﻜﻦﺗﻘﺴﻴﻢ ﺩﺭﺍﺳﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻣﺜﻞ ﺩﺭﺍﺳﺔ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻄﺒﻴﻌﻴﺔ ‪ ،‬ﺇﻟﻰ ﺍﻣﺘﺤﺎﻧﺎﺕ‬
‫ﻟﻐﻮﻳﺔﻭﺩﻻﻻﺕ‪ .‬ﺍﻝﺑﻨﺎء ﺍﻟﺠﻤﻠﺔﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﺷﻜﻞ ﺗﻌﺒﻴﺮﺍﺗﻬﺎ ﻭﺑﻴﺎﻧﺎﺗﻬﺎ ﻭﻭﺣﺪﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﺇﻧﻪ‬
‫ﺩﻻﻻﺕﻫﻮ ﻣﻌﻨﻰ ﺗﻠﻚ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻭﺣﺪﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺑﻨﺎء ﺟﻤﻠﺔ‬
‫‪Java‬ﺑﻴﻨﻤﺎﺍﻟﺒﻴﺎﻥ ﻫﻮ‬

‫ﺑﻴﻨﻤﺎ)(‪boolean_expr‬‬
‫‪115‬‬ ‫‪3.2‬ﺍﻟﻤﺸﻜﻠﺔ ﺍﻟﻌﺎﻣﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‬

‫ﺩﻻﻻﺕﻧﻤﻮﺫﺝ ﺍﻟﺒﻴﺎﻥ ﻫﺬﺍ ﻫﻲ ﺃﻧﻪ ﻋﻨﺪﻣﺎ ﺗﻜﻮﻥ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺤﺎﻟﻴﺔ ﻟﻠﺘﻌﺒﻴﺮ ﺍﻟﻤﻨﻄﻘﻲ ﺻﺤﻴﺤﺔ ‪ ،‬ﻳﺘﻢ‬
‫ﺗﻨﻔﻴﺬﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﻤﻀﻤﻨﺔ‪ .‬ﺧﻼﻑ ﺫﻟﻚ ‪ ،‬ﻳﺴﺘﻤﺮ ﺍﻟﺘﺤﻜﻢ ﺑﻌﺪﺑﻴﻨﻤﺎﺑﻨﺎء‪ .‬ﺛﻢ ﻳﻌﻮﺩ ﻋﻨﺼﺮ ﺍﻟﺘﺤﻜﻢ‬
‫ﺿﻤﻨﻴﺎًﺇﻟﻰ ﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﻤﻨﻄﻘﻲ ﻟﺘﻜﺮﺍﺭ ﺍﻟﻌﻤﻠﻴﺔ‪.‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﻤﺎ ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻢ ﻓﺼﻠﻬﻤﺎ ﻷﻏﺮﺍﺽ ﺍﻟﻤﻨﺎﻗﺸﺔ ‪ ،‬ﺇﻻ ﺃﻥ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ‬
‫ﻭﺍﻟﺪﻻﻻﺕﻳﺮﺗﺒﻄﺎﻥ ﺍﺭﺗﺒﺎﻃﺎً ﻭﺛﻴﻘﺎً‪ .‬ﻓﻲ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺟﻴﺪﺓ ﺍﻟﺘﺼﻤﻴﻢ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﺗﺘﺒﻊ ﺍﻟﺪﻻﻻﺕ‬
‫ﻣﺒﺎﺷﺮﺓﻣﻦ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ؛ ﺃﻱ ﺃﻥ ﻇﻬﻮﺭ ﺍﻟﺒﻴﺎﻥ ﻳﺠﺐ ﺃﻥ ﻳﻮﺣﻲ ﺑﻘﻮﺓ ﺑﻤﺎ ﻳﻘُﺼﺪ ﺑﺎﻟﺒﻴﺎﻥ ﺗﺤﻘﻴﻘﻪ‪.‬‬

‫ﺇﻥﻭﺻﻒ ﺍﻟﻨﺤﻮ ﺃﺳﻬﻞ ﻣﻦ ﻭﺻﻒ ﺍﻟﺪﻻﻻﺕ ‪ ،‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺟﺰﺉﻴﺎً ﺇﻟﻰ ﺗﻮﻓﺮ ﺗﺪﻭﻳﻦ ﻣﻮﺟﺰ‬
‫ﻭﻣﻘﺒﻮﻝﻋﺎﻟﻤﻴﺎً ﻟﻮﺻﻒ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ‪ ،‬ﻭﻟﻜﻦ ﻟﻢ ﻳﺘﻢ ﺗﻄﻮﻳﺮ ﺃﻱ ﻣﻨﻬﺎ ﺣﺘﻰ ﺍﻵﻥ ﻟﻠﺪﻻﻻﺕ‪.‬‬

‫‪3.2‬ﺍﻟﻤﺸﻜﻠﺔ ﺍﻟﻌﺎﻣﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‬


‫ﺍﻟﻠﻐﺔ ‪،‬ﺳﻮﺍء ﻛﺎﻧﺖ ﻃﺒﻴﻌﻴﺔ )ﻣﺜﻞ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ( ﺃﻭ ﻣﺼﻄﻨﻌﺔ )ﻣﺜﻞ ‪ ، (Java‬ﻫﻲ ﻣﺠﻤﻮﻋﺔ ﻣﻦ‬
‫ﺳﻼﺳﻞﺍﻷﺣﺮﻑ ﻣﻦ ﺑﻌﺾ ﺍﻷﺑﺠﺪﻳﺔ‪ .‬ﺗﺴﻤﻰ ﺃﻭﺗﺎﺭ ﺍﻟﻠﻐﺔ ﺟﻤﻞﺃﻭ ﺍﻟﺒﻴﺎﻧﺎﺕ‪ .‬ﺗﺤﺪﺩ ﻗﻮﺍﻋﺪ ﺑﻨﺎء‬
‫ﺍﻟﺠﻤﻠﺔﻟﻠﻐﺔ ﺳﻼﺳﻞ ﺍﻷﺣﺮﻑ ﻣﻦ ﺃﺑﺠﺪﻳﺔ ﺍﻟﻠﻐﺔ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺍﻟﻠﻐﺔ‪ .‬ﺍﻟﻠﻐﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ‪ ،‬ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻟﺪﻳﻬﺎ ﻣﺠﻤﻮﻋﺔ ﻛﺒﻴﺮﺓ ﻭﻣﻌﻘﺪﺓ ﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ ﻟﺘﺤﺪﻳﺪ ﺑﻨﺎء ﺟﻤﻠﺔ ﺍﻟﺠﻤﻞ ﺍﻟﺨﺎﺻﺔ‬
‫ﺑﻬﺎ‪.‬ﺑﺎﻟﻤﻘﺎﺭﻧﺔ ‪ ،‬ﺣﺘﻰ ﺃﻛﺒﺮ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻭﺃﻛﺜﺮﻫﺎ ﺗﻌﻘﻴﺪﺍً ﻫﻲ ﺑﺴﻴﻄﺔ ﺟﺪﺍً ﻣﻦ ﺍﻟﻨﺎﺣﻴﺔ ﺍﻟﺘﺮﻛﻴﺒﻴﺔ‪.‬‬

‫ﻏﺎﻟﺒﺎًﻣﺎ ﻻ ﺗﺘﻀﻤﻦ ﺍﻷﻭﺻﺎﻑ ﺍﻟﺮﺳﻤﻴﺔ ﻟﺒﻨﺎء ﺟﻤﻠﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻣﻦ ﺃﺟﻞ ﺍﻟﺒﺴﺎﻃﺔ ‪،‬‬
‫ﺃﻭﺻﺎﻓﺎًﻟﻠﻮﺣﺪﺍﺕ ﺍﻟﻨﺤﻮﻳﺔ ﺫﺍﺕ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻷﺩﻧﻰ‪ .‬ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﺼﻐﻴﺮﺓ‪.lexemes‬‬
‫ﻳﻤﻜﻦﺇﻋﻄﺎء ﻭﺻﻒ ﺍﻟﻤﻔﺮﺩﺍﺕ ﺑﻮﺍﺳﻄﺔ ﻣﻮﺍﺻﻔﺔ ﻣﻌﺠﻤﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻋﺎﺩﺓ ًﻣﻨﻔﺼﻠﺔ ﻋﻦ‬
‫ﺍﻟﻮﺻﻒﺍﻟﻨﺤﻮﻱ ﻟﻠﻐﺔ‪ .‬ﺗﺸﺘﻤﻞ ﻣﻌﺠﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻋﻠﻰ ﺍﻟﺤﺮﻭﻑ ﺍﻟﺮﻗﻤﻴﺔ ﻭﺍﻟﻤﻌﺎﻣﻼﺕ‬
‫ﻭﺍﻟﻜﻠﻤﺎﺕﺍﻟﺨﺎﺻﺔ ‪ ،‬ﻣﻦ ﺑﻴﻦ ﺃﻣﻮﺭ ﺃﺧﺮﻯ‪ .‬ﻳﻤﻜﻦ ﻟﻠﻤﺮء ﺃﻥ ﻳﻔﻜﺮ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ﻋﻠﻰ ﺃﻧﻬﺎ ﺳﻼﺳﻞ‬
‫ﻣﻦﺍﻟﻤﻌﺎﺟﻢ ﻭﻟﻴﺲ ﻛﺸﺨﺼﻴﺎﺕ‪.‬‬

‫ﻳﺘﻢﺗﻘﺴﻴﻢ ‪ Lexemes‬ﺇﻟﻰ ﻣﺠﻤﻮﻋﺎﺕ ‪ -‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺗﺸﻜﻞ ﺃﺳﻤﺎء ﺍﻟﻤﺘﻐﻴﺮﺍﺕ‬


‫ﻭﺍﻟﻄﺮﻕﻭﺍﻟﻔﺉﺎﺕ ﻭﻣﺎ ﺇﻟﻰ ﺫﻟﻚ ﻓﻲ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﺠﻤﻮﻋﺔ ﺗﺴﻤﻰ ﻣﻌﺮﻓﺎﺕ‪.‬ﻳﺘﻢ ﺗﻤﺜﻴﻞ ﻛﻞ‬
‫ﻣﺠﻤﻮﻋﺔ‪ lexeme‬ﺑﻮﺍﺳﻄﺔ ﺍﺳﻢ ﺃﻭ ﺭﻣﺰ ﻣﻤﻴﺰ‪ .‬ﻟﺬﺍ ‪ ،‬ﺃﺭﻣﺰ ﺍﻟﻠﻐﺔ ﻫﻲ ﻓﺉﺔ ﻣﻦ ﻣﻌﺎﺟﻤﻬﺎ‪ .‬ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺍﻟﻤﻌﺮﻑ ﻫﻮ ﺭﻣﺰ ﻳﻤﻜﻦ ﺃﻥ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﻣﻌﺎﺟﻢ ﺃﻭ ﻣﺜﻴﻼﺕ ﻣﺜﻞﻣﺠﻤﻮﻉﻭﺍﻟﻤﺠﻤﻮﻉ‪.‬‬
‫ﻓﻲﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻳﺤﺘﻮﻱ ﺍﻟﺮﻣﺰ ﺍﻟﻤﻤﻴﺰ ﻋﻠﻰ ﻣﻌﺠﻢ ﻭﺍﺣﺪ ﻓﻘﻂ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺤﺘﻮﻱ‬
‫ﺍﻟﺮﻣﺰﺍﻟﻤﻤﻴﺰ ﺍﻟﺨﺎﺹ ﺑﺮﻣﺰ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺤﺴﺎﺑﻴﺔ ‪ +‬ﻋﻠﻰ ‪ lexeme‬ﻭﺍﺣﺪ ﻓﻘﻂ‪ .‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ‬
‫ﺑﻴﺎﻥ‪ Java‬ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫ﺍﻟﻔﻬﺮﺱ= ‪ * 2‬ﻋﺪﺩ ‪ 17 +‬؛‬

‫ﺍﻟﻤﻌﺠﻢﻭﺍﻟﺮﻣﻮﺯ ﺍﻟﻤﻤﻴﺰﺓ ﻟﻬﺬﺍ ﺍﻟﺒﻴﺎﻥ ﻫﻲ‬


‫ﺍﻟﺮﻣﻮﺯ‬ ‫ﻟﻴﻜﺴﻤﻴﺲ‬
‫ﺍﻟﻤﻌﺮﻑ‬ ‫ﻓﻬِﺮﺱِ‬
‫ﻋﻼﻣﺔﻳﺴﺎﻭﻱ‬ ‫=‬
‫‪int_literal‬‬ ‫‪2‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪116‬‬

‫‪mult_op‬‬ ‫*‬
‫ﺍﻟﻤﻌﺮﻑ‬ ‫ﻋﺪﺩ‬
‫‪plus_op‬‬ ‫‪+‬‬
‫‪int_literal‬‬ ‫‪17‬‬
‫ﻓﺎﺻﻠﺔﻣﻨﻘﻮﻃﺔ‬ ‫؛‬

‫ﺇﻥﺗﻮﺻﻴﻔﺎﺕ ﺍﻟﻠﻐﺔ ﺍﻟﻨﻤﻮﺫﺟﻴﺔ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﺑﺴﻴﻄﺔ ﻟﻠﻐﺎﻳﺔ ‪ ،‬ﻭﺗﺸﻤﻞ ﻣﻌﻈﻤﻬﺎ ﺃﻭﺻﺎﻓﺎً‬
‫ﻟﻜﺴﻴﻢ‪.‬‬

‫‪3.2.1‬ﺃﺩﻭﺍﺕ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻟﻠﻐﺔ‬


‫ﺑﺸﻜﻞﻋﺎﻡ ‪ ،‬ﻳﻤﻜﻦ ﺗﻌﺮﻳﻒ ﺍﻟﻠﻐﺎﺕ ﺭﺳﻤﻴﺎً ﺑﻄﺮﻳﻘﺘﻴﻦ ﻣﺨﺘﻠﻔﺘﻴﻦ‪ :‬ﺑﻮﺍﺳﻄﺔﺗﻌﺮﻑُّ ﻭﺑﻮﺍﺳﻄﺔﺟﻴﻞ)‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺃﻳﺎ ﻣﻨﻬﻤﺎ ﻻ ﻳﻮﻓﺮ ﺗﻌﺮﻳﻔﺎً ﻋﻤﻠﻴﺎً ﻓﻲ ﺣﺪ ﺫﺍﺗﻪ ﻟﻸﺷﺨﺎﺹ ﺍﻟﺬﻳﻦ ﻳﺤﺎﻭﻟﻮﻥ ﺗﻌﻠﻢ‬
‫ﻟﻐﺔﺑﺮﻣﺠﺔ ﺃﻭ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ(‪ .‬ﻟﻨﻔﺘﺮﺽ ﺃﻥ ﻟﺪﻳﻨﺎ ﻟﻐﺔ ‪ L‬ﺗﺴﺘﺨﺪﻡ ﺃﺑﺠﺪﻳﺔ ‪ -‬ﻣﻦ ﺍﻷﺣﺮﻑ‪ .‬ﻟﺘﻌﺮﻳﻒ ‪L‬‬
‫ﺭﺳﻤﻴﺎًﺑﺎﺳﺘﺨﺪﺍﻡ ﻃﺮﻳﻘﺔ ﺍﻟﺘﻌﺮﻑ ‪ ،‬ﺳﻨﺤﺘﺎﺝ ﺇﻟﻰ ﺇﻧﺸﺎء ﺁﻟﻴﺔ ‪ ، R‬ﺗﺴﻤﻰ ﺟﻬﺎﺯ ﺍﻟﺘﻌﺮﻑ ‪ ،‬ﻗﺎﺩﺭﺓ‬
‫ﻋﻠﻰﻗﺮﺍءﺓ ﺳﻼﺳﻞ ﺍﻷﺣﺮﻑ ﻣﻦ ﺍﻷﺑﺠﺪﻳﺔ ‪ .-‬ﺗﺸﻴﺮ ‪ R‬ﺇﻟﻰ ﻣﺎ ﺇﺫﺍ ﻛﺎﻧﺖ ﺳﻠﺴﻠﺔ ﺇﺩﺧﺎﻝ ﻣﻌﻴﻨﺔ ﻓﻲ‬
‫‪ .L‬ﺃﻡ ﻻ ‪ ،‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺇﻣﺎ ﺃﻥ ﺗﻘﺒﻞ ‪ R‬ﺃﻭ ﺗﺮﻓﺾ ﺍﻟﺴﻠﺴﻠﺔ ﺍﻟﻤﺤﺪﺩﺓ‪ .‬ﻣﺜﻞ ﻫﺬﻩ ﺍﻷﺟﻬﺰﺓ ﻣﺜﻞ‬
‫ﺍﻟﻤﺮﺷﺤﺎﺕ ‪،‬ﻭﺗﻔﺼﻞ ﺍﻟﺠﻤﻞ ﺍﻟﻘﺎﻧﻮﻧﻴﺔ ﻋﻦ ﺗﻠﻚ ﺍﻟﺘﻲ ﺗﻢ ﺗﺸﻜﻴﻠﻬﺎ ﺑﺸﻜﻞ ﻏﻴﺮ ﺻﺤﻴﺢ‪ .‬ﺇﺫﺍ ﻛﺎﻧﺖ‬
‫‪ ، R‬ﻋﻨﺪ ﺇﺩﺧﺎﻝ ﺃﻱ ﺳﻠﺴﻠﺔ ﻣﻦ ﺍﻷﺣﺮﻑ ﺃﻛﺜﺮ ﻣﻦ ‪ ، -‬ﻻ ﺗﻘﺒﻠﻬﺎ ﺇﻻ ﺇﺫﺍ ﻛﺎﻧﺖ ﻓﻲ ‪ ، L‬ﻓﺈﻥ ‪ R‬ﻫﻲ‬
‫ﻭﺻﻒﻟـ ‪ .L‬ﻷﻥ ﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻔﻴﺪﺓ ‪ ،‬ﻟﺠﻤﻴﻊ ﺍﻷﻏﺮﺍﺽ ﺍﻟﻌﻤﻠﻴﺔ ‪ ،‬ﻏﻴﺮ ﻣﺤﺪﻭﺩﺓ ‪ ،‬ﻗﺪ ﻳﺒﺪﻭ‬
‫ﻫﺬﺍﻃﻮﻳﻼ ًﻭﻏﻴﺮ ﻓﻌﺎﻝ ﻋﻤﻠﻴﺔ‪.‬‬

‫ﺟﺰءﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻣﻦ ﺍﻟﻤﺘﺮﺟﻢ ﻫﻮ ﺃﺩﺍﺓ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﺘﺮﺟﻤﻬﺎ ﺍﻟﻤﺘﺮﺟﻢ‪.‬‬
‫ﻓﻲﻫﺬﺍ ﺍﻟﺪﻭﺭ ‪ ،‬ﻻ ﺗﺤﺘﺎﺝ ﺃﺩﺍﺓ ﺍﻟﺘﻌﺮﻑّ ﺇﻟﻰ ﺍﺧﺘﺒﺎﺭ ﺟﻤﻴﻊ ﺍﻟﺴﻼﺳﻞ ﺍﻟﻤﻤﻜﻨﺔ ﻟﻸﺣﺮﻑ ﻣﻦ‬
‫ﻣﺠﻤﻮﻋﺔﻣﺎ ﻟﺘﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ ﻛﺎﻧﺖ ﻛﻞ ﻣﻨﻬﺎ ﺑﺎﻟﻠﻐﺔ‪ .‬ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﻻ ﻳﺤﺘﺎﺝ ﺍﻷﻣﺮ ﺇﻻ ﺇﻟﻰ ﺗﺤﺪﻳﺪ‬
‫ﻣﺎﺇﺫﺍ ﻛﺎﻧﺖ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻘﺪﻣﺔ ﺑﺎﻟﻠﻐﺔ ﺃﻡ ﻻ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻳﻘﻮﻡ ﻣﺤﻠﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺑﺘﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ‬
‫ﻛﺎﻧﺖﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻌﻴﻨﺔ ﺻﺤﻴﺤﺔ ﻣﻦ ﺍﻟﻨﺎﺣﻴﺔ ﺍﻟﻨﺤﻮﻳﺔ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺑﻨﻴﺔ ﻣﺤﻠﻼﺕ ﺍﻟﻨﺤﻮ ‪،‬‬
‫ﻭﺍﻟﻤﻌﺮﻭﻓﺔﺃﻳﻀﺎً ﺑﺎﺳﻢ ﺍﻟﻤﺤﻠﻞ ﺍﻟﻠﻐﻮﻱ ‪ ،‬ﻓﻲ ﺍﻟﻔﺼﻞ ‪.4‬‬

‫‪3.2.2‬ﻣﻮﻟﺪﺍﺕ ﺍﻟﻠﻐﺔ‬
‫ﻣﻮﻟﺪﺍﻟﻠﻐﺔ ﻫﻮ ﺟﻬﺎﺯ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻟﺘﻮﻟﻴﺪ ﺟﻤﻞ ﺍﻟﻠﻐﺔ‪ .‬ﻳﻤﻜﻨﻨﺎ ﺃﻥ ﻧﻔﻜﺮ ﻓﻲ ﺍﻟﻤﻮﻟﺪ ﻋﻠﻰ ﺃﻧﻪ‬
‫ﻳﺤﺘﻮﻱﻋﻠﻰ ﺯﺭ ﻳﻨﺘﺞ ﺟﻤﻠﺔ ﻣﻦ ﺍﻟﻠﻐﺔ ﻓﻲ ﻛﻞ ﻣﺮﺓ ﻳﺘﻢ ﺍﻟﻀﻐﻂ ﻋﻠﻴﻬﺎ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﺠﻤﻠﺔ ﺍﻟﻤﺤﺪﺩﺓ‬
‫ﺍﻟﺘﻲﻳﻨﺘﺠﻬﺎ ﺍﻟﻤﻮﻟﺪ ﻋﻨﺪ ﺍﻟﻀﻐﻂ ﻋﻠﻰ ﺯﺭﻩ ﻻ ﻳﻤﻜﻦ ﺍﻟﺘﻨﺒﺆ ﺑﻬﺎ ‪ ،‬ﻳﺒﺪﻭ ﺃﻥ ﺍﻟﻤﻮﻟﺪ ﺟﻬﺎﺯ ﺫﻭ ﻓﺎﺉﺪﺓ‬
‫ﻣﺤﺪﻭﺩﺓﻛﻮﺍﺻﻒ ﻟﻐﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻳﻔﻀﻞ ﺍﻟﻨﺎﺱ ﺃﺷﻜﺎﻻً ﻣﻌﻴﻨﺔ ﻣﻦ ﺍﻟﻤﻮﻟﺪﺍﺕ ﻋﻠﻰ ﺃﺩﻭﺍﺕ‬
‫ﺍﻟﺘﻌﺮﻑﻷﻧﻬﺎ ﺗﺴﺘﻄﻴﻊ ﻗﺮﺍءﺗﻬﺎ ﻭﻓﻬﻤﻬﺎ ﺑﺴﻬﻮﻟﺔ ﺃﻛﺒﺮ‪ .‬ﻋﻠﻰ ﺍﻟﻨﻘﻴﺾ ﻣﻦ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﺟﺰء ﺍﻟﺘﺤﻘﻖ‬
‫ﻣﻦﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻣﻦ ﺍﻟﻤﺘﺮﺟﻢ )ﺃﺩﺍﺓ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻟﻠﻐﺔ( ﻟﻴﺲ ﻣﻔﻴﺪﺍً ﻟﻮﺻﻒ ﺍﻟﻠﻐﺔ ﻟﻠﻤﺒﺮﻣﺞ ﻷﻧﻪ‬
‫ﻻﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻪ ﺇﻻ ﻓﻲ ﻭﺿﻊ ﺍﻟﺘﺠﺮﺑﺔ ﻭﺍﻟﺨﻄﺄ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻟﺘﺤﺪﻳﺪ ﺍﻟﺼﻴﻐﺔ‬
‫ﺍﻟﺼﺤﻴﺤﺔﻟﻌﺒﺎﺭﺓ ﻣﻌﻴﻨﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﺘﺮﺟﻢ ‪،‬‬
‫‪117‬‬ ‫‪3.3‬ﺍﻟﻄﺮﻕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‬

‫ﻳﻘﺒﻠﻬﺎﺍﻟﻤﺘﺮﺟﻢ‪ .‬ﻣﻦ ﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ‪ ،‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺗﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﺑﻨﺎء ﺟﻤﻠﺔ ﺑﻴﺎﻥ‬
‫ﻣﻌﻴﻦﺻﺤﻴﺤﺎً ﻋﻦ ﻃﺮﻳﻖ ﻣﻘﺎﺭﻧﺘﻪ ﺑﻬﻴﻜﻞ ﺍﻟﻤﻮﻟﺪ‪.‬‬

‫ﻫﻨﺎﻙﺍﺭﺗﺒﺎﻁ ﻭﺛﻴﻖ ﺑﻴﻦ ﺃﺟﻬﺰﺓ ﺍﻹﻧﺸﺎء ﻭﺍﻟﺘﻌﺮﻑ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻠﻐﺔ ﻧﻔﺴﻬﺎ‪ .‬ﻛﺎﻥ ﻫﺬﺍ ﺃﺣﺪ‬
‫ﺍﻻﻛﺘﺸﺎﻓﺎﺕﺍﻷﺳﺎﺳﻴﺔ ﻓﻲ ﻋﻠﻮﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪ ،‬ﻭﺃﺩﻯ ﺇﻟﻰ ﺍﻟﻜﺜﻴﺮ ﻣﻤﺎ ﻫﻮ ﻣﻌﺮﻭﻑ ﺍﻵﻥ ﻋﻦ ﺍﻟﻠﻐﺎﺕ‬
‫ﺍﻟﺮﺳﻤﻴﺔﻭﻧﻈﺮﻳﺔ ﺗﺼﻤﻴﻢ ﺍﻟﻤﺘﺮﺟﻢ‪ .‬ﻧﻌﻮﺩ ﺇﻟﻰ ﻋﻼﻗﺔ ﺍﻟﻤﻮﻟﺪﺍﺕ ﻭﺃﺟﻬﺰﺓ ﺍﻟﺘﻌﺮﻑ ﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻟﺘﺎﻟﻲ‪.‬‬

‫‪3.3‬ﺍﻟﻄﺮﻕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‬


‫ﻳﻨﺎﻗﺶﻫﺬﺍ ﺍﻟﻘﺴﻢ ﺍﻵﻟﻴﺎﺕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﺘﻮﻟﻴﺪ ﺍﻟﻠﻐﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰ ﻋﺎﺩﺓًﺍﻟﻘﻮﺍﻋﺪ‪ ،‬ﺍﻟﺘﻲ ﺗﺴُﺘﺨﺪﻡ‬
‫ﺑﺸﻜﻞﺷﺎﺉﻊ ﻟﻮﺻﻒ ﺑﻨﺎء ﺟﻤﻠﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪3.3.1‬ﺻﻴﻐﺔ ‪ Backus-Naur‬ﻭﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﺧﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ‬


‫ﻓﻲﻣﻨﺘﺼﻒ ﻭﺃﻭﺍﺧﺮ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ‪ ،‬ﻗﺎﻡ ﺭﺟﻼﻥ ‪ ،‬ﻫﻤﺎ ﻧﻌﻮﻡ ﺗﺸﻮﻣﺴﻜﻲ‬
‫ﻭﺟﻮﻥﺑﺎﻛﻮﺱ ‪ ،‬ﻓﻲ ﺟﻬﻮﺩ ﺑﺤﺜﻴﺔ ﻏﻴﺮ ﺫﺍﺕ ﺻﻠﺔ ‪ ،‬ﺑﺘﻄﻮﻳﺮ ﻧﻔﺲ ﺻﻴﻐﺔ ﻭﺻﻒ ﺍﻟﺘﺮﻛﻴﺐ‬
‫ﺍﻟﻠﻐﻮﻱ ‪،‬ﻭﺍﻟﺘﻲ ﺃﺻﺒﺤﺖ ﻓﻴﻤﺎ ﺑﻌﺪ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ﻓﻲ ﺑﻨﺎء ﺟﻤﻠﺔ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪3.3.1.1‬ﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﺧﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ‬


‫ﻓﻲﻣﻨﺘﺼﻒ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ‪ ،‬ﻭﺻﻒ ﺗﺸﻮﻣﺴﻜﻲ ‪ ،‬ﻭﻫﻮ ﻟﻐﻮﻱ ﻣﺸﻬﻮﺭ )ﻣﻦ‬
‫ﺑﻴﻦﺃﺷﻴﺎء ﺃﺧﺮﻯ( ‪ ،‬ﺃﺭﺑﻊ ﻓﺉﺎﺕ ﻣﻦ ﺍﻷﺩﻭﺍﺕ ﺍﻟﺘﻮﻟﻴﺪﻳﺔ ﺃﻭ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺘﻲ ﺗﺤﺪﺩ ﺃﺭﺑﻊ‬
‫ﻓﺉﺎﺕﻣﻦ ﺍﻟﻠﻐﺎﺕ )ﺗﺸﻮﻣﺴﻜﻲ ‪ .(1959 ، 1956 ،‬ﺍﺛﻨﺎﻥ ﻣﻦ ﻫﺬﻩ ﺍﻟﻔﺉﺎﺕ ﺍﻟﻨﺤﻮﻳﺔ ‪ ،‬ﻣﺴﻤﻰ‬
‫ﺧﺎﻟﻲﻣﻦ ﺍﻟﺴﻴﺎﻕﻭﻋﺎﺩﻱ‪،‬ﺗﺒﻴﻦ ﺃﻧﻪ ﻣﻔﻴﺪ ﻟﻮﺻﻒ ﺑﻨﺎء ﺟﻤﻠﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻳﻤﻜﻦ ﻭﺻﻒ‬
‫ﺃﺷﻜﺎﻝﺍﻟﺮﻣﻮﺯ ﺍﻟﻤﻤﻴﺰﺓ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺑﺎﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﻌﺎﺩﻳﺔ‪ .‬ﻳﻤﻜﻦ ﻭﺻﻒ ﺑﻨﺎء ﺟﻤﻠﺔ ﻟﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺑﺎﻟﻜﺎﻣﻞ ‪ ،‬ﻣﻊ ﺍﺳﺘﺜﻨﺎءﺍﺕ ﻃﻔﻴﻔﺔ ‪ ،‬ﺑﻘﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﺧﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ‪ .‬ﻷﻥ ﺗﺸﻮﻣﺴﻜﻲ‬
‫ﻛﺎﻥﻟﻐﻮﻳﺎً ‪ ،‬ﻛﺎﻥ ﺍﻫﺘﻤﺎﻣﻪ ﺍﻷﺳﺎﺳﻲ ﻫﻮ ﺍﻟﻄﺒﻴﻌﺔ ﺍﻟﻨﻈﺮﻳﺔ ﻟﻠﻐﺎﺕ ﺍﻟﻄﺒﻴﻌﻴﺔ‪ .‬ﻟﻢ ﻳﻜﻦ ﻟﺪﻳﻪ ﺍﻫﺘﻤﺎﻡ‬
‫ﻓﻲﺫﻟﻚ ﺍﻟﻮﻗﺖ ﺑﺎﻟﻠﻐﺎﺕ ﺍﻻﺻﻄﻨﺎﻋﻴﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﻠﺘﻮﺍﺻﻞ ﻣﻊ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﻟﺬﻟﻚ ﻟﻢ ﻳﺘﻢ‬
‫ﺗﻄﺒﻴﻖﻋﻤﻠﻪ ﻋﻠﻰ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺇﻻ ﻓﻲ ﻭﻗﺖ ﻻﺣﻖ‪.‬‬

‫‪3.3.1.2‬ﺃﺻﻮﻝ ﻧﻤﻮﺫﺝ ﺑﺎﻛﻮﺱ ﻧﻮﺭ‬


‫ﺑﻌﺪﻭﻗﺖ ﻗﺼﻴﺮ ﻣﻦ ﻋﻤﻞ ﺗﺸﻮﻣﺴﻜﻲ ﻋﻠﻰ ﺩﺭﻭﺱ ﺍﻟﻠﻐﺔ ‪ ،‬ﺑﺪﺃﺕ ﻣﺠﻤﻮﻋﺔ ‪ ACM-GAMM‬ﻓﻲ‬
‫ﺗﺼﻤﻴﻢ‪ .ALGOL 58‬ﻗﺪﻡ ﺟﻮﻥ ﺑﺎﻛﻮﺱ ‪ ،‬ﻭﻫﻮ ﻋﻀﻮ ﺑﺎﺭﺯ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ‪ ، ACM-GAMM‬ﻭﺭﻗﺔ‬
‫ﺗﺎﺭﻳﺨﻴﺔﺗﺼﻒ ‪ ، ALGOL 58‬ﻓﻲ ﻣﺆﺗﻤﺮ ﺩﻭﻟﻲ ﻓﻲ ﻋﺎﻡ ‪) 1959‬ﺑﺎﻛﻮﺱ ‪ .( (1959 ،‬ﻗﺪﻣﺖ ﻫﺬﻩ‬
‫ﺍﻟﻮﺭﻗﺔﺗﺪﻭﻳﻨﺎً ﺭﺳﻤﻴﺎً ﺟﺪﻳﺪﺍً ﻟﺘﺤﺪﻳﺪ ﺑﻨﺎء ﺟﻤﻠﺔ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﺗﻢ ﺗﻌﺪﻳﻞ ﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﺠﺪﻳﺪ ﻻﺣﻘﺎً‬
‫ﺑﺸﻜﻞﻃﻔﻴﻒ ﺑﻮﺍﺳﻄﺔ ‪ Peter Naur‬ﻟﻮﺻﻒ‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪118‬‬

‫ﺃﺻﺒﺤﺖﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﻤﻨﻘﺤﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ ﻣﻌﺮﻭﻓﺔ ﺑﺎﺳﻢ ‪(.‬ﻧﻮﺭ ‪ALGOL 60 )1960 ،‬‬
‫ﻧﻤﻮﺫﺝﺑﺎﻛﻮﺱ ﻧﻮﺭ‪ ،‬ﺃﻭ ﺑﺒﺴﺎﻃﺔ‪.BNF‬‬
‫‪ )Ingerman ، 1967(.‬ﻟﻮﺻﻒ ﺗﺮﻛﻴﺐ ﺍﻟﻠﻐﺔ ﺍﻟﺴﻨﺴﻜﺮﻳﺘﻴﺔ ﻗﺒﻞ ﺍﻟﻤﺴﻴﺢ ﺑﻌﺪﺓ ﻣﺉﺎﺕ‬
‫ﻣﻦﺍﻟﺴﻨﻴﻦ ‪ BNF‬ﻫﻮ ﺗﺪﻭﻳﻦ ﻃﺒﻴﻌﻲ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺍﺳﺘﺨﺪﻡ ﺑﺎﻧﻴﻨﻲ ﺷﻴﺉﺎً ﻣﺸﺎﺑﻬﺎً‬
‫ﻟـ‪BNF‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﺳﺘﺨﺪﺍﻡ ‪ BNF‬ﻓﻲ ﺗﻘﺮﻳﺮ ‪ ALGOL 60‬ﻟﻢ ﻳﺘﻢ ﻗﺒﻮﻟﻪ ﻋﻠﻰ ﺍﻟﻔﻮﺭ ﻣﻦ ﻗﺒﻞ‬
‫ﻣﺴﺘﺨﺪﻣﻲﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪ ،‬ﺇﻻ ﺃﻧﻪ ﺳﺮﻋﺎﻥ ﻣﺎ ﺃﺻﺒﺢ ﻭﻣﺎ ﺯﺍﻝ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﻟﻮﺻﻒ ﻟﻐﺔ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺑﺈﻳﺠﺎﺯ‪.‬‬
‫ﻣﻦﺍﻟﻼﻓﺖ ﻟﻠﻨﻈﺮ ﺃﻥ ‪ BNF‬ﻣﻄﺎﺑﻖ ﺗﻘﺮﻳﺒﺎً ﻷﺟﻬﺰﺓ ‪ Chomsky‬ﺍﻟﺘﻮﻟﻴﺪﻳﺔ ﻟﻠﻐﺎﺕ ﺧﺎﻟﻴﺔ ﻣﻦ‬
‫ﺍﻟﺴﻴﺎﻕ ‪،‬ﺍﻟﻤﺴﻤﺎﺓﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﺧﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ‪ .‬ﻓﻲ ﺍﻟﺠﺰء ﺍﻟﻤﺘﺒﻘﻲ ﻣﻦ ﺍﻟﻔﺼﻞ ‪ ،‬ﻧﺸﻴﺮ‬
‫ﺇﻟﻰﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺨﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ ﺑﺒﺴﺎﻃﺔ ﻋﻠﻰ ﺃﻧﻬﺎ ﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻳﺘﻢ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻤﺼﻄﻠﺤﺎﺕ ‪ BNF‬ﻭﺍﻟﻘﻮﺍﻋﺪ ﺑﺎﻟﺘﺒﺎﺩﻝ‪.‬‬

‫‪3.3.1.3‬ﺍﻷﺳﺎﺳﻴﺎﺕ‬
‫ﺃﻣﻴﺘﺎﻟﻨﺠﻮﻳﺞﻫﻲ ﻟﻐﺔ ﺗﺴﺘﺨﺪﻡ ﻟﻮﺻﻒ ﻟﻐﺔ ﺃﺧﺮﻯ‪ BNF .‬ﻫﻲ ﻟﻐﺔ ﻣﻌﺪﻧﻴﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫ﻳﺴﺘﺨﺪﻡ‪ BNF‬ﺍﻟﺘﺠﺮﻳﺪﺍﺕ ﻟﻠﺒﻨﻰ ﺍﻟﻨﺤﻮﻳﺔ‪ .‬ﻗﺪ ﻳﺘﻢ ﺗﻤﺜﻴﻞ ﻋﺒﺎﺭﺓ ﺗﺨﺼﻴﺺ ‪ Java‬ﺑﺴﻴﻄﺔ ‪،‬‬
‫ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻣﻦ ﺧﻼﻝ ﺍﻟﺘﺠﺮﻳﺪ >ﺗﻌﻴﻴﻦ< )ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﺴﺘﺨﺪﻡ ﺍﻷﻗﻮﺍﺱ ﺍﻟﻤﺪﺑﺒﺔ ﻟﺘﺤﺪﻳﺪ‬
‫ﺃﺳﻤﺎءﺍﻟﺘﺠﺮﻳﺪﺍﺕ(‪ .‬ﻳﻤﻜﻦ ﺇﻋﻄﺎء ﺍﻟﺘﻌﺮﻳﻒ ﺍﻟﻔﻌﻠﻲ ﻟـ >ﺗﻌﻴﻴﻦ< ﺑﻮﺍﺳﻄﺔ‬

‫>ﺗﻌﻴﻴﻦ<→ ><‪var< = >expression‬‬

‫ﺍﻟﻨﺺﺍﻟﻤﻮﺟﻮﺩ ﻋﻠﻰ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﺴﺮ ﻣﻦ ﺍﻟﺴﻬﻢ ‪ ،‬ﻭﺍﻟﺬﻱ ﻳﺴﻤﻰ ﻋﻠﻰ ﻧﺤﻮ ﻣﻨﺎﺳﺐ ﺑﺎﻣﺘﺪﺍﺩ‬
‫ﺍﻟﺠﺎﻧﺐﺍﻷﻳﺴﺮ ﻳﻄﻠﻖ ﻋﻠﻴﻪ ‪ LHS.‬ﻳﺘﻢ ﺗﻌﺮﻳﻒ ﺍﻟﺘﺠﺮﻳﺪ‪ .‬ﺍﻟﻨﺺ ﺍﻟﻤﻮﺟﻮﺩ ﻋﻠﻰ ﻳﻤﻴﻦ ﺍﻟﺴﻬﻢ ﻫﻮ‬
‫ﺗﻌﺮﻳﻒ ‪)LHS( ،‬ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ)‪ a‬ﻭﻳﺘﻜﻮﻥ ﻣﻦ ﻣﺰﻳﺞ ﻣﻦ ﺍﻟﺮﻣﻮﺯ ﻭﺍﻟﻤﻌﺎﺟﻢ ﻭﺍﻟﻤﺮﺍﺟﻊ ﺇﻟﻰ‬
‫ﺍﻟﺘﺠﺮﻳﺪﺍﺕﺍﻷﺧﺮﻯ‪) .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺍﻟﺮﻣﻮﺯ ﺍﻟﻤﻤﻴﺰﺓ ﻫﻲ ﺃﻳﻀﺎً ﺗﺠﺮﻳﺪﻳﺔ(‪ .‬ﻭﺇﺟﻤﺎﻻ ً‪ ،‬ﻳﻄُﻠﻖ ﻋﻠﻰ‬
‫ﺍﻟﺘﻌﺮﻳﻒﺍﺳﻢ (‪ RHS‬ﻗﺎﻋﺪﺓ‪ ،‬ﺃﻭﺇﻧﺘﺎﺝ‪ .‬ﻓﻲ ﻗﺎﻋﺪﺓ ﺍﻟﻤﺜﺎﻝ ﺍﻟﻤﻌﻄﺎﺓ ﻟﻠﺘﻮ ‪ ،‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ ﻳﺠﺐ‬
‫ﺗﺤﺪﻳﺪﺍﻟﺘﺠﺮﻳﺪﺍﺕ >‪ <var‬ﻭ >‪ <expression‬ﻟﻜﻲ ﻳﻜﻮﻥ ﺗﻌﺮﻳﻒ >‪ <assign‬ﻣﻔﻴﺪﺍً‪.‬‬

‫ﺗﺤﺪﺩﻫﺬﻩ ﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﺨﺎﺻﺔ ﺃﻥ ﺍﻟﺘﺠﺮﻳﺪ >ﺗﻌﻴﻴﻦ< ﻳﺘﻢ ﺗﻌﺮﻳﻔﻪ ﻛﻤﺜﻴﻞ ﻟﻠﺘﺠﺮﻳﺪ >‪، <var‬‬
‫ﻣﺘﺒﻮﻋﺎًﺑـ ‪ ، = lexeme‬ﻣﺘﺒﻮﻋﺎً ﺑﻤﺜﻴﻞ ﻣﻦ ﺍﻟﺘﺠﺮﻳﺪ >‪ .<expression‬ﺃﺣﺪ ﺍﻷﻣﺜﻠﺔ ﻋﻠﻰ ﺍﻟﺠﻤﻠﺔ‬
‫ﺍﻟﺘﻲﻭﺻﻔﺖ ﺍﻟﻘﺎﻋﺪﺓ ﻫﻴﻜﻠﻬﺎ ﺍﻟﻨﺤﻮﻱ ﻫﻮ‬

‫ﺍﻟﻤﺠﻤﻮﻉ= ﺍﻟﻤﺠﻤﻮﻉ ﺍﻟﻔﺮﻋﻲ ‪ + 1‬ﺍﻟﻤﺠﻤﻮﻉ ﺍﻟﻔﺮﻋﻲ ‪2‬‬

‫ﻏﺎﻟﺒﺎًﻣﺎ ﻳﺘﻢ ﺍﺳﺘﺪﻋﺎء ﺍﻟﺘﺠﺮﻳﺪﺍﺕ ﻓﻲ ﻭﺻﻒ ‪ BNF‬ﺃﻭ ﺍﻟﻘﻮﺍﻋﺪﺍﻟﺮﻣﻮﺯ ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻴﺔ‪ ،‬ﺃﻭ ﺑﺒﺴﺎﻃﺔ‬
‫ﻏﻴﺮﻧﻬﺎﺉﻴﺔ‪ ،‬ﻭ ‪ lexemes‬ﻭ ﺍﻟﺮﻣﻮﺯ ﺍﻟﻤﻤﻴﺰﺓ ﻟﻠﻘﻮﺍﻋﺪ ﺗﺴﻤﻰﺭﻣﻮﺯ ﺍﻟﻤﺤﻄﺔ‪ ،‬ﺃﻭ ﺑﺒﺴﺎﻃﺔ‬
‫ﻣﺤﻄﺎﺕ‪ .‬ﻭﺻﻒ ‪ ، BNF‬ﺃﻭﻗﻮﺍﻋﺪ‪ ،‬ﻋﺒﺎﺭﺓ ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ‪.‬‬

‫ﻳﻤﻜﻦﺃﻥ ﺗﺤﺘﻮﻱ ﺍﻟﺮﻣﻮﺯ ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻴﺔ ﻋﻠﻰ ﺗﻌﺮﻳﻔﻴﻦ ﻣﻤﻴﺰﻳﻦ ﺃﻭ ﺃﻛﺜﺮ ‪ ،‬ﻳﻤﺜﻼﻥ ﺷﻜﻠﻴﻦ‬
‫ﻧﺤﻮﻳﻴﻦﺃﻭ ﺃﻛﺜﺮ ﻓﻲ ﺍﻟﻠﻐﺔ‪ .‬ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﺗﻌﺮﻳﻔﺎﺕ ﻣﺘﻌﺪﺩﺓ ﻛﻘﺎﻋﺪﺓ ﻭﺍﺣﺪﺓ ‪ ،‬ﻣﻊ ﺍﻟﻔﺼﻞ ﺑﻴﻦ‬
‫ﺍﻟﺘﻌﺎﺭﻳﻒﺍﻟﻤﺨﺘﻠﻔﺔ‬
‫‪119‬‬ ‫‪3.3‬ﺍﻟﻄﺮﻕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‬

‫ﺍﻟﺮﻣﺰ| ‪ ،‬ﺑﻤﻌﻨﻰ ‪ OR‬ﺍﻟﻤﻨﻄﻘﻲ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻣﻠﻒ ‪Java‬ﻟﻮﻳﻤﻜﻦ ﻭﺻﻒ ﺍﻟﺒﻴﺎﻥ ﻣﻊ‬
‫ﺍﻟﻘﻮﺍﻋﺪ‬
‫<‪→>if_stmt‬ﻟﻮ)><‪→logic_expr<( >stmt< >if_stmt‬ﻟﻮ)>‬
‫<‪logic_expr<( >stmt‬ﺁﺧﺮ><‪stmt‬‬

‫ﺃﻭﻣﻊ ﺍﻟﻘﺎﻋﺪﺓ‬

‫<‪→>if_stmt‬ﻟﻮ)><‪logic_expr<( >stmt‬‬
‫|ﻟﻮ)><‪logic_expr<( >stmt‬ﺁﺧﺮ><‪stmt‬‬

‫ﻓﻲﻫﺬﻩ ﺍﻟﻘﻮﺍﻋﺪ ‪ ،‬ﻳﻤﺜﻞ >‪ <stmt‬ﺇﻣﺎ ﺑﻴﺎﻧﺎً ﻣﻨﻔﺮﺩﺍً ﺃﻭ ﺑﻴﺎﻧﺎً ﻣﺮﻛﺒﺎً‪.‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ‪ BNF‬ﺑﺴﻴﻂ ‪ ،‬ﺇﻻ ﺃﻧﻪ ﻗﻮﻱ ﺑﻤﺎ ﻳﻜﻔﻲ ﻟﻮﺻﻒ ﺟﻤﻴﻊ ﺻﻴﻎ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺗﻘﺮﻳﺒﺎً‪.‬ﻋﻠﻰ ﻭﺟﻪ ﺍﻟﺨﺼﻮﺹ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﻳﺼﻒ ﻗﻮﺍﺉﻢ ﺍﻟﺒﻨﻰ ﺍﻟﻤﺘﺸﺎﺑﻬﺔ ‪ ،‬ﺍﻟﺘﺮﺗﻴﺐ ﺍﻟﺬﻱ ﻳﺠﺐ‬
‫ﺃﻥﺗﻈﻬﺮ ﺑﻪ ﺍﻟﺒﻨﻰ ﺍﻟﻤﺨﺘﻠﻔﺔ ‪ ،‬ﻭﺍﻟﻬﻴﺎﻛﻞ ﺍﻟﻤﺘﺪﺍﺧﻠﺔ ﻷﻱ ﻋﻤﻖ ‪ ،‬ﻭﺣﺘﻰ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻰ ﺃﺳﺒﻘﻴﺔ‬
‫ﺍﻟﻤﺸﻐﻞﻭﺗﺮﺍﺑﻂ ﺍﻟﻤﺸﻐﻞ‪.‬‬

‫‪3.3.1.4‬ﻭﺻﻒ ﺍﻟﻘﻮﺍﺉﻢ‬
‫ﻏﺎﻟﺒﺎًﻣﺎ ﺗﺘﻢ ﻛﺘﺎﺑﺔ ﺍﻟﻘﻮﺍﺉﻢ ﺫﺍﺕ ﺍﻟﻄﻮﻝ ﺍﻟﻤﺘﻐﻴﺮ ﻓﻲ ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻋﻼﻣﺔ ﺍﻟﻘﻄﻊ )‪ (..‬؛‬
‫‪ . . .، 2، 1‬ﺍﻧﻪ ﻣﺜﺎﻝ‪ .‬ﻻ ﻳﺘﻀﻤﻦ ‪ BNF‬ﻋﻼﻣﺔ ﺍﻟﻘﻄﻊ ‪ ،‬ﻟﺬﻟﻚ ﻳﻠﺰﻡ ﻭﺟﻮﺩ ﻃﺮﻳﻘﺔ ﺑﺪﻳﻠﺔ ﻟﻮﺻﻒ‬
‫ﻗﻮﺍﺉﻢﺍﻟﻌﻨﺎﺻﺮ ﺍﻟﻨﺤﻮﻳﺔ ﻓﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ )ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻗﺎﺉﻤﺔ ﺍﻟﻤﻌﺮﻓﺎﺕ ﺍﻟﺘﻲ ﺗﻈﻬﺮ‬
‫ﻓﻲﺑﻴﺎﻥ ﺇﻋﻼﻥ ﺍﻟﺒﻴﺎﻧﺎﺕ(‪ .‬ﺑﺎﻟﻨﺴﺒﺔ ﻟـ ‪ ، BNF‬ﺍﻟﺒﺪﻳﻞ ﻫﻮ ﺍﻟﻌﻮﺩﻳﺔ‪ .‬ﺍﻟﻘﺎﻋﺪﺓ ﻫﻲﺍﻟﻌﻮﺩﻳﺔﺇﺫﺍ ﻇﻬﺮ‬
‫‪ LHS‬ﺍﻟﺨﺎﺹ ﺑﻪ ﻓﻲ ‪ .RHS‬ﺗﻮﺿﺢ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺘﺎﻟﻴﺔ ﻛﻴﻔﻴﺔ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﻮﺩﻳﺔ ﻟﻮﺻﻒ ﺍﻟﻘﻮﺍﺉﻢ‪:‬‬

‫<‪→>ident_list‬ﺍﻟﻤﻌﺮﻑ‬
‫|ﺍﻟﻤﻌﺮﻑ ‪<ident_list> ،‬‬

‫ﻳﻌﺮﻑّﻫﺬﺍ >‪ <ident_list‬ﺇﻣﺎ ﻛﺮﻣﺰ ﻭﺍﺣﺪ )ﻣﻌﺮﻑ( ﺃﻭ ﻣﻌﺮﻑ ﻣﺘﺒﻮﻋﺎً ﺑﻔﺎﺻﻠﺔ ﻭﻣﺜﻴﻞ ﺁﺧﺮ ﻟـ‬
‫>‪ .<ident_list‬ﺗﺴُﺘﺨﺪﻡ ﺍﻟﻌﻮﺩﻳﺔ ﻟﻮﺻﻒ ﺍﻟﻘﻮﺍﺉﻢ ﻓﻲ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺃﻣﺜﻠﺔ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻓﻲ‬
‫ﺍﻟﺠﺰءﺍﻟﻤﺘﺒﻘﻲ ﻣﻦ ﻫﺬﺍ ﺍﻟﻔﺼﻞ‪.‬‬

‫‪3.3.1.5‬ﺍﻟﻘﻮﺍﻋﺪ ﻭﺍﻻﺷﺘﻘﺎﻗﺎﺕ‬
‫ﺍﻟﻘﻮﺍﻋﺪﻫﻲ ﺃﺩﺍﺓ ﻣﻮﻟﺪﺓ ﻟﺘﻌﺮﻳﻒ ﺍﻟﻠﻐﺎﺕ‪ .‬ﻳﺘﻢ ﺇﻧﺸﺎء ﺟﻤﻞ ﺍﻟﻠﻐﺔ ﻣﻦ ﺧﻼﻝ ﺳﻠﺴﻠﺔ ﻣﻦ ﺗﻄﺒﻴﻘﺎﺕ‬
‫ﺍﻟﻘﻮﺍﻋﺪ ‪،‬ﺑﺪءﺍً ﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺨﺎﺻﺔ ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻴﺔ ﺍﻟﺘﻲ ﺗﺴﻤﻰﺭﻣﺰ ﺍﻟﺒﺪﺍﻳﺔ‪ .‬ﻳﺴﻤﻰ ﻫﺬﺍ‬
‫ﺍﻟﺘﺴﻠﺴﻞﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻘﺎﻋﺪﺓ ‪a‬ﺍﻻﺷﺘﻘﺎﻕ‪ .‬ﻓﻲ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﻐﺔ ﺑﺮﻣﺠﺔ ﻛﺎﻣﻠﺔ ‪ ،‬ﻳﻤﺜﻞ ﺭﻣﺰ‬
‫ﺍﻟﺒﺪﺍﻳﺔﺑﺮﻧﺎﻣﺠﺎً ﻛﺎﻣﻼ ًﻭﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺴُﻤﻰ >‪ .<program‬ﺗﺴُﺘﺨﺪﻡ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﻤﺒﻴﻨﺔ ﻓﻲ‬
‫ﺍﻟﻤﺜﺎﻝ‪ 3.1‬ﻟﺘﻮﺿﻴﺢ ﺍﻻﺷﺘﻘﺎﻗﺎﺕ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪120‬‬

‫ﻗﻮﺍﻋﺪﻟﻠﻐﺔ ﺻﻐﻴﺮﺓ‬ ‫ﻣﺜﺎﻝ‪3.1‬‬


‫>ﺑﺮﻧﺎﻣﺞ<→ﻳﺒﺪﺃ><‪stmt_list‬ﻧﻬﺎﻳﺔ‬

‫<‪stmt<> →>stmt_list‬‬
‫| ><‪ >stmt_list‬؛ <‪stmt‬‬
‫<‪>expression< >var<> →>stmt‬‬
‫= <‪→var‬ﺃ | ﺏ | ﺝ‬
‫>ﺍﻟﺘﻌﺒﻴﺮ<→ ><‪var< + >var‬‬
‫| ><‪var< - >var‬‬
‫| >ﻓﺎﺭ<‬

‫ﺗﺤﺘﻮﻱﺍﻟﻠﻐﺔ ﺍﻟﻤﻮﺻﻮﻓﺔ ﻓﻲ ﻗﻮﺍﻋﺪ ﺍﻟﻤﺜﺎﻝ ‪ 3.1‬ﻋﻠﻰ ﻧﻤﻮﺫﺝ ﺑﻴﺎﻥ ﻭﺍﺣﺪ ﻓﻘﻂ‪ :‬ﺍﻟﺘﺨﺼﻴﺺ‪.‬‬
‫ﺑﺮﻧﺎﻣﺞﻳﺘﻜﻮﻥ ﻣﻦ ﻛﻠﻤﺔ ﺧﺎﺻﺔﻳﺒﺪﺃ‪ ،‬ﻣﺘﺒﻮﻋﺔ ﺑﻘﺎﺉﻤﺔ ﻣﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻣﻔﺼﻮﻟﺔ ﺑﻔﻮﺍﺻﻞ ﻣﻨﻘﻮﻃﺔ ‪،‬‬
‫ﻣﺘﺒﻮﻋﺔﺑﺎﻟﻜﻠﻤﺔ ﺍﻟﺨﺎﺻﺔﻧﻬﺎﻳﺔ‪ .‬ﺍﻟﺘﻌﺒﻴﺮ ﻫﻮ ﺇﻣﺎ ﻣﺘﻐﻴﺮ ﻭﺍﺣﺪ ﺃﻭ ﻣﺘﻐﻴﺮﻳﻦ ﻣﻔﺼﻮﻟﻴﻦ ﺇﻣﺎ ‪ +‬ﺃﻭ ‪.-‬‬
‫ﺃﺳﻤﺎءﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻮﺣﻴﺪﺓ ﻓﻲ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﻫﻲﺃ ‪ ،‬ﺏ ‪،‬ﻭﺝ‪.‬‬

‫ﻳﺘﺒﻊﺍﺷﺘﻘﺎﻕ ﺑﺮﻧﺎﻣﺞ ﺑﻬﺬﻩ ﺍﻟﻠﻐﺔ‪:‬‬

‫>ﺑﺮﻧﺎﻣﺞ< =<ﻳﺒﺪﺃ><‪stmt_list‬ﻧﻬﺎﻳﺔ‬
‫=<ﻳﺒﺪﺃ><‪ >stmt_list‬؛ <‪stmt‬ﻧﻬﺎﻳﺔ‬
‫=<ﻳﺒﺪﺃ><‪ >stmt_list‬؛ <‪var< = >expression‬ﻧﻬﺎﻳﺔ =<‬
‫ﻳﺒﺪﺃﺃ = >ﺍﻟﺘﻌﺒﻴﺮ< ؛ >‪<stmt_list‬ﻧﻬﺎﻳﺔ =<ﻳﺒﺪﺃﺃ = >‬
‫<‪ >stmt_list‬؛ <‪var< + >var‬ﻧﻬﺎﻳﺔ =<ﻳﺒﺪﺃﺃ = ﺏ ‪> +‬ﻓﺎﺭ< ؛‬
‫>‪<stmt_list‬ﻧﻬﺎﻳﺔ =<ﻳﺒﺪﺃﺃ = ﺏ ‪ +‬ﺝ ؛ ><‪stmt_list‬ﻧﻬﺎﻳﺔ‬
‫=<ﻳﺒﺪﺃﺃ = ﺏ ‪ +‬ﺝ ؛ ><‪stmt‬ﻧﻬﺎﻳﺔ‬

‫=<ﻳﺒﺪﺃﺃ = ﺏ ‪ +‬ﺝ ؛ ><‪var< = >expression‬ﻧﻬﺎﻳﺔ =<ﻳﺒﺪﺃﺃ‬


‫= ﺏ ‪ +‬ﺝ ؛ ﺏ = >ﺍﻟﺘﻌﺒﻴﺮ<ﻧﻬﺎﻳﺔ =<ﻳﺒﺪﺃﺃ = ﺏ ‪ +‬ﺝ ؛ ﺏ = >‬
‫ﻓﺎﺭ<ﻧﻬﺎﻳﺔ =<ﻳﺒﺪﺃﺃ = ﺏ ‪ +‬ﺝ ؛ ﺏ = ﺝﻧﻬﺎﻳﺔ‬

‫ﻳﺒﺪﺃﻫﺬﺍ ﺍﻻﺷﺘﻘﺎﻕ ‪ ،‬ﻣﺜﻞ ﻛﻞ ﺍﻻﺷﺘﻘﺎﻗﺎﺕ ‪ ،‬ﺑﺮﻣﺰ ﺍﻟﺒﺪﺍﻳﺔ ‪ ،‬ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ >ﺍﻟﺒﺮﻧﺎﻣﺞ<‪ .‬ﻳﻘُﺮﺃ‬
‫ﺍﻟﺮﻣﺰ=< "ﻣﺸﺘﻘﺎﺕ"‪ .‬ﻳﺘﻢ ﺍﺷﺘﻘﺎﻕ ﻛﻞ ﺳﻠﺴﻠﺔ ﻣﺘﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺘﺴﻠﺴﻞ ﻣﻦ ﺍﻟﺴﻠﺴﻠﺔ ﺍﻟﺴﺎﺑﻘﺔ‬
‫ﻋﻦﻃﺮﻳﻖ ﺍﺳﺘﺒﺪﺍﻝ ﺃﺣﺪ ﺍﻷﺣﺮﻑ ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻴﺔ ﺑﺄﺣﺪ ﺗﻌﺮﻳﻔﺎﺕ ﺗﻠﻚ ﻏﻴﺮ ﻧﻬﺎﺉﻴﺔ‪ .‬ﻛﻞ ﺳﻠﺴﻠﺔ ﻓﻲ‬
‫ﺍﻻﺷﺘﻘﺎﻕ ‪،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ >ﺑﺮﻧﺎﻣﺞ< ‪ ،‬ﺗﺴﻤﻰ ﺃﺷﻜﻞ ﻭﺟﻮﺩﻱ‪.‬‬

‫ﻓﻲﻫﺬﺍ ﺍﻻﺷﺘﻘﺎﻕ ‪ ،‬ﺗﻜﻮﻥ ﺍﻟﺼﻴﻐﺔ ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻴﺔ ﺍﻟﻤﺴﺘﺒﺪﻟﺔ ﻫﻲ ﺩﺍﺉﻤﺎً ﺃﻗﺼﻰ ﺍﻟﻴﺴﺎﺭ ﻏﻴﺮ‬
‫ﻧﻬﺎﺉﻴﺔﻓﻲ ﺍﻟﺸﻜﻞ ﺍﻟﻤﻌﻴﻦ ﺍﻟﺴﺎﺑﻖ‪ .‬ﺗﺴﻤﻰ ﺍﻻﺷﺘﻘﺎﻗﺎﺕ ﺍﻟﺘﻲ ﺗﺴﺘﺨﺪﻡ ﺗﺮﺗﻴﺐ ﺍﻻﺳﺘﺒﺪﺍﻝ ﻫﺬﺍ‬
‫ﺍﻻﺷﺘﻘﺎﻗﺎﺕﻓﻲ ﺃﻗﺼﻰ ﺍﻟﻴﺴﺎﺭ‪ .‬ﻳﺴﺘﻤﺮ ﺍﻻﺷﺘﻘﺎﻕ ﺣﺘﻰ ﻻ ﻳﺤﺘﻮﻱ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﻤﻌﺘﻤﺪ ﻋﻠﻰ‬
‫ﻏﻴﺮﻧﻬﺎﺉﻴﺔ‪ .‬ﻫﺬﺍ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﺤﺴﻲ ‪ ،‬ﺍﻟﺬﻱ ﻳﺘﻜﻮﻥ ﻣﻦ ﻣﺤﻄﺎﺕ ﻓﻘﻂ ‪ ،‬ﺃﻭ ‪ ، lexemes‬ﻫﻮ‬
‫ﺍﻟﺠﻤﻠﺔﺍﻟﻤﻮﻟﺪﺓ‪.‬‬
‫‪121‬‬ ‫‪3.3‬ﺍﻟﻄﺮﻕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‬

‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺃﻗﺼﻰ ﺍﻟﻴﺴﺎﺭ ‪ ،‬ﻗﺪ ﻳﻜﻮﻥ ﺍﻻﺷﺘﻘﺎﻕ ﺃﻗﺼﻰ ﺍﻟﻴﻤﻴﻦ ﺃﻭ ﺑﺘﺮﺗﻴﺐ ﻟﻴﺲ ﺃﻗﺼﻰ‬
‫ﺍﻟﻴﺴﺎﺭﺃﻭ ﺃﻗﺼﻰ ﺍﻟﻴﻤﻴﻦ‪ .‬ﻟﻴﺲ ﻷﻣﺮ ﺍﻻﺷﺘﻘﺎﻕ ﺃﻱ ﺗﺄﺛﻴﺮ ﻋﻠﻰ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﻮﻟﺪﻫﺎ ﺍﻟﻘﻮﺍﻋﺪ‪.‬‬

‫ﻣﻦﺧﻼﻝ ﺍﺧﺘﻴﺎﺭ ﻗﻮﺍﻋﺪ ‪ RHS‬ﺍﻟﺒﺪﻳﻠﺔ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻣﻦ ﺧﻼﻟﻬﺎ ﺍﺳﺘﺒﺪﺍﻝ ‪nonterminals‬‬


‫ﻓﻲﺍﻻﺷﺘﻘﺎﻕ ‪ ،‬ﻳﻤﻜﻦ ﺇﻧﺸﺎء ﺟﻤﻞ ﻣﺨﺘﻠﻔﺔ ﻓﻲ ﺍﻟﻠﻐﺔ‪ .‬ﻣﻦ ﺧﻼﻝ ﺍﻻﺧﺘﻴﺎﺭ ﺍﻟﺸﺎﻣﻞ ﻟﺠﻤﻴﻊ‬
‫ﻣﺠﻤﻮﻋﺎﺕﺍﻟﺨﻴﺎﺭﺍﺕ ‪ ،‬ﻳﻤﻜﻦ ﺇﻧﺸﺎء ﺍﻟﻠﻐﺔ ﺑﺄﻛﻤﻠﻬﺎ‪ .‬ﻫﺬﻩ ﺍﻟﻠﻐﺔ ‪ ،‬ﻣﺜﻞ ﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ‪،‬‬
‫ﻻﻧﻬﺎﺉﻴﺔ ‪،‬ﻟﺬﻟﻚ ﻻ ﻳﻤﻜﻦ ﻟﻠﻤﺮء ﺃﻥ ﻳﻮﻟﺪ ﺍﻟﺠﻤﻴﻊﺍﻟﺠﻤﻞ ﻓﻲ ﺍﻟﻠﻐﺔ ﻓﻲ ﺯﻣﻦ ﻣﺤﺪﺩ‪.‬‬

‫ﺍﻟﻤﺜﺎﻝ‪ 3.2‬ﻫﻮ ﻣﺜﺎﻝ ﺁﺧﺮ ﻟﻘﻮﺍﻋﺪ ﺍﻟﻠﻐﺔ ﻟﺠﺰء ﻣﻦ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﻤﻮﺫﺟﻴﺔ‪.‬‬

‫ﻗﻮﺍﻋﺪﻧﺤﻮﻳﺔ ﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻌﻴﻴﻦ ﺍﻟﺒﺴﻴﻄﺔ‬ ‫ﻣﺜﺎﻝ‪3.2‬‬


‫>ﺗﻌﻴﻴﻦ<→ >ﻣﻌﺮﻑ< = >‪> <expr‬‬
‫ﻣﻌﺮﻑ<→ﺃ | ﺏ | ﺝ‬
‫<‪> →>expr‬ﻣﻌﺮﻑ< ‪<expr> +‬‬
‫| >ﻣﻌﺮﻑ< * >‪<expr‬‬
‫| )>ﺇﻛﺴﺒﺮ<(‬
‫| >ﻣﻌﺮﻑ<‬

‫ﻳﺼﻒﺍﻟﻨﺤﻮ ﻓﻲ ﺍﻟﻤﺜﺎﻝ ‪ 3.2‬ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﺘﻲ ﺗﻜﻮﻥ ﺟﻮﺍﻧﺒﻬﺎ ﺍﻟﻴﻤﻨﻰ ﻋﺒﺎﺭﺓ ﻋﻦ‬
‫ﺗﻌﺒﻴﺮﺍﺕﺣﺴﺎﺑﻴﺔ ﻣﻊ ﻋﻮﺍﻣﻞ ﺍﻟﻀﺮﺏ ﻭﺍﻟﺠﻤﻊ ﻭﺍﻷﻗﻮﺍﺱ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺍﻟﺒﻴﺎﻥ‬

‫ﺃ= ﺏ * )ﺃ ‪ +‬ﺝ(‬

‫ﺗﻢﺇﻧﺸﺎﺅﻩ ﻣﻦ ﺧﻼﻝ ﺍﻻﺷﺘﻘﺎﻕ ﺍﻟﻤﻮﺟﻮﺩ ﻓﻲ ﺃﻗﺼﻰ ﺍﻟﻴﺴﺎﺭ‪:‬‬

‫>ﺗﻌﻴﻴﻦ< =< >ﻣﻌﺮﻑ< = >‪<expr‬‬


‫=< ﺃ = >ﺇﻛﺴﺒﺮ<‬
‫=< ﺃ = >ﺑﻄﺎﻗﺔ ﺗﻌﺮﻳﻒ<‪< * >expr‬‬

‫=< ﺃ = ﺏ * >ﺇﻛﺴﺒﺮ<‬
‫=< ﺃ = ﺏ * )>ﺇﻛﺴﺒﺮ<( =< ﺃ = ﺏ * )>‬
‫ﻣﻌﺮﻑ< ‪ <= (<expr> +‬ﺃ = ﺏ * )ﺃ ‪> +‬‬
‫ﺇﻛﺴﺒﺮ<( =< ﺃ = ﺏ * )ﺃ ‪> +‬ﻣﻌﺮﻑ<( =< ﺃ‬
‫= ﺏ * )ﺃ ‪ +‬ﺝ (‬

‫‪3.3.1.6‬ﺗﺤﻠﻴﻞ ﺍﻷﺷﺠﺎﺭ‬
‫ﻣﻦﺃﻛﺜﺮ ﺍﻟﻤﻴﺰﺍﺕ ﺟﺎﺫﺑﻴﺔ ﻟﻠﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺃﻧﻬﺎ ﺗﺼﻒ ﺑﺸﻜﻞ ﻃﺒﻴﻌﻲ ﺍﻟﺒﻨﻴﺔ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﻬﺮﻣﻴﺔ‬
‫ﻟﺠﻤﻞﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﺤﺪﺩﻫﺎ‪ .‬ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻬﻴﺎﻛﻞ ﺍﻟﻬﺮﻣﻴﺔﺗﺤﻠﻴﻞ ﺍﻷﺷﺠﺎﺭ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ‬
‫ﺍﻟﻤﺜﺎﻝ ‪،‬ﺗﻈُﻬﺮ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ 3.1‬ﺑﻨﻴﺔ ﺑﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﻤﺸﺘﻖ ﺳﺎﺑﻘﺎً‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪122‬‬

‫>ﺗﻌﻴﻴﻦ<‬ ‫ﺍﻟﺸﻜﻞ‪3.1‬‬

‫ﺷﺠﺮﺓﺗﺤﻠﻴﻞ ﻟﺒﻴﺎﻥ‬
‫<‪>expr‬‬ ‫=‬ ‫<‪>id‬‬ ‫ﺑﺴﻴﻂ‬
‫ﺃ= ﺏ * )ﺃ ‪ +‬ﺝ(‬

‫<‪>expr‬‬ ‫*‬ ‫<‪>id‬‬ ‫ﺃ‬

‫(‬ ‫<‪>expr‬‬ ‫)‬ ‫ﺏ‬

‫<‪>expr‬‬ ‫‪+‬‬ ‫<‪>id‬‬

‫<‪>id‬‬ ‫ﺃ‬

‫ﺝ‬

‫ﻳﺘﻢﺗﻤﻴﻴﺰ ﻛﻞ ﻋﻘﺪﺓ ﺩﺍﺧﻠﻴﺔ ﻟﺸﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺑﺮﻣﺰ ﻏﻴﺮ ﻧﻬﺎﺉﻲ ؛ ﻳﺘﻢ ﺗﻤﻴﻴﺰ ﻛﻞ ﻭﺭﻗﺔ ﺑﺮﻣﺰ‬
‫ﻃﺮﻓﻲ‪.‬ﺗﺼﻒ ﻛﻞ ﺷﺠﺮﺓ ﻓﺮﻋﻴﺔ ﻟﺸﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﻣﺜﻴﻼً ﻭﺍﺣﺪﺍً ﻟﻠﺘﺠﺮﻳﺪ ﻓﻲ ﺍﻟﺠﻤﻠﺔ‪.‬‬

‫‪3.3.1.7‬ﺍﻟﻐﻤﻮﺽ‬
‫ﻳﻘُﺎﻝﺇﻥ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺘﻲ ﺗﻨُﺸﺊ ﻧﻤﻮﺫﺟﺎً ﺣﺴﺎﺑﻴﺎً ﻟﻬﺎ ﺷﺠﺮﺗﺎﻥ ﺃﻭ ﺃﻛﺜﺮ ﻣﻦ ﺷﺠﺮﺗﻲ ﺍﻟﺘﺤﻠﻴﻞ‬
‫ﺍﻟﻤﺘﻤﻴﺰﺗﻴﻦﻏﺎﻣﺾ‪ .‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﻤﻮﺿﺤﺔ ﻓﻲ ﺍﻟﻤﺜﺎﻝ ‪ ، 3.3‬ﻭﺍﻟﺘﻲ ﺗﻌﺪ‬
‫ﺍﺧﺘﻼﻓﺎًﺑﺴﻴﻄﺎً ﻓﻲ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﻤﻮﺿﺤﺔ ﻓﻲ ﺍﻟﻤﺜﺎﻝ ‪.3.2‬‬

‫ﻗﻮﺍﻋﺪﻧﺤﻮﻳﺔ ﻏﺎﻣﻀﺔ ﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻌﻴﻴﻦ ﺍﻟﺒﺴﻴﻄﺔ‬ ‫ﻣﺜﺎﻝ‪3.3‬‬

‫>ﺗﻌﻴﻴﻦ<→ >ﻣﻌﺮﻑ< = >‪> <expr‬‬


‫ﻣﻌﺮﻑ<→ﺃ | ﺏ | ﺝ‬
‫<‪expr< + >expr<> →>expr‬‬
‫| ><‪expr< * >expr‬‬
‫| )>ﺇﻛﺴﺒﺮ<(‬
‫| >ﻣﻌﺮﻑ<‬

‫ﻗﻮﺍﻋﺪﺍﻟﻤﺜﺎﻝ ‪ 3.3‬ﻏﺎﻣﻀﺔ ﻷﻥ ﺍﻟﺠﻤﻠﺔ‬


‫ﺃ= ﺏ ‪ +‬ﺝ * ﺃ‬

‫ﻟﻪﺷﺠﺮﺗﺎ ﺗﺤﻠﻴﻞ ﻣﺘﻤﻴﺰﺗﺎﻥ ‪ ،‬ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ .3.2‬ﻳﺤﺪﺙ ﺍﻟﻐﻤﻮﺽ ﻷﻥ ﺍﻟﻘﻮﺍﻋﺪ‬


‫ﺗﺤﺪﺩﺑﻨﻴﺔ ﻧﺤﻮﻳﺔ ﺃﻗﻞ ﻗﻠﻴﻼ ًﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ‬
‫‪123‬‬ ‫‪3.3‬ﺍﻟﻄﺮﻕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‬

‫ﻣﺜﺎﻝ‪ .3.2‬ﺑﺪﻻ ًﻣﻦ ﺍﻟﺴﻤﺎﺡ ﻟﺸﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﻟﻠﺘﻌﺒﻴﺮ ﺑﺎﻟﻨﻤﻮ ﻋﻠﻰ ﺍﻟﻴﻤﻴﻦ ﻓﻘﻂ ‪ ،‬ﺗﺴﻤﺢ ﻫﺬﻩ‬
‫ﺍﻟﻘﻮﺍﻋﺪﺑﺎﻟﻨﻤﻮ ﻋﻠﻰ ﻛﻞ ﻣﻦ ﺍﻟﻴﺴﺎﺭ ﻭﺍﻟﻴﻤﻴﻦ‪.‬‬

‫>ﺗﻌﻴﻴﻦ<‬ ‫>ﺗﻌﻴﻴﻦ<‬ ‫ﺍﻟﺸﻜﻞ‪3.2‬‬

‫ﺷﺠﺮﺗﺎﺗﺤﻠﻴﻞ ﻣﺘﻤﻴﺰﺗﺎﻥ‬
‫<‪>expr‬‬ ‫=‬ ‫<‪>id‬‬ ‫<‪>expr‬‬ ‫=‬ ‫<‪>id‬‬
‫ﻟﻨﻔﺲﺍﻟﺠﻤﻠﺔ ‪،‬‬
‫ﺃ= ﺏ ‪ +‬ﺝ * ﺃ‬
‫<‪>expr‬‬ ‫*‬ ‫<‪>expr‬‬ ‫ﺃ‬ ‫<‪>expr‬‬ ‫‪+‬‬ ‫<‪>expr‬‬ ‫ﺃ‬

‫<‪>id‬‬ ‫<‪>expr‬‬ ‫‪+‬‬ ‫<‪>expr‬‬ ‫<‪>expr‬‬ ‫*‬ ‫<‪>expr‬‬ ‫<‪>id‬‬

‫ﺃ‬ ‫<‪>id‬‬ ‫<‪>id‬‬ ‫<‪>id‬‬ ‫<‪>id‬‬ ‫ﺏ‬

‫ﺝ‬ ‫ﺏ‬ ‫ﺃ‬ ‫ﺝ‬

‫ﻳﻌﺪﺍﻟﻐﻤﻮﺽ ﺍﻟﻨﺤﻮﻱ ﻟﺘﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ ﻣﺸﻜﻠﺔ ﻷﻥ ﺍﻟﻤﺘﺮﺟﻤﻴﻦ ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺆﺳﺴﻮﻥ ﺩﻻﻻﺕ‬


‫ﺗﻠﻚﺍﻟﻬﻴﺎﻛﻞ ﻋﻠﻰ ﺷﻜﻠﻬﺎ ﺍﻟﻨﺤﻮﻱ‪ .‬ﻋﻠﻰ ﻭﺟﻪ ﺍﻟﺘﺤﺪﻳﺪ ‪ ،‬ﻳﺨﺘﺎﺭ ﺍﻟﻤﺘﺮﺟﻢ ﺍﻟﺸﻔﺮﺓ ﺍﻟﺘﻲ ﺳﻴﺘﻢ‬
‫ﺇﻧﺸﺎﺅﻫﺎﻟﺒﻴﺎﻥ ﻣﻦ ﺧﻼﻝ ﻓﺤﺺ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﺨﺎﺻﺔ ﺑﻪ‪ .‬ﺇﺫﺍ ﻛﺎﻧﺖ ﺑﻨﻴﺔ ﺍﻟﻠﻐﺔ ﺗﺤﺘﻮﻱ ﻋﻠﻰ‬
‫ﺃﻛﺜﺮﻣﻦ ﺷﺠﺮﺓ ﺗﺤﻠﻴﻞ ﻭﺍﺣﺪﺓ ‪ ،‬ﻓﻼ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﻣﻌﻨﻰ ﺍﻟﺒﻨﻴﺔ ﺑﺸﻜﻞ ﻓﺮﻳﺪ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻫﺬﻩ‬
‫ﺍﻟﻤﺸﻜﻠﺔﻓﻲ ﻣﺜﺎﻟﻴﻦ ﻣﺤﺪﺩﻳﻦ ﻓﻲ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ‪.‬‬

‫ﻫﻨﺎﻙﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻷﺧﺮﻯ ﻟﻠﻘﻮﺍﻋﺪ ﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻣﻔﻴﺪﺓ ﺃﺣﻴﺎﻧﺎً ﻓﻲ ﺗﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ‬
‫ﻛﺎﻧﺖﺍﻟﻘﻮﺍﻋﺪ ﻏﺎﻣﻀﺔ‪1.‬ﻭﻫﻲ ﺗﺸﻤﻞ ﻣﺎ ﻳﻠﻲ‪ (1) :‬ﺇﺫﺍ ﻛﺎﻧﺖ ﺍﻟﻘﻮﺍﻋﺪ ﺗﻮﻟﺪ ﺟﻤﻠﺔ ﺑﺄﻛﺜﺮ ﻣﻦ‬
‫ﺍﺷﺘﻘﺎﻕﻭﺍﺣﺪ ﻓﻲ ﺃﻗﺼﻰ ﺍﻟﻴﺴﺎﺭ ﻭ )‪ (2‬ﺇﺫﺍ ﻛﺎﻧﺖ ﺍﻟﻘﻮﺍﻋﺪ ﺗﻮﻟﺪ ﺟﻤﻠﺔ ﺑﺄﻛﺜﺮ ﻣﻦ ﺍﺷﺘﻘﺎﻕ ﻭﺍﺣﺪ ﻓﻲ‬
‫ﺃﻗﺼﻰﺍﻟﻴﻤﻴﻦ‪.‬‬

‫ﻳﻤﻜﻦﺃﻥ ﺗﺴﺘﻨﺪ ﺑﻌﺾ ﺧﻮﺍﺭﺯﻣﻴﺎﺕ ﺍﻟﺘﺤﻠﻴﻞ ﺇﻟﻰ ﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﻏﺎﻣﻀﺔ‪ .‬ﻋﻨﺪﻣﺎ ﻳﻮﺍﺟﻪ ﻣﺜﻞ‬
‫ﻫﺬﺍﺍﻟﻤﺤﻠﻞ ﺍﻟﻠﻐﻮﻱ ﺑﻨﻴﺔ ﻏﺎﻣﻀﺔ ‪ ،‬ﻓﺈﻧﻪ ﻳﺴﺘﺨﺪﻡ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﻏﻴﺮ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺘﻲ ﻳﻮﻓﺮﻫﺎ ﺍﻟﻤﺼﻤﻢ‬
‫ﻹﻧﺸﺎءﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﺼﺤﻴﺤﺔ‪ .‬ﻓﻲ ﻛﺜﻴﺮ ﻣﻦ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻳﻤﻜﻦ ﺇﻋﺎﺩﺓ ﻛﺘﺎﺑﺔ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻐﺎﻣﻀﺔ‬
‫ﺑﺤﻴﺚﻻ ﻟﺒﺲ ﻓﻴﻬﺎ ﻭﻟﻜﻦ ﻻ ﺗﺰﺍﻝ ﺗﻮﻟﺪ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺮﻏﻮﺑﺔ‪.‬‬

‫‪3.3.1.8‬ﺃﺳﺒﻘﻴﺔ ﺍﻟﻤﺸﻐﻞ‬
‫ﻋﻨﺪﻣﺎﻳﺘﻀﻤﻦ ﺍﻟﺘﻌﺒﻴﺮ ﻋﺎﻣﻠﻴﻦ ﻣﺨﺘﻠﻔﻴﻦ ‪ ،‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪،‬ﺱ ‪ +‬ﺹ * ﺽ ‪ ،‬ﺇﺣﺪﻯ ﺍﻟﻘﻀﺎﻳﺎ‬
‫ﺍﻟﺪﻻﻟﻴﺔﺍﻟﻮﺍﺿﺤﺔ ﻫﻲ ﺗﺮﺗﻴﺐ ﺗﻘﻴﻴﻢ ﺍﻟﻤﺸﻐﻠﻴﻦ )ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻓﻲ ﻫﺬﺍ ﺍﻟﺘﻌﺒﻴﺮ ‪ ،‬ﻫﻞ ﻳﺘﻢ‬
‫ﺍﻟﺠﻤﻊﺛﻢ ﺍﻟﻀﺮﺏ ‪ ،‬ﺃﻭ ﺍﻟﻌﻜﺲ؟(‪ .‬ﻳﻤﻜﻦ ﺍﻹﺟﺎﺑﺔ ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﺴﺆﺍﻝ ﺍﻟﺪﻻﻟﻲ ﻋﻦ ﻃﺮﻳﻖ ﺗﻌﻴﻴﻦ‬
‫ﻣﺴﺘﻮﻳﺎﺕﺃﺳﺒﻘﻴﺔ ﻣﺨﺘﻠﻔﺔ ﻟﻠﻤﺸﻐﻠﻴﻦ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺇﺫﺍ ﺗﻢ ﺗﻌﻴﻴﻦ ﺃﺳﺒﻘﻴﺔ ﺃﻋﻠﻰ ﻣﻦ ‪) +‬‬
‫ﺣﺴﺐﺍﻟﻠﻐﺔ‬

‫‪.1‬ﻻﺣﻆ ﺃﻧﻪ ﻣﻦ ﺍﻟﻤﺴﺘﺤﻴﻞ ﺭﻳﺎﺿﻴﺎً ﺗﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ ﻛﺎﻧﺖ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺘﻌﺴﻔﻴﺔ ﻏﺎﻣﻀﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪124‬‬

‫ﻣﺼﻤﻢ( ‪ ،‬ﺳﻴﺘﻢ ﺍﻟﻀﺮﺏ ﺃﻭﻻ ً‪ ،‬ﺑﻐﺾ ﺍﻟﻨﻈﺮ ﻋﻦ ﺗﺮﺗﻴﺐ ﻇﻬﻮﺭ ﺍﻟﻌﺎﻣﻠﻴﻦ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮ‪.‬‬

‫ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ‪ ،‬ﻳﻤﻜﻦ ﻟﻠﻘﻮﺍﻋﺪ ﺃﻥ ﺗﺼﻒ ﺑﻨﻴﺔ ﻧﺤﻮﻳﺔ ﻣﻌﻴﻨﺔ ﺑﺤﻴﺚ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﺟﺰء‬
‫ﻣﻦﻣﻌﻨﻰ ﺍﻟﻬﻴﻜﻞ ﻣﻦ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ‪ .‬ﻋﻠﻰ ﻭﺟﻪ ﺍﻟﺨﺼﻮﺹ ‪ ،‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺣﻘﻴﻘﺔﺃﻥ ﻋﺎﻣﻞ ﺍﻟﺘﺸﻐﻴﻞ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﺤﺴﺎﺑﻲ ﻳﺘﻢ ﺇﻧﺸﺎﺅﻩ ﻓﻲ ﻣﺴﺘﻮﻯ ﺃﺩﻧﻰ ﻓﻲ ﺷﺠﺮﺓ‬
‫ﺍﻟﺘﺤﻠﻴﻞ)ﻭﺑﺎﻟﺘﺎﻟﻲ ﻳﺠﺐ ﺗﻘﻴﻴﻤﻪ ﺃﻭﻻ ً( ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺃﻧﻪ ﻟﻪ ﺃﺳﺒﻘﻴﺔ ﻋﻠﻰ ﻋﺎﻣﻞ ﺗﻢ ﺇﻧﺘﺎﺟﻪ ﺃﻋﻠﻰ ﻓﻲ‬
‫ﺍﻟﺸﺠﺮﺓ‪.‬ﻓﻲ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻷﻭﻟﻰ ﺑﺎﻟﺸﻜﻞ ‪ ، 3.2‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺘﻢ ﺇﻧﺸﺎء ﻋﺎﻣﻞ‬
‫ﺍﻟﻀﺮﺏﻓﻲ ﻣﺴﺘﻮﻯ ﺃﺩﻧﻰ ﻓﻲ ﺍﻟﺸﺠﺮﺓ ‪ ،‬ﻣﻤﺎ ﻗﺪ ﻳﺸﻴﺮ ﺇﻟﻰ ﺃﻧﻪ ﻟﻪ ﺍﻷﺳﺒﻘﻴﺔ ﻋﻠﻰ ﻋﺎﻣﻞ ﺍﻹﺿﺎﻓﺔ‬
‫ﻓﻲﺍﻟﺘﻌﺒﻴﺮ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﺜﺎﻧﻴﺔ ﺗﺸﻴﺮ ﺇﻟﻰ ﺍﻟﻌﻜﺲ ﺗﻤﺎﻣﺎً‪ .‬ﻟﺬﻟﻚ ﻳﺒﺪﻭ ﺃﻥ‬
‫ﺷﺠﺮﺗﺎﺍﻟﺘﺤﻠﻴﻞ ﺗﺸﻴﺮﺍﻥ ﺇﻟﻰ ﻣﻌﻠﻮﻣﺎﺕ ﺃﺳﺒﻘﻴﺔ ﻣﺘﻀﺎﺭﺑﺔ‪.‬‬

‫ﻻﺣﻆﺃﻧﻪ ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻗﻮﺍﻋﺪ ﺍﻟﻤﺜﺎﻝ ‪ 3.2‬ﻟﻴﺴﺖ ﻏﺎﻣﻀﺔ ‪ ،‬ﻓﺈﻥ ﺗﺮﺗﻴﺐ ﺍﻷﺳﺒﻘﻴﺔ‬
‫ﻟﻤﺸﻐﻠﻴﻬﺎﻟﻴﺲ ﻫﻮ ﺍﻟﺘﺮﺗﻴﺐ ﺍﻟﻤﻌﺘﺎﺩ‪ .‬ﻓﻲ ﻫﺬﻩ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ‪ ،‬ﻓﺈﻥ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﻟﺠﻤﻠﺔ ﻣﻊ‬
‫ﻋﻮﺍﻣﻞﺗﺸﻐﻴﻞ ﻣﺘﻌﺪﺩﺓ ‪ ،‬ﺑﻐﺾ ﺍﻟﻨﻈﺮ ﻋﻦ ﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﻤﻌﻴﻨﺔ ‪ ،‬ﻟﻬﺎ ﻋﺎﻣﻞ ﺍﻟﺘﺸﻐﻴﻞ ﺍﻟﻤﻮﺟﻮﺩ ﻓﻲ‬
‫ﺃﻗﺼﻰﺍﻟﻴﻤﻴﻦ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮ ﻋﻨﺪ ﺃﺩﻧﻰ ﻧﻘﻄﺔ ﻓﻲ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ‪ ،‬ﻣﻊ ﺗﺤﺮﻙ ﺍﻟﻌﻮﺍﻣﻞ ﺍﻷﺧﺮﻯ ﻓﻲ‬
‫ﺍﻟﺸﺠﺮﺓﻟﻸﻋﻠﻰ ﺗﺪﺭﻳﺠﻴﺎ ًﻛﻠﻤﺎ ﺗﺤﺮﻙ ﺍﻟﻤﺮء ﻋﻠﻰ ﺍﻟﻴﺴﺎﺭ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻓﻲ‬
‫ﺍﻟﺘﻌﺒﻴﺮﺃ ‪ +‬ﺏ * ﺝ ‪* ،‬ﻫﻮ ﺍﻷﺩﻧﻰ ﻓﻲ ﺍﻟﺸﺠﺮﺓ ‪ ،‬ﻣﻤﺎ ﻳﺸﻴﺮ ﺇﻟﻰ ﺃﻧﻪ ﻳﺠﺐ ﺍﻟﻘﻴﺎﻡ ﺑﻪ ﺃﻭﻻ‪ ً.‬ﻭﻣﻊ‬
‫ﺫﻟﻚ ‪،‬ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮﺃ * ﺏ ‪ +‬ﺝ ‪+ ،‬ﻫﻮ ﺍﻷﺩﻧﻰ ‪ ،‬ﻣﻤﺎ ﻳﺸﻴﺮ ﺇﻟﻰ ﺃﻧﻪ ﻳﺠﺐ ﺍﻟﻘﻴﺎﻡ ﺑﻪ ﺃﻭﻻ‪ً.‬‬

‫ﻳﻤﻜﻦﻛﺘﺎﺑﺔ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺒﺴﻴﻄﺔ ﺍﻟﺘﻲ ﻛﻨﺎ ﻧﻨﺎﻗﺸﻬﺎ ﻭﺍﻟﺘﻲ ﻻ ﻟﺒﺲ ﻓﻴﻬﺎ‬
‫ﻭﺗﺤﺪﺩﺃﺳﺒﻘﻴﺔ ﻣﺘﺴﻘﺔ ﻟـ‬
‫‪ +‬ﻭ* ‪ ،‬ﺑﻐﺾ ﺍﻟﻨﻈﺮ ﻋﻦ ﺍﻟﺘﺮﺗﻴﺐ ﺍﻟﺬﻱ ﺗﻈﻬﺮ ﺑﻪ ﺍﻟﻌﻮﺍﻣﻞ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮ‪ .‬ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺍﻟﺘﺮﺗﻴﺐ‬
‫ﺍﻟﺼﺤﻴﺢﺑﺎﺳﺘﺨﺪﺍﻡ ﺭﻣﻮﺯ ﻏﻴﺮ ﻧﻬﺎﺉﻴﺔ ﻣﻨﻔﺼﻠﺔ ﻟﺘﻤﺜﻴﻞ ﻣﻌﺎﻣﻼﺕ ﺍﻟﻤﺸﻐﻠﻴﻦ ﺍﻟﺬﻳﻦ ﻟﺪﻳﻬﻢ‬
‫ﺃﺳﺒﻘﻴﺔﻣﺨﺘﻠﻔﺔ‪ .‬ﻫﺬﺍ ﻳﺘﻄﻠﺐ ﻗﻮﺍﻋﺪ ﺇﺿﺎﻓﻴﺔ ﻏﻴﺮ ﻧﻬﺎﺉﻴﺔ ﻭﺑﻌﺾ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺠﺪﻳﺪﺓ‪ .‬ﺑﺪﻻ ًﻣﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻡ>‪ <expr‬ﻟﻜﻞ ﻣﻦ ﺍﻟﻤﻌﺎﻣﻠﻴﻦ ‪ +‬ﻭ * ‪ ،‬ﻳﻤﻜﻨﻨﺎ ﺍﺳﺘﺨﺪﺍﻡ ﺛﻼﺙ ﻣﻌﺎﻣﻼﺕ ﻏﻴﺮ ﻧﻬﺎﺉﻴﺔ‬
‫ﻟﺘﻤﺜﻴﻞﺍﻟﻤﻌﺎﻣﻼﺕ ‪ ،‬ﻣﻤﺎ ﻳﺴﻤﺢ ﻟﻠﻘﻮﺍﻋﺪ ﺑﻔﺮﺽ ﻋﻮﺍﻣﻞ ﻣﺨﺘﻠﻔﺔ ﻋﻠﻰ ﻣﺴﺘﻮﻳﺎﺕ ﻣﺨﺘﻠﻔﺔ ﻓﻲ‬
‫ﺷﺠﺮﺓﺍﻟﺘﺤﻠﻴﻞ‪ .‬ﺇﺫﺍ ﻛﺎﻥ >‪ <expr‬ﻫﻮ ﺭﻣﺰ ﺍﻟﺠﺬﺭ ﻟﻠﺘﻌﺒﻴﺮﺍﺕ ‪ ،‬ﻓﻴﻤﻜﻦ ﺇﺟﺒﺎﺭ ‪ +‬ﻋﻠﻰ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ‬
‫ﺃﻋﻠﻰﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﻣﻦ ﺧﻼﻝ ﺟﻌﻞ >‪ <expr‬ﻣﺒﺎﺷﺮﺓ ﺗﻮﻟﺪ ﻋﻮﺍﻣﻞ ‪ +‬ﻓﻘﻂ ‪ ،‬ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺍﻟﻤﻌﺎﻣﻞﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻲ ﺍﻟﺠﺪﻳﺪ ‪> ،‬ﻧﺺ< ‪ ،‬ﻛﻤﻌﺎﻣﻞ ﺃﻳﻤﻦ ﻟـ ‪ .+‬ﺑﻌﺪ ﺫﻟﻚ ‪ ،‬ﻳﻤﻜﻨﻨﺎ ﺗﺤﺪﻳﺪ >ﻧﺺ<‬
‫ﻹﻧﺸﺎءﻋﻮﺍﻣﻞ * ‪ ،‬ﺑﺎﺳﺘﺨﺪﺍﻡ >ﻧﺺ< ﻛﻤﻌﺎﻣﻞ ﺃﻳﺴﺮ ﻭﻣﻌﺎﻣﻞ ﻏﻴﺮ ﻧﻬﺎﺉﻲ ﺟﺪﻳﺪ ‪ > ،‬ﻋﺎﻣﻞ< ‪،‬‬
‫ﻛﻤﻌﺎﻣﻞﺣﻘﻬﺎ‪ .‬ﺍﻵﻥ ‪ ،‬ﺳﺘﻜﻮﻥ * ﺩﺍﺉﻤﺎً ﺃﻗﻞ ﻓﻲ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ‪ ،‬ﻷﻧﻬﺎ ﺑﺒﺴﺎﻃﺔ ﺃﺑﻌﺪ ﻣﻦ ﺭﻣﺰ‬
‫ﺍﻟﺒﺪﺍﻳﺔﻋﻦ ‪ +‬ﻓﻲ ﻛﻞ ﺍﺷﺘﻘﺎﻕ‪ .‬ﻗﻮﺍﻋﺪ ﺍﻟﻤﺜﺎﻝ ‪ 3.4‬ﻫﻲ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻘﻮﺍﻋﺪ‪.‬‬
‫‪125‬‬ ‫‪3.3‬ﺍﻟﻄﺮﻕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‬

‫ﻗﻮﺍﻋﺪﻧﺤﻮﻳﺔ ﻻ ﻟﺒﺲ ﻓﻴﻬﺎ ﻟﻠﺘﻌﺒﻴﺮﺍﺕ‬ ‫ﻣﺜﺎﻝ‪3.4‬‬


‫>ﺗﻌﻴﻴﻦ<→ >ﻣﻌﺮﻑ< = >‪> <expr‬‬
‫ﻣﻌﺮﻑ<→ﺃ | ﺏ | ﺝ‬
‫<‪<> →>expr‬ﻧﺺ> ‪expr< +‬‬
‫| >ﺍﻟﻤﺼﻄﻠﺢ<‬

‫>ﻧﺺ<→ >ﺍﻟﻤﺼﻄﻠﺢ< * >ﺍﻟﻌﺎﻣﻞ<‬


‫| >ﻋﺎﻣﻞ<‬
‫>ﺍﻟﻌﺎﻣﻞ<→ )>ﺇﻛﺴﺒﺮ<(‬
‫| >ﻣﻌﺮﻑ<‬

‫ﺗﻮﻟﺪﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻓﻲ ﺍﻟﻤﺜﺎﻝ ‪ 3.4‬ﻧﻔﺲ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﻤﺜﺎﻟﻴﻦ‬


‫‪3.2‬ﻭ ‪ ، 3.3‬ﻭﻟﻜﻨﻬﺎ ﻻ ﻟﺒﺲ ﻓﻴﻬﺎ ﻭﺗﺤﺪﺩ ﺗﺮﺗﻴﺐ ﺍﻷﺳﺒﻘﻴﺔ ﺍﻟﻤﻌﺘﺎﺩ ﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻀﺮﺏ ﻭﺍﻹﺿﺎﻓﺔ‪.‬‬
‫ﺍﻻﺷﺘﻘﺎﻕﺍﻟﺘﺎﻟﻲ ﻟﻠﺠﻤﻠﺔﺃ = ﺏ ‪ +‬ﺝ * ﺃﻳﺴﺘﺨﺪﻡ ﻗﻮﺍﻋﺪ ﺍﻟﻤﺜﺎﻝ ‪:3.4‬‬

‫>ﺗﻌﻴﻴﻦ< =< >ﻣﻌﺮﻑ< = >‪<expr‬‬


‫=< ﺃ = >ﺇﻛﺴﺒﺮ<‬
‫=< ﺃ = ><ﻧﺺ> ‪expr< +‬‬
‫=< ﺃ = >ﺍﻟﻤﺼﻄﻠﺢ< ‪> +‬ﻧﺺ<‬
‫=< ﺃ = >ﻋﺎﻣﻞ< ‪> +‬ﻧﺺ<‬
‫=< ﺃ = >ﻣﻌﺮﻑ< ‪> +‬ﻧﺺ<‬
‫=< ﺃ = ﺏ ‪> +‬ﺍﻟﻤﺼﻄﻠﺢ<‬
‫=< ﺃ = ﺏ ‪> +‬ﺍﻟﻤﺼﻄﻠﺢ< * >ﺍﻟﻌﺎﻣﻞ<‬
‫=< ﺃ = ﺏ ‪> +‬ﻋﺎﻣﻞ< * >ﺍﻟﻌﺎﻣﻞ<‬
‫=< ﺃ = ﺏ ‪> +‬ﻣﻌﺮﻑ< * >ﻋﺎﻣﻞ<‬
‫=< ﺃ = ﺏ ‪ +‬ﺝ * >ﻋﺎﻣﻞ<‬
‫=< ﺃ = ﺏ ‪ +‬ﺝ * >ﻣﻌﺮﻑ<‬
‫=< ﺃ = ﺏ ‪ +‬ﺝ * ﺃ‬

‫ﻳﺘﻢﻋﺮﺽ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻔﺮﻳﺪﺓ ﻟﻬﺬﻩ ﺍﻟﺠﻤﻠﺔ ‪ ،‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻗﻮﺍﻋﺪ ﺍﻟﻤﺜﺎﻝ ‪ ، 3.4‬ﻓﻲ ﺍﻟﺸﻜﻞ‬
‫‪.3.3‬‬
‫ﺍﻟﻌﻼﻗﺔﺑﻴﻦ ﺃﺷﺠﺎﺭ ﺍﻟﺘﺤﻠﻴﻞ ﻭﺍﻻﺷﺘﻘﺎﻗﺎﺕ ﻗﺮﻳﺒﺔ ﺟﺪﺍً‪ :‬ﻳﻤﻜﻦ ﺑﺴﻬﻮﻟﺔ ﺇﻧﺸﺎء ﺃﻱ ﻣﻨﻬﻤﺎ ﻣﻦ‬
‫ﺍﻵﺧﺮ‪.‬ﻛﻞ ﺍﺷﺘﻘﺎﻕ ﺑﻘﻮﺍﻋﺪ ﻻ ﻟﺒﺲ ﻓﻴﻬﺎ ﻟﻪ ﺷﺠﺮﺓ ﺗﺤﻠﻴﻞ ﻓﺮﻳﺪﺓ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﻩ‬
‫ﺍﻟﺸﺠﺮﺓﻳﻤﻜﻦ ﺗﻤﺜﻴﻠﻬﺎ ﺑﻤﺸﺘﻘﺎﺕ ﻣﺨﺘﻠﻔﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺍﻻﺷﺘﻘﺎﻕ ﺍﻟﺘﺎﻟﻲ ﻟﻠﺠﻤﻠﺔ‬

‫ﺃ= ﺏ ‪ +‬ﺝ * ﺃﻳﺨﺘﻠﻒ ﻋﻦ ﺍﺷﺘﻘﺎﻕ ﻧﻔﺲ ﺍﻟﺠﻤﻠﺔ ﺍﻟﻮﺍﺭﺩﺓ ﺳﺎﺑﻘﺎً‪ .‬ﻫﺬﺍ ﺍﺷﺘﻘﺎﻕ ﺃﻗﺼﻰ ﺍﻟﻴﻤﻴﻦ ‪،‬‬
‫ﺑﻴﻨﻤﺎﺍﻟﺴﺎﺑﻖ ﻫﻮ ﺃﻗﺼﻰ ﺍﻟﻴﺴﺎﺭ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻳﺘﻢ ﺗﻤﺜﻴﻞ ﻛﻼ ﺍﻟﻤﺸﺘﻘﻴﻦ ﻣﻦ ﺧﻼﻝ ﻧﻔﺲ ﺷﺠﺮﺓ‬
‫ﺍﻟﺘﺤﻠﻴﻞ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪126‬‬

‫>ﺗﻌﻴﻴﻦ< =< >ﻣﻌﺮﻑ< = >‪<expr‬‬


‫=< >ﻣﻌﺮﻑ< = >‪> + <expr‬ﻧﺺ<‬
‫=< >ﻣﻌﺮﻑ< = >‪> + <expr‬ﻧﺺ< * >ﻋﺎﻣﻞ<‬
‫=< >ﻣﻌﺮﻑ< = >‪> + <expr‬ﻧﺺ< * >ﻣﻌﺮﻑ<‬
‫=< >ﻣﻌﺮﻑ< = >‪> + <expr‬ﻧﺺ< *ﺃ =<‬
‫>ﻣﻌﺮﻑ< = >‪> + <expr‬ﺍﻟﻌﺎﻣﻞ< *ﺃ =<‬
‫>ﻣﻌﺮﻑ< = >‪* <expr< + >id‬ﺃ =< >‬
‫ﻣﻌﺮﻑ< = >‪+ <expr‬ﺝ * ﺃ =< >ﻣﻌﺮﻑ<‬
‫= >ﻧﺺ< ‪+‬ﺝ * ﺃ =< >ﻣﻌﺮﻑ< = >ﺍﻟﻌﺎﻣﻞ‬
‫< ‪+‬ﺝ * ﺃ =< >ﻣﻌﺮﻑ< = >ﻣﻌﺮﻑ< ‪+‬ﺝ * ﺃ‬
‫=< >ﻣﻌﺮﻑ< =ﺏ ‪ +‬ﺝ * ﺃ =< ﺃ = ﺏ ‪ +‬ﺝ *‬
‫ﺃ‬

‫>ﺗﻌﻴﻴﻦ<‬ ‫ﺍﻟﺸﻜﻞ‪3.3‬‬

‫ﺷﺠﺮﺓﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻔﺮﻳﺪﺓ‬
‫<‪>expr‬‬ ‫=‬ ‫<‪>id‬‬ ‫ﻝﺃ = ﺏ ‪ +‬ﺝ * ﺃ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﻻ ﻟﺒﺲ ﻓﻴﻪ‬
‫ﻗﻮﺍﻋﺪ‬
‫>ﻧﺺ<‬ ‫‪+‬‬ ‫<‪>expr‬‬ ‫ﺃ‬

‫>ﺍﻟﻌﺎﻣﻞ<‬ ‫*‬ ‫>ﻧﺺ<‬ ‫>ﻧﺺ<‬

‫<‪>id‬‬ ‫>ﺍﻟﻌﺎﻣﻞ<‬ ‫>ﺍﻟﻌﺎﻣﻞ<‬

‫ﺃ‬ ‫<‪>id‬‬ ‫<‪>id‬‬

‫ﺝ‬ ‫ﺏ‬

‫‪3.3.1.9‬ﺍﺗﺤﺎﺩ ﺍﻟﻤﺸﻐﻠﻴﻦ‬
‫ﻋﻨﺪﻣﺎﻳﺘﻀﻤﻦ ﺗﻌﺒﻴﺮ ﻋﺎﻣﻠﻴﻦ ﻟﻬﻤﺎ ﻧﻔﺲ ﺍﻷﻭﻟﻮﻳﺔ )ﻣﺜﻞ‬
‫* ﻭ ‪ /‬ﻋﺎﺩﺓ ﻣﺎ ﻳﻜﻮﻥ( ‪ -‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪،‬ﺃ ‪ /‬ﺏ * ﺝ ‪-‬ﻣﻄﻠﻮﺏ ﻗﺎﻋﺪﺓ ﺩﻻﻟﻴﺔ ﻟﺘﺤﺪﻳﺪ ﺃﻳﻬﺎ‬
‫ﻳﺠﺐﺃﻥ ﻳﻜﻮﻥ ﻟﻪ ﺍﻷﺳﺒﻘﻴﺔ‪2.‬ﻫﺬﻩ ﺍﻟﻘﺎﻋﺪﺓ ﺗﺴﻤﻰﺍﻟﺘﺮﺍﺑﻄﻴﺔ‪.‬‬

‫‪.2‬ﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﺬﻱ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺗﻜﺮﺭﻳﻦ ﻟﻨﻔﺲ ﺍﻟﻌﺎﻣﻞ ﻟﻪ ﻧﻔﺲ ﺍﻟﻤﺸﻜﻠﺔ ؛ ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ‪ ،‬ﺃ ‪ /‬ﺏ ‪ /‬ﺝ‪.‬‬
‫‪127‬‬ ‫‪3.3‬ﺍﻟﻄﺮﻕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‬

‫ﻛﻤﺎﻛﺎﻥ ﺍﻟﺤﺎﻝ ﻣﻊ ﺍﻷﺳﺒﻘﻴﺔ ‪ ،‬ﻗﺪ ﺗﺸﻴﺮ ﻗﻮﺍﻋﺪ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺑﺸﻜﻞ ﺻﺤﻴﺢ ﺇﻟﻰ ﺍﺭﺗﺒﺎﻁ‬
‫ﺍﻟﻤﺸﻐﻞ‪.‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﻤﺜﺎﻝ ﺍﻟﺘﺎﻟﻲ ﻟﺒﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ‪:‬‬

‫ﺃ= ﺏ ‪ +‬ﺝ ‪ +‬ﺃ‬

‫ﻳﺘﻢﻋﺮﺽ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﻟﻬﺬﻩ ﺍﻟﺠﻤﻠﺔ ‪ ،‬ﻛﻤﺎ ﻫﻮ ﻣﺤﺪﺩ ﻓﻲ ﻗﻮﺍﻋﺪ ﺍﻟﻤﺜﺎﻝ ‪ ، 3.4‬ﻓﻲ ﺍﻟﺸﻜﻞ‬
‫‪.3.4‬‬
‫ﺗﻮﺿﺢﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ 3.4‬ﻋﺎﻣﻞ ﺍﻹﺿﺎﻓﺔ ﺍﻷﻳﺴﺮ ﺃﻗﻞ ﻣﻦ ﻋﺎﻣﻞ ﺍﻹﺿﺎﻓﺔ‬
‫ﺍﻷﻳﻤﻦ‪.‬ﻫﺬﺍ ﻫﻮ ﺍﻟﺘﺮﺗﻴﺐ ﺍﻟﺼﺤﻴﺢ ﺇﺫﺍ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻔﺘﺮﺽ ﺃﻥ ﺗﻜﻮﻥ ﺍﻹﺿﺎﻓﺔ ﺍﺭﺗﺒﺎﻃﻴﺔ ‪ ،‬ﻭﻫﻮ ﺃﻣﺮ‬
‫ﻧﻤﻮﺫﺟﻲ‪.‬ﻓﻲ ﻣﻌﻈﻢ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻳﻜﻮﻥ ﺍﺭﺗﺒﺎﻁ ﺍﻹﺿﺎﻓﺔ ﻓﻲ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻏﻴﺮ ﺫﻱ ﺻﻠﺔ‪ .‬ﻓﻲ‬
‫ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ‪،‬ﺗﻌﺘﺒﺮ ﺍﻟﺠﻤﻊ ﺗﺮﺍﺑﻄﻴﺔ ‪ ،‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻥ ﺃﻭﺍﻣﺮ ﺍﻟﺘﻘﻴﻴﻢ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ﺍﻟﻴﻤﻨﻰ ﻭﺍﻟﻴﺴﺮﻯ‬
‫ﺗﻌﻨﻲﻧﻔﺲ ﺍﻟﺸﻲء‪ .‬ﺇﻧﻪ‪) ،‬ﺃ ‪ +‬ﺏ( ‪ +‬ﺝ = ﺃ ‪) +‬ﺏ ‪ +‬ﺝ(‪.‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﺇﺿﺎﻓﺔ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ‬
‫ﻓﻲﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻟﻴﺴﺖ ﺑﺎﻟﻀﺮﻭﺭﺓ ﺗﺮﺍﺑﻄﻴﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺍﻓﺘﺮﺽ ﺃﻥ ﻗﻴﻢ ﺍﻟﻔﺎﺻﻠﺔ‬
‫ﺍﻟﻌﺎﺉﻤﺔﺗﺨﺰﻥ ﺳﺒﻌﺔ ﺃﺭﻗﺎﻡ ﻣﻦ ﺍﻟﺪﻗﺔ‪ .‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﻣﺸﻜﻠﺔ ﺟﻤﻊ ‪ 11‬ﺭﻗﻤﺎً ﻣﻌﺎً ‪ ،‬ﺣﻴﺚ‬
‫ﻳﻜﻮﻥﺃﺣﺪ ﺍﻷﺭﻗﺎﻡ ﻫﻮ ‪710‬‬

‫ﻭﺍﻟﻌﺸﺮﺓﺍﻷﺧﺮﻯ ﻫﻲ ‪ .1‬ﺇﺫﺍ ﺗﻤﺖ ﺇﺿﺎﻓﺔ ﻛﻞ ٍّﻣﻦ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﻐﻴﺮﺓ )ﺍﻵﺣﺎﺩ( ﺇﻟﻰ ﺍﻟﻌﺪﺩ ﺍﻟﻜﺒﻴﺮ ‪،‬‬
‫ﻭﺍﺣﺪﺍًﺗﻠﻮ ﺍﻵﺧﺮ ‪ ،‬ﻓﻼ ﻳﻮﺟﺪ ﺗﺄﺛﻴﺮ ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﻌﺪﺩ ‪ ،‬ﻷﻥ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﻐﻴﺮﺓ ﺗﺤﺪﺙ ﻓﻲ ﺍﻟﺨﺎﻧﺔ‬
‫ﺍﻟﺜﺎﻣﻨﺔﻣﻦ ﺍﻟﻌﺪﺩ ﺍﻟﻜﺒﻴﺮ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺇﺫﺍ ﺗﻢ ﺟﻤﻊ ﺍﻷﺭﻗﺎﻡ ﺍﻟﺼﻐﻴﺮﺓ ﻣﻌﺎً ﺃﻭﻻ ًﻭﺃﺿﻴﻔﺖ ﺍﻟﻨﺘﻴﺠﺔ‬
‫ﺇﻟﻰﺍﻟﻌﺪﺩ ﺍﻟﻜﺒﻴﺮ ‪ ،‬ﺗﻜﻮﻥ ﺍﻟﻨﺘﻴﺠﺔ ﺑﺪﻗﺔ ﻣﻜﻮﻧﺔ ﻣﻦ ﺳﺒﻌﺔ ﺃﺭﻗﺎﻡ ﻫﻲ ‪ .710 * 1.000001‬ﺍﻟﻄﺮﺡ‬
‫ﻭﺍﻟﻘﺴﻤﺔﻟﻴﺴﺎ ﺗﺮﺍﺑﻄﻴﻴﻦ ‪ ،‬ﺳﻮﺍء ﻓﻲ ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ﺃﻭ ﻓﻲ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻗﺪ ﻳﻜﻮﻥ ﺍﻻﺭﺗﺒﺎﻁ‬
‫ﺍﻟﺼﺤﻴﺢﺿﺮﻭﺭﻳﺎً ﻟﻠﺘﻌﺒﻴﺮ ﺍﻟﺬﻱ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺃﻱ ﻣﻨﻬﻤﺎ‪.‬‬

‫>ﺗﻌﻴﻴﻦ<‬ ‫ﺍﻟﺸﻜﻞ‪3.4‬‬

‫ﺷﺠﺮﺓﺗﺤﻠﻴﻞ ﻝﺃ = ﺏ‬
‫<‪>expr‬‬ ‫=‬ ‫<‪>id‬‬ ‫‪ +‬ﺝ ‪ +‬ﺃﻳﻮﺿﺢ ﺍﺭﺗﺒﺎﻁ‬

‫ﺇﺿﺎﻓﺔ‬
‫>ﻧﺺ<‬ ‫‪+‬‬ ‫<‪>expr‬‬ ‫ﺃ‬

‫>ﺍﻟﻌﺎﻣﻞ<‬ ‫>ﻧﺺ<‬ ‫‪+‬‬ ‫<‪>expr‬‬

‫<‪>id‬‬ ‫>ﺍﻟﻌﺎﻣﻞ<‬ ‫>ﻧﺺ<‬

‫ﺃ‬ ‫<‪>id‬‬ ‫>ﺍﻟﻌﺎﻣﻞ<‬

‫ﺝ‬ ‫<‪>id‬‬

‫ﺏ‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪128‬‬

‫ﻋﻨﺪﻣﺎﻳﻈﻬﺮ ‪ LHS‬ﺃﻳﻀﺎً ﻓﻲ ﺑﺪﺍﻳﺔ ﻗﺎﻋﺪﺓ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ‪ ،‬ﻳﻘُﺎﻝ ﺃﻥ ﺍﻟﻘﺎﻋﺪﺓ ﻫﻲ ﻛﺬﻟﻚ‬


‫ﺍﻟﻴﺴﺎﺭﺍﻟﻌﻮﺩﻱ‪ .‬ﺗﺤﺪﺩ ﻫﺬﻩ ﺍﻟﻌﻮﺩﻳﺔ ﺍﻟﻴﺴﺮﻯ ﺍﻻﺭﺗﺒﺎﻁ ﺍﻷﻳﺴﺮ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺆﺩﻱ‬
‫ﺍﻟﺘﻜﺮﺍﺭﺍﻷﻳﺴﺮ ﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮ ﻓﻲ ﺍﻟﻤﺜﺎﻝ ‪ 3.4‬ﺇﻟﻰ ﺟﻌﻞ ﻛﻞ ﻣﻦ ﺍﻟﺠﻤﻊ ﻭﺍﻟﻀﺮﺏ ﺍﻟﺘﺮﺍﺑﻂ ﺍﻷﻳﺴﺮ‪.‬‬
‫ﻟﺴﻮءﺍﻟﺤﻆ ‪ ،‬ﻻ ﺗﺴﻤﺢ ﺍﻟﻌﻮﺩﻳﺔ ﺍﻟﻴﺴﺮﻯ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺑﻌﺾ ﺧﻮﺍﺭﺯﻣﻴﺎﺕ ﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ‬
‫ﺍﻟﻤﻬﻤﺔ‪.‬ﻋﻨﺪ ﺍﺳﺘﺨﺪﺍﻡ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺎﺕ ‪ ،‬ﻳﺠﺐ ﺗﻌﺪﻳﻞ ﺍﻟﻘﻮﺍﻋﺪ ﻹﺯﺍﻟﺔ ﺍﻟﻌﻮﺩﻳﺔ ﺍﻟﻴﺴﺮﻯ‪.‬‬
‫ﻭﻫﺬﺍﺑﺪﻭﺭﻩ ﻳﻤﻨﻊ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻣﻦ ﺍﻟﺘﺤﺪﻳﺪ ﺍﻟﺪﻗﻴﻖ ﻟﺘﺮﻙ ﻋﻮﺍﻣﻞ ﻣﻌﻴﻨﺔ ﺗﺮﺍﺑﻄﻴﺔ‪ .‬ﻟﺤﺴﻦ‬
‫ﺍﻟﺤﻆ ‪،‬ﻳﻤﻜﻦ ﻟﻠﻤﺘﺮﺟﻢ ﺃﻥ ﻳﻔﺮﺽ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ﺍﻟﻴﺴﺮﻯ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻘﻮﺍﻋﺪ ﻻ ﺗﻤﻠﻴﻬﺎ‪.‬‬

‫ﻓﻲﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﻮﻓﺮﻫﺎ ‪ ،‬ﻓﺈﻥ ﻋﺎﻣﻞ ﺍﻷﺳﻲ ﻫﻮ ﺍﺭﺗﺒﺎﻁ ﺻﺤﻴﺢ‪ .‬ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ‬
‫ﺍﻻﺭﺗﺒﺎﻁﺍﻟﺼﺤﻴﺢ ‪ ،‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﻮﺩﻳﺔ ﺍﻟﺼﺤﻴﺤﺔ‪ .‬ﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﻨﺤﻮﻳﺔ ﻫﻲﺍﻟﻌﻮﺩﻳﺔ ﺍﻟﺼﺤﻴﺤﺔ‬
‫ﺇﺫﺍﻇﻬﺮ ‪ LHS‬ﻓﻲ ﺍﻟﻄﺮﻑ ﺍﻷﻳﻤﻦ ﻣﻦ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ‪ .‬ﻗﻮﺍﻋﺪ ﻣﺜﻞ‬

‫>ﺍﻟﻌﺎﻣﻞ<→ ><‪exp< ** >factor‬‬


‫<‪| >exp‬‬
‫<‪>) →>exp‬ﺇﻛﺴﺒﺮ<(‬
‫| ﻣﻌﺮﻑ‬

‫ﻳﻤﻜﻦﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻟﻮﺻﻒ ﺍﻷﺱ ﻋﻠﻰ ﺃﻧﻪ ﻋﺎﻣﻞ ﺭﺑﻂ ﺍﻟﺤﻖ‪.‬‬

‫‪3.3.1.10‬ﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﻻ ﻟﺒﺲ ﻓﻴﻬﺎ ﻟـﺇﺫﺍ ‪ ،‬ﺛﻢ ‪ ،‬ﺁﺧﺮ‬


‫ﻗﻮﺍﻋﺪ‪ BNF‬ﻝ ‪Ada‬ﺇﺫﺍ ‪ ،‬ﺛﻢ ‪ ،‬ﺁﺧﺮﺍﻟﺒﻴﺎﻥ ﻛﺎﻟﺘﺎﻟﻲ‪:‬‬

‫<‪→>if_stmt‬ﻟﻮ><‪logic_expr‬ﺛﻢ><‪stmt‬‬
‫ﻟﻮ><‪logic_expr‬ﺛﻢ><‪stmt‬ﺁﺧﺮ><‪stmt‬‬
‫ﺇﺫﺍﻛﺎﻥ ﻟﺪﻳﻨﺎ ﺃﻳﻀﺎً >‪> →<stmt‬ﻫﺬﻩ ﺍﻟﻘﻮﺍﻋﺪ ﻏﺎﻣﻀﺔ‪ .‬ﺃﺑﺴﻂ ﺷﻜﻞ ﻣﻌﻨﻮﻱ ﻳﻮﺿﺢ ﻫﺬﺍ‬
‫ﺍﻟﻐﻤﻮﺽﻫﻮ ‪if_stmt< ،‬‬

‫ﻟﻮ><‪logic_expr‬ﺛﻢ ﺇﺫﺍ><‪logic_expr‬ﺛﻢ><‪stmt‬ﺁﺧﺮ><‪stmt‬‬

‫ﺗﻈُﻬﺮﺷﺠﺮﺗﺎ ﺍﻟﺘﺤﻠﻴﻞ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ 3.5‬ﻏﻤﻮﺽ ﻫﺬﺍ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﺤﺴﺎﺱ‪ .‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ‬


‫ﺍﻟﻤﺜﺎﻝﺍﻟﺘﺎﻟﻲ ﻟﻬﺬﺍ ﺍﻟﺒﻨﺎء‪:‬‬

‫ﻟﻮﺗﻢ ==ﺣﻘﻴﻘﻲ‬
‫ﺛﻢﺇﺫﺍﺍﻟﻤﺬﻫﺐ == ‪0‬‬
‫ﺛﻢﺍﻟﺤﺎﺻﻞ = ‪ 0‬؛‬
‫ﺁﺧﺮﺍﻟﺤﺎﺻﻞ = ﻋﺪﺩ ‪ /‬ﺩﻳﻦ ؛‬

‫ﺍﻟﻤﺸﻜﻠﺔﻫﻲ ﺃﻧﻪ ﺇﺫﺍ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻌﻠﻴﺎ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ 3.5‬ﻛﺄﺳﺎﺱ ﻟﻠﺘﺮﺟﻤﺔ ‪،‬‬
‫ﻓﺴﻴﺘﻢﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ ‪ else‬ﻋﻨﺪﻣﺎﻣﻨﺘﻬﻲﻟﻴﺲ ﺻﺤﻴﺤﺎً ‪ ،‬ﻭﺭﺑﻤﺎ ﻟﻢ ﻳﻜﻦ ﻫﺬﺍ ﻣﺎ ﻗﺼﺪﻩ ﻣﺆﻟﻒ‬
‫ﺍﻟﺒﻨﺎء‪.‬ﺳﻮﻑ ﻧﺪﺭﺱ ﺍﻟﻤﺸﻜﻼﺕ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﻤﺮﺗﺒﻄﺔ ﺑﻤﺸﻜﻠﺔ ﺍﻻﺭﺗﺒﺎﻁ ﺍﻷﺧﺮﻯ ﻓﻲ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻣﻦ‪.‬‬

‫ﺳﻨﻘﻮﻡﺍﻵﻥ ﺑﺘﻄﻮﻳﺮ ﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﻻ ﻟﺒﺲ ﻓﻴﻬﺎ ﺗﺼﻒ ﺫﻟﻚﻟﻮ‬


‫ﺇﻓﺎﺩﺓ‪.‬ﺣﻜﻢ ﻋﻦﻟﻮﺍﻹﻧﺸﺎءﺍﺕ ﻓﻲ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﻫﻲ ﺃﻥ ﺟﻤﻠﺔ ﺃﺧﺮﻯ ‪ ،‬ﻋﻨﺪ ﻭﺟﻮﺩﻫﺎ ‪،‬‬
‫ﺗﺘﻄﺎﺑﻖﻣﻊ ﺃﻗﺮﺏ ﺟﻤﻠﺔ ﺳﺎﺑﻘﺔ ﻻ ﻣﺜﻴﻞ ﻟﻬﺎﺛﻢ‪.‬‬
‫‪129‬‬ ‫‪3.3‬ﺍﻟﻄﺮﻕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‬

‫<‪>if_stmt‬‬ ‫ﺍﻟﺸﻜﻞ‪3.5‬‬

‫ﺷﺠﺮﺗﺎﺗﺤﻠﻴﻞ ﻣﻤﻴﺰﺗﺎﻥ‬
‫ﻟﻨﻔﺲﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﻤﻌﻨﻮﻱ‬

‫<‪>stmt‬‬ ‫ﺁﺧﺮ‬ ‫<‪>stmt‬‬ ‫ﺛﻢ‬ ‫<‪>logic_expr‬‬ ‫ﻟﻮ‬

‫<‪>if_stmt‬‬

‫<‪>stmt‬‬ ‫ﺛﻢ‬ ‫<‪>logic_expr‬‬ ‫ﻟﻮ‬

‫<‪>if_stmt‬‬

‫ﺛﻢ><‪stmt‬‬ ‫<‪>logic_expr‬‬ ‫ﻟﻮ‬

‫<‪>if_stmt‬‬

‫<‪>stmt‬‬ ‫ﺁﺧﺮ‬ ‫<‪>stmt‬‬ ‫ﺛﻢ‬ ‫ﺇﺫﺍ><‪logic_expr‬‬

‫ﻟﺬﻟﻚ ‪،‬ﻻ ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻫﻨﺎﻙ ﻣﻠﻒﻟﻮﺑﻴﺎﻥ ﺑﺪﻭﻥﺁﺧﺮﺑﻴﻦ ﺃ‬


‫ﺛﻢﻭﻣﻄﺎﺑﻘﺘﻬﺎﺁﺧﺮ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﺑﺎﻟﻨﺴﺒﺔ ﻟﻬﺬﻩ ﺍﻟﺤﺎﻟﺔ ‪ ،‬ﻳﺠﺐ ﺍﻟﺘﻤﻴﻴﺰ ﺑﻴﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﻤﺘﻄﺎﺑﻘﺔ ﻭﺗﻠﻚ‬
‫ﺍﻟﺘﻲﻻ ﻣﺜﻴﻞ ﻟﻬﺎ ‪ ،‬ﺣﻴﺚ ﺗﻜﻮﻥ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻏﻴﺮ ﺍﻟﻤﺘﻄﺎﺑﻘﺔﺁﺧﺮ‪-‬ﺃﻗﻞﻟﻮ‪.‬ﻭﺟﻤﻴﻊ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻷﺧﺮﻯ‬
‫ﻣﺘﻄﺎﺑﻘﺔ‪.‬ﺗﻜﻤﻦ ﻣﺸﻜﻠﺔ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻓﻲ ﺃﻧﻬﺎ ﺗﺘﻌﺎﻣﻞ ﻣﻊ ﺟﻤﻴﻊ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻛﻤﺎ ﻟﻮ‬
‫ﻛﺎﻧﺖﻟﻬﺎ ﺃﻫﻤﻴﺔ ﻧﺤﻮﻳﺔ ﻣﺘﺴﺎﻭﻳﺔ ‪ -‬ﺃﻱ ﻛﻤﺎ ﻟﻮ ﻛﺎﻧﺖ ﺟﻤﻴﻌﻬﺎ ﻣﺘﻄﺎﺑﻘﺔ ‪s‬‬

‫ﻟﻌﻜﺲﻓﺉﺎﺕ ﻣﺨﺘﻠﻔﺔ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻳﺠﺐ ﺍﺳﺘﺨﺪﺍﻡ ﺗﺠﺮﻳﺪﺍﺕ ﻣﺨﺘﻠﻔﺔ ﺃﻭ ﻏﻴﺮ ﻧﻬﺎﺉﻴﺔ‪.‬‬


‫ﺍﻟﻘﻮﺍﻋﺪﺍﻟﻮﺍﺿﺤﺔ ﺍﻟﻤﺒﻨﻴﺔ ﻋﻠﻰ ﻫﺬﻩ ﺍﻷﻓﻜﺎﺭ ﻛﻤﺎ ﻳﻠﻲ‪:‬‬

‫<‪> →>stmt‬ﻣﺘﻄﺎﺑﻘﺔ< | >ﻻ ﻣﺜﻴﻞ ﻟﻪ<‬


‫>ﻣﺘﻄﺎﺑﻖ<→ﻟﻮ><‪logic_expr‬ﺛﻢ>ﻣﺘﻄﺎﺑﻘﺔ<ﺁﺧﺮ>ﻣﺘﻄﺎﺑﻘﺔ<‬
‫| ﺃﻱ ﻋﺒﺎﺭﺓ ﻏﻴﺮ ﺇﺫﺍ‬
‫>ﻻ ﻣﺜﻴﻞ ﻟﻪ<→ﻟﻮ><‪logic_expr‬ﺛﻢ><‪stmt‬‬
‫|ﻟﻮ><‪logic_expr‬ﺛﻢ>ﻣﺘﻄﺎﺑﻘﺔ<ﺁﺧﺮ>ﻻ ﻣﺜﻴﻞ ﻟﻬﺎ<‬
‫ﻫﻨﺎﻙﺷﺠﺮﺓ ﺗﺤﻠﻴﻞ ﻭﺍﺣﺪﺓ ﻣﻤﻜﻨﺔ ‪ ،‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﻟﻘﻮﺍﻋﺪ ‪ ،‬ﻟﻠﺸﻜﻞ ﺍﻟﻤﻌﻨﻮﻱ ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫ﻟﻮ><‪logic_expr‬ﺛﻢ ﺇﺫﺍ><‪logic_expr‬ﺛﻢ><‪stmt‬ﺁﺧﺮ><‪stmt‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪130‬‬

‫ﺍﻟﻤﻤﺘﺪ‪3.3.2 BNF‬‬
‫ﺑﺴﺒﺐﺑﻌﺾ ﺍﻟﻤﻀﺎﻳﻘﺎﺕ ﺍﻟﺒﺴﻴﻄﺔ ﻓﻲ ‪ ، BNF‬ﺗﻢ ﺗﻤﺪﻳﺪﻩ ﺑﻌﺪﺓ ﻃﺮﻕ‪ .‬ﺗﺴﻤﻰ ﻣﻌﻈﻢ‬
‫ﺍﻹﺻﺪﺍﺭﺍﺕﺍﻟﻤﻮﺳﻌﺔ ‪ ، Extended BNF‬ﺃﻭ ﺑﺒﺴﺎﻃﺔ ‪ ، EBNF‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﻟﻴﺴﺖ ﻛﻠﻬﺎ‬
‫ﻣﺘﺸﺎﺑﻬﺔﺗﻤﺎﻣﺎً‪ .‬ﻻ ﺗﻌﺰﺯ ﺍﻻﻣﺘﺪﺍﺩﺍﺕ ﺍﻟﻘﻮﺓ ﺍﻟﻮﺻﻔﻴﺔ ﻟـ ‪ BNF‬؛ ﺇﻧﻬﺎ ﺗﺰﻳﺪ ﻓﻘﻂ ﻣﻦ ﻗﺎﺑﻠﻴﺘﻬﺎ‬
‫ﻟﻠﻘﺮﺍءﺓﻭﺍﻟﻜﺘﺎﺑﺔ‪.‬‬

‫ﻳﺘﻢﺗﻀﻤﻴﻦ ﺛﻼﺛﺔ ﺍﻣﺘﺪﺍﺩﺍﺕ ﺑﺸﻜﻞ ﺷﺎﺉﻊ ﻓﻲ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻣﻦ ‪ .EBNF‬ﻳﺸﻴﺮ‬


‫ﺃﻭﻟﻬﻤﺎﺇﻟﻰ ﺟﺰء ﺍﺧﺘﻴﺎﺭﻱ ﻣﻦ ‪ ، RHS‬ﻣﺤﺪﺩ ﺑﺄﻗﻮﺍﺱ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺃ ﺝﺇﺫﺍ ﻛﺎﻥ ﻏﻴﺮ ﺫﻟﻚ‬
‫ﻳﻤﻜﻦﻭﺻﻒ ﺍﻟﺒﻴﺎﻥ ﺑﺄﻧﻪ‬

‫<‪→>if_stmt‬ﻟﻮ)>ﺍﻟﺘﻌﺒﻴﺮ<( >ﺍﻟﺒﻴﺎﻥ< ]ﺁﺧﺮ>ﺑﻴﺎﻥ<[‬

‫ﺑﺪﻭﻥﺍﺳﺘﺨﺪﺍﻡ ﺍﻷﻗﻮﺍﺱ ‪ ،‬ﺳﻴﺘﻄﻠﺐ ﺍﻟﻮﺻﻒ ﺍﻟﻨﺤﻮﻱ ﻟﻬﺬﺍ ﺍﻟﺒﻴﺎﻥ ﺍﻟﻘﺎﻋﺪﺗﻴﻦ ﺍﻟﺘﺎﻟﻴﺘﻴﻦ‪:‬‬

‫<‪→>if_stmt‬ﻟﻮ)>ﺍﻟﺘﻌﺒﻴﺮ<( >ﺍﻟﺒﻴﺎﻥ<‬
‫|ﻟﻮ)>ﺍﻟﺘﻌﺒﻴﺮ<( >ﺍﻟﺒﻴﺎﻥ<ﺁﺧﺮ>ﺑﻴﺎﻥ<‬

‫ﺍﻻﻣﺘﺪﺍﺩﺍﻟﺜﺎﻧﻲ ﻫﻮ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻷﻗﻮﺍﺱ ﻓﻲ ‪ RHS‬ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺃﻥ ﺍﻟﺠﺰء ﺍﻟﻤﻐﻠﻖ ﻳﻤﻜﻦ ﺗﻜﺮﺍﺭﻩ ﺇﻟﻰ‬
‫ﺃﺟﻞﻏﻴﺮ ﻣﺴﻤﻰ ﺃﻭ ﺗﺮﻛﻪ ﺗﻤﺎﻣﺎً‪ .‬ﻳﺴﻤﺢ ﻫﺬﺍ ﺍﻻﻣﺘﺪﺍﺩ ﺑﺒﻨﺎء ﺍﻟﻘﻮﺍﺉﻢ ﺑﻘﺎﻋﺪﺓ ﻭﺍﺣﺪﺓ ‪ ،‬ﺑﺪﻻ ًﻣﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻌﻮﺩﻳﺔ ﻭﻗﺎﻋﺪﺗﻴﻦ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻤﻜﻦ ﻭﺻﻒ ﻗﻮﺍﺉﻢ ﺍﻟﻤﻌﺮﻓﺎﺕ ﺍﻟﻤﻔﺼﻮﻟﺔ‬
‫ﺑﻔﻮﺍﺻﻞﺑﺎﻟﻘﺎﻋﺪﺓ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫<‪> →>ident_list‬ﺍﻟﻤﻌﺮﻑ< }‪{<identifier> ،‬‬


‫ﻫﺬﺍﻫﻮ ﺍﺳﺘﺒﺪﺍﻝ ﺍﻟﻌﻮﺩﻳﺔ ﺑﺸﻜﻞ ﻣﻦ ﺃﺷﻜﺎﻝ ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﻀﻤﻨﻲ ؛ ﻳﻤﻜﻦ ﺗﻜﺮﺍﺭ ﺍﻟﺠﺰء ﺍﻟﻤﻮﺟﻮﺩ‬
‫ﺩﺍﺧﻞﺍﻷﻗﻮﺍﺱ ﺑﺄﻱ ﻋﺪﺩ ﻣﻦ ﺍﻟﻤﺮﺍﺕ‪.‬‬
‫ﻳﺘﻌﺎﻣﻞﺍﻻﻣﺘﺪﺍﺩ ﺍﻟﻤﺸﺘﺮﻙ ﺍﻟﺜﺎﻟﺚ ﻣﻊ ﺧﻴﺎﺭﺍﺕ ﺍﻻﺧﺘﻴﺎﺭ ﻣﻦ ﻣﺘﻌﺪﺩ‪ .‬ﻋﻨﺪﻣﺎ ﻳﺠﺐ ﺍﺧﺘﻴﺎﺭ‬
‫ﻋﻨﺼﺮﻭﺍﺣﺪ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ‪ ،‬ﺗﻮﺿﻊ ﺍﻟﺨﻴﺎﺭﺍﺕ ﺑﻴﻦ ﻗﻮﺳﻴﻦ ﻭﻳﻔﺼﻞ ﺑﻴﻨﻬﺎ ﻋﺎﻣﻞ ﺍﻟﺘﺸﻐﻴﻞ ‪| ، OR‬‬
‫‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ‪،‬‬

‫>ﻧﺺ<→ >ﺍﻟﻤﺼﻄﻠﺢ< )* | ‪> (٪| /‬ﻋﺎﻣﻞ<‬

‫ﻓﻲ‪ ، BNF‬ﻳﺘﻄﻠﺐ ﻭﺻﻒ ﻫﺬﺍ >ﺍﻟﻤﺼﻄﻠﺢ< ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺜﻼﺙ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫>ﻧﺺ<→ >ﺍﻟﻤﺼﻄﻠﺢ< * >ﺍﻟﻌﺎﻣﻞ<‬


‫| >ﺍﻟﻤﺼﻄﻠﺢ< ‪> /‬ﺍﻟﻌﺎﻣﻞ<‬
‫| >ﺍﻟﻤﺼﻄﻠﺢ<‪> ٪‬ﺍﻟﻌﺎﻣﻞ<‬

‫ﺍﻷﻗﻮﺍﺱﻭﺍﻷﻗﻮﺍﺱ ﻓﻲ ﺍﻣﺘﺪﺍﺩﺍﺕ ‪ EBNF‬ﻫﻲﺍﻟﺮﻣﻮﺯ ﺍﻟﻮﺻﻔﻴﺔ‪ ،‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻬﺎ ﺃﺩﻭﺍﺕ ﺗﺪﻭﻳﻨﻴﺔ‬


‫ﻭﻟﻴﺴﺖﺭﻣﻮﺯﺍً ﻃﺮﻓﻴﺔ ﻓﻲ ﺍﻟﻜﻴﺎﻧﺎﺕ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺘﻲ ﺗﺴﺎﻋﺪ ﻓﻲ ﻭﺻﻔﻬﺎ‪ .‬ﻓﻲ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺘﻲ ﺗﻜﻮﻥ‬
‫ﻓﻴﻬﺎﻫﺬﻩ ﺍﻟﺮﻣﻮﺯ ﺍﻟﻮﺻﻔﻴﺔ ﺃﻳﻀﺎً ﺭﻣﻮﺯﺍً ﻃﺮﻓﻴﺔ ﻓﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻤﻮﺻﻮﻓﺔ ‪ ،‬ﻳﻤﻜﻦ ﺗﺴﻄﻴﺮ ﺃﻭ ﺍﻗﺘﺒﺎﺱ‬
‫ﺍﻟﺤﺎﻻﺕﺍﻟﺘﻲ ﺗﻤﺜﻞ ﺭﻣﻮﺯﺍً ﻃﺮﻓﻴﺔ‪ .‬ﻳﻮﺿﺢ ﺍﻟﻤﺜﺎﻝ ‪ 3.5‬ﺍﺳﺘﺨﺪﺍﻡ ﺍﻷﻗﻮﺍﺱ ﻭﺍﻟﺨﻴﺎﺭﺍﺕ ﺍﻟﻤﺘﻌﺪﺩﺓ‬
‫ﻓﻲﻗﻮﺍﻋﺪ ‪.EBNF‬‬
‫‪131‬‬ ‫‪3.3‬ﺍﻟﻄﺮﻕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ‬

‫ﺇﺻﺪﺍﺭﺍﺕ‪ BNF‬ﻭ ‪ EBNF‬ﻟﻘﻮﺍﻋﺪ ﺍﻟﺘﻌﺒﻴﺮ‬ ‫ﻣﺜﺎﻝ‪3.5‬‬

‫‪BNF:‬‬
‫<‪<> →>expr‬ﻧﺺ> ‪expr< +‬‬
‫| ><ﻧﺺ> ‪expr< -‬‬
‫| >ﺍﻟﻤﺼﻄﻠﺢ<‬
‫>ﻧﺺ<→ >ﺍﻟﻤﺼﻄﻠﺢ< * >ﺍﻟﻌﺎﻣﻞ<‬
‫| >ﺍﻟﻤﺼﻄﻠﺢ< ‪> /‬ﺍﻟﻌﺎﻣﻞ<‬
‫| >ﻋﺎﻣﻞ<‬
‫>ﺍﻟﻌﺎﻣﻞ<→ ><‪exp< ** >factor‬‬
‫<‪>exp‬‬
‫<‪>) →>exp‬ﺇﻛﺴﺒﺮ<(‬
‫|ﺑﻄﺎﻗﺔ ﺗﻌﺮﻳﻒ‬

‫‪EBNF:‬‬
‫<‪> →>expr‬ﺍﻟﻤﺼﻄﻠﺢ< })‪> (- | +‬ﻧﺺ<{ >‬
‫ﻧﺺ<→ >ﺍﻟﻌﺎﻣﻞ< })* | ‪> (/‬ﺍﻟﻌﺎﻣﻞ<{ >ﺍﻟﻌﺎﻣﻞ‬
‫<→ ><‪>) →exp< }** >exp<{ >exp‬ﺇﻛﺴﺒﺮ<‬
‫(‬
‫|ﺑﻄﺎﻗﺔ ﺗﻌﺮﻳﻒ‬

‫ﻗﺎﻋﺪﺓ‪BNF‬‬

‫<‪<> →>expr‬ﻧﺺ> ‪expr< +‬‬

‫ﻳﺤﺪﺩﺑﻮﺿﻮﺡ ‪ -‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ﻳﻔﺮﺽ ‪ -‬ﺍﻟﻌﺎﻣﻞ ‪ +‬ﺍﻟﺬﻱ ﻳﺠﺐ ﺗﺮﻛﻪ ﺗﺮﺍﺑﻄﻴﺎً‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﺇﺻﺪﺍﺭ‬
‫‪، EBNF‬‬

‫<‪> →>expr‬ﺍﻟﻤﺼﻄﻠﺢ< }‪> +‬ﻧﺺ<{‬

‫ﻻﻳﻌﻨﻲ ﺍﺗﺠﺎﻩ ﺍﻟﺘﺠﻤﻊ‪ .‬ﻳﺘﻢ ﺍﻟﺘﻐﻠﺐ ﻋﻠﻰ ﻫﺬﻩ ﺍﻟﻤﺸﻜﻠﺔ ﻓﻲ ﻣﺤﻠﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻋﻠﻰ ﺃﺳﺎﺱ‬
‫ﻗﻮﺍﻋﺪ‪ EBNF‬ﻟﻠﺘﻌﺒﻴﺮﺍﺕ ﻣﻦ ﺧﻼﻝ ﺗﺼﻤﻴﻢ ﻋﻤﻠﻴﺔ ﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻟﻔﺮﺽ ﺍﻻﺭﺗﺒﺎﻁ ﺍﻟﺼﺤﻴﺢ‪.‬‬
‫ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﻫﺬﺍ ﺑﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.4‬‬

‫ﺗﺴﻤﺢﺑﻌﺾ ﺇﺻﺪﺍﺭﺍﺕ ‪ EBNF‬ﺑﺈﺭﻓﺎﻕ ﺧﻂ ﺭﻗﻤﻲ ﻣﺮﺗﻔﻊ ﺑﺎﻟﻘﻮﺱ ﺍﻷﻳﻤﻦ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺣﺪ‬
‫ﺃﻋﻠﻰﻟﻌﺪﺩ ﺍﻟﻤﺮﺍﺕ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻓﻴﻬﺎ ﺗﻜﺮﺍﺭ ﺍﻟﺠﺰء ﺍﻟﻤﺮﻓﻖ‪ .‬ﺃﻳﻀﺎً ‪ ،‬ﺗﺴﺘﺨﺪﻡ ﺑﻌﺾ ﺍﻹﺻﺪﺍﺭﺍﺕ‬
‫ﻋﻼﻣﺔﺍﻟﺠﻤﻊ )‪ (+‬ﺍﻟﻌﻠﻮﻳﺔ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺗﻜﺮﺍﺭ ﻭﺍﺣﺪ ﺃﻭ ﺃﻛﺜﺮ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ‪،‬‬

‫>ﻣﺠﻤﻊ<→ﻳﺒﺪﺃ>{<‪stmt< }>stmt‬ﻧﻬﺎﻳﺔ‬

‫ﻭ‬

‫>ﻣﺠﻤﻊ<→ﻳﺒﺪﺃ}>{<‪+stmt‬ﻧﻬﺎﻳﺔ‬

‫ﻣﺘﻜﺎﻓﺉﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪132‬‬

‫ﻓﻲﺍﻟﺴﻨﻮﺍﺕ ﺍﻷﺧﻴﺮﺓ ‪ ،‬ﻇﻬﺮﺕ ﺑﻌﺾ ﺍﻻﺧﺘﻼﻓﺎﺕ ﻓﻲ ‪ BNF‬ﻭ ‪ .EBNF‬ﻣﻦ ﺑﻴﻦ ﻫﺆﻻء ﻣﺎ‬
‫ﻳﻠﻲ‪:‬‬
‫• ﺑﺪﻻ ًﻣﻦ ﺍﻟﺴﻬﻢ ‪ ،‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻧﻘﻄﺘﻴﻦ ﻭﻳﺘﻢ ﻭﺿﻊ ‪ RHS‬ﻋﻠﻰ ﺍﻟﺴﻄﺮ ﺍﻟﺘﺎﻟﻲ‪.‬‬

‫• ﺑﺪﻻ ًﻣﻦ ﺷﺮﻳﻂ ﻋﻤﻮﺩﻱ ﻟﻔﺼﻞ ‪ RHSs‬ﺍﻟﺒﺪﻳﻠﺔ ‪ ،‬ﻳﺘﻢ ﻭﺿﻌﻬﺎ ﺑﺒﺴﺎﻃﺔ ﻓﻲ ﺧﻄﻮﻁ ﻣﻨﻔﺼﻠﺔ‪.‬‬

‫• ﺑﺪﻻ ًﻣﻦ ﺍﻷﻗﻮﺍﺱ ﺍﻟﻤﺮﺑﻌﺔ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺷﻲء ﻣﺎ ﺍﺧﺘﻴﺎﺭﻱ ‪ ،‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺧﻴﺎﺭ ﺍﻻﺷﺘﺮﺍﻙ‪.‬‬
‫ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ‪،‬‬
‫ﻣﻌﻠﻦﺍﻟﻤﻨﺸﺊ→ﻗﺎﺉﻤﺔ ﺍﻟﻤﻌﻠﻤﺎﺕ ﺍﻟﺮﺳﻤﻴﺔ) ‪SimpleName‬ﻳﺨﺘﺎﺭ‪ ،‬ﻳﻘﺮﺭ(‬
‫• ﺑﺪﻻ ًﻣﻦ ﺍﺳﺘﺨﺪﺍﻡ | ﺭﻣﺰ ﻓﻲ ﻗﺎﺉﻤﺔ ﺍﻟﻌﻨﺎﺻﺮ ﺑﻴﻦ ﻗﻮﺳﻴﻦ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺍﺧﺘﻴﺎﺭ ‪ ،‬ﻳﺘﻢ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻜﻠﻤﺎﺕ "ﻭﺍﺣﺪ ﻣﻦ"‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ‪،‬‬

‫ﻣﻬﻤﺔﺗﺸﻐﻴﻞ→ﻭﺍﺣﺪ ﻣﻦ = * = ‪= - = + = ٪= /‬‬
‫>> = << = & = ^ = | =‬

‫ﻳﻮﺟﺪﻣﻌﻴﺎﺭ ﻟـ (‪ ، EBNF ، ISO / IEC 14977: 1996 )1996‬ﻭﻟﻜﻨﻪ ﻧﺎﺩﺭﺍً ﻣﺎ ﻳﺴﺘﺨﺪﻡ‪.‬‬


‫ﻳﺴﺘﺨﺪﻡﺍﻟﻤﻌﻴﺎﺭ ﻋﻼﻣﺔ ﺍﻟﻤﺴﺎﻭﺍﺓ )=( ﺑﺪﻻ ًﻣﻦ ﺍﻟﺴﻬﻢ ﻓﻲ ﺍﻟﻘﻮﺍﻋﺪ ‪ ،‬ﻭﻳﻨﻬﻲ ﻛﻞ ‪ RHS‬ﺑﻔﺎﺻﻠﺔ‬
‫ﻣﻨﻘﻮﻃﺔ ‪،‬ﻭﻳﺘﻄﻠﺐ ﻋﻼﻣﺎﺕ ﺍﻗﺘﺒﺎﺱ ﻋﻠﻰ ﺟﻤﻴﻊ ﺍﻟﺮﻣﻮﺯ ﺍﻟﻄﺮﻓﻴﺔ‪ .‬ﻛﻤﺎ ﺗﺤﺪﺩ ﻣﺠﻤﻮﻋﺔ ﻣﻦ‬
‫ﺍﻟﻘﻮﺍﻋﺪﺍﻟﺘﺮﻣﻴﺰﻳﺔ ﺍﻷﺧﺮﻯ‪.‬‬

‫‪3.3.3‬ﺍﻟﻘﻮﺍﻋﺪ ﻭﺍﻟﻤﻌﺮﻓﺎﺕ‬
‫ﻓﻲﻭﻗﺖ ﺳﺎﺑﻖ ﻣﻦ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ‪ ،‬ﺍﻗﺘﺮﺣﻨﺎ ﺃﻥ ﻫﻨﺎﻙ ﻋﻼﻗﺔ ﻭﺛﻴﻘﺔ ﺑﻴﻦ ﺃﺟﻬﺰﺓ ﺍﻟﺘﻮﻟﻴﺪ ﻭﺍﻟﺘﻌﺮﻑ‬
‫ﻋﻠﻰﻟﻐﺔ ﻣﻌﻴﻨﺔ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺑﺎﻟﻨﻈﺮ ﺇﻟﻰ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺨﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ ‪ ،‬ﻳﻤﻜﻦ ﺇﻧﺸﺎء ﺃﺩﺍﺓ‬
‫ﺍﻟﺘﻌﺮﻑﻋﻠﻰ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻘﻮﺍﻋﺪ ﺑﻄﺮﻳﻘﺔ ﺣﺴﺎﺑﻴﺔ‪ .‬ﺗﻢ ﺗﻄﻮﻳﺮ ﻋﺪﺩ ﻣﻦ‬
‫ﺃﻧﻈﻤﺔﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺘﻲ ﺗﺆﺩﻱ ﻫﺬﺍ ﺍﻟﺒﻨﺎء‪ .‬ﺗﺴﻤﺢ ﻫﺬﻩ ﺍﻷﻧﻈﻤﺔ ﺑﺎﻹﻧﺸﺎء ﺍﻟﺴﺮﻳﻊ ﻟﺠﺰء ﺗﺤﻠﻴﻞ ﺑﻨﺎء‬
‫ﺍﻟﺠﻤﻠﺔﻣﻦ ﻣﺘﺮﺟﻢ ﻟﻠﻐﺔ ﺟﺪﻳﺪﺓ ‪ ،‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﻓﻬﻲ ﺫﺍﺕ ﻗﻴﻤﺔ ﻛﺒﻴﺮﺓ‪ .‬ﻳﻄُﻠﻖ ﻋﻠﻰ ﺃﺣﺪ ﺃﻭﻝ ﻣﻮﻟﺪﺍﺕ‬
‫ﻣﺤﻠﻞﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺍﺳﻢ ‪)3yacc‬ﺟﻮﻧﺴﻮﻥ ‪ .(1975 ،‬ﻫﻨﺎﻙ ﺍﻵﻥ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻫﺬﻩ ﺍﻷﻧﻈﻤﺔ ﺍﻟﻤﺘﺎﺣﺔ‪.‬‬

‫‪3.4‬ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺔ‬


‫ﺍﻥﺍﻟﺴﻤﺔ ﺍﻟﻨﺤﻮﻳﺔﻫﻮ ﺟﻬﺎﺯ ﻳﺴﺘﺨﺪﻡ ﻟﻮﺻﻒ ﺑﻨﻴﺔ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺃﻛﺜﺮ ﻣﻤﺎ ﻳﻤﻜﻦ ﻭﺻﻔﻪ ﺑﻘﻮﺍﻋﺪ‬
‫ﻧﺤﻮﻳﺔﺧﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ‪ .‬ﻗﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ ﻫﻲ ﺍﻣﺘﺪﺍﺩ ﻟﻘﻮﺍﻋﺪ ﺧﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ‪ .‬ﺗﻤﺪﻳﺪ‬

‫‪.3‬ﺍﻟﻤﺼﻄﻠﺢ ‪ yacc‬ﻫﻮ ﺍﺧﺘﺼﺎﺭ ﻟﻌﺒﺎﺭﺓ "ﻣﺘﺮﺟﻢ ﻣﺘﺮﺟﻢ ﺁﺧﺮ"‪.‬‬


‫‪133‬‬ ‫‪3.4‬ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺔ‬

‫ﻳﺴﻤﺢﻟﻮﺻﻒ ﻗﻮﺍﻋﺪ ﻟﻐﺔ ﻣﻌﻴﻨﺔ ﺑﺸﻜﻞ ﻣﻼﺉﻢ ‪ ،‬ﻣﺜﻞ ﺗﻮﺍﻓﻖ ﺍﻟﻨﻮﻉ‪ .‬ﻗﺒﻞ ﺃﻥ‬
‫ﻣﻼﺣﻈﺔﺗﺎﺭﻳﺨﻴﺔ ﺫ‬
‫ﻧﺤﺪﺩﺷﻜﻞ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺼﻔﺎﺕ ﺭﺳﻤﻴﺎً ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻧﻮﺿﺢ ﻣﻔﻬﻮﻡ‬
‫ﺍﻟﺪﻻﻻﺕﺍﻟﺜﺎﺑﺘﺔ‪.‬‬ ‫ﺗﻢﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺎﺕ‬
‫ﻓﻲﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ‪،‬‬
‫ﻭﻗﺪﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻟﺘﻘﺪﻳﻢ ﺃﻭﺻﺎﻑ‬
‫‪3.4.1‬ﺩﻻﻻﺕ ﺛﺎﺑﺘﺔ‬ ‫ﻛﺎﻣﻠﺔﻟﻠﻨﺤﻮ ﻭﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﻐﺎﺕ‬
‫ﻫﻨﺎﻙﺑﻌﺾ ﺧﺼﺎﺉﺺ ﺑﻨﻴﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﻳﺼﻌﺐ ﻭﺻﻔﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ‬ ‫ﺍﻟﺒﺮﻣﺠﺔ)‪ (Watt، 1979‬؛ ﻟﻘﺪ ﺗﻢ‬
‫‪ ، BNF‬ﻭﺑﻌﻀﻬﺎ ﻣﺴﺘﺤﻴﻞ‪ .‬ﻛﻤﺜﺎﻝ ﻋﻠﻰ ﻗﺎﻋﺪﺓ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺍﻟﺘﻲ ﻳﺼﻌﺐ‬ ‫ﺍﺳﺘﺨﺪﺍﻣﻬﺎﻛﺘﻌﺮﻳﻒ ﺭﺳﻤﻲ ﻟﻠﻐﺔ‬
‫ﺗﺤﺪﻳﺪﻫﺎﺑﺎﺳﺘﺨﺪﺍﻡ ‪ ، BNF‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﻗﻮﺍﻋﺪ ﺗﻮﺍﻓﻖ ﺍﻟﻨﻮﻉ‪ .‬ﻓﻲ ‪، Java‬‬ ‫ﻳﻤﻜﻦﺇﺩﺧﺎﻟﻬﺎ ﻓﻲ ﻧﻈﺎﻡ ﺇﻧﺸﺎء ﻣﺘﺮﺟﻢ )‬
‫ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻻ ﻳﻤﻜﻦ ﺗﻌﻴﻴﻦ ﻗﻴﻤﺔ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﻟﻤﺘﻐﻴﺮ ﻧﻮﻉ ﻋﺪﺩ‬ ‫‪(Farrow، 1982‬؛ ﻭﻗﺪ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ‬
‫ﺻﺤﻴﺢ ‪،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻌﻜﺲ ﻗﺎﻧﻮﻧﻲ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ‬ ‫ﻛﺄﺳﺎﺱﻟﻠﻌﺪﻳﺪ ﻣﻦ ﺃﻧﻈﻤﺔ ﺍﻟﺘﺤﺮﻳﺮ‬
‫ﺍﻟﻤﻮﺟﻬﺔﻧﺤﻮ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ )‪، 1981‬‬
‫ﻫﺬﺍﺍﻟﺘﻘﻴﻴﺪ ﻓﻲ ‪ ، BNF‬ﺇﻻ ﺃﻧﻪ ﻳﺘﻄﻠﺐ ﺭﻣﻮﺯﺍً ﻭﻗﻮﺍﻋﺪ ﻏﻴﺮ ﻧﻬﺎﺉﻴﺔ ﺇﺿﺎﻓﻴﺔ‪ .‬ﺇﺫﺍ‬
‫‪Teitelbaum and Reps‬؛ ‪، 1984‬‬
‫ﺗﻢﺗﺤﺪﻳﺪ ﺟﻤﻴﻊ ﻗﻮﺍﻋﺪ ﺍﻟﻜﺘﺎﺑﺔ ﻓﻲ ‪ Java‬ﻓﻲ ‪ ، BNF‬ﻓﺴﺘﺼﺒﺢ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ‬
‫‪ .(Fischer et al.‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺫﻟﻚ ‪،‬‬
‫ﺃﻛﺒﺮﻣﻦ ﺃﻥ ﺗﻜﻮﻥ ﻣﻔﻴﺪﺓ ‪ ،‬ﻷﻥ ﺣﺠﻢ ﺍﻟﻘﻮﺍﻋﺪ ﻳﺤﺪﺩ ﺣﺠﻢ ﻣﺤﻠﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ‪.‬‬
‫ﺗﻢﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ‬
‫ﻟﻠﺨﺼﺎﺉﺺﻓﻲ ﺃﻧﻈﻤﺔ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻠﻐﺔ‬
‫ﺍﻟﻄﺒﻴﻌﻴﺔ)‪.(Correa ، 1992‬‬

‫ﻛﻤﺜﺎﻝﻋﻠﻰ ﻗﺎﻋﺪﺓ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺍﻟﺘﻲ ﻻ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪﻫﺎ ﻓﻲ ‪ ، BNF‬ﺿﻊ ﻓﻲ‬


‫ﺍﻋﺘﺒﺎﺭﻙﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﻌﺎﻣﺔ ﺍﻟﺘﻲ ﺗﻨﺺ ﻋﻠﻰ ﺃﻧﻪ ﻳﺠﺐ ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﺟﻤﻴﻊ‬
‫ﺍﻟﻤﺘﻐﻴﺮﺍﺕﻗﺒﻞ ﺍﻟﺮﺟﻮﻉ ﺇﻟﻴﻬﺎ‪ .‬ﻟﻘﺪ ﺛﺒﺖ ﺃﻥ ﻫﺬﻩ ﺍﻟﻘﺎﻋﺪﺓ ﻻ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪﻫﺎ ﻓﻲ‬
‫‪.BNF‬‬
‫ﺗﻤﺜﻞﻫﺬﻩ ﺍﻟﻤﺸﻜﻼﺕ ﺃﻣﺜﻠﺔ ﻋﻠﻰ ﻓﺉﺎﺕ ﻗﻮﺍﻋﺪ ﺍﻟﻠﻐﺔ‬
‫ﺗﺴﻤﻰﻗﻮﺍﻋﺪ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ‪ .‬ﺍﻝﺩﻻﻻﺕ ﺛﺎﺑﺘﺔﺗﺮﺗﺒﻂ ﻟﻐﺔ ﻣﺎ ﺑﺸﻜﻞ ﻏﻴﺮ ﻣﺒﺎﺷﺮ ﺑﻤﻌﻨﻰ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﺃﺛﻨﺎءﺍﻟﺘﻨﻔﻴﺬ ؛ ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﻳﺘﻌﻠﻖ ﺍﻷﻣﺮ ﺑﺎﻷﺷﻜﺎﻝ ﺍﻟﻘﺎﻧﻮﻧﻴﺔ ﻟﻠﺒﺮﺍﻣﺞ )ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺑﺪﻻ ًﻣﻦ‬
‫ﺍﻟﺪﻻﻻﺕ(‪ .‬ﺗﻨﺺ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺪﻻﻟﻴﺔ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﻐﺔ ﻋﻠﻰ ﻗﻴﻮﺩ ﻧﻮﻋﻬﺎ‪ .‬ﺳﻤﻴﺖ ﺍﻟﺪﻻﻻﺕ‬
‫ﺍﻟﺜﺎﺑﺘﺔﺑﻬﺬﺍ ﺍﻻﺳﻢ ﻷﻥ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻤﻄﻠﻮﺏ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ﻫﺬﻩ ﺍﻟﻤﻮﺍﺻﻔﺎﺕ ﻳﻤﻜﻦ ﺇﺟﺮﺍﺅﻩ ﻓﻲ‬
‫ﻭﻗﺖﺍﻟﺘﺮﺟﻤﺔ‪.‬‬

‫ﺑﺴﺒﺐﻣﺸﺎﻛﻞ ﻭﺻﻒ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ‪ ، BNF‬ﺗﻢ ﺗﺼﻤﻴﻢ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ‬


‫ﻣﻦﺍﻵﻟﻴﺎﺕ ﺍﻷﻛﺜﺮ ﻗﻮﺓ ﻟﻬﺬﻩ ﺍﻟﻤﻬﻤﺔ‪ .‬ﺗﻢ ﺗﺼﻤﻴﻢ ﺇﺣﺪﻯ ﻫﺬﻩ ﺍﻵﻟﻴﺎﺕ ‪ ،‬ﻗﻮﺍﻋﺪ ﺍﻟﻨﺤﻮ ‪ ،‬ﺑﻮﺍﺳﻄﺔ‬
‫(‪ Knuth )1968a‬ﻟﻮﺻﻒ ﻛﻞ ﻣﻦ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻭﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﺒﺮﺍﻣﺞ‪.‬‬

‫ﺍﻟﻘﻮﺍﻋﺪﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺎﺕ ﻫﻲ ﻧﻬﺞ ﺭﺳﻤﻲ ﻟﻮﺻﻒ ﻭﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺔ ﻗﻮﺍﻋﺪ ﺍﻟﺪﻻﻻﺕ‬


‫ﺍﻟﺜﺎﺑﺘﺔﻟﻠﺒﺮﻧﺎﻣﺞ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﻻ ﺗﺴﺘﺨﺪﻡ ﺩﺍﺉﻤﺎً ﺑﻄﺮﻳﻘﺔ ﺭﺳﻤﻴﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻤﺘﺮﺟﻢ ‪،‬‬
‫ﺇﻻﺃﻥ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮ ﺗﺴﺘﺨﺪﻡ ﻋﻠﻰ ﺍﻷﻗﻞ ﺑﺸﻜﻞ ﻏﻴﺮ ﺭﺳﻤﻲ ﻓﻲ ﻛﻞ ﻣﺘﺮﺟﻢ )‬
‫ﺍﻧﻈﺮ‪ Aho‬ﻭﺁﺧﺮﻭﻥ ‪.(1986 ،‬‬
‫ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ‪ ،‬ﻭﻫﻲ ﻣﻌﻨﻰ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻭﺣﺪﺍﺕ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞ ‪،‬ﻓﻲ ﺍﻟﻘﺴﻢ ‪.3.5‬‬

‫‪3.4.2‬ﻣﻔﺎﻫﻴﻢ ﺃﺳﺎﺳﻴﺔ‬
‫ﺍﻟﻘﻮﺍﻋﺪﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺎﺕ ﻫﻲ ﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﺧﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ ﺗﻤﺖ ﺇﺿﺎﻓﺔ ﺳﻤﺎﺕ ﺇﻟﻴﻬﺎ‬
‫ﻭﻭﻇﺎﺉﻒﺣﺴﺎﺏ ﺍﻟﺴﻤﺎﺕ ﻭﺍﻟﻮﻇﺎﺉﻒ ﺍﻷﺻﻠﻴﺔ‪.‬ﺻﻔﺎﺕ‪ ،‬ﺍﻟﻤﺮﺗﺒﻄﺔ ﺑﺎﻟﺮﻣﻮﺯ ﺍﻟﻨﺤﻮﻳﺔ )ﺍﻟﺮﻣﻮﺯ‬
‫ﺍﻟﻄﺮﻓﻴﺔﻭﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻴﺔ( ‪ ،‬ﺗﺸﺒﻪ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺑﻤﻌﻨﻰ ﺃﻧﻪ ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻟﻬﺎ ﻗﻴﻢ ﻣﺨﺼﺼﺔ ﻟﻬﺎ‪.‬‬
‫ﻭﻇﺎﺉﻒﺣﺴﺎﺏ ﺍﻟﺴﻤﺔ‪ ،‬ﺗﺴﻤﻰ ﺃﺣﻴﺎﻧﺎً ﺍﻟﺪﻻﻟﻲ‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪134‬‬

‫ﻭﻇﺎﺉﻒﻣﺮﺗﺒﻄﺔ ﺑﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮ‪ .‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻟﺘﺤﺪﻳﺪ ﻛﻴﻔﻴﺔ ﺣﺴﺎﺏ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ‪.‬ﻭﻇﺎﺉﻒ‬
‫ﺍﻟﻤﺴﻨﺪ‪ ،‬ﺍﻟﺘﻲ ﺗﻨﺺ ﻋﻠﻰ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺪﻻﻟﻴﺔ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﻐﺔ ‪ ،‬ﺗﺮﺗﺒﻂ ﺑﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮ‪.‬‬

‫ﺳﺘﺼﺒﺢﻫﺬﻩ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺃﻛﺜﺮ ﻭﺿﻮﺣﺎً ﺑﻌﺪ ﺃﻥ ﻧﺤﺪﺩ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺎﺕ ﺭﺳﻤﻴﺎً ﻭﻧﻘﺪﻡ‬
‫ﻣﺜﺎﻻ‪ً.‬‬

‫‪3.4.3‬ﺗﻌﺮﻳﻒ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺔ‬


‫ﻗﻮﺍﻋﺪﺍﻟﺴﻤﺔ ﻋﺒﺎﺭﺓ ﻋﻦ ﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻹﺿﺎﻓﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫• ﻳﺮﺗﺒﻂ ﺑﻜﻞ ﺭﻣﺰ ﻧﺤﻮﻱ ‪ X‬ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺴﻤﺎﺕ (‪ .A )X‬ﺗﺘﻜﻮﻥ ﺍﻟﻤﺠﻤﻮﻋﺔ (‪ A )X‬ﻣﻦ‬
‫ﻣﺠﻤﻮﻋﺘﻴﻦﻣﻨﻔﺼﻠﺘﻴﻦ (‪ S )X‬ﻭ (‪ ، I )X‬ﺗﺴﻤﻰ ﺍﻟﺴﻤﺎﺕ ﺍﻟﻤﺮﻛﺒﺔ ﻭﺍﻟﻤﻮﺭﻭﺛﺔ ‪ ،‬ﻋﻠﻰ ﺍﻟﺘﻮﺍﻟﻲ‪.‬‬
‫ﺍﻟﺴﻤﺎﺕﺍﻟﻤﺮﻛﺒﺔﺗﺴُﺘﺨﺪﻡ ﻟﺘﻤﺮﻳﺮ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻷﻋﻠﻰ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ‪ ،‬ﺑﻴﻨﻤﺎ‬
‫ﺍﻟﺴﻤﺎﺕﺍﻟﻤﻮﺭﻭﺛﺔ ﺗﻤﺮﻳﺮ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺍﻟﺪﻻﻟﻴﺔ ﺇﻟﻰ ﺃﺳﻔﻞ ﻭﻋﺒﺮ ﺍﻟﺸﺠﺮﺓ‪.‬‬

‫• ﺗﺮﺗﺒﻂ ﺑﻜﻞ ﻗﺎﻋﺪﺓ ﻧﺤﻮﻳﺔ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﺪﻻﻟﻴﺔ ﻭﻣﺠﻤﻮﻋﺔ ﻓﺎﺭﻏﺔ ﻣﻦ ﺍﻟﻮﻇﺎﺉﻒ‬
‫ﺍﻷﺻﻠﻴﺔﻋﻠﻰ ﺳﻤﺎﺕ ﺍﻟﺮﻣﻮﺯ ﻓﻲ ﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﻨﺤﻮﻳﺔ‪ .‬ﻟﻘﺎﻋﺪﺓ ‪0X‬ﺱ‪1X‬ﺝ‪X‬ﻥ‪ ،‬ﺍﻟﺴﻤﺎﺕ ﺍﻟﻤﺮﻛﺒﺔ‬
‫ﻟـ‪0X‬ﻳﺘﻢ ﺣﺴﺎﺑﻬﺎ ﺑﻮﻇﺎﺉﻒ ﺩﻻﻟﻴﺔ ﻣﻦ ﺍﻟﻨﻤﻮﺫﺝ ‪ = (0S )X‬ﻭ )ﺃ )ﺱ‪، (1‬ﺝ ‪،‬ﻓﺄﺱﻥ((‪ .‬ﻟﺬﺍ ﻓﺈﻥ‬
‫ﻗﻴﻤﺔﺍﻟﺴﻤﺔ ﺍﻟﻤﺮﻛﺒﺔ ﻓﻲ ﻋﻘﺪﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﺸﺠﺮﻱ ﺗﻌﺘﻤﺪ ﻓﻘﻂ ﻋﻠﻰ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ‬
‫ﺍﻟﻤﻮﺟﻮﺩﺓﻓﻲ ﺍﻟﻌﻘﺪ ﺍﻟﻔﺮﻋﻴﺔ ﻟﺘﻠﻚ ﺍﻟﻌﻘﺪﺓ‪ .‬ﺍﻟﺴﻤﺎﺕ ﺍﻟﻤﻮﺭﻭﺛﺔ ﻟﻠﺮﻣﻮﺯ ‪X‬ﻱ‪...1 ،‬ﻱ‪...‬ﻥ )ﻓﻲ‬
‫ﺍﻟﻘﺎﻋﺪﺓﺃﻋﻼﻩ( ‪ ،‬ﻳﺘﻢ ﺣﺴﺎﺑﻬﺎ ﺑﻮﻇﻴﻔﺔ ﺩﻻﻟﻴﺔ ﻣﻦ ﺍﻟﻨﻤﻮﺫﺝ ‪I )X‬ﻱ( = ﻭ )ﺃ )ﺱ‪، (0‬ﺝ ‪،‬ﻓﺄﺱﻥ((‪.‬‬
‫ﻟﺬﺍﻓﺈﻥ ﻗﻴﻤﺔ ﺍﻟﺴﻤﺔ ﺍﻟﻤﻮﺭﻭﺛﺔ ﻓﻲ ﻋﻘﺪﺓ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﻟﻠﻌﻘﺪﺓ‬
‫ﺍﻷﺻﻠﻴﺔﻟﺘﻠﻚ ﺍﻟﻌﻘﺪﺓ ﻭﺗﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﻌﻘﺪ ﺍﻟﺸﻘﻴﻘﺔ‪ .‬ﻻﺣﻆ ﺃﻧﻪ ﻟﺘﺠﻨﺐ ﺍﻻﺳﺘﺪﺍﺭﺓ ‪ ،‬ﻏﺎﻟﺒﺎً‬
‫ﻣﺎﺗﻘﺘﺼﺮ ﺍﻟﺴﻤﺎﺕ ﺍﻟﻤﻮﺭﻭﺛﺔ ﻋﻠﻰ ﻭﻇﺎﺉﻒ ﺍﻟﻨﻤﻮﺫﺝ ‪I )X‬ﻱ( = ﻭ )ﺃ )ﺱ‪، (0‬ﺝ ‪،‬ﻓﺄﺱ)ﻱ‪.(((1-‬‬
‫ﻳﻤﻨﻊﻫﺬﺍ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﺴﻤﺔ ﺍﻟﻤﻮﺭﻭﺛﺔ ﻣﻦ ﺍﻻﻋﺘﻤﺎﺩ ﻋﻠﻰ ﻧﻔﺴﻬﺎ ﺃﻭ ﻋﻠﻰ ﺍﻟﺴﻤﺎﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ‬
‫ﺇﻟﻰﺍﻟﻴﻤﻴﻦ ﻓﻲ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ‪.‬‬

‫• ﻭﻇﻴﻔﺔ ﺍﻟﻤﺴﻨﺪ ﻟﻬﺎ ﺷﻜﻞ ﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﻤﻨﻄﻘﻲ ﻋﻠﻰ ﺍﺗﺤﺎﺩ ﻣﺠﻤﻮﻋﺔ ﺍﻟﺴﻤﺎﺕ }‪، (0A )X‬ﺝ ‪،‬ﻓﺄﺱ‬
‫ﻥ({ ﻭﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﺍﻟﺤﺮﻓﻴﺔ‪ .‬ﺍﻻﺷﺘﻘﺎﻗﺎﺕ ﺍﻟﻮﺣﻴﺪﺓ ﺍﻟﻤﺴﻤﻮﺡ ﺑﻬﺎ ﻣﻊ ﻗﻮﺍﻋﺪ‬
‫ﺍﻟﺴﻤﺔﻫﻲ ﺗﻠﻚ ﺍﻻﺷﺘﻘﺎﻗﺎﺕ ﺍﻟﺘﻲ ﻳﻜﻮﻥ ﻓﻴﻬﺎ ﻛﻞ ﻣﺴﻨﺪ ﻣﺮﺗﺒﻂ ﺑﻜﻞ ﻏﻴﺮ ﻧﻬﺎﺉﻲ ﺻﺤﻴﺤﺎً‪.‬‬
‫ﺗﺸﻴﺮﻗﻴﻤﺔ ﺩﺍﻟﺔ ﺍﻟﻤﺴﻨﺪ ﺍﻟﺨﺎﻃﺉﺔ ﺇﻟﻰ ﺍﻧﺘﻬﺎﻙ ﻗﻮﺍﻋﺪ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺃﻭ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﻐﺔ‪.‬‬

‫ﺷﺠﺮﺓﺍﻟﺘﺤﻠﻴﻞ ﻟﻘﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺠﺪﻭﻟﻴﺔ ﻫﻲ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺑﻨﺎء ًﻋﻠﻰ ﻗﻮﺍﻋﺪ ‪BNF‬‬
‫ﺍﻷﺳﺎﺳﻴﺔﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ‪ ،‬ﻣﻊ ﺍﺣﺘﻤﺎﻝ ﺇﺭﻓﺎﻕ ﻣﺠﻤﻮﻋﺔ ﻓﺎﺭﻏﺔ ﻣﻦ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﺑﻜﻞ ﻋﻘﺪﺓ‪ .‬ﺇﺫﺍ ﺗﻢ‬
‫ﺣﺴﺎﺏﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺠﺪﻭﻟﻴﺔ ﻓﻲ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ‪ ،‬ﻳﻘُﺎﻝ ﺃﻥ ﺍﻟﺸﺠﺮﺓ ﻫﻲ ﻛﺬﻟﻚﻳﻌﺰﻯ‬
‫ﺑﺎﻟﻜﺎﻣﻞ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻣﻦ ﺍﻟﻨﺎﺣﻴﺔ ﺍﻟﻌﻤﻠﻴﺔ ﻻ ﻳﺘﻢ ﺫﻟﻚ ﺩﺍﺉﻤﺎً ﺑﻬﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ‪ ،‬ﻓﻤﻦ‬
‫ﺍﻟﻤﻼﺉﻢﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﻋﻠﻰ ﺃﻧﻬﺎ ﻣﺤﺴﻮﺑﺔ ﺑﻌﺪ ﺃﻥ ﺗﻢ ﺇﻧﺸﺎء ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻜﺎﻣﻠﺔ‬
‫ﻏﻴﺮﺍﻟﻤﻨﺴﻮﺑﺔ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﺘﺮﺟﻢ‪.‬‬

‫‪3.4.4‬ﺍﻟﺴﻤﺎﺕ ﺍﻟﺠﻮﻫﺮﻳﺔ‬
‫ﺍﻟﺴﻤﺎﺕﺍﻟﺠﻮﻫﺮﻳﺔﻫﻲ ﺳﻤﺎﺕ ﻣﺮﻛﺒﺔ ﻟﻠﻌﻘﺪ ﺍﻟﻮﺭﻗﻴﺔ ﺍﻟﺘﻲ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﻗﻴﻤﻬﺎ ﺧﺎﺭﺝ ﺷﺠﺮﺓ‬
‫ﺍﻟﺘﺤﻠﻴﻞ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﻳﺄﺗﻲ ﻧﻮﻉ ﻣﺜﻴﻞ ﺍﻟﻤﺘﻐﻴﺮ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﻣﺎ ﻣﻦ ﺟﺪﻭﻝ‬
‫ﺍﻟﺮﻣﻮﺯ ‪،‬ﻭﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ ﻟﺘﺨﺰﻳﻦ ﺃﺳﻤﺎء ﺍﻟﻤﺘﻐﻴﺮﺍﺕ‬
‫‪135‬‬ ‫‪3.4‬ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺔ‬

‫ﻭﺃﻧﻮﺍﻋﻬﺎ‪.‬ﺗﻢ ﺗﻌﻴﻴﻦ ﻣﺤﺘﻮﻳﺎﺕ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﺑﻨﺎء ًﻋﻠﻰ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺼﺮﻳﺢ ﺍﻟﺴﺎﺑﻘﺔ‪ .‬ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ‪،‬‬
‫ﺑﺎﻓﺘﺮﺍﺽﺃﻧﻪ ﻗﺪ ﺗﻢ ﺇﻧﺸﺎء ﺷﺠﺮﺓ ﺗﺤﻠﻴﻞ ﻏﻴﺮ ﻣﻨﺴﻮﺑﺔ ﻭﺃﻥ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﻣﻄﻠﻮﺑﺔ ‪ ،‬ﻓﺈﻥ ﺍﻟﺴﻤﺎﺕ‬
‫ﺍﻟﻮﺣﻴﺪﺓﺫﺍﺕ ﺍﻟﻘﻴﻢ ﻫﻲ ﺍﻟﺴﻤﺎﺕ ﺍﻟﺠﻮﻫﺮﻳﺔ ﻟﻠﻌﻘﺪ ﺍﻟﻄﺮﻓﻴﺔ‪ .‬ﺑﺎﻟﻨﻈﺮ ﺇﻟﻰ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﺍﻟﺠﻮﻫﺮﻳﺔ‬
‫ﻓﻲﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ‪ ،‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﺪﻻﻟﻴﺔ ﻟﺤﺴﺎﺏ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﺍﻟﻤﺘﺒﻘﻴﺔ‪.‬‬

‫‪3.4.5‬ﺃﻣﺜﻠﺔ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺔ‬


‫ﻛﻤﺜﺎﻝﺑﺴﻴﻂ ﺟﺪﺍً ﻟﻜﻴﻔﻴﺔ ﺍﺳﺘﺨﺪﺍﻡ ﻗﻮﺍﻋﺪ ﺍﻟﻨﺤﻮ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﺴﻤﺎﺕ ﻟﻮﺻﻒ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ‪،‬‬
‫ﺿﻊﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﺠﺰء ﺍﻟﺘﺎﻟﻲ ﻣﻦ ﻗﻮﺍﻋﺪ ﺍﻟﻨﺤﻮ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﺴﻤﺎﺕ ﺍﻟﺘﻲ ﺗﺼﻒ ﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﺘﻲ‬
‫ﺗﺸﻴﺮﺇﻟﻰ ﺍﻻﺳﻢ ﺍﻟﻤﻮﺟﻮﺩ ﻓﻲﻧﻬﺎﻳﺔﻳﺠﺐ ﺃﻥ ﻳﺘﻄﺎﺑﻖ ﺇﺟﺮﺍء ‪ Ada‬ﻣﻊ ﺍﺳﻢ ﺍﻹﺟﺮﺍء‪) .‬ﻻ ﻳﻤﻜﻦ ﺫﻛﺮ‬
‫ﻫﺬﻩﺍﻟﻘﺎﻋﺪﺓ ﻓﻲ ‪ (.BNF‬ﺳﻤﺔ ﺍﻟﺴﻠﺴﻠﺔ ﻟـ >ﺍﺳﻢ_ﺍﻟﻤﺠﻤﻮﻋﺔ< ‪ ،‬ﻭﺍﻟﻤﺸﺎﺭ ﺇﻟﻴﻬﺎ ﺑـ >ﺍﺳﻢ_‬
‫ﺍﻟﻤﺠﻤﻮﻋﺔ< ‪ ، string.‬ﻫﻲ ﺍﻟﺴﻠﺴﻠﺔ ﺍﻟﻔﻌﻠﻴﺔ ﻟﻸﺣﺮﻑ ﺍﻟﺘﻲ ﺗﻢ ﺍﻟﻌﺜﻮﺭ ﻋﻠﻴﻬﺎ ﻣﺒﺎﺷﺮﺓ ًﺑﻌﺪ ﺍﻟﻜﻠﻤﺔ‬
‫ﺍﻟﻤﺤﺠﻮﺯﺓﺇﺟﺮﺍءﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﺘﺮﺟﻢ‪ .‬ﻻﺣﻆ ﺃﻧﻪ ﻋﻨﺪﻣﺎ ﻳﻜﻮﻥ ﻫﻨﺎﻙ ﺃﻛﺜﺮ ﻣﻦ ﺗﻜﺮﺍﺭ ﻭﺍﺣﺪ ﻟﺤﺎﻟﺔ ﻏﻴﺮ‬
‫ﻧﻬﺎﺉﻴﺔﻓﻲ ﻗﺎﻋﺪﺓ ﺑﻨﺎء ﺟﻤﻠﺔ ﻓﻲ ﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﻟﻠﺴﻤﺎﺕ ‪ ،‬ﻳﺘﻢ ﻛﺘﺎﺑﺔ ﻏﻴﺮ ﻧﻬﺎﺉﻴﺔ ﺑﺄﻗﻮﺍﺱ‬
‫ﻟﺘﻤﻴﻴﺰﻫﺎ‪.‬ﻻ ﺗﻌﺪ ﺍﻟﺤﺮﻭﻑ ﺍﻟﻤﻨﺨﻔﻀﺔ ﻭﻻ ﺍﻷﻗﻮﺍﺱ ﺟﺰءﺍً ﻣﻦ ﺍﻟﻠﻐﺔ ﺍﻟﻤﻮﺻﻮﻓﺔ‪.‬‬

‫ﻗﺎﻋﺪﺓﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ‪→<proc_def> :‬ﺇﺟﺮﺍء>[‪proc_name< ]1‬‬


‫<‪>proc_body‬ﻧﻬﺎﻳﺔ>؛ [‪proc_name< ]2‬‬
‫ﺍﻟﻤﺴﻨﺪ‪proc_name< ]1[ string == >proc_name< ]2[ .string>:‬‬

‫ﻓﻲﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺗﻨﺺ ﺍﻟﻘﺎﻋﺪﺓ ﺍﻷﺻﻠﻴﺔ ﻋﻠﻰ ﺃﻥ ﺳﻤﺔ ﺳﻠﺴﻠﺔ ﺍﻻﺳﻢ ﺍﻟﺨﺎﺻﺔ ﺑـ >ﺍﺳﻢ_‬
‫ﺍﻟﻤﺠﻤﻮﻋﺔ< ﻏﻴﺮ ﺍﻟﻄﺮﻓﻴﺔ ﻓﻲ ﺭﺃﺱ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻳﺠﺐ ﺃﻥ ﺗﺘﻄﺎﺑﻖ ﻣﻊ ﺳﻤﺔ ﺳﻠﺴﻠﺔ ﺍﻻﺳﻢ‬
‫ﺍﻟﺨﺎﺻﺔﺑـ >ﺍﺳﻢ_ﺍﻟﻤﺠﻤﻮﻋﺔ< ﺍﻟﺘﻲ ﺗﻠﻲ ﻧﻬﺎﻳﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ‪.‬‬
‫ﺑﻌﺪﺫﻟﻚ ‪ ،‬ﻧﻌﺘﺒﺮ ﻣﺜﺎﻻً ﺃﻛﺒﺮ ﻟﻘﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ‪ .‬ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ‪ ،‬ﻳﻮﺿﺢ ﺍﻟﻤﺜﺎﻝ ﻛﻴﻒ ﻳﻤﻜﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻡﻗﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ﻗﻮﺍﻋﺪ ﺍﻟﻨﻮﻉ ﺍﻟﺨﺎﺻﺔ ﺑﺒﻴﺎﻥ ﺍﻹﺳﻨﺎﺩ ﺍﻟﺒﺴﻴﻂ‪ .‬ﺇﻥ ﺑﻨﺎء‬
‫ﺍﻟﺠﻤﻠﺔﻭﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ﻟﺒﻴﺎﻥ ﺍﻟﻤﻬﻤﺔ ﻫﺬﺍ ﻫﻲ ﻛﻤﺎ ﻳﻠﻲ‪ :‬ﺃﺳﻤﺎء ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻮﺣﻴﺪﺓ ﻫﻲﺃ ‪ ،‬ﺏ ‪،‬‬
‫ﻭﺝ‪.‬ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ ﻣﻦ ﺍﻟﺘﺨﺼﻴﺼﺎﺕ ﺇﻣﺎ ﻣﺘﻐﻴﺮﺍً ﺃﻭ ﺗﻌﺒﻴﺮﺍً ﻓﻲ ﺷﻜﻞ ﻣﺘﻐﻴﺮ‬
‫ﻣﻀﺎﻑﺇﻟﻰ ﻣﺘﻐﻴﺮ ﺁﺧﺮ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺃﺣﺪ ﻧﻮﻋﻴﻦ‪ int :‬ﺃﻭ ‪ .real‬ﻋﻨﺪﻣﺎ ﻳﻜﻮﻥ‬
‫ﻫﻨﺎﻙﻣﺘﻐﻴﺮﻳﻦ ﻋﻠﻰ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ ﻣﻦ ﺍﻟﻤﻬﻤﺔ ‪ ،‬ﻓﻼ ﺩﺍﻋﻲ ﻷﻥ ﻳﻜﻮﻧﺎ ﻣﻦ ﻧﻔﺲ ﺍﻟﻨﻮﻉ‪ .‬ﻧﻮﻉ‬
‫ﺍﻟﺘﻌﺒﻴﺮﻋﻨﺪﻣﺎ ﺗﺨﺘﻠﻒ ﺃﻧﻮﺍﻉ ﺍﻟﻤﻌﺎﻣﻞ ﻫﻮ ﺣﻘﻴﻘﻲ ﺩﺍﺉﻤﺎً‪ .‬ﻋﻨﺪﻣﺎ ﺗﻜﻮﻥ ﻣﺘﻄﺎﺑﻘﺔ ‪ ،‬ﻳﻜﻮﻥ ﻧﻮﻉ‬
‫ﺍﻟﺘﻌﺒﻴﺮﻫﻮ ﻧﻮﻉ ﺍﻟﻤﻌﺎﻣﻼﺕ‪ .‬ﻳﺠﺐ ﺃﻥ ﻳﺘﻄﺎﺑﻖ ﻧﻮﻉ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﺴﺮ ﻣﻦ ﺍﻟﻤﻬﻤﺔ ﻣﻊ ﻧﻮﻉ ﺍﻟﺠﺎﻧﺐ‬
‫ﺍﻷﻳﻤﻦ‪.‬ﻟﺬﻟﻚ ﻳﻤﻜﻦ ﺧﻠﻂ ﺃﻧﻮﺍﻉ ﺍﻟﻤﻌﺎﻣﻼﺕ ﻓﻲ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ ‪ ،‬ﻭﻟﻜﻦ ﺍﻟﺘﺨﺼﻴﺺ ﻳﻜﻮﻥ‬
‫ﺻﺎﻟﺤﺎًﻓﻘﻂ ﺇﺫﺍ ﻛﺎﻥ ﺍﻟﻬﺪﻑ ﻭﺍﻟﻘﻴﻤﺔ ﺍﻟﻨﺎﺗﺠﺔ ﻋﻦ ﺗﻘﻴﻴﻢ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ ﻣﻦ ﻧﻔﺲ ﺍﻟﻨﻮﻉ‪ .‬ﺗﺤﺪﺩ‬
‫ﻗﻮﺍﻋﺪﺍﻟﺴﻤﺔ ﺍﻟﻨﺤﻮﻳﺔ ﻫﺬﻩ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺪﻻﻟﻴﺔ ﺍﻟﺜﺎﺑﺘﺔ‪.‬‬

‫ﺟﺰءﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻣﻦ ﻣﺜﺎﻟﻨﺎ ﻟﻘﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ ﺍﻟﻨﺤﻮﻳﺔ ﻫﻮ‬

‫>ﺗﻌﻴﻴﻦ<→ ><‪>expr< >expr‬‬


‫= <‪var< + >var<> →var‬‬
‫| >ﻓﺎﺭ<‬
‫>ﻓﺎﺭ<→ﺃ | ﺏ | ﺝ‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪136‬‬

‫ﻳﺘﻢﻭﺻﻒ ﺳﻤﺎﺕ ﺍﻟﻘﻮﺍﻋﺪ ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻴﺔ ﻓﻲ ﻣﺜﺎﻝ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺎﺕ ﻓﻲ‬
‫ﺍﻟﻔﻘﺮﺍﺕﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫• ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ—ﺳﻤﻴﺔ ﻣﺮﻛﺒﺔ ﻣﺮﺗﺒﻄﺔ ﺑﺎﻟﻘﻴﻢ ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻴﺔ >‪ <var‬ﻭ >‪ .<expr‬ﻳﺘﻢ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻪﻟﺘﺨﺰﻳﻦ ﺍﻟﻨﻮﻉ ﺍﻟﻔﻌﻠﻲ ‪ int ،‬ﺃﻭ ‪ ، real‬ﻟﻤﺘﻐﻴﺮ ﺃﻭ ﺗﻌﺒﻴﺮ‪ .‬ﻓﻲ ﺣﺎﻟﺔ ﺍﻟﻤﺘﻐﻴﺮ ‪ ،‬ﻳﻜﻮﻥ‬
‫ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ ﺟﻮﻫﺮﻳﺎً‪ .‬ﻓﻲ ﺣﺎﻟﺔ ﺍﻟﺘﻌﺒﻴﺮ ‪ ،‬ﻳﺘﻢ ﺗﺤﺪﻳﺪﻩ ﻣﻦ ﺍﻷﻧﻮﺍﻉ ﺍﻟﻔﻌﻠﻴﺔ ﻟﻠﻌﻘﺪﺓ ﺍﻟﻔﺮﻋﻴﺔ ﺃﻭ‬
‫ﺍﻟﻌﻘﺪﺍﻟﻔﺮﻋﻴﺔ ﻟـ >‪.expr< nonterminal‬‬

‫• ﺍﻟﻨﻮﻉ_ ﺍﻟﻤﺘﻮﻗﻊ—ﺳﻤﺔ ﻣﻮﺭﻭﺛﺔ ﻣﺮﺗﺒﻄﺔ ﺑـ >‪ <expr‬ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻲ‪ .‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻟﺘﺨﺰﻳﻦ‬
‫ﺍﻟﻨﻮﻉ ‪،‬ﺳﻮﺍء ﺃﻛﺎﻥ ﺻﺤﻴﺤﺎً ﺃﻡ ﺣﻘﻴﻘﻴﺎً ‪ ،‬ﺍﻟﻤﺘﻮﻗﻊ ﻟﻠﺘﻌﺒﻴﺮ ‪ ،‬ﻛﻤﺎ ﻫﻮ ﻣﺤﺪﺩ ﺑﻮﺍﺳﻄﺔ ﻧﻮﻉ‬
‫ﺍﻟﻤﺘﻐﻴﺮﻋﻠﻰ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﺴﺮ ﻣﻦ ﺑﻴﺎﻥ ﺍﻹﺳﻨﺎﺩ‪.‬‬

‫ﻳﺘﺒﻊﻗﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ ﺍﻟﻜﺎﻣﻠﺔ ﻓﻲ ﺍﻟﻤﺜﺎﻝ ‪.3.6‬‬

‫ﺍﻟﻘﻮﺍﻋﺪﺍﻟﻨﺤﻮﻳﺔ ﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﺒﺴﻴﻄﺔ‬ ‫ﻣﺜﺎﻝ‪3.6‬‬


‫‪.1‬ﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﻨﺤﻮﻳﺔ‪> :‬ﺗﻌﻴﻴﻦ<→ ><‪: >expr‬ﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﺪﻻﻟﻴﺔ <‪= >expr‬‬
‫<‪var< .actual_type> ←var‬‬
‫‪.2‬ﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﻨﺤﻮﻳﺔ‪>expr< .actual_type> →<expr> :‬‬
‫‪:‬ﺍﻟﻘﺎﻋﺪﺓﺍﻟﺪﻻﻟﻴﺔ [‪←var< ]2[ + >var< ]3‬‬
‫ﺇﺫﺍﻛﺎﻥ )>‪ (var< ]2[ .actual_type = int‬ﻭ‬
‫‪ int‬ﺛﻢ (‪= int‬‬
‫‪)>var< ]3[ .actual_type‬‬
‫ﺣﻘﻴﻘﻲﺁﺧﺮ‬
‫ﺇﻧﻬﺎءﺇﺫﺍ‬
‫<‪ >expr‬ﻧﻮﻉ ﻣﺘﻮﻗﻊ ‪.actual_type == >expr<.‬‬ ‫ﻓﺎﻋﻞ‪:‬‬
‫<‪> →>expr‬ﻓﺎﺭ<‬ ‫‪.3‬ﻗﺎﻋﺪﺓ ﺍﻟﻨﺤﻮ‪:‬‬
‫ﺍﻟﻘﺎﻋﺪﺓﺍﻟﺪﻻﻟﻴﺔ‪:> ←expr< .actual_type> :‬ﺍﻟﻤﺴﻨﺪ ‪actual_type‬‬
‫<‪.actual_type == >expr< .norm_type >var‬‬ ‫‪var<.‬‬
‫<‪→>expr‬ﺃ | ﺏ | ﺝ‬ ‫‪.4‬ﻗﺎﻋﺪﺓ ﺍﻟﻨﺤﻮ‪:‬‬
‫ﺍﻟﻘﺎﻋﺪﺓﺍﻟﺪﻻﻟﻴﺔ‪←var< .actual_type> :‬ﺑﺤﺚ )>‪(var< .string‬‬
‫ﺗﺒﺤﺚﻭﻇﻴﻔﺔ ﺍﻟﺒﺤﺚ ﻋﻦ ﺍﺳﻢ ﻣﺘﻐﻴﺮ ﻣﻌﻴﻦ ﻓﻲ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﻭﺗﻌﻴﺪ ﻧﻮﻉ ﺍﻟﻤﺘﻐﻴﺮ‪.‬‬

‫ﺷﺠﺮﺓﺗﺤﻠﻴﻞ ﺍﻟﺠﻤﻠﺔﺃ = ﺃ ‪ +‬ﺏﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻓﻲ ﺍﻟﻤﺜﺎﻝ ‪ 3.6‬ﻓﻲ‬


‫ﺍﻟﺸﻜﻞ‪ .3.6‬ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻓﻲ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ‪ ،‬ﺗﺘﻢ ﺇﺿﺎﻓﺔ ﺍﻷﺭﻗﺎﻡ ﺍﻟﻤﻮﺿﻮﻋﺔ ﺑﻴﻦ ﻗﻮﺳﻴﻦ‬
‫ﺑﻌﺪﺗﺴﻤﻴﺎﺕ ﺍﻟﻌﻘﺪ ﺍﻟﻤﺘﻜﺮﺭﺓ ﻓﻲ ﺍﻟﺸﺠﺮﺓ ﺑﺤﻴﺚ ﻳﻤﻜﻦ ﺍﻟﺮﺟﻮﻉ ﺇﻟﻴﻬﺎ ﺑﺸﻜﻞ ﻻ ﻟﺒﺲ ﻓﻴﻪ‪.‬‬
‫‪137‬‬ ‫‪3.4‬ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺔ‬

‫>ﺗﻌﻴﻴﻦ<‬ ‫ﺍﻟﺸﻜﻞ‪3.6‬‬

‫ﺷﺠﺮﺓﺗﺤﻠﻴﻞ ﻝ‬
‫ﺃ= ﺃ ‪ +‬ﺏ‬

‫<‪>expr‬‬

‫>ﻣﺨﺘﻠﻒ< ]‪[3‬‬ ‫>ﻣﺨﺘﻠﻒ< ]‪[2‬‬ ‫>ﻓﺎﺭ<‬

‫ﺏ‬ ‫‪+‬‬ ‫ﺃ‬ ‫=‬ ‫ﺃ‬

‫‪3.4.6‬ﺣﺴﺎﺏ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ‬


‫ﺍﻵﻥ ‪،‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﻋﻤﻠﻴﺔ ﺣﺴﺎﺏ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﻟﺸﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰ ﺃﺣﻴﺎﻧﺎً‬
‫ﺗﺰﻳﻴﻦﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ‪ .‬ﺇﺫﺍ ﻛﺎﻧﺖ ﺟﻤﻴﻊ ﺍﻟﺴﻤﺎﺕ ﻣﻮﺭﻭﺛﺔ ‪ ،‬ﻓﻴﻤﻜﻦ ﺃﻥ ﻳﺴﺘﻤﺮ ﺫﻟﻚ ﺑﺘﺮﺗﻴﺐ‬
‫ﺗﻨﺎﺯﻟﻲﺗﻤﺎﻣﺎً ‪ ،‬ﻣﻦ ﺍﻟﺠﺬﺭ ﺇﻟﻰ ﺍﻷﻭﺭﺍﻕ‪ .‬ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺴﺘﻤﺮ ﻓﻲ ﺗﺮﺗﻴﺐ ﺳﻔﻠﻲ‬
‫ﺗﻤﺎﻣﺎً ‪،‬ﻣﻦ ﺍﻷﻭﺭﺍﻕ ﺇﻟﻰ ﺍﻟﺠﺬﺭ ‪ ،‬ﺇﺫﺍ ﺗﻢ ﺗﺼﻨﻴﻊ ﺟﻤﻴﻊ ﺍﻟﺴﻤﺎﺕ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﻗﻮﺍﻋﺪﻧﺎ ﺍﻟﻨﺤﻮﻳﺔ‬
‫ﺗﺤﺘﻮﻱﻋﻠﻰ ﺳﻤﺎﺕ ﻣﺮﻛﺒﺔ ﻭﻣﻮﺭﻭﺛﺔ ‪ ،‬ﻻ ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻘﻴﻴﻢ ﻓﻲ ﺃﻱ ﺍﺗﺠﺎﻩ ﻭﺍﺣﺪ‪.‬‬
‫ﻓﻴﻤﺎﻳﻠﻲ ﺗﻘﻴﻴﻢ ﻟﻠﺴﻤﺎﺕ ‪ ،‬ﺑﺘﺮﺗﻴﺐ ﻳﻤﻜﻦ ﺣﺴﺎﺑﻬﺎ ﺑﻪ‪:‬‬

‫‪>.1‬ﻓﺎﺭ<‪ .‬ﺍﻟﻨﻮﻉ_ ﺍﻟﻔﻌﻠﻲ←ﺍﺑﺤﺚ ﻋﻦ)ﺃ( )ﺍﻟﻘﺎﻋﺪﺓ ‪(4‬‬


‫ﻧﻮﻉﻣﺘﻮﻗﻊ ‪(> ←2. >expr<.‬ﺍﻟﻘﺎﻋﺪﺓ ‪var< .actual_type )1‬‬
‫‪←3. >var< ]2[ .actual_type‬ﺍﺑﺤﺚ ﻋﻦ)ﺃ( )ﺍﻟﻘﺎﻋﺪﺓ ‪> (4‬ﻓﺎﺭ‬
‫< ]‪ .[3‬ﺍﻟﻨﻮﻉ_ ﺍﻟﻮﺍﻗﻌﻲ←ﺍﺑﺤﺚ ﻋﻦ)ﺏ( )ﺍﻟﻘﺎﻋﺪﺓ ‪(4‬‬
‫ﺍﻟﻨﻮﻉ_ ﺍﻟﻔﻌﻠﻲ ‪←4. >expr<.‬ﺇﻣﺎ ﺻﺤﻴﺢ ﺃﻭ ﺻﺤﻴﺢ )ﺍﻟﻘﺎﻋﺪﺓ ‪(2‬‬
‫ﺇﻣﺎ‪5. >expr< .uable_type == >expr< .actual_type‬‬
‫ﺻﻮﺍﺏﺃﻭ ﺧﻄﺄ )ﺍﻟﻘﺎﻋﺪﺓ ‪(2‬‬

‫ﺗﻮﺿﺢﺍﻟﺸﺠﺮﺓ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ 3.7‬ﺗﺪﻓﻖ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﻓﻲ ﻣﺜﺎﻝ ﺍﻟﺸﻜﻞ ‪ .3.6‬ﺗﺴﺘﺨﺪﻡ‬


‫ﺍﻟﺨﻄﻮﻁﺍﻟﺼﻠﺒﺔ ﻟﺸﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ؛ ﺗﻈﻬﺮ ﺍﻟﺨﻄﻮﻁ ﺍﻟﻤﺘﻘﻄﻌﺔ ﺗﺪﻓﻖ ﺍﻟﺴﻤﺎﺕ ﻓﻲ ﺍﻟﺸﺠﺮﺓ‪.‬‬

‫ﺗﻈُﻬﺮﺍﻟﺸﺠﺮﺓ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ 3.8‬ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﺍﻟﻨﻬﺎﺉﻴﺔ ﻋﻠﻰ ﺍﻟﻌﻘﺪ‪ .‬ﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ‪،‬ﺃﻳﺘﻢ‬
‫ﺗﻌﺮﻳﻔﻪﻋﻠﻰ ﺃﻧﻪ ﺣﻘﻴﻘﻲ ﻭﺏﻳﺘﻢ ﺗﻌﺮﻳﻔﻪ ﻋﻠﻰ ﺃﻧﻪ ﻋﺪﺩ ﺻﺤﻴﺢ‪.‬‬
‫ﻳﻌﺪﺗﺤﺪﻳﺪ ﺃﻣﺮ ﺗﻘﻴﻴﻢ ﺍﻟﺴﻤﺔ ﻟﻠﺤﺎﻟﺔ ﺍﻟﻌﺎﻣﺔ ﻟﻘﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ ﻣﺸﻜﻠﺔ ﻣﻌﻘﺪﺓ ﺗﺘﻄﻠﺐ ﺇﻧﺸﺎء‬
‫ﻣﺨﻄﻂﺗﺒﻌﻴﺔ ﻹﻇﻬﺎﺭ ﺟﻤﻴﻊ ﺗﺒﻌﻴﺎﺕ ﺍﻟﺴﻤﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪138‬‬

‫>ﺗﻌﻴﻴﻦ<‬ ‫ﺍﻟﺸﻜﻞ‪3.7‬‬

‫ﺗﺪﻓﻖﺍﻟﺼﻔﺎﺕ ﻓﻲ‬
‫ﺍﻟﺸﺠﺮﺓ‬

‫<‪>expr‬‬ ‫ﺍﻟﻨﻮﻉ_ ﺍﻟﻤﺘﻮﻗﻊ‬


‫ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ‬

‫ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ‬ ‫ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ‬
‫ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ‬
‫>ﻣﺨﺘﻠﻒ< ]‪[3‬‬ ‫>ﻣﺨﺘﻠﻒ< ]‪[2‬‬ ‫>ﻓﺎﺭ<‬

‫ﺏ‬ ‫‪+‬‬ ‫ﺃ‬ ‫=‬ ‫ﺃ‬

‫>ﺗﻌﻴﻴﻦ<‬ ‫ﺍﻟﺸﻜﻞ‪3.8‬‬

‫ﻳﻌﺰﻯﺑﺎﻟﻜﺎﻣﻞ‬
‫ﺗﺤﻠﻴﻞﺷﺠﺮﺓ‬

‫ﺍﻟﻨﻮﻉﺍﻟﻤﺘﻮﻗﻊ = ﺍﻟﻨﻮﻉ ﺍﻟﺤﻘﻴﻘﻲ‬ ‫<‪>expr‬‬


‫ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ = ﺍﻟﻨﻮﻉ ﺍﻟﺤﻘﻴﻘﻲ‬

‫= ﺍﻟﻨﻮﻉ ﺍﻟﻔﻌﻠﻲ [‪>var< ]3‬‬ ‫= ﺍﻟﻨﻮﻉ ﺍﻟﻔﻌﻠﻲ [‪>var< ]2‬‬ ‫>ﻓﺎﺭ<‬ ‫ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ =‬
‫‪int_type‬‬ ‫ﺍﻟﻨﻮﻉﺍﻟﺤﻘﻴﻘﻲ‬ ‫ﺍﻟﻨﻮﻉﺍﻟﺤﻘﻴﻘﻲ‬

‫ﺏ‬ ‫‪+‬‬ ‫ﺃ‬ ‫=‬ ‫ﺃ‬

‫‪3.4.7‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻳﻌﺪﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺪﻻﻟﻴﺔ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﻐﺔ ﺟﺰءﺍً ﺃﺳﺎﺳﻴﺎً ﻣﻦ ﺟﻤﻴﻊ ﺍﻟﻤﺠﻤﻌﻴﻦ‪ .‬ﺣﺘﻰ ﻟﻮ ﻟﻢ‬
‫ﻳﺴﻤﻊﻛﺎﺗﺐ ﺍﻟﻤﺘﺮﺟﻢ ﻋﻦ ﻗﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ ﻣﻦ ﻗﺒﻞ ‪ ،‬ﻓﺴﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺃﻓﻜﺎﺭﻫﻢ ﺍﻷﺳﺎﺳﻴﺔ‬
‫ﻟﺘﺼﻤﻴﻢﺍﺧﺘﺒﺎﺭﺍﺕ ﻗﻮﺍﻋﺪ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﻤﺘﺮﺟﻢ‪.‬‬

‫ﻭﺍﺣﺪﺓﻣﻦ ﺍﻟﺼﻌﻮﺑﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻓﻲ ﺍﺳﺘﺨﺪﺍﻡ ﻗﻮﺍﻋﺪ ﺍﻟﻨﺤﻮ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﺴﻤﺎﺕ ﻟﻮﺻﻒ‬


‫ﻛﻞﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻭﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﻐﺔ ﺑﺮﻣﺠﺔ ﻣﻌﺎﺻﺮﺓ ﺣﻘﻴﻘﻴﺔ ﻫﻮ ﺣﺠﻢ ﻭﺗﻌﻘﻴﺪ ﻗﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ‬
‫ﺍﻟﻨﺤﻮﻳﺔ‪.‬ﺇﻥ ﺍﻟﻌﺪﺩ ﺍﻟﻜﺒﻴﺮ ﻣﻦ ﺍﻟﺴﻤﺎﺕ ﻭﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺪﻻﻟﻴﺔ ﺍﻟﻤﻄﻠﻮﺑﺔ ﻟﻠﻐﺔ ﺑﺮﻣﺠﺔ ﻛﺎﻣﻠﺔ ﻳﺠﻌﻞ ﻣﻦ‬
‫ﺍﻟﺼﻌﺐﻛﺘﺎﺑﺔ ﻭﻗﺮﺍءﺓ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﻗﻴﻢ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺠﺪﻭﻟﻴﺔ‬
‫ﻋﻠﻰﺷﺠﺮﺓ ﺗﺤﻠﻴﻞ ﻛﺒﻴﺮﺓ ﻣﻜﻠﻔﺔ ﻟﻠﺘﻘﻴﻴﻢ‪ .‬ﻣﻦ ﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ‪ ،‬ﺍﻟﺴﻤﺔ ﺃﻗﻞ ﺭﺳﻤﻴﺔ‬
‫‪139‬‬ ‫‪3.5‬ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ :‬ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‬

‫ﺍﻟﻘﻮﺍﻋﺪﺍﻟﻨﺤﻮﻳﺔ ﻫﻲ ﺃﺩﺍﺓ ﻗﻮﻳﺔ ﻭﺷﺎﺉﻌﺔ ﺍﻻﺳﺘﺨﺪﺍﻡ ﻟﻠﻜﺘﺎﺏ ﺍﻟﻤﺘﺮﺟﻤﻴﻦ ‪ ،‬ﺍﻟﺬﻳﻦ ﻳﻬﺘﻤﻮﻥ‬


‫ﺑﻌﻤﻠﻴﺔﺇﻧﺘﺎﺝ ﺍﻟﻤﺘﺮﺟﻢ ﺃﻛﺜﺮ ﻣﻦ ﺍﻫﺘﻤﺎﻣﻬﻢ ﺑﺎﻟﺸﻜﻠﻴﺎﺕ‪.‬‬

‫‪3.5‬ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ :‬ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‬


‫ﻧﻨﺘﻘﻞﺍﻵﻥ ﺇﻟﻰ ﺍﻟﻤﻬﻤﺔ ﺍﻟﺼﻌﺒﺔ ﻟﻮﺻﻒﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‪ ،‬ﺃﻭ ﻣﻌﻨﻰ ‪ ،‬ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﻭﻭﺣﺪﺍﺕﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﺨﺎﺻﺔ ﺑﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻧﻈﺮﺍً ﻟﻘﻮﺓ ﻭﻃﺒﻴﻌﻴﺔ ﺍﻟﺘﺪﻭﻳﻦ ﺍﻟﻤﺘﺎﺡ ‪ ،‬ﻓﺈﻥ ﻭﺻﻒ‬
‫ﺍﻟﻨﺤﻮﻳﻌﺪ ﺃﻣﺮﺍً ﺑﺴﻴﻄﺎً ﻧﺴﺒﻴﺎً‪ .‬ﻣﻦ ﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ‪ ،‬ﻟﻢ ﻳﺘﻢ ﻭﺿﻊ ﺃﻱ ﺗﺪﻭﻳﻦ ﺃﻭ ﻧﻬﺞ ﻣﻘﺒﻮﻝ ﻋﺎﻟﻤﻴﺎً‬
‫ﻟﻠﺪﻻﻻﺕﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ‪ .‬ﻓﻲ ﻫﺬﺍ ﺍﻟﻘﺴﻢ ‪ ،‬ﻧﺼﻒ ﺑﺈﻳﺠﺎﺯ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻷﺳﺎﻟﻴﺐ ﺍﻟﺘﻲ ﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ‪.‬‬
‫ﺑﺎﻟﻨﺴﺒﺔﻟﺒﻘﻴﺔ ﻫﺬﺍ ﺍﻟﻘﺴﻢ ‪ ،‬ﻋﻨﺪﻣﺎ ﻧﺴﺘﺨﺪﻡ ﺍﻟﻤﺼﻄﻠﺢﺩﻻﻻﺕ‪،‬ﻧﻌﻨﻲ ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‪.‬‬

‫ﻫﻨﺎﻙﻋﺪﺓ ﺃﺳﺒﺎﺏ ﻣﺨﺘﻠﻔﺔ ﻭﺭﺍء ﺍﻟﺤﺎﺟﺔ ﺇﻟﻰ ﻣﻨﻬﺠﻴﺔ ﻭﺗﺪﻭﻳﻦ ﻟﻮﺻﻒ ﺍﻟﺪﻻﻻﺕ‪ .‬ﻣﻦ‬
‫ﺍﻟﻮﺍﺿﺢﺃﻥ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻳﺤﺘﺎﺟﻮﻥ ﺇﻟﻰ ﻣﻌﺮﻓﺔ ﺑﺎﻟﻀﺒﻂ ﻣﺎ ﺗﻔﻌﻠﻪ ﻋﺒﺎﺭﺍﺕ ﺍﻟﻠﻐﺔ ﻗﺒﻞ ﺃﻥ ﻳﺘﻤﻜﻨﻮﺍ‬
‫ﻣﻦﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﺑﻔﻌﺎﻟﻴﺔ ﻓﻲ ﺑﺮﺍﻣﺠﻬﻢ‪ .‬ﻳﺠﺐ ﺃﻥ ﻳﻌﺮﻑ ﻣﺆﻟﻔﻮ ﺍﻟﻤﺘﺮﺟﻤﻴﻦ ﺑﺎﻟﻀﺒﻂ ﻣﺎ ﺗﻌﻨﻴﻪ‬
‫ﺗﺮﺍﻛﻴﺐﺍﻟﻠﻐﺔ ﻟﺘﺼﻤﻴﻢ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻨﻔﻴﺬ ﻟﻬﻢ ﺑﺸﻜﻞ ﺻﺤﻴﺢ‪ .‬ﺇﺫﺍ ﻛﺎﻧﺖ ﻫﻨﺎﻙ ﻣﻮﺍﺻﻔﺎﺕ ﺩﻻﻻﺕ‬
‫ﺩﻗﻴﻘﺔﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻓﻤﻦ ﺍﻟﻤﺤﺘﻤﻞ ﺃﻥ ﻳﺘﻢ ﺇﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﻬﺬﻩ ﺍﻟﻠﻐﺔ ﺩﻭﻥ‬
‫ﺍﺧﺘﺒﺎﺭ‪.‬ﺃﻳﻀﺎً ‪ ،‬ﻳﻤﻜﻦ ﺇﻇﻬﺎﺭ ﺍﻟﻤﺘﺮﺟﻤﻴﻦ ﻹﻧﺘﺎﺝ ﺑﺮﺍﻣﺞ ﺗﻈﻬﺮ ﺑﺎﻟﻀﺒﻂ ﺍﻟﺴﻠﻮﻙ ﺍﻟﻮﺍﺭﺩ ﻓﻲ ﺗﻌﺮﻳﻒ‬
‫ﺍﻟﻠﻐﺔ ؛ﺃﻱ ﺃﻧﻪ ﻳﻤﻜﻦ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺘﻬﺎ‪ .‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﻮﺍﺻﻔﺎﺕ ﺍﻟﻜﺎﻣﻠﺔ ﻟﺒﻨﺎء ﺍﻟﺠﻤﻠﺔ‬
‫ﻭﺩﻻﻻﺕﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺑﻮﺍﺳﻄﺔ ﺃﺩﺍﺓ ﻹﻧﺸﺎء ﻣﺘﺮﺟﻢ ﻟﻠﻐﺔ ﺗﻠﻘﺎﺉﻴﺎً‪ .‬ﺃﺧﻴﺮﺍ‪ً،‬‬

‫ﻳﺤﺪﺩﻣﻄﻮﺭﻭ ﺍﻟﺒﺮﺍﻣﺞ ﻭﻣﺼﻤﻤﻲ ﺍﻟﻤﺘﺮﺟﻢ ﻋﺎﺩﺓ ًﺩﻻﻻﺕ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻣﻦ ﺧﻼﻝ ﻗﺮﺍءﺓ‬
‫ﺍﻟﺘﻔﺴﻴﺮﺍﺕﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﻓﻲ ﻛﺘﻴﺒﺎﺕ ﺍﻟﻠﻐﺔ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﺘﻔﺴﻴﺮﺍﺕ ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﻜﻮﻥ ﻏﻴﺮ‬
‫ﺩﻗﻴﻘﺔﻭﻏﻴﺮ ﻛﺎﻣﻠﺔ ‪ ،‬ﻓﻤﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻫﺬﺍ ﺍﻟﻨﻬﺞ ﻏﻴﺮ ﻣﺮﺽ‪ .‬ﻧﻈﺮﺍً ﻟﻌﺪﻡ ﻭﺟﻮﺩ ﻣﻮﺍﺻﻔﺎﺕ‬
‫ﺩﻻﻻﺕﻛﺎﻣﻠﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻧﺎﺩﺭﺍً ﻣﺎ ﻳﺘﻢ ﺇﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺩﻭﻥ ﺍﺧﺘﺒﺎﺭ ‪ ،‬ﻭﻻ ﻳﺘﻢ ﺇﻧﺸﺎء‬
‫ﺍﻟﻤﺠﻤﻌﻴﻦﺍﻟﺘﺠﺎﺭﻳﻴﻦ ﺗﻠﻘﺎﺉﻴﺎً ﻣﻦ ﺃﻭﺻﺎﻑ ﺍﻟﻠﻐﺔ‪.‬‬

‫‪.‬ﻭﻫﻲﻟﻐﺔ ﻭﻇﻴﻔﻴﺔ ﻣﻮﺻﻮﻓﺔ ﻓﻲ ﺍﻟﻔﺼﻞ ‪ ، 15‬ﻫﻲ ﻭﺍﺣﺪﺓ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻘﻠﻴﻠﺔ ﺍﻟﺘﻲ‬
‫ﻳﺘﻀﻤﻦﺗﻌﺮﻳﻔﻬﺎ ﻭﺻﻔﺎً ﻟﻐﻮﻳﺎً ﺭﺳﻤﻴﺎً‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﻴﺴﺖ ﻭﺍﺣﺪﺓ‬
‫ﻣﻮﺻﻮﻓﺔﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ‪ ،‬ﺣﻴﺚ ﻳﺮﻛﺰ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻋﻠﻰ ﺍﻷﺳﺎﻟﻴﺐ ﺍﻟﻤﻨﺎﺳﺒﺔ ﻟﻠﻐﺎﺕ ﺍﻷﻣﺮ ‪،‬‬
‫‪Scheme‬‬

‫‪3.5.1‬ﺩﻻﻻﺕ ﺍﻟﻌﻤﻠﻴﺎﺕ‬
‫ﺍﻟﻔﻜﺮﺓﻭﺭﺍءﺩﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻞﻫﻮ ﻭﺻﻒ ﻣﻌﻨﻰ ﺍﻟﺒﻴﺎﻥ ﺃﻭ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻣﻦ ﺧﻼﻝ ﺗﺤﺪﻳﺪ ﺗﺄﺛﻴﺮﺍﺕ‬
‫ﺗﺸﻐﻴﻠﻪﻋﻠﻰ ﺍﻟﺠﻬﺎﺯ‪ .‬ﻳﺘﻢ ﻋﺮﺽ ﺍﻟﺘﺄﺛﻴﺮﺍﺕ ﻋﻠﻰ ﺍﻟﺠﻬﺎﺯ ﻛﺘﺴﻠﺴﻞ ﺍﻟﺘﻐﻴﻴﺮﺍﺕ ﻓﻲ‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪140‬‬

‫ﺍﻟﺤﺎﻟﺔ ‪،‬ﺣﻴﺚ ﺗﻜﻮﻥ ﺣﺎﻟﺔ ﺍﻟﺠﻬﺎﺯ ﻫﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻟﻘﻴﻢ ﻓﻲ ﺗﺨﺰﻳﻨﻬﺎ‪ .‬ﺇﺫﻥ ‪ ،‬ﻳﺘﻢ ﺇﻋﻄﺎء ﻭﺻﻒ‬
‫ﺩﻻﻻﺕﺗﺸﻐﻴﻠﻴﺔ ﻭﺍﺿﺢ ﻣﻦ ﺧﻼﻝ ﺗﻨﻔﻴﺬ ﻧﺴﺨﺔ ﻣﺠﻤﻌﺔ ﻣﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻰ ﺟﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ‪ .‬ﻗﺎﻡ‬
‫ﻣﻌﻈﻢﺍﻟﻤﺒﺮﻣﺠﻴﻦ ‪ ،‬ﻓﻲ ﻣﻨﺎﺳﺒﺔ ﻭﺍﺣﺪﺓ ﻋﻠﻰ ﺍﻷﻗﻞ ‪ ،‬ﺑﻜﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﺍﺧﺘﺒﺎﺭ ﺻﻐﻴﺮ ﻟﺘﺤﺪﻳﺪ ﻣﻌﻨﻰ‬
‫ﺑﻌﺾﺗﻜﻮﻳﻨﺎﺕ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻏﺎﻟﺒﺎً ﺃﺛﻨﺎء ﺗﻌﻠﻢ ﺍﻟﻠﻐﺔ‪ .‬ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ‪ ،‬ﻣﺎ ﻳﻔﻌﻠﻪ ﻣﺜﻞ ﻫﺬﺍ‬
‫ﺍﻟﻤﺒﺮﻣﺞﻫﻮ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ ﻟﺘﺤﺪﻳﺪ ﻣﻌﻨﻰ ﺍﻟﺒﻨﺎء‪.‬‬

‫ﻫﻨﺎﻙﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺸﻜﻼﺕ ﺍﻟﻤﺘﻌﻠﻘﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﻨﻬﺞ ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﺃﻭﺻﺎﻑ‬


‫ﺩﻻﻻﺕﺭﺳﻤﻴﺔ ﻛﺎﻣﻠﺔ‪ .‬ﺃﻭﻻ ً‪ ،‬ﺍﻟﺨﻄﻮﺍﺕ ﺍﻟﻔﺮﺩﻳﺔ ﻓﻲ ﺗﻨﻔﻴﺬ ﻟﻐﺔ ﺍﻵﻟﺔ ﻭﺍﻟﺘﻐﻴﻴﺮﺍﺕ ﺍﻟﻨﺎﺗﺠﺔ ﻓﻲ ﺣﺎﻟﺔ‬
‫ﺍﻵﻟﺔﺻﻐﻴﺮﺓ ﺟﺪﺍً ﻭﻣﺘﻌﺪﺩﺓ ﺟﺪﺍً‪ .‬ﺛﺎﻧﻴﺎً ‪ ،‬ﺗﺨﺰﻳﻦ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺤﻘﻴﻘﻲ ﻛﺒﻴﺮ ﺟﺪﺍً ﻭﻣﻌﻘﺪ‪ .‬ﻋﺎﺩﺓ ﻣﺎ‬
‫ﺗﻜﻮﻥﻫﻨﺎﻙ ﻋﺪﺓ ﻣﺴﺘﻮﻳﺎﺕ ﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﺬﺍﻛﺮﺓ ‪ ،‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺍﺗﺼﺎﻻﺕ ﺑﺄﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ ﻭﺃﺟﻬﺰﺓ‬
‫ﺫﺍﻛﺮﺓﺃﺧﺮﻯ ﻳﻤﻜﻦ ﻋﺪﻫﺎ ﻋﺒﺮ ﺍﻟﺸﺒﻜﺎﺕ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻻ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺎﺕ ﺍﻵﻟﺔ ﻭﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﺍﻟﺤﻘﻴﻘﻴﺔﻟﻠﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ ﺍﻟﺮﺳﻤﻴﺔ‪ .‬ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﺗﻢ ﺗﺼﻤﻴﻢ ﻟﻐﺎﺕ ﺍﻟﻤﺴﺘﻮﻯ‬
‫ﺍﻟﻤﺘﻮﺳﻂﻭﺍﻟﻤﺘﺮﺟﻤﻴﻦ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﺜﺎﻟﻴﺔ ﺧﺼﻴﺼﺎً ﻟﻬﺬﻩ ﺍﻟﻌﻤﻠﻴﺔ‪.‬‬

‫ﻫﻨﺎﻙﻣﺴﺘﻮﻳﺎﺕ ﻣﺨﺘﻠﻔﺔ ﻣﻦ ﺍﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ‪ .‬ﻋﻠﻰ ﺃﻋﻠﻰ ﻣﺴﺘﻮﻯ ‪،‬‬


‫ﻳﻜﻮﻥﺍﻻﻫﺘﻤﺎﻡ ﺑﺎﻟﻨﺘﻴﺠﺔ ﺍﻟﻨﻬﺎﺉﻴﺔ ﻟﺘﻨﻔﻴﺬ ﺑﺮﻧﺎﻣﺞ ﻛﺎﻣﻞ‪ .‬ﻫﺬﺍ ﻳﺴﻤﻰ ﻓﻲ ﺑﻌﺾ ﺍﻷﺣﻴﺎﻥﺩﻻﻻﺕ‬
‫ﺍﻟﻌﻤﻠﻴﺎﺕﺍﻟﻄﺒﻴﻌﻴﺔ‪ .‬ﻓﻲ ﺃﺩﻧﻰ ﻣﺴﺘﻮﻯ ‪ ،‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ ﻟﺘﺤﺪﻳﺪ ﺍﻟﻤﻌﻨﻰ‬
‫ﺍﻟﺪﻗﻴﻖﻟﻠﺒﺮﻧﺎﻣﺞ ﻣﻦ ﺧﻼﻝ ﻓﺤﺺ ﺍﻟﺘﺴﻠﺴﻞ ﺍﻟﻜﺎﻣﻞ ﻟﺘﻐﻴﻴﺮﺍﺕ ﺍﻟﺤﺎﻟﺔ ﺍﻟﺘﻲ ﺗﺤﺪﺙ ﻋﻨﺪ ﺗﻨﻔﻴﺬ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞ‪.‬ﻫﺬﺍ ﺍﻻﺳﺘﺨﺪﺍﻡ ﻳﺴﻤﻰ ﻓﻲ ﺑﻌﺾ ﺍﻷﺣﻴﺎﻥﺩﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻞ ﺍﻟﻬﻴﻜﻠﻴﺔ‪.‬‬

‫‪3.5.1.1‬ﺍﻟﻌﻤﻠﻴﺔ ﺍﻷﺳﺎﺳﻴﺔ‬
‫ﺗﺘﻤﺜﻞﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻓﻲ ﺇﻧﺸﺎء ﻭﺻﻒ ﺩﻻﻻﺕ ﺗﺸﻐﻴﻠﻴﺔ ﻟﻠﻐﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﻭﺳﻴﻄﺔ‬
‫ﻣﻨﺎﺳﺒﺔ ‪،‬ﺣﻴﺚ ﺗﻜﻮﻥ ﺍﻟﺴﻤﺔ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﻐﺔ ﻫﻲ ﺍﻟﻮﺿﻮﺡ‪ .‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻟﻜﻞ ﺑﻨﺎء ﻟﻠﻐﺔ‬
‫ﺍﻟﻮﺳﻴﻄﺔﻣﻌﻨﻰ ﻭﺍﺿﺢ ﻻ ﻟﺒﺲ ﻓﻴﻪ‪ .‬ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﻓﻲ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻟﻤﺘﻮﺳﻂ ‪ ،‬ﻷﻥ ﻟﻐﺔ ﺍﻵﻟﺔ‬
‫ﻣﻨﺨﻔﻀﺔﺍﻟﻤﺴﺘﻮﻯ ﺑﺤﻴﺚ ﻻ ﻳﻤﻜﻦ ﻓﻬﻤﻬﺎ ﺑﺴﻬﻮﻟﺔ ‪ ،‬ﻭﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻟﻐﺔ ﺃﺧﺮﻯ ﻋﺎﻟﻴﺔ‬
‫ﺍﻟﻤﺴﺘﻮﻯﻟﻴﺴﺖ ﻣﻨﺎﺳﺒﺔ‪ .‬ﺇﺫﺍ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻘﺮﺭ ﺍﺳﺘﺨﺪﺍﻡ ﻭﺻﻒ ﺍﻟﺪﻻﻻﺕ ﻟﻠﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ‬
‫ﺍﻟﻄﺒﻴﻌﻴﺔ ‪،‬ﻓﻴﺠﺐ ﺇﻧﺸﺎء ﺁﻟﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ )ﻣﺘﺮﺟﻢ ﻓﻮﺭﻱ( ﻟﻠﻐﺔ ﺍﻟﻮﺳﻴﻄﺔ‪ .‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺠﻬﺎﺯ‬
‫ﺍﻟﻈﺎﻫﺮﻱﻟﺘﻨﻔﻴﺬ ﺇﻣﺎ ﻋﺒﺎﺭﺍﺕ ﻓﺮﺩﻳﺔ ﺃﻭ ﻣﻘﺎﻃﻊ ﺭﻣﺰ ﺃﻭ ﺑﺮﺍﻣﺞ ﻛﺎﻣﻠﺔ‪ .‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻭﺻﻒ‬
‫ﺍﻟﺪﻻﻻﺕﺑﺪﻭﻥ ﺁﻟﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ ﺇﺫﺍ ﻛﺎﻥ ﻣﻌﻨﻰ ﻋﺒﺎﺭﺓ ﻭﺍﺣﺪﺓ ﻫﻮ ﻛﻞ ﻣﺎ ﻫﻮ ﻣﻄﻠﻮﺏ‪ .‬ﻓﻲ ﻫﺬﺍ‬
‫ﺍﻻﺳﺘﺨﺪﺍﻡ ‪،‬‬

‫ﺍﻟﻌﻤﻠﻴﺔﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ ﻟﻴﺴﺖ ﻏﻴﺮ ﻋﺎﺩﻳﺔ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ‬
‫ﺍﻟﻤﻔﻬﻮﻡﺑﺸﻜﻞ ﻣﺘﻜﺮﺭ ﻓﻲ ﺑﺮﻣﺠﺔ ﺍﻟﻜﺘﺐ ﺍﻟﻤﺪﺭﺳﻴﺔ ﻭﺍﻷﺩﻟﺔ ﺍﻟﻤﺮﺟﻌﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺩﻻﻻﺕ ‪C‬ﻝﻳﻤﻜﻦ ﻭﺻﻒ ﺍﻟﺒﻨﺎء ﻣﻦ ﺣﻴﺚ ﻋﺒﺎﺭﺍﺕ ﺃﺑﺴﻂ ‪ ،‬ﻛﻤﺎ ﻓﻲ‬
‫‪141‬‬ ‫‪3.5‬ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ :‬ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‬

‫ﻣﻌﻨﻰ‬ ‫ﺑﻴﺎﻥﺝ‬
‫؛‪expr1‬‬ ‫ﻝ)} (‪ expr3‬؛ ﺇﻛﺴﺒﺮ ‪expr1 2‬‬
‫ﻟﻮ‪expr2 == 0‬ﺍﺫﻫﺐ ﺇﻟﻰ‬ ‫ﺣﻠﻘﺔ‪:‬‬ ‫‪...‬‬
‫ﺧﺎﺭﺝ ‪. . .‬‬ ‫{‬
‫‪expr3.‬‬
‫ﺍﺫﻫﺐﺇﻟﻰﺣﻠﻘﺔ‬
‫‪...‬‬ ‫ﺧﺎﺭﺝ‪:‬‬

‫ﺍﻟﻘﺎﺭﺉﺍﻟﺒﺸﺮﻱ ﻟﻤﺜﻞ ﻫﺬﺍ ﺍﻟﻮﺻﻒ ﻫﻮ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻻﻓﺘﺮﺍﺿﻲ ﻭﻳﻔﺘﺮﺽ ﺃﻧﻪ ﻗﺎﺩﺭ ﻋﻠﻰ "ﺗﻨﻔﻴﺬ"‬
‫ﺍﻟﺘﻌﻠﻴﻤﺎﺕﺍﻟﻮﺍﺭﺩﺓ ﻓﻲ ﺍﻟﺘﻌﺮﻳﻒ ﺑﺸﻜﻞ ﺻﺤﻴﺢ ﻭﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺗﺄﺛﻴﺮﺍﺕ "ﺍﻟﺘﻨﻔﻴﺬ"‪.‬‬

‫ﻏﺎﻟﺒﺎًﻣﺎ ﺗﻜﻮﻥ ﺍﻟﻠﻐﺔ ﺍﻟﻮﺳﻴﻄﺔ ﻭﺍﻵﻟﺔ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ ﺍﻟﻤﺮﺗﺒﻄﺔ ﺑﻬﺎ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺃﻭﺻﺎﻑ‬
‫ﺍﻟﺪﻻﻻﺕﺍﻟﺘﺸﻐﻴﻠﻴﺔ ﺍﻟﺮﺳﻤﻴﺔ ﻣﺠﺮﺩﺓ ﻟﻠﻐﺎﻳﺔ‪ .‬ﻣﻦ ﺍﻟﻤﻔﺘﺮﺽ ﺃﻥ ﺗﻜﻮﻥ ﺍﻟﻠﻐﺔ ﺍﻟﻮﺳﻴﻄﺔ ﻣﻼﺉﻤﺔ‬
‫ﻟﻶﻟﺔﺍﻻﻓﺘﺮﺍﺿﻴﺔ ‪ ،‬ﻭﻟﻴﺲ ﻟﻠﻘﺮﺍء ﺍﻟﺒﺸﺮﻳﻴﻦ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻷﻏﺮﺍﺿﻨﺎ ‪ ،‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ﻭﺳﻴﻄﺔ‬
‫ﺃﻛﺜﺮﺗﻮﺟﻬﺎ ًﻧﺤﻮ ﺍﻹﻧﺴﺎﻥ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﻗﺎﺉﻤﺔ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ‬
‫ﺳﺘﻜﻮﻥﻛﺎﻓﻴﺔ ﻟﻮﺻﻒ ﺩﻻﻻﺕ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﺒﺴﻴﻄﺔ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﻤﻮﺫﺟﻴﺔ‪:‬‬

‫‪ident = var‬‬
‫‪+ 1 id = ident -1‬‬
‫‪id = id‬‬
‫ﺍﺫﻫﺐﺇﻟﻰﻣﻠﺼﻖ‬
‫ﻟﻮﻓﺎﺭ ﺭﻳﻠﻮﺏ ﻓﺎﺭﺍﺫﻫﺐ ﺇﻟﻰﻣﻠﺼﻖ‬

‫ﻓﻲﻫﺬﻩ ﺍﻟﻌﺒﺎﺭﺍﺕ ‪ ،‬ﻳﻌﺪ ‪ relop‬ﺃﺣﺪ ﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﻌﻼﺉﻘﻴﺔ ﻣﻦ ﺍﻟﻤﺠﻤﻮﻋﺔ‬


‫}= ‪.، {=> ، = <،> ، <، <> ،‬ﺇﻣﺎ ﻣﻌﺮﻑ ﺃﻭ ﺛﺎﺑﺖ‪ .‬ﻫﺬﻩ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻛﻠﻬﺎ ﺑﺴﻴﻄﺔ ﻭﺑﺎﻟﺘﺎﻟﻲ ﻳﺴﻬﻞ‬
‫ﻓﻬﻤﻬﺎﻭﺗﻨﻔﻴﺬﻫﺎ ‪ var‬ﻣﻌﺮﻑ ‪ ،‬ﻭ ‪Ident‬‬

‫ﻳﺴﻤﺢﺍﻟﺘﻌﻤﻴﻢ ﺍﻟﺒﺴﻴﻂ ﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﺜﻼﺛﺔ ﻫﺬﻩ ﺑﺘﻮﺿﻴﺢ ﺍﻟﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ‬


‫ﺍﻟﺤﺴﺎﺑﻴﺔﺍﻟﻌﺎﻣﺔ ﻭﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ‪ .‬ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ‬

‫‪var ident = un_op var‬‬


‫‪ident = var bin_op‬‬

‫ﺣﻴﺚ‪ bin_op‬ﻋﺎﻣﻞ ﺣﺴﺎﺑﻲ ﺛﻨﺎﺉﻲ ﻭ ‪ un_op‬ﻋﺎﻣﻞ ﺃﺣﺎﺩﻱ‪ .‬ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ‬


‫ﺍﻟﻤﺘﻌﺪﺩﺓﻭﺗﺤﻮﻳﻼﺕ ﺍﻟﻨﻮﻉ ﺍﻟﺘﻠﻘﺎﺉﻲ ‪ ،‬ﺑﺎﻟﻄﺒﻊ ‪ ،‬ﺗﻌﻘﺪ ﻫﺬﺍ ﺍﻟﺘﻌﻤﻴﻢ‪ .‬ﺳﺘﺴﻤﺢ ﺇﺿﺎﻓﺔ ﻋﺪﺩ ﻗﻠﻴﻞ‬
‫ﻣﻦﺍﻹﺭﺷﺎﺩﺍﺕ ﺍﻟﺒﺴﻴﻄﺔ ﻧﺴﺒﻴﺎً ﺑﻮﺻﻒ ﺩﻻﻻﺕ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺴﺠﻼﺕ ﻭﺍﻟﻤﺆﺷﺮﺍﺕ ﻭﺍﻟﺒﺮﺍﻣﺞ‬
‫ﺍﻟﻔﺮﻋﻴﺔ‪.‬‬

‫ﻓﻲﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻣﻦ ‪ ،‬ﺗﻢ ﻭﺻﻒ ﺩﻻﻻﺕ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﻤﺨﺘﻠﻔﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﻟﻠﻐﺔ‬
‫ﺍﻟﻮﺳﻴﻄﺔ‪.‬‬
‫ﻭﺻﻒﺍﻟﻨﺤﻮ ﻭﺍﻟﻤﻌﺎﻧﻲ‬ ‫ﺍﻟﻔﺼﻞ‪3‬‬ ‫‪142‬‬

‫‪3.5.1.2‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻛﺎﻥﺃﻭﻝ ﻭﺃﻫﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻠﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ ﺍﻟﺮﺳﻤﻴﺔ ﻫﻮ ﻭﺻﻒ ﺩﻻﻻﺕ (‪I )Wegner ، 1972‬‬
‫‪ .PL /‬ﺗﻢ ﺗﺴﻤﻴﺔ ﻫﺬﻩ ﺍﻵﻟﺔ ﺍﻟﻤﺠﺮﺩﺓ ﺍﻟﺨﺎﺻﺔ ﻭﻗﻮﺍﻋﺪ ﺍﻟﺘﺮﺟﻤﺔ ﻟـ ‪ PL / I‬ﻣﻌﺎً ﺑﺎﺳﻢ ﻟﻐﺔ ﺗﻌﺮﻳﻒ‬
‫ﻓﻴﻴﻨﺎ)‪ ، (VDL‬ﺑﻌﺪ ﺍﻟﻤﺪﻳﻨﺔ ﺍﻟﺘﻲ ﺻﻤﻤﺘﻬﺎ ﺷﺮﻛﺔ ‪.IBM‬‬

‫ﺗﻮﻓﺮﺍﻟﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ ﻭﺳﻴﻠﺔ ﻓﻌﺎﻟﺔ ﻟﻮﺻﻒ ﺍﻟﺪﻻﻻﺕ ﻟﻤﺴﺘﺨﺪﻣﻲ ﺍﻟﻠﻐﺔ ﻭﻣﻨﻔﺬﻱ‬


‫ﺍﻟﻠﻐﺔ ‪،‬ﻃﺎﻟﻤﺎ ﻇﻠﺖ ﺍﻷﻭﺻﺎﻑ ﺑﺴﻴﻄﺔ ﻭﻏﻴﺮ ﺭﺳﻤﻴﺔ‪ .‬ﻭﺻﻒ ‪ VDL‬ﻟـ ‪ ، PL / I‬ﻟﻸﺳﻒ ‪ ،‬ﻣﻌﻘﺪ‬
‫ﻟﻠﻐﺎﻳﺔﺑﺤﻴﺚ ﻻ ﻳﺨﺪﻡ ﺃﻱ ﻏﺮﺽ ﻋﻤﻠﻲ‪.‬‬

‫ﺗﻌﺘﻤﺪﺩﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻞ ﻋﻠﻰ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺫﺍﺕ ﺍﻟﻤﺴﺘﻮﻳﺎﺕ ﺍﻷﺩﻧﻰ ‪ ،‬ﻭﻟﻴﺲ‬


‫ﺍﻟﺮﻳﺎﺿﻴﺎﺕ‪.‬ﻳﺘﻢ ﻭﺻﻒ ﻋﺒﺎﺭﺍﺕ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻭﺍﺣﺪﺓ ﻣﻦ ﺣﻴﺚ ﻋﺒﺎﺭﺍﺕ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺫﺍﺕ‬
‫ﺍﻟﻤﺴﺘﻮﻯﺍﻷﺩﻧﻰ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﻳﺆﺩﻱ ﻫﺬﺍ ﺍﻟﻨﻬﺞ ﺇﻟﻰ ﺍﻟﺪﺍﺉﺮﻳﺔ ‪ ،‬ﺣﻴﺚ ﻳﺘﻢ ﺗﻌﺮﻳﻒ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺑﺸﻜﻞ‬
‫ﻏﻴﺮﻣﺒﺎﺷﺮ ﻣﻦ ﺣﻴﺚ ﻧﻔﺴﻬﺎ‪ .‬ﺍﻷﺳﺎﻟﻴﺐ ﺍﻟﻤﻮﺻﻮﻓﺔ ﻓﻲ ﺍﻟﻘﺴﻤﻴﻦ ﺍﻟﺘﺎﻟﻴﻴﻦ ﻫﻲ ﺃﻛﺜﺮ ﺭﺳﻤﻴﺔ ‪،‬‬
‫ﺑﻤﻌﻨﻰﺃﻧﻬﺎ ﺗﺴﺘﻨﺪ ﺇﻟﻰ ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ﻭﺍﻟﻤﻨﻄﻖ ‪ ،‬ﻭﻟﻴﺲ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪3.5.2‬ﺩﻻﻻﺕ ﺍﻟﻜﻠﻤﺎﺕ‬
‫ﺩﻻﻻﺕﺩﻻﻻﺕﻫﻲ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﺮﺳﻤﻴﺔ ﺍﻷﻛﺜﺮ ﺻﺮﺍﻣﺔ ﻭﺍﻷﻛﺜﺮ ﺷﻬﺮﺓ ﻟﻮﺻﻒ ﻣﻌﻨﻰ ﺍﻟﺒﺮﺍﻣﺞ‪.‬‬
‫ﻳﻌﺘﻤﺪﺑﻘﻮﺓ ﻋﻠﻰ ﻧﻈﺮﻳﺔ ﺍﻟﻮﻇﻴﻔﺔ ﺍﻟﻌﻮﺩﻳﺔ‪ .‬ﺇﻥ ﺍﻟﻤﻨﺎﻗﺸﺔ ﺍﻟﺸﺎﻣﻠﺔ ﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ‬
‫ﻟﻮﺻﻒﺩﻻﻻﺕ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﺑﺎﻟﻀﺮﻭﺭﺓ ﻃﻮﻳﻠﺔ ﻭﻣﻌﻘﺪﺓ‪ .‬ﻧﻬﺪﻑ ﺇﻟﻰ ﺗﺰﻭﻳﺪ ﺍﻟﻘﺎﺭﺉ ﺑﻤﻘﺪﻣﺔ‬
‫ﻟﻠﻤﻔﺎﻫﻴﻢﺍﻟﻤﺮﻛﺰﻳﺔ ﻟﻠﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ‪ ،‬ﺇﻟﻰ ﺟﺎﻧﺐ ﺑﻌﺾ ﺍﻷﻣﺜﻠﺔ ﺍﻟﺒﺴﻴﻄﺔ ﺫﺍﺕ ﺍﻟﺼﻠﺔ‬
‫ﺑﻤﻮﺍﺻﻔﺎﺕﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫ﺗﺘﻄﻠﺐﻋﻤﻠﻴﺔ ﺑﻨﺎء ﻣﻮﺍﺻﻔﺎﺕ ﺩﻻﻻﺕ ﺗﻌﺮﻳﻔﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺃﻥ ﻳﻘﻮﻡ ﺍﻟﻤﺮء ﺑﺘﻌﺮﻳﻒ ﻛﻞ‬
‫ﻛﻴﺎﻥﻟﻐﻮﻱ ﻛﻼ ًﻣﻦ ﻛﺎﺉﻦ ﺭﻳﺎﺿﻲ ﻭﻭﻇﻴﻔﺔ ﺗﺮﺳﻢ ﻣﺜﻴﻼﺕ ﻫﺬﺍ ﺍﻟﻜﻴﺎﻥ ﺍﻟﻠﻐﻮﻱ ﻋﻠﻰ ﻣﺜﻴﻼﺕ‬
‫ﺍﻟﻜﺎﺉﻦﺍﻟﺮﻳﺎﺿﻲ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﻜﺎﺉﻨﺎﺕ ﻣﺤﺪﺩﺓ ﺑﺪﻗﺔ ‪ ،‬ﻓﺈﻧﻬﺎ ﺗﻤﺜﻞ ﺍﻟﻤﻌﻨﻰ ﺍﻟﺪﻗﻴﻖ ﻟﻠﻜﻴﺎﻧﺎﺕ‬
‫ﺍﻟﻤﻘﺎﺑﻠﺔﻟﻬﺎ‪ .‬ﺗﺴﺘﻨﺪ ﺍﻟﻔﻜﺮﺓ ﺇﻟﻰ ﺣﻘﻴﻘﺔ ﺃﻥ ﻫﻨﺎﻙ ﻃﺮﻗﺎً ﺻﺎﺭﻣﺔ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ‬
‫ﻭﻟﻜﻦﻟﻴﺲ ﻫﻨﺎﻙ ﺗﺮﺍﻛﻴﺐ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﺗﻜﻤﻦ ﺻﻌﻮﺑﺔ ﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﻓﻲ ﺇﻧﺸﺎء ﺍﻟﻜﺎﺉﻨﺎﺕ‬
‫ﻭﻭﻇﺎﺉﻒﺍﻟﺘﻌﻴﻴﻦ‪ .‬ﺍﻟﻄﺮﻳﻘﺔ ﺗﺴﻤﻰﻣﻌﻠﻢ ﺏﻷﻥ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﺗﺪﻝ ﻋﻠﻰ ﻣﻌﻨﻰ ﺍﻟﻜﻴﺎﻧﺎﺕ‬
‫ﺍﻟﻨﺤﻮﻳﺔﺍﻟﻤﻘﺎﺑﻠﺔ ﻟﻬﺎ‪.‬‬

‫ﻭﻇﺎﺉﻒﺍﻟﺘﻌﻴﻴﻦ ﺍﻟﺨﺎﺻﺔ ﺑﻤﻮﺍﺻﻔﺎﺕ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺪﻻﻟﻴﺔ ‪ ،‬ﻣﺜﻞ ﺟﻤﻴﻊ ﺍﻟﻮﻇﺎﺉﻒ ﻓﻲ‬
‫ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ‪،‬ﻟﻬﺎ ﻣﺠﺎﻝ ﻭﻧﻄﺎﻕ‪ .‬ﺍﻟﻤﺠﺎﻝ ﻫﻮ ﻣﺠﻤﻮﻋﺔ ﺍﻟﻘﻴﻢ ﺍﻟﺘﻲ ﺗﻌﺘﺒﺮ ﻣﻌﻠﻤﺎﺕ ﺷﺮﻋﻴﺔ‬
‫ﻟﻠﻮﻇﻴﻔﺔ ؛ﺍﻟﻨﻄﺎﻕ ﻫﻮ ﻣﺠﻤﻮﻋﺔ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﺘﻲ ﻳﺘﻢ ﺗﻌﻴﻴﻦ ﺍﻟﻤﻌﻠﻤﺎﺕ ﺇﻟﻴﻬﺎ‪ .‬ﻓﻲ ﺩﻻﻻﺕ‬
‫ﺍﻟﺪﻻﻟﺔ ‪،‬ﻳﻄُﻠﻖ ﻋﻠﻰ ﺍﻟﻤﺠﺎﻝ ﺍﺳﻢﺍﻟﻤﺠﺎﻝ ﺍﻟﻨﺤﻮﻱ‪ ،‬ﻷﻧﻬﺎ ﺍﻟﻬﻴﺎﻛﻞ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺘﻲ ﻳﺘﻢ ﺗﻌﻴﻴﻨﻬﺎ‪.‬‬
‫ﺍﻟﻨﻄﺎﻕﻳﺴﻤﻰﺍﻟﻤﺠﺎﻝ ﺍﻟﺪﻻﻟﻲ‪.‬‬

‫ﺗﺮﺗﺒﻂﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﺔ ﺑﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻞ‪ .‬ﻓﻲ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ ‪ ،‬ﺗﺘُﺮﺟﻢ ﺗﺮﻛﻴﺒﺎﺕ ﻟﻐﺔ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺇﻟﻰ ﺗﺮﻛﻴﺒﺎﺕ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺃﺑﺴﻂ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺼﺒﺢ ﺃﺳﺎﺳﺎً ﻟﻤﻌﻨﻰ‬
‫‪143‬‬ ‫‪3.5‬ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ :‬ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‬

‫ﺑﻨﺎء‪.‬ﻓﻲ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ‪ ،‬ﻳﺘﻢ ﺗﻌﻴﻴﻦ ﺗﺮﺍﻛﻴﺐ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺇﻟﻰ ﻛﺎﺉﻨﺎﺕ ﺭﻳﺎﺿﻴﺔ ‪ ،‬ﺇﻣﺎ‬
‫ﻣﺠﻤﻮﻋﺎﺕﺃﻭ ‪ ،‬ﻓﻲ ﻛﺜﻴﺮ ﻣﻦ ﺍﻷﺣﻴﺎﻥ ‪ ،‬ﻭﻇﺎﺉﻒ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻋﻠﻰ ﻋﻜﺲ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ ‪،‬‬
‫ﻓﺈﻥﺩﻻﻻﺕ ﺍﻟﺪﻻﻻﺕ ﻻ ﺗﺸﻜﻞ ﻧﻤﻮﺫﺟﺎً ﻟﻠﻤﻌﺎﻟﺠﺔ ﺍﻟﺤﺴﺎﺑﻴﺔ ﺧﻄﻮﺓ ﺑﺨﻄﻮﺓ ﻟﻠﺒﺮﺍﻣﺞ‪.‬‬

‫‪3.5.2.1‬ﻣﺜﺎﻻﻥ ﺑﺴﻴﻄﺎﻥ‬
‫ﻧﺤﻦﻧﺴﺘﺨﺪﻡ ﺑﻨﻴﺔ ﻟﻐﺔ ﺑﺴﻴﻄﺔ ﻟﻠﻐﺎﻳﺔ ‪ ،‬ﺗﻤﺜﻴﻼﺕ ﺳﻠﺴﻠﺔ ﺍﻷﺣﺮﻑ ﻟﻸﺭﻗﺎﻡ ﺍﻟﺜﻨﺎﺉﻴﺔ ‪ ،‬ﻟﺘﻘﺪﻳﻢ‬
‫ﻃﺮﻳﻘﺔﺍﻟﺪﻻﻟﺔ‪ .‬ﻳﻤﻜﻦ ﻭﺻﻒ ﺑﻨﺎء ﺟﻤﻠﺔ ﻫﺬﻩ ﺍﻷﺭﻗﺎﻡ ﺍﻟﺜﻨﺎﺉﻴﺔ ﻣﻦ ﺧﻼﻝ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫<‪' 0' →>bin_num‬‬


‫| "‪"1‬‬
‫' <‪' 0| >bin_num‬‬
‫' <‪' 1| >bin_num‬‬

‫ﺷﺠﺮﺓﺗﺤﻠﻴﻞ ﻟﻠﻤﺜﺎﻝ ﺍﻟﺮﻗﻢ ﺍﻟﺜﻨﺎﺉﻲ ‪، 110،‬ﻳﻈﻬﺮ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ .3.9‬ﻻﺣﻆ ﺃﻧﻨﺎ ﻭﺿﻌﻨﺎ ﺍﻟﻔﻮﺍﺻﻞ‬
‫ﺍﻟﻌﻠﻴﺎﺣﻮﻝ ﺍﻷﺭﻗﺎﻡ ﺍﻟﻨﺤﻮﻳﺔ ﻹﻇﻬﺎﺭ ﺃﻧﻬﺎ ﻟﻴﺴﺖ ﺃﺭﻗﺎﻣﺎً ﺭﻳﺎﺿﻴﺔ‪ .‬ﻫﺬﺍ ﻣﺸﺎﺑﻪ ﻟﻠﻌﻼﻗﺔ ﺑﻴﻦ ﺍﻷﺭﻗﺎﻡ‬
‫ﺍﻟﻤﺸﻔﺮﺓ‪ ASCII‬ﻭﺍﻷﺭﻗﺎﻡ ﺍﻟﺮﻳﺎﺿﻴﺔ‪ .‬ﻋﻨﺪﻣﺎ ﻳﻘﺮﺃ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺭﻗﻤﺎً ﻛﺴﻠﺴﻠﺔ ‪ ،‬ﻳﺠﺐ ﺗﺤﻮﻳﻠﻪ ﺇﻟﻰ ﺭﻗﻢ‬
‫ﺭﻳﺎﺿﻲﻗﺒﻞ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻛﻘﻴﻤﺔ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ‪.‬‬

‫<‪>bin_num‬‬ ‫ﺍﻟﺸﻜﻞ‪3.9‬‬

‫ﺷﺠﺮﺓﺗﺤﻠﻴﻞ ﻟﻠﻌﺪﺩ‬
‫ﺍﻟﺜﻨﺎﺉﻲ‪110‬‬
‫"‪"0‬‬ ‫<‪>bin_num‬‬

‫"‪"1‬‬ ‫<‪>bin_num‬‬

‫"‪"1‬‬

‫ﺍﻟﻤﺠﺎﻝﺍﻟﻨﺤﻮﻱ ﻟﻮﻇﻴﻔﺔ ﺍﻟﺘﻌﻴﻴﻦ ﻟﻸﺭﻗﺎﻡ ﺍﻟﺜﻨﺎﺉﻴﺔ ﻫﻮ ﻣﺠﻤﻮﻋﺔ ﻛﻞ ﺗﻤﺜﻴﻼﺕ ﺳﻠﺴﻠﺔ‬


‫ﺍﻷﺣﺮﻑﻟﻸﺭﻗﺎﻡ ﺍﻟﺜﻨﺎﺉﻴﺔ‪ .‬ﺍﻟﻤﺠﺎﻝ ﺍﻟﺪﻻﻟﻲ ﻫﻮ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻷﻋﺪﺍﺩ ﺍﻟﻌﺸﺮﻳﺔ ﻏﻴﺮ ﺍﻟﺴﺎﻟﺒﺔ ‪ ،‬ﺍﻟﺘﻲ‬
‫ﻳﺮﻣﺰﻟﻬﺎ ﺑﺎﻟﺮﻣﺰ ‪.N‬‬
‫ﻟﻮﺻﻒﻣﻌﻨﻰ ﺍﻷﺭﻗﺎﻡ ﺍﻟﺜﻨﺎﺉﻴﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ‪ ،‬ﻓﺈﻧﻨﺎ ﻧﺮﺑﻂ ﺍﻟﻤﻌﻨﻰ ﺍﻟﻔﻌﻠﻲ )‬
‫ﺭﻗﻢﻋﺸﺮﻱ( ﺑﻜﻞ ﻗﺎﻋﺪﺓ ﻟﻬﺎ ﺭﻣﺰ ﻃﺮﻓﻲ ﻭﺍﺣﺪ ﻣﺜﻞ ‪.RHS‬‬

‫ﻓﻲﻣﺜﺎﻟﻨﺎ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﺗﺮﺗﺒﻂ ﺍﻷﺭﻗﺎﻡ ﺍﻟﻌﺸﺮﻳﺔ ﺑﺄﻭﻝ ﻗﺎﻋﺪﺗﻴﻦ ﻧﺤﻮﻳﺘﻴﻦ‪ .‬ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ‬
‫ﺍﻷﺧﺮﻯﻫﻲ ‪ ،‬ﺑﻤﻌﻨﻰ ﻣﺎ ‪ ،‬ﻗﻮﺍﻋﺪ ﺣﺴﺎﺑﻴﺔ ‪ ،‬ﻷﻧﻬﺎ ﺗﺠﻤﻊ ﺑﻴﻦ ﺭﻣﺰ ﻃﺮﻓﻲ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﻳﺮﺗﺒﻂ ﺑﻪ‬
‫ﻛﺎﺉﻦ ‪،‬ﻣﻊ ﻏﻴﺮ ﻧﻬﺎﺉﻲ ‪ ،‬ﻭﺍﻟﺬﻱ ﻳﻤﻜﻦ ﺗﻮﻗﻌﻪ ﻟﺘﻤﺜﻴﻞ ﺑﻌﺾ ﺍﻟﺒﻨﺎء‪ .‬ﺑﺎﻓﺘﺮﺍﺽ ﺃﻥ ﺍﻟﺘﻘﻴﻴﻢ ﻳﺘﻘﺪﻡ‬
‫ﺇﻟﻰﺃﻋﻠﻰ ﻓﻲ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ‪،‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪144‬‬

‫ﺳﻴﻜﻮﻥﻟﻠﻤﻌﻨﻰ ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻲ ﻓﻲ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ ﺑﺎﻟﻔﻌﻞ ﻣﻌﻨﺎﻩ ﺍﻟﻤﺮﻓﻖ‪ .‬ﻟﺬﺍ ‪ ،‬ﻓﺈﻥ ﺍﻟﻘﺎﻋﺪﺓ‬
‫ﺍﻟﻨﺤﻮﻳﺔﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻋﻨﺼﺮ ﻏﻴﺮ ﻧﻬﺎﺉﻲ ﻣﺜﻞ ‪ RHS‬ﺗﺘﻄﻠﺐ ﻭﻇﻴﻔﺔ ﺗﺤﺴﺐ ﻣﻌﻨﻰ ‪، LHS‬‬
‫ﻭﺍﻟﺘﻲﺗﻤﺜﻞ ﻣﻌﻨﻰ ‪ RHS‬ﺍﻟﻜﺎﻣﻞ‪.‬‬

‫ﺍﻟﻮﻇﻴﻔﺔﺍﻟﺪﻻﻟﻴﺔ ‪ ،‬ﺍﻟﻤﺴﻤﺎﺓ ‪M‬ﺳﻠﺔ ﻣﻬﻤﻼﺕ‪ ،‬ﻳﻌﻴﻦ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﻨﺤﻮﻳﺔ ‪ ،‬ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ﻓﻲ‬
‫ﺍﻟﻘﻮﺍﻋﺪﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺴﺎﺑﻘﺔ ‪ ،‬ﻟﻠﻜﺎﺉﻨﺎﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ‪ ، N‬ﻣﺠﻤﻮﻋﺔ ﺍﻷﺭﻗﺎﻡ ﺍﻟﻌﺸﺮﻳﺔ ﻏﻴﺮ ﺍﻟﺴﺎﻟﺒﺔ‪.‬‬
‫ﺍﻟﻮﻇﻴﻔﺔ‪.M‬ﺳﻠﺔ ﻣﻬﻤﻼﺕﻳﻌﺮﻑ ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫ﻡﺳﻠﺔ ﻣﻬﻤﻼﺕ)'‪0 = ('0‬‬


‫ﻡﺳﻠﺔ ﻣﻬﻤﻼﺕ)'‪1 = ('1‬‬
‫ﻡﺳﻠﺔ ﻣﻬﻤﻼﺕ' <‪* 2 = (' 0)>bin_num‬ﻡﺳﻠﺔ ﻣﻬﻤﻼﺕﻡ (<‪)>bin_num‬ﺛﻨﺎﺉﻴﺔ‬

‫ﻥ' <‪* 2 = (' 1)>bin_num‬ﻡﺳﻠﺔ ﻣﻬﻤﻼﺕ‪1)>bin_num<( +‬‬

‫ﻳﻤﻜﻦﺭﺑﻂ ﺍﻟﻤﻌﺎﻧﻲ ‪ ،‬ﺃﻭ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﻤﺸُﺎﺭ ﺇﻟﻴﻬﺎ )ﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ﺃﺭﻗﺎﻣﺎً ﻋﺸﺮﻳﺔ( ‪،‬‬
‫ﺑﻌﻘُﺪﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻤﻮﺿﺤﺔ ﻓﻲ ﺍﻟﺼﻔﺤﺔ ﺍﻟﺴﺎﺑﻘﺔ ‪ ،‬ﻣﻤﺎ ﻳﻨﺘﺞ ﻋﻨﻪ ﺍﻟﺸﺠﺮﺓ ﻓﻲ ﺍﻟﺸﻜﻞ‬
‫‪.3.10‬ﻫﺬﻩ ﺩﻻﻻﺕ ﻣﻮﺟﻬﺔ ﻧﺤﻮ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ‪ .‬ﻳﺘﻢ ﺗﻌﻴﻴﻦ ﺍﻟﻜﻴﺎﻧﺎﺕ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ‬
‫ﺫﺍﺕﺍﻟﻤﻌﻨﻰ ﺍﻟﻤﻠﻤﻮﺱ‪.‬‬

‫‪6‬‬ ‫ﺍﻟﺸﻜﻞ‪3.10‬‬
‫<‪>bin_num‬‬

‫ﺷﺠﺮﺓﺗﺤﻠﻴﻞ ﻣﻊ ﻛﺎﺉﻨﺎﺕ‬
‫ﺗﺪﻝﻋﻠﻰ ‪110‬‬
‫‪3‬‬
‫"‪"0‬‬ ‫<‪>bin_num‬‬

‫‪1‬‬
‫"‪"1‬‬ ‫<‪>bin_num‬‬

‫"‪"1‬‬

‫ﺟﺰﺉﻴﺎًﻷﻧﻨﺎ ﻧﺤﺘﺎﺝ ﺇﻟﻴﻪ ﻻﺣﻘﺎً ‪ ،‬ﻧﻌﺮﺽ ﺍﻵﻥ ﻣﺜﺎﻻً ﻣﺸﺎﺑﻬﺎً ﻟﻮﺻﻒ ﻣﻌﻨﻰ ﺍﻟﻘﻴﻢ ﺍﻟﺤﺮﻓﻴﺔ‬
‫ﺍﻟﻌﺸﺮﻳﺔﺍﻟﻨﺤﻮﻳﺔ‪ .‬ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ‪ ،‬ﺍﻟﻤﺠﺎﻝ ﺍﻟﻨﺤﻮﻱ ﻫﻮ ﻣﺠﻤﻮﻋﺔ ﺗﻤﺜﻴﻼﺕ ﺳﻠﺴﻠﺔ ﺍﻷﺣﺮﻑ‬
‫ﻟﻸﺭﻗﺎﻡﺍﻟﻌﺸﺮﻳﺔ‪ .‬ﺍﻟﻤﺠﺎﻝ ﺍﻟﺪﻻﻟﻲ ﻫﻮ ﻣﺮﺓ ﺃﺧﺮﻯ ﺍﻟﻤﺠﻤﻮﻋﺔ ‪.N‬‬

‫<‪' 9 '|' 8'7 '|' 6 '|' 5 '|' 4 '|' 3 '|' 2 '|' 1 '|' 0' →>dec_num‬‬
‫') <‪(' 9 '|' 8 '|' 7 '|' 6 '|' 5 '|' 4 '|' 3 '|' 2 '|' 1 '|' 0| >dec_num‬‬

‫ﺍﻟﺘﻌﻴﻴﻨﺎﺕﺍﻟﺪﻻﻟﻴﺔ ﻟﻘﻮﺍﻋﺪ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻫﺬﻩ ﻫﻲ‬

‫ﻡﺩﻳﺴﻤﺒﺮ)'‪ ، 0= ('0‬ﻡﺩﻳﺴﻤﺒﺮ)'‪ ، 1= ('1‬ﻡﺩﻳﺴﻤﺒﺮ)'‪ ، ... ، 2= ('2‬ﻡﺩﻳﺴﻤﺒﺮ)'‪9 = ('9‬‬


‫ﻡﺩﻳﺴﻤﺒﺮ' <‪ * 10= (' 0)>dec_num‬ﻡﺩﻳﺴﻤﺒﺮﻡ (<‪)>dec_num‬ﺩﻳﺴﻤﺒﺮ'‬
‫<‪ * 10= (' 1)>dec_num‬ﻡﺩﻳﺴﻤﺒﺮ‪1)>dec_num<( +‬‬
‫‪...‬‬
‫ﻡﺩﻳﺴﻤﺒﺮ' <‪ * 10= (' 9)>dec_num‬ﻡﺩﻳﺴﻤﺒﺮ‪9)>dec_num<( +‬‬
‫‪145‬‬ ‫‪3.5‬ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ :‬ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‬

‫ﻓﻲﺍﻷﻗﺴﺎﻡ ﺍﻟﺘﺎﻟﻴﺔ ‪ ،‬ﻧﻘﺪﻡ ﺃﻭﺻﺎﻑ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻟﺒﻌﺾ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺒﺴﻴﻄﺔ‪ .‬ﺃﻫﻢ‬
‫ﺍﻓﺘﺮﺍﺽﻣﺒﺴﻂ ﺗﻢ ﺇﺟﺮﺍﺅﻩ ﻫﻨﺎ ﻫﻮ ﺃﻥ ﻛﻼ ﻣﻦ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻭﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﺒﻨﻰ ﺻﺤﻴﺤﺔ‪.‬‬
‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺫﻟﻚ ‪ ،‬ﻧﻔﺘﺮﺽ ﺃﻧﻪ ﺗﻢ ﺗﻀﻤﻴﻦ ﻧﻮﻋﻴﻦ ﻋﺪﺩﻳﻴﻦ ﻓﻘﻂ‪ :‬ﻋﺪﺩ ﺻﺤﻴﺢ ﻭ ﻣﻨﻄﻘﻲ‪.‬‬

‫‪3.5.2.2‬ﺣﺎﻟﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﻳﻤﻜﻦﺗﻌﺮﻳﻒ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻟﺒﺮﻧﺎﻣﺞ ﻣﺎ ﻣﻦ ﺣﻴﺚ ﺗﻐﻴﺮﺍﺕ ﺍﻟﺤﺎﻟﺔ ﻓﻲ ﺟﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ ﻣﺜﺎﻟﻲ‪.‬‬
‫ﻳﺘﻢﺗﻌﺮﻳﻒ ﺩﻻﻻﺕ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺑﻬﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ‪ ،‬ﻭﻳﺘﻢ ﺗﻌﺮﻳﻒ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ﺑﻨﻔﺲ ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﺗﻘﺮﻳﺒﺎً‪.‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﻲ ﻣﺰﻳﺪ ﻣﻦ ﺍﻟﺘﺒﺴﻴﻂ ‪ ،‬ﻳﺘﻢ ﺗﻌﺮﻳﻒ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻣﻦ ﺣﻴﺚ ﻗﻴﻢ ﺟﻤﻴﻊ‬
‫ﻣﺘﻐﻴﺮﺍﺕﺍﻟﺒﺮﻧﺎﻣﺞ ﻓﻘﻂ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﺗﺴﺘﺨﺪﻡ ﺩﻻﻻﺕ ﺍﻟﺪﻻﻻﺕ ﺣﺎﻟﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻟﻮﺻﻒ ﺍﻟﻤﻌﻨﻰ ‪،‬‬
‫ﺑﻴﻨﻤﺎﺗﺴﺘﺨﺪﻡ ﺩﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻞ ﺣﺎﻟﺔ ﺍﻵﻟﺔ‪ .‬ﻳﺘﻤﺜﻞ ﺍﻻﺧﺘﻼﻑ ﺍﻟﺮﺉﻴﺴﻲ ﺑﻴﻦ ﺩﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻞ‬
‫ﻭﺍﻟﺪﻻﻻﺕﺍﻟﺪﻻﻟﻴﺔ ﻓﻲ ﺃﻥ ﺗﻐﻴﻴﺮﺍﺕ ﺍﻟﺤﺎﻟﺔ ﻓﻲ ﺩﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻞ ﻳﺘﻢ ﺗﺤﺪﻳﺪﻫﺎ ﺑﻮﺍﺳﻄﺔ‬
‫ﺧﻮﺍﺭﺯﻣﻴﺎﺕﻣﺸﻔﺮﺓ ‪ ،‬ﻣﻜﺘﻮﺑﺔ ﻓﻲ ﺑﻌﺾ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﺑﻴﻨﻤﺎ ﻓﻲ ﺩﻻﻻﺕ ﺍﻟﺪﻻﻟﺔ ‪ ،‬ﻳﺘﻢ ﺗﺤﺪﻳﺪ‬
‫ﺗﻐﻴﻴﺮﺍﺕﺍﻟﺤﺎﻟﺔ ﻣﻦ ﺧﻼﻝ ﻭﻇﺎﺉﻒ ﺭﻳﺎﺿﻴﺔ‪.‬‬

‫ﺩﻉﺣﺎﻻﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻳﺘﻢ ﺗﻤﺜﻴﻠﻬﺎ ﻛﻤﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻷﺯﻭﺍﺝ ﺍﻟﻤﺮﺗﺒﺔ ‪ ،‬ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫ﻕ= }>ﺃﻧﺎ‪ ،1‬ﺍﻟﺨﺎﻣﺲ‪ ،2، <1‬ﺍﻟﺨﺎﻣﺲ‪، . . .، <2‬ﻥ‪ ،‬ﺍﻟﺨﺎﻣﺲﻥ<{‬

‫ﻛﻞ‪ i‬ﻫﻮ ﺍﺳﻢ ﻣﺘﻐﻴﺮ ‪ ،‬ﻭ ‪ v‬ﺍﻟﻤﻘﺘﺮﻧﺔ ﺑﻪ ﻫﻲ ﺍﻟﻘﻴﻢ ﺍﻟﺤﺎﻟﻴﺔ ﻟﺘﻠﻚ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻷﻱ‬
‫ﺣﺮﻑ‪ v‬ﻗﻴﻤﺔ ﺧﺎﺻﺔﺃﻭﻧﺪﻳﻒ‪ ،‬ﻣﻤﺎ ﻳﺸﻴﺮ ﺇﻟﻰ ﺃﻥ ﺍﻟﻤﺘﻐﻴﺮ ﺍﻟﻤﺮﺗﺒﻂ ﺑﻪ ﻏﻴﺮ ﻣﺤﺪﺩ ﺣﺎﻟﻴﺎً‪ .‬ﺩﻉ‬
‫‪ VARMAP‬ﺗﻜﻮﻥ ﺩﺍﻟﺔ ﻣﻦ ﻣﻌﻠﻤﺘﻴﻦ‪ :‬ﺍﺳﻢ ﻣﺘﻐﻴﺮ ﻭﺣﺎﻟﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻗﻴﻤﺔ ‪VARMAP )i‬ﻱ‪ v‬ﻫﻮ (‪، s‬‬
‫ﻱ)ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻘﺘﺮﻧﺔ ﺑـ ‪i‬ﻱﻓﻲ ﺍﻟﺪﻭﻟﺔ(‪ .‬ﺗﻘﻮﻡ ﻣﻌﻈﻢ ﻭﻇﺎﺉﻒ ﺗﻌﻴﻴﻦ ﺍﻟﺪﻻﻻﺕ ﻟﻠﺒﺮﺍﻣﺞ ﻭﺑﻨﺎء‬
‫ﺍﻟﺒﺮﺍﻣﺞﺑﺘﻌﻴﻴﻦ ﺍﻟﺪﻭﻝ ﺇﻟﻰ ﺍﻟﺪﻭﻝ‪ .‬ﺗﺴُﺘﺨﺪﻡ ﺗﻐﻴﻴﺮﺍﺕ ﺍﻟﺤﺎﻟﺔ ﻫﺬﻩ ﻟﺘﺤﺪﻳﺪ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ ﻭﺑﻨﻴﺎﺕ‬
‫ﺍﻟﺒﺮﺍﻣﺞ‪.‬ﻳﺘﻢ ﺗﻌﻴﻴﻦ ﺑﻌﺾ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ ‪ -‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ‪ -‬ﻋﻠﻰ ﺍﻟﻘﻴﻢ ﻭﻟﻴﺲ‬
‫ﺍﻟﺤﺎﻻﺕ‪.‬‬

‫‪3.5.2.3‬ﺍﻟﺘﻌﺒﻴﺮﺍﺕ‬
‫ﺍﻟﺘﻌﺒﻴﺮﺍﺕﺃﺳﺎﺳﻴﺔ ﻟﻤﻌﻈﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻧﻔﺘﺮﺽ ﻫﻨﺎ ﺃﻥ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻟﻴﺲ ﻟﻬﺎ ﺁﺛﺎﺭ ﺟﺎﻧﺒﻴﺔ‪.‬‬
‫ﻋﻼﻭﺓﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻧﺤﻦ ﻧﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺒﺴﻴﻄﺔ ﺟﺪﺍً ﻓﻘﻂ‪ :‬ﺍﻟﻌﺎﻣﻼﻥ ﺍﻟﻮﺣﻴﺪﺍﻥ ﻫﻤﺎ ‪ +‬ﻭ *‬
‫‪،‬ﻭﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻟﻠﺘﻌﺒﻴﺮ ﻋﺎﻣﻞ ﻭﺍﺣﺪ ﻋﻠﻰ ﺍﻷﻛﺜﺮ ؛ ﺍﻟﻤﻌﺎﻣﻼﺕ ﺍﻟﻮﺣﻴﺪﺓ ﻫﻲ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ‬
‫ﺍﻟﻌﺪﺩﻳﺔﺍﻟﺼﺤﻴﺤﺔ ﻭﺍﻷﺭﻗﺎﻡ ﺍﻟﺤﺮﻓﻴﺔ ﺍﻟﺼﺤﻴﺤﺔ ؛ ﻻ ﻳﻮﺟﺪ ﺃﻗﻮﺍﺱ ﻭﻗﻴﻤﺔ ﺍﻟﺘﻌﺒﻴﺮ ﻋﺪﺩ ﺻﺤﻴﺢ‪.‬‬
‫ﻓﻴﻤﺎﻳﻠﻲ ﻭﺻﻒ ‪ BNF‬ﻟﻬﺬﻩ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ‪:‬‬

‫<‪| >var< | >binary_expr< >binary_expr<> →>expr‬‬


‫<‪< >right_expr< >left_expr<> →dec_num‬ﻣﺸﻐﻞ>‬
‫<‪<> →dec_num< | >var< >right_expr<> →left_expr‬‬
‫ﻣﺸﻐﻞ> <‪* | + →dec_num< | >var‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪146‬‬

‫ﺍﻟﺨﻄﺄﺍﻟﻮﺣﻴﺪ ﺍﻟﺬﻱ ﻧﻌﺘﺒﺮﻩ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻫﻮ ﻣﺘﻐﻴﺮ ﻟﻪ ﻗﻴﻤﺔ ﻏﻴﺮ ﻣﺤﺪﺩﺓ‪ .‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ‬
‫ﻳﻤﻜﻦﺃﻥ ﺗﺤﺪﺙ ﺃﺧﻄﺎء ﺃﺧﺮﻯ ‪ ،‬ﻟﻜﻦ ﻣﻌﻈﻤﻬﺎ ﻳﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻵﻟﺔ‪ .‬ﺩﻉ ‪ Z‬ﻳﻜﻮﻥ ﻣﺠﻤﻮﻋﺔ ﺍﻷﻋﺪﺍﺩ‬
‫ﺍﻟﺼﺤﻴﺤﺔ ‪،‬ﻭﺩﻉﺧﻄﺄﺗﻜﻮﻥ ﻗﻴﻤﺔ ﺍﻟﺨﻄﺄ‪ .‬ﺛﻢ ‪Z‬ﺡ }ﺧﻄﺄ{ ﻫﻮ ﺍﻟﻤﺠﺎﻝ ﺍﻟﺪﻻﻟﻲ ﻟﻠﻤﻮﺍﺻﻔﺎﺕ‬
‫ﺍﻟﻮﺻﻔﻴﺔﻟﺘﻌﺒﻴﺮﺍﺗﻨﺎ‪.‬‬

‫ﺗﺘﺒﻊﻭﻇﻴﻔﺔ ﺍﻟﺘﻌﻴﻴﻦ ﻟﺘﻌﺒﻴﺮ ﻣﻌﻴﻦ ‪ E‬ﻭﺍﻟﺤﺎﻟﺔ‪ .‬ﻟﻠﺘﻤﻴﻴﺰ ﺑﻴﻦ ﺗﻌﺮﻳﻔﺎﺕ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﺮﻳﺎﺿﻴﺔ‬
‫ﻭﺑﻴﺎﻧﺎﺕﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﺨﺎﺻﺔ ﺑﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻧﺴﺘﺨﺪﻡ ﺍﻟﺮﻣﺰ ‪ = -‬ﻟﺘﺤﺪﻳﺪ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﺮﻳﺎﺿﻴﺔ‪.‬‬
‫ﻳﺮﺑﻂﺍﻟﺮﻣﺰ ﺍﻟﻀﻤﻨﻲ ‪ ، <= ،‬ﺍﻟﻤﺴﺘﺨﺪﻡ ﻓﻲ ﻫﺬﺍ ﺍﻟﺘﻌﺮﻳﻒ ‪ ،‬ﺷﻜﻞ ﺍﻟﻤﻌﺎﻣﻞ ﺑﺒﻨﺎء ﺍﻟﺤﺎﻟﺔ )ﺃﻭ‬
‫ﺍﻟﺘﺒﺪﻳﻞ( ﺍﻟﻤﺮﺗﺒﻂ ﺑﻪ‪ .‬ﻳﺴﺘﺨﺪﻡ ﺗﺪﻭﻳﻦ ﺍﻟﻨﻘﻄﺔ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﻌﻘﺪ ﺍﻟﻔﺮﻋﻴﺔ ﻟﻠﻌﻘﺪﺓ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ‬
‫ﺍﻟﻤﺜﺎﻝ ‪،‬ﻳﺸﻴﺮ >‪ <binary_expr<. >left_expr‬ﺇﻟﻰ ﺍﻟﻌﻘﺪﺓ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻴﺴﺮﻯ ﻟـ‬
‫>‪.<binary_expr‬‬

‫ﻡﻩﻣﻦ <‪ >expr‬ﺣﺎﻟﺔ = ‪)>expr<، s( Δ‬‬


‫ﻡ<= <‪>dec_num‬ﺩﻳﺴﻤﺒﺮ== (‪ VARMAP )>var<، s‬ﺇﺫﺍ‬
‫ﻛﺎﻧﺖ<= <‪)>dec_num<، s( >var‬ﺃﻭﻧﺪﻳﻒ‬
‫ﺛﻢﺧﻄﺄ‬
‫ﺁﺧﺮ (‪VARMAP )>var<، s‬‬
‫<= <‪>binary_expr‬‬
‫ﺇﺫﺍ)ﻡﻩ== (‪)>binary_expr<. >left_expr<، s‬ﺃﻭﻧﺪﻳﻒﺃﻭ‬
‫ﻡﻩ== (‪)>binary_expr<. >right_expr<، s‬ﺃﻭﻧﺪﻳﻒ(‬
‫ﺛﻢﺧﻄﺄ‬
‫ﻭﺇﻻﺇﺫﺍ )>‪> .<binary_expr‬ﻣﺸﻐﻞ< == '‪('+‬‬
‫ﺛﻢﻡﻩ‪)>binary_expr<. >left_expr<، s( +‬‬
‫ﻡﻩ‪ M‬ﻭﺇﻻ (‪>binary_expr<. >right_expr<، s‬‬
‫)ﻩ* (‪)>binary_expr<. >left_expr< ، s‬‬
‫ﻡﻩ(ﻕ ‪)>binary_expr<. >right_expr< ،‬‬

‫‪3.5.2.4‬ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ‬
‫ﻋﺒﺎﺭﺓﺍﻹﺳﻨﺎﺩ ﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻦ ﺗﻘﻴﻴﻢ ﻟﻠﺘﻌﺒﻴﺮ ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺇﻋﺪﺍﺩ ﺍﻟﻤﺘﻐﻴﺮ ﺍﻟﻤﺴﺘﻬﺪﻑ ﻟﻘﻴﻤﺔ‬
‫ﺍﻟﺘﻌﺒﻴﺮ‪.‬ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ‪ ،‬ﺗﻘﻮﻡ ﺩﺍﻟﺔ ﺍﻟﻤﻌﻨﻰ ﺑﺘﻌﻴﻴﻦ ﺣﺎﻟﺔ ﺇﻟﻰ ﺣﺎﻟﺔ‪ .‬ﻳﻤﻜﻦ ﻭﺻﻒ ﻫﺬﻩ ﺍﻟﻮﻇﻴﻔﺔ‬
‫ﺑﻤﺎﻳﻠﻲ‪:‬‬

‫ﻡﺃ)ﺱ = ﻩ ‪ ،‬ﻕ( ‪ = Δ‬ﺇﺫﺍ ﻡﻩ)ﻩ ‪ ،‬ﻕ( ==ﺧﻄﺄ‬


‫ﺛﻢﺧﻄﺄ‬
‫= }>ﺃﻧﺎ‪ ،1‬ﺍﻟﺨﺎﻣﺲ‪ ،2، <1‬ﺍﻟﺨﺎﻣﺲ‪، . . .، <2‬ﻥ‪ ،‬ﺍﻟﺨﺎﻣﺲﻥ<{ ‪،‬‬ ‫ﺁﺧﺮ‪s‬‬
‫ﺣﻴﺚ‪ ، . . .، j = 1 ، 2‬ﻥ‬
‫ﺍﺫﺍﺍﻧﺎﻱ== ﺱ‬

‫=ﻡﻩ)ﻩ ‪ ،‬ﻕ(‬ ‫ﺛﻢﻱ‬


‫=ﻓﺎﺭﻣﺎﺏ )ﻁﻱ‪ ،‬ﺱ(‬ ‫ﺁﺧﺮﻱ‬

‫ﻻﺣﻆﺃﻥ ﺍﻟﻤﻘﺎﺭﻧﺔ ﻓﻲ ﺍﻟﺴﻄﺮ ﺍﻷﺧﻴﺮ ﺍﻟﺜﺎﻟﺚ ﺃﻋﻼﻩ ‪ ،‬ﺃﻧﺎﻱ‪.‬ﻣﻦ ﺍﻷﺳﻤﺎء ﻭﻟﻴﺲ ﺍﻟﻘﻴﻢ ‪== x ،‬‬
‫‪147‬‬ ‫‪3.5‬ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ :‬ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‬

‫‪3.5.2.5‬ﺍﻟﺤﻠﻘﺎﺕ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻟﻤﺴﺒﻘﺔ‬


‫ﺇﻥﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻟﻌﺮﻭﺓ ﺍﺧﺘﺒﺎﺭ ﻣﺎ ﻗﺒﻞ ﻣﻨﻄﻘﻲ ﺑﺴﻴﻄﺔ ﺑﺸﻜﻞ ﻣﺨﺎﺩﻉ‪ .‬ﻟﺘﺴﺮﻳﻊ ﺍﻟﻤﻨﺎﻗﺸﺔ ‪،‬‬
‫ﻧﻔﺘﺮﺽﺃﻥ ﻫﻨﺎﻙ ﻭﻇﻴﻔﺘﻴﻦ ﺃﺧﺮﻳﻴﻦ ﻟﺮﺳﻢ ﺍﻟﺨﺮﺍﺉﻂ ‪slM ،‬ﻭ ﻡﺏ‪ ،‬ﻳﺴﺮﺩ ﺑﻴﺎﻥ ﺍﻟﺨﺮﻳﻄﺔ ﻫﺬﺍ‬
‫ﻭﻳﻨﺺﻋﻠﻰ ﺍﻟﺤﺎﻻﺕ ﻭﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺇﻟﻰ ﺍﻟﻘﻴﻢ ﺍﻟﻤﻨﻄﻘﻴﺔ )ﺃﻭﺧﻄﺄ(‪ ،‬ﻋﻠﻰ ﺍﻟﺘﻮﺍﻟﻰ‪ .‬ﺍﻟﻮﻇﻴﻔﺔ‬

‫ﻡﻝ)ﺑﻴﻨﻤﺎﺏﻳﻔﻌﻞ‪ M.‬ﺇﺫﺍ ﻛﺎﻥ = ‪L ، s( Δ‬ﺏ)ﺏ ‪ ،‬ﻕ( ==ﺃﻭﻧﺪﻳﻒ‬


‫ﺛﻢﺧﻄﺄ‬
‫ﻭﺇﻻﺇﺫﺍ ﻛﺎﻥ ‪.M‬ﺏ)ﺏ ‪ ،‬ﻕ( == ﺧﻄﺄ‬
‫ﺛﻢ ﺱ‬
‫ﻭﺇﻻﺇﺫﺍ ﻛﺎﻥ ‪( ==sl.M‬ﻕ ‪)L ،‬ﺧﻄﺄ‬
‫ﺛﻢﺧﻄﺄ‬
‫ﺁﺧﺮﻡﻝ)ﺑﻴﻨﻤﺎﺏﻳﻔﻌﻞﻻﻡ ‪ ،‬ﻡ‪((sl‬ﻕ ‪)L ،‬‬

‫ﻣﻌﻨﻰﺍﻟﺤﻠﻘﺔ ﻫﻮ ﺑﺒﺴﺎﻃﺔ ﻗﻴﻤﺔ ﻣﺘﻐﻴﺮﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺍﻟﺤﻠﻘﺔ‬
‫ﺑﻌﺪﺩﺍﻟﻤﺮﺍﺕ ﺍﻟﻤﺤﺪﺩ ‪ ،‬ﺑﺎﻓﺘﺮﺍﺽ ﻋﺪﻡ ﻭﺟﻮﺩ ﺃﺧﻄﺎء‪ .‬ﻓﻲ ﺟﻮﻫﺮﻫﺎ ‪ ،‬ﺗﻢ ﺗﺤﻮﻳﻞ ﺍﻟﺤﻠﻘﺔ ﻣﻦ ﺍﻟﺘﻜﺮﺍﺭ‬
‫ﺇﻟﻰﺍﻟﻌﻮﺩﻳﺔ ‪ ،‬ﺣﻴﺚ ﻳﺘﻢ ﺗﻌﺮﻳﻒ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﻌﻮﺩﻳﺔ ﺭﻳﺎﺿﻴﺎً ﻣﻦ ﺧﻼﻝ ﻭﻇﺎﺉﻒ ﺗﻌﻴﻴﻦ ﺍﻟﺤﺎﻟﺔ‬
‫ﺍﻟﻌﻮﺩﻳﺔﺍﻷﺧﺮﻯ‪ .‬ﻣﻦ ﺍﻷﺳﻬﻞ ﻭﺻﻒ ﺍﻟﺘﻜﺮﺍﺭ ﺑﺪﻗﺔ ﺭﻳﺎﺿﻴﺔ ﻣﻦ ﺍﻟﺘﻜﺮﺍﺭ‪.‬‬

‫ﺇﺣﺪﻯﺍﻟﻤﻼﺣﻈﺎﺕ ﺍﻟﻤﻬﻤﺔ ﻓﻲ ﻫﺬﻩ ﺍﻟﻤﺮﺣﻠﺔ ﻫﻲ ﺃﻥ ﻫﺬﺍ ﺍﻟﺘﻌﺮﻳﻒ ‪ ،‬ﻣﺜﻞ ﺣﻠﻘﺎﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ‬


‫ﺍﻟﻔﻌﻠﻴﺔ ‪،‬ﻗﺪ ﻻ ﻳﺤﺴﺐ ﺷﻴﺉﺎً ﺑﺴﺒﺐ ﻋﺪﻡ ﺍﻹﻧﻬﺎء‪.‬‬

‫‪3.5.2.6‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻳﻤﻜﻦﺗﻌﺮﻳﻒ ﺍﻟﻜﺎﺉﻨﺎﺕ ﻭﺍﻟﻮﻇﺎﺉﻒ ‪ ،‬ﻣﺜﻞ ﺗﻠﻚ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺴﺎﺑﻘﺔ ‪،‬‬
‫ﻟﻠﻜﻴﺎﻧﺎﺕﺍﻟﻨﺤﻮﻳﺔ ﺍﻷﺧﺮﻯ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻋﻨﺪﻣﺎ ﻳﺘﻢ ﺗﻌﺮﻳﻒ ﻧﻈﺎﻡ ﻛﺎﻣﻞ ﻟﻠﻐﺔ ﻣﻌﻴﻨﺔ ‪ ،‬ﻳﻤﻜﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻪﻟﺘﺤﺪﻳﺪ ﻣﻌﻨﻰ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻜﺎﻣﻠﺔ ﻓﻲ ﺗﻠﻚ ﺍﻟﻠﻐﺔ‪ .‬ﻳﻮﻓﺮ ﻫﺬﺍ ﺇﻃﺎﺭﺍً ﻟﻠﺘﻔﻜﻴﺮ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺑﻄﺮﻳﻘﺔﺻﺎﺭﻣﺔ ﻟﻠﻐﺎﻳﺔ‪.‬‬

‫ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ‪ ،‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻛﻌﺎﻣﻞ ﻣﺴﺎﻋﺪ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‪.‬‬
‫ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻗﺪ ﺗﺸﻴﺮ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﺘﻲ ﻳﻜﻮﻥ ﺍﻟﻮﺻﻒ ﺍﻟﺪﻻﻟﻲ ﺍﻟﺪﻻﻟﻲ ﻟﻬﺎ ﻣﻌﻘﺪﺍً ﻭﺻﻌﺒ ًﺎ‬
‫ﺇﻟﻰﺍﻟﻤﺼﻤﻢ ﺃﻥ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻗﺪ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﺼﻌﺐ ﺃﻳﻀﺎً ﻋﻠﻰ ﻣﺴﺘﺨﺪﻣﻲ ﺍﻟﻠﻐﺔ ﻓﻬﻤﻬﺎ‬
‫ﻭﺃﻥﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﺒﺪﻳﻞ ﻗﺪ ﻳﻜﻮﻥ ﻣﻨﺎﺳﺒﺎً‪.‬‬

‫ﺑﺴﺒﺐﺗﻌﻘﻴﺪ ﺍﻷﻭﺻﺎﻑ ﺍﻟﺘﻌﺮﻳﻔﻴﺔ ‪ ،‬ﻓﻬﻲ ﻗﻠﻴﻠﺔ ﺍﻟﻔﺎﺉﺪﺓ ﻟﻤﺴﺘﺨﺪﻣﻲ ﺍﻟﻠﻐﺔ‪ .‬ﻣﻦ ﻧﺎﺣﻴﺔ‬
‫ﺃﺧﺮﻯ ‪،‬ﻓﺈﻧﻬﺎ ﺗﻮﻓﺮ ﻃﺮﻳﻘﺔ ﻣﻤﺘﺎﺯﺓ ﻟﻮﺻﻒ ﺍﻟﻠﻐﺔ ﺑﺈﻳﺠﺎﺯ‪.‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﺳﺘﺨﺪﺍﻡ ﺩﻻﻻﺕ ﺍﻟﺪﻻﻻﺕ ﻳﻨُﺴﺐ ﻋﺎﺩﺓ ًﺇﻟﻰ ‪ Scott‬ﻭ‬


‫(‪ ، Strachey )1971‬ﺇﻻ ﺃﻥ ﺍﻟﻨﻬﺞ ﺍﻟﺪﻻﻟﻲ ﺍﻟﻌﺎﻡ ﻟﻮﺻﻒ ﺍﻟﻠﻐﺔ ﻳﻤﻜﻦ ﺇﺭﺟﺎﻋﻪ ﺇﻟﻰ ﺍﻟﻘﺮﻥ ﺍﻟﺘﺎﺳﻊ‬
‫ﻋﺸﺮ)‪.(Frege ، 1892‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪148‬‬

‫‪3.5.3‬ﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ‬
‫ﺩﻻﻻﺕﺑﺪﻳﻬﻴﺔ‪ ،‬ﺍﻟﺘﻲ ﺳﻤﻴﺖ ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﻨﺤﻮ ﻷﻧﻬﺎ ﺗﺴﺘﻨﺪ ﺇﻟﻰ ﺍﻟﻤﻨﻄﻖ ﺍﻟﺮﻳﺎﺿﻲ ‪ ،‬ﻫﻲ ﺍﻟﻨﻬﺞ‬
‫ﺍﻷﻛﺜﺮﺗﺠﺮﻳﺪﺍً ﻟﻤﻮﺍﺻﻔﺎﺕ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ‪ .‬ﺑﺪﻻ ًﻣﻦ ﺗﺤﺪﻳﺪ‬
‫ﻣﻌﻨﻰﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ ‪ ،‬ﺗﺤﺪﺩ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ ﻣﺎ ﻳﻤﻜﻦ ﺇﺛﺒﺎﺗﻪ ﺣﻮﻝ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﺗﺬﻛﺮ ﺃﻥ‬
‫ﺃﺣﺪﺍﻻﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻟﻤﻤﻜﻨﺔ ﻟﻠﻤﻮﺍﺻﻔﺎﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻫﻮ ﺇﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ‪.‬‬

‫ﻓﻲﺍﻟﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ ‪ ،‬ﻻ ﻳﻮﺟﺪ ﻧﻤﻮﺫﺝ ﻟﺤﺎﻟﺔ ﺁﻟﺔ ﺃﻭ ﺑﺮﻧﺎﻣﺞ ﺃﻭ ﻧﻤﻮﺫﺝ ﻟﺘﻐﻴﻴﺮﺍﺕ ﺍﻟﺤﺎﻟﺔ‬
‫ﺍﻟﺘﻲﺗﺤﺪﺙ ﻋﻨﺪ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻳﻌﺘﻤﺪ ﻣﻌﻨﻰ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻰ ﺍﻟﻌﻼﻗﺎﺕ ﺑﻴﻦ ﻣﺘﻐﻴﺮﺍﺕ ﻭﺛﻮﺍﺑﺖ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞ ‪،‬ﻭﺍﻟﺘﻲ ﻫﻲ ﻧﻔﺴﻬﺎ ﻓﻲ ﻛﻞ ﺗﻨﻔﻴﺬ ﻟﻠﺒﺮﻧﺎﻣﺞ‪.‬‬

‫ﺩﻻﻻﺕﺃﻛﺴﻴﻮﻣﺎﺗﻴﻚ ﻟﻬﺎ ﺗﻄﺒﻴﻘﺎﻥ ﻣﺘﻤﻴﺰﺍﻥ‪ :‬ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻭﻣﻮﺍﺻﻔﺎﺕ ﺩﻻﻻﺕ‬


‫ﺍﻟﺒﺮﻧﺎﻣﺞ‪.‬ﻳﺮﻛﺰ ﻫﺬﺍ ﺍﻟﻘﺴﻢ ﻋﻠﻰ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﻭﺻﻔﻪ ﻟﻠﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ‪.‬‬

‫ﺗﻢﺗﻌﺮﻳﻒ ﺩﻻﻻﺕ ﺃﻛﺴﻴﻮﻣﺎﺗﻴﻚ ﺑﺎﻟﺘﺰﺍﻣﻦ ﻣﻊ ﺗﻄﻮﻳﺮ ﻧﻬﺞ ﻹﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ‪ .‬ﺗﻈﻬﺮ ﺃﺩﻟﺔ‬
‫ﺍﻟﺼﺤﺔﻫﺬﻩ ‪ ،‬ﻋﻨﺪﻣﺎ ﻳﻤﻜﻦ ﺑﻨﺎﺅﻫﺎ ‪ ،‬ﺃﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻳﻘﻮﻡ ﺑﺎﻟﺤﺴﺎﺑﺎﺕ ﺍﻟﻤﻮﺻﻮﻓﺔ ﻓﻲ ﻣﻮﺍﺻﻔﺎﺗﻪ‪.‬‬
‫ﻓﻲﺍﻹﺛﺒﺎﺕ ‪ ،‬ﻳﺴُﺒﻖ ﻛﻞ ﺑﻴﺎﻥ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻭﻳﺘﺒﻌﻪ ﺗﻌﺒﻴﺮ ﻣﻨﻄﻘﻲ ﻳﺤﺪﺩ ﺍﻟﻘﻴﻮﺩ ﻋﻠﻰ ﻣﺘﻐﻴﺮﺍﺕ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞ‪.‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ‪ ،‬ﺑﺪﻻ ًﻣﻦ ﺍﻟﺤﺎﻟﺔ ﺍﻟﻜﺎﻣﻠﺔ ﻵﻟﺔ ﻣﺠﺮﺩﺓ )ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻣﻊ ﺩﻻﻻﺕ‬
‫ﺍﻟﺘﺸﻐﻴﻞ( ‪ ،‬ﻟﺘﺤﺪﻳﺪ ﻣﻌﻨﻰ ﺍﻟﺒﻴﺎﻥ‪ .‬ﺍﻟﺘﺪﻭﻳﻦ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻟﻮﺻﻒ ﺍﻟﻘﻴﻮﺩ ‪ -‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻟﻐﺔ‬
‫ﺍﻟﺪﻻﻻﺕﺍﻟﺒﺪﻳﻬﻴﺔ ‪ -‬ﻫﻮ ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ ﺍﻷﺻﻠﻲ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ‬
‫ﺍﻟﻤﻨﻄﻘﻴﺔﺍﻟﺒﺴﻴﻄﺔ ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﻜﻮﻥ ﻛﺎﻓﻴﺔ ﻟﻠﺘﻌﺒﻴﺮ ﻋﻦ ﺍﻟﻘﻴﻮﺩ ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﻟﻴﺴﺖ ﻛﺬﻟﻚ ﻓﻲ ﺑﻌﺾ‬
‫ﺍﻟﺤﺎﻻﺕ‪.‬‬

‫ﻋﻨﺪﻣﺎﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ ﻟﺘﺤﺪﻳﺪ ﻣﻌﻨﻰ ﺍﻟﺒﻴﺎﻥ ﺭﺳﻤﻴﺎً ‪ ،‬ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺍﻟﻤﻌﻨﻰ ﻣﻦ‬
‫ﺧﻼﻝﺗﺄﺛﻴﺮ ﺍﻟﺒﻴﺎﻥ ﻋﻠﻰ ﺍﻟﺘﺄﻛﻴﺪﺍﺕ ﺣﻮﻝ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺘﺄﺛﺮﺓ ﺑﺎﻟﺒﻴﺎﻥ‪.‬‬

‫‪3.5.3.1‬ﺍﻟﺘﺄﻛﻴﺪﺍﺕ‬
‫ﺗﺴﻤﻰﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ ﺍﻟﻤﺴﻨﺪﺍﺕ ﺃﻭ ﺍﻟﺘﺄﻛﻴﺪﺍﺕ‪ .‬ﺍﻟﺘﺄﻛﻴﺪ‬
‫ﺍﻟﺬﻱﻳﺴﺒﻖ ﺑﻴﺎﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻣﺒﺎﺷﺮﺓ ﻳﺼﻒ ﺍﻟﻘﻴﻮﺩ ﺍﻟﻤﻔﺮﻭﺿﺔ ﻋﻠﻰ ﻣﺘﻐﻴﺮﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﺗﻠﻚ‬
‫ﺍﻟﻤﺮﺣﻠﺔﻣﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻳﺼﻒ ﺍﻟﺘﺄﻛﻴﺪ ﺍﻟﺬﻱ ﻳﻠﻲ ﺍﻟﺘﺼﺮﻳﺢ ﻣﺒﺎﺷﺮﺓ ﺍﻟﻘﻴﻮﺩ ﺍﻟﺠﺪﻳﺪﺓ ﻋﻠﻰ ﺗﻠﻚ‬
‫ﺍﻟﻤﺘﻐﻴﺮﺍﺕ)ﻭﺭﺑﻤﺎ ﻏﻴﺮﻫﺎ( ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺍﻟﻌﺒﺎﺭﺓ‪ .‬ﻫﺬﻩ ﺍﻟﺘﺄﻛﻴﺪﺍﺕ ﺗﺴﻤﻰﺷﺮﻁ ﻣﺴﺒﻖﻭﺣﺎﻟﺔ ﻻﺣﻘﺔ‬
‫‪،‬ﻋﻠﻰ ﺍﻟﺘﻮﺍﻟﻲ ‪ ،‬ﻣﻦ ﺍﻟﺒﻴﺎﻥ‪ .‬ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺒﻴﺎﻧﻴﻦ ﺍﻟﻤﺘﺠﺎﻭﺭﻳﻦ ‪ ،‬ﻓﺈﻥ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﻟﻸﻭﻝ ﺑﻤﺜﺎﺑﺔ‬
‫ﺷﺮﻁﻣﺴﺒﻖ ﻟﻠﺜﺎﻧﻲ‪ .‬ﻳﺘﻄﻠﺐ ﺗﻄﻮﻳﺮ ﻭﺻﻒ ﺑﺪﻳﻬﻲ ﺃﻭ ﺇﺛﺒﺎﺕ ﻟﺒﺮﻧﺎﻣﺞ ﻣﻌﻴﻦ ﺃﻥ ﻛﻞ ﻋﺒﺎﺭﺓ ﻓﻲ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﻟﻬﺎ ﺷﺮﻁ ﻣﺴﺒﻖ ﻭﺷﺮﻁ ﻻﺣﻖ‪.‬‬

‫ﻓﻲﺍﻷﻗﺴﺎﻡ ﺍﻟﺘﺎﻟﻴﺔ ‪ ،‬ﻧﺪﺭﺱ ﺍﻟﺘﺄﻛﻴﺪﺍﺕ ﻣﻦ ﻭﺟﻬﺔ ﻧﻈﺮ ﻣﻔﺎﺩﻫﺎ ﺃﻥ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻤﺴﺒﻘﺔ‬


‫ﻟﻠﺒﻴﺎﻧﺎﺕﻳﺘﻢ ﺣﺴﺎﺑﻬﺎ ﻣﻦ ﺷﺮﻭﻁ ﻻﺣﻘﺔ ﻣﻌﻴﻨﺔ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺍﻋﺘﺒﺎﺭﻫﺎ‬
‫ﺑﺎﻟﻤﻌﻨﻰﺍﻟﻤﻌﺎﻛﺲ‪ .‬ﻧﺤﻦ ﻧﻔﺘﺮﺽ ﺃﻥ ﺟﻤﻴﻊ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻫﻲ ﻧﻮﻉ ﺻﺤﻴﺢ‪ .‬ﻛﻤﺜﺎﻝ ﺑﺴﻴﻂ ‪ ،‬ﺿﻊ‬
‫ﻓﻲﺍﻋﺘﺒﺎﺭﻙ ﺑﻴﺎﻥ ﺍﻟﻤﻬﻤﺔ ﻭﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﺍﻟﺘﺎﻟﻴﻴﻦ‪:‬‬

‫ﺍﻟﻤﺠﻤﻮﻉ= ‪ * 2‬ﺱ ‪{sum< 1} 1 +‬‬


‫‪149‬‬ ‫‪3.5‬ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ :‬ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‬

‫ﻳﺘﻢﺗﻘﺪﻳﻢ ﺗﺄﻛﻴﺪﺍﺕ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻭﻣﺎ ﺑﻌﺪ ﺍﻟﺸﺮﻁ ﻓﻲ ﺃﻗﻮﺍﺱ ﻟﺘﻤﻴﻴﺰﻫﺎ ﻋﻦ ﺃﺟﺰﺍء ﻣﻦ‬
‫ﻋﺒﺎﺭﺍﺕﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﺃﺣﺪ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻤﺴﺒﻘﺔ ﺍﻟﻤﺤﺘﻤﻠﺔ ﻟﻬﺬﺍ ﺍﻟﺒﻴﺎﻥ ﻫﻮ }‪x< 10{.‬‬

‫ﻓﻲﺍﻟﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ ‪ ،‬ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﻣﻌﻨﻰ ﺑﻴﺎﻥ ﻣﻌﻴﻦ ﻣﻦ ﺧﻼﻝ ﺷﺮﻃﻪ ﺍﻟﻤﺴﺒﻖ ﻭﺣﺎﻟﺘﻪ‬
‫ﺍﻟﻼﺣﻘﺔ‪.‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻓﺈﻥ ﺍﻟﺘﺄﻛﻴﺪﻳﻦ ﻳﺤﺪﺩﺍﻥ ﺑﺪﻗﺔ ﺗﺄﺛﻴﺮ ﺗﻨﻔﻴﺬ ﺍﻟﺒﻴﺎﻥ‪.‬‬

‫ﻓﻲﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ‪ ،‬ﻧﺮﻛﺰ ﻋﻠﻰ ﺇﺛﺒﺎﺗﺎﺕ ﺻﺤﺔ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻭﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﻭﻫﻮ ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺷﺎﺉﻊﻟﻠﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ‪ .‬ﺍﻟﻤﻔﻬﻮﻡ ﺍﻷﻛﺜﺮ ﻋﻤﻮﻣﻴﺔ ﻟﻠﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ ﻫﻮ ﺗﺤﺪﻳﺪ ﻣﻌﻨﻰ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﻭﺍﻟﺒﺮﺍﻣﺞﺑﺪﻗﺔ ﻣﻦ ﺣﻴﺚ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﻤﻨﻄﻘﻴﺔ‪ .‬ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻫﻮ ﺃﺣﺪ ﺗﻄﺒﻴﻘﺎﺕ‬
‫ﺍﻷﻭﺻﺎﻑﺍﻟﺒﺪﻳﻬﻴﺔ ﻟﻠﻐﺎﺕ‪.‬‬

‫‪3.5.3.2‬ﺃﺿﻌﻒ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻤﺴﺒﻘﺔ‬


‫ﺍﻝﺃﺿﻌﻒ ﺷﺮﻁﻫﻮ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺍﻷﻗﻞ ﺗﻘﻴﻴﺪﺍً ﻭﺍﻟﺬﻱ ﺳﻴﻀﻤﻦ ﺻﻼﺣﻴﺔ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ‬
‫ﺍﻟﻤﺮﺗﺒﻂ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻓﻲ ﺍﻟﺒﻴﺎﻥ ﻭﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﺍﻟﻮﺍﺭﺩ ﻓﻲ ﺍﻟﻘﺴﻢ ‪50{ ،} ، 3.5.3.1‬‬
‫<‪x< 10{ ، }x‬ﻭ {‪}x< 1000‬ﻛﻠﻬﺎ ﺷﺮﻭﻁ ﻣﺴﺒﻘﺔ ﺻﺎﻟﺤﺔ‪ .‬ﺃﺿﻌﻒ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻤﺴﺒﻘﺔ ﻓﻲ ﻫﺬﻩ‬
‫ﺍﻟﺤﺎﻟﺔﻫﻮ }‪x< 0{.‬‬

‫ﺇﺫﺍﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺣﺴﺎﺏ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻣﻦ ﺃﻛﺜﺮ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻼﺣﻘﺔ ﻋﻤﻮﻣﻴﺔ ﻟﻜﻞ‬
‫ﻧﻮﻉﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻟﻠﻐﺔ ‪ ،‬ﻓﺈﻥ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﺤﺴﺎﺏ ﻫﺬﻩ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻤﺴﺒﻘﺔ ﺗﻮﻓﺮ‬
‫ﻭﺻﻔﺎًﻣﻮﺟﺰﺍً ﻟﺪﻻﻻﺕ ﺗﻠﻚ ﺍﻟﻠﻐﺔ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻳﻤﻜﻦ ﺇﻧﺸﺎء ﺑﺮﺍﻫﻴﻦ ﺻﺤﺔ ﻟﻠﺒﺮﺍﻣﺞ ﺑﻬﺬﻩ‬
‫ﺍﻟﻠﻐﺔ‪.‬ﻳﺒﺪﺃ ﺇﺛﺒﺎﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺧﺼﺎﺉﺺ ﻧﺘﺎﺉﺞ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻛﺸﺮﻁ ﻻﺣﻖ ﻵﺧﺮ ﺑﻴﺎﻥ‬
‫ﻟﻠﺒﺮﻧﺎﻣﺞ‪.‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ‪ ،‬ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻷﺧﻴﺮﺓ ‪ ،‬ﻟﺤﺴﺎﺏ‬
‫ﺃﺿﻌﻒﺷﺮﻁ ﻣﺴﺒﻖ ﻟﻠﺒﻴﺎﻥ ﺍﻷﺧﻴﺮ‪ .‬ﺛﻢ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻛﺸﺮﻁ ﻻﺣﻖ ﻟﻠﺒﻴﺎﻥ‬
‫ﺍﻷﺧﻴﺮﺍﻟﺜﺎﻧﻲ‪ .‬ﺗﺴﺘﻤﺮ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔ ﺣﺘﻰ ﻳﺘﻢ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﺑﺪﺍﻳﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻓﻲ ﺗﻠﻚ ﺍﻟﻨﻘﻄﺔ‪،‬‬
‫ﺍﻟﺸﺮﻁﺍﻟﻤﺴﺒﻖ ﻟﻠﻌﺒﺎﺭﺓ ﺍﻷﻭﻟﻰ ﻳﻨﺺ ﻋﻠﻰ ﺍﻟﺸﺮﻭﻁ ﺍﻟﺘﻲ ﺑﻤﻮﺟﺒﻬﺎ ﺳﻴﺤﺴﺐ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻨﺘﺎﺉﺞ‬
‫ﺍﻟﻤﺮﺟﻮﺓ‪.‬ﺇﺫﺍ ﻛﺎﻧﺖ ﻫﺬﻩ ﺍﻟﺸﺮﻭﻁ ﻣﺘﻀﻤﻨﺔ ﻓﻲ ﻣﻮﺍﺻﻔﺎﺕ ﺇﺩﺧﺎﻝ ﺍﻟﺒﺮﻧﺎﻣﺞ ‪ ،‬ﻓﻘﺪ ﺗﻢ ﺍﻟﺘﺤﻘﻖ ﻣﻦ‬
‫ﺻﺤﺔﺍﻟﺒﺮﻧﺎﻣﺞ‪.‬‬

‫ﺍﻥﺣﻜﻢ ﺍﻻﺳﺘﺪﻻﻝﻫﻲ ﻃﺮﻳﻘﺔ ﻻﺳﺘﻨﺘﺎﺝ ﺣﻘﻴﻘﺔ ﺗﺄﻛﻴﺪ ﻭﺍﺣﺪ ﻋﻠﻰ ﺃﺳﺎﺱ ﻗﻴﻢ ﺍﻟﺘﺄﻛﻴﺪﺍﺕ‬
‫ﺍﻷﺧﺮﻯ‪.‬ﺍﻟﺸﻜﻞ ﺍﻟﻌﺎﻡ ﻟﻘﺎﻋﺪﺓ ﺍﻻﺳﺘﻨﺘﺎﺝ ﻫﻮ ﻛﻤﺎ ﻳﻠﻲ‪:‬‬

‫‪S1 ، S2،‬ﺝ ‪،‬ﺱﻥ‬


‫ﺱ‬
‫ﺗﻨﺺﻫﺬﻩ ﺍﻟﻘﺎﻋﺪﺓ ﻋﻠﻰ ﺃﻧﻪ ﺇﺫﺍ ﻛﺎﻧﺖ ‪ S1‬ﻭ ‪ S2‬ﻭ‪ ، . . .‬ﻭ ‪.S‬ﻥﻫﻲ ﺻﺤﻴﺤﺔ ‪ ،‬ﺛﻢ ﻳﻤﻜﻦ ﺍﺳﺘﻨﺘﺎﺝ‬
‫ﺣﻘﻴﻘﺔ‪ .S‬ﻳﻄُﻠﻖ ﻋﻠﻰ ﺍﻟﺠﺰء ﺍﻟﻌﻠﻮﻱ ﻣﻦ ﻗﺎﻋﺪﺓ ﺍﻻﺳﺘﻨﺘﺎﺝ ﺍﺳﻤﻬﺎﺳﺎﻟﻒ؛ ﺍﻟﺠﺰء ﺍﻟﺴﻔﻠﻲ ﻳﺴﻤﻰ‬
‫ﻳﺘﺮﺗﺐﻋﻠﻰ ﺫﻟﻚ‪.‬‬
‫ﺍﻥﺑﺪﻳﻬﻴﺔﻋﺒﺎﺭﺓ ﻣﻨﻄﻘﻴﺔ ﻳﻔﺘﺮﺽ ﺃﻧﻬﺎ ﺻﺤﻴﺤﺔ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﺍﻟﺒﺪﻳﻬﻴﺔ ﻫﻲ ﻗﺎﻋﺪﺓ ﺍﺳﺘﻨﺘﺎﺝ ﻻ‬
‫ﺳﺎﺑﻘﺔﻟﻬﺎ‪.‬‬
‫ﺑﺎﻟﻨﺴﺒﺔﻟﺒﻌﺾ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ‪ ،‬ﻳﻜﻮﻥ ﺣﺴﺎﺏ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻣﻦ ﺍﻟﺒﻴﺎﻥ ﻭﺍﻟﺸﺮﻁ‬
‫ﺍﻟﻼﺣﻖﺃﻣﺮﺍً ﺑﺴﻴﻄﺎً ﻭﻳﻤﻜﻦ ﺗﺤﺪﻳﺪﻩ ﺑﻮﺍﺳﻄﺔ‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪150‬‬

‫ﺑﺪﻳﻬﻴﺔ‪.‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﻲ ﻣﻌﻈﻢ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻻ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺍﻷﺿﻌﻒ ﺇﻻ ﺑﻘﺎﻋﺪﺓ‬
‫ﺍﺳﺘﻨﺘﺎﺝ‪.‬‬
‫ﻻﺳﺘﺨﺪﺍﻡﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ ﻣﻊ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﻌﻴﻨﺔ ‪ ،‬ﺳﻮﺍء ﻹﺛﺒﺎﺗﺎﺕ ﺍﻟﺼﻮﺍﺏ ﺃﻭ ﻟﻤﻮﺍﺻﻔﺎﺕ‬
‫ﺍﻟﺪﻻﻻﺕﺍﻟﺮﺳﻤﻴﺔ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﺗﻮﺟﺪ ﺇﻣﺎ ﺑﺪﻳﻬﻴﺔ ﺃﻭ ﻗﺎﻋﺪﺓ ﺍﺳﺘﻨﺘﺎﺝ ﻟﻜﻞ ﻧﻮﻉ ﻣﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻓﻲ‬
‫ﺍﻟﻠﻐﺔ‪.‬ﻓﻲ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ‪ ،‬ﻧﻘﺪﻡ ﺑﺪﻳﻬﻴﺔ ﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻭﻗﻮﺍﻋﺪ ﺍﻻﺳﺘﺪﻻﻝ‬
‫ﻟﺘﺴﻠﺴﻞﺍﻟﻌﺒﺎﺭﺍﺕ ‪ ،‬ﻭﺑﻴﺎﻧﺎﺕ ﺍﻻﺧﺘﻴﺎﺭ ‪ ،‬ﻭﻋﺒﺎﺭﺍﺕ ﺍﻟﺤﻠﻘﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻗﺒﻞ ﺍﻻﺧﺘﺒﺎﺭ‪ .‬ﻻﺣﻆ ﺃﻧﻨﺎ‬
‫ﻧﻔﺘﺮﺽﺃﻧﻪ ﻟﻴﺲ ﻟﻠﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﻭﻻ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺁﺛﺎﺭ ﺟﺎﻧﺒﻴﺔ‪.‬‬

‫‪3.5.3.3‬ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ‬
‫ﺍﻟﺸﺮﻁﺍﻟﻤﺴﺒﻖ ﻭﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﻟﺒﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﻣﻌﺎً ﻳﺤﺪﺩﺍﻥ ﻣﻌﻨﺎﻩ ﺑﺪﻗﺔ‪ .‬ﻟﺘﺤﺪﻳﺪ ﻣﻌﻨﻰ‬
‫ﺑﻴﺎﻥﺍﻟﺘﺨﺼﻴﺺ ‪ ،‬ﻧﻈﺮﺍً ﻟﺸﺮﻁ ﻻﺣﻖ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﺗﻜﻮﻥ ﻫﻨﺎﻙ ﻃﺮﻳﻘﺔ ﻟﺤﺴﺎﺏ ﺷﺮﻃﻪ ﺍﻟﻤﺴﺒﻖ‬
‫ﻣﻦﻫﺬﺍ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ‪.‬‬

‫ﻟﻨﻔﺘﺮﺽﺃﻥ ‪ x = E‬ﻋﺒﺎﺭﺓ ﻋﻦ ﺑﻴﺎﻥ ﺗﺨﺼﻴﺺ ﻋﺎﻡ ﻭﺃﻥ ﻳﻜﻮﻥ ‪ Q‬ﻫﻮ ﺷﺮﻃﻪ ﺍﻟﻼﺣﻖ‪ .‬ﺛﻢ ﻳﺘﻢ‬
‫ﺗﺤﺪﻳﺪﺷﺮﻃﻬﺎ ﺍﻟﻤﺴﺒﻖ ‪ ، P ،‬ﻣﻦ ﺧﻼﻝ ﺍﻟﺒﺪﻳﻬﻴﺔ‬

‫ﺱ‪x‬ﺱﻩ‬ ‫ﻑ=‬

‫ﻣﻤﺎﻳﻌﻨﻲ ﺃﻥ ‪ P‬ﻳﺘﻢ ﺣﺴﺎﺑﻬﺎ ﻋﻠﻰ ﺃﻧﻬﺎ ‪ Q‬ﻣﻊ ﺍﺳﺘﺒﺪﺍﻝ ﺟﻤﻴﻊ ﻣﺜﻴﻼﺕ ‪ x‬ﺑـ ‪ .E‬ﻋﻠﻰ ﺳﺒﻴﻞ‬
‫ﺍﻟﻤﺜﺎﻝ ‪،‬ﺇﺫﺍ ﻛﺎﻥ ﻟﺪﻳﻨﺎ ﺑﻴﺎﻥ ﺍﻟﻤﻬﻤﺔ ﻭﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ‬

‫ﺃ= ﺏ ‪} 1 - 2 /‬ﺃ >‪{10‬‬

‫ﻳﺘﻢﺣﺴﺎﺏ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻋﻦ ﻃﺮﻳﻖ ﺍﻻﺳﺘﺒﺪﺍﻝﺏ ‪1-2 /‬ﻝﺃﻓﻲ ﺣﺎﻟﺔ ﻣﺎ ﺑﻌﺪ ﺍﻟﺤﺎﻟﺔ }ﺃ‬
‫>‪، {10‬ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫ﺏ ‪10> 1 - 2 /‬‬
‫ﺏ>‪22‬‬

‫ﻭﺑﺎﻟﺘﺎﻟﻲ ‪،‬ﻓﺈﻥ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﺒﻴﺎﻥ ﺍﻟﻤﻬﻤﺔ ﻭﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﺍﻟﻤﺤﺪﺩ ﻫﻮ }ﺏ >‪.{22‬ﺗﺬﻛﺮ‬
‫ﺃﻥﺑﺪﻳﻬﻴﺔ ﺍﻟﺘﺨﺼﻴﺺ ﻣﻀﻤﻮﻧﺔ ﻟﺘﻜﻮﻥ ﺻﺤﻴﺤﺔ ﻓﻘﻂ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪﻡ ﻭﺟﻮﺩ ﺁﺛﺎﺭ ﺟﺎﻧﺒﻴﺔ‪ .‬ﺑﻴﺎﻥ‬
‫ﺍﻟﺘﺨﺼﻴﺺﻟﻪ ﺗﺄﺛﻴﺮ ﺟﺎﻧﺒﻲ ﺇﺫﺍ ﻗﺎﻡ ﺑﺘﻐﻴﻴﺮ ﻣﺘﻐﻴﺮ ﺁﺧﺮ ﻏﻴﺮ ﻫﺪﻓﻪ‪.‬‬

‫ﺍﻟﺘﺪﻭﻳﻦﺍﻟﻤﻌﺘﺎﺩ ﻟﺘﺤﺪﻳﺪ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ ﻟﻨﻤﻮﺫﺝ ﺑﻴﺎﻥ ﻣﻌﻴﻦ ﻫﻮ‬

‫}ﺹ{ ﺹ }ﺱ{‬

‫ﺣﻴﺚ‪ P‬ﻫﻲ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ‪ Q ،‬ﻫﻲ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ‪ ،‬ﻭ ‪ S‬ﻫﻲ ﻧﻤﻮﺫﺝ ﺍﻟﺒﻴﺎﻥ‪ .‬ﻓﻲ ﺣﺎﻟﺔ ﺑﻴﺎﻥ‬
‫ﺍﻟﺘﻨﺎﺯﻝ ‪،‬ﻳﻜﻮﻥ ﺍﻟﺘﺮﻣﻴﺰ‬

‫}ﺱ‪x‬ﺱﻩ{ﺱ = ﻩ }ﺱ{‬
‫‪151‬‬ ‫‪3.5‬ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ :‬ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‬

‫ﻛﻤﺜﺎﻝﺁﺧﺮ ﻟﺤﺴﺎﺏ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﺒﻴﺎﻥ ﺍﻟﺘﻨﺎﺯﻝ ‪ ،‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﻣﺎ ﻳﻠﻲ‪:‬‬

‫ﺱ= ‪ * 2‬ﺹ ‪} 3 -‬ﺱ< ‪{25‬‬

‫ﻳﺘﻢﺣﺴﺎﺏ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ‪:‬‬

‫‪ *2‬ﺹ ‪25 <3 -‬‬


‫ﺹ< ‪14‬‬

‫ﻟﺬﺍ}ﺹ< ‪{14‬ﻫﻮ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﺒﻴﺎﻥ ﺍﻟﻤﻬﻤﺔ ﻭﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﻫﺬﺍ‪.‬‬

‫ﻻﺣﻆﺃﻥ ﻣﻈﻬﺮ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﺴﺮ ﻣﻦ ﺑﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﻓﻲ ﺟﺎﻧﺒﻪ ﺍﻷﻳﻤﻦ ﻻ ﻳﺆﺛﺮ ﻋﻠﻰ ﻋﻤﻠﻴﺔ‬
‫ﺣﺴﺎﺏﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻝ‬

‫ﺱ= ﺱ ‪ +‬ﺹ ‪} 3 -‬ﺱ< ‪{10‬‬

‫ﺃﺿﻌﻒﺷﺮﻁ ﻣﺴﺒﻖ‬

‫ﺱ‪ +‬ﺹ ‪10 <3 -‬‬


‫ﺹ< ‪ - 13‬ﺱ‬

‫ﺗﺬﻛﺮﺃﻥ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ ﻗﺪ ﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ ﻹﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ‪ .‬ﻓﻲ ﺿﻮء ﺫﻟﻚ ‪ ،‬ﻣﻦ‬
‫ﺍﻟﻄﺒﻴﻌﻲﻓﻲ ﻫﺬﻩ ﺍﻟﻤﺮﺣﻠﺔ ﺃﻥ ﻧﺘﺴﺎءﻝ ﻛﻴﻒ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺑﺪﻳﻬﻴﺔ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ‬
‫ﻹﺛﺒﺎﺕﺃﻱ ﺷﻲء‪ .‬ﻭﺇﻟﻴﻚ ﺍﻟﻜﻴﻔﻴﺔ‪ :‬ﻳﻤﻜﻦ ﺍﻋﺘﺒﺎﺭ ﺑﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﻣﻊ ﻛﻞ ﻣﻦ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ‬
‫ﻭﺍﻟﺸﺮﻁﺍﻟﻼﺣﻖ ﺑﻴﺎﻧﺎً ﻣﻨﻄﻘﻴﺎً ﺃﻭ ﻧﻈﺮﻳﺔ‪ .‬ﺇﺫﺍ ﻛﺎﻧﺖ ﺑﺪﻳﻬﻴﺔ ﺍﻟﺘﺨﺼﻴﺺ ‪ ،‬ﻋﻨﺪ ﺗﻄﺒﻴﻘﻬﺎ ﻋﻠﻰ‬
‫ﺍﻟﺸﺮﻁﺍﻟﻼﺣﻖ ﻭﺑﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ‪ ،‬ﺗﻨﺘﺞ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺍﻟﻤﺤﺪﺩ ‪ ،‬ﻳﺘﻢ ﺇﺛﺒﺎﺕ ﺍﻟﻨﻈﺮﻳﺔ‪ .‬ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﻤﻨﻄﻘﻴﺔ‬

‫{‪}x< 3{ x = x - 3 }x< 0‬‬

‫ﺍﺳﺘﺨﺪﺍﻡﺑﺪﻳﻬﻴﺔ ﺍﻟﺘﺨﺼﻴﺺ ﻋﻠﻰ‬

‫ﺱ= ﺱ ‪} 3 -‬ﺱ< ‪{0‬‬

‫ﻳﻨﺘﺞﻋﻨﻪ }‪x< 3{ ،‬ﻭﻫﻮ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺍﻟﻤﺤﺪﺩ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻟﻘﺪ ﺃﺛﺒﺘﻨﺎ ﺍﻟﻤﺜﺎﻝ ﺍﻟﻤﻨﻄﻘﻲ ﻟﻠﺒﻴﺎﻥ‪.‬‬

‫ﺑﻌﺪﺫﻟﻚ ‪ ،‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﻤﻨﻄﻘﻴﺔ‬

‫{‪}x< 5{ x = x - 3 }x< 0‬‬

‫ﻓﻲﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ‪ ،‬ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ‪x< 5{ ،} ،‬ﻟﻴﺲ ﻫﻮ ﻧﻔﺲ ﺍﻟﺘﺄﻛﻴﺪ ﺍﻟﻨﺎﺗﺞ ﻋﻦ ﺍﻟﺒﺪﻳﻬﻴﺔ‪ .‬ﻭﻣﻊ‬
‫ﺫﻟﻚ ‪،‬ﻓﻤﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ }{‪x< 5‬ﻳﺪﻝ }‪x< 3{.‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪152‬‬

‫ﻻﺳﺘﺨﺪﺍﻡﻫﺬﺍ ﻓﻲ ﺇﺛﺒﺎﺕ ‪ ،‬ﻗﺎﻋﺪﺓ ﺍﺳﺘﻨﺘﺎﺝ ﺗﺴﻤﻰﺣﻜﻢ ﺍﻟﻌﺎﻗﺒﺔ‪ ،‬ﻭﻫﻨﺎﻙ ﺣﺎﺟﺔ‪ .‬ﺷﻜﻞ ﺣﻜﻢ‬
‫ﺍﻟﻌﺎﻗﺒﺔﻫﻮ‬

‫‪}P{ S }Q{ ، P =< P ، Q =< Q‬‬


‫}ﺹ{ ﺹ }ﺱ{‬

‫ﻳﻌﻨﻲﺍﻟﺮﻣﺰ =< "ﺿﻤﻨﻴﺎً" ‪ ،‬ﻭﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ‪ S‬ﺃﻱ ﺑﻴﺎﻥ ﺑﺮﻧﺎﻣﺞ‪ .‬ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﺍﻟﻘﺎﻋﺪﺓ ﻋﻠﻰ ﺍﻟﻨﺤﻮ‬
‫ﺍﻟﺘﺎﻟﻲ‪:‬ﺇﺫﺍ ﻛﺎﻧﺖ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﻤﻨﻄﻘﻴﺔ }‪ S }Q{ {P‬ﺻﺤﻴﺤﺔ ‪ ،‬ﻓﺈﻥ ﺍﻟﺘﺄﻛﻴﺪ ‪ P‬ﻳﻌﻨﻲ ﺍﻟﺘﻮﻛﻴﺪ ‪، P‬‬
‫ﻭﺍﻟﺘﺄﻛﻴﺪ‪ Q‬ﻳﻌﻨﻲ ﺍﻟﺘﻮﻛﻴﺪ ‪ ، Q‬ﻓﻴﻤﻜﻦ ﺍﺳﺘﻨﺘﺎﺝ ﺃﻥ }‪ } S {P‬ﺱ{‪ .‬ﺑﻌﺒﺎﺭﺓ ﺃﺧﺮﻯ ‪ ،‬ﺗﻨﺺ ﻗﺎﻋﺪﺓ‬
‫ﺍﻟﻨﺘﻴﺠﺔﻋﻠﻰ ﺃﻧﻪ ﻳﻤﻜﻦ ﺩﺍﺉﻤﺎً ﺇﺿﻌﺎﻑ ﺣﺎﻟﺔ ﻣﺎ ﺑﻌﺪ ﺍﻟﺤﺎﻟﺔ ﻭﻳﻤﻜﻦ ﺩﺍﺉﻤﺎً ﺗﻌﺰﻳﺰ ﺷﺮﻁ ﻣﺴﺒﻖ‪.‬‬
‫ﻫﺬﺍﻣﻔﻴﺪ ﺟﺪﺍً ﻓﻲ ﺇﺛﺒﺎﺗﺎﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺴﻤﺢ ﺑﺈﻛﻤﺎﻝ ﺇﺛﺒﺎﺕ ﺁﺧﺮ ﻣﺜﺎﻝ ﺑﻴﺎﻥ‬
‫ﻣﻨﻄﻘﻲﺃﻋﻼﻩ‪ .‬ﺇﺫﺍ ﺗﺮﻛﻨﺎ ‪ P‬ﻳﻜﻮﻥ }‪x< 3{ ،‬ﺱ ﻭ ﺱ‪x< 0{ ،.‬ﻭ ‪ P‬ﻳﻜﻮﻥ }‪x< 5{ ،‬ﻟﺪﻳﻨﺎ‬

‫(‪}x< 3{ x = x – 3 }x< 0{، )x< 5( =< }x< 3{، )x< 0( =< )x< 0‬‬
‫{‪}x< 5{ x = x – 3 }x< 0‬‬

‫ﺍﻟﻤﺼﻄﻠﺢﺍﻷﻭﻝ ﻣﻦ ﺍﻟﺴﺎﺑﻖ )}({‪x< 3{ x = x - 3 }x< 0‬ﺗﻢ ﺇﺛﺒﺎﺗﻪ ﻣﻦ ﺧﻼﻝ ﺑﺪﻳﻬﻴﺔ ﺍﻟﺘﺨﺼﻴﺺ‪.‬‬


‫ﺍﻟﻤﺼﻄﻠﺤﺎﻥﺍﻟﺜﺎﻧﻲ ﻭﺍﻟﺜﺎﻟﺚ ﻭﺍﺿﺤﺎﻥ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻭﻓﻘﺎً ﻟﻘﺎﻋﺪﺓ ﺍﻟﺘﺒﻌﻴﺔ ‪ ،‬ﻓﺈﻥ ﺍﻟﻨﺘﻴﺠﺔ ﺻﺤﻴﺤﺔ‪.‬‬

‫‪3.5.3.4‬ﺍﻟﺘﺴﻠﺴﻼﺕ‬
‫ﻻﻳﻤﻜﻦ ﻭﺻﻒ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﺴﻠﺴﻠﺔ ﻣﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺑﺒﺪﻳﻬﻴﺔ ‪ ،‬ﻷﻥ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ‬
‫ﻳﻌﺘﻤﺪﻋﻠﻰ ﺃﻧﻮﺍﻉ ﻣﻌﻴﻨﺔ ﻣﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻓﻲ ﺍﻟﺘﺴﻠﺴﻞ‪ .‬ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ‪ ،‬ﻻ ﻳﻤﻜﻦ ﻭﺻﻒ ﺍﻟﺸﺮﻁ‬
‫ﺍﻟﻤﺴﺒﻖﺇﻻ ﺑﻘﺎﻋﺪﺓ ﺍﺳﺘﻨﺘﺎﺝ‪ .‬ﻟﻨﻔﺘﺮﺽ ﺃﻥ ‪ S1‬ﻭ ‪ S2‬ﻋﺒﺎﺭﺓ ﻋﻦ ﺑﻴﺎﻧﺎﺕ ﺑﺮﻧﺎﻣﺞ ﻣﺘﺠﺎﻭﺭﺓ‪ .‬ﺇﺫﺍ‬
‫ﻛﺎﻧﺖﺍﻟﻤﺤﻄﺎﺕ ‪ S1‬ﻭ ‪ S2‬ﺗﺤﺘﻮﻳﺎﻥ ﻋﻠﻰ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻤﺴﺒﻘﺔ ﻭﺍﻟﻼﺣﻘﺔ ﺍﻟﺘﺎﻟﻴﺔ‬

‫{‪}P1{ S1 }P2‬‬
‫{‪}P2{ S2 }P3‬‬

‫ﻗﺎﻋﺪﺓﺍﻻﺳﺘﻨﺘﺎﺝ ﻟﻤﺜﻞ ﻫﺬﺍ ﺍﻟﺘﺴﻠﺴﻞ ﺍﻟﻤﻜﻮﻥ ﻣﻦ ﺑﻴﺎﻧﻴﻦ ﻫﻲ‬

‫{‪}P1{ S1 }P2{ ، }P2{ S2 }P3‬‬


‫{‪}P1{ S1 ، S2 }P3‬‬

‫ﻟﺬﻟﻚ ‪،‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ﻟﺪﻳﻨﺎ ‪S1 {P1} ،‬؛ ﻳﺼﻒ {‪ S2 }P3‬ﺍﻟﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ ﻟﻠﺘﺴﻠﺴﻞ ‪ S1‬؛‬
‫‪ .S2‬ﺗﻨﺺ ﻗﺎﻋﺪﺓ ﺍﻻﺳﺘﺪﻻﻝ ﻋﻠﻰ ﺃﻧﻪ ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﺷﺮﻁ ﺍﻟﺘﺴﻠﺴﻞ ﺍﻟﻤﺴﺒﻖ ‪ ،‬ﻳﺘﻢ ﺣﺴﺎﺏ‬
‫ﺍﻟﺸﺮﻁﺍﻟﻤﺴﺒﻖ ﻟﻠﺒﻴﺎﻥ ﺍﻟﺜﺎﻧﻲ‪ .‬ﺛﻢ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﺘﺄﻛﻴﺪ ﺍﻟﺠﺪﻳﺪ ﻛﺸﺮﻁ ﻻﺣﻖ ﻟﻠﺒﻴﺎﻥ ﺍﻷﻭﻝ ‪،‬‬
‫ﻭﺍﻟﺬﻱﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻪ ﺑﻌﺪ ﺫﻟﻚ ﻟﺤﺴﺎﺏ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻟﻠﺒﻴﺎﻥ ﺍﻷﻭﻝ ‪ ،‬ﻭﻫﻮ ﺃﻳﻀﺎً ﺍﻟﺸﺮﻁ‬
‫ﺍﻟﻤﺴﺒﻖﻟﻠﺘﺴﻠﺴﻞ ﺑﺄﻛﻤﻠﻪ‪ .‬ﺇﺫﺍ ﻛﺎﻧﺖ ‪ S1‬ﻭ ‪ S2‬ﻋﺒﺎﺭﺓ ﻋﻦ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ‬
‫‪153‬‬ ‫‪3.5‬ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ :‬ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‬

‫‪x1 = E1‬‬

‫ﻭ‬

‫‪x2 = E2‬‬

‫ﺇﺫﻥﻟﺪﻳﻨﺎ‬

‫‪x2}P3‬ﺱﻩ ‪{ x2 = E2 }P3{2‬‬
‫})ﺹ ‪x23‬ﺱﻩ ‪x1(2‬ﺱﻩ ‪x2{ x1 = E1 }P31‬ﺱﻩ ‪{2‬‬

‫})‪x2P3‬‬ ‫ﻟﺬﻟﻚ ‪،‬ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﻠﺘﺴﻠﺴﻞ ‪ x1 = E1‬؛ ‪ x2 = E2‬ﻣﻊ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ‪ P3‬ﻫﻮ‬
‫ﺱﻩ ‪x1(2‬ﺱﻩ ‪.{1‬‬
‫ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﺘﺴﻠﺴﻞ ﻭﺍﻟﻈﺮﻭﻑ ﺍﻟﻼﺣﻘﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﺹ= ‪ * 3‬ﺱ ‪ 1 +‬؛‬


‫ﺱ= ﺹ ‪ 3 +‬؛‬
‫{‪}x >10‬‬

‫ﺍﻟﺸﺮﻁﺍﻟﻤﺴﺒﻖ ﻟﺒﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﺜﺎﻧﻲ ﻫﻮ‬

‫ﺹ >‪7‬‬

‫ﻭﺍﻟﺬﻱﻳﺴﺘﺨﺪﻡ ﻛﺸﺮﻁ ﻻﺣﻖ ﻟﻠﺒﻴﺎﻥ ﺍﻷﻭﻝ‪ .‬ﻳﻤﻜﻦ ﺍﻵﻥ ﺣﺴﺎﺏ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻟﺒﻴﺎﻥ‬
‫ﺍﻟﺘﺨﺼﻴﺺﺍﻷﻭﻝ‪:‬‬

‫‪ *3‬ﺱ ‪7> 1 +‬‬


‫ﺱ >‪2‬‬

‫ﻟﺬﺍ‪x >2{}،‬ﻫﻮ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻟﻜﻞ ﻣﻦ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻷﻭﻟﻰ ﻭﺍﻟﺘﺴﻠﺴﻞ ﺍﻟﺜﻨﺎﺉﻲ‪.‬‬

‫‪3.5.3.5‬ﺍﻟﺘﺤﺪﻳﺪ‬
‫ﻧﻌﺘﺒﺮﺑﻌﺪ ﺫﻟﻚ ﻗﺎﻋﺪﺓ ﺍﻻﺳﺘﺪﻻﻝ ﻟﺒﻴﺎﻧﺎﺕ ﺍﻻﺧﺘﻴﺎﺭ ‪ ،‬ﻭﺍﻟﺸﻜﻞ ﺍﻟﻌﺎﻡ ﻟﻬﺎ ﻫﻮ‬

‫ﻟﻮﺏﺛﻢ‪S1‬ﺁﺧﺮ‪S2‬‬

‫ﻧﺤﻦﻧﻌﺘﺒﺮ ﻓﻘﻂ ﺍﻻﺧﺘﻴﺎﺭﺍﺕ ﺍﻟﺘﻲ ﺗﺸﻤﻞﺁﺧﺮﺷﺮﻭﻁ‪ .‬ﻗﺎﻋﺪﺓ ﺍﻻﺳﺘﺪﻻﻝ ﻫﻲ‬

‫{‪ P{ S2 }Q‬ﻭ (‪ B‬ﻟﻴﺲ)} ﻭ {‪ P{ S1 }Q‬ﻭ ‪}B‬‬


‫}ﺹ{ﻟﻮﺏﺛﻢ‪S1‬ﺁﺧﺮ{ﺱ} ‪S2‬‬

‫ﺗﺸﻴﺮﻫﺬﻩ ﺍﻟﻘﺎﻋﺪﺓ ﺇﻟﻰ ﺃﻧﻪ ﻳﺠﺐ ﺇﺛﺒﺎﺕ ﻋﺒﺎﺭﺍﺕ ﺍﻻﺧﺘﻴﺎﺭ ﻋﻨﺪﻣﺎ ﻳﻜﻮﻥ ﺗﻌﺒﻴﺮ ﺍﻟﺘﺤﻜﻢ ﺍﻟﻤﻨﻄﻘﻲ‬
‫ﺻﺤﻴﺤﺎًﻭﻋﻨﺪﻣﺎ ﻳﻜﻮﻥ ﺧﺎﻃﺉﺎً‪ .‬ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻷﻭﻟﻰ ﻓﻮﻕ ﺍﻟﺴﻄﺮ ﺗﻤﺜﻞﺛﻢﺑﻨﺪ؛ ﺍﻟﺜﺎﻧﻲ ﻳﻤﺜﻞ‬
‫ﺁﺧﺮ‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪154‬‬

‫ﺑﻨﺪ‪.‬ﻭﻓﻘﺎً ﻟﻘﺎﻋﺪﺓ ﺍﻻﺳﺘﺪﻻﻝ ‪ ،‬ﻧﺤﺘﺎﺝ ﺇﻟﻰ ﺷﺮﻁ ﻣﺴﺒﻖ ‪ P‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻓﻲ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ‬
‫ﻟﻜﻠﻴﻬﻤﺎﺛﻢﻭﺁﺧﺮﺷﺮﻭﻁ‪.‬‬
‫ﺿﻊﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﻤﺜﺎﻝ ﺍﻟﺘﺎﻟﻲ ﻟﺤﺴﺎﺏ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻗﺎﻋﺪﺓ ﺍﺳﺘﺪﻻﻝ‬
‫ﺍﻟﺘﺤﺪﻳﺪ‪.‬ﺑﻴﺎﻥ ﺍﺧﺘﻴﺎﺭ ﺍﻟﻤﺜﺎﻝ ﻫﻮ‬

‫ﻟﻮ‪x< 0‬ﺛﻢ‬
‫ﺹ= ﺹ ‪1 -‬‬
‫ﺁﺧﺮ‬
‫ﺹ= ﺹ ‪1 +‬‬

‫ﺍﻓﺘﺮﺽﺃﻥ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ‪ ، Q ،‬ﻟﺒﻴﺎﻥ ﺍﻻﺧﺘﻴﺎﺭ ﻫﺬﺍ ﻫﻮ }ﺹ< ‪.{0‬ﻳﻤﻜﻨﻨﺎ ﺍﺳﺘﺨﺪﺍﻡ‬


‫ﺍﻟﺒﺪﻳﻬﻴﺔﻟﻠﺘﻌﻴﻴﻦ ﻋﻠﻰﺛﻢﺑﻨﺪ‬

‫ﺹ= ﺹ ‪} 1 -‬ﺹ< ‪{0‬‬

‫ﻳﻨﺘﺞﻋﻦ ﻫﺬﺍ }ﺹ ‪{0 <1 -‬ﺃﻭ }ﺹ< ‪.{1‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻛﺠﺰء ‪ P‬ﻣﻦ ﻣﻠﻒ‬
‫ﺷﺮﻁﻣﺴﺒﻖ ﻝﺛﻢﺑﻨﺪ‪ .‬ﺍﻵﻥ ﻧﻄﺒﻖ ﻧﻔﺲ ﺍﻟﺒﺪﻳﻬﻴﺔ ﻋﻠﻰﺁﺧﺮﺑﻨﺪ‬
‫ﻣﻼﺣﻈﺔﺗﺎﺭﻳﺨﻴﺔ ﺫ‬
‫ﺗﻢﺇﻧﺠﺎﺯ ﻗﺪﺭ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﻌﻤﻞ ﻋﻠﻰ‬
‫ﺹ= ﺹ ‪} 1 +‬ﺹ< ‪{0‬‬
‫ﺇﻣﻜﺎﻧﻴﺔﺍﺳﺘﺨﺪﺍﻡ ﺃﻭﺻﺎﻑ ﺍﻟﻠﻐﺔ‬
‫ﺍﻟﻮﺻﻔﻴﺔﻟﺘﻮﻟﻴﺪﻫﺎ‬
‫ﺍﻟﺘﻲﺗﻨﺘﺞ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ }ﺹ ‪{0 <1 +‬ﺃﻭ }ﺹ< ‪ .{1-‬ﻷﻥ }ﺹ< ‪{y< -1} <= {1‬‬
‫‪،‬ﺗﺴﻤﺢ ﻟﻨﺎ ﻗﺎﻋﺪﺓ ﺍﻟﻨﺘﻴﺠﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ }ﺹ< ‪{1‬ﻟﻠﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻟﺒﻴﺎﻥ ﺍﻻﺧﺘﻴﺎﺭ‬ ‫ﺍﻟﻤﺘﺮﺟﻤﻮﻥﺗﻠﻘﺎﺉﻴﺎً )ﺟﻮﻧﺰ ‪ 1980 ،‬؛‬
‫ﺑﺄﻛﻤﻠﻪ‪.‬‬ ‫ﻣﻴﻠﻮﺱﻭﺁﺧﺮﻭﻥ ‪ 1984 ،‬؛‬
‫‪.‬ﻭﻗﺪﺃﻇﻬﺮﺕ ﻫﺬﻩ ﺍﻟﺠﻬﻮﺩ ﺃﻥ ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﻣﺠﺪﻳﺔ ‪،‬ﻟﻜﻦ ﺍﻟﻌﻤﻞ ﻟﻢ ﻳﺘﻘﺪﻡ ﺃﺑﺪﺍً ﺇﻟﻰ‬
‫‪3.5.3.6‬ﺍﻟﺤﻠﻘﺎﺕ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻟﻤﺴﺒﻘﺔ‬
‫ﺍﻟﻨﻘﻄﺔﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻹﻧﺸﺎء‬
‫ﺍﻟﺒﻨﺎءﺍﻷﺳﺎﺳﻲ ﺍﻵﺧﺮ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺤﺘﻤﻴﺔ ﻫﻮ ﺍﻻﺧﺘﺒﺎﺭ ﺍﻟﻤﻨﻄﻘﻲ ﺍﻟﻤﺴﺒﻖ ‪،‬‬ ‫ﻣﺠﻤﻌّﻴﻦﻣﻔﻴﺪﻳﻦ ‪et al. ، 1982( ،‬‬
‫ﺃﻭﺑﻴﻨﻤﺎﺣﻠﻘﺔ‪ .‬ﺣﺴﺎﺏ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟـﺑﻴﻨﻤﺎﺣﻠﻘﺔ ﺑﻄﺒﻴﻌﺘﻬﺎ ﺃﺻﻌﺐ ﻣﻦ‬ ‫‪Bodwin‬‬
‫ﺳﻠﺴﻠﺔ ‪،‬ﻷﻥ ﻋﺪﺩ ﺍﻟﺘﻜﺮﺍﺭﺍﺕ ﻻ ﻳﻤﻜﻦ ﺩﺍﺉﻤﺎً ﺗﺤﺪﻳﺪﻩ ﻣﺴﺒﻘﺎً‪ .‬ﻓﻲ ﺣﺎﻟﺔ ﻣﻌﺮﻓﺔ‬
‫ﻋﺪﺩﺍﻟﺘﻜﺮﺍﺭﺍﺕ ‪،‬‬

‫ﻳﻤﻜﻦﻓﻚ ﺍﻟﺤﻠﻘﺔ ﻭﻣﻌﺎﻟﺠﺘﻬﺎ ﻛﺘﺴﻠﺴﻞ‪.‬‬


‫ﻣﺸﻜﻠﺔﺣﺴﺎﺏ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﻠﺤﻠﻘﺎﺕ ﺗﺸﺒﻪ ﻣﺸﻜﻠﺔ ﺇﺛﺒﺎﺕ ﻧﻈﺮﻳﺔ ﺣﻮﻝ ﺟﻤﻴﻊ‬
‫ﺍﻷﻋﺪﺍﺩﺍﻟﺼﺤﻴﺤﺔ ﺍﻟﻤﻮﺟﺒﺔ‪ .‬ﻓﻲ ﺍﻟﺤﺎﻟﺔ ﺍﻷﺧﻴﺮﺓ ‪ ،‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺤﺚ ﻋﺎﺩﺓ ً‪ ،‬ﻭﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﻧﻔﺲﺍﻟﻄﺮﻳﻘﺔ ﺍﻻﺳﺘﻘﺮﺍﺉﻴﺔ ﻟﺒﻌﺾ ﺍﻟﺤﻠﻘﺎﺕ‪ .‬ﺍﻟﺨﻄﻮﺓ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻓﻲ ﺍﻻﺳﺘﻘﺮﺍء ﻫﻲ ﺇﻳﺠﺎﺩ‬
‫ﻓﺮﺿﻴﺔﺍﺳﺘﻘﺮﺍﺉﻴﺔ‪ .‬ﺍﻟﺨﻄﻮﺓ ﺍﻟﻤﻘﺎﺑﻠﺔ ﻓﻲ ﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ ﻣﻦ ﺃﺑﻴﻨﻤﺎﺍﻟﺤﻠﻘﺔ ﺗﺠﺪ ﺗﺄﻛﻴﺪﺍً ﻳﺴﻤﻰ ‪a‬‬
‫ﺣﻠﻘﺔﺛﺎﺑﺘﺔ‪ ،‬ﻭﻫﻮ ﺃﻣﺮ ﺣﺎﺳﻢ ﻹﻳﺠﺎﺩ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ‪.‬‬

‫ﻗﺎﻋﺪﺓﺍﻻﺳﺘﺪﻻﻝ ﻟﺤﺴﺎﺏ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻟـﺑﻴﻨﻤﺎﺍﻟﺤﻠﻘﺔ ﻫﻲ‬

‫{‪}I and B{ S }I‬‬


‫}ﺃﻧﺎ{ﺑﻴﻨﻤﺎﺏﻳﻔﻌﻞﺱﻧﻬﺎﻳﺔ}ﺃﻧﺎ ﻭ )ﻟﻴﺲ ﺏ({‬

‫ﺣﻴﺚﺃﻧﺎ ﺍﻟﺤﻠﻘﺔ ﺍﻟﺜﺎﺑﺘﺔ‪ .‬ﻳﺒﺪﻭ ﻫﺬﺍ ﺑﺴﻴﻄﺎً ‪ ،‬ﻟﻜﻨﻪ ﻟﻴﺲ ﻛﺬﻟﻚ‪ .‬ﻳﻜﻤﻦ ﺍﻟﺘﻌﻘﻴﺪ ﻓﻲ ﺇﻳﺠﺎﺩ ﺣﻠﻘﺔ‬
‫ﺛﺎﺑﺘﺔﺛﺎﺑﺘﺔ‪.‬‬
‫‪155‬‬ ‫‪3.5‬ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ :‬ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‬

‫ﺍﻟﻮﺻﻒﺍﻟﺒﺪﻳﻬﻴﺔ ﻝﺑﻴﻨﻤﺎﺍﻟﺤﻠﻘﺔ ﻫﻲ ﻣﻜﺘﻮﺑﺔ‬

‫}ﺹ{ﺑﻴﻨﻤﺎﺏﻳﻔﻌﻞﺱﻧﻬﺎﻳﺔ}ﺱ{‬

‫ﻳﺠﺐﺃﻥ ﻳﻔﻲ ﻣﺘﻐﻴﺮ ﺍﻟﺤﻠﻘﺔ ﺑﻌﺪﺩ ﻣﻦ ﺍﻟﻤﺘﻄﻠﺒﺎﺕ ﻟﻴﻜﻮﻥ ﻣﻔﻴﺪﺍً‪ .‬ﺃﻭﻻ ً‪ ،‬ﺃﺿﻌﻒ ﺷﺮﻁ‬
‫ﻣﺴﺒﻖﻟـﺑﻴﻨﻤﺎﻳﺠﺐ ﺃﻥ ﺗﻀﻤﻦ ﺍﻟﺤﻠﻘﺔ ﺣﻘﻴﻘﺔ ﺍﻟﺤﻠﻘﺔ ﺍﻟﺜﺎﺑﺘﺔ‪ .‬ﻓﻲ ﺍﻟﻤﻘﺎﺑﻞ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﺗﻀﻤﻦ‬
‫ﺍﻟﺤﻠﻘﺔﺍﻟﺜﺎﺑﺘﺔ ﺣﻘﻴﻘﺔ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﻋﻨﺪ ﺇﻧﻬﺎء ﺍﻟﺤﻠﻘﺔ‪ .‬ﺗﻨﻘﻠﻨﺎ ﻫﺬﻩ ﺍﻟﻘﻴﻮﺩ ﻣﻦ ﻗﺎﻋﺪﺓ ﺍﻻﺳﺘﺪﻻﻝ‬
‫ﺇﻟﻰﺍﻟﻮﺻﻒ ﺍﻟﺒﺪﻳﻬﻲ‪ .‬ﺃﺛﻨﺎء ﺗﻨﻔﻴﺬ ﺍﻟﺤﻠﻘﺔ ‪ ،‬ﻳﺠﺐ ﺃﻻ ﺗﺘﺄﺛﺮ ﺣﻘﻴﻘﺔ ﺍﻟﺤﻠﻘﺔ ﺍﻟﺜﺎﺑﺘﺔ ﺑﺘﻘﻴﻴﻢ ﺍﻟﺘﻌﺒﻴﺮ‬
‫ﺍﻟﻤﻨﻄﻘﻲﺍﻟﺬﻱ ﻳﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺤﻠﻘﺔ ﻭﻋﺒﺎﺭﺍﺕ ﺟﺴﻢ ﺍﻟﺤﻠﻘﺔ‪ .‬ﻭﻣﻦ ﻫﻨﺎ ﺍﻻﺳﻢ ﺛﺎﺑﺖ‪.‬‬

‫ﻋﺎﻣﻞﻣﻌﻘﺪ ﺁﺧﺮ ﻝﺑﻴﻨﻤﺎﺍﻟﺤﻠﻘﺎﺕ ﻫﻲ ﻣﺴﺄﻟﺔ ﺇﻧﻬﺎء ﺍﻟﺤﻠﻘﺔ‪ .‬ﺍﻟﺤﻠﻘﺔ ﺍﻟﺘﻲ ﻻ ﺗﻨﺘﻬﻲ ﻻ ﻳﻤﻜﻦ‬
‫ﺃﻥﺗﻜﻮﻥ ﺻﺤﻴﺤﺔ ‪ ،‬ﻭﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻻ ﺗﺤﺴﺐ ﺷﻴﺉﺎً‪ .‬ﺇﺫﺍ ﻛﺎﻥ ‪ Q‬ﻫﻮ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﺍﻟﺬﻱ ﻳﺘﻢ‬
‫ﺍﻻﺣﺘﻔﺎﻅﺑﻪ ﻓﻮﺭ ﺧﺮﻭﺝ ﺍﻟﺤﻠﻘﺔ ‪ ،‬ﻓﺈﻥ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ‪ P‬ﻟﻠﺤﻠﻘﺔ ﻫﻮ ﺍﻟﺬﻱ ﻳﻀﻤﻦ ‪ Q‬ﻋﻨﺪ ﺧﺮﻭﺝ‬
‫ﺍﻟﺤﻠﻘﺔﻭﻳﻀﻤﻦ ﺃﻳﻀﺎً ﺇﻧﻬﺎء ﺍﻟﺤﻠﻘﺔ‪.‬‬

‫ﺍﻟﻮﺻﻒﺍﻟﻜﺎﻣﻞ ﺍﻟﺒﺪﻳﻬﻴﺔ ﻝﺑﻴﻨﻤﺎﻳﺘﻄﻠﺐ ﺍﻟﺒﻨﺎء ﺃﻥ ﻳﻜﻮﻥ ﻛﻞ ﻣﺎ ﻳﻠﻲ ﺻﺤﻴﺤﺎً ‪ ،‬ﺣﻴﺚ ﺃﻧﺎ‬


‫ﺣﻠﻘﺔﺛﺎﺑﺘﺔ‪:‬‬

‫ﻑ=< ﺃﻧﺎ‬
‫{‪}I and B{ S }I‬‬
‫ﺗﻨﺘﻬﻲﺍﻟﺤﻠﻘﺔ ‪B(( =< Q‬‬
‫‪)I and )not‬‬

‫ﺇﺫﺍﻗﺎﻣﺖ ﺣﻠﻘﺔ ﺑﺤﺴﺎﺏ ﺳﻠﺴﻠﺔ ﻣﻦ ﺍﻟﻘﻴﻢ ﺍﻟﺮﻗﻤﻴﺔ ‪ ،‬ﻓﻘﺪ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ‬
‫ﺣﻠﻘﺔﺛﺎﺑﺘﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻧﻬﺞ ﻳﺴﺘﺨﺪﻡ ﻟﺘﺤﺪﻳﺪ ﺍﻟﻔﺮﺿﻴﺔ ﺍﻻﺳﺘﻘﺮﺍﺉﻴﺔ ﻋﻨﺪ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺤﺚ‬
‫ﺍﻟﺮﻳﺎﺿﻲﻹﺛﺒﺎﺕ ﺑﻴﺎﻥ ﺣﻮﻝ ﺗﺴﻠﺴﻞ ﺭﻳﺎﺿﻲ‪ .‬ﻳﺘﻢ ﺣﺴﺎﺏ ﺍﻟﻌﻼﻗﺔ ﺑﻴﻦ ﻋﺪﺩ ﺍﻟﺘﻜﺮﺍﺭﺍﺕ ﻭﺍﻟﺸﺮﻁ‬
‫ﺍﻟﻤﺴﺒﻖﻟﺠﺴﻢ ﺍﻟﺤﻠﻘﺔ ﻟﻌﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻋﻠﻰ ﺃﻣﻞ ﻇﻬﻮﺭ ﻧﻤﻂ ﻳﻨﻄﺒﻖ ﻋﻠﻰ ﺍﻟﺤﺎﻟﺔ‬
‫ﺍﻟﻌﺎﻣﺔ‪.‬ﻣﻦ ﺍﻟﻤﻔﻴﺪ ﻣﻌﺎﻟﺠﺔ ﻋﻤﻠﻴﺔ ﺇﻧﺘﺎﺝ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻛﻮﻇﻴﻔﺔ ‪ .wp ،‬ﻋﻠﻰ ﺍﻟﻌﻤﻮﻡ‬

‫ﺷﺮﻁﻣﺴﺒﻖ = (ﺑﻴﺎﻥ ‪ ،‬ﺷﺮﻁ ﻻﺣﻖ) ‪wp‬‬


‫ﻏﺎﻟﺒﺎًﻣﺎ ﺗﺴﻤﻰ ﺩﺍﻟﺔ ‪wp a‬ﺍﻟﻤﺤﻮﻻﺕ ﺍﻟﻤﺴﻨﺪ‪ ،‬ﻷﻧﻪ ﻳﺄﺧﺬ ﻣﺴﻨﺪﺍً ﺃﻭ ﺗﺄﻛﻴﺪﺍً ﻛﻤﻌﺎﻣﻞ ﻭﻳﻌﻴﺪ‬
‫ﻣﺴﻨﺪﺍًﺁﺧﺮ‪.‬‬
‫ﻟﻠﻌﺜﻮﺭﻋﻠﻰ ‪ ، I‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺤﻠﻘﺔ ‪ postcondition Q‬ﻟﺤﺴﺎﺏ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻤﺴﺒﻘﺔ‬
‫ﻟﻌﺪﺓﺃﻋﺪﺍﺩ ﻣﺨﺘﻠﻔﺔ ﻣﻦ ﺍﻟﺘﻜﺮﺍﺭﺍﺕ ﻟﺠﺴﻢ ﺍﻟﺤﻠﻘﺔ ‪ ،‬ﺑﺪءﺍً ﻣﻦ ﻻ ﺷﻲء‪ .‬ﺇﺫﺍ ﻛﺎﻥ ﺟﺴﻢ ﺍﻟﺤﻠﻘﺔ‬
‫ﻳﺤﺘﻮﻱﻋﻠﻰ ﻋﺒﺎﺭﺓ ﺗﺨﺼﻴﺺ ﻭﺍﺣﺪﺓ ‪ ،‬ﻓﻴﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺑﺪﻳﻬﻴﺔ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻟﺤﺴﺎﺏ‬
‫ﻫﺬﻩﺍﻟﺤﺎﻻﺕ‪ .‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﻣﺜﺎﻝ ﺍﻟﺤﻠﻘﺔ‪:‬‬

‫ﺑﻴﻨﻤﺎﺹ >< ﺱﻳﻔﻌﻞﺹ = ﺹ ‪1 +‬ﻧﻬﺎﻳﺔ}ﺹ = ﺱ{‬

‫ﺗﺬﻛﺮﺃﻧﻪ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻋﻼﻣﺔ ﺍﻟﺘﺴﺎﻭﻱ ﻟﻐﺮﺿﻴﻦ ﻣﺨﺘﻠﻔﻴﻦ ﻫﻨﺎ‪ .‬ﻓﻲ ﺍﻟﺘﺄﻛﻴﺪﺍﺕ ‪ ،‬ﻓﻬﺬﺍ ﻳﻌﻨﻲ‬
‫ﺍﻟﻤﺴﺎﻭﺍﺓﺍﻟﺮﻳﺎﺿﻴﺔ ؛ ﺍﻟﺘﺄﻛﻴﺪﺍﺕ ﺍﻟﺨﺎﺭﺟﻴﺔ ‪ ،‬ﻓﻬﺬﺍ ﻳﻌﻨﻲ ﻋﺎﻣﻞ ﺍﻟﺘﺨﺼﻴﺺ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪156‬‬

‫ﺑﺎﻟﻨﺴﺒﺔﻟﻠﺘﻜﺮﺍﺭ ﺍﻟﺼﻔﺮﻱ ‪ ،‬ﻓﺈﻥ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻫﻮ ‪ ،‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ‪،‬‬

‫}ﺹ = ﺱ{‬

‫ﻟﺘﻜﺮﺍﺭﻭﺍﺣﺪ ‪ ،‬ﻫﻮ ﻛﺬﻟﻚ‬

‫) ‪wp‬ﺹ = ﺹ ‪} ، 1 +‬ﺹ = ﺱ{( = }ﺹ ‪ = 1 +‬ﺱ{ ‪،‬ﺃﻭ }ﺹ = ﺱ ‪{1 -‬‬


‫ﻻﺛﻨﻴﻦﻣﻦ ﺍﻟﺘﻜﺮﺍﺭﺍﺕ ‪ ،‬ﻫﻮ‬
‫) ‪wp‬ﺹ = ﺹ ‪} ، 1 +‬ﺹ = ﺱ ‪} = ({1 -‬ﺹ ‪ = 1 +‬ﺱ ‪، {1 -‬ﺃﻭ }ﺹ = ﺱ ‪{2 -‬‬

‫ﻟﺜﻼﺛﺔﺗﻜﺮﺍﺭﺍﺕ ‪ ،‬ﻫﻮ‬
‫) ‪wp‬ﺹ = ﺹ ‪} ، 1 +‬ﺹ = ﺱ ‪} = ({2 -‬ﺹ ‪ = 1 +‬ﺱ ‪، {2 -‬ﺃﻭ }ﺹ = ﺱ ‪{3 -‬‬
‫ﻣﻦﺍﻟﻮﺍﺿﺢ ﺍﻵﻥ ﺃﻥ }ﺹ >ﺱ{ﻳﻜﻔﻲ ﻟﺤﺎﻻﺕ ﺗﻜﺮﺍﺭ ﻭﺍﺣﺪ ﺃﻭ ﺃﻛﺜﺮ‪ .‬ﺩﻣﺞ ﻫﺬﺍ ﻣﻊ }ﺹ = ﺱ{‬
‫ﺑﺎﻟﻨﺴﺒﺔﻟﺤﺎﻟﺔ ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﺼﻔﺮﻳﺔ ‪ ،‬ﻧﺤﺼﻞ ﻋﻠﻰ }ﺹ >= ﺱ{ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻟﻠﺤﻠﻘﺔ‬
‫ﺍﻟﺜﺎﺑﺘﺔ‪.‬ﺷﺮﻁ ﻣﺴﺒﻖ ﻝﺑﻴﻨﻤﺎﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﺍﻟﺒﻴﺎﻥ ﻣﻦ ﺍﻟﺤﻠﻘﺔ ﺍﻟﺜﺎﺑﺘﺔ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻳﻤﻜﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻲﻛﺸﺮﻁ ﻣﺴﺒﻖ ‪.P ،‬‬

‫ﻳﺠﺐﺃﻥ ﻧﺘﺄﻛﺪ ﻣﻦ ﺃﻥ ﺍﺧﺘﻴﺎﺭﻧﺎ ﻳﻔﻲ ﺑﺎﻟﻤﻌﺎﻳﻴﺮ ﺍﻷﺭﺑﻌﺔ ﻟـ ‪ I‬ﻟﺤﻠﻘﺔ ﺍﻟﻤﺜﺎﻝ ﺍﻟﺨﺎﺻﺔ ﺑﻨﺎ‪ .‬ﺃﻭﻻ ً‪،‬‬
‫ﻷﻥ‪ .P = I ، P =< I‬ﺍﻟﻤﻄﻠﺐ ﺍﻟﺜﺎﻧﻲ ﻫﻮ ﺃﻧﻪ ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﺻﺤﻴﺤﺎً‬

‫{‪}I and B{ S }I‬‬

‫ﻓﻲﻣﺜﺎﻟﻨﺎ ﻟﺪﻳﻨﺎ‬

‫{‪ y >< x{ y = y + 1 }y >= x‬ﻭ ‪}y >= x‬‬

‫ﺗﻄﺒﻴﻖﺑﺪﻳﻬﻴﺔ ﺍﻟﺘﻨﺎﺯﻝ ﻋﻠﻰ‬

‫ﺹ= ﺹ ‪} 1 +‬ﺹ >= ﺱ{‬

‫ﻧﺤﻦﻧﺤﺼﻞ }ﺹ ‪ => 1 +‬ﺱ{ ‪،‬ﻭﻫﻮ ﻣﺎ ﻳﻌﺎﺩﻝ }ﺹ >ﺱ{ ‪،‬ﻭﻫﻮ ﻣﺎ ﻳﻌﻨﻴﻪ ﺿﻤﻨﻴﺎً }ﺹ >= ﺱﻭ‬
‫ﺹ>< ﺱ{‪.‬ﻟﺬﻟﻚ ‪ ،‬ﺗﻢ ﺇﺛﺒﺎﺕ ﺍﻟﺒﻴﺎﻥ ﺍﻟﺴﺎﺑﻖ‪.‬‬
‫ﺑﻌﺪﺫﻟﻚ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻟﺪﻳﻨﺎ‬

‫}ﺃﻧﺎ ﻭ )ﻭﻟﻴﺲ ﺏ({ =< ﺱ‬

‫ﻓﻲﻣﺜﺎﻟﻨﺎ ﻟﺪﻳﻨﺎ‬

‫})ﺹ >= ﺱ(ﻭ ﻻ )(‪y >< x({ =< }y = x{ })y >= x‬ﻭ ){‪= x‬‬
‫‪y = x({ =< }y = x{ }y = x{ =< }y‬‬

‫ﻟﺬﺍ ‪،‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻫﺬﺍ ﺻﺤﻴﺢ‪ .‬ﺑﻌﺪ ﺫﻟﻚ ‪ ،‬ﻳﺠﺐ ﺍﻟﻨﻈﺮ ﻓﻲ ﺇﻧﻬﺎء ﺍﻟﺤﻠﻘﺔ‪ .‬ﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ ‪،‬‬
‫ﺍﻟﺴﺆﺍﻝﻫﻮ ﻣﺎ ﺇﺫﺍ ﻛﺎﻧﺖ ﺍﻟﺤﻠﻘﺔ‬

‫}ﺹ >= ﺱ{ﺑﻴﻨﻤﺎﺹ >< ﺱﻳﻔﻌﻞﺹ = ﺹ ‪1 +‬ﻧﻬﺎﻳﺔ}ﺹ = ﺱ{‬


‫‪157‬‬ ‫‪3.5‬ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ :‬ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‬

‫ﻳﻨﺘﻬﻲ‪.‬ﻣﺸﻴﺮﺍً ﺇﻟﻰ ﺫﻟﻚ‪x‬ﻭﺫﻣﻦ ﺍﻟﻤﻔﺘﺮﺽ ﺃﻥ ﺗﻜﻮﻥ ﻣﺘﻐﻴﺮﺍﺕ ﻋﺪﺩ ﺻﺤﻴﺢ ‪ ،‬ﻓﻤﻦ ﺍﻟﺴﻬﻞ ﺃﻥ‬
‫ﻧﺮﻯﺃﻥ ﻫﺬﻩ ﺍﻟﺤﻠﻘﺔ ﻻ ﺗﻨﺘﻬﻲ‪ .‬ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻳﻀﻤﻦ ﺫﻟﻚﺫﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ﻟﻴﺲ ﺃﻛﺒﺮ ﻣﻦ‪x.‬ﺯﻳﺎﺩﺍﺕ‬
‫ﺟﺴﻢﺍﻟﺤﻠﻘﺔﺫﻣﻊ ﻛﻞ ﺗﻜﺮﺍﺭ ‪ ،‬ﺣﺘﻰ‬
‫ﺫﻣﺴﺎﻭﻱ ﻝ‪x.‬ﻣﻬﻤﺎ ﻛﺎﻥ ﺃﺻﻐﺮ ﺑﻜﺜﻴﺮﺫﻫﻮ ﻣﻦ‪x‬ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ‪ ،‬ﺳﺘﺼﺒﺢ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ﻣﺴﺎﻭﻳﺔ ﻟـ‪x.‬‬
‫ﻟﺬﻟﻚﺳﺘﻨﺘﻬﻲ ﺍﻟﺤﻠﻘﺔ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﺍﺧﺘﻴﺎﺭﻧﺎ ﻟـ ‪ I‬ﻳﻠﺒﻲ ﺟﻤﻴﻊ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻷﺭﺑﻌﺔ ‪ ،‬ﻓﻬﻮ ﺷﺮﻁ ﻣﺮُﺽ ٍ‬
‫ﻟﻠﺤﻠﻘﺔﺍﻟﺜﺎﺑﺘﺔ ﻭﺍﻟﺤﻠﻘﺔ‪.‬‬
‫ﺍﻟﻌﻤﻠﻴﺔﺍﻟﺴﺎﺑﻘﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﺤﺴﺎﺏ ﺍﻟﺜﺎﺑﺖ ﻟﻠﺤﻠﻘﺔ ﻻ ﺗﻨﺘﺞ ﺩﺍﺉﻤﺎً ﺗﺄﻛﻴﺪﺍً ﻫﻮ ﺃﺿﻌﻒ‬
‫ﺷﺮﻁﻣﺴﺒﻖ )ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﺗﻔﻌﻞ ﺫﻟﻚ ﻓﻲ ﺍﻟﻤﺜﺎﻝ(‪.‬‬

‫ﻛﻤﺜﺎﻝﺁﺧﺮ ﻹﻳﺠﺎﺩ ﺣﻠﻘﺔ ﺛﺎﺑﺘﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺍﻻﺳﺘﻘﺮﺍء ﺍﻟﺮﻳﺎﺿﻲ ‪،‬‬
‫ﺿﻊﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﻋﺒﺎﺭﺓ ﺍﻟﺤﻠﻘﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﺑﻴﻨﻤﺎﻕ< ‪1‬ﻳﻔﻌﻞﻕ = ﻕ ‪2 /‬ﻧﻬﺎﻳﺔ}ﻕ = ‪{1‬‬

‫ﻛﻤﺎﻓﻲ ﺍﻟﺴﺎﺑﻖ ‪ ،‬ﻧﺴﺘﺨﺪﻡ ﺑﺪﻳﻬﻴﺔ ﺍﻟﺘﺨﺼﻴﺺ ﻟﻤﺤﺎﻭﻟﺔ ﺇﻳﺠﺎﺩ ﺣﻠﻘﺔ ﺛﺎﺑﺘﺔ ﻭﺷﺮﻁ ﻣﺴﺒﻖ‬
‫ﻟﻠﺤﻠﻘﺔ‪.‬ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺘﻜﺮﺍﺭ ﺍﻟﺼﻔﺮﻱ ‪ ،‬ﻳﻜﻮﻥ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺍﻷﺿﻌﻒ }ﻕ = ‪.{1‬ﻟﺘﻜﺮﺍﺭ ﻭﺍﺣﺪ ‪ ،‬ﻫﻮ‬
‫ﻛﺬﻟﻚ‬

‫) ‪wp‬ﻕ = ﻕ ‪} ، 2 /‬ﻕ = ‪} = ({1‬ﻕ ‪، {1 = 2 /‬ﺃﻭ }ﻕ = ‪{2‬‬

‫ﻻﺛﻨﻴﻦﻣﻦ ﺍﻟﺘﻜﺮﺍﺭﺍﺕ ‪ ،‬ﻫﻮ‬

‫) ‪wp‬ﻕ = ﻕ ‪} ، 2 /‬ﻕ = ‪} = ({2‬ﻕ ‪، {2 = 2 /‬ﺃﻭ }ﻕ = ‪{4‬‬

‫ﻟﺜﻼﺛﺔﺗﻜﺮﺍﺭﺍﺕ ‪ ،‬ﻫﻮ‬

‫) ‪wp‬ﻕ = ﻕ ‪} ، 2 /‬ﻕ = ‪} = ({4‬ﻕ ‪، {4 = 2 /‬ﺃﻭ }ﻕ = ‪{8‬‬

‫ﻣﻦﻫﺬﻩ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻳﻤﻜﻨﻨﺎ ﺃﻥ ﻧﺮﻯ ﺑﻮﺿﻮﺡ ﺃﻥ ﺍﻟﺜﺎﺑﺖ ﻫﻮ‬


‫}ﺱﻫﻲ ﻗﻮﺓ ﻏﻴﺮ ﺳﻠﺒﻴﺔ‪{2‬‬
‫ﻣﺮﺓﺃﺧﺮﻯ ‪ ،‬ﺍﻟﻤﺤﻮﺳﺒﺔ ﻳﻤﻜﻨﻨﻲ ﺃﻥ ﺃﻋﻤﻞ ﻛـ ‪ ، P‬ﻭﺃﻧﺎ ﺃﺟﺘﺎﺯ ﺍﻟﻤﺘﻄﻠﺒﺎﺕ ﺍﻷﺭﺑﻌﺔ‪ .‬ﻋﻠﻰ ﻋﻜﺲ‬
‫ﻣﺜﺎﻟﻨﺎﺍﻟﺴﺎﺑﻖ ﻹﻳﺠﺎﺩ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﻠﺤﻠﻘﺔ ‪ ،‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻫﺬﺍ ﺍﻟﺸﺮﻁ ﻟﻴﺲ ﺃﺿﻌﻒ ﺷﺮﻁ‬
‫ﻣﺴﺒﻖ‪.‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ }ﻕ< ‪.{1‬ﺍﻟﺒﻴﺎﻥ ﺍﻟﻤﻨﻄﻘﻲ‬

‫}ﻕ< ‪{1‬ﺑﻴﻨﻤﺎﻕ< ‪1‬ﻳﻔﻌﻞﻕ = ﻕ ‪2 /‬ﻧﻬﺎﻳﺔ}ﻕ = ‪{1‬‬

‫ﻳﻤﻜﻦﺇﺛﺒﺎﺗﻪ ﺑﺴﻬﻮﻟﺔ ‪ ،‬ﻭﻫﺬﺍ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺃﻭﺳﻊ ﺑﻜﺜﻴﺮ ﻣﻦ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺤﺴﻮﺏ ﻣﺴﺒﻘﺎً‪ .‬ﻳﺘﻢ‬
‫ﺍﺳﺘﻴﻔﺎءﺍﻟﺤﻠﻘﺔ ﻭﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻷﻱ ﻗﻴﻤﺔ ﻣﻮﺟﺒﺔ ﻟـﺱ‪،‬ﻟﻴﺲ ﻓﻘﻂ ﻗﻮﻯ ‪ ، 2‬ﻛﻤﺎ ﺗﺸﻴﺮ‬
‫ﺍﻟﻌﻤﻠﻴﺔ‪.‬ﺑﺴﺒﺐ ﻗﺎﻋﺪﺓ ﺍﻟﻌﻮﺍﻗﺐ ‪ ،‬ﻓﺈﻥ ﺍﺳﺘﺨﺪﺍﻡ ﺷﺮﻁ ﻣﺴﺒﻖ ﺃﻗﻮﻯ ﻣﻦ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ‬
‫ﻻﻳﺒﻄﻞ ﺍﻟﺪﻟﻴﻞ‪.‬‬

‫ﺍﻟﻌﺜﻮﺭﻋﻠﻰ ﺛﻮﺍﺑﺖ ﺍﻟﺤﻠﻘﺔ ﻟﻴﺲ ﺑﺎﻷﻣﺮ ﺍﻟﺴﻬﻞ ﺩﺍﺉﻤﺎً‪ .‬ﻣﻦ ﺍﻟﻤﻔﻴﺪ ﻓﻬﻢ ﻃﺒﻴﻌﺔ ﻫﺬﻩ‬
‫ﺍﻟﺜﻮﺍﺑﺖ‪.‬ﺃﻭﻻ ً‪ ،‬ﺍﻟﺤﻠﻘﺔ ﺍﻟﺜﺎﺑﺘﺔ ﻫﻲ ﻧﺴﺨﺔ ﺿﻌﻴﻔﺔ ﻣﻦ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﻟﻠﺤﻠﻘﺔ ﻭﺃﻳﻀﺎً ﺷﺮﻁ‬
‫ﻣﺴﺒﻖﻟﻠﺤﻠﻘﺔ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﺃﻛﻮﻥ ﺿﻌﻴﻔﺎً ﺑﻤﺎ ﻳﻜﻔﻲ ﻷﻛﻮﻥ ﺭﺍﺿﻴﺎً ﻗﺒﻞ ﺑﺪء ﺗﻨﻔﻴﺬ ﺍﻟﺤﻠﻘﺔ ‪،‬‬
‫ﻭﻟﻜﻦﻋﻨﺪ ﺩﻣﺠﻬﺎ ﻣﻊ ﺣﺎﻟﺔ ﺧﺮﻭﺝ ﺍﻟﺤﻠﻘﺔ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﺗﻜﻮﻥ ﻗﻮﻳﺔ ﺑﻤﺎ ﻳﻜﻔﻲ ﻟﻔﺮﺽ ﺣﻘﻴﻘﺔ ﺍﻟﺤﺎﻟﺔ‬
‫ﺍﻟﻼﺣﻘﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪158‬‬

‫ﻧﻈﺮﺍًﻟﺼﻌﻮﺑﺔ ﺇﺛﺒﺎﺕ ﺇﻧﻬﺎء ﺍﻟﺤﻠﻘﺔ ‪ ،‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻢ ﺗﺠﺎﻫﻞ ﻫﺬﺍ ﺍﻟﻤﻄﻠﺐ‪ .‬ﺇﺫﺍ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ‬
‫ﺇﻇﻬﺎﺭﺇﻧﻬﺎء ﺍﻟﺤﻠﻘﺔ ‪ ،‬ﻓﺴﻴﺘﻢ ﺍﺳﺘﺪﻋﺎء ﺍﻟﻮﺻﻒ ﺍﻟﺒﺪﻳﻬﻲ ﻟﻠﺤﻠﻘﺔﺻﺤﺔ ﺗﺎﻣﺔ‪ .‬ﺇﺫﺍ ﻛﺎﻥ ﻣﻦ‬
‫ﺍﻟﻤﻤﻜﻦﺍﺳﺘﻴﻔﺎء ﺍﻟﺸﺮﻭﻁ ﺍﻷﺧﺮﻯ ﻭﻟﻜﻦ ﺍﻹﻧﻬﺎء ﻏﻴﺮ ﻣﻀﻤﻮﻥ ‪ ،‬ﻳﺘﻢ ﺍﺳﺘﺪﻋﺎﺅﻩﺻﻮﺍﺏ ﺟﺰﺉﻲ‪.‬‬

‫ﻓﻲﺍﻟﺤﻠﻘﺎﺕ ﺍﻷﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ‪ ،‬ﻳﺘﻄﻠﺐ ﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ ﺣﻠﻘﺔ ﺛﺎﺑﺘﺔ ﺛﺎﺑﺘﺔ ‪ ،‬ﺣﺘﻰ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺼﺤﺔ‬
‫ﺍﻟﺠﺰﺉﻴﺔ ‪،‬ﻗﺪﺭﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺍﻟﺒﺮﺍﻋﺔ‪ .‬ﻷﻥ ﺣﺴﺎﺏ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻟـﺑﻴﻨﻤﺎﺗﻌﺘﻤﺪ ﺍﻟﺤﻠﻘﺔ ﻋﻠﻰ ﺇﻳﺠﺎﺩ‬
‫ﺣﻠﻘﺔﺛﺎﺑﺘﺔ ﺗﺜﺒﺖ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺎﺳﺘﺨﺪﺍﻡﺑﻴﻨﻤﺎﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﺍﻟﺤﻠﻘﺎﺕ ﺍﻟﺘﻲ ﺗﺴﺘﺨﺪﻡ ﺩﻻﻻﺕ‬
‫ﺑﺪﻳﻬﻴﺔﺻﻌﺒﺔ‪.‬‬

‫‪3.5.3.7‬ﺑﺮﻫﺎﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﻳﻮﻓﺮﻫﺬﺍ ﺍﻟﻘﺴﻢ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺔ ﺑﺮﻧﺎﻣﺠﻴﻦ ﺑﺴﻴﻄﻴﻦ‪ .‬ﺍﻟﻤﺜﺎﻝ ﺍﻷﻭﻝ ﻹﺛﺒﺎﺕ‬
‫ﺍﻟﺼﻮﺍﺏﻫﻮ ﺑﺮﻧﺎﻣﺞ ﻗﺼﻴﺮ ﺟﺪﺍً ‪ ،‬ﻳﺘﻜﻮﻥ ﻣﻦ ﺳﻠﺴﻠﺔ ﻣﻦ ﺛﻼﺙ ﻋﺒﺎﺭﺍﺕ ﻣﻬﻤﺔ ﺗﺘﺒﺎﺩﻝ ﻗﻴﻢ‬
‫ﻣﺘﻐﻴﺮﻳﻦ‪.‬‬

‫؛‪}x = A AND y = B{ t = x‬‬

‫ﺱ= ﺹ ؛‬
‫ﺫ= ﺭ ؛‬
‫{‪}x = B AND y = A‬‬

‫ﻧﻈﺮﺍًﻷﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻳﺘﻜﻮﻥ ﺑﺎﻟﻜﺎﻣﻞ ﻣﻦ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻓﻲ ﺗﺴﻠﺴﻞ ‪ ،‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ‬


‫ﺑﺪﻳﻬﻴﺔﺍﻟﺘﺨﺼﻴﺺ ﻭﻗﺎﻋﺪﺓ ﺍﻻﺳﺘﺪﻻﻝ ﻟﻠﺘﺴﻠﺴﻼﺕ ﻹﺛﺒﺎﺕ ﺻﺤﺘﻬﺎ‪ .‬ﺗﺘﻤﺜﻞ ﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻓﻲ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺑﺪﻳﻬﻴﺔ ﺍﻟﻤﻬﻤﺔ ﻓﻲ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻷﺧﻴﺮﺓ ﻭﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﻟﻠﺒﺮﻧﺎﻣﺞ ﺑﺄﻛﻤﻠﻪ‪ .‬ﻫﺬﺍ ﻳﻨﺘﺞ ﺍﻟﺸﺮﻁ‬
‫ﺍﻟﻤﺴﺒﻖ‬

‫{‪}x = B AND t = A‬‬

‫ﺑﻌﺪﺫﻟﻚ ‪ ،‬ﻧﺴﺘﺨﺪﻡ ﻫﺬﺍ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺍﻟﺠﺪﻳﺪ ﻛﺸﺮﻁ ﻻﺣﻖ ﻟﻠﺒﻴﺎﻥ ﺍﻷﻭﺳﻂ ﻭﻧﺤﺴﺐ‬
‫ﺷﺮﻃﻪﺍﻟﻤﺴﺒﻖ ‪ ،‬ﻭﻫﻮ‬

‫{‪}y = B AND t = A‬‬

‫ﺑﻌﺪﺫﻟﻚ ‪ ،‬ﻧﺴﺘﺨﺪﻡ ﻫﺬﺍ ﺍﻟﺘﺄﻛﻴﺪ ﺍﻟﺠﺪﻳﺪ ﺑﺎﻋﺘﺒﺎﺭﻩ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﻓﻲ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻷﻭﻟﻰ ﻭﻧﻄﺒﻖ‬
‫ﺑﺪﻳﻬﻴﺔﺍﻹﺳﻨﺎﺩ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﻨﺘﺞ ﻋﻨﻬﺎ‬

‫}ﺹ = ﺏ ﻭ ﺱ = ﺃ{‬

‫ﻭﻫﻮﻧﻔﺲ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ‪ ،‬ﺑﺎﺳﺘﺜﻨﺎء ﺗﺮﺗﻴﺐ ﺍﻟﻤﻌﺎﻣﻼﺕ ﻓﻲﻭﺍﻟﻤﺸﻐﻞ ﺃﻭ ﺍﻟﻌﺎﻣﻞ‪.‬‬


‫ﻷﻥﻭﻫﻮ ﻋﺎﻣﻞ ﻣﺘﻤﺎﺛﻞ ‪ ،‬ﻟﺪﻳﻨﺎ ﺩﻟﻴﻞ ﻛﺎﻣﻞ‪.‬‬

‫ﺍﻟﻤﺜﺎﻝﺍﻟﺘﺎﻟﻲ ﻫﻮ ﺩﻟﻴﻞ ﻋﻠﻰ ﺻﺤﺔ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻜﻮﺩ ﺍﻟﻜﺎﺫﺏ ﺍﻟﺬﻱ ﻳﺤﺴﺐ ﺩﺍﻟﺔ ﺍﻟﻌﻮﺍﻣﻞ‪.‬‬
‫‪159‬‬ ‫‪3.5‬ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ :‬ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‬

‫}ﻥ< = ‪{0‬‬
‫ﺍﻟﻌﺪ= ﻥ ؛‬
‫ﺣﻘﻴﻘﺔ= ‪ 1‬؛‬
‫ﺃﺛﻨﺎءﺍﻟﻌﺪ><‪ 0‬ﻓﻌﻞ‬
‫ﺣﻘﻴﻘﺔ= ﺣﻘﻴﻘﺔ * ﻋﺪﺩ ؛ ﺍﻟﻌﺪ =‬
‫ﺍﻟﻌﺪ‪ 1 -‬؛‬
‫ﻧﻬﺎﻳﺔ‬
‫}ﺣﻘﻴﻘﺔ = ﻥ!{‬

‫ﺍﻟﻄﺮﻳﻘﺔﺍﻟﻤﻮﺻﻮﻓﺔ ﺳﺎﺑﻘﺎً ﻹﻳﺠﺎﺩ ﺍﻟﺤﻠﻘﺔ ﺍﻟﺜﺎﺑﺘﺔ ﻻ ﺗﻌﻤﻞ ﻟﻠﺤﻠﻘﺔ ﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ‪ .‬ﻣﻄﻠﻮﺏ‬
‫ﺑﻌﺾﺍﻟﺒﺮﺍﻋﺔ ﻫﻨﺎ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﺴﺎﻋﺪ ﻣﻦ ﺧﻼﻝ ﺩﺭﺍﺳﺔ ﻣﻮﺟﺰﺓ ﻟﻠﻜﻮﺩ‪ .‬ﺍﻟﺤﻠﻘﺔ ﺗﺤﺴﺐ ﺩﺍﻟﺔ‬
‫ﺍﻟﻤﻀﺮﻭﺏﺑﺘﺮﺗﻴﺐ ﺍﻟﻀﺮﺏ ﺍﻷﺧﻴﺮ ﺃﻭﻻ ً؛ ﺇﻧﻪ‪) ،‬ﻥ ‪ * (1 -‬ﻥﻳﺘﻢ ﺃﻭﻻ ً‪ ،‬ﻋﻠﻰ ﺍﻓﺘﺮﺍﺽﻥ‬

‫ﺃﻛﺒﺮﻣﻦ‪.1‬ﻟﺬﻟﻚ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﺟﺰء ﻣﻦ ﺍﻟﺜﺎﺑﺖ‬

‫ﺣﻘﻴﻘﺔ= )ﻋﺪﺩ ‪) * (1 +‬ﻋﺪﺩ ‪) * ... * (2 +‬ﻥ ‪ * (1 -‬ﻥ‬

‫ﻭﻟﻜﻦﻳﺠﺐ ﻋﻠﻴﻨﺎ ﺃﻳﻀﺎً ﺃﻥ ﻧﻀﻤﻦ ﺫﻟﻚﻋﺪﺩﺩﺍﺉﻤﺎً ﻏﻴﺮ ﺳﻠﺒﻲ ‪ ،‬ﻭﻫﻮ ﻣﺎ ﻳﻤﻜﻨﻨﺎ ﺍﻟﻘﻴﺎﻡ ﺑﻪ ﺑﺈﺿﺎﻓﺔ‬
‫ﺫﻟﻚﺇﻟﻰ ﺍﻟﺘﺄﻛﻴﺪ ﺃﻋﻼﻩ ‪ ،‬ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ‬

‫ﺃﻧﺎ= )ﺣﻘﻴﻘﺔ = )ﻋﺪﺩ ‪ * ... * (1 +‬ﻥ( ﻭ )ﻋﺪﺩ< = ‪(0‬‬

‫ﺑﻌﺪﺫﻟﻚ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻧﺆﻛﺪ ﺃﻥ ﻫﺬﺍ ﻳﻠﺒﻲ ﻣﺘﻄﻠﺒﺎﺕ ﺍﻟﺜﻮﺍﺑﺖ‪ .‬ﻣﺮﺓ ﺃﺧﺮﻯ ‪ ،‬ﻧﺴﻤﺢ ﻟﻲ ﺃﻳﻀﺎً‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‪ ، P‬ﻟﺬﺍ ﻓﺈﻥ ‪ P‬ﺗﻌﻨﻲ ﺑﻮﺿﻮﺡ ‪ .I‬ﺍﻟﺴﺆﺍﻝ ﺍﻟﺘﺎﻟﻲ ﻫﻮ‬

‫{‪}I and B{ S }I‬‬

‫ﺃﻧﺎﻭﺏ ﻫﻮ‬

‫))ﺣﻘﻴﻘﺔ = )ﻋﺪﺩ ‪ * ... * (1 +‬ﻥ( ‪) AND‬ﻋﺪﺩ< = ‪AND ((0‬‬


‫)ﻋﺪﺩ >< ‪(0‬‬

‫ﻣﻤﺎﻳﻘﻠﻞ ﺇﻟﻰ‬

‫)ﺣﻘﻴﻘﺔ = )ﻋﺪﺩ ‪ * ... * (1 +‬ﻥ( ﻭ )ﻋﺪ< ‪(0‬‬

‫ﻓﻲﺣﺎﻟﺘﻨﺎ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻧﺤﺴﺐ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻟﺠﺴﻢ ﺍﻟﺤﻠﻘﺔ ‪ ،‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺜﺎﺑﺖ ﻟﻠﺸﺮﻁ‬
‫ﺍﻟﻼﺣﻖ‪.‬ﻝ‬

‫}ﺹ{ﻋﺪﺩ = ﻋﺪﺩ ‪{I} 1 -‬‬

‫ﻧﺤﺴﺐ‪ P‬ﻟﻴﻜﻮﻥ‬

‫})ﺣﻘﻴﻘﺔ = ﻋﺪﺩ * )ﻋﺪﺩ ‪ * ... * (1 +‬ﻥ( ﻭ‬


‫)ﺍﻟﻌﺪﺩ< = ‪{(1‬‬
‫ﻭﺻﻒﺍﻟﻨﺤﻮ ﻭﺍﻟﻤﻌﺎﻧﻲ‬ ‫ﺍﻟﻔﺼﻞ‪3‬‬ ‫‪160‬‬

‫ﺑﺎﺳﺘﺨﺪﺍﻡﻫﺬﺍ ﻛﺸﺮﻁ ﻻﺣﻖ ﻟﻠﻤﻬﻤﺔ ﺍﻷﻭﻟﻰ ﻓﻲ ﺟﺴﻢ ﺍﻟﺤﻠﻘﺔ ‪،‬‬


‫}ﺹ{ﺣﻘﻴﻘﺔ = ﺣﻘﻴﻘﺔ * ﻋﺪﺩ })ﺣﻘﻴﻘﺔ = ﻋﺪﺩ * )ﻋﺪﺩ ‪(1 +‬‬
‫*‪ * . . .‬ﻥ( ﻭ )ﻋﺪﺩ< = ‪{(1‬‬

‫ﻓﻲﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ‪ P ،‬ﻫﻲ‬

‫})ﺣﻘﻴﻘﺔ = )ﻋﺪﺩ ‪ * ... * (1 +‬ﻥ( ‪) AND‬ﻋﺪﺩ< = ‪{(1‬‬


‫ﻣﻦﺍﻟﻮﺍﺿﺢ ﺃﻥ ‪ I‬ﻭ ‪ B‬ﻳﻌﻨﻴﺎﻥ ﻫﺬﺍ ‪ ، P‬ﻟﺬﻟﻚ ﻭﻓﻘﺎً ﻟﻘﺎﻋﺪﺓ ﺍﻟﻨﺘﻴﺠﺔ ‪،‬‬
‫}ﺃﻧﺎﻭﺏ{ ﺹ }ﺃﻧﺎ{‬

‫ﺻﺤﻴﺢ‪.‬ﺃﺧﻴﺮﺍً ‪ ،‬ﺍﻻﺧﺘﺒﺎﺭ ﺍﻷﺧﻴﺮ ﻟـ ‪ I‬ﻫﻮ‬


‫ﺃﻧﺎﻭ ﻻﺏ( =< ﺱ‬
‫ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ﻟﺪﻳﻨﺎ ‪ ،‬ﻫﺬﺍ ﻫﻮ‬

‫))ﺣﻘﻴﻘﺔ = )ﻋﺪﺩ ‪ * ... * (1 +‬ﻥ( ‪) AND‬ﻋﺪﺩ< = ‪AND ((0‬‬


‫)ﺍﻟﻌﺪ = ‪ <= ((0‬ﺣﻘﻴﻘﺔ = ﻥ!‬

‫ﻣﻦﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻫﺬﺍ ﺻﺤﻴﺢ ‪ ،‬ﺇﻟﻰ ﻣﺘﻰﺍﻟﻌﺪ = ‪، 0‬ﺍﻟﺠﺰء ﺍﻷﻭﻝ ﻫﻮ ﺑﺎﻟﻀﺒﻂ ﺗﻌﺮﻳﻒ ﻋﺎﻣﻠﻲ‪ .‬ﻟﺬﺍ ‪،‬‬
‫ﻓﺈﻥﺍﺧﺘﻴﺎﺭﻧﺎ ﻟـ ‪ I‬ﻳﻠﺒﻲ ﻣﺘﻄﻠﺒﺎﺕ ﺣﻠﻘﺔ ﺛﺎﺑﺘﺔ‪ .‬ﺍﻵﻥ ﻳﻤﻜﻨﻨﺎ ﺍﺳﺘﺨﺪﺍﻡ ‪) P‬ﻭﻫﻮ ﻧﻔﺲ ‪ (I‬ﻣﻦﺑﻴﻨﻤﺎ‬
‫ﻛﺸﺮﻁﻻﺣﻖ ﻟﻠﻤﻬﻤﺔ ﺍﻟﺜﺎﻧﻴﺔ ﻟﻠﺒﺮﻧﺎﻣﺞ‬

‫‪ AND‬ﺣﻘﻴﻘﺔ = ‪)} 1‬ﺣﻘﻴﻘﺔ = )ﻋﺪﺩ ‪ * ... * (1 +‬ﻥ( {‪}P‬‬


‫)ﺍﻟﻌﺪﺩ< = ‪{(0‬‬

‫ﺍﻟﺬﻱﻳﻨﺘﺞ ﻋﻦ ‪P‬‬

‫)‪) = 1‬ﻋﺪﺩ ‪ * ... * (1 +‬ﻥ( ‪) AND‬ﻋﺪﺩ< = ‪((0‬‬

‫ﺍﺳﺘﺨﺪﺍﻡﻫﺬﺍ ﻛﺸﺮﻁ ﻻﺣﻖ ﻟﻠﻤﻬﻤﺔ ﺍﻷﻭﻟﻰ ﻓﻲ ﺍﻟﻜﻮﺩ‬

‫‪}P{ count = n })1 = )count + 1( * ... * n( AND‬‬


‫)ﺍﻟﻌﺪﺩ< = ‪{((0‬‬

‫ﺗﻨﺘﺞﻝ ‪P‬‬

‫})ﻥ ‪ * ... * (1 +‬ﻥ = ‪) AND (1‬ﻥ< = ‪{(0‬‬

‫ﺍﻟﻤﻌﺎﻣﻞﺍﻷﻳﺴﺮ ﻣﻦﻭﻋﺎﻣﻞ ﺍﻟﺘﺸﻐﻴﻞ ﺻﺤﻴﺢ )ﻷﻥ‪(1 = 1‬ﻭﺍﻟﻤﻌﺎﻣﻞ ﺍﻟﺼﺤﻴﺢ ﻫﻮ ﺑﺎﻟﻀﺒﻂ ﺍﻟﺸﺮﻁ‬


‫ﺍﻟﻤﺴﺒﻖﻟﻤﻘﻄﻊ ﺍﻟﻜﻮﺩ ﺑﺄﻛﻤﻠﻪ ‪} ،‬ﻥ< = ‪ .{0‬ﻟﺬﻟﻚ ‪ ،‬ﻓﻘﺪ ﺛﺒﺖ ﺃﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺻﺤﻴﺢ‪.‬‬

‫‪3.5.3.8‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ‪ ،‬ﻟﺘﺤﺪﻳﺪ ﺩﻻﻻﺕ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻛﺎﻣﻠﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﺒﺪﻳﻬﻴﺔ ‪ ،‬ﻳﺠﺐ ﺃﻥ‬
‫ﺗﻜﻮﻥﻫﻨﺎﻙ ﺑﺪﻳﻬﻴﺔ ﺃﻭ ﻗﺎﻋﺪﺓ ﺍﺳﺘﻨﺘﺎﺝ ﻟﻜﻞ ﻧﻮﻉ ﺑﻴﺎﻥ ﻓﻲ ﺍﻟﻠﻐﺔ‪ .‬ﺗﺤﺪﻳﺪ ﺍﻟﺒﺪﻳﻬﻴﺎﺕ ﺃﻭ ﻗﻮﺍﻋﺪ‬
‫ﺍﻻﺳﺘﺪﻻﻝﻝ‬
‫‪161‬‬ ‫ﻣﻼﺣﻈﺎﺕﺑﺒﻠﻴﻮﻏﺮﺍﻓﻴﺔ‬

‫ﺃﺛﺒﺘﺖﺑﻌﺾ ﻋﺒﺎﺭﺍﺕ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺃﻧﻬﺎ ﻣﻬﻤﺔ ﺻﻌﺒﺔ‪ .‬ﻳﺘﻤﺜﻞ ﺃﺣﺪ ﺍﻟﺤﻠﻮﻝ ﺍﻟﻮﺍﺿﺤﺔ ﻟﻬﺬﻩ‬
‫ﺍﻟﻤﺸﻜﻠﺔﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻣﻊ ﻭﺿﻊ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﺒﺪﻳﻬﻴﺔ ﻓﻲ ﺍﻻﻋﺘﺒﺎﺭ ‪ ،‬ﺑﺤﻴﺚ ﻳﺘﻢ ﺗﻀﻤﻴﻦ‬
‫ﺍﻟﻌﺒﺎﺭﺍﺕﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺪﻳﻬﻴﺎﺕ ﺃﻭ ﻗﻮﺍﻋﺪ ﺍﻻﺳﺘﺪﻻﻝ ﻣﻦ ﺃﺟﻠﻬﺎ‪ .‬ﻟﺴﻮء ﺍﻟﺤﻆ ‪ ،‬ﻓﺈﻥ ﻣﺜﻞ‬
‫ﻫﺬﻩﺍﻟﻠﻐﺔ ﺳﺘﺘﺠﺎﻫﻞ ﺑﺎﻟﻀﺮﻭﺭﺓ ﺑﻌﺾ ﺍﻷﺟﺰﺍء ﺍﻟﻤﻔﻴﺪﺓ ﻭﺍﻟﻘﻮﻳﺔ‪.‬‬

‫ﺗﻌﺪﺩﻻﻻﺕ ﺃﻛﺴﻴﻮﻣﺎﺗﻴﻚ ﺃﺩﺍﺓ ﻗﻮﻳﺔ ﻟﻠﺒﺤﺚ ﻓﻲ ﺇﺛﺒﺎﺗﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ‪ ،‬ﻭﺗﻮﻓﺮ ﺇﻃﺎﺭﺍً‬
‫ﻣﻤﺘﺎﺯﺍًﻳﻤﻜﻦ ﻣﻦ ﺧﻼﻟﻪ ﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﺳﻮﺍء ﺃﺛﻨﺎء ﺑﻨﺎﺉﻬﺎ ﺃﻭ ﻻﺣﻘﺎً‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ‬
‫ﻓﺎﺉﺪﺗﻬﺎﻓﻲ ﻭﺻﻒ ﻣﻌﻨﻰ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻟﻤﺴﺘﺨﺪﻣﻲ ﺍﻟﻠﻐﺔ ﻭﻛﺘﺎﺏ ﺍﻟﻤﺘﺮﺟﻤﻴﻦ ﻣﺤﺪﻭﺩﺓ‬
‫ﻟﻠﻐﺎﻳﺔ‪.‬‬

‫ﻣﻠﺨﺺ‬

‫ﻳﻌﺪﻧﻤﻮﺫﺝ ‪ Backus-Naur‬ﻭﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺨﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ ﻟﻐﺎﺕ ﻣﻌﺪﻧﻴﺔ ﻣﻜﺎﻓﺉﺔ‬


‫ﻣﻨﺎﺳﺒﺔﺗﻤﺎﻣﺎً ﻟﻤﻬﻤﺔ ﻭﺻﻒ ﺑﻨﺎء ﺟﻤﻠﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻓﻬﻲ ﻟﻴﺴﺖ ﻓﻘﻂ ﺃﺩﻭﺍﺕ ﻭﺻﻔﻴﺔ‬
‫ﻣﻮﺟﺰﺓ ‪،‬ﻭﻟﻜﻦ ﺃﻳﻀﺎً ﺃﺷﺠﺎﺭ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﺮﺗﺒﻂ ﺑﺄﻓﻌﺎﻟﻬﺎ ﺍﻟﺘﻮﻟﻴﺪﻳﺔ ﺗﻌﻄﻲ ﺩﻟﻴﻼً ﺑﻴﺎﻧﻴﺎً‬
‫ﻋﻠﻰﺍﻟﻬﻴﺎﻛﻞ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻷﺳﺎﺳﻴﺔ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻓﻬﻲ ﻣﺮﺗﺒﻄﺔ ﺑﺸﻜﻞ ﻃﺒﻴﻌﻲ ﺑﺄﺟﻬﺰﺓ ﺍﻟﺘﻌﺮﻑ‬
‫ﻋﻠﻰﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﻮﻟﺪﻫﺎ ‪ ،‬ﻣﻤﺎ ﻳﺆﺩﻱ ﺇﻟﻰ ﺑﻨﺎء ﺳﻬﻞ ﻧﺴﺒﻴﺎً ﻟﻤﺤﻠﻼﺕ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻟﻤﺠﻤﻌﻲ ﻫﺬﻩ‬
‫ﺍﻟﻠﻐﺎﺕ‪.‬‬

‫ﻗﻮﺍﻋﺪﺍﻟﺴﻤﺔ ﻫﻲ ﺻﻴﻐﺔ ﻭﺻﻔﻴﺔ ﻳﻤﻜﻦ ﺃﻥ ﺗﺼﻒ ﻛﻼ ًﻣﻦ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻭﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ‬
‫ﻟﻠﻐﺔ‪.‬ﻗﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ ﺍﻟﻨﺤﻮﻳﺔ ﻫﻲ ﺍﻣﺘﺪﺍﺩﺍﺕ ﻟﻠﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺨﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ‪ .‬ﺗﺘﻜﻮﻥ ﻗﻮﺍﻋﺪ‬
‫ﺍﻟﺴﻤﺔﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻭﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺴﻤﺎﺕ ﻭﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻭﻇﺎﺉﻒ ﺣﺴﺎﺏ ﺍﻟﺴﻤﺎﺕ‬
‫ﻭﻣﺠﻤﻮﻋﺔﻣﻦ ﺍﻟﻤﺴﻨﺪﺍﺕ ﺍﻟﺘﻲ ﺗﺼﻒ ﻣﻌﺎً ﻗﻮﺍﻋﺪ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ‪.‬‬

‫ﻳﻘﺪﻡﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻣﻘﺪﻣﺔ ﻣﻮﺟﺰﺓ ﻟﺜﻼﺙ ﻃﺮﻕ ﻟﻠﻮﺻﻒ ﺍﻟﺪﻻﻟﻲ‪ :‬ﺍﻟﺘﺸﻐﻴﻠﻲ ‪ ،‬ﻭﺍﻟﺪﻻﻟﺔ ‪،‬‬
‫ﻭﺍﻟﺒﺪﻳﻬﻴﺔ‪.‬ﺩﻻﻻﺕ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻫﻲ ﻃﺮﻳﻘﺔ ﻟﻮﺻﻒ ﻣﻌﻨﻰ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ ﻣﻦ ﺣﻴﺚ ﺗﺄﺛﻴﺮﻫﺎ ﻋﻠﻰ‬
‫ﺁﻟﺔﻣﺜﺎﻟﻴﺔ‪ .‬ﻓﻲ ﺩﻻﻻﺕ ﺍﻟﺪﻻﻟﺔ ‪ ،‬ﺗﺴُﺘﺨﺪﻡ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﻟﺘﻤﺜﻴﻞ ﻣﻌﺎﻧﻲ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ‪.‬‬
‫ﻳﺘﻢﺗﺤﻮﻳﻞ ﻛﻴﺎﻧﺎﺕ ﺍﻟﻠﻐﺔ ﺇﻟﻰ ﻫﺬﻩ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﺫﺍﺕ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﻌﻮﺩﻳﺔ‪ .‬ﺗﻢ ﺍﺑﺘﻜﺎﺭ‬
‫ﺩﻻﻻﺕﺃﻛﺴﻴﻮﻣﺎﺗﻴﻚ ‪ ،‬ﺍﻟﺘﻲ ﺗﻘﻮﻡ ﻋﻠﻰ ﺍﻟﻤﻨﻄﻖ ﺍﻟﺼﻮﺭﻱ ‪ ،‬ﻛﺄﺩﺍﺓ ﻹﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ‪.‬‬

‫ﺣﻮﺍﺷﻲﺑﺒﻠﻴﻮﻏﺮﺍﻓﻴﺔ‬

‫ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺨﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ ﻭ ‪ BNF‬ﺑﺪﻗﺔ ﻓﻲ‬
‫‪ Cleaveland‬ﻭ (‪.Uzgalis )1976‬‬
‫ﺑﺪﺃﺍﻟﺒﺤﺚ ﻓﻲ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ ﺑﻮﺍﺳﻄﺔ (‪ Floyd )1967‬ﻭﻃﻮﺭﻩ (‪ .Hoare )1969‬ﺗﻢ‬
‫ﻭﺻﻒﺩﻻﻻﺕ ﺟﺰء ﻛﺒﻴﺮ ﻣﻦ ﺑﺎﺳﻜﺎﻝ ﺑﻮﺍﺳﻄﺔ (‪ Hoare and Wirth )1973‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ‬
‫ﺍﻟﻄﺮﻳﻘﺔ‪.‬ﺍﻷﺟﺰﺍء ﺍﻟﺘﻲ ﻟﻢ ﻳﻜﻤﻠﻮﻫﺎ ﺗﻀﻤﻨﺖ ﺁﺛﺎﺭﺍً ﺟﺎﻧﺒﻴﺔ ﻭﻇﻴﻔﻴﺔ ﻭﺑﻴﺎﻧﺎﺕ ﺍﻻﻧﺘﻘﺎﻝ‪ .‬ﺗﻢ ﺍﻟﻌﺜﻮﺭ‬
‫ﻋﻠﻰﻫﺬﻩ ﻟﺘﻜﻮﻥ ﺍﻷﻛﺜﺮ ﺻﻌﻮﺑﺔ ﻓﻲ ﺍﻟﻮﺻﻒ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪162‬‬

‫ﺗﻢﻭﺻﻒ ﺗﻘﻨﻴﺔ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻤﺴﺒﻘﺔ ﻭﺍﻟﺸﺮﻭﻁ ﺍﻟﻼﺣﻘﺔ ﺃﺛﻨﺎء ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﻣﻦ‬
‫ﻗﺒﻞ (‪ Dijkstra )1976‬ﻭﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﺃﻳﻀﺎً ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ (‪.Gries )1981‬‬

‫ﻳﻤﻜﻦﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ ﻣﻘﺪﻣﺎﺕ ﺟﻴﺪﺓ ﻟﻠﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻓﻲ (‪ Gordon )1979‬ﻭ (‪Stoy )1977‬‬
‫‪.‬ﻳﻤﻜﻦ ﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ ﻣﻘﺪﻣﺎﺕ ﻟﺠﻤﻴﻊ ﻃﺮﻕ ﻭﺻﻒ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﻫﺬﺍ‬
‫ﺍﻟﻔﺼﻞﻓﻲ (‪ .Marcotty et al. )1976‬ﻣﺮﺟﻊ ﺟﻴﺪ ﺁﺧﺮ ﻟﻠﻜﺜﻴﺮ ﻣﻦ ﻣﻮﺍﺩ ﺍﻟﻔﺼﻞ ﻫﻮ ﺑﺎﻏﺎﻥ )‬
‫‪ .(1981‬ﺷﻜﻞ ﺍﻟﺪﻭﺍﻝ ﺍﻟﺪﻻﻟﻴﺔ ﺍﻟﺪﻻﻟﻴﺔ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻣﺸﺎﺑﻪ ﻟﺘﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﻣﺎﻳﺮ )‪(1990‬‬
‫‪.‬‬

‫ﺭﺍﺟﻊﺍﻷﺳﺉﻠﺔ‬

‫‪.1‬ﺗﻌﺮﻳﻒﺑﻨﺎء ﺍﻟﺠﻤﻠﺔﻭﺩﻻﻻﺕ‪.‬‬
‫‪.2‬ﻟﻤﻦ ﺗﻮﺻﻴﻒ ﺍﻟﻠﻐﺔ؟‬
‫‪.3‬ﻭﺻﻒ ﻋﻤﻠﻴﺔ ﻣﻨﺸﺊ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺎﻡ‪.‬‬
‫‪.4‬ﻭﺻﻒ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻟﻠﻐﺔ ﺍﻟﻌﺎﻣﺔ‪.‬‬
‫‪.5‬ﻣﺎ ﻫﻮ ﺍﻟﻔﺮﻕ ﺑﻴﻦ ﺍﻟﺠﻤﻠﺔ ﻭﺍﻟﺼﻴﻐﺔ ﺍﻟﺠﺰﺉﻴﺔ؟‬
‫‪.6‬ﺗﺤﺪﻳﺪ ﻗﺎﻋﺪﺓ ﺍﻟﻨﺤﻮ ﺍﻟﻌﻮﺩﻱ ﺍﻷﻳﺴﺮ‪.‬‬
‫‪.7‬ﻣﺎ ﻫﻲ ﺍﻻﻣﺘﺪﺍﺩﺍﺕ ﺍﻟﺜﻼﺛﺔ ﺍﻟﻤﺸﺘﺮﻛﺔ ﻟﻤﻌﻈﻢ ‪EBNFs‬؟‬
‫‪.8‬ﻳﻤﻴﺰ ﺑﻴﻦ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺴﺎﻛﻨﺔ ﻭﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ‪.‬‬
‫‪.9‬ﻣﺎ ﺍﻟﻐﺮﺽ ﺍﻟﺬﻱ ﻳﺨﺪﻣﻪ ﺍﻟﻤﺴﻨﺪ ﻓﻲ ﻗﻮﺍﻋﺪ ﺍﻟﻨﺤﻮ ﺍﻟﺼﻔﻴﺔ؟‬
‫‪.10‬ﻣﺎ ﻫﻮ ﺍﻟﻔﺮﻕ ﺑﻴﻦ ﺍﻟﺴﻤﺔ ﺍﻟﻤﺮﻛﺒﺔ ﻭﺍﻟﻤﻮﺭﻭﺛﺔ؟‬
‫‪.11‬ﻛﻴﻒ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺗﺮﺗﻴﺐ ﺗﻘﻴﻴﻢ ﺍﻟﺴﻤﺎﺕ ﻟﻸﺷﺠﺎﺭ ﻓﻲ ﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﻟﺨﺎﺻﻴﺔ ﻣﻌﻴﻨﺔ؟‬

‫‪.12‬ﻣﺎ ﻫﻮ ﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻷﺳﺎﺳﻲ ﻟﻠﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺴﻤﺔ؟‬


‫‪.13‬ﺷﺮﺡ ﺍﻻﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻤﻨﻬﺠﻴﺔ ﻭﺍﻟﺘﺮﻣﻴﺰ ﻟﻮﺻﻒ ﺩﻻﻻﺕ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪.14‬ﻟﻤﺎﺫﺍ ﻻ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺎﺕ ﺍﻵﻟﺔ ﻟﺘﻌﺮﻳﻒ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻓﻲ ﺩﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻞ؟‬

‫‪.15‬ﻭﺻﻒ ﻣﺴﺘﻮﻳﻴﻦ ﻣﻦ ﺍﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ‪.‬‬


‫‪.16‬ﻓﻲ ﺩﻻﻻﺕ ﺍﻟﺪﻻﻻﺕ ‪ ،‬ﻣﺎ ﻫﻲ ﺍﻟﻤﺠﺎﻻﺕ ﺍﻟﻨﺤﻮﻳﺔ ﻭﺍﻟﺪﻻﻻﺕ؟‬
‫‪.17‬ﻣﺎ ﺍﻟﺬﻱ ﻳﺘﻢ ﺗﺨﺰﻳﻨﻪ ﻓﻲ ﺣﺎﻟﺔ ﺑﺮﻧﺎﻣﺞ ﻟﺪﻻﻻﺕ ﺍﻷﻟﻔﺎﻅ؟‬
‫‪.18‬ﻣﺎ ﻫﻮ ﺍﻟﻨﻬﺞ ﺍﻟﺪﻻﻟﻲ ﺍﻷﻛﺜﺮ ﺷﻬﺮﺓ؟‬
‫‪.19‬ﻣﺎ ﺍﻟﺸﻴﺉﻴﻦ ﺍﻟﻠﺬﻳﻦ ﻳﺠﺐ ﺗﺤﺪﻳﺪﻫﻤﺎ ﻟﻜﻞ ﻛﻴﺎﻥ ﻟﻐﻮﻱ ﻣﻦ ﺃﺟﻞ ﺑﻨﺎء ﻭﺻﻒ ﺩﻻﻟﺔ ﻟﻠﻐﺔ؟‬

‫‪.20‬ﺃﻱ ﺟﺰء ﻣﻦ ﻗﺎﻋﺪﺓ ﺍﻻﺳﺘﺪﻻﻝ ﻫﻮ ﺍﻟﺴﺎﺑﻖ؟‬


‫‪.21‬ﻣﺎ ﻫﻲ ﻭﻇﻴﻔﺔ ﺍﻟﻤﺤﻮﻝ ﺍﻟﻤﺴﻨﺪ؟‬
‫‪.22‬ﻣﺎﺫﺍ ﻳﻌﻨﻲ ﺍﻟﺘﺼﺤﻴﺢ ﺍﻟﺠﺰﺉﻲ ﻟﺒﻨﺎء ﺣﻠﻘﺔ؟‬
‫‪.23‬ﻋﻠﻰ ﺃﻱ ﻓﺮﻉ ﻣﻦ ﻓﺮﻭﻉ ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ﺗﻘﻮﻡ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ؟‬
‫‪.24‬ﻋﻠﻰ ﺃﻱ ﻓﺮﻉ ﻣﻦ ﻓﺮﻭﻉ ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ﺗﺴﺘﻨﺪ ﺩﻻﻻﺕ ﺍﻷﻟﻔﺎﻅ؟‬
‫‪163‬‬ ‫ﺗﻢﺿﺒﻂ ﺍﻟﻤﺸﻜﻠﺔ‬

‫‪.25‬ﻣﺎ ﻫﻲ ﻣﺸﻜﻠﺔ ﺍﺳﺘﺨﺪﺍﻡ ﻣﺘﺮﺟﻢ ﻧﻘﻲ ﻟﻠﺒﺮﻣﺠﻴﺎﺕ ﻟﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻞ؟‬

‫‪.26‬ﺍﺷﺮﺡ ﻣﺎ ﺗﻌﻨﻴﻪ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻤﺴﺒﻘﺔ ﻭﺍﻟﺸﺮﻭﻁ ﺍﻟﻼﺣﻘﺔ ﻟﺒﻴﺎﻥ ﻣﻌﻴﻦ ﻓﻲ ﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ‪.‬‬

‫‪.27‬ﻭﺻﻒ ﻧﻬﺞ ﺍﺳﺘﺨﺪﺍﻡ ﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ ﻹﺛﺒﺎﺕ ﺻﺤﺔ ﺑﺮﻧﺎﻣﺞ ﻣﻌﻴﻦ‪.‬‬

‫‪.28‬ﻭﺻﻒ ﺍﻟﻤﻔﻬﻮﻡ ﺍﻷﺳﺎﺳﻲ ﻟﻠﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ‪.‬‬


‫‪.29‬ﻣﺎ ﻫﻲ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﺘﻲ ﺗﺨﺘﻠﻒ ﺑﻬﺎ ﺩﻻﻻﺕ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻭﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ؟‬

‫ﺗﻢﺿﺒﻂ ﺍﻟﻤﺸﻜﻠﺔ‬

‫‪.1‬ﺍﻟﻨﻤﻮﺫﺟﺎﻥ ﺍﻟﺮﻳﺎﺿﻴﺎﻥ ﻟﻮﺻﻒ ﺍﻟﻠﻐﺔ ﻫﻤﺎ ﺍﻟﺘﻮﻟﻴﺪ ﻭﺍﻻﻋﺘﺮﺍﻑ‪ .‬ﺻﻒ ﻛﻴﻒ ﻳﻤﻜﻦ ﻟﻜﻞ ﻣﻨﻬﺎ‬
‫ﺗﺤﺪﻳﺪﺑﻨﺎء ﺟﻤﻠﺔ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪.2‬ﺍﻛﺘﺐ ﺃﻭﺻﺎﻑ ‪ EBNF‬ﻟﻤﺎ ﻳﻠﻲ‪:‬‬


‫ﺃ‪.‬ﻋﺒﺎﺭﺓ ﺭﺃﺱ ﺗﻌﺮﻳﻒ ﻓﺉﺔ ‪Java‬‬
‫ﺏ‪.‬ﺑﻴﺎﻥ ﺍﺳﺘﺪﻋﺎء ﻃﺮﻳﻘﺔ ‪Java‬‬
‫ﺇﻓﺎﺩﺓ‬ ‫ﺝ‪.‬ﺗﻴﺎﺭ ﻣﺘﺮﺩﺩﻳﺤُﻮﻝّ‬
‫ﺗﻌﺮﻳﻒ‬ ‫ﺩ‪.‬ﺗﻴﺎﺭ ﻣﺘﺮﺩﺩﺍﺗﺤﺎﺩ‬
‫ﻩ‪.‬ﺝﻳﻄﻔﻮﺣﺮﻓﻴﺔ‬
‫‪.3‬ﺃﻋﺪ ﻛﺘﺎﺑﺔ ‪ BNF‬ﻟﻠﻤﺜﺎﻝ ‪ 3.4‬ﻹﻋﻄﺎء ‪ +‬ﺍﻷﺳﺒﻘﻴﺔ ﻋﻠﻰ * ﻭﺇﺟﺒﺎﺭ ‪ +‬ﻋﻠﻰ ﺃﻥ ﻳﻜﻮﻥ ﺭﺍﺑﻄﺎً‬
‫ﺻﺤﻴﺤﺎً‪.‬‬
‫‪.4‬ﺃﻋﺪ ﻛﺘﺎﺑﺔ ‪ BNF‬ﻓﻲ ﺍﻟﻤﺜﺎﻝ ‪ 3.4‬ﻹﺿﺎﻓﺔ ‪ ++‬ﻭ‪ -‬ﻋﺎﻣﻠﻴﻦ ﺃﺣﺎﺩﻳﻴﻦ ﻟﺠﺎﻓﺎ‪.‬‬

‫‪.5‬ﺍﻛﺘﺐ ﻭﺻﻒ ‪ BNF‬ﻟﻠﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻓﻲ ‪ ، Java‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﺜﻼﺛﺔ &&‬


‫ﻭ|| ﻭ! ﻭﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﻌﻼﺉﻘﻴﺔ‪.‬‬
‫‪.6‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻓﻲ ﺍﻟﻤﺜﺎﻝ ‪ ، 3.2‬ﺃﻇﻬﺮ ﺷﺠﺮﺓ ﺗﺤﻠﻴﻞ ﻭﺍﺷﺘﻘﺎﻕ ﺃﻗﺼﻰ‬
‫ﺍﻟﻴﺴﺎﺭﻟﻜﻞ ﻣﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫ﺃ‪.‬ﺃ = ﺃ * )ﺏ ‪) +‬ﺝ * ﺃ((‬
‫ﺏ‪.‬ﺏ = ﺝ * )ﺃ * ﺝ ‪ +‬ﺏ(‬
‫ﺝ‪.‬ﺃ = ﺃ * )ﺏ ‪) +‬ﺝ((‬
‫‪.7‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻓﻲ ﺍﻟﻤﺜﺎﻝ ‪ ، 3.4‬ﺍﻋﺮﺽ ﺷﺠﺮﺓ ﺗﺤﻠﻴﻞ ﻭﺍﺷﺘﻘﺎﻕ ﺃﻗﺼﻰ‬
‫ﺍﻟﻴﺴﺎﺭﻟﻜﻞ ﻣﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬
‫ﺃ‪.‬ﺃ = )ﺃ ‪ +‬ﺏ( * ﺝ‬
‫ﺏ‪.‬ﺃ = ﺏ ‪ +‬ﺝ ‪ +‬ﺃ‬
‫ﺝ‪.‬ﺃ = ﺃ * )ﺏ ‪ +‬ﺝ(‬
‫ﺩ‪.‬ﺃ = ﺏ * )ﺝ * )ﺃ ‪ +‬ﺏ((‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪164‬‬

‫‪.8‬ﺇﺛﺒﺎﺕ ﺃﻥ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺘﺎﻟﻴﺔ ﻏﺎﻣﻀﺔ‪> →<S> :‬ﺃ<‬

‫<‪> →>A‬ﺃ< ‪> +‬ﺃ< | >ﻣﻌﺮﻑ< >‬


‫ﻣﻌﺮﻑ<→ﺃ | ﺏ | ﺝ‬
‫‪.9‬ﻗﻢ ﺑﺘﻌﺪﻳﻞ ﻗﻮﺍﻋﺪ ﺍﻟﻨﺤﻮ ﻓﻲ ﺍﻟﻤﺜﺎﻝ ‪ 3.4‬ﻹﺿﺎﻓﺔ ﻋﺎﻣﻞ ﻧﺎﻗﺺ ﺃﺣﺎﺩﻱ ﻟﻪ ﺃﺳﺒﻘﻴﺔ ﺃﻋﻠﻰ ﻣﻦ‬
‫‪ +‬ﺃﻭ *‪.‬‬
‫‪.10‬ﺻﻒ ‪ ،‬ﺑﺎﻟﻠﻐﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ‪ ،‬ﺍﻟﻠﻐﺔ ﺍﻟﻤﺤﺪﺩﺓ ﺑﺎﻟﻘﻮﺍﻋﺪ ﺍﻟﺘﺎﻟﻴﺔ‪> →<S> :‬ﺃ< >ﺏ< >ﺝ< >ﺃ<‬
‫→ﺃ >‪ | <A‬ﺃ‬

‫<‪→>B‬ﺏ >‪ | <B‬ﺏ‬


‫<‪→>C‬ﺝ >‪ | <C‬ﺝ‬
‫‪.11‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺘﺎﻟﻴﺔ‪> →<S> :‬‬
‫ﺃ< ﺃ >ﺏ< ﺏ >ﺃ<→ >ﺃ< ﺏ | ﺏ >‪<B‬‬
‫→ﺃ >‪ | <B‬ﺃ‬

‫ﺃﻱﻣﻦ ﺍﻟﺠﻤﻞ ﺍﻟﺘﺎﻟﻴﺔ ﻣﻜﺘﻮﺑﺔ ﺑﺎﻟﻠﻐﺔ ﺍﻟﻨﺎﺗﺠﺔ ﻋﻦ ﻫﺬﻩ ﺍﻟﻘﻮﺍﻋﺪ؟‬

‫ﺃ‪.‬ﺑﺎﺏ‬
‫ﺏ‪bbbab.‬‬
‫ﺝ‪.‬ﺑﻌﺎﺍﺍﺍ‬
‫ﺩ‪.‬ﺑﺎﺑﺎﺏ‬
‫‪.12‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺘﺎﻟﻴﺔ‪→<S> :‬ﺃ‬
‫>‪ <S‬ﺝ >‪ | <B< | >A‬ﺏ >‪→<A‬ﺝ‬
‫>‪ | <A‬ﺝ‬
‫<‪→>B‬ﺩ | >‪<A‬‬
‫ﺃﻱﻣﻦ ﺍﻟﺠﻤﻞ ﺍﻟﺘﺎﻟﻴﺔ ﻣﻜﺘﻮﺑﺔ ﺑﺎﻟﻠﻐﺔ ﺍﻟﻨﺎﺗﺠﺔ ﻋﻦ ﻫﺬﻩ ﺍﻟﻘﻮﺍﻋﺪ؟‬

‫ﺃ‪.‬ﺍ ﺏ ﺕ ﺙ‬

‫ﺏ‪acccbd.‬‬
‫ﺝ‪acccbcc.‬‬
‫ﺩ‪ACD.‬‬
‫ﻩ‪accc.‬‬
‫‪.13‬ﺍﻛﺘﺐ ﻗﻮﺍﻋﺪ ﺍﻟﻠﻐﺔ ﺗﺘﻜﻮﻥ ﻣﻦ ﺳﻼﺳﻞ ﻟﻬﺎﻥ ﻧﺴﺦ ﻣﻦ ﺍﻟﺤﺮﻑ ﺃ ﻣﺘﺒﻮﻋﺎً ﺑﻨﻔﺲ ﻋﺪﺩ ﻧﺴﺦ‬
‫ﺍﻟﺤﺮﻑﺏ ‪ ،‬ﺣﻴﺚﻥ<‪ .0‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺍﻟﺴﻼﺳﻞ ‪ ، ab‬ﻭ ‪ ، aaaabbbb‬ﻭ‬
‫‪ aaaaaaaabbbbbbbb‬ﻫﻲ ﻓﻲ ﺍﻟﻠﻐﺔ ﻭﻟﻜﻦ ﻻ ﺗﻮﺟﺪ ﺣﺮﻭﻑ ‪ ، a‬ﻭ ‪ ، abb‬ﻭ ‪ ، ba‬ﻭ‬
‫‪.aaabb‬‬
‫‪.14‬ﺍﺭﺳﻢ ﺷﺠﺮﺍﺕ ﺗﺤﻠﻴﻞ ﻟﻠﺠﻤﻞ ‪ aabb‬ﻭ ‪ ، aaaabbbb‬ﻛﻤﺎ ﻫﻲ ﻣﺸﺘﻘﺔ ﻣﻦ ﻗﻮﺍﻋﺪ‬
‫ﺍﻟﻤﺴﺄﻟﺔ‪.13‬‬
‫‪165‬‬ ‫ﺗﻢﺿﺒﻂ ﺍﻟﻤﺸﻜﻠﺔ‬

‫‪.15‬ﻗﻢ ﺑﺘﺤﻮﻳﻞ ‪ BNF‬ﻟﻠﻤﺜﺎﻝ ‪ 3.1‬ﺇﻟﻰ ‪.EBNF‬‬


‫‪.16‬ﻗﻢ ﺑﺘﺤﻮﻳﻞ ‪ BNF‬ﻟﻠﻤﺜﺎﻝ ‪ 3.3‬ﺇﻟﻰ ‪.EBNF‬‬
‫‪.17‬ﻗﻢ ﺑﺘﺤﻮﻳﻞ ‪ EBNF‬ﺍﻟﺘﺎﻟﻲ ﺇﻟﻰ ‪→BNF: S‬ﺃ }‪{bA‬‬

‫ﺃ→ﺃ ]ﺏ[ ﺃ‬
‫‪.18‬ﻣﺎ ﻫﻮ ﺍﻟﻔﺮﻕ ﺑﻴﻦ ﺍﻟﺴﻤﺔ ﺍﻟﺠﻮﻫﺮﻳﺔ ﻭﺍﻟﺴﻤﺔ ﺍﻟﻤﺮﻛﺒﺔ ﻏﻴﺮ ﺍﻟﺪﺍﺧﻠﻴﺔ؟‬

‫‪.19‬ﺍﻛﺘﺐ ﻗﺎﻋﺪﺓ ﻧﺤﻮﻳﺔ ﻟﻠﺨﺎﺻﻴﺔ ﻳﻜﻮﻥ ﺃﺳﺎﺳﻬﺎ ‪ BNF‬ﻫﻮ ﺍﻟﻤﺜﺎﻝ ‪ 3.6‬ﻓﻲ ﺍﻟﻘﺴﻢ ‪ 3.4.5‬ﻭﻟﻜﻦ‬
‫ﻗﻮﺍﻋﺪﺍﻟﻠﻐﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻪ ﻫﻲ ﻛﻤﺎ ﻳﻠﻲ‪ :‬ﻻ ﻳﻤﻜﻦ ﺧﻠﻂ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ‪ ،‬ﻭﻟﻜﻦ‬
‫ﻻﻳﻠﺰﻡ ﺃﻥ ﺗﺤﺘﻮﻱ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻋﻠﻰ ﻧﻔﺲ ﺍﻷﻧﻮﺍﻉ ﻋﻠﻰ ﺟﺎﻧﺒﻲ ﺍﻟﻤﻬﻤﺔ ﺍﻟﻤﺸﻐﻞ ﺃﻭ‬
‫ﺍﻟﻌﺎﻣﻞ‪.‬‬
‫‪.20‬ﺍﻛﺘﺐ ﻗﻮﺍﻋﺪ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺠﺪﻭﻟﻴﺔ ﺍﻟﺘﻲ ﻳﻜﻮﻥ ﺃﺳﺎﺳﻬﺎ ‪ BNF‬ﻫﻮ ﺍﻟﻤﺜﺎﻝ ‪ 3.2‬ﻭﻗﻮﺍﻋﺪ‬
‫ﺍﻟﻨﻮﻉﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ﻫﻲ ﻧﻔﺴﻬﺎ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﻣﺜﺎﻝ ﺑﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﻓﻲ ﺍﻟﻘﺴﻢ ‪.3.4.5‬‬

‫‪.21‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻵﻟﺔ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ ﺍﻟﻮﺍﺭﺩﺓ ﻓﻲ ﺍﻟﻘﺴﻢ ‪ ، 3.5.1.1‬ﻗﻢ ﺑﺈﻋﻄﺎء ﺗﻌﺮﻳﻒ‬


‫ﺩﻻﻟﻲﺗﺸﻐﻴﻠﻲ ﻟﻤﺎ ﻳﻠﻲ‪:‬‬
‫ﺃ‪.‬ﺟﺎﻓﺎﻳﻔﻌﻞ‪-‬ﺑﻴﻨﻤﺎ‬
‫ﺏ‪.‬ﺁﺩﺍﻝ‬
‫ﺇﺫﺍ ‪،‬ﺛﻢ ‪ ،‬ﺁﺧﺮ‬ ‫ﺝ‪++ C.‬‬
‫ﻝ‬ ‫ﺩ‪ .‬ﺝ‬
‫ﻳﺤُﻮﻝّ‬ ‫ﻩ‪ .‬ﺝ‬
‫‪.22‬ﺍﻛﺘﺐ ﺩﺍﻟﺔ ﺗﻌﻴﻴﻦ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻟﻠﻌﺒﺎﺭﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﺃ‪.‬ﺁﺩﺍﻝ‬
‫ﺏ‪.‬ﺟﺎﻓﺎﺍﻓﻌﻞ ﺍﺛﻨﺎء‬
‫ﺝ‪.‬ﺗﻌﺒﻴﺮﺍﺕ ﺟﺎﻓﺎ ﺍﻟﻤﻨﻄﻘﻴﺔ‬
‫ﺩ‪.‬ﺟﺎﻓﺎﻝ‬
‫ﻩ‪.‬ﺝﻳﺤُﻮﻝّ‬
‫‪-23‬ﺍﺣﺴﺐ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﻜﻞ ﻣﻦ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻭﺍﻟﺸﺮﻭﻁ ﺍﻟﻼﺣﻘﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﺃ‪.‬ﺃ = ‪) * 2‬ﺏ ‪} 1 - (1 -‬ﺃ< ‪{0‬‬


‫ﺏ‪.‬ﺏ = )ﺝ ‪} 3 / (10 +‬ﺏ< ‪{6‬‬
‫ﺝ‪.‬ﺃ = ﺃ ‪ * 2 +‬ﺏ ‪} 1 -‬ﺃ< ‪{1‬‬
‫ﺩ‪.‬ﺱ = ‪ * 2‬ﺹ ‪ +‬ﺱ ‪} 1 -‬ﺱ< ‪{11‬‬
‫‪ -24‬ﺍﺣﺴﺐ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﻜﻞ ﻣﻦ ﺍﻟﺘﺘﺎﺑﻌﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻭﺷﺮﻭﻃﻬﺎ‬
‫ﺍﻟﻼﺣﻘﺔ‪:‬‬
‫ﺃ‪.‬ﺃ = ‪ * 2‬ﺏ ‪ 1 +‬؛‬
‫ﺏ= ﺃ ‪3 -‬‬
‫}ﺏ >‪{0‬‬
‫ﺍﻟﻔﺼﻞ‪ 3‬ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ‬ ‫‪166‬‬

‫ﺏ‪.‬ﺃ = ‪ * 2) * 3‬ﺏ ‪ +‬ﺃ( ؛‬


‫ﺏ= ‪ * 2‬ﺃ ‪1 -‬‬
‫}ﺏ< ‪{5‬‬
‫‪.25‬ﺍﺣﺴﺐ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﻜﻞ ﻣﻦ ﺑﻨﻴﺎﺕ ﺍﻻﺧﺘﻴﺎﺭ ﺍﻟﺘﺎﻟﻴﺔ ﻭﺷﺮﻭﻃﻬﺎ ﺍﻟﻼﺣﻘﺔ‪:‬‬

‫ﺃ‪.‬ﻟﻮ)ﺃ == ﺏ(‬
‫ﺏ= ‪ * 2‬ﺃ ‪1 +‬‬
‫ﺁﺧﺮ‬
‫ﺏ= ‪ * 2‬ﺃ ؛‬
‫}ﺏ< ‪{1‬‬
‫ﺏ‪.‬ﻟﻮ)ﺱ >ﺹ(‬
‫ﺱ= ﺱ ‪1 +‬‬
‫ﺁﺧﺮ‬
‫ﺱ= ‪ * 3‬ﺱ‬
‫}ﺱ >‪{0‬‬
‫ﺝ‪.‬ﻟﻮ)ﺱ< ﺹ(‬
‫ﺹ= ‪ * 2‬ﺱ ‪1 +‬‬
‫ﺁﺧﺮ‬
‫ﺹ= ‪ * 3‬ﺱ ‪ 1 -‬؛‬
‫}ﺹ< ‪{3‬‬
‫‪.26‬ﺍﺷﺮﺡ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻷﺭﺑﻌﺔ ﻹﺛﺒﺎﺕ ﺻﺤﺔ ﺑﻨﺎء ﺍﻟﺤﻠﻘﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻟﻠﻨﻤﻮﺫﺝﺑﻴﻨﻤﺎﺏ‬
‫ﻳﻔﻌﻞﺱﻧﻬﺎﻳﺔ‬
‫‪.27‬ﺇﺛﺒﺎﺕ ﺃﻥ )ﻥ ‪* (1 +‬ﺝ *ﻥ = ‪1‬‬
‫‪.28‬ﺇﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﺘﺎﻟﻲ‪:‬‬
‫}ﻥ< ‪{0‬‬
‫ﺍﻟﻌﺪ= ﻥ ؛‬
‫ﺍﻟﻤﺠﻤﻮﻉ= ‪ 0‬؛‬
‫ﺑﻴﻨﻤﺎﺍﻟﻌﺪ >< ‪0‬ﻳﻔﻌﻞ‬
‫ﺍﻟﻤﺠﻤﻮﻉ= ﺍﻟﻤﺠﻤﻮﻉ ‪ +‬ﺍﻟﻌﺪ ؛‬
‫ﺍﻟﻌﺪ= ﺍﻟﻌﺪ ‪ 1 -‬؛ ﻧﻬﺎﻳﺔ‬

‫{‪}sum = 1 + 2 + ... + n‬‬

You might also like