Untitled
Untitled
ﻣﻘﺪﻣﺎﺕ
1
ﺏ
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 2
ﻗﺒﻞﺃﻥ ﻧﺒﺪﺃ ﻓﻲ ﻣﻨﺎﻗﺸﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ،ﻳﺠﺐ ﺃﻥ ﻧﺄﺧﺬ ﻓﻲ ﺍﻻﻋﺘﺒﺎﺭ ﺑﻌﺾ
ﺍﻟﻤﻘﺪﻣﺎﺕ.ﺃﻭﻻ ً ،ﻧﺸﺮﺡ ﺑﻌﺾ ﺍﻷﺳﺒﺎﺏ ﺍﻟﺘﻲ ﺗﺠﻌﻞ ﻃﻼﺏ ﻋﻠﻮﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﻣﻄﻮﺭﻱ
ﺍﻟﺒﺮﺍﻣﺞﺍﻟﻤﺤﺘﺮﻓﻴﻦ ﻳﺪﺭﺳﻮﻥ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻟﻌﺎﻣﺔ ﻟﺘﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻭﺗﻘﻴﻴﻤﻬﺎ .ﺗﻌﺘﺒﺮ ﻫﺬﻩ
ﺍﻟﻤﻨﺎﻗﺸﺔﺫﺍﺕ ﻗﻴﻤﺔ ﺧﺎﺻﺔ ﻷﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻳﻌﺘﻘﺪﻭﻥ ﺃﻥ ﺍﻟﻤﻌﺮﻓﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺑﻠﻐﺔ ﺃﻭ ﻟﻐﺘﻴﻦ ﻣﻦ ﻟﻐﺎﺕ
ﺍﻟﺒﺮﻣﺠﺔﻛﺎﻓﻴﺔ ﻟﻌﻠﻤﺎء ﺍﻟﻜﻤﺒﻴﻮﺗﺮ .ﺑﻌﺪ ﺫﻟﻚ ،ﻧﺼﻒ ﺑﺈﻳﺠﺎﺯ ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ .ﺑﻌﺪ ﺫﻟﻚ ،
ﻧﻈﺮﺍًﻷﻥ ﺍﻟﻜﺘﺎﺏ ﻳﻘﻴﻢ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ ﻭﻣﻴﺰﺍﺗﻬﺎ ،ﻓﺈﻧﻨﺎ ﻧﻘﺪﻡ ﻗﺎﺉﻤﺔ ﺑﺎﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ
ﺑﻤﺜﺎﺑﺔﺃﺳﺎﺱ ﻟﻤﺜﻞ ﻫﺬﻩ ﺍﻷﺣﻜﺎﻡ .ﺑﻌﺪ ﺫﻟﻚ ،ﻧﻨﺎﻗﺶ ﺍﻟﺘﺄﺛﻴﺮﻳﻦ ﺍﻟﺮﺉﻴﺴﻴﻴﻦ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ:
ﻫﻨﺪﺳﺔﺍﻵﻟﺔ ﻭﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﺑﻌﺪ ﺫﻟﻚ ،ﻧﻘﺪﻡ ﻓﺉﺎﺕ ﻣﺨﺘﻠﻔﺔ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ.
ﺍﻟﺘﺎﻟﻲ،
ﻧﻈﺮﺍًﻷﻥ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﻳﺪﻭﺭ ﺃﻳﻀﺎً ﺣﻮﻝ ﺗﻄﺒﻴﻖ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ،ﻓﺈﻥ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻳﺘﻀﻤﻦ ﻧﻈﺮﺓ
ﻋﺎﻣﺔﻋﻠﻰ ﺍﻟﻤﻨﺎﻫﺞ ﺍﻟﻌﺎﻣﺔ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﻟﻠﺘﻨﻔﻴﺬ .ﺃﺧﻴﺮﺍً ،ﻧﺼﻒ ﺑﺈﻳﺠﺎﺯ ﺑﻌﺾ ﺍﻷﻣﺜﻠﺔ ﻟﺒﻴﺉﺎﺕ
ﺍﻟﺒﺮﻣﺠﺔﻭﻧﻨﺎﻗﺶ ﺗﺄﺛﻴﺮﻫﺎ ﻋﻠﻰ ﺇﻧﺘﺎﺝ ﺍﻟﺒﺮﺍﻣﺞ.
• ﺯﻳﺎﺩﺓﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺍﻟﺘﻌﺒﻴﺮ ﻋﻦ ﺍﻷﻓﻜﺎﺭ.ﻣﻦ ﺍﻟﻤﻌﺘﻘﺪ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺃﻥ ﺍﻟﻌﻤﻖ ﺍﻟﺬﻱ ﻳﻤﻜﻦ
ﻟﻠﻨﺎﺱﺍﻟﺘﻔﻜﻴﺮ ﻓﻴﻪ ﻳﺘﺄﺛﺮ ﺑﺎﻟﻘﻮﺓ ﺍﻟﺘﻌﺒﻴﺮﻳﺔ ﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﻨﻘﻠﻮﻥ ﺑﻬﺎ ﺃﻓﻜﺎﺭﻫﻢ .ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ
ﻟﺪﻳﻬﻢﻓﻬﻢ ﺿﻌﻴﻒ ﻟﻠﻐﺔ ﺍﻟﻄﺒﻴﻌﻴﺔ ﻣﻘﻴﺪﻭﻥ ﻓﻲ ﺗﻌﻘﻴﺪ ﺃﻓﻜﺎﺭﻫﻢ ،ﻻ ﺳﻴﻤﺎ ﻓﻲ ﻋﻤﻖ
ﺍﻟﺘﺠﺮﻳﺪ.ﺑﻌﺒﺎﺭﺓ ﺃﺧﺮﻯ ،ﻳﺼﻌﺐ ﻋﻠﻰ ﺍﻟﻨﺎﺱ ﺗﺼﻮﺭ ﺍﻟﻬﻴﺎﻛﻞ ﺍﻟﺘﻲ ﻻ ﻳﻤﻜﻨﻬﻢ ﻭﺻﻔﻬﺎ ﺷﻔﻬﻴﺎ ً
ﺃﻭﻛﺘﺎﺑﻴﺎً.
ﺍﻟﻤﺒﺮﻣﺠﻮﻥ ،ﻓﻲ ﻋﻤﻠﻴﺔ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ،ﻣﻘﻴﺪﻭﻥ ﺑﺎﻟﻤﺜﻞ .ﺗﻀﻊ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﻄﻮﺭﻭﻥ
ﺑﻬﺎﺍﻟﺒﺮﺍﻣﺞ ﻗﻴﻮﺩﺍً ﻋﻠﻰ ﺃﻧﻮﺍﻉ ﻫﻴﺎﻛﻞ ﺍﻟﺘﺤﻜﻢ ﻭﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺍﻟﺘﺠﺮﺩ ﺍﻟﺘﻲ ﻳﻤﻜﻨﻬﻢ
ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ؛ﻭﺑﺎﻟﺘﺎﻟﻲ ،ﻓﺈﻥ ﺃﺷﻜﺎﻝ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺎﺕ ﺍﻟﺘﻲ ﻳﻤﻜﻨﻬﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻣﺤﺪﻭﺩﺓ ﺑﺎﻟﻤﺜﻞ.
ﻳﻤﻜﻦﺃﻥ ﻳﺆﺩﻱ ﺍﻟﻮﻋﻲ ﺑﻤﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﻣﻴﺰﺍﺕ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺇﻟﻰ ﺗﻘﻠﻴﻞ ﻫﺬﻩ ﺍﻟﻘﻴﻮﺩ
ﻓﻲﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ .ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺠﻴﻦ ﺯﻳﺎﺩﺓ ﻧﻄﺎﻕ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ
ﻣﻦﺧﻼﻝ ﺗﻌﻠﻢ ﺗﺮﺍﻛﻴﺐ ﻟﻐﺔ ﺟﺪﻳﺪﺓ.
ﻗﺪﻳﻘُﺎﻝ ﺇﻥ ﺗﻌﻠﻢ ﻗﺪﺭﺍﺕ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﻻ ﻳﺴﺎﻋﺪ ﺍﻟﻤﺒﺮﻣﺞ ﺍﻟﺬﻱ ﻳﺠُﺒﺮ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ
ﻟﻐﺔﺗﻔﺘﻘﺮ ﺇﻟﻰ ﺗﻠﻚ ﺍﻟﻘﺪﺭﺍﺕ .ﻭﻣﻊ ﺫﻟﻚ ،ﻓﺈﻥ ﻫﺬﻩ ﺍﻟﺤﺠﺔ ﻻ ﺗﺼﻤﺪ ،ﻷﻧﻪ ﻓﻲ ﻛﺜﻴﺮ ﻣﻦ
ﺍﻷﺣﻴﺎﻥ ،ﻳﻤﻜﻦ ﻣﺤﺎﻛﺎﺓ ﺑﻨﻴﺎﺕ ﺍﻟﻠﻐﺔ ﺑﻠﻐﺎﺕ ﺃﺧﺮﻯ ﻻ ﺗﺪﻋﻢ ﺗﻠﻚ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ.
ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻗﺪ ﻳﺼﻤﻢ ﻣﺒﺮﻣﺞ ﺳﻲ ﺗﻌﻠﻢ ﺑﻨﻴﺔ ﻭﺍﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ
ﺍﻟﺘﺮﺍﺑﻄﻴﺔﻓﻲ ﺑﻴﺮﻝ ) Wallﻭﺁﺧﺮﻭﻥ (2000 ،ﻫﻴﺎﻛﻞ ﺗﺤﺎﻛﻲ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ﻓﻲ ﺗﻠﻚ
ﺍﻟﻠﻐﺔ.ﻓﻲ ﺃﺧﺮﻯ
3 1.1ﺃﺳﺒﺎﺏ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ
ﺍﻟﻜﻠﻤﺎﺕ ،ﻓﺈﻥ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺗﺒﻨﻲ ﺗﻘﺪﻳﺮﺍً ﻟﺨﺼﺎﺉﺺ ﺍﻟﻠﻐﺔ ﺍﻟﻘﻴﻤﺔ ﻭﺗﺒﻨﻴﻬﺎ
ﻭﺗﺸﺠﻊﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ،ﺣﺘﻰ ﻋﻨﺪﻣﺎ ﻻ ﺗﺪﻋﻢ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﺴﺘﺨﺪﻣﻮﻧﻬﺎ ﻫﺬﻩ
ﺍﻟﻤﻴﺰﺍﺕﻭﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ.
ﻏﺎﻟﺒﺎًﻣﺎ ﻳﻤﻜﻦ ﻣﺤﺎﻛﺎﺓ ﺑﻌﺾ ﻣﻴﺰﺍﺕ ﺇﺣﺪﻯ ﺍﻟﻠﻐﺎﺕ ﺑﻠﻐﺔ ﺃﺧﺮﻯ .ﻭﻣﻊ ﺫﻟﻚ ،ﻳﻔُﻀﻞ
ﺍﺳﺘﺨﺪﺍﻡﻣﻴﺰﺓ ﺗﻢ ﺩﻣﺞ ﺗﺼﻤﻴﻤﻬﺎ ﻓﻲ ﻟﻐﺔ ﺑﺪﻻ ًﻣﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻣﺤﺎﻛﺎﺓ ﻟﺘﻠﻚ ﺍﻟﻤﻴﺰﺓ ،ﻭﺍﻟﺘﻲ
ﻏﺎﻟﺒﺎًﻣﺎ ﺗﻜﻮﻥ ﺃﻗﻞ ﺃﻧﺎﻗﺔ ﻭﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ﻭﺃﻗﻞ ﺃﻣﺎﻧﺎً.
• ﺯﻳﺎﺩﺓﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺗﻌﻠﻢ ﻟﻐﺎﺕ ﺟﺪﻳﺪﺓ.ﻻ ﺗﺰﺍﻝ ﺑﺮﻣﺠﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﺨﺼﺼﺎً ﺻﻐﻴﺮﺍً ﻧﺴﺒﻴﺎً ،ﻭﻻ
ﺗﺰﺍﻝﻣﻨﻬﺠﻴﺎﺕ ﺍﻟﺘﺼﻤﻴﻢ ﻭﺃﺩﻭﺍﺕ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﻭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﺣﺎﻟﺔ ﺗﻄﻮﺭ ﻣﺴﺘﻤﺮ.
ﻫﺬﺍﻳﺠﻌﻞ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻣﻬﻨﺔ ﻣﺜﻴﺮﺓ ،ﻭﻟﻜﻨﻪ ﻳﻌﻨﻲ ﺃﻳﻀﺎً ﺃﻥ ﺍﻟﺘﻌﻠﻢ ﺍﻟﻤﺴﺘﻤﺮ ﺿﺮﻭﺭﻱ.
ﻳﻤﻜﻦﺃﻥ ﺗﻜﻮﻥ ﻋﻤﻠﻴﺔ ﺗﻌﻠﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺟﺪﻳﺪﺓ ﻃﻮﻳﻠﺔ ﻭﺻﻌﺒﺔ ،ﺧﺎﺻﺔ ﺑﺎﻟﻨﺴﺒﺔ ﻟﺸﺨﺺ
ﻳﺸﻌﺮﺑﺎﻟﺮﺍﺣﺔ ﻣﻊ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﺃﻭ ﻟﻐﺘﻴﻦ ﻓﻘﻂ ﻭﻟﻢ ﻳﻔﺤﺺ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺑﺸﻜﻞ ﻋﺎﻡ
ﻣﻄﻠﻘﺎً.ﺑﻤﺠﺮﺩ ﺍﻟﺤﺼﻮﻝ ﻋﻠﻰ ﻓﻬﻢ ﺷﺎﻣﻞ ﻟﻠﻤﻔﺎﻫﻴﻢ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﻐﺎﺕ ،ﻳﺼﺒﺢ ﻣﻦ ﺍﻷﺳﻬﻞ
ﺑﻜﺜﻴﺮﺭﺅﻳﺔ ﻛﻴﻔﻴﺔ ﺩﻣﺞ ﻫﺬﻩ ﺍﻟﻤﻔﺎﻫﻴﻢ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﺘﻢ ﺗﻌﻠﻤﻬﺎ .ﻋﻠﻰ ﺳﺒﻴﻞ
ﺍﻟﻤﺜﺎﻝ ،ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﺍﻟﺬﻳﻦ ﻳﻔﻬﻤﻮﻥ ﻣﻔﺎﻫﻴﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﺳﻴﻜﻮﻥ ﻟﺪﻳﻬﻢ ﻭﻗﺖ
ﺃﺳﻬﻞﻓﻲ ﺗﻌﻠﻢ ،.Java )Arnold et al
ﺗﺤﺪﺙﻧﻔﺲ ﺍﻟﻈﺎﻫﺮﺓ ﻓﻲ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻄﺒﻴﻌﻴﺔ .ﻛﻠﻤﺎ ﻋﺮﻓﺖ ﻗﻮﺍﻋﺪ ﻟﻐﺘﻚ ﺍﻷﻡ ﺑﺸﻜﻞ
ﺃﻓﻀﻞ ،ﻛﺎﻥ ﻣﻦ ﺍﻷﺳﻬﻞ ﺗﻌﻠﻢ ﻟﻐﺔ ﺛﺎﻧﻴﺔ .ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ،ﻓﺈﻥ ﺗﻌﻠﻢ ﻟﻐﺔ ﺛﺎﻧﻴﺔ ﻟﻪ ﻓﺎﺉﺪﺓ
ﻓﻲﺗﻌﻠﻴﻤﻚ ﺍﻟﻤﺰﻳﺪ ﻋﻦ ﻟﻐﺘﻚ ﺍﻷﻭﻟﻰ.
.1ﻻﺣﻆ ﺃﻥ ﻫﺬﺍ ﺍﻟﻔﻬﺮﺱ ﻫﻮ ﻣﻘﻴﺎﺱ ﻭﺍﺣﺪ ﻓﻘﻂ ﻟﺸﻌﺒﻴﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ،ﻭﺩﻗﺘﻪ ﻏﻴﺮ ﻣﻘﺒﻮﻟﺔ ﻋﺎﻟﻤﻴﺎً.
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 4
ﺍﻟﻮﻗﺖ.ﺗﻈﻬﺮ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻔﻬﺮﺱ ﺃﻳﻀﺎً ﺃﻥ ﺗﻮﺯﻳﻊ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻳﺘﻐﻴﺮ ﺩﺍﺉﻤﺎً .ﻳﺸﻴﺮ
ﻋﺪﺩﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻭﺍﻟﻄﺒﻴﻌﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﻟﻺﺣﺼﺎءﺍﺕ ﺇﻟﻰ ﺃﻥ ﻛﻞ ﻣﻄﻮﺭ ﺑﺮﺍﻣﺞ ﻳﺠﺐ
ﺃﻥﻳﻜﻮﻥ ﻣﺴﺘﻌﺪﺍً ﻟﺘﻌﻠﻢ ﻟﻐﺎﺕ ﻣﺨﺘﻠﻔﺔ.
• ﻓﻬﻢﺃﻓﻀﻞ ﻷﻫﻤﻴﺔ ﺍﻟﺘﻨﻔﻴﺬ.ﻓﻲ ﺗﻌﻠﻢ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ،ﻣﻦ ﺍﻟﻤﺜﻴﺮ ﻟﻼﻫﺘﻤﺎﻡ
ﻭﺍﻟﻀﺮﻭﺭﻱﺃﻥ ﻧﺘﻄﺮﻕ ﺇﻟﻰ ﻗﻀﺎﻳﺎ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻰ ﺗﻠﻚ ﺍﻟﻤﻔﺎﻫﻴﻢ .ﻓﻲ ﺑﻌﺾ
ﺍﻟﺤﺎﻻﺕ ،ﻳﺆﺩﻱ ﻓﻬﻢ ﻣﺸﻜﻼﺕ ﺍﻟﺘﻨﻔﻴﺬ ﺇﻟﻰ ﻓﻬﻢ ﺳﺒﺐ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺎﺕ ﺑﺎﻟﻄﺮﻳﻘﺔ ﺍﻟﺘﻲ ﻫﻲ
ﻋﻠﻴﻬﺎ.ﺑﺪﻭﺭﻫﺎ ،ﺗﺆﺩﻱ ﻫﺬﻩ ﺍﻟﻤﻌﺮﻓﺔ ﺇﻟﻰ ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺔ ﺑﺸﻜﻞ ﺃﻛﺜﺮ ﺫﻛﺎء ً،
ﺣﻴﺚﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ ﻻﺳﺘﺨﺪﺍﻣﻬﺎ .ﻳﻤﻜﻨﻨﺎ ﺃﻥ ﻧﺼﺒﺢ ﻣﺒﺮﻣﺠﻴﻦ ﺃﻓﻀﻞ ﻣﻦ ﺧﻼﻝ ﻓﻬﻢ
ﺍﻟﺨﻴﺎﺭﺍﺕﺑﻴﻦ ﺗﺮﺍﻛﻴﺐ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻭﻋﻮﺍﻗﺐ ﺗﻠﻚ ﺍﻻﺧﺘﻴﺎﺭﺍﺕ.
ﻳﻤﻜﻦﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ ﺃﻧﻮﺍﻉ ﻣﻌﻴﻨﺔ ﻣﻦ ﺃﺧﻄﺎء ﺍﻟﺒﺮﺍﻣﺞ ﻭﺇﺻﻼﺣﻬﺎ ﻓﻘﻂ ﺑﻮﺍﺳﻄﺔ ﻣﺒﺮﻣﺞ
ﻳﻌﺮﻑﺑﻌﺾ ﺗﻔﺎﺻﻴﻞ ﺍﻟﺘﻨﻔﻴﺬ ﺫﺍﺕ ﺍﻟﺼﻠﺔ .ﻓﺎﺉﺪﺓ ﺃﺧﺮﻯ ﻟﻔﻬﻢ ﻗﻀﺎﻳﺎ ﺍﻟﺘﻨﻔﻴﺬ ﻫﻲ ﺃﻧﻪ
ﻳﺴﻤﺢﻟﻨﺎ ﺑﺘﺼﻮﺭ ﻛﻴﻒ ﻳﻨﻔﺬ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﺮﺍﻛﻴﺐ ﻟﻐﻮﻳﺔ ﻣﺨﺘﻠﻔﺔ .ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ،ﺗﻮﻓﺮ
ﺑﻌﺾﺍﻟﻤﻌﺮﻓﺔ ﺑﻘﻀﺎﻳﺎ ﺍﻟﺘﻨﻔﻴﺬ ﺗﻠﻤﻴﺤﺎﺕ ﺣﻮﻝ ﺍﻟﻜﻔﺎءﺓ ﺍﻟﻨﺴﺒﻴﺔ ﻟﻠﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺒﺪﻳﻠﺔ ﺍﻟﺘﻲ
ﻳﻤﻜﻦﺍﺧﺘﻴﺎﺭﻫﺎ ﻟﻠﺒﺮﻧﺎﻣﺞ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻏﺎﻟﺒﺎً ﻣﺎ ﻻ ﻳﺪﺭﻙ ﺍﻟﻤﺒﺮﻣﺠﻮﻥ ﺍﻟﺬﻳﻦ ﻳﻌﺮﻓﻮﻥ
ﺍﻟﻘﻠﻴﻞﻋﻦ ﺗﻌﻘﻴﺪ ﺗﻨﻔﻴﺬ ﻣﻜﺎﻟﻤﺎﺕ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺃﻥ ﺑﺮﻧﺎﻣﺠﺎً ﻓﺮﻋﻴﺎً ﺻﻐﻴﺮﺍً ﻳﺪُﻋﻰ ﻛﺜﻴﺮﺍً
ﻳﻤﻜﻦﺃﻥ ﻳﻜﻮﻥ ﺍﺧﺘﻴﺎﺭ ﺗﺼﻤﻴﻢ ﻏﻴﺮ ﻓﻌﺎﻝ ﻟﻠﻐﺎﻳﺔ.
ﻧﻈﺮﺍًﻷﻥ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﻻ ﻳﺘﻄﺮﻕ ﺇﻻ ﺇﻟﻰ ﻋﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﻗﻀﺎﻳﺎ ﺍﻟﺘﻨﻔﻴﺬ ،ﻓﺈﻥ ﺍﻟﻔﻘﺮﺗﻴﻦ
ﺍﻟﺴﺎﺑﻘﺘﻴﻦﺗﺨﺪﻣﺎﻥ ﺃﻳﻀﺎً ﺍﻷﺳﺎﺱ ﺍﻟﻤﻨﻄﻘﻲ ﻟﺪﺭﺍﺳﺔ ﺗﺼﻤﻴﻢ ﺍﻟﻤﺘﺮﺟﻢ.
ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻳﻌﺘﻘﺪ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺍﻟﻨﺎﺱ ﺃﻧﻪ ﻛﺎﻥ ﻣﻦ ﺍﻷﻓﻀﻞ ﻟﻮ ﺃﻥ ) ALGOL 60
ﺑﺎﻛﻮﺱﻭﺁﺧﺮﻭﻥ (1963 ،ﻗﺪ ﺃﺯﺍﺡ ﻓﻮﺭﺗﺮﺍﻥ )ﻣﻴﺘﻜﺎﻟﻒ ﻭﺁﺧﺮﻭﻥ (2004 ،ﻓﻲ
5 1.2ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ
ﻓﻲﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ،ﻷﻧﻬﺎ ﻛﺎﻧﺖ ﺃﻛﺜﺮ ﺃﻧﺎﻗﺔ ﻭﻛﺎﻥ ﻟﺪﻳﻬﺎ ﺑﻴﺎﻧﺎﺕ ﺗﺤﻜﻢ ﺃﻓﻀﻞ ﺑﻜﺜﻴﺮ ،ﻣﻦ
ﺑﻴﻦﺃﺳﺒﺎﺏ ﺃﺧﺮﻯ .ﻳﺮﺟﻊ ﺫﻟﻚ ﺟﺰﺉﻴﺎً ﺇﻟﻰ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻭﻣﺪﻳﺮﻱ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻓﻲ ﺫﻟﻚ
ﺍﻟﻮﻗﺖ ،ﻭﻛﺜﻴﺮ ﻣﻨﻬﻢ ﻟﻢ ﻳﻔﻬﻢ ﺑﻮﺿﻮﺡ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﻔﺎﻫﻴﻤﻲ ﻟـ .ALGOL 60ﻟﻘﺪ ﻭﺟﺪﻭﺍ
ﻭﺻﻔﻪﺻﻌﺐ ﺍﻟﻘﺮﺍءﺓ )ﻭﻫﻮ ﻣﺎ ﻛﺎﻥ ﻋﻠﻴﻪ( ﻭﺣﺘﻰ ﺃﻛﺜﺮ ﺻﻌﻮﺑﺔ ﻓﻲ ﺍﻟﻘﺮﺍءﺓ .ﻳﻔﻬﻢ .ﻟﻢ ﻳﻘﺪﺭﻭﺍ
ﻓﻮﺍﺉﺪﺑﻨﻴﺔ ﺍﻟﻜﺘﻠﺔ ،ﻭﺍﻟﺘﻜﺮﺍﺭ ،ﻭﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﻤﻨﻈﻤﺔ ﺟﻴﺪﺍً ،ﻟﺬﻟﻚ ﻓﺸﻠﻮﺍ ﻓﻲ ﺭﺅﻳﺔ
ﻓﻮﺍﺉﺪ ALGOL 60ﻋﻠﻰ .Fortran
ﺑﺸﻜﻞﻋﺎﻡ ،ﺇﺫﺍ ﻛﺎﻥ ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻳﺨﺘﺎﺭﻭﻥ ﺍﻟﻠﻐﺎﺕ ﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺟﻴﺪﺓ ،ﻓﺮﺑﻤﺎ ﺗﻀﻐﻂ
ﺍﻟﻠﻐﺎﺕﺍﻷﻓﻀﻞ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺎﺕ ﺍﻷﻓﻘﺮ.
1.2ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ
ﺗﻢﺗﻄﺒﻴﻖ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﻋﺪﺩ ﻻ ﻳﺤﺼﻰ ﻣﻦ ﺍﻟﻤﺠﺎﻻﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ ،ﻣﻦ ﺍﻟﺘﺤﻜﻢ ﻓﻲ
ﻣﺤﻄﺎﺕﺍﻟﻄﺎﻗﺔ ﺍﻟﻨﻮﻭﻳﺔ ﺇﻟﻰ ﺗﻮﻓﻴﺮ ﺃﻟﻌﺎﺏ ﺍﻟﻔﻴﺪﻳﻮ ﻓﻲ ﺍﻟﻬﻮﺍﺗﻒ ﺍﻟﻤﺤﻤﻮﻟﺔ .ﺑﺴﺒﺐ ﻫﺬﺍ ﺍﻟﺘﻨﻮﻉ
ﺍﻟﻜﺒﻴﺮﻓﻲ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ،ﺗﻢ ﺗﻄﻮﻳﺮ ﻟﻐﺎﺕ ﺑﺮﻣﺠﺔ ﺫﺍﺕ ﺃﻫﺪﺍﻑ ﻣﺨﺘﻠﻔﺔ ﺟﺪﺍً .ﻓﻲ ﻫﺬﺍ
ﺍﻟﻘﺴﻢ ،ﻧﻨﺎﻗﺶ ﺑﺈﻳﺠﺎﺯ ﺑﻌﺾ ﻣﺠﺎﻻﺕ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺮﺗﺒﻄﺔ ﺑﻬﺎ.
1.2.1ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ
ﺗﻢﺍﺧﺘﺮﺍﻉ ﺍﻟﺤﻮﺍﺳﻴﺐ ﺍﻟﺮﻗﻤﻴﺔ ﺍﻷﻭﻟﻰ ،ﺍﻟﺘﻲ ﻇﻬﺮﺕ ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻷﺭﺑﻌﻴﻨﻴﺎﺕ ﻭﺃﻭﺍﺉﻞ
ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ،ﻭﺍﺳﺘﺨﺪﻣﺖ ﻓﻲ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ .ﻋﺎﺩﺓ ،ﺍﺳﺘﺨﺪﻣﺖ
ﺍﻟﺘﻄﺒﻴﻘﺎﺕﺍﻟﻌﻠﻤﻴﺔ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﻫﻴﺎﻛﻞ ﺑﻴﺎﻧﺎﺕ ﺑﺴﻴﻄﺔ ﻧﺴﺒﻴﺎً ،ﻭﻟﻜﻨﻬﺎ ﺗﻄﻠﺒﺖ ﺃﻋﺪﺍﺩﺍً
ﻛﺒﻴﺮﺓﻣﻦ ﺍﻟﺤﺴﺎﺑﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﻟﻠﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ .ﻛﺎﻧﺖ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﻫﻲ
ﺍﻟﻤﺼﻔﻮﻓﺎﺕﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ؛ ﻛﺎﻧﺖ ﻫﻴﺎﻛﻞ ﺍﻟﺘﺤﻜﻢ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﻫﻲ ﻋﺪ ﺍﻟﺤﻠﻘﺎﺕ
ﻭﺍﻻﺧﺘﻴﺎﺭﺍﺕ.ﺗﻢ ﺗﺼﻤﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻟﻤﺒﻜﺮﺓ ﺍﻟﺘﻲ ﺗﻢ ﺍﺧﺘﺮﺍﻋﻬﺎ ﻟﻠﺘﻄﺒﻴﻘﺎﺕ
ﺍﻟﻌﻠﻤﻴﺔﻟﺘﻮﻓﻴﺮ ﺗﻠﻚ ﺍﻻﺣﺘﻴﺎﺟﺎﺕ .ﻛﺎﻧﺖ ﺍﻟﻤﻨﺎﻓﺴﺔ ﻫﻲ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ،ﻟﺬﺍ ﻛﺎﻧﺖ ﺍﻟﻜﻔﺎءﺓ ﻫﻲ
ﺍﻟﺸﻐﻞﺍﻟﺸﺎﻏﻞ .ﻛﺎﻧﺖ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻷﻭﻟﻰ ﻟﻠﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ .ﺗﻢ ﺗﺼﻤﻴﻢ 60
ALGOLﻭﻣﻌﻈﻢ ﺃﺣﻔﺎﺩﻩ ﺃﻳﻀﺎً ﻟﻼﺳﺘﺨﺪﺍﻡ ﻓﻲ ﻫﺬﻩ ﺍﻟﻤﻨﻄﻘﺔ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﻣﺼﻤﻤﺔ
ﻟﻼﺳﺘﺨﺪﺍﻡﻓﻲ ﺍﻟﻤﺠﺎﻻﺕ ﺫﺍﺕ ﺍﻟﺼﻠﺔ ﺃﻳﻀﺎً.
1.2.2ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ
ﺑﺪﺃﺍﺳﺘﺨﺪﺍﻡ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﻓﻲ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ .ﺗﻢ
ﺗﻄﻮﻳﺮﺃﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ ﺧﺎﺻﺔ ﻟﻬﺬﺍ ﺍﻟﻐﺮﺽ ،ﺇﻟﻰ ﺟﺎﻧﺐ ﻟﻐﺎﺕ ﺧﺎﺻﺔ .ﺃﻭﻝ ﻟﻐﺔ ﺭﻓﻴﻌﺔ ﺍﻟﻤﺴﺘﻮﻯ
ﻧﺎﺟﺤﺔﻟﻸﻋﻤﺎﻝ ﻛﺎﻧﺖ (، COBOL )ISO / IEC ، 2002
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 6
ﻇﻬﺮﺕﺍﻟﻨﺴﺨﺔ ﺍﻷﻭﻟﻴﺔ ﻣﻨﻬﺎ ﻓﻲ ﻋﺎﻡ .1960ﻭﻻ ﺗﺰﺍﻝ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ﻟﻬﺬﻩ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ.
ﺗﺘﻤﻴﺰﻟﻐﺎﺕ ﺍﻷﻋﻤﺎﻝ ﺑﻤﺮﺍﻓﻖ ﻹﻧﺘﺎﺝ ﺗﻘﺎﺭﻳﺮ ﻣﻔﺼﻠﺔ ،ﻭﻃﺮﻕ ﺩﻗﻴﻘﺔ ﻟﻮﺻﻒ ﻭﺗﺨﺰﻳﻦ ﺍﻷﺭﻗﺎﻡ
ﺍﻟﻌﺸﺮﻳﺔﻭﺑﻴﺎﻧﺎﺕ ﺍﻷﺣﺮﻑ ،ﻭﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺗﺤﺪﻳﺪ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﺍﻟﻌﺸﺮﻳﺔ.
ﻛﺎﻧﺖﻫﻨﺎﻙ ﺗﻄﻮﺭﺍﺕ ﻗﻠﻴﻠﺔ ﻓﻲ ﻟﻐﺎﺕ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﺧﺎﺭﺝ ﻧﻄﺎﻕ ﺗﻄﻮﻳﺮ ﻭﺗﻄﻮﺭ
.COBOLﻟﺬﻟﻚ ،ﻳﺘﻀﻤﻦ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﻣﻨﺎﻗﺸﺎﺕ ﻣﺤﺪﻭﺩﺓ ﻓﻘﻂ ﺣﻮﻝ ﺍﻟﻬﻴﺎﻛﻞ ﻓﻲ .COBOL
1.2.3ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ
ﺍﻟﺬﻛﺎءﺍﻻﺻﻄﻨﺎﻋﻲ ) (AIﻫﻮ ﻣﺠﺎﻝ ﻭﺍﺳﻊ ﻣﻦ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻳﺘﻤﻴﺰ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺤﺴﺎﺑﺎﺕ
ﺍﻟﺮﻣﺰﻳﺔﺑﺪﻻ ًﻣﻦ ﺍﻟﺤﺴﺎﺑﺎﺕ ﺍﻟﺮﻗﻤﻴﺔ .ﻳﻌﻨﻲ ﺍﻟﺤﺴﺎﺏ ﺍﻟﺮﻣﺰﻱ ﺃﻧﻪ ﻳﺘﻢ ﺍﻟﺘﻼﻋﺐ ﺑﺎﻟﺮﻣﻮﺯ ،ﺍﻟﺘﻲ
ﺗﺘﻜﻮﻥﻣﻦ ﺃﺳﻤﺎء ﺑﺪﻻ ًﻣﻦ ﺃﺭﻗﺎﻡ .ﺃﻳﻀﺎً ،ﻳﺘﻢ ﺇﺟﺮﺍء ﺍﻟﺤﺴﺎﺏ ﺍﻟﺮﻣﺰﻱ ﺑﺸﻜﻞ ﺃﻛﺜﺮ ﻣﻼءﻣﺔ ﻣﻊ
ﻗﻮﺍﺉﻢﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺮﺗﺒﻄﺔ ﺑﺪﻻ ًﻣﻦ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ .ﻳﺘﻄﻠﺐ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻟﺒﺮﻣﺠﺔ ﺃﺣﻴﺎﻧﺎً ﻣﺮﻭﻧﺔ
ﺃﻛﺒﺮﻣﻦ ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻷﺧﺮﻯ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻓﻲ ﺑﻌﺾ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻟﺬﻛﺎء
ﺍﻻﺻﻄﻨﺎﻋﻲ ،ﺗﻜﻮﻥ ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺇﻧﺸﺎء ﻣﻘﺎﻃﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ ﻭﺗﻨﻔﻴﺬﻫﺎ ﺃﺛﻨﺎء ﺍﻟﺘﻨﻔﻴﺬ ﺃﻣﺮﺍً
ﻣﻼﺉﻤﺎً.
ﻛﺎﻧﺖﺃﻭﻝ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﺬﻛﺎء
ﺍﻻﺻﻄﻨﺎﻋﻲﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ) LISPﻣﻜﺎﺭﺛﻲ ﻭﺁﺧﺮﻭﻥ ، (1965 ،ﻭﺍﻟﺘﻲ ﻇﻬﺮﺕ ﻓﻲ ﻋﺎﻡ
.1959ﺗﻤﺖ ﻛﺘﺎﺑﺔ ﻣﻌﻈﻢ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﺍﻟﺘﻲ ﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ ﻗﺒﻞ ﻋﺎﻡ 1990ﺑﻠﻐﺔ
LISPﺃﻭ ﺃﺣﺪ ﺃﻗﺮﺑﺎﺉﻬﺎ .ﻭﻟﻜﻦ ﺧﻼﻝ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ،ﻇﻬﺮ ﻧﻬﺞ ﺑﺪﻳﻞ ﻟﺒﻌﺾ ﻫﺬﻩ
ﺍﻟﺘﻄﺒﻴﻘﺎﺕ -ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ (.Prolog )Clocksin and Mellish ، 2003
ﻓﻲﺍﻵﻭﻧﺔ ﺍﻷﺧﻴﺮﺓ ،ﺗﻤﺖ ﻛﺘﺎﺑﺔ ﺑﻌﺾ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﺑﻠﻐﺎﺕ ﺃﻧﻈﻤﺔ ﻣﺜﻞ (
، C. Scheme )Dybvig، 2003ﻭﻳﺘﻢ ﺗﻘﺪﻳﻢ ﻟﻬﺠﺔ LISPﻭ Prologﻓﻲ ﺍﻟﻔﺼﻠﻴﻦ 15ﻭ 16
ﻋﻠﻰﺍﻟﺘﻮﺍﻟﻲ.
1.2.4ﺑﺮﻣﺠﺔ ﺍﻷﻧﻈﻤﺔ
ﻳﻌُﺮﻑﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻭﺃﺩﻭﺍﺕ ﺩﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﻟﻨﻈﺎﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺑﺸﻜﻞ ﺟﻤﺎﻋﻲ ﺑﺎﺳﻤﻪﺑﺮﺍﻣﺞ
ﺍﻷﻧﻈﻤﺔ .ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺑﺮﺍﻣﺞ ﺍﻷﻧﻈﻤﺔ ﺑﺸﻜﻞ ﻣﺴﺘﻤﺮ ﺗﻘﺮﻳﺒﺎً ﻭﻟﺬﺍ ﻳﺠﺐ ﺃﻥ ﺗﻜﻮﻥ ﻓﻌﺎﻟﺔ .ﻋﻼﻭﺓ
ﻋﻠﻰﺫﻟﻚ ،ﻳﺠﺐ ﺃﻥ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﻣﻴﺰﺍﺕ ﻣﻨﺨﻔﻀﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺗﺴﻤﺢ ﻟﻜﺘﺎﺑﺔ ﻭﺍﺟﻬﺎﺕ ﺍﻟﺒﺮﺍﻣﺞ
ﻟﻸﺟﻬﺰﺓﺍﻟﺨﺎﺭﺟﻴﺔ.
ﻓﻲﺍﻟﺴﺘﻴﻨﻴﺎﺕ ﻭﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ،ﻃﻮﺭﺕ ﺑﻌﺾ ﺍﻟﺸﺮﻛﺎﺕ ﺍﻟﻤﺼﻨﻌﺔ
ﻷﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ،ﻣﺜﻞ IBMﻭ Digitalﻭ ) Burroughsﺍﻵﻥ (UNISYSﻟﻐﺎﺕ ﺧﺎﺻﺔ ﻋﺎﻟﻴﺔ
ﺍﻟﻤﺴﺘﻮﻯﻣﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻵﻟﺔ ﻟﺒﺮﺍﻣﺞ ﺍﻷﻧﻈﻤﺔ ﻋﻠﻰ ﺃﺟﻬﺰﺗﻬﻢ .ﺑﺎﻟﻨﺴﺒﺔ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﺮﻛﺰﻳﺔ
ﻣﻦ ، IBMﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﻫﻲ ، PL / Sﻭﻫﻲ ﻟﻬﺠﺔ PL / I؛ ﺑﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ، Digitalﻛﺎﻧﺖ BLISS
،ﻟﻐﺔ ﺑﻤﺴﺘﻮﻯ ﺃﻋﻠﻰ ﺑﻘﻠﻴﻞ ﻣﻦ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ؛ ﺑﺎﻟﻨﺴﺒﺔ ﻟﺒﻮﺭﻭﺯ ،ﻓﻘﺪ ﺗﻢ ﺗﻤﺪﻳﺪﻩ .ALGOLﻭﻣﻊ
ﺫﻟﻚ ،ﺗﺘﻢ ﺍﻵﻥ ﻛﺘﺎﺑﺔ ﻣﻌﻈﻢ ﺑﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ ﺑﻠﻐﺎﺕ ﺑﺮﻣﺠﺔ ﺃﻛﺜﺮ ﻋﻤﻮﻣﻴﺔ ،ﻣﺜﻞ Cﻭ .++ C
ﺗﻤﺖﻛﺘﺎﺑﺔ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ UNIXﺑﺎﻟﻜﺎﻣﻞ ﺗﻘﺮﻳﺒﺎً ﺑﻠﻐﺔ ( ، C )ISO ، 1999ﻣﻤﺎ ﺟﻌﻞ ﻣﻦ
ﺍﻟﺴﻬﻞﻧﺴﺒﻴﺎً ﻧﻘﻠﻪ ﺃﻭ ﻧﻘﻠﻪ ﺇﻟﻰ ﺃﺟﻬﺰﺓ ﻣﺨﺘﻠﻔﺔ .ﺑﻌﺾ ﺧﺼﺎﺉﺺ ﻟﻐﺔ Cﺗﺠﻌﻠﻬﺎ ﺧﻴﺎﺭﺍً ﺟﻴﺪﺍً
ﻟﺒﺮﻣﺠﺔﺍﻷﻧﻈﻤﺔ .ﺇﻧﻪ ﻣﻨﺨﻔﺾ ﺍﻟﻤﺴﺘﻮﻯ ﻭﻓﻌﺎﻝ ﻓﻲ ﺍﻟﺘﻨﻔﻴﺬ ﻭﻻ ﻳﺜﻘﻞ ﻛﺎﻫﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺑﺎﻟﻜﺜﻴﺮ
7 1.3ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ
ﻗﻴﻮﺩﺍﻟﺴﻼﻣﺔ .ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻜﻮﻥ ﻣﺒﺮﻣﺠﻮ ﺍﻷﻧﻈﻤﺔ ﻣﺒﺮﻣﺠﻴﻦ ﻣﻤﺘﺎﺯﻳﻦ ﻭﻳﻌﺘﻘﺪﻭﻥ ﺃﻧﻬﻢ ﻻ ﻳﺤﺘﺎﺟﻮﻥ
ﺇﻟﻰﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻘﻴﻮﺩ .ﻭﻣﻊ ﺫﻟﻚ ،ﻳﺠﺪ ﺑﻌﺾ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻏﻴﺮ ﺍﻟﻨﻈﺎﻣﻴﻴﻦ ﺃﻥ ﻟﻐﺔ Cﺧﻄﻴﺮﺓ ﺟﺪﺍً
ﻻﺳﺘﺨﺪﺍﻣﻬﺎﻓﻲ ﺃﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻜﺒﻴﺮﺓ ﻭﺍﻟﻤﻬﻤﺔ.
1.2.5ﺑﺮﺍﻣﺞ ﺍﻟﻮﻳﺐ
ﻳﺘﻢﺩﻋﻢ ﺷﺒﻜﺔ ﺍﻟﻮﻳﺐ ﺍﻟﻌﺎﻟﻤﻴﺔ ﻣﻦ ﺧﻼﻝ ﻣﺠﻤﻮﻋﺔ ﺍﻧﺘﻘﺎﺉﻴﺔ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ،ﺑﺪءﺍً ﻣﻦ ﻟﻐﺎﺕ
ﺍﻟﺘﺮﻣﻴﺰ ،ﻣﺜﻞ ، HTMLﻭﻫﻲ ﻟﻴﺴﺖ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ،ﺇﻟﻰ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺫﺍﺕ ﺍﻷﻏﺮﺍﺽ ﺍﻟﻌﺎﻣﺔ ،
ﻣﺜﻞ .Javaﺑﺴﺒﺐ ﺍﻟﺤﺎﺟﺔ ﺍﻟﻤﻨﺘﺸﺮﺓ ﻟﻤﺤﺘﻮﻯ ﻭﻳﺐ ﺩﻳﻨﺎﻣﻴﻜﻲ ،ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻢ ﺗﻀﻤﻴﻦ ﺑﻌﺾ
ﺍﻟﻘﺪﺭﺓﺍﻟﺤﺴﺎﺑﻴﺔ ﻓﻲ ﺗﻘﻨﻴﺔ ﻋﺮﺽ ﺍﻟﻤﺤﺘﻮﻯ .ﻳﻤﻜﻦ ﺗﻮﻓﻴﺮ ﻫﺬﻩ ﺍﻟﻮﻇﻴﻔﺔ ﻣﻦ ﺧﻼﻝ ﺗﻀﻤﻴﻦ ﻛﻮﺩ
ﺍﻟﺒﺮﻣﺠﺔﻓﻲ ﻣﺴﺘﻨﺪ .HTMLﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻜﻮﻥ ﻫﺬﺍ ﺍﻟﺮﻣﺰ ﻓﻲ ﺷﻜﻞ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻧﺼﻴﺔ ،ﻣﺜﻞ
JavaScriptﺃﻭ .PHPﻫﻨﺎﻙ ﺃﻳﻀﺎً ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺸﺒﻴﻬﺔ ﺑﺎﻟﻌﻼﻣﺎﺕ ﺍﻟﺘﻲ ﺗﻢ ﺗﻤﺪﻳﺪﻫﺎ ﻟﺘﺸﻤﻞ
ﺍﻟﺘﺮﻛﻴﺒﺎﺕﺍﻟﺘﻲ ﺗﺘﺤﻜﻢ ﻓﻲ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻤﺴﺘﻨﺪﺍﺕ ،ﻭﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻟﻘﺴﻢ 1.5ﻭﻓﻲ
ﺍﻟﻔﺼﻞ.2
ﺑﻌﺾﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻰ ﺛﻼﺛﺔ ﻣﻦ ﺍﻷﺭﺑﻌﺔ ﺍﻷﻛﺜﺮ ﺃﻫﻤﻴﺔ ﻣﻦ ﻫﺬﻩ ﺍﻟﻤﻌﺎﻳﻴﺮ
ﻣﻮﺿﺤﺔﻓﻲ ﺍﻟﺠﺪﻭﻝ ، 1.1ﻭﺍﻟﻤﻌﺎﻳﻴﺮ ﻧﻔﺴﻬﺎ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻷﻗﺴﺎﻡ ﺍﻟﺘﺎﻟﻴﺔ2.ﻻﺣﻆ ﺃﻧﻪ ﺗﻢ
ﺗﻀﻤﻴﻦﺃﻫﻢ ﺍﻟﺨﺼﺎﺉﺺ ﻓﻘﻂ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ،ﻣﻤﺎ ﻳﻌﻜﺲ ﺍﻟﻤﻨﺎﻗﺸﺔ ﻓﻲ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ
ﺍﻟﺘﺎﻟﻴﺔ.ﺭﺑﻤﺎ ﻳﻤﻜﻦ ﻟﻠﻤﺮء ﺃﻥ ﻳﺪﻋﻲ ﺃﻧﻪ ﺇﺫﺍ ﺍﻋﺘﺒﺮ ﺍﻟﻤﺮء ﺧﺼﺎﺉﺺ ﺃﻗﻞ ﺃﻫﻤﻴﺔ ،ﻓﻴﻤﻜﻦ ﺃﻥ
ﺗﺸﺘﻤﻞﺟﻤﻴﻊ ﻣﻮﺍﺿﻊ ﺍﻟﺠﺪﻭﻝ ﺗﻘﺮﻳﺒﺎً ﻋﻠﻰ "ﺗﻌﺪﺍﺩ ﻧﻘﻄﻲ".
ﻻﺣﻆﺃﻥ ﺑﻌﺾ ﻫﺬﻩ ﺍﻟﺨﺼﺎﺉﺺ ﻭﺍﺳﻌﺔ ﻭﻏﺎﻣﻀﺔ ﺇﻟﻰ ﺣﺪ ﻣﺎ ،ﻣﺜﻞ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ،ﻓﻲ
ﺣﻴﻦﺃﻥ ﺍﻟﺒﻌﺾ ﺍﻵﺧﺮ ﻋﺒﺎﺭﺓ ﻋﻦ ﺗﺮﺍﻛﻴﺐ ﻟﻐﻮﻳﺔ ﻣﺤﺪﺩﺓ ،ﻣﺜﻞ ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ .ﻋﻼﻭﺓ ﻋﻠﻰ
ﺫﻟﻚ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻤﻨﺎﻗﺸﺔ ﻗﺪ ﺗﺒﺪﻭ ﻭﻛﺄﻧﻬﺎ ﺗﻮﺣﻲ ﺑﺄﻥ ﺍﻟﻤﻌﺎﻳﻴﺮ ﻟﻬﺎ ﺃﻫﻤﻴﺔ ﻣﺘﺴﺎﻭﻳﺔ ،
ﻓﺈﻥﻫﺬﺍ ﺍﻟﻤﻌﻨﻰ ﻏﻴﺮ ﻣﻘﺼﻮﺩ ،ﻭﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﺍﻷﻣﺮ ﻟﻴﺲ ﻛﺬﻟﻚ.
.2ﺍﻟﻤﻌﻴﺎﺭ ﺍﻷﺳﺎﺳﻲ ﺍﻟﺮﺍﺑﻊ ﻫﻮ ﺍﻟﺘﻜﻠﻔﺔ ،ﻭﺍﻟﺘﻲ ﻟﻢ ﻳﺘﻢ ﺗﻀﻤﻴﻨﻬﺎ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﻷﻧﻬﺎ ﻣﺮﺗﺒﻄﺔ ﺑﺸﻜﻞ ﻃﻔﻴﻒ ﻓﻘﻂ
ﺑﺎﻟﻤﻌﺎﻳﻴﺮﺍﻷﺧﺮﻯ ﻭﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻴﻬﺎ.
ﻣﻘﺪﻣﺎﺕ ﺍﻟﻔﺼﻞ1 8
ﻣﻌﺎﻳﻴﺮ
1.3.1ﺳﻬﻮﻟﺔ ﺍﻟﻘﺮﺍءﺓ
ﺃﺣﺪﺃﻫﻢ ﻣﻌﺎﻳﻴﺮ ﺍﻟﺤﻜﻢ ﻋﻠﻰ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻮ ﺳﻬﻮﻟﺔ ﻗﺮﺍءﺓ ﺍﻟﺒﺮﺍﻣﺞ ﻭﻓﻬﻤﻬﺎ .ﻗﺒﻞ ﻋﺎﻡ ، 1970
ﻛﺎﻥﻳﺘﻢ ﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻣﻦ ﺣﻴﺚ ﻛﺘﺎﺑﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ.
ﻛﺎﻧﺖﺍﻟﺴﻤﺔ ﺍﻹﻳﺠﺎﺑﻴﺔ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﺍﻟﻜﻔﺎءﺓ .ﺗﻢ ﺗﺼﻤﻴﻢ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ ﻣﻦ
ﻭﺟﻬﺔﻧﻈﺮ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺃﻛﺜﺮ ﻣﻦ ﻭﺟﻬﺔ ﻧﻈﺮ ﻣﺴﺘﺨﺪﻣﻲ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ .ﻭﻟﻜﻦ ﻓﻲ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ،ﺗﻢ
ﺗﻄﻮﻳﺮﻣﻔﻬﻮﻡ ﺩﻭﺭﺓ ﺣﻴﺎﺓ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ) .(Booch ، 1987ﺗﻢ ﻧﻘﻞ ﺍﻟﺘﺮﻣﻴﺰ ﺇﻟﻰ ﺩﻭﺭ ﺃﺻﻐﺮ ﺑﻜﺜﻴﺮ ،
ﻭﺗﻢﺍﻻﻋﺘﺮﺍﻑ ﺑﺎﻟﺼﻴﺎﻧﺔ ﻛﺠﺰء ﺭﺉﻴﺴﻲ ﻣﻦ ﺍﻟﺪﻭﺭﺓ ،ﻻ ﺳﻴﻤﺎ ﻣﻦ ﺣﻴﺚ ﺍﻟﺘﻜﻠﻔﺔ .ﻧﻈﺮﺍً ﻷﻥ
ﺳﻬﻮﻟﺔﺍﻟﺼﻴﺎﻧﺔ ﻳﺘﻢ ﺗﺤﺪﻳﺪﻫﺎ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻣﻦ ﺧﻼﻝ ﺳﻬﻮﻟﺔ ﻗﺮﺍءﺓ ﺍﻟﺒﺮﺍﻣﺞ ،ﻓﻘﺪ ﺃﺻﺒﺤﺖ
ﻗﺎﺑﻠﻴﺔﺍﻟﻘﺮﺍءﺓ ﻣﻘﻴﺎﺳﺎً ﻣﻬﻤﺎً ﻟﺠﻮﺩﺓ ﺍﻟﺒﺮﺍﻣﺞ ﻭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ .ﻛﺎﻥ ﻫﺬﺍ ﻣﻨﻌﻄﻔﺎً ﻣﻬﻤﺎً ﻓﻲ ﺗﻄﻮﺭ
ﻟﻐﺎﺕﺍﻟﺒﺮﻣﺠﺔ .ﻛﺎﻥ ﻫﻨﺎﻙ ﺗﻘﺎﻃﻊ ﻣﻤﻴﺰ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺰ ﻋﻠﻰ ﺗﻮﺟﻴﻪ ﺍﻵﻟﺔ ﺇﻟﻰ ﺍﻟﺘﺮﻛﻴﺰ ﻋﻠﻰ ﺍﻟﺘﻮﺟﻪ
ﺍﻟﺒﺸﺮﻱ.
ﻳﺠﺐﺍﻟﻨﻈﺮ ﻓﻲ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻓﻲ ﺳﻴﺎﻕ ﻣﺠﺎﻝ ﺍﻟﻤﺸﻜﻠﺔ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺇﺫﺍ ﻛﺎﻥ
ﺍﻟﺒﺮﻧﺎﻣﺞﺍﻟﺬﻱ ﻳﺼﻒ ﻋﻤﻠﻴﺔ ﺣﺴﺎﺑﻴﺔ ﻣﻜﺘﻮﺑﺎً ﺑﻠﻐﺔ ﻏﻴﺮ ﻣﺼﻤﻤﺔ ﻟﻬﺬﺍ ﺍﻻﺳﺘﺨﺪﺍﻡ ،ﻓﻘﺪ ﻳﻜﻮﻥ
ﺍﻟﺒﺮﻧﺎﻣﺞﻏﻴﺮ ﻃﺒﻴﻌﻲ ﻭﻣﻌﻘﺪﺍً ،ﻣﻤﺎ ﻳﺠﻌﻞ ﻗﺮﺍءﺗﻪ ﺻﻌﺒﺔ ﺑﺸﻜﻞ ﻏﻴﺮ ﻋﺎﺩﻱ.
ﺗﺼﻒﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺘﻲ ﺗﺴﺎﻫﻢ ﻓﻲ ﺳﻬﻮﻟﺔ ﻗﺮﺍءﺓ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ.
1.3.1.1ﺍﻟﺒﺴﺎﻃﺔ ﺍﻟﺸﺎﻣﻠﺔ
ﺗﺆﺛﺮﺍﻟﺒﺴﺎﻃﺔ ﺍﻟﻜﻠﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺑﺸﺪﺓ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺘﻬﺎ ﻟﻠﻘﺮﺍءﺓ .ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ
ﻣﻦﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻫﻲ ﺃﻛﺜﺮ ﺻﻌﻮﺑﺔ ﻓﻲ ﺍﻟﺘﻌﻠﻢ ﻣﻦ ﻟﻐﺔ ﺫﺍﺕ ﻋﺪﺩ ﺃﻗﻞ .ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻌﻠﻢ
ﺍﻟﻤﺒﺮﻣﺠﻮﻥﺍﻟﺬﻳﻦ ﻳﺠﺐ ﻋﻠﻴﻬﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ﻛﺒﻴﺮﺓ ﻣﺠﻤﻮﻋﺔ ﻓﺮﻋﻴﺔ ﻣﻦ ﺍﻟﻠﻐﺔ ﻭﻳﺘﺠﺎﻫﻠﻮﻥ
ﻣﻴﺰﺍﺗﻬﺎﺍﻷﺧﺮﻯ .ﻳﺴﺘﺨﺪﻡ ﻧﻤﻂ ﺍﻟﺘﻌﻠﻢ ﻫﺬﺍ ﺃﺣﻴﺎﻧﺎً ﻹﻋﻔﺎء ﺍﻟﻌﺪﺩ ﺍﻟﻜﺒﻴﺮ ﻣﻦ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ ،
9 1.3ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ
ﻟﻜﻦﻫﺬﻩ ﺍﻟﺤﺠﺔ ﻏﻴﺮ ﺻﺤﻴﺤﺔ .ﺗﺤﺪﺙ ﻣﺸﻜﻼﺕ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻋﻨﺪﻣﺎ ﻳﺘﻌﻠﻢ ﻣﺆﻟﻒ ﺍﻟﺒﺮﻧﺎﻣﺞ
ﻣﺠﻤﻮﻋﺔﻓﺮﻋﻴﺔ ﻣﺨﺘﻠﻔﺔ ﻣﻦ ﺗﻠﻚ ﺍﻟﻤﺠﻤﻮﻋﺔ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﻲ ﻳﻌﺮﻓﻬﺎ ﺍﻟﻘﺎﺭﺉ.
ﺍﻟﺴﻤﺔﺍﻟﺜﺎﻧﻴﺔ ﺍﻟﻤﻌﻘﺪﺓ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲﺗﻌﺪﺩ ﺍﻟﻤﻴﺰﺍﺕ -ﺃﻱ ﺃﻥ ﻳﻜﻮﻥ ﻟﺪﻳﻚ ﺃﻛﺜﺮ ﻣﻦ
ﻃﺮﻳﻘﺔﻹﻧﺠﺎﺯ ﻋﻤﻠﻴﺔ ﻣﻌﻴﻨﺔ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻓﻲ ، Javaﻳﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺯﻳﺎﺩﺓ ﻣﺘﻐﻴﺮ
ﻋﺪﺩﺻﺤﻴﺢ ﺑﺴﻴﻂ ﺑﺄﺭﺑﻊ ﻃﺮﻕ ﻣﺨﺘﻠﻔﺔ:
ﺍﻟﻌﺪ++
+ +ﺍﻟﻌﺪ
ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻌﺒﺎﺭﺗﻴﻦ ﺍﻷﺧﻴﺮﻳﻦ ﻟﻬﻤﺎ ﻣﻌﺎﻧﻲ ﻣﺨﺘﻠﻔﺔ ﻗﻠﻴﻼ ًﻋﻦ ﺑﻌﻀﻬﻤﺎ ﺍﻟﺒﻌﺾ ﻭﻋﻦ
ﺍﻵﺧﺮﻳﻦﻓﻲ ﺑﻌﺾ ﺍﻟﺴﻴﺎﻗﺎﺕ ،ﺇﻻ ﺃﻥ ﻛﻞ ﻣﻨﻬﻤﺎ ﻟﻬﺎ ﻧﻔﺲ ﺍﻟﻤﻌﻨﻰ ﻋﻨﺪ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻛﺘﻌﺒﻴﺮﺍﺕ
ﻗﺎﺉﻤﺔﺑﺬﺍﺗﻬﺎ .ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻫﺬﻩ ﺍﻻﺧﺘﻼﻓﺎﺕ ﻓﻲ ﺍﻟﻔﺼﻞ .7
ﺍﻟﻤﺸﻜﻠﺔﺍﻟﺜﺎﻟﺜﺔ ﺍﻟﻤﺤﺘﻤﻠﺔ ﻫﻲﺍﻟﻤﺸﻐﻞ ﺍﻟﺰﺍﺉﺪ ،ﺣﻴﺚ ﻳﻜﻮﻥ ﻟﺮﻣﺰ ﻋﺎﻣﻞ ﻭﺍﺣﺪ ﺃﻛﺜﺮ ﻣﻦ
ﻣﻌﻨﻰ.ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻜﻮﻥ ﻣﻔﻴﺪﺍً ،ﺇﻻ ﺃﻧﻪ ﻳﻤﻜﻦ ﺃﻥ ﻳﺆﺩﻱ ﺇﻟﻰ ﺗﻘﻠﻴﻞ ﻗﺎﺑﻠﻴﺔ
ﺍﻟﻘﺮﺍءﺓﺇﺫﺍ ﺳﻤُﺢ ﻟﻠﻤﺴﺘﺨﺪﻣﻴﻦ ﺑﺈﻧﺸﺎء ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ ﺍﻟﺨﺎﺹ ﺑﻬﻢ ﻭﻋﺪﻡ ﺍﻟﻘﻴﺎﻡ ﺑﺬﻟﻚ ﺑﺸﻜﻞ
ﻣﻌﻘﻮﻝ.ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ ﻣﻦ ﺍﻟﻤﻘﺒﻮﻝ ﺍﺳﺘﺨﺪﺍﻡ + overloadﻻﺳﺘﺨﺪﺍﻣﻪ
ﻓﻲﻛﻞ ﻣﻦ ﺟﻤﻊ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﻭﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ .ﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﻫﺬﺍ ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ
ﻳﺒﺴﻂﺍﻟﻠﻐﺔ ﻋﻦ ﻃﺮﻳﻖ ﺗﻘﻠﻴﻞ ﻋﺪﺩ ﺍﻟﻤﺸﻐﻠﻴﻦ .ﻭﻣﻊ ﺫﻟﻚ ،ﺍﻓﺘﺮﺽ ﺃﻥ ﺍﻟﻤﺒﺮﻣﺞ ﻣﻌﺮﻑ +
ﻣﺴﺘﺨﺪﻡﺑﻴﻦ ﻣﻌﺎﻣﻼﺕ ﺍﻟﻤﺼﻔﻮﻓﺔ ﺃﺣﺎﺩﻳﺔ ﺍﻟﺒﻌﺪ ﻟﻴﻌﻨﻲ ﻣﺠﻤﻮﻉ ﻛﻞ ﻋﻨﺎﺻﺮ ﻛﻼ ﺍﻟﻤﺼﻔﻮﻓﺘﻴﻦ.
ﻧﻈﺮﺍًﻷﻥ ﺍﻟﻤﻌﻨﻰ ﺍﻟﻤﻌﺘﺎﺩ ﻹﺿﺎﻓﺔ ﺍﻟﻤﺘﺠﻪ ﻳﺨﺘﻠﻒ ﺗﻤﺎﻣﺎً ﻋﻦ ﻫﺬﺍ ،ﻓﺈﻧﻪ ﺳﻴﺠﻌﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺃﻛﺜﺮ
ﺇﺭﺑﺎﻛﺎًﻟﻜﻞ ﻣﻦ ﺍﻟﻤﺆﻟﻒ ﻭﻗﺮﺍء ﺍﻟﺒﺮﻧﺎﻣﺞ .ﺃﺣﺪ ﺍﻷﻣﺜﻠﺔ ﺍﻷﻛﺜﺮ ﺗﻄﺮﻓﺎً ﻋﻠﻰ ﺍﺭﺗﺒﺎﻙ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻫﻮ ﻗﻴﺎﻡ
ﺍﻟﻤﺴﺘﺨﺪﻡﺑﺘﻌﺮﻳﻒ +ﺑﻴﻦ ﻣﻌﺎﻣﻠﻴﻦ ﻣﺘﺠﻬﻴﻦ ﻟﻴﻌﻨﻲ ﺍﻟﻔﺮﻕ ﺑﻴﻦ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻷﻭﻟﻰ ﻟﻜﻞ ﻣﻨﻬﻤﺎ.
ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﺍﻟﺤﻤﻞ ﺍﻟﺰﺍﺉﺪ ﻟﻠﻤﺸﻐﻞ ﺑﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ .7
ﺍﻟﺒﺴﺎﻃﺔﻓﻲ ﺍﻟﻠﻐﺎﺕ ﻳﻤﻜﻦ ﺑﺎﻟﻄﺒﻊ ﺗﺠﺎﻭﺯﻫﺎ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻳﻌﺘﺒﺮ ﺷﻜﻞ ﻭﻣﻌﻨﻰ
ﻣﻌﻈﻢﻋﺒﺎﺭﺍﺕ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻧﻤﺎﺫﺝ ﻣﻦ ﺍﻟﺒﺴﺎﻃﺔ ،ﻛﻤﺎ ﺗﺮﻯ ﻋﻨﺪﻣﺎ ﺗﻔﻜﺮ ﻓﻲ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﺘﻲ
ﺗﻈﻬﺮﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻟﺘﺎﻟﻲ .ﻭﻣﻊ ﺫﻟﻚ ،ﻓﺈﻥ ﻫﺬﻩ ﺍﻟﺒﺴﺎﻃﺔ ﺗﺠﻌﻞ ﺑﺮﺍﻣﺞ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﺃﻗﻞ ﻗﺎﺑﻠﻴﺔ
ﻟﻠﻘﺮﺍءﺓ.ﻷﻧﻬﺎ ﺗﻔﺘﻘﺮ ﺇﻟﻰ ﺑﻴﺎﻧﺎﺕ ﺗﺤﻜﻢ ﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ،ﻓﺈﻥ ﻫﻴﻜﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺃﻗﻞ ﻭﺿﻮﺣﺎً ؛ ﻷﻥ
ﺍﻟﻌﺒﺎﺭﺍﺕﺑﺴﻴﻄﺔ ،ﻫﻨﺎﻙ ﺣﺎﺟﺔ ﺇﻟﻰ ﻋﺪﺩ ﺃﻛﺒﺮ ﻣﻨﻬﺎ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻤﺎﺛﻠﺔ ﺑﻠﻐﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ.
ﺗﻨﻄﺒﻖﻫﺬﻩ ﺍﻟﺤﺠﺞ ﻧﻔﺴﻬﺎ ﻋﻠﻰ ﺍﻟﺤﺎﻟﺔ ﺍﻷﻗﻞ ﺗﻄﺮﻓﺎً ﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻣﻊ ﻋﺪﻡ ﻛﻔﺎﻳﺔ
ﻋﻨﺎﺻﺮﺍﻟﺘﺤﻜﻢ ﻭﻫﻴﻜﻠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ.
1.3.1.2ﺍﻟﺘﻌﺎﻣﺪ
ﺍﻟﺘﻌﺎﻣﺪﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﺩﻣﺞ ﻣﺠﻤﻮﻋﺔ ﺻﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ
ﻓﻲﻋﺪﺩ ﺻﻐﻴﺮ ﻧﺴﺒﻴﺎً ﻣﻦ ﺍﻟﻄﺮﻕ ﻟﺒﻨﺎء ﻫﻴﺎﻛﻞ ﺍﻟﺘﺤﻜﻢ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﻠﻐﺔ .ﻋﻼﻭﺓ ﻋﻠﻰ
ﺫﻟﻚ ،ﻛﻞ ﻣﺠﻤﻮﻋﺔ ﻣﻤﻜﻨﺔ ﻣﻦ ﺍﻷﻭﻟﻴﺎﺕ ﻗﺎﻧﻮﻧﻴﺔ ﻭﺫﺍﺕ ﻣﻐﺰﻯ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺿﻊ ﻓﻲ
ﺍﻋﺘﺒﺎﺭﻙ
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 10
ﺃﻧﻮﺍﻉﺍﻟﺒﻴﺎﻧﺎﺕ .ﻟﻨﻔﺘﺮﺽ ﺃﻥ ﺍﻟﻠﻐﺔ ﺑﻬﺎ ﺃﺭﺑﻌﺔ ﺃﻧﻮﺍﻉ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ )ﻋﺪﺩ ﺻﺤﻴﺢ ،ﻋﺪﺩ
ﻋﺸﺮﻱ ،ﻣﺰﺩﻭﺝ ،ﻭﺣﺮﻑ( ﻭﻋﺎﻣﻼﻥ ﻣﻦ ﺍﻟﻨﻮﻉ )ﻣﺼﻔﻮﻓﺔ ﻭﻣﺆﺷﺮ( .ﺇﺫﺍ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺗﻄﺒﻴﻖ
ﻣﺸﻐﻠﻲﺍﻟﻨﻮﻋﻴﻦ ﻋﻠﻰ ﺃﻧﻔﺴﻬﻢ ﻭﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻷﻭﻟﻴﺔ ﺍﻷﺭﺑﻌﺔ ،ﻓﻴﻤﻜﻦ ﺗﺤﺪﻳﺪ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ
ﻫﻴﺎﻛﻞﺍﻟﺒﻴﺎﻧﺎﺕ.
ﻣﻌﻨﻰﻣﻴﺰﺓ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺘﻌﺎﻣﺪﺓ ﻣﺴﺘﻘﻠﺔ ﻋﻦ ﺳﻴﺎﻕ ﻇﻬﻮﺭﻫﺎ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ) .ﺍﻟﻜﻠﻤﺔﻣﺘﻌﺎﻣﺪﻳﺄﺗﻲ
ﻣﻦﺍﻟﻤﻔﻬﻮﻡ ﺍﻟﺮﻳﺎﺿﻲ ﻟﻠﻨﺎﻗﻼﺕ ﺍﻟﻤﺘﻌﺎﻣﺪﺓ ،ﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻣﺴﺘﻘﻠﺔ ﻋﻦ ﺑﻌﻀﻬﺎ ﺍﻟﺒﻌﺾ (.ﺍﻟﺘﻌﺎﻣﺪ
ﻳﺄﺗﻲﻣﻦ ﺗﻨﺎﻇﺮ ﺍﻟﻌﻼﻗﺎﺕ ﺑﻴﻦ ﺍﻷﻭﻟﻴﺎﺕ .ﻳﺆﺩﻱ ﺍﻻﻓﺘﻘﺎﺭ ﺇﻟﻰ ﺍﻟﺘﻌﺎﻣﺪ ﺇﻟﻰ ﺍﺳﺘﺜﻨﺎءﺍﺕ ﻟﻘﻮﺍﻋﺪ
ﺍﻟﻠﻐﺔ.ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﻤﺆﺷﺮﺍﺕ ،ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻣﻦ
ﺍﻟﻤﻤﻜﻦﺗﺤﺪﻳﺪ ﻣﺆﺷﺮ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺃﻱ ﻧﻮﻉ ﻣﺤﺪﺩ ﻣﺤﺪﺩ ﻓﻲ ﺍﻟﻠﻐﺔ .ﻭﻣﻊ ﺫﻟﻚ ،ﺇﺫﺍ ﻟﻢ ﻳﺴُﻤﺢ
ﻟﻠﻤﺆﺷﺮﺍﺕﺑﺎﻹﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ،ﻓﻼ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻌﺮﻓﺔ
ﻣﻦﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻭﺍﻟﺘﻲ ﻳﺤﺘﻤﻞ ﺃﻥ ﺗﻜﻮﻥ ﻣﻔﻴﺪﺓ.
ﻳﻤﻜﻨﻨﺎﺗﻮﺿﻴﺢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻌﺎﻣﺪ ﻛﻤﻔﻬﻮﻡ ﺗﺼﻤﻴﻢ ﻣﻦ ﺧﻼﻝ ﻣﻘﺎﺭﻧﺔ ﺟﺎﻧﺐ ﻭﺍﺣﺪ ﻣﻦ
ﻟﻐﺎﺕﺍﻟﺘﺠﻤﻴﻊ ﻷﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ IBMﺍﻟﻤﺮﻛﺰﻳﺔ ﻭﺳﻠﺴﻠﺔ VAXﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺼﻐﻴﺮﺓ.
ﻧﺤﻦﻧﻌﺘﺒﺮ ﻣﻮﻗﻔﺎً ﻭﺍﺣﺪﺍً ﺑﺴﻴﻄﺎً :ﺇﺿﺎﻓﺔ ﻗﻴﻤﺘﻴﻦ ﺻﺤﻴﺤﺘﻴﻦ 32ﺑﺖ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺍﻟﺬﺍﻛﺮﺓ ﺃﻭ
ﺍﻟﺴﺠﻼﺕﻭﺍﺳﺘﺒﺪﺍﻝ ﺇﺣﺪﻯ ﺍﻟﻘﻴﻤﺘﻴﻦ ﺑﺎﻟﻤﺠﻤﻮﻉ .ﺗﺤﺘﻮﻱ ﺣﻮﺍﺳﻴﺐ IBMﺍﻟﻤﺮﻛﺰﻳﺔ ﻋﻠﻰ
ﺗﻌﻠﻴﻤﺘﻴﻦﻟﻬﺬﺍ ﺍﻟﻐﺮﺽ ،ﻭﺍﻟﺘﻲ ﻟﻬﺎ ﺍﻷﺷﻜﺎﻝ
ﻣﻌﺎﻣﻞ ، ADDL_1ﺍﻟﻤﻌﺎﻣﻞ_2
ﺍﻟﺬﻱﻫﻮ ﺩﻻﻻﺕ
ﺗﺮﺗﺒﻂﺍﻟﺘﻌﺎﻣﺪﻳﺔ ﺍﺭﺗﺒﺎﻃﺎً ﻭﺛﻴﻘﺎً ﺑﺎﻟﺒﺴﺎﻃﺔ :ﻛﻠﻤﺎ ﻛﺎﻥ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﺃﻛﺜﺮ ﺗﻌﺎﻣﺪﺍً ،ﻗﻞ ﻋﺪﺩ
ﺍﻻﺳﺘﺜﻨﺎءﺍﺕﺍﻟﺘﻲ ﺗﺘﻄﻠﺒﻬﺎ ﻗﻮﺍﻋﺪ ﺍﻟﻠﻐﺔ .ﺗﻌﻨﻲ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﺍﻷﻗﻞ ﺩﺭﺟﺔ ﺃﻋﻠﻰ ﻣﻦ ﺍﻻﻧﺘﻈﺎﻡ ﻓﻲ
ﺍﻟﺘﺼﻤﻴﻢ ،ﻣﻤﺎ ﻳﺠﻌﻞ ﺍﻟﻠﻐﺔ ﺃﺳﻬﻞ ﻓﻲ ﺍﻟﺘﻌﻠﻢ ﻭﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻔﻬﻢ .ﻳﻤﻜﻦ ﻷﻱ ﺷﺨﺺ ﺗﻌﻠﻢ ﺟﺰءﺍً
ﻛﺒﻴﺮﺍًﻣﻦ ﺍﻟﻠﻐﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﺃﻥ ﻳﺸﻬﺪ ﻋﻠﻰ ﺻﻌﻮﺑﺔ ﺗﻌﻠﻢ ﺍﺳﺘﺜﻨﺎءﺍﺗﻬﺎ ﺍﻟﻌﺪﻳﺪﺓ ﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ )ﻋﻠﻰ
ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ،ﺃﻧﺎﻗﺒﻞﻩﻣﺎﻋﺪﺍ ﺑﻌﺪﺝ(.
ﻛﺄﻣﺜﻠﺔﻋﻠﻰ ﺍﻻﻓﺘﻘﺎﺭ ﺇﻟﻰ ﺍﻟﺘﻌﺎﻣﺪ ﻓﻲ ﻟﻐﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ،ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﻘﻮﺍﻋﺪ
ﻭﺍﻻﺳﺘﺜﻨﺎءﺍﺕﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ .Cﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻟﻐﺔ Cﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻧﻮﻋﻴﻦ ﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﺍﻟﻤﻨﻈﻤﺔﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺴﺠﻼﺕ )ﻫﻴﻜﻞﻳﻤﻜﻦ ﺇﺭﺟﺎﻉ ﺍﻟﺴﺠﻼﺕ ﻣﻦ ﺍﻟﻮﻇﺎﺉﻒ ﻭﻟﻜﻦ ﻻ
ﻳﻤﻜﻦﻟﻠﻤﺼﻔﻮﻓﺎﺕ .ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻋﻀﻮ ﺍﻟﺒﻨﻴﺔ ﺃﻱ ﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﺑﺎﺳﺘﺜﻨﺎء s( ،ﻓﺎﺭﻍﺃﻭ ﻫﻴﻜﻞ ﻣﻦ
ﻧﻔﺲﺍﻟﻨﻮﻉ .ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻋﻨﺼﺮ ﺍﻟﻤﺼﻔﻮﻓﺔ ﺃﻱ ﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﺑﺎﺳﺘﺜﻨﺎءﻓﺎﺭﻍﺃﻭ ﻭﻇﻴﻔﺔ .ﻳﺘﻢ
ﺗﻤﺮﻳﺮﺍﻟﻤﻌﻠﻤﺎﺕ ﺑﺎﻟﻘﻴﻤﺔ ،ﻣﺎ ﻟﻢ ﺗﻜﻦ ﻣﺼﻔﻮﻓﺎﺕ ،ﻭﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ﻳﺘﻢ ﺗﻤﺮﻳﺮﻫﺎ ﻓﻌﻠﻴﺎً ﻋﻦ
ﻃﺮﻳﻖﺍﻟﻤﺮﺟﻊ )ﻷﻥ ﻇﻬﻮﺭ ﺍﺳﻢ ﻣﺼﻔﻮﻓﺔ ﺑﺪﻭﻥ ﺣﺮﻑ ﻣﻨﺨﻔﺾ ﻓﻲ ﺑﺮﻧﺎﻣﺞ Cﻳﺘﻢ ﺗﻔﺴﻴﺮﻩ ﻋﻠﻰ
ﺃﻧﻪﻋﻨﻮﺍﻥ ﺍﻟﻌﻨﺼﺮ ﺍﻷﻭﻝ ﻟﻠﻤﺼﻔﻮﻓﺔ( .
ﺃ +ﺏ
ﻏﺎﻟﺒﺎًﻣﺎ ﻳﻌﻨﻲ ﻫﺬﺍ ﺍﻟﺘﻌﺒﻴﺮ ﺃﻥ ﻗﻴﻢﺃﻭﺏﻳﺘﻢ ﺟﻠﺒﻬﺎ ﻭﺇﺿﺎﻓﺘﻬﺎ ﻣﻌﺎً .ﻭﻣﻊ ﺫﻟﻚ ،ﺇﺫﺍﺃﻳﺤﺪﺙ ﺃﻥ ﻳﻜﻮﻥ
ﻣﺆﺷﺮﺍً ،ﻓﻬﻮ ﻳﺆﺛﺮ ﻋﻠﻰ ﻗﻴﻤﺔﺏ.ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺇﺫﺍﺃﻳﺸﻴﺮ ﺇﻟﻰ ﻗﻴﻤﺔ ﻋﺎﺉﻤﺔ ﺗﺸﻐﻞ ﺃﺭﺑﻌﺔ
ﺑﺎﻳﺖ ،ﺛﻢ ﻗﻴﻤﺔﺏ
ﻳﺠﺐﺗﺤﺠﻴﻤﻬﺎ -ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ﻣﻀﺮﻭﺑﺔ ﻓﻲ - 4ﻗﺒﻞ ﺇﺿﺎﻓﺘﻬﺎ ﺇﻟﻰﺃ.ﻟﺬﻟﻚ ،ﻓﺈﻥ ﻧﻮﻉﺃﻳﺆﺛﺮ ﻋﻠﻰ
ﻋﻼﺝﻗﻴﻤﺔﺏ.ﺳﻴﺎﻕﺏﻳﺆﺛﺮ ﻋﻠﻰ ﻣﻌﻨﺎﻫﺎ.
ﻳﻤﻜﻦﺃﻥ ﻳﺴﺒﺐ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺍﻟﺘﻌﺎﻣﺪ ﺃﻳﻀﺎً ﻣﺸﺎﻛﻞ .ﺭﺑﻤﺎ ﺗﻜﻮﻥ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻷﻛﺜﺮ ﺗﻌﺎﻣﺪﺍً
ﻫﻲ ( .ALGOL 68 )van Wijngaarden et al. ، 1969ﻛﻞ ﺑﻨﺎء ﻟﻐﺔ ﻓﻲ ALGOL 68ﻟﻪ
ﻧﻮﻉ ،ﻭﻻ ﺗﻮﺟﺪ ﻗﻴﻮﺩ ﻋﻠﻰ ﻫﺬﻩ ﺍﻷﻧﻮﺍﻉ .ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺫﻟﻚ ،ﺗﻨﺘﺞ ﻣﻌﻈﻢ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻗﻴﻤﺎً .ﺗﺴﻤﺢ
ﻫﺬﻩﺍﻟﺤﺮﻳﺔ ﺍﻟﺘﻮﺍﻓﻘﻴﺔ ﺑﺒﻨﺎءﺍﺕ ﻣﻌﻘﺪﺓ ﻟﻠﻐﺎﻳﺔ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻳﻤﻜﻦ ﺃﻥ ﻳﻈﻬﺮ ﺍﻟﺸﺮﻃﻲ
ﻋﻠﻰﺃﻧﻪ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﺴﺮ ﻣﻦ ﺍﻟﻤﻬﻤﺔ ،ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﺍﻹﻋﻼﻧﺎﺕ ﻭﻋﺒﺎﺭﺍﺕ ﻣﺘﻨﻮﻋﺔ ﺃﺧﺮﻯ ،
ﻃﺎﻟﻤﺎﺃﻥ ﺍﻟﻨﺘﻴﺠﺔ ﻫﻲ ﻋﻨﻮﺍﻥ .ﻫﺬﺍ ﺍﻟﺸﻜﻞ ﺍﻟﻤﺘﻄﺮﻑ ﻣﻦ ﺍﻟﺘﻌﺎﻣﺪ ﻳﺆﺩﻱ ﺇﻟﻰ ﺗﻌﻘﻴﺪ ﻏﻴﺮ ﺿﺮﻭﺭﻱ.
ﻋﻼﻭﺓﻋﻠﻰ ﺫﻟﻚ ،ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﻠﻐﺎﺕ ﺗﺘﻄﻠﺐ ﻋﺪﺩﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺍﻷﻭﻟﻴﺎﺕ ،ﻓﺈﻥ ﺩﺭﺟﺔ ﻋﺎﻟﻴﺔ ﻣﻦ
ﺍﻟﺘﻌﺎﻣﺪﺗﺆﺩﻱ ﺇﻟﻰ ﺍﻧﻔﺠﺎﺭ ﻓﻲ ﺍﻟﺘﻮﻟﻴﻔﺎﺕ .ﻟﺬﻟﻚ ،ﺣﺘﻰ ﻟﻮ ﻛﺎﻧﺖ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺑﺴﻴﻄﺔ ،ﻓﺈﻥ
ﺃﻋﺪﺍﺩﻫﻢﺍﻟﻬﺎﺉﻠﺔ ﺗﺆﺩﻱ ﺇﻟﻰ ﺍﻟﺘﻌﻘﻴﺪ.
ﻭﺑﺎﻟﺘﺎﻟﻲ ،ﻓﺈﻥ ﺍﻟﺒﺴﺎﻃﺔ ﻓﻲ ﺍﻟﻠﻐﺔ ﻫﻲ ﻋﻠﻰ ﺍﻷﻗﻞ ﺟﺰﺉﻴﺎً ﻧﺘﻴﺠﺔ ﻣﺰﻳﺞ ﻣﻦ ﻋﺪﺩ ﺻﻐﻴﺮ
ﻧﺴﺒﻴﺎًﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ ﻭﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺤﺪﻭﺩ ﻟﻤﻔﻬﻮﻡ ﺍﻟﺘﻌﺎﻣﺪ.
1.3.1.3ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﻳﻌﺪﻭﺟﻮﺩ ﺍﻟﺘﺴﻬﻴﻼﺕ ﺍﻟﻜﺎﻓﻴﺔ ﻟﺘﺤﺪﻳﺪ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﺍﻟﻠﻐﺔ ﻭﺳﻴﻠﺔ
ﻣﺴﺎﻋﺪﺓﻣﻬﻤﺔ ﺃﺧﺮﻯ ﻟﻘﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺍﻓﺘﺮﺽ ﺃﻥ ﻧﻮﻋﺎً ﺭﻗﻤﻴﺎً ﻳﺴُﺘﺨﺪﻡ
ﻟﻌﻼﻣﺔﻣﺆﺷﺮ ﻷﻧﻪ ﻻ ﻳﻮﺟﺪ ﻧﻮﻉ ﻣﻨﻄﻘﻲ ﻓﻲ ﺍﻟﻠﻐﺔ .ﻓﻲ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ،ﻗﺪ ﻳﻜﻮﻥ ﻟﺪﻳﻨﺎ ﻣﻬﻤﺔ
ﻣﺜﻞﻣﺎ ﻳﻠﻲ:
timeOut =1
ﻣﻌﻨﻰﻫﺬﺍ ﺍﻟﺒﻴﺎﻥ ﻏﻴﺮ ﻭﺍﺿﺢ ،ﺑﻴﻨﻤﺎ ﻓﻲ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﺘﻀﻤﻦ ﺍﻷﻧﻮﺍﻉ ﺍﻟﻤﻨﻄﻘﻴﺔ ،ﺳﻴﻜﻮﻥ ﻟﺪﻳﻨﺎ ﻣﺎ
ﻳﻠﻲ:
= timeOutﺣﻘﻴﻘﻲ
1.3.1.4ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻨﺤﻮﻱ
ﺇﻥﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺃﻭ ﺷﻜﻞ ﻋﻨﺎﺻﺮ ﺍﻟﻠﻐﺔ ﻟﻪ ﺗﺄﺛﻴﺮ ﻛﺒﻴﺮ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺔ ﻗﺮﺍءﺓ ﺍﻟﺒﺮﺍﻣﺞ .ﻓﻴﻤﺎ ﻳﻠﻲ ﺑﻌﺾ
ﺍﻷﻣﺜﻠﺔﻋﻠﻰ ﺧﻴﺎﺭﺍﺕ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ:
• ﻛﻠﻤﺎﺕﺧﺎﺻﺔ.ﻳﺘﺄﺛﺮ ﻣﻈﻬﺮ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻭﺑﺎﻟﺘﺎﻟﻲ ﻗﺎﺑﻠﻴﺔ ﻗﺮﺍءﺓ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺸﺪﺓ ﺑﺄﺷﻜﺎﻝ ﺍﻟﻜﻠﻤﺎﺕ
ﺍﻟﺨﺎﺻﺔﻟﻠﻐﺔ )ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺑﻴﻨﻤﺎﻭ
ﻓﺼﻞ ،ﻭﻝ( .ﻣﻦ ﺍﻟﻤﻬﻢ ﺑﺸﻜﻞ ﺧﺎﺹ ﻃﺮﻳﻘﺔ ﺗﻜﻮﻳﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﻤﺮﻛﺒﺔ ،ﺃﻭ ﻣﺠﻤﻮﻋﺎﺕ
ﺍﻟﻌﺒﺎﺭﺍﺕ ،ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﻓﻲ ﺑﻨﻴﺎﺕ ﺍﻟﺘﺤﻜﻢ .ﺍﺳﺘﺨﺪﻣﺖ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺃﺯﻭﺍﺟﺎً ﻣﺘﻄﺎﺑﻘﺔ
ﻣﻦﺍﻟﻜﻠﻤﺎﺕ ﺃﻭ ﺍﻟﺮﻣﻮﺯ ﺍﻟﺨﺎﺻﺔ ﻟﺘﻜﻮﻳﻦ ﻣﺠﻤﻮﻋﺎﺕ .ﺗﺴﺘﺨﺪﻡ Cﻭﺃﺣﻔﺎﺩﻫﺎ ﺍﻷﻗﻮﺍﺱ
ﻟﺘﺤﺪﻳﺪﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﻤﺮﻛﺒﺔ .ﺗﻌﺎﻧﻲ ﻛﻞ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ ﻷﻥ ﻣﺠﻤﻮﻋﺎﺕ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻳﺘﻢ ﺇﻧﻬﺎﺅﻫﺎ
ﺩﺍﺉﻤﺎًﺑﻨﻔﺲ ﺍﻟﻄﺮﻳﻘﺔ ،ﻣﻤﺎ ﻳﺠﻌﻞ ﻣﻦ ﺍﻟﺼﻌﺐ ﺗﺤﺪﻳﺪ ﺍﻟﻤﺠﻤﻮﻋﺔ ﺍﻟﺘﻲ ﻳﺘﻢ ﺇﻧﻬﺎﺅﻫﺎ ﻋﻨﺪﻣﺎ
ﻧﻬﺎﻳﺔﺃﻭ ﻳﻈﻬﺮ ﻗﻮﺱ ﺃﻳﻤﻦ .ﻳﻮﺿﺢ ﻛﻞ ﻣﻦ Fortran 95ﻭ Adaﻫﺬﺍ ﺍﻷﻣﺮ ﺑﺎﺳﺘﺨﺪﺍﻡ
ﺻﻴﻐﺔﺇﻏﻼﻕ ﻣﻤﻴﺰﺓ ﻟﻜﻞ ﻧﻮﻉ ﻣﻦ ﻣﺠﻤﻮﻋﺎﺕ ﺍﻟﺒﻴﺎﻧﺎﺕ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻳﺴﺘﺨﺪﻡ Ada
ﺇﻧﻬﺎءﺇﺫﺍﻹﻧﻬﺎء ﺑﻨﺎء ﺍﻟﺘﺤﺪﻳﺪ ﻭﺣﻠﻘﺔ ﺍﻟﻨﻬﺎﻳﺔ
ﻹﻧﻬﺎءﺑﻨﺎء ﺣﻠﻘﺔ .ﻫﺬﺍ ﻣﺜﺎﻝ ﻋﻠﻰ ﺍﻟﺘﻌﺎﺭﺽ ﺑﻴﻦ ﺍﻟﺒﺴﺎﻃﺔ ﺍﻟﺬﻱ ﻳﻨﺘﺞ ﻋﻨﻪ ﻋﺪﺩ ﺃﻗﻞ ﻣﻦ
ﺍﻟﻜﻠﻤﺎﺕﺍﻟﻤﺤﺠﻮﺯﺓ ،ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻓﻲ ، ++ Cﻭﺍﻟﻘﺮﺍءﺓ ﺍﻷﻛﺒﺮ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﻨﺘﺞ ﻋﻦ
ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻤﺰﻳﺪ ﻣﻦ ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﻤﺤﺠﻮﺯﺓ ،ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻓﻲ .Ada
ﻫﻨﺎﻙﻣﺴﺄﻟﺔ ﻣﻬﻤﺔ ﺃﺧﺮﻯ ﻭﻫﻲ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺨﺎﺻﺔ ﻟﻠﻐﺔ
ﻛﺄﺳﻤﺎءﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﺇﺫﺍ ﻛﺎﻥ ﺍﻷﻣﺮ ﻛﺬﻟﻚ ،ﻓﻘﺪ ﺗﻜﻮﻥ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻨﺎﺗﺠﺔ ﻣﺮﺑﻜﺔ ﻟﻠﻐﺎﻳﺔ.
ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻓﻲ ، Fortran 95ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺨﺎﺻﺔ ،ﻣﺜﻞﻳﻔﻌﻞ
ﻭﻧﻬﺎﻳﺔ،ﻫﻲ ﺃﺳﻤﺎء ﻣﺘﻐﻴﺮﺍﺕ ﻗﺎﻧﻮﻧﻴﺔ ،ﻟﺬﺍ ﻓﺈﻥ ﻇﻬﻮﺭ ﻫﺬﻩ ﺍﻟﻜﻠﻤﺎﺕ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﻣﺎ ﻗﺪ ﻳﺸﻴﺮ
ﺃﻭﻻ ﻳﺸﻴﺮ ﺇﻟﻰ ﺷﻲء ﺧﺎﺹ.
13 1.3ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ
• ﺍﻟﺸﻜﻞﻭﺍﻟﻤﻌﻨﻰ.ﺗﺼﻤﻴﻢ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺑﺤﻴﺚ ﻳﺸﻴﺮ ﻇﻬﻮﺭﻫﺎ ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﺍﻷﻗﻞ ﺇﻟﻰ ﺍﻟﻐﺮﺽ
ﻣﻨﻬﺎ ،ﻭﻫﻮ ﻣﺴﺎﻋﺪﺓ ﻭﺍﺿﺤﺔ ﻟﺴﻬﻮﻟﺔ ﺍﻟﻘﺮﺍءﺓ .ﻳﺠﺐ ﺃﻥ ﺗﺘﺒﻊ ﺍﻟﺪﻻﻻﺕ ﺃﻭ ﺍﻟﻤﻌﻨﻰ ﻣﺒﺎﺷﺮﺓ
ﻣﻦﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺃﻭ ﺍﻟﺸﻜﻞ .ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ،ﻳﺘﻢ ﺍﻧﺘﻬﺎﻙ ﻫﺬﺍ ﺍﻟﻤﺒﺪﺃ ﻣﻦ ﺧﻼﻝ
ﺗﺮﻛﻴﺒﺘﻴﻦﻟﻐﻮﻳﺘﻴﻦ ﻣﺘﻄﺎﺑﻘﺘﻴﻦ ﺃﻭ ﻣﺘﺸﺎﺑﻬﻴﻦ ﻓﻲ ﺍﻟﻤﻈﻬﺮ ﻭﻟﻜﻦ ﻟﻬﻤﺎ ﻣﻌﺎﻧﻲ ﻣﺨﺘﻠﻔﺔ ،
ﺍﻋﺘﻤﺎﺩﺍًﻋﻠﻰ ﺍﻟﺴﻴﺎﻕ ﺭﺑﻤﺎ .ﻓﻲ
ﺝـ ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ـ ﻣﻌﻨﻰ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻮﺯﺓﺛﺎﺑﺘﺔﻳﻌﺘﻤﺪ ﻋﻠﻰ ﺳﻴﺎﻕ ﻣﻈﻬﺮﻩ .ﺇﺫﺍ ﺗﻢ
ﺍﺳﺘﺨﺪﺍﻣﻪﻓﻲ ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﺩﺍﺧﻞ ﺩﺍﻟﺔ ،ﻓﻬﺬﺍ ﻳﻌﻨﻲ ﺃﻥ ﺍﻟﻤﺘﻐﻴﺮ ﻳﺘﻢ ﺇﻧﺸﺎﺅﻩ ﻓﻲ ﻭﻗﺖ
ﺍﻟﺘﺮﺟﻤﺔ.ﺇﺫﺍ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻓﻲ ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﺧﺎﺭﺝ ﺟﻤﻴﻊ ﺍﻟﻮﻇﺎﺉﻒ ،ﻓﻬﺬﺍ ﻳﻌﻨﻲ ﺃﻥ
ﺍﻟﻤﺘﻐﻴﺮﻣﺮﺉﻲ ﻓﻘﻂ ﻓﻲ ﺍﻟﻤﻠﻒ ﺍﻟﺬﻱ ﻳﻈﻬﺮ ﻓﻴﻪ ﺗﻌﺮﻳﻔﻪ ؛ ﺃﻱ ﺃﻧﻪ ﻻ ﻳﺘﻢ ﺗﺼﺪﻳﺮﻩ ﻣﻦ ﻫﺬﺍ
ﺍﻟﻤﻠﻒ.
ﺇﺣﺪﻯﺍﻟﺸﻜﺎﻭﻯ ﺍﻷﺳﺎﺳﻴﺔ ﺣﻮﻝ ﺃﻭﺍﻣﺮ shellﺍﻟﺨﺎﺻﺔ ﺑـ (UNIX )Raymond، 2004
ﻫﻲﺃﻥ ﻣﻈﻬﺮﻫﺎ ﻻ ﻳﺸﻴﺮ ﺩﺍﺉﻤﺎً ﺇﻟﻰ ﻭﻇﻴﻔﺘﻬﺎ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻣﻌﻨﻰ ﺃﻣﺮ grepUNIX
ﻳﻤﻜﻦﻓﻚ ﺭﻣﻮﺯﻫﺎ ﻓﻘﻂ ﻣﻦ ﺧﻼﻝ ﺍﻟﻤﻌﺮﻓﺔ ﺍﻟﺴﺎﺑﻘﺔ ،ﺃﻭ ﺭﺑﻤﺎ ﺍﻟﺬﻛﺎء ﻭﺍﻹﻟﻤﺎﻡ ﺑﻤﺤﺮﺭ ، UNIX
ﺇﺩ.ﻣﻈﻬﺮ ﺍﻝgrepﻻ ﻳﺸﻴﺮ ﺇﻟﻰ ﺃﻱ ﺷﻲء ﻟﻠﻤﺒﺘﺪﺉﻴﻦ ﻓﻲ ) .UNIXﻓﻲﺇﺩ ،ﺍﻻﻣﺮ/ﺗﻌﺒﻴﺮ ﻋﺎﺩﻱ/
ﻳﺒﺤﺚﻋﻦ ﺳﻠﺴﻠﺔ ﻓﺮﻋﻴﺔ ﺗﻄﺎﺑﻖ ﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﻌﺎﺩﻱ .ﻳﺴﺒﻖ ﻫﺬﺍ ﺑـﺯﻳﺠﻌﻠﻪ ﺃﻣﺮﺍً ﻋﺎﻣﺎً ،ﻣﻊ
ﺗﺤﺪﻳﺪﺃﻥ ﻧﻄﺎﻕ ﺍﻟﺒﺤﺚ ﻫﻮ ﺍﻟﻤﻠﻒ ﺍﻟﺬﻱ ﻳﺘﻢ ﺗﺤﺮﻳﺮﻩ ﺑﺎﻟﻜﺎﻣﻞ .ﺍﺗﺒﺎﻉ ﺍﻷﻣﺮ ﺑﺎﻣﺘﺪﺍﺩﺹﻳﺤﺪﺩ
ﺃﻥﺍﻷﺳﻄﺮ ﺫﺍﺕ ﺍﻟﺴﻠﺴﻠﺔ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻤﻄﺎﺑﻘﺔ ﺳﺘﺘﻢ ﻃﺒﺎﻋﺘﻬﺎ .ﻟﺬﺍﺯ/ﺗﻌﺒﻴﺮ ﻋﺎﺩﻱ /ﻉ ،ﻭﺍﻟﺘﻲ
ﻳﻤﻜﻦﺍﺧﺘﺼﺎﺭﻫﺎ ﺑﻮﺿﻮﺡ ﻛـgrepﻳﻄﺒﻊ ﻛﻞ ﺍﻷﺳﻄﺮ ﻓﻲ ﻣﻠﻒ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺳﻼﺳﻞ ﻓﺮﻋﻴﺔ
ﺗﻄﺎﺑﻖﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﻌﺎﺩﻱ(.
1.3.2ﺍﻟﻘﺎﺑﻠﻴﺔ ﻟﻠﻜﺘﺎﺑﺔ
ﺍﻟﻘﺎﺑﻠﻴﺔﻟﻠﻜﺘﺎﺑﺔ ﻫﻲ ﻣﻘﻴﺎﺱ ﻟﻤﺪﻯ ﺳﻬﻮﻟﺔ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺔ ﻹﻧﺸﺎء ﺑﺮﺍﻣﺞ ﻟﻤﺠﺎﻝ ﻣﺸﻜﻠﺔ ﻣﺨﺘﺎﺭ.
ﺗﺆﺛﺮﺃﻳﻀﺎً ﻣﻌﻈﻢ ﺧﺼﺎﺉﺺ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ .ﻳﺄﺗﻲ ﻫﺬﺍ
ﻣﺒﺎﺷﺮﺓﻣﻦ ﺣﻘﻴﻘﺔ ﺃﻥ ﻋﻤﻠﻴﺔ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺗﺘﻄﻠﺐ ﻣﻦ ﺍﻟﻤﺒﺮﻣﺞ ﺑﺸﻜﻞ ﻣﺘﻜﺮﺭ ﺇﻋﺎﺩﺓ ﻗﺮﺍءﺓ
ﺟﺰءﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﺬﻱ ﺗﻤﺖ ﻛﺘﺎﺑﺘﻪ ﺑﺎﻟﻔﻌﻞ.
ﻛﻤﺎﻫﻮ ﺍﻟﺤﺎﻝ ﻣﻊ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ،ﻳﺠﺐ ﻣﺮﺍﻋﺎﺓ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﻓﻲ ﺳﻴﺎﻕ ﻣﺠﺎﻝ ﺍﻟﻤﺸﻜﻠﺔ
ﺍﻟﻬﺪﻑﻟﻠﻐﺔ .ﺑﺒﺴﺎﻃﺔ ،ﻣﻦ ﻏﻴﺮ ﺍﻟﻤﻌﻘﻮﻝ ﻣﻘﺎﺭﻧﺔ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﺑﻠﻐﺘﻴﻦ ﻓﻲ ﻣﺠﺎﻝ ﺗﻄﺒﻴﻖ ﻣﻌﻴﻦ
ﻋﻨﺪﻣﺎﺗﻢ ﺗﺼﻤﻴﻢ ﺇﺣﺪﺍﻫﻤﺎ ﻟﻬﺬﺍ ﺍﻟﺘﻄﺒﻴﻖ ﻭﺍﻷﺧﺮﻯ ﻟﻢ ﻳﺘﻢ ﺗﺼﻤﻴﻤﻬﺎ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،
ﺗﺨﺘﻠﻒﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﻓﻲ ( Visual BASIC )VBﻭ Cﺑﺸﻜﻞ ﻛﺒﻴﺮ ﻹﻧﺸﺎء ﺑﺮﻧﺎﻣﺞ ﻳﺤﺘﻮﻱ ﻋﻠﻰ
ﻭﺍﺟﻬﺔﻣﺴﺘﺨﺪﻡ ﺭﺳﻮﻣﻴﺔ ،ﻭﺍﻟﺘﻲ ﻳﻌﺘﺒﺮ VBﻣﺜﺎﻟﻴﺎً ﻟﻬﺎ .ﻛﻤﺎ ﺃﻥ ﻛﺘﺎﺑﺎﺗﻬﻢ ﻣﺨﺘﻠﻔﺔ ﺗﻤﺎﻣﺎً ﻋﻦ
ﺑﺮﺍﻣﺞﺃﻧﻈﻤﺔ ﺍﻟﻜﺘﺎﺑﺔ ،ﻣﺜﻞ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ،ﺍﻟﺬﻱ ﺗﻢ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺳﻲ ﻣﻦ ﺃﺟﻠﻪ.
ﺗﺼﻒﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺃﻫﻢ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﻓﻲ ﺍﻟﻠﻐﺔ.
1.3.2.1ﺍﻟﺒﺴﺎﻃﺔ ﻭﺍﻟﺘﻌﺎﻣﺪ
ﺇﺫﺍﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ ،ﻓﻘﺪ ﻻ ﻳﻜﻮﻥ ﺑﻌﺾ
ﺍﻟﻤﺒﺮﻣﺠﻴﻦﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺑﻬﺎ ﺟﻤﻴﻌﺎً .ﻳﻤﻜﻦ ﺃﻥ ﻳﺆﺩﻱ ﻫﺬﺍ ﺍﻟﻤﻮﻗﻒ ﺇﻟﻰ ﺇﺳﺎءﺓ ﺍﺳﺘﺨﺪﺍﻡ ﺑﻌﺾ
ﺍﻟﻤﻴﺰﺍﺕﻭﺇﺳﺎءﺓ ﺍﺳﺘﺨﺪﺍﻡ ﺃﺧﺮﻯ ﻗﺪ ﺗﻜﻮﻥ ﺇﻣﺎ ﺃﻛﺜﺮ ﺃﻧﺎﻗﺔ ﺃﻭ ﺃﻛﺜﺮ
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 14
ﻛﻔﺎءﺓ ،ﺃﻭ ﻛﻠﻴﻬﻤﺎ ،ﻣﻦ ﺗﻠﻚ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ .ﻗﺪ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ،ﻛﻤﺎ ﺃﺷﺎﺭ (، Hoare )1973
ﺍﺳﺘﺨﺪﺍﻡﻣﻴﺰﺍﺕ ﻏﻴﺮ ﻣﻌﺮﻭﻓﺔ ﻋﻦ ﻃﺮﻳﻖ ﺍﻟﺨﻄﺄ ،ﻣﻊ ﻧﺘﺎﺉﺞ ﻏﺮﻳﺒﺔ .ﻟﺬﻟﻚ ،ﻓﺈﻥ ﻋﺪﺩﺍً ﺃﻗﻞ ﻣﻦ
ﺍﻟﺘﺮﻛﻴﺒﺎﺕﺍﻟﺒﺪﺍﺉﻴﺔ ﻭﻣﺠﻤﻮﻋﺔ ﻣﺘﺴﻘﺔ ﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ ﻟﻠﺠﻤﻊ ﺑﻴﻨﻬﺎ )ﺃﻱ ﺍﻟﺘﻌﺎﻣﺪ( ﺃﻓﻀﻞ ﺑﻜﺜﻴﺮ ﻣﻦ
ﻣﺠﺮﺩﻭﺟﻮﺩ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻷﻭﻟﻴﺎﺕ .ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺞ ﺗﺼﻤﻴﻢ ﺣﻞ ﻟﻤﺸﻜﻠﺔ ﻣﻌﻘﺪﺓ ﺑﻌﺪ ﺗﻌﻠﻢ
ﻣﺠﻤﻮﻋﺔﺑﺴﻴﻄﺔ ﻓﻘﻂ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ.
ﻣﻦﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ،ﻳﻤﻜﻦ ﺃﻥ ﻳﺆﺩﻱ ﺍﻹﻓﺮﺍﻁ ﻓﻲ ﺍﻟﺘﻌﺎﻣﺪ ﺇﻟﻰ ﺍﻹﺿﺮﺍﺭ ﺑﺎﻟﻜﺘﺎﺑﺔ .ﻳﻤﻜﻦ ﺃﻻ ﻳﺘﻢ
ﺍﻛﺘﺸﺎﻑﺍﻷﺧﻄﺎء ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ﻋﻨﺪﻣﺎ ﺗﻜﻮﻥ ﺃﻱ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻷﻭﻟﻴﺎﺕ ﺗﻘﺮﻳﺒﺎً ﻗﺎﻧﻮﻧﻴﺔ .ﻳﻤﻜﻦ ﺃﻥ
ﻳﺆﺩﻱﻫﺬﺍ ﺇﻟﻰ ﺳﺨﺎﻓﺎﺕ ﺍﻟﺸﻔﺮﺓ ﺍﻟﺘﻲ ﻻ ﻳﻤﻜﻦ ﻟﻠﻤﺘﺮﺟﻢ ﺍﻛﺘﺸﺎﻓﻬﺎ.
1.3.2.2ﺩﻋﻢ ﺍﻟﺘﺠﺮﻳﺪ
ﺑﺎﺧﺘﺼﺎﺭ،ﺍﻟﺘﺠﺮﻳﺪﺗﻌﻨﻲ ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺗﺤﺪﻳﺪ ﺛﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻬﻴﺎﻛﻞ ﺃﻭ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﻌﻘﺪﺓ ﺑﻄﺮﻕ
ﺗﺴﻤﺢﺑﺘﺠﺎﻫﻞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺎﺻﻴﻞ .ﺍﻟﺘﺠﺮﻳﺪ ﻫﻮ ﻣﻔﻬﻮﻡ ﺭﺉﻴﺴﻲ ﻓﻲ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ
ﺍﻟﻤﻌﺎﺻﺮﺓ.ﻫﺬﺍ ﺍﻧﻌﻜﺎﺱ ﻟﻠﺪﻭﺭ ﺍﻟﻤﺮﻛﺰﻱ ﺍﻟﺬﻱ ﻳﻠﻌﺒﻪ ﺍﻟﺘﺠﺮﻳﺪ ﻓﻲ ﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﺒﺮﺍﻣﺞ
ﺍﻟﺤﺪﻳﺜﺔ.ﻟﺬﺍ ﻓﺈﻥ ﺩﺭﺟﺔ ﺍﻟﺘﺠﺮﻳﺪ ﺍﻟﺘﻲ ﺗﺴﻤﺢ ﺑﻬﺎ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻭﻃﺒﻴﻌﻴﺔ ﺗﻌﺒﻴﺮﻫﺎ ﻣﻬﻤﺎﻥ ﻟﻜﺘﺎﺑﺘﻬﺎ.
ﻳﻤﻜﻦﺃﻥ ﺗﺪﻋﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻓﺉﺘﻴﻦ ﻣﺘﻤﻴﺰﺗﻴﻦ ﻣﻦ ﺍﻟﺘﺠﺮﻳﺪ ﻭﺍﻟﻌﻤﻠﻴﺔ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ.
ﻣﺜﺎﻝﺑﺴﻴﻂ ﻋﻠﻰ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺠﺮﻳﺪ ﻫﻮ ﺍﺳﺘﺨﺪﺍﻡ ﺑﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ ﻟﺘﻨﻔﻴﺬ ﺧﻮﺍﺭﺯﻣﻴﺔ ﺍﻟﻔﺮﺯ
ﺍﻟﻤﻄﻠﻮﺑﺔﻋﺪﺓ ﻣﺮﺍﺕ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﺑﺪﻭﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ،ﻳﺠﺐ ﺗﻜﺮﺍﺭ ﺭﻣﺰ ﺍﻟﻔﺮﺯ ﻓﻲ ﺟﻤﻴﻊ
ﺍﻷﻣﺎﻛﻦﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻓﻴﻬﺎ ﻣﻄﻠﻮﺑﺔ ،ﻣﻤﺎ ﻳﺠﻌﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺃﻃﻮﻝ ﺑﻜﺜﻴﺮ ﻭﺃﻛﺜﺮ ﺻﻌﻮﺑﺔ ﻓﻲ ﺍﻟﻜﺘﺎﺑﺔ.
ﺭﺑﻤﺎﺍﻷﻫﻢ ﻣﻦ ﺫﻟﻚ ،ﺇﺫﺍ ﻟﻢ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ،ﻓﺴﻴﺘﻢ ﺗﺸﻮﻳﺶ ﺍﻟﻜﻮﺩ ﺍﻟﺬﻱ
ﺍﺳﺘﺨﺪﻡﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻟﻠﻔﺮﺯ ﺑﺘﻔﺎﺻﻴﻞ ﺧﻮﺍﺭﺯﻣﻴﺔ ﺍﻟﻔﺮﺯ ،ﻣﻤﺎ ﻳﺆﺩﻱ ﺇﻟﻰ ﺣﺠﺐ ﺍﻟﺘﺪﻓﻖ
ﻭﺍﻟﻬﺪﻑﺍﻟﻌﺎﻡ ﻟﻬﺬﺍ ﺍﻟﺮﻣﺰ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ.
ﻛﻤﺜﺎﻝﻋﻠﻰ ﺗﺠﺮﻳﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺷﺠﺮﺓ ﺛﻨﺎﺉﻴﺔ ﺗﺨﺰﻥ ﺑﻴﺎﻧﺎﺕ ﻋﺪﺩ ﺻﺤﻴﺢ
ﻓﻲﻋﻘﺪﻫﺎ .ﻋﺎﺩﺓ ًﻣﺎ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﺸﺠﺮﺓ ﺍﻟﺜﻨﺎﺉﻴﺔ ﺑﻠﻐﺔ ﻻ ﺗﺪﻋﻢ ﺍﻟﻤﺆﺷﺮﺍﺕ ﻭﺇﺩﺍﺭﺓ
ﺍﻟﺘﺨﺰﻳﻦﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻛﻮﻣﺔ ،ﻣﺜﻞ ، Fortran 77ﻣﺜﻞ ﺛﻼﺛﺔ ﻣﺼﻔﻮﻓﺎﺕ ﺃﻋﺪﺍﺩ
ﺻﺤﻴﺤﺔﻣﺘﻮﺍﺯﻳﺔ ،ﺣﻴﺚ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﺛﻨﻴﻦ ﻣﻦ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﻛﻨﺼﻮﺹ ﻓﺮﻋﻴﺔ ﻟﺘﺤﺪﻳﺪ
ﻋﻘﺪﺍﻟﻨﺴﻞ .ﻓﻲ ++ Cﻭ ، Javaﻳﻤﻜﻦ ﺗﻨﻔﻴﺬ ﻫﺬﻩ ﺍﻷﺷﺠﺎﺭ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺗﺠﺮﻳﺪ ﻋﻘﺪﺓ ﺷﺠﺮﺓ ﻓﻲ
ﺷﻜﻞﻓﺉﺔ ﺑﺴﻴﻄﺔ ﻣﻊ ﻣﺆﺷﺮﻳﻦ )ﺃﻭ ﻣﺮﺍﺟﻊ( ﻭﻋﺪﺩ ﺻﺤﻴﺢ .ﺇﻥ ﻃﺒﻴﻌﻴﺔ ﺍﻟﺘﻤﺜﻴﻞ ﺍﻷﺧﻴﺮ ﺗﺠﻌﻞ
ﻛﺘﺎﺑﺔﺑﺮﻧﺎﻣﺞ ﻳﺴﺘﺨﺪﻡ ﺍﻷﺷﺠﺎﺭ ﺍﻟﺜﻨﺎﺉﻴﺔ ﻓﻲ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ ﺃﺳﻬﻞ ﺑﻜﺜﻴﺮ ﻣﻦ ﻛﺘﺎﺑﺔ ﻭﺍﺣﺪﺓ ﻓﻲ 77
.Fortranﺇﻧﻬﺎ ﻣﺴﺄﻟﺔ ﺑﺴﻴﻄﺔ ﺗﺘﻌﻠﻖ ﺑﻤﺠﺎﻝ ﺣﻞ ﺍﻟﻤﺸﻜﻠﺔ ﺣﻴﺚ ﺗﻜﻮﻥ ﺍﻟﻠﻐﺔ ﺃﻗﺮﺏ ﺇﻟﻰ ﻣﺠﺎﻝ
ﺍﻟﻤﺸﻜﻠﺔ.
1.3.2.3ﺍﻟﺘﻌﺒﻴﺮﻳﺔ
ﻳﻤﻜﻦﺃﻥ ﺗﺸﻴﺮ ﺍﻟﺘﻌﺒﻴﺮﻳﺔ ﻓﻲ ﺍﻟﻠﻐﺔ ﺇﻟﻰ ﻋﺪﺓ ﺧﺼﺎﺉﺺ ﻣﺨﺘﻠﻔﺔ .ﻓﻲ ﻟﻐﺔ ﻣﺜﻞ (Rose ، 1976
، APL )Gilman andﻓﻬﺬﺍ ﻳﻌﻨﻲ ﺃﻥ ﻫﻨﺎﻙ ﻋﻮﺍﻣﻞ ﺗﺸﻐﻴﻞ ﻗﻮﻳﺔ ﺟﺪﺍً ﺗﺴﻤﺢ ﺑﺈﻧﺠﺎﺯ ﻗﺪﺭ ﻛﺒﻴﺮ
ﻣﻦﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ
15 1.3ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ
ﻣﻊﺑﺮﻧﺎﻣﺞ ﺻﻐﻴﺮ ﺟﺪﺍً .ﻭﺑﺸﻜﻞ ﺃﻛﺜﺮ ﺷﻴﻮﻋﺎً ،ﻓﻬﺬﺍ ﻳﻌﻨﻲ ﺃﻥ ﺍﻟﻠﻐﺔ ﻟﺪﻳﻬﺎ ﻃﺮﻕ ﻣﻼﺉﻤﺔ ﻧﺴﺒﻴﺎً ،
ﻭﻟﻴﺴﺖﻣﺮﻫﻘﺔ ،ﻟﺘﺤﺪﻳﺪ ﺍﻟﺤﺴﺎﺑﺎﺕ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻓﻲ ، Cﺍﻟﺘﺮﻣﻴﺰﺍﻟﻌﺪ ++ﻫﻮ ﺃﻛﺜﺮ
ﻣﻼءﻣﺔﻭﺃﻗﺼﺮ ﻣﻦﺍﻟﻌﺪ = ﺍﻟﻌﺪ .1 +ﺃﻳﻀﺎ ،ﻭﺛﻢﻋﺎﻣﻞ ﺍﻟﺘﺸﻐﻴﻞ ﺍﻟﻤﻨﻄﻘﻲ ﻓﻲ Adaﻫﻮ ﻃﺮﻳﻘﺔ
ﻣﻼﺉﻤﺔﻟﺘﺤﺪﻳﺪ ﺗﻘﻴﻴﻢ ﺍﻟﺪﺍﺉﺮﺓ ﺍﻟﻘﺼﻴﺮﺓ ﻟﻠﺘﻌﺒﻴﺮ ﺍﻟﻤﻨﻄﻘﻲ .ﺇﺩﺭﺍﺝ ﻣﻠﻒﻝﺍﻟﻌﺒﺎﺭﺓ ﻓﻲ Java
ﺗﺠﻌﻞﻛﺘﺎﺑﺔ ﺣﻠﻘﺎﺕ ﺍﻟﻌﺪ ﺃﺳﻬﻞ ﻣﻦ ﺍﺳﺘﺨﺪﺍﻡﺑﻴﻨﻤﺎ ،ﻭﻫﻮ ﺃﻣﺮ ﻣﻤﻜﻦ ﺃﻳﻀﺎً .ﻛﻞ ﻫﺬﺍ ﻳﺰﻳﺪ ﻣﻦ
ﻗﺎﺑﻠﻴﺔﺍﻟﻜﺘﺎﺑﺔ ﻟﻠﻐﺔ.
1.3.3ﺍﻟﻤﻮﺛﻮﻗﻴﺔ
ﻳﻘُﺎﻝﺃﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻳﻤﻜﻦ ﺍﻻﻋﺘﻤﺎﺩ ﻋﻠﻴﻪ ﺇﺫﺍ ﻛﺎﻥ ﻳﻌﻤﻞ ﻭﻓﻘﺎً ﻟﻤﻮﺍﺻﻔﺎﺗﻪ ﻓﻲ ﻇﻞ ﺟﻤﻴﻊ ﺍﻟﻈﺮﻭﻑ.
ﺗﺼﻒﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻣﻴﺰﺍﺕ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻟﻬﺎ ﺗﺄﺛﻴﺮ ﻛﺒﻴﺮ ﻋﻠﻰ ﻣﻮﺛﻮﻗﻴﺔ
ﺍﻟﺒﺮﺍﻣﺞﻓﻲ ﻟﻐﺔ ﻣﻌﻴﻨﺔ.
1.3.3.1ﻓﺤﺺ ﺍﻟﻨﻮﻉ
ﻓﺤﺺﺍﻟﻨﻮﻉﻫﻮ ﻣﺠﺮﺩ ﺍﺧﺘﺒﺎﺭ ﻷﺧﻄﺎء ﺍﻟﻜﺘﺎﺑﺔ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﻣﻌﻴﻦ ،ﺇﻣﺎ ﻋﻦ ﻃﺮﻳﻖ ﺍﻟﻤﺘﺮﺟﻢ ﺃﻭ ﺃﺛﻨﺎء
ﺗﻨﻔﻴﺬﺍﻟﺒﺮﻧﺎﻣﺞ .ﻳﻌﺪ ﻓﺤﺺ ﺍﻟﻨﻮﻉ ﻋﺎﻣﻼ ًﻣﻬﻤﺎً ﻓﻲ ﻣﻮﺛﻮﻗﻴﺔ ﺍﻟﻠﻐﺔ .ﻧﻈﺮﺍً ﻷﻥ ﻓﺤﺺ ﻧﻮﻉ ﻭﻗﺖ
ﺍﻟﺘﺸﻐﻴﻞﻣﻜﻠﻒ ،ﻓﺈﻥ ﻓﺤﺺ ﻧﻮﻉ ﻭﻗﺖ ﺍﻟﺘﺮﺟﻤﺔ ﻣﺮﻏﻮﺏ ﻓﻴﻪ ﺃﻛﺜﺮ .ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ،ﻳﺘﻢ
ﺍﻛﺘﺸﺎﻑﺍﻷﺧﻄﺎء ﺍﻟﺴﺎﺑﻘﺔ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ،ﻓﻜﻠﻤﺎ ﻛﺎﻥ ﺇﺟﺮﺍء ﺍﻹﺻﻼﺣﺎﺕ ﺍﻟﻤﻄﻠﻮﺑﺔ ﺃﻗﻞ ﺗﻜﻠﻔﺔ.
ﻳﺘﻄﻠﺐﺗﺼﻤﻴﻢ Javaﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺃﻧﻮﺍﻉ ﺟﻤﻴﻊ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻭﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺗﻘﺮﻳﺒﺎً ﻓﻲ ﻭﻗﺖ
ﺍﻟﺘﺮﺟﻤﺔ.ﻫﺬﺍ ﻳﻘﻀﻲ ﻓﻌﻠﻴﺎً ﻋﻠﻰ ﺃﺧﻄﺎء ﺍﻟﻜﺘﺎﺑﺔ ﻓﻲ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ ﻓﻲ ﺑﺮﺍﻣﺞ .Javaﺗﻤﺖ
ﻣﻨﺎﻗﺸﺔﺍﻷﻧﻮﺍﻉ ﻭﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻟﻨﻮﻉ ﺑﻌﻤﻖ ﻓﻲ ﺍﻟﻔﺼﻞ .6
ﺃﺣﺪﺍﻷﻣﺜﻠﺔ ﻋﻠﻰ ﻛﻴﻔﻴﺔ ﻓﺸﻞ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻟﻜﺘﺎﺑﺔ ،ﺳﻮﺍء ﻓﻲ ﻭﻗﺖ ﺍﻟﺘﺮﺟﻤﺔ ﺃﻭ ﻭﻗﺖ
ﺍﻟﺘﺸﻐﻴﻞ ،ﺃﺩﻯ ﺇﻟﻰ ﺃﺧﻄﺎء ﺑﺮﻧﺎﻣﺞ ﻻ ﺣﺼﺮ ﻟﻬﺎ ﻫﻮ ﺍﺳﺘﺨﺪﺍﻡ ﻣﻌﻠﻤﺎﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻓﻲ ﻟﻐﺔ
Cﺍﻷﺻﻠﻴﺔ ) .(Kernighan and Ritchie ، 1978ﻓﻲ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ،ﻟﻢ ﻳﺘﻢ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﻧﻮﻉ
ﺍﻟﻤﻌﻠﻤﺔﺍﻟﻔﻌﻠﻴﺔ ﻓﻲ ﺍﺳﺘﺪﻋﺎء ﺩﺍﻟﺔ ﻟﺘﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﻧﻮﻋﻬﺎ ﻳﻄﺎﺑﻖ ﻧﻮﻉ ﺍﻟﻤﻌﻠﻤﺔ ﺍﻟﺮﺳﻤﻴﺔ
ﺍﻟﻤﻘﺎﺑﻠﺔﻓﻲ ﺍﻟﻮﻇﻴﻔﺔ .ﺍﻥintﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻣﺘﻐﻴﺮ ﺍﻟﻨﻮﻉ ﻛﻤﻌﺎﻣﻞ ﻓﻌﻠﻲ ﻓﻲ ﺍﺳﺘﺪﻋﺎء ﺩﺍﻟﺔ
ﺗﺘﻮﻗﻊaﻳﻄﻔﻮﺍﻛﺘﺐ ﻛﻤﻌﺎﻣﻞ ﺭﺳﻤﻲ ،ﻭﻟﻦ ﻳﻜﺘﺸﻒ ﺍﻟﻤﺘﺮﺟﻢ ﻭﻻ ﻧﻈﺎﻡ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ ﻋﺪﻡ
ﺍﻻﺗﺴﺎﻕ.ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻧﻈﺮﺍً ﻷﻥ ﺳﻠﺴﻠﺔ ﺍﻟﺒﺖ ﺍﻟﺘﻲ ﺗﻤﺜﻞ ﺍﻟﻌﺪﺩ ﺍﻟﺼﺤﻴﺢ 23ﻏﻴﺮ
ﻣﺮﺗﺒﻄﺔﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﺑﺴﻠﺴﻠﺔ ﺍﻟﺒﺖ ﺍﻟﺘﻲ ﺗﻤﺜﻞ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ ، 23ﺇﺫﺍ ﺗﻢ ﺇﺭﺳﺎﻝ ﻋﺪﺩ
ﺻﺤﻴﺢ 23ﺇﻟﻰ ﺩﺍﻟﺔ ﺗﺘﻮﻗﻊ ﻣﻌﻠﻤﺔ ﻓﺎﺻﻠﺔ ﻋﺎﺉﻤﺔ ،ﻓﺈﻥ ﺃﻱ ﺍﺳﺘﺨﺪﺍﻣﺎﺕ ﻟﻠﻤﻌﺎﻣﻞ ﻓﻲ ﺳﺘﻨﺘﺞ
ﺍﻟﻮﻇﻴﻔﺔﻫﺮﺍء .ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ،ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺼﻌﺐ ﺗﺸﺨﻴﺺ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻤﺸﻜﻼﺕ3.ﻟﻘﺪ ﻗﻀﻰ
ﺍﻹﺻﺪﺍﺭﺍﻟﺤﺎﻟﻲ ﻣﻦ Cﻋﻠﻰ ﻫﺬﻩ ﺍﻟﻤﺸﻜﻠﺔ ﻣﻦ ﺧﻼﻝ ﻃﻠﺐ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﻧﻮﻉ ﺟﻤﻴﻊ ﺍﻟﻤﻌﻠﻤﺎﺕ.
ﺍﻟﺒﺮﺍﻣﺞﺍﻟﻔﺮﻋﻴﺔ ﻭﺗﻘﻨﻴﺎﺕ ﺗﺠﺎﻭﺯ ﺍﻟﻤﻌﻠﻤﺎﺕ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻟﻔﺼﻞ .9
.3ﺭﺩﺍ ًﻋﻠﻰ ﻫﺬﻩ ﺍﻟﻤﺸﻜﻠﺔ ﻭﻏﻴﺮﻫﺎ ﻣﻦ ﺍﻟﻤﺸﺎﻛﻞ ﺍﻟﻤﺸﺎﺑﻬﺔ ،ﺗﺘﻀﻤﻦ ﺃﻧﻈﻤﺔ UNIXﺑﺮﻧﺎﻣﺞ ﻓﺎﺉﺪﺓ ﻣﺴﻤﻰﺍﻟﻮﺑﺮ
ﻳﻘﻮﻡﺑﻔﺤﺺ ﺑﺮﺍﻣﺞ Cﺑﺤﺜﺎً ﻋﻦ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻤﺸﻜﻼﺕ.
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 16
1.3.3.2ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ
ﺇﻥﻗﺪﺭﺓ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻰ ﺍﻋﺘﺮﺍﺽ ﺃﺧﻄﺎء ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ )ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺍﻟﻈﺮﻭﻑ ﻏﻴﺮ ﺍﻟﻌﺎﺩﻳﺔ
ﺍﻷﺧﺮﻯﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻟﻠﺒﺮﻧﺎﻣﺞ ﺍﻛﺘﺸﺎﻓﻬﺎ( ،ﻭﺍﺗﺨﺎﺫ ﺍﻹﺟﺮﺍءﺍﺕ ﺍﻟﺘﺼﺤﻴﺤﻴﺔ ،ﺛﻢ ﺍﻟﻤﺘﺎﺑﻌﺔ ﻫﻲ
ﻣﺴﺎﻋﺪﺓﻭﺍﺿﺤﺔ ﻟﻠﻮﺛﻮﻗﻴﺔ .ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻠﻐﺔﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎء .ﺗﺘﻀﻤﻦ Adaﻭ ++ Cﻭ Java
ﻭ # Cﺇﻣﻜﺎﻧﺎﺕ ﻭﺍﺳﻌﺔ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ،ﻭﻟﻜﻦ ﻫﺬﻩ ﺍﻟﺘﺴﻬﻴﻼﺕ ﻏﻴﺮ ﻣﻮﺟﻮﺩﺓ ﻋﻤﻠﻴﺎً
ﻓﻲﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ،ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ Cﻭ .Fortranﺗﻤﺖ
ﻣﻨﺎﻗﺸﺔﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﻓﻲ ﺍﻟﻔﺼﻞ .14
1.3.3.3ﺍﻟﺘﻌﺮﺝ
ﺗﻌﺮﻳﻔﻬﺎﺑﺸﻜﻞ ﻋﺎﻡ،ﺍﺳﻢ ﻣﺴﺘﻌﺎﺭﻫﻮ ﻭﺟﻮﺩ ﺍﺳﻤﻴﻦ ﻣﻤﻴﺰﻳﻦ ﺃﻭ ﺃﻛﺜﺮ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﻤﺎ
ﻟﻠﻮﺻﻮﻝﺇﻟﻰ ﺧﻠﻴﺔ ﺍﻟﺬﺍﻛﺮﺓ ﻧﻔﺴﻬﺎ .ﻣﻦ ﺍﻟﻤﻘﺒﻮﻝ ﺍﻵﻥ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺃﻥ ﺍﻻﺳﻢ ﺍﻟﻤﺴﺘﻌﺎﺭ ﻫﻮ
ﻣﻴﺰﺓﺧﻄﻴﺮﺓ ﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ .ﺗﺴﻤﺢ ﻣﻌﻈﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺑﻨﻮﻉ ﻣﻦ ﺍﻷﺳﻤﺎء ﺍﻟﻤﺴﺘﻌﺎﺭﺓ -ﻋﻠﻰ
ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ،ﻳﺘﻢ ﺗﻌﻴﻴﻦ ﻣﺆﺷﺮﻳﻦ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﻧﻔﺲ ﺍﻟﻤﺘﻐﻴﺮ ،ﻭﻫﻮ ﺃﻣﺮ ﻣﻤﻜﻦ ﻓﻲ ﻣﻌﻈﻢ
ﺍﻟﻠﻐﺎﺕ.ﻓﻲ ﻣﺜﻞ ﻫﺬﺍ ﺍﻟﺒﺮﻧﺎﻣﺞ ،ﻳﺠﺐ ﺃﻥ ﻳﺘﺬﻛﺮ ﺍﻟﻤﺒﺮﻣﺞ ﺩﺍﺉﻤﺎً ﺃﻥ ﺗﻐﻴﻴﺮ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻲ ﻳﺸﻴﺮ
ﺇﻟﻴﻬﺎﺃﺣﺪﻫﻤﺎ ﻳﻐﻴﺮ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺘﻲ ﻳﺸﻴﺮ ﺇﻟﻴﻬﺎ ﺍﻵﺧﺮ .ﻳﻤﻜﻦ ﺣﻈﺮ ﺑﻌﺾ ﺃﻧﻮﺍﻉ ﺍﻟﺘﺸﻮﻳﺶ ،ﻛﻤﺎ ﻫﻮ
ﻣﻮﺿﺢﻓﻲ ﺍﻟﻔﺼﻠﻴﻦ 5ﻭ 9ﺑﺘﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ.
ﻓﻲﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ،ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻷﺳﻤﺎء ﺍﻟﻤﺴﺘﻌﺎﺭﺓ ﻟﻠﺘﻐﻠﺐ ﻋﻠﻰ ﺃﻭﺟﻪ ﺍﻟﻘﺼﻮﺭ ﻓﻲ ﻣﺮﺍﻓﻖ
ﺗﺠﺮﻳﺪﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﻠﻐﺔ .ﺗﻌﻤﻞ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﻋﻠﻰ ﺗﻘﻴﻴﺪ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻷﺳﻤﺎء ﺍﻟﻤﺴﺘﻌﺎﺭﺓ
ﺑﺸﻜﻞﻛﺒﻴﺮ ﻟﺰﻳﺎﺩﺓ ﻣﻮﺛﻮﻗﻴﺘﻬﺎ.
ﺗﺆﺛﺮﺇﻣﻜﺎﻧﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻋﻠﻰ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﻓﻲ ﻣﺮﺣﻠﺘﻲ ﺍﻟﻜﺘﺎﺑﺔ ﻭﺍﻟﺼﻴﺎﻧﺔ ﻟﺪﻭﺭﺓ ﺍﻟﺤﻴﺎﺓ .ﺍﻟﺒﺮﺍﻣﺞ
ﺍﻟﺘﻲﻳﺼﻌﺐ ﻗﺮﺍءﺗﻬﺎ ﻳﺼﻌﺐ ﻛﺘﺎﺑﺘﻬﺎ ﻭﺗﻌﺪﻳﻠﻬﺎ.
1.3.4ﺍﻟﺘﻜﻠﻔﺔ
ﺍﻟﺘﻜﻠﻔﺔﺍﻹﺟﻤﺎﻟﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﺩﺍﻟﺔ ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﺧﺼﺎﺉﺼﻬﺎ.
ﺃﻭﻻ ً،ﻫﻨﺎﻙ ﺗﻜﻠﻔﺔ ﺗﺪﺭﻳﺐ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺔ ،ﻭﻫﻲ ﺩﺍﻟﺔ ﻋﻠﻰ ﺑﺴﺎﻃﺔ ﺍﻟﻠﻐﺔ
ﻭﺗﻌﺎﻣﺪﻫﺎﻭﺧﺒﺮﺓ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ .ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻠﻐﺎﺕ ﺍﻷﻛﺜﺮ ﻗﻮﺓ ﻟﻴﺴﺖ ﺑﺎﻟﻀﺮﻭﺭﺓ ﺃﻛﺜﺮ
ﺻﻌﻮﺑﺔﻓﻲ ﺍﻟﺘﻌﻠﻢ ،ﺇﻻ ﺃﻧﻬﺎ ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﻜﻮﻥ ﻛﺬﻟﻚ.
ﺛﺎﻧﻴﺎً ،ﻫﻨﺎﻙ ﺗﻜﻠﻔﺔ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺎﻟﻠﻐﺔ .ﻫﺬﻩ ﻫﻲ ﻭﻇﻴﻔﺔ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻠﻐﺔ ﻟﻠﻜﺘﺎﺑﺔ ،ﻭﺍﻟﺘﻲ
ﺗﻌﺘﻤﺪﺟﺰﺉﻴﺎً ﻋﻠﻰ ﻗﺮﺑﻬﺎ ﻓﻲ ﺍﻟﻐﺮﺽ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﻤﻌﻴﻦ .ﺍﻟﺠﻬﻮﺩ ﺍﻷﺻﻠﻴﺔ ﻟﺘﺼﻤﻴﻢ ﻭ
17 1.3ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ
ﺗﻨﻔﻴﺬﻟﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻛﺎﻧﺖ ﻣﺪﻓﻮﻋﺔ ﺑﺎﻟﺮﻏﺒﺔ ﻓﻲ ﺧﻔﺾ ﺗﻜﺎﻟﻴﻒ ﺇﻧﺸﺎء ﺍﻟﺒﺮﺍﻣﺞ.
ﻳﻤﻜﻦﺗﻘﻠﻴﻞ ﻛﻞ ﻣﻦ ﺗﻜﻠﻔﺔ ﺗﺪﺭﻳﺐ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻭﺗﻜﻠﻔﺔ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﻠﻐﺔ ﻣﺎ ﺑﺸﻜﻞ ﻛﺒﻴﺮ
ﻓﻲﺑﻴﺉﺔ ﺑﺮﻣﺠﺔ ﺟﻴﺪﺓ .ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﺍﻟﻘﺴﻢ .1.8
ﺛﺎﻟﺜﺎً ،ﻫﻨﺎﻙ ﺗﻜﻠﻔﺔ ﺗﺮﺟﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺎﻟﻠﻐﺔ .ﻛﺎﻥ ﺍﻟﻌﺎﺉﻖ ﺍﻟﺮﺉﻴﺴﻲ ﺃﻣﺎﻡ ﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺒﻜﺮ
ﻟـ Adaﻫﻮ ﺍﻟﺘﻜﻠﻔﺔ ﺍﻟﺒﺎﻫﻈﺔ ﻟﺘﺸﻐﻴﻞ ﺍﻟﺠﻴﻞ ﺍﻷﻭﻝ ﻣﻦ ﺑﺮﺍﻣﺞ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ .Adaﺗﻢ ﺗﻘﻠﻴﻞ
ﻫﺬﻩﺍﻟﻤﺸﻜﻠﺔ ﻣﻦ ﺧﻼﻝ ﻇﻬﻮﺭ ﺑﺮﺍﻣﺞ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ Adaﺍﻟﻤﺤﺴﻨّﺔ.
ﺭﺍﺑﻌﺎً ،ﺗﺘﺄﺛﺮ ﺗﻜﻠﻔﺔ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ ﻣﺎ ﺑﺸﻜﻞ ﻛﺒﻴﺮ ﺑﺘﺼﻤﻴﻢ ﺗﻠﻚ ﺍﻟﻠﻐﺔ.
ﺳﺘﻤﻨﻊﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﺘﻄﻠﺐ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﻧﻮﻉ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ ﺗﻨﻔﻴﺬ
ﺍﻟﺘﻌﻠﻴﻤﺎﺕﺍﻟﺒﺮﻣﺠﻴﺔ ﺑﺴﺮﻋﺔ ،ﺑﻐﺾ ﺍﻟﻨﻈﺮ ﻋﻦ ﺟﻮﺩﺓ ﺍﻟﻤﺘﺮﺟﻢ .ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻛﻔﺎءﺓ ﺍﻟﺘﻨﻔﻴﺬ
ﻛﺎﻧﺖﺍﻟﺸﻐﻞ ﺍﻟﺸﺎﻏﻞ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺒﻜﺮﺓ ،ﺇﻻ ﺃﻧﻬﺎ ﺗﻌﺘﺒﺮ ﺍﻵﻥ ﺃﻗﻞ ﺃﻫﻤﻴﺔ.
ﻳﻤﻜﻦﺇﺟﺮﺍء ﻣﻔﺎﺿﻠﺔ ﺑﺴﻴﻄﺔ ﺑﻴﻦ ﺗﻜﻠﻔﺔ ﺍﻟﺘﺮﺟﻤﺔ ﻭﺳﺮﻋﺔ ﺗﻨﻔﻴﺬ ﺍﻟﻜﻮﺩ ﺍﻟﻤﺘﺮﺟﻢ.ﺗﺤﺴﻴﻦ
ﻫﻮﺍﻻﺳﻢ ﺍﻟﺬﻱ ﻳﻄﻠﻖ ﻋﻠﻰ ﻣﺠﻤﻮﻋﺔ ﺍﻟﺘﻘﻨﻴﺎﺕ ﺍﻟﺘﻲ ﻗﺪ ﻳﺴﺘﺨﺪﻣﻬﺎ ﺍﻟﻤﺘﺮﺟﻤﻮﻥ ﻟﺘﻘﻠﻴﻞ ﺍﻟﺤﺠﻢ ﻭ
/ﺃﻭ ﺯﻳﺎﺩﺓ ﺳﺮﻋﺔ ﺗﻨﻔﻴﺬ ﺍﻟﺸﻔﺮﺓ ﺍﻟﺘﻲ ﻳﻨﺘﺠﻮﻧﻬﺎ .ﺇﺫﺍ ﺗﻢ ﺇﺟﺮﺍء ﺍﻟﻘﻠﻴﻞ ﻣﻦ ﺍﻟﺘﺤﺴﻴﻦ ﺃﻭ ﻟﻢ ﻳﺘﻢ
ﺇﺟﺮﺍءﺃﻱ ﺗﺤﺴﻴﻦ ،ﻓﻴﻤﻜﻦ ﺇﺟﺮﺍء ﺍﻟﺘﺠﻤﻴﻊ ﺑﺸﻜﻞ ﺃﺳﺮﻉ ﺑﻜﺜﻴﺮ ﻣﻤﺎ ﻟﻮ ﺗﻢ ﺑﺬﻝ ﺟﻬﺪ ﻛﺒﻴﺮ ﻹﻧﺘﺎﺝ
ﻛﻮﺩﻣﺤﺴﻦ .ﻳﺘﺄﺛﺮ ﺍﻻﺧﺘﻴﺎﺭ ﺑﻴﻦ ﺍﻟﺒﺪﻳﻠﻴﻦ ﺑﺎﻟﺒﻴﺉﺔ ﺍﻟﺘﻲ ﺳﻴﺘﻢ ﻓﻴﻬﺎ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺘﺮﺟﻢ .ﻓﻲ
ﻣﻌﻤﻞﻟﺒﺪء ﺍﻟﺒﺮﻣﺠﺔ ﻟﻠﻄﻼﺏ ،ﺍﻟﺬﻳﻦ ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻘﻮﻣﻮﻥ ﺑﺘﺠﻤﻴﻊ ﺑﺮﺍﻣﺠﻬﻢ ﻋﺪﺓ ﻣﺮﺍﺕ ﺃﺛﻨﺎء
ﺍﻟﺘﻄﻮﻳﺮﻭﻟﻜﻨﻬﻢ ﻳﺴﺘﺨﺪﻣﻮﻥ ﺍﻟﻘﻠﻴﻞ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ ﻓﻲ ﻭﻗﺖ ﺍﻟﺘﻨﻔﻴﺬ )ﺑﺮﺍﻣﺠﻬﻢ
ﺻﻐﻴﺮﺓﻭﻳﺠﺐ ﻋﻠﻴﻬﻢ ﺗﻨﻔﻴﺬﻫﺎ ﺑﺸﻜﻞ ﺻﺤﻴﺢ ﻣﺮﺓ ﻭﺍﺣﺪﺓ ﻓﻘﻂ( ،ﻳﺠﺐ ﺇﺟﺮﺍء ﺍﻟﻘﻠﻴﻞ ﻣﻦ
ﺍﻟﺘﺤﺴﻴﻦﺃﻭ ﻋﺪﻡ ﺍﻟﻘﻴﺎﻡ ﺑﺬﻟﻚ ﻋﻠﻰ ﺍﻹﻃﻼﻕ .ﻓﻲ ﺑﻴﺉﺔ ﺍﻹﻧﺘﺎﺝ ،ﺣﻴﺚ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﺍﻣﺞ
ﺍﻟﻤﺘﺮﺟﻤﺔﻋﺪﺓ ﻣﺮﺍﺕ ﺑﻌﺪ ﺍﻟﺘﻄﻮﻳﺮ ،ﻣﻦ ﺍﻷﻓﻀﻞ ﺩﻓﻊ ﺗﻜﻠﻔﺔ ﺇﺿﺎﻓﻴﺔ ﻟﺘﺤﺴﻴﻦ ﺍﻟﻜﻮﺩ.
ﺍﻟﻌﺎﻣﻞﺍﻟﺨﺎﻣﺲ ﻓﻲ ﺗﻜﻠﻔﺔ ﺍﻟﻠﻐﺔ ﻫﻮ ﺗﻜﻠﻔﺔ ﻧﻈﺎﻡ ﺗﻄﺒﻴﻖ ﺍﻟﻠﻐﺔ .ﺃﺣﺪ ﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﺘﻲ ﺗﻔﺴﺮ
ﺍﻟﻘﺒﻮﻝﺍﻟﺴﺮﻳﻊ ﻟـ Javaﻫﻮ ﺃﻥ ﺃﻧﻈﻤﺔ ﺍﻟﻤﺘﺮﺟﻢ /ﺍﻟﻤﺘﺮﺟﻢ ﺍﻟﻔﻮﺭﻱ ﺃﺻﺒﺤﺖ ﻣﺘﺎﺣﺔ ﻟﻬﺎ ﺑﻌﺪ ﻭﻗﺖ
ﻗﺼﻴﺮﻣﻦ ﺇﺻﺪﺍﺭ ﺗﺼﻤﻴﻤﻬﺎ .ﺳﻴﻜﻮﻥ ﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﻜﻮﻥ ﻧﻈﺎﻡ ﺗﻨﻔﻴﺬﻫﺎ ﺑﺎﻫﻆ ﺍﻟﺜﻤﻦ ﺃﻭ ﻳﻌﻤﻞ ﻓﻘﻂ
ﻋﻠﻰﺃﺟﻬﺰﺓ ﺑﺎﻫﻈﺔ ﺍﻟﺜﻤﻦ ﻓﺮﺻﺔ ﺃﻗﻞ ﺑﻜﺜﻴﺮ ﻓﻲ ﺃﻥ ﺗﺼﺒﺢ ﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ .ﻋﻠﻰ
ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ،ﺳﺎﻋﺪﺕ ﺍﻟﺘﻜﻠﻔﺔ ﺍﻟﻌﺎﻟﻴﺔ ﻟﻤﺠﻤﻌﻲ Adaﻣﻦ ﺍﻟﺠﻴﻞ ﺍﻷﻭﻝ ﻓﻲ ﻣﻨﻊ Adaﻣﻦ ﺃﻥ
ﺗﺼﺒﺢﺷﺎﺉﻌﺔ ﻓﻲ ﺃﻳﺎﻣﻬﺎ ﺍﻷﻭﻟﻰ.
ﺳﺎﺩﺳﺎ ً،ﻫﻨﺎﻙ ﺗﻜﻠﻔﺔ ﺿﻌﻒ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ .ﺇﺫﺍ ﻓﺸﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﻧﻈﺎﻡ ﺣﺮﺝ ،ﻣﺜﻞ ﻣﺤﻄﺔ
ﻟﻠﻄﺎﻗﺔﺍﻟﻨﻮﻭﻳﺔ ﺃﻭ ﺟﻬﺎﺯ ﺍﻷﺷﻌﺔ ﺍﻟﺴﻴﻨﻴﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﺍﻟﻄﺒﻲ ،ﻓﻘﺪ ﺗﻜﻮﻥ ﺍﻟﺘﻜﻠﻔﺔ ﻋﺎﻟﻴﺔ ﺟﺪﺍً.
ﻳﻤﻜﻦﺃﻥ ﻳﻜﻮﻥ ﻓﺸﻞ ﺍﻷﻧﻈﻤﺔ ﻏﻴﺮ ﺍﻟﺤﺮﺟﺔ ﺃﻳﻀﺎً ﻣﻜﻠﻔﺎً ﻟﻠﻐﺎﻳﺔ ﻣﻦ ﺣﻴﺚ ﻓﻘﺪﺍﻥ ﺍﻷﻋﻤﺎﻝ ﺃﻭ
ﺍﻟﺪﻋﺎﻭﻯﺍﻟﻘﻀﺎﺉﻴﺔ ﻓﻲ ﺍﻟﻤﺴﺘﻘﺒﻞ ﺑﺴﺒﺐ ﺃﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻌﻴﺒﺔ.
ﺍﻻﻋﺘﺒﺎﺭﺍﻷﺧﻴﺮ ﻫﻮ ﺗﻜﻠﻔﺔ ﺻﻴﺎﻧﺔ ﺍﻟﺒﺮﺍﻣﺞ ،ﻭﺍﻟﺘﻲ ﺗﺘﻀﻤﻦ ﻛﻼ ًﻣﻦ ﺍﻟﺘﺼﺤﻴﺤﺎﺕ ﻭﺍﻟﺘﻌﺪﻳﻼﺕ
ﻹﺿﺎﻓﺔﻭﻇﺎﺉﻒ ﺟﺪﻳﺪﺓ .ﺗﻌﺘﻤﺪ ﺗﻜﻠﻔﺔ ﺻﻴﺎﻧﺔ ﺍﻟﺒﺮﺍﻣﺞ ﻋﻠﻰ ﻋﺪﺩ ﻣﻦ ﺧﺼﺎﺉﺺ ﺍﻟﻠﻐﺔ ،ﻭﻫﻲ
ﻗﺎﺑﻠﻴﺔﺍﻟﻘﺮﺍءﺓ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ .ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﺼﻴﺎﻧﺔ ﻳﺘﻢ ﺇﺟﺮﺍﺅﻫﺎ ﻏﺎﻟﺒﺎً ﺑﻮﺍﺳﻄﺔ ﺃﻓﺮﺍﺩ ﺑﺨﻼﻑ
ﺍﻟﻤﺆﻟﻒﺍﻷﺻﻠﻲ ﻟﻠﺒﺮﻧﺎﻣﺞ ،ﻓﺈﻥ ﺿﻌﻒ ﺍﻟﻘﺮﺍءﺓ ﻳﻤﻜﻦ ﺃﻥ ﻳﺠﻌﻞ ﺍﻟﻤﻬﻤﺔ ﺻﻌﺒﺔ ﻟﻠﻐﺎﻳﺔ.
ﻻﻳﻤﻜﻦ ﺍﻟﻤﺒﺎﻟﻐﺔ ﻓﻲ ﺃﻫﻤﻴﺔ ﺇﻣﻜﺎﻧﻴﺔ ﺻﻴﺎﻧﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﺗﺸﻴﺮ ﺍﻟﺘﻘﺪﻳﺮﺍﺕ ﺇﻟﻰ ﺃﻧﻪ ﺑﺎﻟﻨﺴﺒﺔ
ﻷﻧﻈﻤﺔﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻜﺒﻴﺮﺓ ﺫﺍﺕ ﺍﻷﻋﻤﺎﺭ ﺍﻟﻄﻮﻳﻠﺔ ﻧﺴﺒﻴﺎً ،ﻳﻤﻜﻦ ﺃﻥ ﺗﺼﻞ ﺗﻜﺎﻟﻴﻒ ﺍﻟﺼﻴﺎﻧﺔ ﺇﻟﻰ
ﺿﻌﻔﻴﻦﺇﻟﻰ ﺃﺭﺑﻌﺔ ﺃﺿﻌﺎﻑ ﺗﻜﺎﻟﻴﻒ ﺍﻟﺘﻄﻮﻳﺮ ).(Sommerville ، 2005
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 18
ﻣﻦﺑﻴﻦ ﺟﻤﻴﻊ ﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﻤﺴﺎﻫﻤﺔ ﻓﻲ ﺗﻜﺎﻟﻴﻒ ﺍﻟﻠﻐﺔ ،ﻫﻨﺎﻙ ﺛﻼﺛﺔ ﻋﻮﺍﻣﻞ ﺃﻛﺜﺮ ﺃﻫﻤﻴﺔ:
ﺗﻄﻮﻳﺮﺍﻟﺒﺮﺍﻣﺞ ،ﻭﺍﻟﺼﻴﺎﻧﺔ ،ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ .ﻧﻈﺮﺍً ﻷﻥ ﻫﺎﺗﻴﻦ ﺍﻟﻮﻇﻴﻔﺘﻴﻦ ﻫﻤﺎ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ
ﻭﺍﻟﻘﺮﺍءﺓ ،ﻓﺈﻥ ﻣﻌﻴﺎﺭ ﺍﻟﺘﻘﻴﻴﻢ ﻫﺬﻳﻦ ﻫﻤﺎ ،ﺑﺪﻭﺭﻩ ،ﺍﻷﻛﺜﺮ ﺃﻫﻤﻴﺔ.
ﺑﺎﻟﻄﺒﻊ ،ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻋﺪﺩ ﻣﻦ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻷﺧﺮﻯ ﻟﺘﻘﻴﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ .ﻣﺜﺎﻝ ﻭﺍﺣﺪ ﻫﻮ
ﻗﺎﺑﻠﻴﺔﺍﻟﺘﻨﻘﻞ ،ﺃﻭ ﺍﻟﺴﻬﻮﻟﺔ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺑﻬﺎ ﻧﻘﻞ ﺍﻟﺒﺮﺍﻣﺞ ﻣﻦ ﺗﻄﺒﻴﻖ ﺇﻟﻰ ﺁﺧﺮ .ﺗﺘﺄﺛﺮ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻨﻘﻞ
ﺑﺸﺪﺓﺑﺪﺭﺟﺔ ﺗﻮﺣﻴﺪ ﺍﻟﻠﻐﺔ .ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ،ﻣﺜﻞ ، BASICﻟﻴﺴﺖ ﻣﻮﺣﺪﺓ ﻋﻠﻰ ﺍﻹﻃﻼﻕ ،ﻣﻤﺎ
ﻳﺠﻌﻞﺍﻟﺒﺮﺍﻣﺞ ﺑﻬﺬﻩ ﺍﻟﻠﻐﺎﺕ ﺻﻌﺒﺔ ﻟﻠﻐﺎﻳﺔ ﻟﻼﻧﺘﻘﺎﻝ ﻣﻦ ﺗﻄﺒﻴﻖ ﺇﻟﻰ ﺁﺧﺮ .ﺍﻟﺘﻘﻴﻴﺲ ﻋﻤﻠﻴﺔ ﺻﻌﺒﺔ
ﻭﺗﺴﺘﻐﺮﻕﻭﻗﺘﺎ ﻃﻮﻳﻼ .ﺑﺪﺃﺕ ﻟﺠﻨﺔ ﺍﻟﻌﻤﻞ ﻋﻠﻰ ﺇﻧﺘﺎﺝ ﻧﺴﺨﺔ ﻣﻌﻴﺎﺭﻳﺔ ﻣﻦ ++ Cﻓﻲ ﻋﺎﻡ .1989
ﻭﺗﻤﺖﺍﻟﻤﻮﺍﻓﻘﺔ ﻋﻠﻴﻬﺎ ﻓﻲ ﻋﺎﻡ .1998
ﻣﻌﻈﻢﺍﻟﻤﻌﺎﻳﻴﺮ ،ﺧﺎﺻﺔ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻜﺘﺎﺑﺔ ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ ،ﻟﻴﺴﺖ ﻣﺤﺪﺩﺓ ﺑﺪﻗﺔ ﻭﻻ
ﻗﺎﺑﻠﺔﻟﻠﻘﻴﺎﺱ ﺗﻤﺎﻣﺎً .ﻭﻣﻊ ﺫﻟﻚ ،ﻓﻬﻲ ﻣﻔﺎﻫﻴﻢ ﻣﻔﻴﺪﺓ ﻭﺗﻮﻓﺮ ﺭﺅﻳﺔ ﻗﻴﻤﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﻭﺗﻘﻴﻴﻢ
ﻟﻐﺎﺕﺍﻟﺒﺮﻣﺠﺔ.
ﻣﻼﺣﻈﺔﺃﺧﻴﺮﺓ ﺣﻮﻝ ﻣﻌﺎﻳﻴﺮ ﺍﻟﺘﻘﻴﻴﻢ :ﻳﺘﻢ ﺗﻘﻴﻴﻢ ﻣﻌﺎﻳﻴﺮ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﺑﺸﻜﻞ ﻣﺨﺘﻠﻒ ﻣﻦ
ﻭﺟﻬﺎﺕﻧﻈﺮ ﻣﺨﺘﻠﻔﺔ .ﻳﻬﺘﻢ ﺍﻟﻘﺎﺉﻤﻮﻥ ﻋﻠﻰ ﺗﻨﻔﻴﺬ ﺍﻟﻠﻐﺔ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ ﺑﺼﻌﻮﺑﺔ ﺗﻨﻔﻴﺬ ﺑﻨﻴﺎﺕ
ﻭﻣﻴﺰﺍﺕﺍﻟﻠﻐﺔ .ﻳﺸﻌﺮ ﻣﺴﺘﺨﺪﻣﻮ ﺍﻟﻠﻐﺔ ﺑﺎﻟﻘﻠﻖ ﺑﺸﺄﻥ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﺃﻭﻻ ًﻭﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻻﺣﻘﺎً.
ﻣﻦﺍﻟﻤﺮﺟﺢ ﺃﻥ ﻳﺆﻛﺪ ﻣﺼﻤﻤﻮ ﺍﻟﻠﻐﺔ ﻋﻠﻰ ﺍﻷﻧﺎﻗﺔ ﻭﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺟﺬﺏ ﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻮﺍﺳﻊ .ﻏﺎﻟﺒﺎً ﻣﺎ
ﺗﺘﻌﺎﺭﺽﻫﺬﻩ ﺍﻟﺨﺼﺎﺉﺺ ﻣﻊ ﺑﻌﻀﻬﺎ ﺍﻟﺒﻌﺾ.
1.4.1ﻫﻨﺪﺳﺔ ﺍﻟﺤﺎﺳﻮﺏ
ﻛﺎﻥﻟﻠﺒﻨﻴﺔ ﺍﻷﺳﺎﺳﻴﺔ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﺄﺛﻴﺮ ﻋﻤﻴﻖ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ .ﺗﻢ ﺗﺼﻤﻴﻢ ﻣﻌﻈﻢ
ﺍﻟﻠﻐﺎﺕﺍﻟﺸﺎﺉﻌﺔ ﻓﻲ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً ﺍﻟﻤﺎﺿﻴﺔ ﺣﻮﻝ ﺑﻨﻴﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺴﺎﺉﺪﺓ ،ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰ
ﺍﻟﻌﻤﺎﺭﺓﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ ،ﻋﻠﻰ ﺍﺳﻢ ﺃﺣﺪ ﻣﻨﺸﺉﻴﻬﺎ ،ﺟﻮﻥ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ )ﻳﻨُﻄﻖ "ﻓﻮﻥ ﻧﻮﻳﻤﺎﻥ"(.
ﺗﺴﻤﻰﻫﺬﻩ ﺍﻟﻠﻐﺎﺕﺇﻟﺰﺍﻣﻲﺍﻟﻠﻐﺎﺕ .ﻓﻲ ﻛﻤﺒﻴﻮﺗﺮ ، von Neumannﻳﺘﻢ ﺗﺨﺰﻳﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﻭﺍﻟﺒﺮﺍﻣﺞﻓﻲ ﻧﻔﺲ ﺍﻟﺬﺍﻛﺮﺓ .ﻭﺣﺪﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺮﻛﺰﻳﺔ ) ، (CPUﺍﻟﺘﻲ ﺗﻨﻔﺬ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ،ﻣﻨﻔﺼﻠﺔ
ﻋﻦﺍﻟﺬﺍﻛﺮﺓ .ﻟﺬﻟﻚ ،ﻳﺠﺐ ﻧﻘﻞ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ ،ﺃﻭ ﻧﻘﻠﻬﺎ ﻋﺒﺮ ﺍﻷﻧﺎﺑﻴﺐ ،ﻣﻦ ﺍﻟﺬﺍﻛﺮﺓ ﺇﻟﻰ
ﻭﺣﺪﺓﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺮﻛﺰﻳﺔ .ﻳﺠﺐ ﺇﻋﺎﺩﺓ ﻧﺘﺎﺉﺞ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻓﻲ ﻭﺣﺪﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺮﻛﺰﻳﺔ ﺇﻟﻰ
ﺍﻟﺬﺍﻛﺮﺓ.ﺗﻘﺮﻳﺒﺎً ﺟﻤﻴﻊ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺮﻗﻤﻴﺔ ﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻣﻨﺬ ﺍﻷﺭﺑﻌﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ
ﺍﻟﻤﺎﺿﻲﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺑﻨﻴﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ .ﻳﻈﻬﺮ ﺍﻟﻬﻴﻜﻞ ﺍﻟﻌﺎﻡ ﻟﺠﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ von Neumann
ﻓﻲﺍﻟﺸﻜﻞ .1.1
19 1.4ﺍﻟﺘﺄﺛﻴﺮﺍﺕ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ
ﺍﻟﺸﻜﻞ1.1
ﻓﻮﻥﻧﻴﻮﻣﺎﻥ
ﺍﻟﺬﺍﻛﺮﺓ)ﺗﺨﺰﻳﻦ ﻛﻞ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ( ﻫﻨﺪﺳﺔﺍﻟﻜﻤﺒﻴﻮﺗﺮ
ﺍﻟﺘﻌﻠﻴﻤﺎﺕﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﻧﺘﺎﺉﺞ
ﻋﻤﻠﻴﺎﺕ
ﻳﺘﺤﻜﻢ ﺍﻟﺤﺴﺎﺏﻭ
ﺃﺟﻬﺰﺓﺍﻹﺩﺧﺎﻝ ﻭﺍﻹﺧﺮﺍﺝ ﻭﺣﺪﺓ ﻭﺣﺪﺓﺍﻟﻤﻨﻄﻖ
ﻭﺣﺪﺓﻣﻌﺎﻟﺠﺔ ﻣﺮﻛﺰﻳﺔ
ﺑﺴﺒﺐﺑﻨﻴﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ ،ﻓﺈﻥ ﺍﻟﺴﻤﺎﺕ ﺍﻟﻤﺮﻛﺰﻳﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ﻫﻲ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ،ﺍﻟﺘﻲ
ﺗﻤﺜﻞﺧﻼﻳﺎ ﺍﻟﺬﺍﻛﺮﺓ ؛ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ ،ﻭﺍﻟﺘﻲ ﺗﺴﺘﻨﺪ ﺇﻟﻰ ﻋﻤﻠﻴﺔ ﺍﻷﻧﺎﺑﻴﺐ ؛ ﻭﺍﻟﺼﻴﻐﺔ
ﺍﻟﺘﻜﺮﺍﺭﻳﺔﻟﻠﺘﻜﺮﺍﺭ ،ﻭﻫﻲ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﻛﺜﺮ ﻓﺎﻋﻠﻴﺔ ﻟﺘﻨﻔﻴﺬ ﺍﻟﺘﻜﺮﺍﺭ ﻋﻠﻰ ﻫﺬﻩ ﺍﻟﺒﻨﻴﺔ .ﻳﺘﻢ ﻧﻘﻞ
ﺍﻟﻌﻤﻠﻴﺎﺕﻓﻲ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻣﻦ ﺍﻟﺬﺍﻛﺮﺓ ﺇﻟﻰ ﻭﺣﺪﺓ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺮﻛﺰﻳﺔ ،ﻭﻳﺘﻢ ﺇﺭﺟﺎﻉ ﻧﺘﻴﺠﺔ ﺗﻘﻴﻴﻢ
ﺍﻟﺘﻌﺒﻴﺮﺇﻟﻰ ﺧﻠﻴﺔ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﺘﻲ ﻳﻤﺜﻠﻬﺎ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﺴﺮ ﻣﻦ ﺍﻟﻤﻬﻤﺔ .ﺍﻟﺘﻜﺮﺍﺭ ﺳﺮﻳﻊ ﻋﻠﻰ ﺃﺟﻬﺰﺓ
ﻛﻤﺒﻴﻮﺗﺮ von Neumannﻷﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻣﺨﺰﻧﺔ ﻓﻲ ﺧﻼﻳﺎ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﻤﺠﺎﻭﺭﺓ ﻭﺗﻜﺮﺍﺭ ﺗﻨﻔﻴﺬ ﺟﺰء
ﻣﻦﺍﻟﻜﻮﺩ ﻻ ﻳﺘﻄﻠﺐ ﺳﻮﻯ ﺗﻌﻠﻴﻤﺎﺕ ﻓﺮﻉ .ﻻ ﺗﺸﺠﻊ ﻫﺬﻩ ﺍﻟﻜﻔﺎءﺓ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﻮﺩﻳﺔ ﻟﻠﺘﻜﺮﺍﺭ ،
ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﺘﻜﺮﺍﺭ ﻳﻜﻮﻥ ﻓﻲ ﺑﻌﺾ ﺍﻷﺣﻴﺎﻥ ﺃﻛﺜﺮ ﻃﺒﻴﻌﻴﺔ.
ﻳﺤﺪﺙﺗﻨﻔﻴﺬ ﺑﺮﻧﺎﻣﺞ ﻛﻮﺩ ﺍﻵﻟﺔ ﻋﻠﻰ ﻛﻤﺒﻴﻮﺗﺮ ﻣﻌﻤﺎﺭﻱ von Neumannﻓﻲ ﻋﻤﻠﻴﺔ ﺗﺴﻤﻰ
ﺩﻭﺭﺓﺍﻟﺠﻠﺐ ﻭﺍﻟﺘﻨﻔﻴﺬ .ﻛﻤﺎ ﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ،ﺗﻮﺟﺪ ﺍﻟﺒﺮﺍﻣﺞ ﻓﻲ ﺍﻟﺬﺍﻛﺮﺓ ﻭﻟﻜﻦ ﻳﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻓﻲ
ﻭﺣﺪﺓﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﺮﻛﺰﻳﺔ .ﻳﺠﺐ ﻧﻘﻞ ﻛﻞ ﺗﻌﻠﻴﻤﺎﺕ ﻳﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻣﻦ ﺍﻟﺬﺍﻛﺮﺓ ﺇﻟﻰ ﺍﻟﻤﻌﺎﻟﺞ .ﻳﺘﻢ
ﺍﻻﺣﺘﻔﺎﻅﺑﻌﻨﻮﺍﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﺘﻲ ﺳﻴﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻓﻲ ﺳﺠﻞ ﻳﺴﻤﻰﻋﺪﺍﺩ ﺍﻟﺒﺮﻧﺎﻣﺞ.
ﻳﻤﻜﻦﻭﺻﻒ ﺩﻭﺭﺓ ﺍﻟﺠﻠﺐ ﻭﺍﻟﺘﻨﻔﻴﺬ ﺑﺒﺴﺎﻃﺔ ﻣﻦ ﺧﻼﻝ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ:
ﺗﻨﻔﻴﺬﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻛﺮﺭ
ﺍﻟﻨﻬﺎﻳﺔ
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 20
ﺗﻌﻨﻲﺧﻄﻮﺓ "ﻓﻚ ﺷﻔﺮﺓ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ" ﻓﻲ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺔ ﺃﻥ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻳﺘﻢ ﻓﺤﺼﻬﺎ ﻟﺘﺤﺪﻳﺪ ﺍﻹﺟﺮﺍء
ﺍﻟﺬﻱﺗﺤﺪﺩﻩ .ﻳﻨﺘﻬﻲ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻋﻨﺪ ﻣﻮﺍﺟﻬﺔ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻹﻳﻘﺎﻑ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻧﺎﺩﺭﺍً ﻣﺎ
ﻳﺘﻢﺗﻨﻔﻴﺬ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻹﻳﻘﺎﻑ ﻋﻠﻰ ﺟﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ ﻓﻌﻠﻲ .ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ،ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﻋﻤﻠﻴﺎﺕ
ﺍﻟﻨﻘﻞﻣﻦ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﺇﻟﻰ ﺑﺮﻧﺎﻣﺞ ﻣﺴﺘﺨﺪﻡ ﻟﺘﻨﻔﻴﺬﻩ ﺛﻢ ﺍﻟﻌﻮﺩﺓ ﺇﻟﻰ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻋﻨﺪ
ﺍﻛﺘﻤﺎﻝﺗﻨﻔﻴﺬ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ .ﻓﻲ ﻧﻈﺎﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺬﻱ ﻗﺪ ﻳﻜﻮﻥ ﻓﻴﻪ ﺃﻛﺜﺮ ﻣﻦ ﺑﺮﻧﺎﻣﺞ
ﻣﺴﺘﺨﺪﻡﻭﺍﺣﺪ ﻓﻲ ﺍﻟﺬﺍﻛﺮﺓ ﻓﻲ ﻭﻗﺖ ﻣﻌﻴﻦ ،ﺗﻜﻮﻥ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔ ﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً.
ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ،ﻓﺈﻥ ﺍﻟﻠﻐﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺃﻭ ﺍﻟﺘﻄﺒﻴﻘﻴﺔ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻓﻴﻬﺎ ﺍﻟﻮﺳﻴﻠﺔ
ﺍﻷﺳﺎﺳﻴﺔﻟﻠﺤﺴﺎﺏ ﻫﻲ ﺗﻄﺒﻴﻖ ﺍﻟﻮﻇﺎﺉﻒ ﻋﻠﻰ ﻣﻌﻠﻤﺎﺕ ﻣﻌﻴﻨﺔ .ﻳﻤﻜﻦ ﺃﻥ ﺗﺘﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺑﻠﻐﺔ
ﻭﻇﻴﻔﻴﺔﺑﺪﻭﻥ ﻧﻮﻉ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ،ﺑﺪﻭﻥ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ ،
ﻭﺑﺪﻭﻥﺍﻟﺘﻜﺮﺍﺭ .ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻋﻠﻤﺎء ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻗﺪ ﺷﺮﺣﻮﺍ ﺍﻟﻔﻮﺍﺉﺪ ﺍﻟﺘﻲ ﻻ ﺗﻌﺪ
ﻭﻻﺗﺤﺼﻰ ﻟﻠﻐﺎﺕ ﺍﻟﻮﻇﻴﻔﻴﺔ ،ﻣﺜﻞ ، Schemeﻓﻤﻦ ﻏﻴﺮ ﺍﻟﻤﺤﺘﻤﻞ ﺃﻥ ﻳﺤﻠﻮﺍ ﻣﺤﻞ ﺍﻟﻠﻐﺎﺕ
ﺍﻟﻀﺮﻭﺭﻳﺔﺣﺘﻰ ﻳﺘﻢ ﺗﺼﻤﻴﻢ ﻛﻤﺒﻴﻮﺗﺮ ﻏﻴﺮ von Neumannﻳﺴﻤﺢ ﺑﺎﻟﺘﻨﻔﻴﺬ ﺍﻟﻔﻌﺎﻝ ﻟﻠﺒﺮﺍﻣﺞ
ﺑﻠﻐﺎﺕﻭﻇﻴﻔﻴﺔ .ﻣﻦ ﺑﻴﻦ ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﺗﺤﺴﺮﻭﺍ ﻋﻠﻰ ﻫﺬﻩ ﺍﻟﺤﻘﻴﻘﺔ ،ﻛﺎﻥ ﺟﻮﻥ ﺑﺎﻛﻮﺱ )(1978
ﺍﻟﻤﺼﻤﻢﺍﻟﺮﺉﻴﺴﻲ ﻟﻠﻨﺴﺨﺔ ﺍﻷﺻﻠﻴﺔ ﻣﻦ ﻓﻮﺭﺗﺮﺍﻥ ،ﺃﻛﺜﺮﻫﻢ ﺑﻼﻏﺔ.
ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺣﻘﻴﻘﺔ ﺃﻥ ﺑﻨﻴﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺤﺘﻤﻴﺔ ﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ ﻋﻠﻰ ﻏﺮﺍﺭ ﺑﻨﻴﺔ ﺍﻵﻟﺔ ،
ﺑﺪﻻ ًﻣﻦ ﻗﺪﺭﺍﺕ ﻭﻣﻴﻮﻝ ﻣﺴﺘﺨﺪﻣﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ،ﻳﻌﺘﻘﺪ ﺍﻟﺒﻌﺾ ﺃﻥ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺎﺕ
ﺍﻟﺤﺘﻤﻴﺔﺃﻣﺮ ﻃﺒﻴﻌﻲ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﺃﻛﺜﺮ ﻣﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ﻭﻇﻴﻔﻴﺔ .ﻟﺬﻟﻚ ،ﻳﻌﺘﻘﺪ ﻫﺆﻻء ﺍﻷﺷﺨﺎﺹ
ﺃﻧﻪﺣﺘﻰ ﻟﻮ ﻛﺎﻧﺖ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻮﻇﻴﻔﻴﺔ ﻓﻌﺎﻟﺔ ﻣﺜﻞ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻀﺮﻭﺭﻳﺔ ،ﻓﺈﻥ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺎﺕ
ﺍﻟﺒﺮﻣﺠﺔﺍﻹﻟﺰﺍﻣﻴﺔ ﺳﻴﻈﻞ ﻫﻮ ﺍﻟﻤﺴﻴﻄﺮ.
ﻛﺎﻥﺃﺣﺪ ﺍﻷﺳﺒﺎﺏ ﺍﻟﻤﻬﻤﺔ ﻟﻬﺬﺍ ﺍﻟﺒﺤﺚ ﻫﻮ ﺍﻟﺘﺤﻮﻝ ﻓﻲ ﺍﻟﺘﻜﻠﻔﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻟﻠﺤﻮﺳﺒﺔ ﻣﻦ
ﺍﻷﺟﻬﺰﺓﺇﻟﻰ ﺍﻟﺒﺮﺍﻣﺞ ،ﺣﻴﺚ ﺍﻧﺨﻔﻀﺖ ﺗﻜﺎﻟﻴﻒ ﺍﻷﺟﻬﺰﺓ ﻭﺯﺍﺩﺕ ﺗﻜﺎﻟﻴﻒ ﺍﻟﻤﺒﺮﻣﺞ .ﻛﺎﻧﺖ
ﺍﻟﺰﻳﺎﺩﺍﺕﻓﻲ ﺇﻧﺘﺎﺟﻴﺔ ﺍﻟﻤﺒﺮﻣﺞ ﺻﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً .ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺫﻟﻚ ،ﺗﻢ ﺣﻞ ﺍﻟﻤﺸﻜﻼﺕ ﺍﻷﻛﺒﺮ
ﻭﺍﻷﻛﺜﺮﺗﻌﻘﻴﺪﺍً ﺑﺸﻜﻞ ﺗﺪﺭﻳﺠﻲ ﺑﻮﺍﺳﻄﺔ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ .ﺑﺪﻻ ًﻣﻦ ﻣﺠﺮﺩ ﺣﻞ ﻣﺠﻤﻮﻋﺎﺕ ﻣﻦ
ﺍﻟﻤﻌﺎﺩﻻﺕﻟﻤﺤﺎﻛﺎﺓ ﻣﺴﺎﺭﺍﺕ ﺍﻷﻗﻤﺎﺭ ﺍﻟﺼﻨﺎﻋﻴﺔ ،ﻛﻤﺎ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ،ﻛﺎﻧﺖ ﺍﻟﺒﺮﺍﻣﺞ
ﺗﻜُﺘﺐﻟﻤﻬﺎﻡ ﻛﺒﻴﺮﺓ ﻭﻣﻌﻘﺪﺓ ،ﻣﺜﻞ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﻣﺮﺍﻓﻖ ﺗﻜﺮﻳﺮ ﺍﻟﺒﺘﺮﻭﻝ ﺍﻟﻜﺒﻴﺮﺓ ﻭﺗﻮﻓﻴﺮ ﺃﻧﻈﻤﺔ ﺣﺠﺰ
ﻃﻴﺮﺍﻥﻋﺎﻟﻤﻴﺔ.
ﺗﻢﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﻟﻐﺔ ﺗﺪﻋﻢ ﻣﻔﺎﻫﻴﻤﻬﺎ، 1989( :
.Smalltalk )Goldberg and Robsonﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ Smalltalkﻟﻢ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ
ﻋﻠﻰﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻣﺜﻞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ،ﺇﻻ ﺃﻥ ﺩﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ
ﺃﺻﺒﺢﺍﻵﻥ ﺟﺰءﺍً ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ،ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ( ، Ada 95 )ARM ، 1995ﻭ
، Javaﻭ ، ++ Cﻭ .# Cﻭﺟﺪﺕ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ﻃﺮﻳﻘﻬﺎ ﺃﻳﻀﺎً ﺇﻟﻰ ﺍﻟﺒﺮﻣﺠﺔ
ﺍﻟﻮﻇﻴﻔﻴﺔﻓﻲ ( CLOS )Bobrow et al. ، 1988ﻭ ، Syme) # Fﻭﺁﺧﺮﻭﻥ ، (2010 ،ﺑﺎﻹﺿﺎﻓﺔ
ﺇﻟﻰﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻓﻲ ( .Prolog ++ )Moss ، 1994ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺩﻋﻢ ﺍﻟﻠﻐﺔ ﻟﻠﺒﺮﻣﺠﺔ
ﺍﻟﺸﻴﺉﻴﺔﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ .12
ﺃﺩﺕﻛﻞ ﻫﺬﻩ ﺍﻟﺨﻄﻮﺍﺕ ﺍﻟﺘﻄﻮﺭﻳﺔ ﻓﻲ ﻣﻨﻬﺠﻴﺎﺕ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺇﻟﻰ ﺗﺮﺍﻛﻴﺐ ﻟﻐﺔ
ﺟﺪﻳﺪﺓﻟﺪﻋﻤﻬﺎ.
1.5ﻓﺉﺎﺕ ﺍﻟﻠﻐﺔ
ﻏﺎﻟﺒﺎًﻣﺎ ﻳﺘﻢ ﺗﺼﻨﻴﻒ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺇﻟﻰ ﺃﺭﺑﻊ ﺳﻼﻝ :ﺇﻟﺰﺍﻣﻴﺔ ،ﻭﻇﻴﻔﻴﺔ ،ﻣﻨﻄﻘﻴﺔ ،ﻭﻣﻮﺟﻬﺔ
ﻟﻠﻜﺎﺉﻨﺎﺕ.ﻭﻣﻊ ﺫﻟﻚ ،ﻓﺈﻧﻨﺎ ﻻ ﻧﻌﺘﺒﺮ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﻟﺘﺸﻜﻴﻞ ﻓﺉﺔ
ﻣﻨﻔﺼﻠﺔﻣﻦ ﺍﻟﻠﻐﺎﺕ .ﻟﻘﺪ ﻭﺻﻔﻨﺎ ﻛﻴﻒ ﻧﺸﺄﺕ ﺍﻟﻠﻐﺎﺕ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ
ﺍﻟﻤﻮﺟﻬﺔﻟﻠﻜﺎﺉﻨﺎﺕ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻹﻟﺰﺍﻣﻴﺔ .ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻧﻤﻮﺫﺝ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻮﺟﻪ
ﻟﻠﻜﺎﺉﻨﺎﺕﻳﺨﺘﻠﻒ ﺍﺧﺘﻼﻓﺎً ﻛﺒﻴﺮﺍً ﻋﻦ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﻤﻮﺟﻪ ﻧﺤﻮ ﺍﻹﺟﺮﺍءﺍﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻋﺎﺩﺓ ًﻣﻊ
ﺍﻟﻠﻐﺎﺕﺍﻟﺤﺘﻤﻴﺔ ،
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 22
ﺍﻣﺘﺪﺍﺩﺍﺕﻟﻠﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻄﻠﻮﺑﺔ ﻟﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﻟﻴﺴﺖ ﻣﻜﺜﻔﺔ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،
ﺍﻟﺘﻌﺒﻴﺮﺍﺕﻭﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻭﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﻓﻲ Cﻭ Javaﻣﺘﻄﺎﺑﻘﺔ ﺗﻘﺮﻳﺒﺎً) .ﻣﻦ ﻧﺎﺣﻴﺔ
ﺃﺧﺮﻯ ،ﺗﺨﺘﻠﻒ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻭﺩﻻﻻﺕ Javaﻋﻦ ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ (.Cﻳﻤﻜﻦ
ﺇﺟﺮﺍءﻋﺒﺎﺭﺍﺕ ﻣﻤﺎﺛﻠﺔ ﻟﻠﻐﺎﺕ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ.
ﻧﻮﻉﺁﺧﺮ ﻣﻦ ﺍﻟﻠﻐﺔ ،ﺍﻟﻠﻐﺔ ﺍﻟﻤﺮﺉﻴﺔ ،ﻫﻲ ﻓﺉﺔ ﻓﺮﻋﻴﺔ ﻟﻠﻐﺎﺕ ﺍﻷﻣﺮ .ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺮﺉﻴﺔ ﺍﻷﻛﺜﺮ
ﺷﻴﻮﻋﺎًﻫﻲ ﻟﻐﺎﺕ .NET.ﺗﺘﻀﻤﻦ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ )ﺃﻭ ﺗﻄﺒﻴﻘﺎﺗﻬﺎ( ﺇﻣﻜﺎﻧﻴﺎﺕ ﺇﻧﺸﺎء ﺍﻟﺴﺤﺐ
ﻭﺍﻹﻓﻼﺕﻣﻦ ﻣﻘﺎﻃﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ .ﻛﺎﻧﺖ ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ ﺫﺍﺕ ﻳﻮﻡ ﻟﻐﺎﺕ ﺍﻟﺠﻴﻞ
ﺍﻟﺮﺍﺑﻊ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﺍﻻﺳﻢ ﻟﻢ ﻳﻌﺪ ﺻﺎﻟﺤﺎً ﻟﻼﺳﺘﺨﺪﺍﻡ .ﺗﻮﻓﺮ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺮﺉﻴﺔ ﻃﺮﻳﻘﺔ
ﺑﺴﻴﻄﺔﻹﻧﺸﺎء ﻭﺍﺟﻬﺎﺕ ﻣﺴﺘﺨﺪﻡ ﺭﺳﻮﻣﻴﺔ ﻟﻠﺒﺮﺍﻣﺞ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺑﺎﺳﺘﺨﺪﺍﻡ Studio
Visualﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺑﻠﻐﺎﺕ ، NET.ﻳﻤﻜﻦ ﺇﻧﺸﺎء ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ ﻹﻧﺘﺎﺝ ﻋﺮﺽ ﻟﻌﻨﺼﺮ
ﺗﺤﻜﻢﻓﻲ ﺍﻟﻨﻤﻮﺫﺝ ،ﻣﺜﻞ ﺯﺭ ﺃﻭ ﻣﺮﺑﻊ ﻧﺺ ،ﺑﻀﻐﻄﺔ ﻣﻔﺘﺎﺡ ﻭﺍﺣﺪﺓ .ﺗﺘﻮﻓﺮ ﻫﺬﻩ ﺍﻹﻣﻜﺎﻧﺎﺕ ﺍﻵﻥ
ﺑﺠﻤﻴﻊﻟﻐﺎﺕ .NET.
ﻳﺸﻴﺮﺑﻌﺾ ﺍﻟﻤﺆﻟﻔﻴﻦ ﺇﻟﻰ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﻛﻔﺉﺔ ﻣﻨﻔﺼﻠﺔ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ .ﻭﻣﻊ
ﺫﻟﻚ ،ﻓﺈﻥ ﺍﻟﻠﻐﺎﺕ ﻓﻲ ﻫﺬﻩ ﺍﻟﻔﺉﺔ ﻣﺮﺗﺒﻄﺔ ﺑﺒﻌﻀﻬﺎ ﺍﻟﺒﻌﺾ ﺑﻄﺮﻳﻘﺔ ﺍﻟﺘﻨﻔﻴﺬ ،ﺍﻟﺘﺮﺟﻤﺔ ﺍﻟﺠﺰﺉﻴﺔ
ﺃﻭﺍﻟﻜﺎﻣﻠﺔ ،ﺃﻛﺜﺮ ﻣﻦ ﺍﺭﺗﺒﺎﻃﻬﺎ ﺑﺘﺼﻤﻴﻢ ﻟﻐﺔ ﻣﺸﺘﺮﻛﺔ .ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﺴﻤﻰ ﻋﺎﺩﺓ ًﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ
ﺍﻟﻨﺼﻴﺔ ،ﻣﻦ ﺑﻴﻨﻬﺎ Perlﻭ JavaScriptﻭ ، Rubyﻫﻲ ﻟﻐﺎﺕ ﺿﺮﻭﺭﻳﺔ ﺑﻜﻞ ﻣﻌﻨﻰ ﺍﻟﻜﻠﻤﺔ.
ﻟﻐﺔﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻫﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﻟﻐﺔ ﻗﺎﺉﻤﺔ ﻋﻠﻰ ﺍﻟﻘﻮﺍﻋﺪ .ﻓﻲ ﻟﻐﺔ ﺍﻷﻣﺮ ،ﻳﺘﻢ ﺗﺤﺪﻳﺪ
ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺔﺑﺘﻔﺼﻴﻞ ﻛﺒﻴﺮ ،ﻭﻳﺠﺐ ﺗﻀﻤﻴﻦ ﺍﻟﺘﺮﺗﻴﺐ ﺍﻟﻤﺤﺪﺩ ﻟﺘﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺃﻭ ﺍﻟﻌﺒﺎﺭﺍﺕ.
ﻭﻣﻊﺫﻟﻚ ،ﻓﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺴﺘﻨﺪﺓ ﺇﻟﻰ ﺍﻟﻘﻮﺍﻋﺪ ،ﻻ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺍﻟﻘﻮﺍﻋﺪ ﺑﺄﻱ ﺗﺮﺗﻴﺐ ﻣﻌﻴﻦ ،ﻭﻳﺠﺐ
ﺃﻥﻳﺨﺘﺎﺭ ﻧﻈﺎﻡ ﺗﻄﺒﻴﻖ ﺍﻟﻠﻐﺔ ﺗﺮﺗﻴﺒﺎً ﺗﺴُﺘﺨﺪﻡ ﻓﻴﻪ ﺍﻟﻘﻮﺍﻋﺪ ﻹﻧﺘﺎﺝ ﺍﻟﻨﺘﻴﺠﺔ ﺍﻟﻤﺮﺟﻮﺓ .ﻳﺨﺘﻠﻒ ﻫﺬﺍ
ﺍﻟﻨﻬﺞﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺍﺧﺘﻼﻓﺎً ﺟﺬﺭﻳﺎً ﻋﻦ ﺗﻠﻚ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻣﻊ ﻓﺉﺘﻴﻦ ﺃﺧﺮﻳﻴﻦ ﻣﻦ ﺍﻟﻠﻐﺎﺕ
ﻭﻳﺘﻄﻠﺐﺑﻮﺿﻮﺡ ﻧﻮﻋﺎً ﻣﺨﺘﻠﻔﺎً ﺗﻤﺎﻣﺎً ﻣﻦ ﺍﻟﻠﻐﺔ .ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻟﻐﺔ ﺑﺮﻭﻟﻮﺝ ،ﻭﻫﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ
ﺍﻟﻤﻨﻄﻘﻴﺔﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ،ﻭﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻓﻲ ﺍﻟﻔﺼﻞ .16
ﻇﻬﺮﺕﻣﺠﻤﻮﻋﺔ ﻛﺒﻴﺮﺓ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺫﺍﺕ ﺍﻷﻏﺮﺍﺽ ﺍﻟﺨﺎﺻﺔ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً
ﺍﻟﻤﺎﺿﻴﺔ.ﺗﺘﺮﺍﻭﺡ ﻫﺬﻩ ﻣﻦ ﻣﻨُﺸﺊ ﺑﺮﻧﺎﻣﺞ ﺍﻟﺘﻘﺎﺭﻳﺮ ) ، (RPGﻭﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ ﻹﻧﺘﺎﺝ ﺗﻘﺎﺭﻳﺮ
ﺍﻷﻋﻤﺎﻝ ؛ﺇﻟﻰ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﺒﺮﻣﺠﺔ ﺗﻠﻘﺎﺉﻴﺎً ) ، (APTﻭﺍﻟﺘﻲ ﺗﺴُﺘﺨﺪﻡ ﻟﺘﻮﺟﻴﻪ ﺃﺩﻭﺍﺕ ﺍﻵﻟﺔ ﺍﻟﻘﺎﺑﻠﺔ
ﻟﻠﺒﺮﻣﺠﺔ ؛ﺇﻟﻰ ﻧﻈﺎﻡ ﻣﺤﺎﻛﺎﺓ ﺍﻷﻏﺮﺍﺽ ﺍﻟﻌﺎﻣﺔ ) ، (GPSSﻭﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ ﻟﻤﺤﺎﻛﺎﺓ ﺍﻷﻧﻈﻤﺔ .ﻫﺬﺍ
ﺍﻟﻜﺘﺎﺏﻻ ﻳﻨﺎﻗﺶ
23 1.7ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ
ﺍﻟﻠﻐﺎﺕﺫﺍﺕ ﺍﻷﻏﺮﺍﺽ ﺍﻟﺨﺎﺻﺔ ،ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺃﺳﺎﺳﺎً ﺇﻟﻰ ﻗﺎﺑﻠﻴﺘﻬﺎ ﻟﻠﺘﻄﺒﻴﻖ ﺍﻟﻀﻴﻖ ﻭﺻﻌﻮﺑﺔ
ﻣﻘﺎﺭﻧﺘﻬﺎﺑﺎﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ.
ﻣﻌﻴﺎﺭﺍﻥﻳﺘﻌﺎﺭﺿﺎﻥ ﻫﻤﺎ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﻭﺗﻜﻠﻔﺔ ﺍﻟﺘﻨﻔﻴﺬ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻳﺘﻄﻠﺐ ﺗﻌﺮﻳﻒ
ﻟﻐﺔ Javaﻓﺤﺺ ﺟﻤﻴﻊ ﺍﻟﻤﺮﺍﺟﻊ ﺇﻟﻰ ﻋﻨﺎﺻﺮ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻟﻠﺘﺄﻛﺪ ﻣﻦ ﺃﻥ ﺍﻟﻔﻬﺮﺱ ﺃﻭ ﺍﻟﻔﻬﺎﺭﺱ
ﻣﻮﺟﻮﺩﺓﻓﻲ ﻧﻄﺎﻗﺎﺗﻬﺎ ﺍﻟﻘﺎﻧﻮﻧﻴﺔ .ﺗﻀﻴﻒ ﻫﺬﻩ ﺍﻟﺨﻄﻮﺓ ﻗﺪﺭﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺗﻜﻠﻔﺔ ﺗﻨﻔﻴﺬ ﺑﺮﺍﻣﺞ Java
ﺍﻟﺘﻲﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﻤﺮﺍﺟﻊ ﻟﻌﻨﺎﺻﺮ ﺍﻟﻤﺼﻔﻮﻓﺔ .ﻻ ﺗﺘﻄﻠﺐ ﻟﻐﺔ Cﻓﺤﺺ ﻧﻄﺎﻕ
ﺍﻟﻔﻬﺮﺱ ،ﻟﺬﻟﻚ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺑﺮﺍﻣﺞ Cﺑﺸﻜﻞ ﺃﺳﺮﻉ ﻣﻦ ﺑﺮﺍﻣﺞ Javaﺍﻟﻤﻜﺎﻓﺉﺔ ﻟﻐﻮﻳﺎً ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ
ﻣﻦﺃﻥ ﺑﺮﺍﻣﺞ Javaﺃﻛﺜﺮ ﻣﻮﺛﻮﻗﻴﺔ .ﻗﺎﻡ ﻣﺼﻤﻤﻮ Javaﺑﺘﺒﺎﺩﻝ ﻛﻔﺎءﺓ ﺍﻟﺘﻨﻔﻴﺬ ﻣﻦ ﺃﺟﻞ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ.
ﻛﻤﺜﺎﻝﺁﺧﺮ ﻋﻠﻰ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﻤﺘﻀﺎﺭﺑﺔ ﺍﻟﺘﻲ ﺗﺆﺩﻱ ﻣﺒﺎﺷﺮﺓ ﺇﻟﻰ ﻣﻘﺎﻳﻀﺎﺕ ﺍﻟﺘﺼﻤﻴﻢ ،ﺿﻊ
ﻓﻲﺍﻋﺘﺒﺎﺭﻙ ﺣﺎﻟﺔ .APLﻳﺘﻀﻤﻦ APLﻣﺠﻤﻮﻋﺔ ﻗﻮﻳﺔ ﻣﻦ ﺍﻟﻌﻮﺍﻣﻞ ﻟﻤﻌﺎﻣﻼﺕ ﺍﻟﺼﻔﻴﻒ.
ﺑﺴﺒﺐﺍﻟﻌﺪﺩ ﺍﻟﻜﺒﻴﺮ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ،ﻛﺎﻥ ﻻﺑﺪ ﻣﻦ ﺗﻀﻤﻴﻦ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺮﻣﻮﺯ ﺍﻟﺠﺪﻳﺪﺓ ﻓﻲ
APLﻟﺘﻤﺜﻴﻞ ﺍﻟﻤﺸﻐﻠﻴﻦ .ﺃﻳﻀﺎً ،ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻋﻮﺍﻣﻞ ﺗﺸﻐﻴﻞ APLﻓﻲ ﺗﻌﺒﻴﺮ
ﻭﺍﺣﺪﻃﻮﻳﻞ ﻭﻣﻌﻘﺪ .ﺇﺣﺪﻯ ﻧﺘﺎﺉﺞ ﻫﺬﻩ ﺍﻟﺪﺭﺟﺔ ﺍﻟﻌﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺘﻌﺒﻴﺮﻳﺔ ﻫﻲ ﺃﻧﻪ ﺑﺎﻟﻨﺴﺒﺔ
ﻟﻠﺘﻄﺒﻴﻘﺎﺕﺍﻟﺘﻲ ﺗﺘﻀﻤﻦ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻋﻤﻠﻴﺎﺕ ﺍﻟﻤﺼﻔﻮﻓﺔ ،ﻓﺈﻥ APLﻗﺎﺑﻞ ﻟﻠﻜﺘﺎﺑﺔ ﺑﺸﻜﻞ ﻛﺒﻴﺮ.
ﻓﻲﺍﻟﻮﺍﻗﻊ ،ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﻗﺪﺭ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺤﺴﺎﺑﺎﺕ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﺻﻐﻴﺮ ﺟﺪﺍً .ﻧﺘﻴﺠﺔ ﺃﺧﺮﻯ ﻫﻲ ﺃﻥ
ﺑﺮﺍﻣﺞ APLﻟﺪﻳﻬﺎ ﻗﺎﺑﻠﻴﺔ ﻗﺮﺍءﺓ ﺿﻌﻴﻔﺔ ﻟﻠﻐﺎﻳﺔ .ﻳﻤﺘﻠﻚ ﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﻤﻀﻐﻮﻁ ﻭﺍﻟﻤﻮﺟﺰ ﺟﻤﺎﻻً ﺭﻳﺎﺿﻴﺎً
ﻣﻌﻴﻨﺎًﻭﻟﻜﻦ ﻳﺼﻌﺐ ﻋﻠﻰ ﺃﻱ ﺷﺨﺺ ﺁﺧﺮ ﻏﻴﺮ ﺍﻟﻤﺒﺮﻣﺞ ﻓﻬﻤﻪ .ﻻﺣﻆ ﺍﻟﻤﺆﻟﻒ ﺍﻟﺸﻬﻴﺮ ﺩﺍﻧﻴﺎﻝ
ﻣﻜﺮﺍﻛﻴﻦ) (1970ﺫﺍﺕ ﻣﺮﺓ ﺃﻧﻪ ﺍﺳﺘﻐﺮﻕ ﺃﺭﺑﻊ ﺳﺎﻋﺎﺕ ﻟﻘﺮﺍءﺓ ﻭﻓﻬﻢ ﺑﺮﻧﺎﻣﺞ APLﺍﻟﻤﻜﻮﻥ ﻣﻦ
ﺃﺭﺑﻌﺔﺃﺳﻄﺮ .ﻗﺎﻡ ﻣﺼﻤﻢ APLﺑﺎﻟﺘﺪﺍﻭﻝ ﻓﻲ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻟﻠﻜﺘﺎﺑﺔ.
ﺗﻜﺜﺮﺍﻷﻣﺜﻠﺔ ﻋﻠﻰ ﺍﻟﺘﻌﺎﺭﺽ ﺑﻴﻦ ﻣﻌﺎﻳﻴﺮ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ )ﻭﺍﻟﺘﻘﻴﻴﻢ( ؛ ﺑﻌﻀﻬﺎ ﺧﻔﻲ ﻭﺍﻟﺒﻌﺾ
ﺍﻵﺧﺮﻭﺍﺿﺢ .ﻟﺬﻟﻚ ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻣﻬﻤﺔ ﺍﺧﺘﻴﺎﺭ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻭﺍﻟﻤﻴﺰﺍﺕ ﻋﻨﺪ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ
ﺗﺘﻄﻠﺐﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻨﺎﺯﻻﺕ ﻭﺍﻟﻤﻔﺎﺿﻼﺕ.
1.7ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ
ﻛﻤﺎﻫﻮ ﻣﻮﺿﺢ ﻓﻲ ﺍﻟﻘﺴﻢ ، 1.4.1ﻓﺈﻥ ﺍﺛﻨﻴﻦ ﻣﻦ ﺍﻟﻤﻜﻮﻧﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﻜﻤﺒﻴﻮﺗﺮ ﻫﻤﺎ ﺍﻟﺬﺍﻛﺮﺓ
ﺍﻟﺪﺍﺧﻠﻴﺔﻭﻣﻌﺎﻟﺠﻬﺎ .ﺗﺴﺘﺨﺪﻡ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﺪﺍﺧﻠﻴﺔ ﻟﺘﺨﺰﻳﻦ ﺍﻟﺒﺮﺍﻣﺞ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ .ﺍﻟﻤﻌﺎﻟﺞ ﻋﺒﺎﺭﺓ ﻋﻦ
ﻣﺠﻤﻮﻋﺔﻣﻦ ﺍﻟﺪﻭﺍﺉﺮ ﺍﻟﺘﻲ ﺗﻮﻓﺮ
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 24
ﻟﻐﺔﺍﻵﻟﺔ ﻟﻠﻜﻤﺒﻴﻮﺗﺮ ﻫﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺨﺎﺻﺔ ﺑﻪ .ﻓﻲ ﺣﺎﻟﺔ ﻋﺪﻡ ﻭﺟﻮﺩ ﺑﺮﺍﻣﺞ ﺩﺍﻋﻤﺔ
ﺃﺧﺮﻯ ،ﻓﺈﻥ ﻟﻐﺔ ﺍﻵﻟﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻮﺣﻴﺪﺓ ﺍﻟﺘﻲ "ﺗﻔﻬﻤﻬﺎ" ﻣﻌﻈﻢ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ.
ﻣﻦﺍﻟﻨﺎﺣﻴﺔ ﺍﻟﻨﻈﺮﻳﺔ ،ﻳﻤﻜﻦ ﺗﺼﻤﻴﻢ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﺑﻨﺎﺅﻩ ﺑﻠﻐﺔ ﻣﻌﻴﻨﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻛﻠﻐﺔ ﺍﻵﻟﺔ
ﺍﻟﺨﺎﺻﺔﺑﻪ ،ﻭﻟﻜﻨﻪ ﺳﻴﻜﻮﻥ ﻣﻌﻘﺪﺍً ﻭﻣﻜﻠﻔﺎً ﻟﻠﻐﺎﻳﺔ .ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ،ﺳﻴﻜﻮﻥ ﻏﻴﺮ ﻣﺮﻥ ﻟﻠﻐﺎﻳﺔ ،
ﻷﻧﻪﺳﻴﻜﻮﻥ ﻣﻦ ﺍﻟﺼﻌﺐ )ﻭﻟﻜﻦ ﻟﻴﺲ ﻣﻦ ﺍﻟﻤﺴﺘﺤﻴﻞ( ﺍﺳﺘﺨﺪﺍﻣﻪ ﻣﻊ ﻟﻐﺎﺕ ﺃﺧﺮﻯ ﻋﺎﻟﻴﺔ
ﺍﻟﻤﺴﺘﻮﻯ.ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺧﻴﺎﺭ ﺗﺼﻤﻴﻢ ﺍﻟﻤﺎﻛﻴﻨﺔ ﺍﻷﻛﺜﺮ ﻋﻤﻠﻴﺔ ﻓﻲ ﺍﻷﺟﻬﺰﺓ ﺑﻠﻐﺔ ﻣﻨﺨﻔﻀﺔ ﺍﻟﻤﺴﺘﻮﻯ
ﻟﻠﻐﺎﻳﺔﺗﻮﻓﺮ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﺍﻟﻤﻄﻠﻮﺑﺔ ﻭﺗﺘﻄﻠﺐ ﺑﺮﻧﺎﻣﺞ ﻧﻈﺎﻡ ﻹﻧﺸﺎء ﻭﺍﺟﻬﺔ
ﻟﻠﺒﺮﺍﻣﺞﺑﻠﻐﺎﺕ ﺫﺍﺕ ﻣﺴﺘﻮﻯ ﺃﻋﻠﻰ.
ﻻﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻧﻈﺎﻡ ﺗﻄﺒﻴﻖ ﺍﻟﻠﻐﺔ ﻫﻮ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻮﺣﻴﺪ ﺍﻟﻤﻮﺟﻮﺩ ﻋﻠﻰ ﺟﻬﺎﺯ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ.
ﻣﻄﻠﻮﺏﺃﻳﻀﺎً ﻣﺠﻤﻮﻋﺔ ﻛﺒﻴﺮﺓ ﻣﻦ ﺍﻟﺒﺮﺍﻣﺞ ،ﺗﺴﻤﻰ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ،ﻭﺍﻟﺘﻲ ﺗﻮﻓﺮ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻷﻭﻟﻴﺔ
ﺫﺍﺕﺍﻟﻤﺴﺘﻮﻯ ﺍﻷﻋﻠﻰ ﻣﻦ ﺗﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑﻠﻐﺔ ﺍﻵﻟﺔ .ﺗﻮﻓﺮ ﻫﺬﻩ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻷﻭﻟﻴﺔ ﺇﺩﺍﺭﺓ ﻣﻮﺍﺭﺩ
ﺍﻟﻨﻈﺎﻡ ،ﻭﻋﻤﻠﻴﺎﺕ ﺍﻹﺩﺧﺎﻝ ﻭﺍﻹﺧﺮﺍﺝ ،ﻭﻧﻈﺎﻡ ﺇﺩﺍﺭﺓ ﺍﻟﻤﻠﻔﺎﺕ ،ﻭﻣﺤﺮﺭﻱ ﺍﻟﻨﺼﻮﺹ ﻭ /ﺃﻭ
ﺍﻟﺒﺮﺍﻣﺞ ،ﻭﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻷﺧﺮﻯ ﺍﻟﻤﻄﻠﻮﺑﺔ ﺑﺸﻜﻞ ﺷﺎﺉﻊ .ﻧﻈﺮﺍً ﻷﻥ ﺃﻧﻈﻤﺔ
ﺗﻨﻔﻴﺬﺍﻟﻠﻐﺔ ﺗﺤﺘﺎﺝ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻣﺮﺍﻓﻖ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ،ﻓﺈﻧﻬﺎ ﺗﺘﻔﺎﻋﻞ ﻣﻊ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ
ﺑﺪﻻ ًﻣﻦ ﺍﻟﺘﻌﺎﻣﻞ ﺍﻟﻤﺒﺎﺷﺮ ﻣﻊ ﺍﻟﻤﻌﺎﻟﺞ )ﺑﻠﻐﺔ ﺍﻵﻟﺔ(.
ﻳﺘﻢﻭﺿﻊ ﺗﻄﺒﻴﻘﺎﺕ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻭﺍﻟﻠﻐﺔ ﻓﻮﻕ ﻭﺍﺟﻬﺔ ﻟﻐﺔ ﺍﻵﻟﺔ ﻟﻠﻜﻤﺒﻴﻮﺗﺮ .ﻳﻤﻜﻦ ﺍﻋﺘﺒﺎﺭ
ﻫﺬﻩﺍﻟﻄﺒﻘﺎﺕ ﺑﻤﺜﺎﺑﺔ ﺃﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ ﺍﻓﺘﺮﺍﺿﻴﺔ ،ﻣﻤﺎ ﻳﻮﻓﺮ ﻭﺍﺟﻬﺎﺕ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺑﻤﺴﺘﻮﻳﺎﺕ
ﺃﻋﻠﻰ.ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻳﻮﻓﺮ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻭﻣﺘﺮﺟﻢ ﻟﻐﺔ ﺳﻲ ﺣﺎﺳﻮﺏ ﺳﻲ ﻇﺎﻫﺮﻱ .ﻣﻊ
ﺑﺮﺍﻣﺞﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ ﺍﻷﺧﺮﻯ ،ﻳﻤﻜﻦ ﺃﻥ ﺗﺼﺒﺢ ﺍﻵﻟﺔ ﺃﻧﻮﺍﻋﺎً ﺃﺧﺮﻯ ﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ
ﺍﻻﻓﺘﺮﺍﺿﻴﺔ.ﺗﻮﻓﺮ ﻣﻌﻈﻢ ﺃﻧﻈﻤﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ ﺍﻟﻤﺨﺘﻠﻔﺔ.
ﺗﺸﻜﻞﺑﺮﺍﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻃﺒﻘﺔ ﺃﺧﺮﻯ ﺃﻋﻠﻰ ﻃﺒﻘﺔ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ .ﻳﻈﻬﺮ ﻋﺮﺽ
ﺍﻟﻄﺒﻘﺎﺕﻟﺠﻬﺎﺯ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﺍﻟﺸﻜﻞ .1.2
ﻛﺎﻧﺖﺃﻧﻈﻤﺔ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺨﺎﺻﺔ ﺑﺄﻭﻝ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ،ﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻓﻲ
ﺃﻭﺍﺧﺮﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ،ﻣﻦ ﺑﻴﻦ ﺃﻛﺜﺮ ﺃﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺗﻌﻘﻴﺪﺍً ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ.
ﻓﻲﺍﻟﺴﺘﻴﻨﻴﺎﺕ ،ﺑﺬُﻟﺖ ﺟﻬﻮﺩ ﺑﺤﺜﻴﺔ ﻣﻜﺜﻔﺔ ﻟﻔﻬﻢ ﻭﺇﺿﻔﺎء ﺍﻟﻄﺎﺑﻊ ﺍﻟﺮﺳﻤﻲ ﻋﻠﻰ ﻋﻤﻠﻴﺔ ﺇﻧﺸﺎء
ﻫﺬﻩﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻠﻐﻮﻳﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ .ﻛﺎﻥ ﺃﻛﺒﺮ ﻧﺠﺎﺡ ﻟﻬﺬﻩ ﺍﻟﺠﻬﻮﺩ ﻓﻲ ﻣﺠﺎﻝ ﺗﺤﻠﻴﻞ ﺍﻟﻨﺤﻮ ،
ﻭﻳﺮﺟﻊﺫﻟﻚ ﺃﺳﺎﺳﺎً ﺇﻟﻰ ﺃﻥ ﻫﺬﺍ ﺍﻟﺠﺰء ﻣﻦ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻨﻔﻴﺬ ﻫﻮ ﺗﻄﺒﻴﻖ ﻷﺟﺰﺍء ﻣﻦ ﻧﻈﺮﻳﺔ ﺍﻷﻭﺗﻮﻣﺎﺗﺎ
ﻭﻧﻈﺮﻳﺔﺍﻟﻠﻐﺔ ﺍﻟﺮﺳﻤﻴﺔ ﺍﻟﺘﻲ ﺗﻢ ﻓﻬﻤﻬﺎ ﺟﻴﺪﺍً ﺑﻌﺪ ﺫﻟﻚ.
1.7.1ﺍﻟﺘﺠﻤﻴﻊ
ﻳﻤﻜﻦﺗﻨﻔﻴﺬ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺑﺄﻱ ﻣﻦ ﺍﻟﻄﺮﻕ ﺍﻟﻌﺎﻣﺔ ﺍﻟﺜﻼﺙ .ﻣﻦ ﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ،ﻳﻤﻜﻦ ﺗﺮﺟﻤﺔ
ﺍﻟﺒﺮﺍﻣﺞﺇﻟﻰ ﻟﻐﺔ ﺍﻵﻟﺔ ،ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺗﻨﻔﻴﺬﻫﺎ ﻣﺒﺎﺷﺮﺓ ﻋﻠﻰ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ .ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﺃ
ﻣﺘﺮﺟﻢ
25 1.7ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ
ﺍﻟﻤﺠﻤﻊ
ﺁﺩﺍ
ﻣﺘﺮﺟﻢ
ﺍﻓﺘﺮﺍﺿﻲ
ﺣﺸَﺪ ...
ﻟﻐﺔ
ﺣﺎﺳﻮﺏ ﺍﻓﺘﺮﺍﺿﻲ
ﺁﺩﺍ
ﺣﺎﺳﻮﺏ
ﺗﻄﺒﻴﻖﻭﻳﺘﻤﺘﻊ ﺑﻤﻴﺰﺓ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺴﺮﻳﻊ ﻟﻠﺒﺮﻧﺎﻣﺞ ﺑﻤﺠﺮﺩ ﺍﻛﺘﻤﺎﻝ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺮﺟﻤﺔ .ﻳﺘﻢ ﺗﻨﻔﻴﺬ
ﻣﻌﻈﻢﺗﻄﺒﻴﻘﺎﺕ ﺍﻹﻧﺘﺎﺝ ﻟﻠﻐﺎﺕ ،ﻣﺜﻞ Cﻭ COBOLﻭ ++ Cﻭ ، Adaﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﺘﺮﺟﻤﻴﻦ.
ﺍﻟﻠﻐﺔﺍﻟﺘﻲ ﻳﺘﺮﺟﻤﻬﺎ ﺍﻟﻤﺘﺮﺟﻢ ﺗﺴﻤﻰﻟﻐﺔ ﺍﻟﻤﺼﺪﺭ .ﺗﺘﻢ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻭﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ
ﻋﻠﻰﻋﺪﺓ ﻣﺮﺍﺣﻞ ،ﻭﺃﻫﻤﻬﺎ ﻣﺒﻴﻦ ﻓﻲ ﺍﻟﺸﻜﻞ .1.3
ﻳﺄﺧﺬﻣﺤﻠﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﻤﻌﺠﻤﻴﺔ ﻣﻦ ﻣﺤﻠﻞ ﺍﻟﻤﻌﺠﻢ ﻭﻳﺴﺘﺨﺪﻣﻬﺎ ﻟﺒﻨﺎء ﻫﻴﺎﻛﻞ
ﻫﺮﻣﻴﺔﺗﺴﻤﻰﺗﺤﻠﻴﻞ ﺍﻷﺷﺠﺎﺭ .ﺗﻤﺜﻞ ﺃﺷﺠﺎﺭ ﺍﻟﺘﺤﻠﻴﻞ ﻫﺬﻩ ﺍﻟﺒﻨﻴﺔ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺒﺮﻧﺎﻣﺞ .ﻓﻲ ﻛﺜﻴﺮ
ﻣﻦﺍﻟﺤﺎﻻﺕ ،ﻻ ﻳﺘﻢ ﺇﻧﺸﺎء ﻫﻴﻜﻞ ﺷﺠﺮﺓ ﺗﺤﻠﻴﻞ ﻓﻌﻠﻲ ؛ ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ،ﻳﺘﻢ ﺇﻧﺸﺎء ﺍﻟﻤﻌﻠﻮﻣﺎﺕ
ﺍﻟﻤﻄﻠﻮﺑﺔﻟﺒﻨﺎء ﺷﺠﺮﺓ ﻭﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﺒﺎﺷﺮﺓ .ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻛﻞ ﻣﻦ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﻤﻌﺠﻤﻴﺔ ﻭﺃﺷﺠﺎﺭ
ﺍﻟﺘﺤﻠﻴﻞﻓﻲ ﺍﻟﻔﺼﻞ .3ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻤﻌﺠﻤﻲ ﻭﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ،ﺃﻭ ﺍﻟﺘﺤﻠﻴﻞ ،ﺗﻤﺖ
ﻣﻨﺎﻗﺸﺘﻬﻤﺎﻓﻲ ﺍﻟﻔﺼﻞ .4
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 26
ﺍﻟﺸﻜﻞ1.3
ﻣﺼﺪﺭ
ﺑﺮﻧﺎﻣﺞ ﻋﻤﻠﻴﺔﺍﻟﺘﺠﻤﻴﻊ
ﻣﻌﺠﻤﻲ
ﻣﺤﻠﻞ
ﺍﻟﻮﺣﺪﺍﺕﺍﻟﻤﻌﺠﻤﻴﺔ
ﺑﻨﺎءﺍﻟﺠﻤﻠﺔ
ﻣﺤﻠﻞ
ﺗﺤﻠﻴﻞﺍﻷﺷﺠﺎﺭ
ﻣﺘﻮﺳﻂ
ﺗﺤﺴﻴﻦ ﻣﻮﻟﺪﺍﻷﻛﻮﺍﺩ ﺭﻣﺰ
)ﺧﻴﺎﺭﻱ( ﻭﺍﻟﺪﻻﻻﺕ ﻃﺎﻭﻟﺔ
ﻣﺤﻠﻞ
ﻣﺘﻮﺳﻂ
ﺷﻔﺮﺓ
ﺷﻔﺮﺓ
ﻣﻮﻟﺪﻛﻬﺮﺑﺎء
ﺁﻟﺔ
ﺍﺩﺧﺎﻝﺍﻟﺒﻴﺎﻧﺎﺕ ﻟﻐﺔ
ﺣﺎﺳﻮﺏ
ﻧﺘﺎﺉﺞ
ﻳﻨﺘﺞﻣﻨﺸﺊ ﺍﻟﺸﻔﺮﺓ ﺍﻟﻮﺳﻴﻄﺔ ﺑﺮﻧﺎﻣﺠﺎً ﺑﻠﻐﺔ ﻣﺨﺘﻠﻔﺔ ،ﺑﻤﺴﺘﻮﻯ ﻣﺘﻮﺳﻂ ﺑﻴﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ
ﺍﻟﻤﺼﺪﺭﻭﺍﻟﻤﺨﺮﺝ ﺍﻟﻨﻬﺎﺉﻲ ﻟﻠﻤﺘﺮﺟﻢ :ﺑﺮﻧﺎﻣﺞ ﻟﻐﺔ ﺍﻵﻟﺔ4.ﺗﺒﺪﻭ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻮﺳﻴﻄﺔ ﺃﺣﻴﺎﻧﺎً ﻣﺜﻞ ﻟﻐﺎﺕ
ﺍﻟﺘﺠﻤﻴﻊﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ،ﻭﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﺗﻜﻮﻥ ﺃﺣﻴﺎﻧﺎً ﻟﻐﺎﺕ ﺗﺠﻤﻴﻊ ﻓﻌﻠﻴﺔ .ﻓﻲ ﺣﺎﻻﺕ ﺃﺧﺮﻯ ،ﻳﻜﻮﻥ
ﺍﻟﺮﻣﺰﺍﻟﻮﺳﻴﻂ ﻋﻠﻰ ﻣﺴﺘﻮﻯ
ﺇﻟﻰﺣﺪ ﻣﺎ ﺃﻋﻠﻰ ﻣﻦ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ .ﻳﻌﺘﺒﺮ ﺍﻟﻤﺤﻠﻞ ﺍﻟﺪﻻﻟﻲ ﺟﺰءﺍً ﻻ ﻳﺘﺠﺰﺃ ﻣﻦ ﻣﻨﺸﺊ ﺍﻟﺸﻔﺮﺓ
ﺍﻟﻮﺳﻴﻄﺔ.ﻳﺘﺤﻘﻖ ﺍﻟﻤﺤﻠﻞ ﺍﻟﺪﻻﻟﻲ ﻣﻦ ﺍﻷﺧﻄﺎء ،ﻣﺜﻞ ﺃﺧﻄﺎء ﺍﻟﻜﺘﺎﺑﺔ ،ﺍﻟﺘﻲ ﻳﺼﻌﺐ ،ﺇﻥ ﻟﻢ
ﻳﻜﻦﻣﻦ ﺍﻟﻤﺴﺘﺤﻴﻞ ،ﺍﻛﺘﺸﺎﻓﻬﺎ ﺃﺛﻨﺎء ﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ.
ﺍﻟﺘﺤﺴﻴﻦ ،ﺍﻟﺬﻱ ﻳﺤﺴﻦ ﺍﻟﺒﺮﺍﻣﺞ )ﻋﺎﺩﺓ ًﻓﻲ ﺇﺻﺪﺍﺭ ﺍﻟﻜﻮﺩ ﺍﻟﻮﺳﻴﻂ( ﻋﻦ ﻃﺮﻳﻖ ﺟﻌﻠﻬﺎ ﺃﺻﻐﺮ
ﺃﻭﺃﺳﺮﻉ ﺃﻭ ﻛﻠﻴﻬﻤﺎ ،ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻜﻮﻥ ﺟﺰءﺍً ﺍﺧﺘﻴﺎﺭﻳﺎً ﻣﻦ ﺍﻟﺘﺠﻤﻴﻊ .ﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﺑﻌﺾ ﺍﻟﻤﺠﻤﻌﻴﻦ
ﻏﻴﺮﻗﺎﺩﺭﻳﻦ ﻋﻠﻰ ﺍﻟﻘﻴﺎﻡ ﺑﺄﻱ ﺗﺤﺴﻴﻦ ﻛﺒﻴﺮ .ﺳﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻟﻤﺘﺮﺟﻢ ﻓﻲ ﺍﻟﻤﻮﺍﻗﻒ
ﺍﻟﺘﻲﺗﻜﻮﻥ ﻓﻴﻬﺎ ﺳﺮﻋﺔ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﺘﺮﺟﻢ ﺃﻗﻞ ﺃﻫﻤﻴﺔ ﺑﻜﺜﻴﺮ ﻣﻦ ﺳﺮﻋﺔ ﺍﻟﺘﺮﺟﻤﺔ .ﻣﺜﺎﻝ ﻋﻠﻰ
ﻣﺜﻞﻫﺬﺍ ﺍﻟﻤﻮﻗﻒ ﻫﻮ ﻣﺨﺘﺒﺮ ﺍﻟﺤﻮﺳﺒﺔ ﻟﻠﻤﺒﺮﻣﺠﻴﻦ ﺍﻟﻤﺒﺘﺪﺉﻴﻦ .ﻓﻲ ﻣﻌﻈﻢ ﺍﻟﻤﻮﺍﻗﻒ ﺍﻟﺘﺠﺎﺭﻳﺔ
ﻭﺍﻟﺼﻨﺎﻋﻴﺔ ،ﺗﻜﻮﻥ ﺳﺮﻋﺔ ﺍﻟﺘﻨﻔﻴﺬ ﺃﻛﺜﺮ ﺃﻫﻤﻴﺔ ﻣﻦ ﺳﺮﻋﺔ ﺍﻟﺘﺠﻤﻴﻊ ،ﻟﺬﺍ ﻓﺈﻥ ﺍﻟﺘﺤﺴﻴﻦ ﺃﻣﺮ
ﻣﺮﻏﻮﺏﻓﻴﻪ ﺑﺸﻜﻞ ﺭﻭﺗﻴﻨﻲ .ﻧﻈﺮﺍً ﻟﺼﻌﻮﺑﺔ ﺇﺟﺮﺍء ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﺘﺤﺴﻴﻦ ﻋﻠﻰ ﻟﻐﺔ ﺍﻵﻟﺔ ،ﻳﺘﻢ
ﺇﺟﺮﺍءﻣﻌﻈﻢ ﺍﻟﺘﺤﺴﻴﻦ ﻋﻠﻰ ﺍﻟﻜﻮﺩ ﺍﻟﻮﺳﻴﻂ.
ﻳﻘﻮﻡﻣﻨﺸﺊ ﺍﻟﻜﻮﺩ ﺑﺘﺮﺟﻤﺔ ﺇﺻﺪﺍﺭ ﺍﻟﻜﻮﺩ ﺍﻟﻮﺳﻴﻂ ﺍﻟﻤﺤﺴﻦ ﻟﻠﺒﺮﻧﺎﻣﺞ ﺇﻟﻰ ﺑﺮﻧﺎﻣﺞ ﻟﻐﺔ ﺁﻟﺔ
ﻣﻜﺎﻓﺊ.
ﻳﻌﻤﻞﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﻛﻘﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﺠﻤﻴﻊ .ﺍﻟﻤﺤﺘﻮﻳﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻟﺠﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ
ﻫﻲﺍﻟﻨﻮﻉ ﻭﻣﻌﻠﻮﻣﺎﺕ ﺍﻟﺴﻤﺔ ﻟﻜﻞ ﺍﺳﻢ ﻣﻌﺮﻑ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﻳﺘﻢ ﻭﺿﻊ ﻫﺬﻩ
ﺍﻟﻤﻌﻠﻮﻣﺎﺕﻓﻲ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﺑﻮﺍﺳﻄﺔ ﻣﺤﻠﻠﻲ ﺍﻟﻤﻌﺠﻢ ﻭﺍﻟﻨﺤﻮ ﻭﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺤﻠﻞ
ﺍﻟﺪﻻﻻﺕﻭﻣﻮﻟﺪ ﺍﻟﺸﻔﺮﺓ.
ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻟﻐﺔ ﺍﻵﻟﺔ ﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺘﺮﺟﻢ ﻳﻤﻜﻦ
ﺗﻨﻔﻴﺬﻫﺎﻣﺒﺎﺷﺮﺓ ﻋﻠﻰ ﺍﻷﺟﻬﺰﺓ ،ﺇﻻ ﺃﻧﻪ ﻳﺠﺐ ﺩﺍﺉﻤﺎً ﺗﺸﻐﻴﻠﻬﺎ ﻣﻊ ﺑﻌﺾ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ
ﺍﻷﺧﺮﻯ.ﺗﺘﻄﻠﺐ ﻣﻌﻈﻢ ﺑﺮﺍﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺃﻳﻀﺎً ﺑﺮﺍﻣﺞ ﻣﻦ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ .ﻣﻦ ﺑﻴﻦ ﺃﻛﺜﺮ ﻫﺬﻩ
ﺍﻟﺒﺮﺍﻣﺞﺷﻴﻮﻋﺎً ﺑﺮﺍﻣﺞ ﺍﻹﺩﺧﺎﻝ ﻭﺍﻹﺧﺮﺍﺝ .ﻳﻨﺸﺊ ﺍﻟﻤﺘﺮﺟﻢ ﺍﺳﺘﺪﻋﺎءﺍﺕ ﻟﺒﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ ﺍﻟﻤﻄﻠﻮﺑﺔ
ﻋﻨﺪﻣﺎﻳﺤﺘﺎﺟﻬﺎ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ .ﻗﺒﻞ ﺃﻥ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺑﺮﺍﻣﺞ ﻟﻐﺔ ﺍﻵﻟﺔ ﺍﻟﺘﻲ ﻳﻨﺘﺠﻬﺎ ﺍﻟﻤﺘﺮﺟﻢ ،
ﻳﺠﺐﺇﻳﺠﺎﺩ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻄﻠﻮﺑﺔ ﻣﻦ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻭﺭﺑﻄﻬﺎ ﺑﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ .ﺗﻘﻮﻡ ﻋﻤﻠﻴﺔ
ﺍﻟﺮﺑﻂﺑﺮﺑﻂ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺑﺒﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ ﻋﻦ ﻃﺮﻳﻖ ﻭﺿﻊ ﻋﻨﺎﻭﻳﻦ ﻧﻘﺎﻁ ﺩﺧﻮﻝ ﺑﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ
ﻓﻲﺍﻟﻤﻜﺎﻟﻤﺎﺕ ﺇﻟﻴﻬﺎ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ .ﻳﻄُﻠﻖ ﺃﺣﻴﺎﻧﺎً ﻋﻠﻰ ﺭﻣﺰ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻭﺍﻟﻨﻈﺎﻡ ﻣﻌﺎً ﺍﺳﻢ
ﻣﻠﻒﻭﺣﺪﺓ ﺍﻟﺘﺤﻤﻴﻞ ،ﺃﻭﺻﻮﺭﺓ ﻗﺎﺑﻠﺔ ﻟﻠﺘﻨﻔﻴﺬ .ﺗﺴﻤﻰ ﻋﻤﻠﻴﺔ ﺗﺠﻤﻴﻊ ﺑﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ ﻭﺭﺑﻄﻬﺎ
ﺑﺒﺮﺍﻣﺞﺍﻟﻤﺴﺘﺨﺪﻡﺍﻟﺮﺑﻂ ﻭﺍﻟﺘﺤﻤﻴﻞ ،ﺃﻭ ﻓﻲ ﺑﻌﺾ ﺍﻷﺣﻴﺎﻥ ﻓﻘﻂﺭﺑﻂ .ﻳﺘﻢ ﺇﻧﺠﺎﺯﻩ ﺑﻮﺍﺳﻄﺔ
ﺑﺮﻧﺎﻣﺞﺃﻧﻈﻤﺔ ﻳﺴﻤﻰ ﺃﺭﺍﺑﻂ.
ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺑﺮﺍﻣﺞ ﺍﻷﻧﻈﻤﺔ ،ﻳﺠﺐ ﻏﺎﻟﺒﺎً ﺭﺑﻂ ﺑﺮﺍﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺑﺒﺮﺍﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺘﻲ
ﺗﻢﺗﺠﻤﻴﻌﻬﺎ ﻣﺴﺒﻘﺎً ﻭﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺍﻟﻤﻜﺘﺒﺎﺕ .ﻟﺬﻟﻚ ﻻ ﻳﺮﺑﻂ ﺍﻟﺮﺍﺑﻂ ﺑﺮﻧﺎﻣﺠﺎً ﻣﻌﻴﻨﺎً ﺑﺒﺮﺍﻣﺞ
ﺍﻟﻨﻈﺎﻡﻓﺤﺴﺐ ،ﺑﻞ ﻳﻤﻜﻨﻪ ﺃﻳﻀﺎً ﺭﺑﻄﻪ ﺑﺒﺮﺍﻣﺞ ﻣﺴﺘﺨﺪﻡ ﺃﺧﺮﻯ.
ﻋﺎﺩﺓ ًﻣﺎ ﺗﺤﺪﺩ ﺳﺮﻋﺔ ﺍﻻﺗﺼﺎﻝ ﺑﻴﻦ ﺫﺍﻛﺮﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺨﺎﺹ ﺑﻪ ﺳﺮﻋﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ،
ﻷﻧﻪﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻤﻜﻦ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺑﺸﻜﻞ ﺃﺳﺮﻉ ﻣﻤﺎ ﻳﻤﻜﻦ ﻧﻘﻠﻬﺎ ﺇﻟﻰ ﺍﻟﻤﻌﺎﻟﺞ ﻟﻠﺘﻨﻔﻴﺬ .ﻫﺬﺍ
ﺍﻻﺗﺼﺎﻝﻳﺴﻤﻰﻋﻨﻖ ﺍﻟﺰﺟﺎﺟﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ؛ ﻫﺬﺍ ﻫﻮ ﺍﻟﻌﺎﻣﻞ ﺍﻟﻤﺤﺪﺩ ﺍﻷﺳﺎﺳﻲ ﻓﻲ ﺳﺮﻋﺔ
ﺃﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻌﻤﺎﺭﻳﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ .ﻛﺎﻥ ﻋﻨﻖ ﺯﺟﺎﺟﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ ﺃﺣﺪ ﺍﻟﺪﻭﺍﻓﻊ ﺍﻷﺳﺎﺳﻴﺔ
ﻟﻠﺒﺤﺚﻭﺍﻟﺘﻄﻮﻳﺮ ﻓﻲ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻮﺍﺯﻳﺔ.
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 28
1.7.2ﺗﻔﺴﻴﺮ ﻧﻘﻲ
ﻳﻘﻊﺍﻟﺘﻔﺴﻴﺮ ﺍﻟﺨﺎﻟﺺ ﻓﻲ ﺍﻟﻄﺮﻑ ﺍﻵﺧﺮ )ﻣﻦ ﺍﻟﺘﺠﻤﻴﻊ( ﻟﻄﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ .ﻣﻊ ﻫﺬﺍ ﺍﻟﻨﻬﺞ ،ﻳﺘﻢ
ﺗﻔﺴﻴﺮﺍﻟﺒﺮﺍﻣﺞ ﺑﻮﺍﺳﻄﺔ ﺑﺮﻧﺎﻣﺞ ﺁﺧﺮ ﻳﺴﻤﻰ ﻣﺘﺮﺟﻢ ،ﺑﺪﻭﻥ ﺗﺮﺟﻤﺔ ﻋﻠﻰ ﺍﻹﻃﻼﻕ .ﻳﻌﻤﻞ ﺑﺮﻧﺎﻣﺞ
ﺍﻟﻤﺘﺮﺟﻢﺍﻟﻔﻮﺭﻱ ﻛﻤﺤﺎﻛﺎﺓ ﺑﺮﻣﺠﻴﺔ ﻵﻟﺔ ﺗﺘﻌﺎﻣﻞ ﺩﻭﺭﺓ ﺍﻟﺠﻠﺐ ﻭﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ﻣﻊ ﻋﺒﺎﺭﺍﺕ
ﺑﺮﻧﺎﻣﺞﺍﻟﻠﻐﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺑﺪﻻ ًﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻵﻟﺔ .ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻣﺤﺎﻛﺎﺓ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻫﺬﻩ
ﺗﻮﻓﺮﺁﻟﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ ﻟﻠﻐﺔ.
ﻋﻴﺐﺁﺧﺮ ﻟﻠﺘﻔﺴﻴﺮ ﺍﻟﺨﺎﻟﺺ ﻫﻮ ﺃﻧﻪ ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻄﻠﺐ ﻣﺴﺎﺣﺔ ﺃﻛﺒﺮ .ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺍﻟﺒﺮﻧﺎﻣﺞ
ﺍﻟﻤﺼﺪﺭ ،ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﻣﻮﺟﻮﺩﺍً ﺃﺛﻨﺎء ﺍﻟﺘﻔﺴﻴﺮ .ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ،ﻗﺪ ﻳﺘﻢ ﺗﺨﺰﻳﻦ
ﺍﻟﺒﺮﻧﺎﻣﺞﺍﻟﻤﺼﺪﺭ ﻓﻲ ﻧﻤﻮﺫﺝ ﻣﺼﻤﻢ ﻟﺴﻬﻮﻟﺔ ﺍﻟﻮﺻﻮﻝ ﻭﺍﻟﺘﻌﺪﻳﻞ ﺑﺪﻻ ًﻣﻦ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﺬﻱ ﻳﻮﻓﺮ
ﺍﻟﺤﺪﺍﻷﺩﻧﻰ ﻣﻦ ﺍﻟﺤﺠﻢ.
ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺒﻜﺮﺓ ﺍﻟﺒﺴﻴﻄﺔ ﻓﻲ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ) APLﻭ SNOBOLﻭ
(LISPﺗﻢ ﺗﻔﺴﻴﺮﻫﺎ ﺑﺤﺘﺔ ،ﺑﺤﻠﻮﻝ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ،ﻧﺎﺩﺭﺍً ﻣﺎ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﻨﻬﺞ ﻓﻲ ﺍﻟﻠﻐﺎﺕ
ﻋﺎﻟﻴﺔﺍﻟﻤﺴﺘﻮﻯ .ﻭﻣﻊ ﺫﻟﻚ ،ﻓﻲ ﺍﻟﺴﻨﻮﺍﺕ ﺍﻷﺧﻴﺮﺓ ،ﺣﻘﻘﺖ ﺍﻟﺘﺮﺟﻤﺔ ﺍﻟﻔﻮﺭﻳﺔ ﻋﻮﺩﺓ ﻣﻬﻤﺔ ﻣﻊ
ﺑﻌﺾﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﻟﻠﻮﻳﺐ ،ﻣﺜﻞ JavaScriptﻭ ، PHPﻭﺍﻟﺘﻲ ﺗﺴُﺘﺨﺪﻡ ﺍﻵﻥ ﻋﻠﻰ
ﻧﻄﺎﻕﻭﺍﺳﻊ .ﺗﻈﻬﺮ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻔﺴﻴﺮ ﺍﻟﻨﻘﻲ ﻓﻲ ﺍﻟﺸﻜﻞ .1.4
ﺍﻟﺸﻜﻞ1.4
ﻣﺼﺪﺭ
ﺑﺮﻧﺎﻣﺞ ﺗﻔﺴﻴﺮﻧﻘﻲ
ﺍﺩﺧﺎﻝﺍﻟﺒﻴﺎﻧﺎﺕ
ﻣﺘﺮﺟﻢ
ﻧﺘﺎﺉﺞ
29 1.7ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ
ﺍﻟﺸﻜﻞ1.5
ﻣﺼﺪﺭ
ﺑﺮﻧﺎﻣﺞ ﺗﻨﻔﻴﺬﻫﺠﻴﻦ
ﻧﻈﺎﻡ
ﻣﻌﺠﻤﻲ
ﻣﺤﻠﻞ
ﺍﻟﻮﺣﺪﺍﺕﺍﻟﻤﻌﺠﻤﻴﺔ
ﺑﻨﺎءﺍﻟﺠﻤﻠﺔ
ﻣﺤﻠﻞ
ﺗﺤﻠﻴﻞﺍﻷﺷﺠﺎﺭ
ﻣﺘﻮﺳﻂ
ﻣﻮﻟﺪﺍﻷﻛﻮﺍﺩ
ﻣﺘﻮﺳﻂ
ﺷﻔﺮﺓ
ﺍﺩﺧﺎﻝﺍﻟﺒﻴﺎﻧﺎﺕ
ﻣﺘﺮﺟﻢ
ﻧﺘﺎﺉﺞ
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 30
ﻳﺘﻢﺗﻨﻔﻴﺬ Perlﺑﻨﻈﺎﻡ ﻫﺠﻴﻦ .ﻳﺘﻢ ﺗﺠﻤﻴﻊ ﺑﺮﺍﻣﺞ Perlﺟﺰﺉﻴﺎً ﻻﻛﺘﺸﺎﻑ ﺍﻷﺧﻄﺎء ﻗﺒﻞ
ﺍﻟﺘﻔﺴﻴﺮﻭﻟﺘﺒﺴﻴﻂ ﺍﻟﻤﺘﺮﺟﻢ ﺍﻟﻔﻮﺭﻱ.
ﻛﺎﻧﺖﺟﻤﻴﻊ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻷﻭﻟﻴﺔ ﻟﺠﺎﻓﺎ ﻣﺨﺘﻠﻄﺔ .ﺷﻜﻠﻪ ﺍﻟﻮﺳﻴﻂ ﻳﺴﻤﻰﻛﻮﺩ ﺍﻟﺒﺎﻳﺖ،
ﻳﻮﻓﺮﺇﻣﻜﺎﻧﻴﺔ ﺍﻟﻨﻘﻞ ﺇﻟﻰ ﺃﻱ ﺟﻬﺎﺯ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﻣﺘﺮﺟﻢ ﺷﻔﺮﺓ ﺑﺎﻳﺖ ﻭﻧﻈﺎﻡ ﻭﻗﺖ ﺗﺸﻐﻴﻞ ﻣﺮﺗﺒﻂ
ﺑﻪ.ﻣﻌﺎً ،ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻷﺟﻬﺰﺓ .Java Virtual Machineﺗﻮﺟﺪ ﺍﻵﻥ ﺃﻧﻈﻤﺔ ﺗﺘﺮﺟﻢ ﻛﻮﺩ byte
Javaﺇﻟﻰ ﻛﻮﺩ ﺁﻟﺔ ﻟﺘﻨﻔﻴﺬ ﺃﺳﺮﻉ.
ﻳﻘﻮﻡﻧﻈﺎﻡ ﺍﻟﺘﻨﻔﻴﺬ ( Just-in-Time )JITﺑﺘﺮﺟﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﻣﺒﺪﺉﻴﺎً ﺇﻟﻰ ﻟﻐﺔ ﻭﺳﻴﻄﺔ .ﺛﻢ ،
ﺃﺛﻨﺎءﺍﻟﺘﻨﻔﻴﺬ ،ﻳﻘﻮﻡ ﺑﺘﺠﻤﻴﻊ ﺃﺳﺎﻟﻴﺐ ﺍﻟﻠﻐﺔ ﺍﻟﻮﺳﻴﻄﺔ ﻓﻲ ﺭﻣﺰ ﺍﻵﻟﺔ ﻋﻨﺪﻣﺎ ﻳﺘﻢ ﺍﺳﺘﺪﻋﺎﺅﻫﺎ .ﻳﺘﻢ
ﺍﻻﺣﺘﻔﺎﻅﺑﺈﺻﺪﺍﺭ ﻛﻮﺩ ﺍﻟﺠﻬﺎﺯ ﻟﻠﻤﻜﺎﻟﻤﺎﺕ ﺍﻟﻼﺣﻘﺔ .ﺗﺴﺘﺨﺪﻡ ﺃﻧﻈﻤﺔ JITﺍﻵﻥ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ
ﻟﺒﺮﺍﻣﺞ .Javaﺃﻳﻀﺎً ،ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺟﻤﻴﻊ ﻟﻐﺎﺕ NET.ﺑﺎﺳﺘﺨﺪﺍﻡ ﻧﻈﺎﻡ .JIT
ﻓﻲﺑﻌﺾ ﺍﻷﺣﻴﺎﻥ ،ﻗﺪ ﻳﻮﻓﺮ ﺍﻟﻤﻨﻔﺬ ﻛﻼ ًﻣﻦ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﻤﺘﺮﺟﻤﺔ ﻭﺍﻟﻤﺘﺮﺟﻤﺔ ﻟﻠﻐﺔ.
ﻓﻲﻫﺬﻩ ﺍﻟﺤﺎﻻﺕ ،ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺘﺮﺟﻢ ﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﻭﺗﺼﺤﻴﺤﻬﺎ .ﺑﻌﺪ ﺫﻟﻚ ،ﺑﻌﺪ ﺍﻟﻮﺻﻮﻝ
ﺇﻟﻰﺣﺎﻟﺔ ﺧﺎﻟﻴﺔ ﻣﻦ ﺍﻷﺧﻄﺎء )ﻧﺴﺒﻴﺎً( ،ﻳﺘﻢ ﺗﺠﻤﻴﻊ ﺍﻟﺒﺮﺍﻣﺞ ﻟﺰﻳﺎﺩﺓ ﺳﺮﻋﺔ ﺗﻨﻔﻴﺬﻫﺎ.
1.7.4ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﻤﺴﺒﻘﺔ
ﺃﺍﻟﻤﻌﺎﻟﺞﻫﻮ ﺑﺮﻧﺎﻣﺞ ﻳﻌﺎﻟﺞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻣﺒﺎﺷﺮﺓ ﻗﺒﻞ ﺗﺠﻤﻴﻊ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﻳﺘﻢ ﺗﻀﻤﻴﻦ ﺗﻌﻠﻴﻤﺎﺕ
ﺍﻟﻤﻌﺎﻟﺞﺍﻟﻤﺴﺒﻖ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ .ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﺴﺒﻖ ﻫﻮ ﻓﻲ ﺍﻷﺳﺎﺱ ﻣﻮﺳﻊ ﻣﺎﻛﺮﻭ .ﺗﺴُﺘﺨﺪﻡ
ﺇﺭﺷﺎﺩﺍﺕﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﺴﺒﻖ ﺑﺸﻜﻞ ﺷﺎﺉﻊ ﻟﺘﺤﺪﻳﺪ ﺃﻥ ﺍﻟﻜﻮﺩ ﻣﻦ ﻣﻠﻒ ﺁﺧﺮ ﺳﻴﺘﻢ ﺗﻀﻤﻴﻨﻪ .ﻋﻠﻰ
ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ،ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ C
ﻻﺣﻆﺃﻥ ﻫﺬﻩ ﻭﺍﺣﺪﺓ ﻣﻦ ﺗﻠﻚ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﺴﺒﺐ ﻓﻴﻬﺎ ﺍﻵﺛﺎﺭ ﺍﻟﺠﺎﻧﺒﻴﺔ ﻟﻠﺘﻌﺒﻴﺮ
ﻣﺸﻜﻠﺔ.ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺇﺫﺍ ﻛﺎﻥ ﺃﻱ ﻣﻦ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﻤﻌﻄﺎﺓ ﻟـﺍﻷﻋﻠﻰﺍﻟﻤﺎﻛﺮﻭ ﻟﻬﺎ ﺁﺛﺎﺭ ﺟﺎﻧﺒﻴﺔ
-ﻣﺜﻞz ++ -ﻳﻤﻜﻦ ﺃﻥ ﻳﺴﺒﺐ ﻣﺸﻜﻠﺔ .ﻧﻈﺮﺍً ﻷﻧﻪ ﻳﺘﻢ ﺗﻘﻴﻴﻢ ﺃﺣﺪ ﻣﻌﺎﻣﻠﻲ ﺍﻟﺘﻌﺒﻴﺮ ﻣﺮﺗﻴﻦ ،ﻓﻘﺪ
ﻳﻨﺘﺞﻋﻦ ﺫﻟﻚﺽﻳﺘﻢ ﺯﻳﺎﺩﺗﻬﺎ ﻣﺮﺗﻴﻦ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻜﻮﺩ ﺍﻟﻨﺎﺗﺞ ﻋﻦ ﺍﻟﺘﻮﺳﻊ ﺍﻟﻜﻠﻲ.
31 ﻣﻠﺨﺺ
1.8ﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ
ﺑﻴﺉﺔﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ .ﻗﺪ ﺗﺘﻜﻮﻥ ﻫﺬﻩ
ﺍﻟﻤﺠﻤﻮﻋﺔﻓﻘﻂ ﻣﻦ ﻧﻈﺎﻡ ﻣﻠﻔﺎﺕ ﻭﻣﺤﺮﺭ ﻧﺼﻮﺹ ﻭﺭﺍﺑﻂ ﻭﻣﺘﺮﺟﻢ .ﺃﻭ ﻗﺪ ﻳﺘﻀﻤﻦ ﻣﺠﻤﻮﻋﺔ
ﻛﺒﻴﺮﺓﻣﻦ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﺘﻜﺎﻣﻠﺔ ،ﻳﺘﻢ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﻛﻞ ﻣﻨﻬﺎ ﻣﻦ ﺧﻼﻝ ﻭﺍﺟﻬﺔ ﻣﺴﺘﺨﺪﻡ ﻣﻮﺣﺪﺓ.
ﻓﻲﺍﻟﺤﺎﻟﺔ ﺍﻷﺧﻴﺮﺓ ،ﻳﺘﻢ ﺗﺤﺴﻴﻦ ﺗﻄﻮﻳﺮ ﻭﺻﻴﺎﻧﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺸﻜﻞ ﻛﺒﻴﺮ .ﻟﺬﻟﻚ ،ﻓﺈﻥ ﺧﺼﺎﺉﺺ
ﻟﻐﺔﺍﻟﺒﺮﻣﺠﺔ ﻟﻴﺴﺖ ﻫﻲ ﺍﻟﻤﻘﻴﺎﺱ ﺍﻟﻮﺣﻴﺪ ﻟﻘﺪﺭﺓ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻟﻠﻨﻈﺎﻡ .ﻧﺤﻦ ﺍﻵﻥ ﻧﺼﻒ
ﺑﺈﻳﺠﺎﺯﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ.
Java.ﻫﻮ ﻧﻈﺎﻡ ﻣﻌﻘﺪ ﻭﻗﻮﻱ ﻹﻧﺸﺎء ﺑﺮﺍﻣﺞ . JBuilderﺣﻴﺚ ﻳﺘﻢ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﺍﻷﺭﺑﻌﺔ ﻣﻦ
ﺧﻼﻝﻭﺍﺟﻬﺔ ﺭﺳﻮﻣﻴﺔ Java ،ﻫﻲ ﺑﻴﺉﺔ ﺑﺮﻣﺠﺔ ﺗﻮﻓﺮ ﻣﺘﺮﺟﻤﺎً ﻣﺘﻜﺎﻣﻼً ﻭﻣﺤﺮﺭﺍً ﻭﻣﺼﺤﺢ ﺃﺧﻄﺎء
ﻭﻧﻈﺎﻡﻣﻠﻔﺎﺕ ﻟﺘﻄﻮﻳﺮ Borland JBuilder
ﻳﻌﺪ Microsoft Visual Studio .NETﺧﻄﻮﺓ ﺣﺪﻳﺜﺔ ﻧﺴﺒﻴﺎً ﻓﻲ ﺗﻄﻮﺭ ﺑﻴﺉﺎﺕ ﺗﻄﻮﻳﺮ
ﺍﻟﺒﺮﺍﻣﺞ.ﺇﻧﻬﺎ ﻣﺠﻤﻮﻋﺔ ﻛﺒﻴﺮﺓ ﻭﻣﺘﻘﻨﺔ ﻣﻦ ﺃﺩﻭﺍﺕ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ،ﻭﻛﻠﻬﺎ ﺗﺴﺘﺨﺪﻡ ﻣﻦ ﺧﻼﻝ
ﻭﺍﺟﻬﺔﻧﺎﻓﺬﺓ .ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﻨﻈﺎﻡ ﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺄﻱ ﻟﻐﺔ ﻣﻦ ﻟﻐﺎﺕ NET.ﺍﻟﺨﻤﺲC :
#ﻭ Visual BASIC .NETﻭ ) JScriptﺇﺻﺪﺍﺭ Microsoftﻣﻦ (JavaScriptﻭ ) # Fﻟﻐﺔ
ﻭﻇﻴﻔﻴﺔ( ﻭ .C ++ / CLI
.ﺃﻛﺜﺮﻣﻦ ﻣﺠﺮﺩ ﺑﻴﺉﺎﺕ ﺗﻄﻮﻳﺮ -ﻭﻫﻤﺎ ﺃﻳﻀﺎً ﺇﻃﺎﺭﺍﺕ ﻋﻤﻞ ،ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻬﻤﺎ ﻳﻮﻓﺮﺍﻥ
ﺑﺎﻟﻔﻌﻞﺃﺟﺰﺍء ﻣﺸﺘﺮﻛﺔ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ ﻟﻠﺘﻄﺒﻴﻖ NetBeansﻭ Visual Studioﻳﻌﺪ
ﻛﻞﻣﻦ PHP.ﻭ Rubyﻭ JavaScriptﻭﻟﻜﻨﻬﺎ ﺗﺪﻋﻢ ﺃﻳﻀﺎً Javaﻋﺒﺎﺭﺓ ﻋﻦ ﺑﻴﺉﺔ ﺗﻄﻮﻳﺮ ﺗﺴُﺘﺨﺪﻡ
ﺑﺸﻜﻞﺃﺳﺎﺳﻲ ﻟﺘﻄﻮﻳﺮ ﺗﻄﺒﻴﻘﺎﺕ NetBeans
ﻣﻠﺨﺺ
ﺗﻌﺘﺒﺮﺩﺭﺍﺳﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺫﺍﺕ ﻗﻴﻤﺔ ﻟﺒﻌﺾ ﺍﻷﺳﺒﺎﺏ ﺍﻟﻤﻬﻤﺔ :ﻓﻬﻲ ﺗﺰﻳﺪ ﻣﻦ ﻗﺪﺭﺗﻨﺎ ﻋﻠﻰ
ﺍﺳﺘﺨﺪﺍﻡﺗﺮﺍﻛﻴﺐ ﻣﺨﺘﻠﻔﺔ ﻓﻲ ﺑﺮﺍﻣﺞ ﺍﻟﻜﺘﺎﺑﺔ ،ﻭﺗﻤﻜﻨﻨﺎ ﻣﻦ ﺍﺧﺘﻴﺎﺭ ﺍﻟﻠﻐﺎﺕ ﻟﻠﻤﺸﺎﺭﻳﻊ ﺑﺸﻜﻞ ﺃﻛﺜﺮ
ﺫﻛﺎء ً،ﻭﺗﺠﻌﻞ ﺗﻌﻠﻢ ﻟﻐﺎﺕ ﺟﺪﻳﺪﺓ ﺃﺳﻬﻞ.
ﻣﻦﺑﻴﻦ ﺃﻫﻢ ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺎﺕ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻜﺘﺎﺑﺔ ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﻭﺍﻟﺘﻜﻠﻔﺔ ﺍﻹﺟﻤﺎﻟﻴﺔ.
ﺳﺘﻜﻮﻥﻫﺬﻩ ﻫﻲ ﺍﻷﺳﺎﺱ ﺍﻟﺬﻱ ﻧﻘﻮﻡ ﻋﻠﻰ ﺃﺳﺎﺳﻪ ﺑﻔﺤﺺ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻠﻐﻮﻳﺔ ﺍﻟﻤﺨﺘﻠﻔﺔ ﺍﻟﺘﻲ
ﺗﻤﺖﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻟﺠﺰء ﺍﻟﻤﺘﺒﻘﻲ ﻣﻦ ﺍﻟﻜﺘﺎﺏ ﻭﺍﻟﺤﻜﻢ ﻋﻠﻴﻬﺎ.
ﺭﺍﺟﻊﺍﻷﺳﺉﻠﺔ
.1ﻟﻤﺎﺫﺍ ﻣﻦ ﺍﻟﻤﻔﻴﺪ ﻟﻠﻤﺒﺮﻣﺞ ﺃﻥ ﻳﻜﻮﻥ ﻟﺪﻳﻪ ﺑﻌﺾ ﺍﻟﺨﻠﻔﻴﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ
ﺃﻧﻪﻗﺪ ﻻ ﻳﻘﻮﻡ ﺃﺑﺪﺍً ﺑﺘﺼﻤﻴﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ؟
.2ﻛﻴﻒ ﻳﻤﻜﻦ ﺃﻥ ﺗﻔﻴﺪ ﻣﻌﺮﻓﺔ ﺧﺼﺎﺉﺺ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻣﺠﺘﻤﻊ ﺍﻟﺤﻮﺳﺒﺔ ﺑﺄﻛﻤﻠﻪ؟
.3ﻣﺎ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺳﻴﻄﺮﺕ ﻋﻠﻰ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﻌﻠﻤﻴﺔ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً
ﺍﻟﻤﺎﺿﻴﺔ؟
.4ﻣﺎ ﻫﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺳﻴﻄﺮﺕ ﻋﻠﻰ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً
ﺍﻟﻤﺎﺿﻴﺔ؟
.5ﻣﺎ ﻫﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺳﻴﻄﺮﺕ ﻋﻠﻰ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً
ﺍﻟﻤﺎﺿﻴﺔ؟
.6ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﻤﻌﻈﻢ ﻳﻮﻧﻜﺲ؟
.7ﻣﺎ ﻫﻲ ﻋﻴﻮﺏ ﻭﺟﻮﺩ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﻓﻲ ﺍﻟﻠﻐﺔ؟
.8ﻛﻴﻒ ﻳﻤﻜﻦ ﻟﻠﻤﺸﻐﻞ ﺍﻟﺬﻱ ﻳﺤﺪﺩﻩ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺃﻥ ﻳﺆﺩﻱ ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ ﺇﻟﻰ ﺍﻹﺿﺮﺍﺭ ﺑﻘﺮﺍءﺓ
ﺍﻟﺒﺮﻧﺎﻣﺞ؟
.9ﻣﺎ ﻫﻮ ﺃﺣﺪ ﺍﻷﻣﺜﻠﺔ ﻋﻠﻰ ﺍﻻﻓﺘﻘﺎﺭ ﺇﻟﻰ ﺍﻟﺘﻌﺎﻣﺪ ﻓﻲ ﺗﺼﻤﻴﻢ C؟
.10ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺍﻟﺘﻌﺎﻣﺪ ﻛﻤﻌﻴﺎﺭ ﺗﺼﻤﻴﻢ ﺃﺳﺎﺳﻲ؟
.11ﻣﺎ ﺑﻴﺎﻥ ﺍﻟﻀﺒﻂ ﺍﻟﺒﺪﺍﺉﻲ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻟﺒﻨﺎء ﺑﻴﺎﻧﺎﺕ ﺗﺤﻜﻢ ﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ﺑﺎﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ
ﺗﻔﺘﻘﺮﺇﻟﻴﻬﺎ؟
.12ﻣﺎ ﻫﻲ ﺑﻨﻴﺔ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﻮﻓﺮ ﺗﺠﺮﻳﺪﺍً ﻟﻠﻌﻤﻠﻴﺔ؟
.19ﻣﺎ ﻫﻲ ﺃﻗﻮﻯ ﺍﻟﺘﺄﺛﻴﺮﺍﺕ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً
ﺍﻟﻤﺎﺿﻴﺔ؟
.20ﻣﺎ ﺍﺳﻢ ﻓﺉﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﻤﻠﻲ ﺑﻨﻴﺘﻬﺎ ﻣﻦ ﻗﺒﻞ ﻫﻨﺪﺳﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻮﻥ
ﻧﻴﻮﻣﺎﻥ؟
.21ﻣﺎ ﻫﻮ ﺍﻟﻨﻘﺼﺎﻥ ﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻠﺬﺍﻥ ﺗﻢ ﺍﻛﺘﺸﺎﻓﻬﻤﺎ ﻧﺘﻴﺠﺔ ﺍﻟﺒﺤﺚ ﻓﻲ ﺗﻄﻮﻳﺮ
ﺍﻟﺒﺮﻣﺠﻴﺎﺕﻓﻲ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ؟
.22ﻣﺎ ﻫﻲ ﺍﻟﺴﻤﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﺜﻼﺛﺔ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ؟
.23ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻛﺎﻧﺖ ﺃﻭﻝ ﻣﻦ ﺩﻋﻢ ﺍﻟﺴﻤﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﺜﻼﺛﺔ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ؟
.24ﻣﺎ ﻫﻮ ﻣﺜﺎﻝ ﻟﻤﻌﺎﻳﻴﺮ ﺗﺼﻤﻴﻢ ﻟﻐﺘﻴﻦ ﺗﺘﻌﺎﺭﺽ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ ﻣﻊ ﺑﻌﻀﻬﻤﺎ ﺍﻟﺒﻌﺾ؟
.26ﻣﺎ ﺍﻟﺬﻱ ﻳﻨﺘﺞ ﻋﻨﻪ ﺗﻨﻔﻴﺬ ﺃﺳﺮﻉ ﻟﻠﺒﺮﻧﺎﻣﺞ ،ﻣﺘﺮﺟﻢ ﺃﻡ ﻣﺘﺮﺟﻢ ﻣﺤﺾ؟
ﺗﻢﺿﺒﻂ ﺍﻟﻤﺸﻜﻠﺔ
.1ﻫﻞ ﺗﻌﺘﻘﺪ ﺃﻥ ﻗﺪﺭﺗﻨﺎ ﻋﻠﻰ ﺍﻟﺘﻔﻜﻴﺮ ﺍﻟﻤﺠﺮﺩ ﺗﺘﺄﺛﺮ ﺑﻤﻬﺎﺭﺍﺗﻨﺎ ﺍﻟﻠﻐﻮﻳﺔ؟ ﺩﻋﻢ ﺭﺃﻳﻚ.
.2ﻣﺎ ﻫﻲ ﺑﻌﺾ ﻣﻴﺰﺍﺕ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﺤﺪﺩﺓ ﺍﻟﺘﻲ ﺗﻌﺮﻑ ﺃﺳﺒﺎﺑﻬﺎ ﺍﻟﻐﺎﻣﻀﺔ ﺑﺎﻟﻨﺴﺒﺔ
ﻟﻚ؟
.3ﻣﺎ ﺍﻟﺤﺠﺞ ﺍﻟﺘﻲ ﻳﻤﻜﻨﻚ ﺗﻘﺪﻳﻤﻬﺎ ﻟﻔﻜﺮﺓ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﻟﺠﻤﻴﻊ ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ؟
.4ﻣﺎ ﻫﻲ ﺍﻟﺤﺠﺞ ﺍﻟﺘﻲ ﻳﻤﻜﻨﻚ ﺍﻟﻘﻴﺎﻡ ﺑﻬﺎ ﺿﺪ ﻓﻜﺮﺓ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﻟﺠﻤﻴﻊ ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ؟
.5ﺍﺳﻢ ﻭﺷﺮﺡ ﻣﻌﻴﺎﺭﺍً ﺁﺧﺮ ﻳﻤﻜﻦ ﻣﻦ ﺧﻼﻟﻪ ﺍﻟﺤﻜﻢ ﻋﻠﻰ ﺍﻟﻠﻐﺎﺕ )ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺗﻠﻚ ﺍﻟﺘﻲ
ﺗﻤﺖﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ(.
ﺍﻟﻔﺼﻞ 1ﻣﻘﺪﻣﺎﺕ 34
.6ﻣﺎ ﻋﺒﺎﺭﺓ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﺎﺉﻌﺔ ،ﺑﺮﺃﻳﻚ ،ﺍﻷﻛﺜﺮ ﺿﺮﺭﺍً ﻟﻘﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ؟
.7ﺗﺴﺘﺨﺪﻡ Javaﻗﻮﺳﺎً ﺃﻳﻤﻨﺎً ﻟﺘﻤﻴﻴﺰ ﻧﻬﺎﻳﺔ ﻛﺎﻓﺔ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﻤﺮﻛﺒﺔ .ﻣﺎ ﻫﻲ ﺍﻟﺤﺠﺞ
ﺍﻟﻤﺆﻳﺪﺓﻭﺍﻟﻤﻌﺎﺭﺿﺔ ﻟﻬﺬﺍ ﺍﻟﺘﺼﻤﻴﻢ؟
.8ﺗﻤﻴﺰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺑﻴﻦ ﺍﻷﺣﺮﻑ ﺍﻟﻜﺒﻴﺮﺓ ﻭﺍﻟﺼﻐﻴﺮﺓ ﻓﻲ ﺍﻷﺳﻤﺎء ﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ
ﺍﻟﻤﺴﺘﺨﺪﻡ.ﻣﺎ ﻫﻲ ﺇﻳﺠﺎﺑﻴﺎﺕ ﻭﺳﻠﺒﻴﺎﺕ ﻗﺮﺍﺭ ﺍﻟﺘﺼﻤﻴﻢ ﻫﺬﺍ؟
.9ﺷﺮﺡ ﺍﻟﺠﻮﺍﻧﺐ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻟﺘﻜﻠﻔﺔ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ.
.10ﻣﺎ ﻫﻲ ﺍﻟﺤﺠﺞ ﻟﻜﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﻓﻌﺎﻟﺔ ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻷﺟﻬﺰﺓ ﻏﻴﺮ ﻣﻜﻠﻔﺔ ﻧﺴﺒﻴﺎً؟
.11ﺻﻒِ ﺑﻌﺾ ﺍﻟﻤﻘﺎﻳﻀﺎﺕ ﻓﻲ ﺍﻟﺘﺼﻤﻴﻢ ﺑﻴﻦ ﺍﻟﻜﻔﺎءﺓ ﻭﺍﻷﻣﺎﻥ ﻓﻲ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ
ﺗﻌﺮﻓﻬﺎ.
.12ﻓﻲ ﺭﺃﻳﻚ ،ﻣﺎ ﻫﻲ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﺘﻲ ﻗﺪ ﺗﺘﻀﻤﻨﻬﺎ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﺜﺎﻟﻴﺔ؟
.13ﻫﻞ ﺗﻢ ﺗﻨﻔﻴﺬ ﺃﻭﻝ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺗﻌﻠﻤﺘﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﺘﺮﺟﻢ ﻓﻮﺭﻱ ﺃﻭ ﻧﻈﺎﻡ
ﺗﻨﻔﻴﺬﻫﺠﻴﻦ ﺃﻭ ﻣﺘﺮﺟﻢ؟ )ﻗﺪ ﺗﻀﻄﺮ ﺇﻟﻰ ﺍﻟﺒﺤﺚ ﻋﻦ ﻫﺬﺍ(.
.15ﻛﻴﻒ ﺗﺆﺛﺮ ﺟﻤﻞ ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﺒﺴﻴﻄﺔ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺔ ﻗﺮﺍءﺓ ﺍﻟﻠﻐﺔ ،ﻣﻊ ﺍﻷﺧﺬ ﻓﻲ
ﺍﻻﻋﺘﺒﺎﺭﺃﻥ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﻻ ﺗﺘﻄﻠﺒﻬﺎ؟
.16ﺍﻛﺘﺐ ﺗﻘﻴﻴﻤﺎً ﻟﺒﻌﺾ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﻌﺮﻓﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﻤﻮﺿﺤﺔ ﻓﻲ ﻫﺬﺍ
ﺍﻟﻔﺼﻞ.
.17ﺑﻌﺾ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ -ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺑﺎﺳﻜﺎﻝ -ﺍﺳﺘﺨﺪﻣﺖ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻤﻨﻘﻮﻃﺔ
ﻟﻔﺼﻞﺍﻟﺘﻌﻠﻴﻤﺎﺕ ،ﺑﻴﻨﻤﺎ ﻳﺴﺘﺨﺪﻣﻬﺎ ﺟﺎﻓﺎ ﻹﻧﻬﺎء ﺍﻟﺘﻌﻠﻴﻤﺎﺕ .ﺃﻱ ﻣﻦ ﻫﺬﻩ ،ﺑﺮﺃﻳﻚ ،ﻫﻮ
ﺍﻷﻛﺜﺮﻃﺒﻴﻌﻴﺔ ﻭﺍﻷﻗﻞ ﺍﺣﺘﻤﺎﻻً ﺃﻥ ﻳﺆﺩﻱ ﺇﻟﻰ ﺃﺧﻄﺎء ﻧﺤﻮﻳﺔ؟ ﺍﺩﻋﻢ ﺇﺟﺎﺑﺘﻚ.
Plankalkül Zuse2.1
2.2ﺍﻷﻛﻮﺍﺩ ﺍﻟﻜﺎﺫﺑﺔ
2.3ﺁﻱ ﺑﻲ ﺇﻡ 704ﻭﻓﻮﺭﺗﺮﺍﻥ
2.4ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔLISP :
2.5ﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻧﺤﻮ ﺍﻟﺘﻄﻮﺭALGOL 60 :
2.6ﺣﻮﺳﺒﺔ ﺳﺠﻼﺕ ﺍﻷﻋﻤﺎﻝCOBOL :
2.7ﺑﺪﺍﻳﺎﺕ ﺍﻟﻤﺸﺎﺭﻛﺔ ﺑﺎﻟﻮﻗﺖBASIC :
2.8ﻛﻞ ﺷﻲء ﻟﻠﺠﻤﻴﻊPL / I :
2.9ﻟﻐﺘﺎﻥ ﺩﻳﻨﺎﻣﻴﻜﻴﺘﺎﻥ ﻣﺒﻜﺮﺗﺎﻥ APL :ﻭ SNOBOL
2.10ﺑﺪﺍﻳﺎﺕ ﺍﺳﺘﺨﺮﺍﺝ ﺍﻟﺒﻴﺎﻧﺎﺕSIMULA 67 :
2.11ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﺘﻌﺎﻣﺪALGOL 68 :
2.12ﺑﻌﺾ ﺍﻷﺣﻔﺎﺩ ﺍﻷﻭﺍﺉﻞ ﻣﻦ ALGOLs
2.13ﺍﻟﺒﺮﻣﺠﺔ ﻋﻠﻰ ﺃﺳﺎﺱ ﺍﻟﻤﻨﻄﻖ :ﺑﺮﻭﻟﻮﺝ
2.14ﺃﻛﺒﺮ ﺟﻬﺪ ﺗﺼﻤﻴﻢ ﻓﻲ ﺍﻟﺘﺎﺭﻳﺦAda :
2.15ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔSmalltalk :
2.16ﺍﻟﺠﻤﻊ ﺑﻴﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺤﺘﻤﻴﺔ ﻭﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻟﻜﺎﺉﻦ++ C :
2.17ﻟﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ :ﺟﺎﻓﺎ
2.18ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ
2.19ﻟﻐﺔ NET.ﺍﻟﺮﺉﻴﺴﻴﺔ# C :
2.20ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ /ﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﻬﺠﻴﻨﺔ
35
ﺗﻲ
ﺗﻄﻮﺭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﻔﺼﻞ2 36
ﻳﺼﻒﻓﺼﻠﻪ ﺗﻄﻮﻳﺮ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ .ﻳﺴﺘﻜﺸﻒ ﺍﻟﺒﻴﺉﺔ ﺍﻟﺘﻲ ﺗﻢ ﺗﺼﻤﻴﻢ ﻛﻞ
ﻣﻨﻬﺎﻭﻳﺮﻛﺰ ﻋﻠﻰ ﻣﺴﺎﻫﻤﺎﺕ ﺍﻟﻠﻐﺔ ﻭﺍﻟﺪﻭﺍﻓﻊ ﻟﺘﻄﻮﻳﺮﻫﺎ .ﻟﻢ ﻳﺘﻢ ﺗﻀﻤﻴﻦ ﺃﻭﺻﺎﻑ ﺍﻟﻠﻐﺔ
ﺍﻟﻌﺎﻣﺔ ؛ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ،ﻧﻨﺎﻗﺶ ﻓﻘﻂ ﺑﻌﺾ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺠﺪﻳﺪﺓ ﺍﻟﺘﻲ ﺗﻘﺪﻣﻬﺎ ﻛﻞ ﻟﻐﺔ .ﻣﻦ
ﺍﻷﻣﻮﺭﺫﺍﺕ ﺍﻷﻫﻤﻴﺔ ﺍﻟﺨﺎﺻﺔ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺘﻲ ﺃﺛﺮﺕ ﺑﺸﻜﻞ ﻛﺒﻴﺮ ﻋﻠﻰ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻼﺣﻘﺔ ﺃﻭ ﻓﻲ ﻣﺠﺎﻝ ﻋﻠﻮﻡ
ﺍﻟﻜﻤﺒﻴﻮﺗﺮ.
ﻻﻳﺘﻀﻤﻦ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻣﻨﺎﻗﺸﺔ ﻣﺘﻌﻤﻘﺔ ﻷﻱ ﺳﻤﺔ ﺃﻭ ﻣﻔﻬﻮﻡ ﻟﻐﻮﻱ ؛ ﻣﺎ ﺗﺒﻘﻰ ﻣﻦ ﻓﺼﻮﻝ
ﻻﺣﻘﺔ.ﺳﺘﻜﻮﻥ ﺍﻟﺸﺮﻭﺣﺎﺕ ﺍﻟﻤﻮﺟﺰﺓ ﻭﻏﻴﺮ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻠﻤﻴﺰﺍﺕ ﻛﺎﻓﻴﺔ ﻟﺮﺣﻠﺘﻨﺎ ﻣﻦ ﺧﻼﻝ ﺗﻄﻮﻳﺮ ﻫﺬﻩ
ﺍﻟﻠﻐﺎﺕ.
ﻳﻨﺎﻗﺶﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﻭﻣﻔﺎﻫﻴﻢ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻟﻦ ﺗﻜﻮﻥ ﻣﺄﻟﻮﻓﺔ ﻟﻜﺜﻴﺮ
ﻣﻦﺍﻟﻘﺮﺍء .ﺗﺘﻢ ﻣﻨﺎﻗﺸﺔ ﻫﺬﻩ ﺍﻟﻤﻮﺿﻮﻋﺎﺕ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻘﻂ ﻓﻲ ﻓﺼﻮﻝ ﻻﺣﻘﺔ .ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻳﺠﺪﻭﻥ
ﻫﺬﺍﺍﻷﻣﺮ ﻣﺰﻋﺠﺎً ﻗﺪ ﻳﻔﻀﻠﻮﻥ ﺗﺄﺧﻴﺮ ﻗﺮﺍءﺓ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﺣﺘﻰ ﻳﺘﻢ ﺩﺭﺍﺳﺔ ﺑﻘﻴﺔ ﺍﻟﻜﺘﺎﺏ.
ﻛﺎﻥﺍﺧﺘﻴﺎﺭ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺳﻴﺘﻢ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻫﻨﺎ ﺃﻣﺮﺍً ﺷﺨﺼﻴﺎً ،ﻭﺳﻮﻑ ﻳﻼﺣﻆ ﺑﻌﺾ ﺍﻟﻘﺮﺍء
ﻟﻸﺳﻒﻋﺪﻡ ﻭﺟﻮﺩ ﻭﺍﺣﺪﺓ ﺃﻭ ﺃﻛﺜﺮ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻔﻀﻠﺔ ﻟﺪﻳﻬﻢ .ﻭﻣﻊ ﺫﻟﻚ ،ﻟﻠﺤﻔﺎﻅ ﻋﻠﻰ ﻫﺬﻩ
ﺍﻟﺘﻐﻄﻴﺔﺍﻟﺘﺎﺭﻳﺨﻴﺔ ﺑﺤﺠﻢ ﻣﻌﻘﻮﻝ ،ﻛﺎﻥ ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺍﺳﺘﺒﻌﺎﺩ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﻳﻘﺪﺭﻫﺎ ﺍﻟﺒﻌﺾ
ﺑﺸﻜﻞﻛﺒﻴﺮ .ﺍﺳﺘﻨﺪﺕ ﺍﻻﺧﺘﻴﺎﺭﺍﺕ ﺇﻟﻰ ﺗﻘﺪﻳﺮﻧﺎ ﻷﻫﻤﻴﺔ ﻛﻞ ﻟﻐﺔ ﻓﻲ ﺗﻄﻮﻳﺮ ﺍﻟﻠﻐﺔ ﻭﻋﺎﻟﻢ ﺍﻟﺤﻮﺳﺒﺔ ﻛﻜﻞ.
ﻧﻘﻮﻡﺃﻳﻀﺎً ﺑﺘﻀﻤﻴﻦ ﻣﻨﺎﻗﺸﺎﺕ ﻣﻮﺟﺰﺓ ﻟﺒﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﺍﻟﺘﻲ ﺗﻤﺖ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻴﻬﺎ ﻻﺣﻘﺎً ﻓﻲ
ﺍﻟﻜﺘﺎﺏ.
ﻳﺘﻢﺗﻨﻈﻴﻢ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ :ﺗﺘﻢ ﻣﻨﺎﻗﺸﺔ ﺍﻟﻨﺴﺦ ﺍﻷﻭﻟﻴﺔ ﻟﻠﻐﺎﺕ ﺑﺸﻜﻞ ﻋﺎﻡ
ﺑﺘﺮﺗﻴﺐﺯﻣﻨﻲ .ﻭﻣﻊ ﺫﻟﻚ ،ﺗﻈﻬﺮ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﻼﺣﻘﺔ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﻣﻊ ﻧﺴﺨﺘﻬﺎ ﺍﻷﻭﻟﻴﺔ ،ﻭﻟﻴﺲ ﻓﻲ
ﺍﻷﻗﺴﺎﻡﺍﻟﻼﺣﻘﺔ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ Fortran 2003ﻓﻲ ﺍﻟﻘﺴﻢ ﻣﻊ (I )1956
.Fortranﺃﻳﻀﺎً ،ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ،ﺗﻈﻬﺮ ﺍﻟﻠﻐﺎﺕ ﺫﺍﺕ ﺍﻷﻫﻤﻴﺔ ﺍﻟﺜﺎﻧﻮﻳﺔ ﻭﺍﻟﻤﺮﺗﺒﻄﺔ ﺑﻠﻐﺔ ﻟﻬﺎ
ﻗﺴﻢﺧﺎﺹ ﺑﻬﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻘﺴﻢ.
ﻳﺘﻀﻤﻦﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻗﻮﺍﺉﻢ ﺑـ 14ﻧﻤﻮﺫﺟﺎً ﻛﺎﻣﻼ ًﻟﻠﺒﺮﺍﻣﺞ ،ﻛﻞ ﻣﻨﻬﺎ ﺑﻠﻐﺔ ﻣﺨﺘﻠﻔﺔ .ﻟﻢ ﻳﺘﻢ
ﻭﺻﻒﻫﺬﻩ ﺍﻟﺒﺮﺍﻣﺞ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ؛ ﺇﻧﻬﺎ ﺗﻬﺪﻑ ﺑﺒﺴﺎﻃﺔ ﺇﻟﻰ ﺗﻮﺿﻴﺢ ﻣﻈﻬﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺑﻬﺬﻩ ﺍﻟﻠﻐﺎﺕ.
ﻳﺠﺐﺃﻥ ﻳﻜﻮﻥ ﺍﻟﻘﺮﺍء ﺍﻟﻤﻄﻠﻌﻮﻥ ﻋﻠﻰ ﺃﻱ ﻣﻦ ﻟﻐﺎﺕ ﺍﻷﻣﺮ ﺍﻟﺸﺎﺉﻌﺔ ﻗﺎﺩﺭﻳﻦ ﻋﻠﻰ ﻗﺮﺍءﺓ ﻭﻓﻬﻢ ﻣﻌﻈﻢ
ﺍﻟﺘﻌﻠﻴﻤﺎﺕﺍﻟﺒﺮﻣﺠﻴﺔ ﻓﻲ ﻫﺬﻩ ﺍﻟﺒﺮﺍﻣﺞ ،ﺑﺎﺳﺘﺜﻨﺎء ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ LISPﻭ COBOLﻭ Smalltalk
.
)ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻭﻇﻴﻔﺔ ﻣﺨﻄﻂ ﻣﺸﺎﺑﻬﺔ ﻟﻤﺜﺎﻝ LISPﻓﻲ ﺍﻟﻔﺼﻞ (.15ﻳﺘﻢ ﺣﻞ ﺍﻟﻤﺸﻜﻠﺔ ﻧﻔﺴﻬﺎ
ﺑﻮﺍﺳﻄﺔﺑﺮﺍﻣﺞ Fortranﻭ ALGOL 60ﻭ PL / Iﻭ BASICﻭ Pascalﻭ Cﻭ Perlﻭ Adaﻭ Javaﻭ
JavaScriptﻭ .# Cﻻﺣﻆ ﺃﻥ ﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻌﺎﺻﺮﺓ ﻓﻲ ﻫﺬﻩ ﺍﻟﻘﺎﺉﻤﺔ ﺗﺪﻋﻢ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ
ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ،ﻭﻟﻜﻦ ﺑﺴﺒﺐ ﺑﺴﺎﻃﺔ ﻣﺸﻜﻠﺔ ﺍﻟﻤﺜﺎﻝ ،ﻟﻢ ﻧﺴﺘﺨﺪﻣﻬﺎ ﻓﻲ ﻧﻤﺎﺫﺝ ﺍﻟﺒﺮﺍﻣﺞ .ﺃﻳﻀﺎً ،ﻓﻲ
ﺑﺮﻧﺎﻣﺞ ، Fortran 95ﺗﺠﻨﺒﻨﺎ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺘﻲ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺃﻥ ﺗﺘﺠﻨﺐ ﺍﺳﺘﺨﺪﺍﻡ
ﺍﻟﺤﻠﻘﺎﺕﺗﻤﺎﻣﺎً ،ﺟﺰﺉﻴﺎً ﻟﻠﺤﻔﺎﻅ ﻋﻠﻰ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺴﻴﻄﺎً ﻭﻗﺎﺑﻞ ﻟﻠﻘﺮﺍءﺓ ﻭﺟﺰﺉﻴﺎً ﻟﺘﻮﺿﻴﺢ ﺑﻨﻴﺔ ﺍﻟﺤﻠﻘﺔ
ﺍﻷﺳﺎﺳﻴﺔﻟﻠﻐﺔ.
ﺍﻟﺸﻜﻞ 2.1ﻋﺒﺎﺭﺓ ﻋﻦ ﻣﺨﻄﻂ ﻟﻌﻠﻢ ﺍﻷﻧﺴﺎﺏ ﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ
ﻫﺬﺍﺍﻟﻔﺼﻞ.
37 ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ
ﺍﻟﺸﻜﻞ2.1
Plankalkül Zuse2.1
ﺗﻌﺘﺒﺮﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻏﻴﺮ ﻣﻌﺘﺎﺩﺓ ﻣﻦ ﻋﺪﺓ ﺟﻮﺍﻧﺐ.
ﻟﺴﺒﺐﻭﺍﺣﺪ ،ﻟﻢ ﻳﺘﻢ ﺗﻨﻔﻴﺬﻩ ﺃﺑﺪﺍً .ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺗﻄﻮﻳﺮﻫﺎ ﻓﻲ ﻋﺎﻡ ، 1945
ﻟﻢﻳﺘﻢ ﻧﺸﺮ ﻭﺻﻔﻬﺎ ﺣﺘﻰ ﻋﺎﻡ .1972ﻧﻈﺮﺍً ﻷﻥ ﻗﻠﺔ ﻣﻦ ﺍﻟﻨﺎﺱ ﻛﺎﻧﻮﺍ ﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺑﺎﻟﻠﻐﺔ ،ﻓﺈﻥ
ﺑﻌﺾﻗﺪﺭﺍﺗﻬﺎ ﻟﻢ ﺗﻈﻬﺮ ﻓﻲ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﺇﻻ ﺑﻌﺪ 15ﻋﺎﻣﺎً ﻣﻦ ﺗﻄﻮﺭﻫﺎ.
2.1.1ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ
ﺑﻴﻦﻋﺎﻣﻲ 1936ﻭ ، 1945ﻗﺎﻡ ﺍﻟﻌﺎﻟﻢ ﺍﻷﻟﻤﺎﻧﻲ ﻛﻮﻧﺮﺍﺩ ﺗﺴﻮﺯﻩ )ﺍﻟﻤﻌﺮﻭﻑ ﺑﺎﺳﻢ "ﺗﺴﻮﺯﻭﻩ"( ﺑﺒﻨﺎء
ﺳﻠﺴﻠﺔﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻌﻘﺪﺓ ﻭﺍﻟﻤﻌﻘﺪﺓ ﻣﻦ ﺍﻟﻤﺮﺣﻼﺕ ﺍﻟﻜﻬﺮﻭﻣﻴﻜﺎﻧﻴﻜﻴﺔ .ﺑﺤﻠﻮﻝ
ﺃﻭﺍﺉﻞﻋﺎﻡ ، 1945ﺩﻣﺮ ﻗﺼﻒ ﺍﻟﺤﻠﻔﺎء ﺟﻤﻴﻊ ﻣﻮﺩﻳﻼﺗﻪ ﺍﻷﺧﻴﺮﺓ ،ﺑﺎﺳﺘﺜﻨﺎء ﻃﺮﺍﺯ ﻭﺍﺣﺪ ، Z4 ،
ﻟﺬﻟﻚﺍﻧﺘﻘﻞ ﺇﻟﻰ ﻗﺮﻳﺔ ﺑﺎﻓﺎﺭﻳﺔ ﻧﺎﺉﻴﺔ ، Hinterstein ،ﻭﺫﻫﺐ ﺃﻋﻀﺎء ﻣﺠﻤﻮﻋﺘﻪ ﺍﻟﺒﺤﺜﻴﺔ ﻓﻲ
ﻃﺮﻳﻘﻬﻢﺍﻟﻤﻨﻔﺼﻞ.
ﻣﻦﺧﻼﻝ ﺍﻟﻌﻤﻞ ﺑﻤﻔﺮﺩﻩ ،ﺷﺮﻉ Zuseﻓﻲ ﻣﺤﺎﻭﻟﺔ ﻟﺘﻄﻮﻳﺮ ﻟﻐﺔ ﻟﻠﺘﻌﺒﻴﺮ ﻋﻦ ﺍﻟﺤﺴﺎﺑﺎﺕ ﻟـ
، Z4ﻭﻫﻮ ﻣﺸﺮﻭﻉ ﻛﺎﻥ ﻗﺪ ﺑﺪﺃﻩ ﻓﻲ ﻋﺎﻡ 1943ﻛﺎﻗﺘﺮﺍﺡ ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﺩﺭﺟﺔ ﺍﻟﺪﻛﺘﻮﺭﺍﻩ .ﺃﻃﺮﻭﺣﺔ.
ﺃﻃﻠﻖﻋﻠﻰ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺍﺳﻢ ، Plankalkülﻣﻤﺎ ﻳﻌﻨﻲﺑﺮﻧﺎﻣﺞ ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ.ﻓﻲ
ﻣﺨﻄﻮﻃﺔﻃﻮﻳﻠﺔ ﻣﺆﺭﺧﺔ ﻋﺎﻡ 1945ﻭﻟﻜﻦ ﻟﻢ ﺗﻨﺸﺮ ﺣﺘﻰ ﻋﺎﻡ ، (Zuse ، 1972) 1972ﺣﺪﺩ
Zuse Plankalkülﻭﻛﺘﺐ ﺧﻮﺍﺭﺯﻣﻴﺎﺕ ﺑﺎﻟﻠﻐﺔ ﻟﺤﻞ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﻤﺸﺎﻛﻞ.
ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻠﻐﺔ ﻻ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻛﻠﻤﺔ gooﺻﺮﻳﺤﺔ ،ﺇﻻ ﺃﻧﻬﺎ ﺗﻀﻤﻨﺖ ﺑﻴﺎﻧﺎً ﺗﻜﺮﺍﺭﻳﺎً
ﻣﺸﺎﺑﻬﺎًﻟـ Adaﻝ .ﻛﻤﺎ ﻛﺎﻥ ﻟﺪﻳﻪ ﺍﻷﻣﺮﺯﻋﻨﻔﺔﻣﻊ ﻧﺺ ﻣﺮﺗﻔﻊ ﻳﺤﺪﺩ ﺧﺮﻭﺟﺎً ﻣﻦ ﻋﺪﺩ ﻣﻌﻴﻦ ﻣﻦ
ﺗﺪﺍﺧﻞﺣﻠﻘﺎﺕ ﺍﻟﺘﻜﺮﺍﺭ ﺃﻭ ﺇﻟﻰ ﺑﺪﺍﻳﺔ ﺩﻭﺭﺓ ﺗﻜﺮﺍﺭ ﺟﺪﻳﺪﺓ .ﺗﻀﻤﻦ Plankalkülﺑﻴﺎﻥ ﺍﺧﺘﻴﺎﺭ ،ﻟﻜﻨﻪ
ﻟﻢﻳﺴﻤﺢ ﺑـﺁﺧﺮﺑﻨﺪ.
ﺍﺣﺘﻮﺕﻣﺨﻄﻮﻃﺔ Zuseﻋﻠﻰ ﺑﺮﺍﻣﺞ ﺫﺍﺕ ﺗﻌﻘﻴﺪ ﺃﻛﺒﺮ ﺑﻜﺜﻴﺮ ﻣﻦ ﺃﻱ ﺑﺮﺍﻣﺞ ﺗﻤﺖ ﻛﺘﺎﺑﺘﻬﺎ
ﻗﺒﻞﻋﺎﻡ .1945ﻭﺗﻀﻤﻨﺖ ﺑﺮﺍﻣﺞ ﻟﻔﺮﺯ ﻣﺼﻔﻮﻓﺎﺕ ﻣﻦ ﺍﻷﺭﻗﺎﻡ ؛ ﺍﺧﺘﺒﺎﺭ ﺍﺗﺼﺎﻝ ﺭﺳﻢ ﺑﻴﺎﻧﻲ
ﻣﻌﻴﻦ ؛ﺗﻨﻔﻴﺬ ﻋﻤﻠﻴﺎﺕ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﻭﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ ،ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﺠﺬﺭ ﺍﻟﺘﺮﺑﻴﻌﻲ ؛
ﻭﺇﺟﺮﺍءﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻋﻠﻰ ﺍﻟﺼﻴﻎ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺃﻗﻮﺍﺱ ﻭﻋﻮﺍﻣﻞ ﻓﻲ ﺳﺘﺔ
ﻣﺴﺘﻮﻳﺎﺕﻣﺨﺘﻠﻔﺔ ﻣﻦ ﺍﻷﺳﺒﻘﻴﺔ .ﻭﻟﻌﻞ ﺃﻛﺜﺮ ﻣﺎ ﻳﻤﻴﺰﻩ ﻫﻮ ﺧﻮﺍﺭﺯﻣﻴﺎﺗﻪ ﺍﻟﺘﻲ ﺗﻀﻢ 49ﺻﻔﺤﺔ
ﻟﻠﻌﺐﺍﻟﺸﻄﺮﻧﺞ ،ﻭﻫﻲ ﻟﻌﺒﺔ ﻟﻢ ﻳﻜﻦ ﺧﺒﻴﺮﺍً ﻓﻴﻬﺎ.
ﻣﺜﺎﻝﺑﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﺘﺎﻟﻲ ،ﻭﺍﻟﺬﻱ ﻳﻘﻮﻡ ﺑﺘﻌﻴﻴﻦ ﻗﻴﻤﺔ ﺍﻟﺘﻌﺒﻴﺮﺃ ]1+ [4ﻝﺃ ]، [5ﻳﻮﺿﺢ
ﻫﺬﺍﺍﻟﺘﺮﻣﻴﺰ .ﺍﻟﺼﻒ ﺍﻟﻤﺴﻤﻰﺍﻟﺨﺎﻣﺲﻫﻮ ﻟﻠﻤﺨﻄﻮﻃﺎﺕ ،ﻭﺍﻟﺼﻒ ﺍﻟﻤﺴﻤﻰﺱﻫﻮ ﻷﻧﻮﺍﻉ
ﺍﻟﺒﻴﺎﻧﺎﺕ.ﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ1.n،
ﻳﻌﻨﻲﻋﺪﺩﺍً ﺻﺤﻴﺤﺎً ﻣﻦﻥﺃﺟﺰﺍء:
| ﺃ <= 1 +ﺃ
5 ﺍﻟﺨﺎﻣﺲ| 4
ﻻﻳﺴﻌﻨﺎ ﺇﻻ ﺍﻟﺘﻜﻬﻦ ﺑﺎﻻﺗﺠﺎﻩ ﺍﻟﺬﻱ ﻛﺎﻥ ﻳﻤﻜﻦ ﺃﻥ ﻳﺘﺨﺬﻩ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺇﺫﺍ ﻛﺎﻥ ﻋﻤﻞ
Zuseﻣﻌﺮﻭﻓﺎً ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ ﻋﺎﻡ 1945ﺃﻭ ﺣﺘﻰ ﻋﺎﻡ .1950ﻭﻣﻦ ﺍﻟﻤﺜﻴﺮ ﻟﻼﻫﺘﻤﺎﻡ ﺃﻳﻀ ًﺎ
ﺍﻟﺘﻔﻜﻴﺮﻓﻲ ﻛﻴﻒ ﻛﺎﻥ ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻋﻤﻠﻪ ﻣﺨﺘﻠﻔﺎً ﻟﻮ ﺃﻧﻪ ﻗﺎﻡ ﺑﺬﻟﻚ ﻓﻲ ﺑﻴﺉﺔ ﺳﻠﻤﻴﺔ ﻣﺤﺎﻃﺔ ﺑـ
ﻋﻠﻤﺎءﺁﺧﺮﻳﻦ ،ﻭﻟﻴﺲ ﻓﻲ ﺃﻟﻤﺎﻧﻴﺎ ﻋﺎﻡ 1945ﻓﻲ ﻋﺰﻟﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ.
2.2ﺍﻷﻛﻮﺍﺩ ﺍﻟﻜﺎﺫﺑﺔ
ﺃﻭﻻ ،ﻻﺣﻆ ﺃﻥ ﺍﻟﻜﻠﻤﺔﻛﻮﺩ ﻣﺰﻳﻒﺗﺴﺘﺨﺪﻡ ﻫﻨﺎ ﺑﻤﻌﻨﻰ ﻣﺨﺘﻠﻒ ﻋﻦ ﻣﻌﻨﺎﻫﺎ ﺍﻟﻤﻌﺎﺻﺮ .ﻧﺤﻦ ﻧﻄﻠﻖ
ﻋﻠﻰﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻘﺴﻢ ﺍﻟﺮﻣﻮﺯ ﺍﻟﻜﺎﺫﺑﺔ ﻷﻥ ﻫﺬﺍ ﻫﻮ ﻣﺎ ﺗﻢ ﺗﺴﻤﻴﺘﻪ
ﻓﻲﻭﻗﺖ ﺗﻄﻮﻳﺮﻫﺎ ﻭﺍﺳﺘﺨﺪﺍﻣﻬﺎ )ﺃﻭﺍﺧﺮ ﺍﻷﺭﺑﻌﻴﻨﻴﺎﺕ ﻭﺃﻭﺍﺉﻞ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ(.
ﻭﻣﻊﺫﻟﻚ ،ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻬﺎ ﻟﻴﺴﺖ ﺃﻛﻮﺍﺩ ﺯﺍﺉﻔﺔ ﺑﺎﻟﻤﻌﻨﻰ ﺍﻟﻤﻌﺎﺻﺮ.
ﻣﻌﺮﺽﻟﻠﺨﻄﺄ .ﻣﻦ ﺑﻴﻦ ﻣﺸﺎﻛﻠﻬﺎ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺮﻣﻮﺯ ﺍﻟﺮﻗﻤﻴﺔ ﻟﺘﺤﺪﻳﺪ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ .ﻋﻠﻰ ﺳﺒﻴﻞ
ﺍﻟﻤﺜﺎﻝ ،ﻗﺪ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺗﻌﻠﻴﻤﺎﺕ ﺇﺿﺎﻓﺔ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻜﻮﺩ 14ﺑﺪﻻ ًﻣﻦ ﺍﺳﻢ ﻧﺼﻲ ﺿﻤﻨﻲ ،ﺣﺘﻰ
ﻟﻮﻛﺎﻥ ﺣﺮﻓﺎً ﻭﺍﺣﺪﺍً ﻓﻘﻂ .ﻫﺬﺍ ﻳﺠﻌﻞ ﺍﻟﺒﺮﺍﻣﺞ ﺻﻌﺒﺔ ﺍﻟﻘﺮﺍءﺓ .ﺍﻟﻤﺸﻜﻠﺔ ﺍﻷﻛﺜﺮ ﺧﻄﻮﺭﺓ ﻫﻲ
ﺍﻟﻤﻌﺎﻟﺠﺔﺍﻟﻤﻄﻠﻘﺔ ،ﻣﻤﺎ ﻳﺠﻌﻞ ﺗﻌﺪﻳﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻣﻤﻼ ًﻭﻋﺮﺿﺔ ﻟﻠﺨﻄﺄ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،
ﺍﻓﺘﺮﺽﺃﻥ ﻟﺪﻳﻨﺎ ﺑﺮﻧﺎﻣﺞ ﻟﻐﺔ ﺁﻟﺔ ﻣﺨﺰﻥ ﻓﻲ ﺍﻟﺬﺍﻛﺮﺓ .ﺗﺸﻴﺮ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﻣﺜﻞ ﻫﺬﺍ
ﺍﻟﺒﺮﻧﺎﻣﺞﺇﻟﻰ ﻣﻮﺍﻗﻊ ﺃﺧﺮﻯ ﺩﺍﺧﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ،ﻋﺎﺩﺓ ًﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺃﻭ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺃﻫﺪﺍﻑ
ﺗﻌﻠﻴﻤﺎﺕﺍﻟﻔﺮﻉ .ﻳﺆﺩﻱ ﺇﺩﺧﺎﻝ ﺗﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺃﻱ ﻣﻮﺿﻊ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺨﻼﻑ ﺍﻟﻨﻬﺎﻳﺔ ﺇﻟﻰ ﺇﺑﻄﺎﻝ
ﺻﺤﺔﺟﻤﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺗﺸﻴﺮ ﺇﻟﻰ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺍﻟﺘﻲ ﺗﺘﺠﺎﻭﺯ ﻧﻘﻄﺔ ﺍﻹﺩﺭﺍﺝ ،ﻷﻧﻪ ﻳﺠﺐ ﺯﻳﺎﺩﺓ
ﻫﺬﻩﺍﻟﻌﻨﺎﻭﻳﻦ ﻹﻓﺴﺎﺡ ﺍﻟﻤﺠﺎﻝ ﻟﻠﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ .ﻹﺟﺮﺍء ﺍﻹﺿﺎﻓﺔ ﺑﺸﻜﻞ ﺻﺤﻴﺢ ،ﻳﺠﺐ
ﺍﻟﻌﺜﻮﺭﻋﻠﻰ ﺟﻤﻴﻊ ﺍﻹﺭﺷﺎﺩﺍﺕ ﺍﻟﺘﻲ ﺗﺸﻴﺮ ﺇﻟﻰ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺍﻟﺘﻲ ﺗﻠﻲ ﺍﻹﺿﺎﻓﺔ ﻭﺗﻌﺪﻳﻠﻬﺎ .ﺗﺤﺪﺙ
ﻣﺸﻜﻠﺔﻣﻤﺎﺛﻠﺔ ﻣﻊ ﺣﺬﻑ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ .ﻭﻣﻊ ﺫﻟﻚ ،ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ،ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﺘﻀﻤﻦ ﻟﻐﺎﺕ ﺍﻵﻟﺔ
ﺗﻌﻠﻴﻤﺎﺕ"ﺑﺪﻭﻥ ﻋﻤﻠﻴﺔ" ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﺤﻞ ﻣﺤﻞ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﺤﺬﻭﻓﺔ ،ﻭﺑﺎﻟﺘﺎﻟﻲ ﺗﺠﻨﺐ
ﺍﻟﻤﺸﻜﻠﺔ.
2.2.1ﺍﻟﺮﻣﺰ ﺍﻟﻤﺨﺘﺼﺮ
ﺗﻢﺗﻄﻮﻳﺮ ﺃﻭﻝ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ ،ﺍﻟﻤﺴﻤﺎﺓ ، Short Codeﺑﻮﺍﺳﻄﺔ John Mauchlyﻓﻲ
ﻋﺎﻡ 1949ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ، BINACﻭﺍﻟﺘﻲ ﻛﺎﻧﺖ ﻭﺍﺣﺪﺓ ﻣﻦ ﺃﻭﻟﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ
ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺔﺍﻟﻨﺎﺟﺤﺔ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻤﺨﺰﻧﺔ .ﺗﻢ ﻧﻘﻞ ﺍﻟﺮﻣﺰ ﺍﻟﻘﺼﻴﺮ ﻻﺣﻘﺎً ﺇﻟﻰ ﻛﻤﺒﻴﻮﺗﺮ ) UNIVAC Iﺃﻭﻝ
ﻛﻤﺒﻴﻮﺗﺮﺇﻟﻜﺘﺮﻭﻧﻲ ﺗﺠﺎﺭﻱ ﻳﺒُﺎﻉ ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ( ،ﻭﻛﺎﻥ ﻟﻌﺪﺓ ﺳﻨﻮﺍﺕ ﺃﺣﺪ ﺍﻟﻮﺳﺎﺉﻞ
ﺍﻷﺳﺎﺳﻴﺔﻟﺒﺮﻣﺠﺔ ﺗﻠﻚ ﺍﻷﺟﻬﺰﺓ .ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻻ ﻳﻌُﺮﻑ ﺳﻮﻯ ﺍﻟﻘﻠﻴﻞ ﻋﻦ ﺍﻟﻜﻮﺩ ﺍﻟﻤﺨﺘﺼﺮ
ﺍﻷﺻﻠﻲﻷﻧﻪ ﻟﻢ ﻳﺘﻢ ﻧﺸﺮ ﻭﺻﻔﻪ ﺍﻟﻜﺎﻣﻞ ﻣﻄﻠﻘﺎً ،ﻓﻘﺪ ﻧﺠﺎ ﺩﻟﻴﻞ ﺑﺮﻣﺠﺔ ﻹﺻﺪﺍﺭ (-Rand ، 1952
.UNIVAC I )Remingtonﻣﻦ ﺍﻵﻣﻦ ﺃﻥ ﻧﻔﺘﺮﺽ ﺃﻥ ﺍﻟﻨﺴﺨﺘﻴﻦ ﻛﺎﻧﺘﺎ ﻣﺘﺸﺎﺑﻬﺘﻴﻦ ﻟﻠﻐﺎﻳﺔ.
ﻛﺎﻧﺖﻛﻠﻤﺎﺕ ﺫﺍﻛﺮﺓ UNIVAC Iﺗﺤﺘﻮﻱ ﻋﻠﻰ 72ﺑﺘﺎً ،ﻣﺠﻤﻌﺔ ﻓﻲ 12ﺑﺎﻳﺖ ﺳﺘﺔ ﺑﺖ.
ﻳﺘﻜﻮﻥﺍﻟﻜﻮﺩ ﺍﻟﻘﺼﻴﺮ ﻣﻦ ﺇﺻﺪﺍﺭﺍﺕ ﻣﺸﻔﺮﺓ ﻣﻦ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﺍﻟﺘﻲ ﻳﺠﺐ ﺗﻘﻴﻴﻤﻬﺎ.
ﻛﺎﻧﺖﺍﻟﺮﻣﻮﺯ ﻋﺒﺎﺭﺓ ﻋﻦ ﻗﻴﻢ ﺛﻨﺎﺉﻴﺔ ﺍﻟﺒﺎﻳﺖ ،ﻭﻳﻤﻜﻦ ﺗﺮﻣﻴﺰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻌﺎﺩﻻﺕ ﻓﻲ ﻛﻠﻤﺔ
ﻭﺍﺣﺪﺓ.ﺗﻢ ﺗﻀﻤﻴﻦ ﺭﻣﻮﺯ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ:
ﺗﻤﺖﺗﺴﻤﻴﺔ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺑﺮﻣﻮﺯ ﺯﻭﺝ ﺍﻟﺒﺎﻳﺖ ،ﻭﻛﺬﻟﻚ ﺍﻟﻤﻮﺍﻗﻊ ﺍﻟﺘﻲ ﺳﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻛﺜﻮﺍﺑﺖ.
ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝX0،ﻭY0ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﻣﺘﻐﻴﺮﺍﺕ .ﺍﻟﺒﻴﺎﻥ
ﻟﻢﺗﺘﻢ ﺗﺮﺟﻤﺔ ﺍﻟﻜﻮﺩ ﺍﻟﻘﺼﻴﺮ ﺇﻟﻰ ﺭﻣﺰ ﺍﻟﺠﻬﺎﺯ ؛ ﺑﺪﻻ ﻣﻦ ﺫﻟﻚ ،ﺗﻢ ﺗﻨﻔﻴﺬﻩ ﻣﻊ ﻣﺘﺮﺟﻢ ﻧﻘﻲ.
ﻓﻲﺫﻟﻚ ﺍﻟﻮﻗﺖ ،ﺗﻢ ﺍﺳﺘﺪﻋﺎء ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻠﻘﺎﺉﻴﺔ.ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ ﻳﺒﺴﻂ ﻋﻤﻠﻴﺔ
ﺍﻟﺒﺮﻣﺠﺔ ،ﻭﻟﻜﻦ ﻋﻠﻰ ﺣﺴﺎﺏ ﻭﻗﺖ ﺍﻟﺘﻨﻔﻴﺬ .ﻛﺎﻥ ﺗﻔﺴﻴﺮ ﺍﻟﻜﻮﺩ ﺍﻟﻘﺼﻴﺮ ﺃﺑﻄﺄ ﺑﺤﻮﺍﻟﻲ 50ﻣﺮﺓ ﻣﻦ
ﻛﻮﺩﺍﻵﻟﺔ.
2.2.2ﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﺴﺮﻳﻊ
ﻓﻲﺃﻣﺎﻛﻦ ﺃﺧﺮﻯ ،ﺗﻢ ﺗﻄﻮﻳﺮ ﺍﻷﻧﻈﻤﺔ ﺍﻟﺘﻔﺴﻴﺮﻳﺔ ﺍﻟﺘﻲ ﻭﺳﻌﺖ ﻟﻐﺎﺕ ﺍﻵﻟﺔ ﻟﺘﺸﻤﻞ ﻋﻤﻠﻴﺎﺕ
ﺍﻟﻔﺎﺻﻠﺔﺍﻟﻌﺎﺉﻤﺔ .ﻳﻌﺪ ﻧﻈﺎﻡ Speedcodingﺍﻟﺬﻱ ﻃﻮﺭﻩ John Backusﻟـ IBM 701ﻣﺜﺎﻻ ً
ﻋﻠﻰﻣﺜﻞ ﻫﺬﺍ ﺍﻟﻨﻈﺎﻡ ) .(Backus ، 1954ﻗﺎﻡ ﻣﺘﺮﺟﻢ ﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﺴﺮﻳﻊ ﺑﺘﺤﻮﻳﻞ 701ﺇﻟﻰ ﺁﻟﺔ
ﺣﺎﺳﺒﺔﺍﻓﺘﺮﺍﺿﻴﺔ ﺫﺍﺕ ﺛﻼﺛﺔ ﻋﻨﺎﻭﻳﻦ ﻟﻠﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ .ﺗﻀﻤﻦ ﺍﻟﻨﻈﺎﻡ ﺗﻌﻠﻴﻤﺎﺕ ﺯﺍﺉﻔﺔ
ﻟﻠﻌﻤﻠﻴﺎﺕﺍﻟﺤﺴﺎﺑﻴﺔ ﺍﻷﺭﺑﻊ ﻋﻠﻰ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ ،ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﻋﻤﻠﻴﺎﺕ ﻣﺜﻞ ﺍﻟﺠﺬﺭ
ﺍﻟﺘﺮﺑﻴﻌﻲﻭﺍﻟﺠﻴﺐ ﻭﺍﻟﻈﻞ ﺍﻟﻘﻮﺳﻲ ﻭﺍﻷﺱ ﻭﺍﻟﻠﻮﻏﺎﺭﻳﺘﻢ .ﻛﺎﻧﺖ ﺍﻟﻔﺮﻭﻉ ﺍﻟﺸﺮﻃﻴﺔ ﻭﻏﻴﺮ ﺍﻟﻤﺸﺮﻭﻃﺔ
ﻭﺗﺤﻮﻳﻼﺕﺍﻹﺩﺧﺎﻝ /ﺍﻹﺧﺮﺍﺝ ﺟﺰءﺍً ﻣﻦ ﺍﻟﻌﻤﺎﺭﺓ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ .ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﻓﻜﺮﺓ ﻋﻦ ﻗﻴﻮﺩ ﻫﺬﻩ
ﺍﻷﻧﻈﻤﺔ ،ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺃﻥ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﻘﺎﺑﻠﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺘﺒﻘﻴﺔ ﺑﻌﺪ ﺗﺤﻤﻴﻞ ﺍﻟﻤﺘﺮﺟﻢ ﻛﺎﻧﺖ
700ﻛﻠﻤﺔ ﻓﻘﻂ ﻭﺃﻥ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻹﺿﺎﻓﺔ ﺍﺳﺘﻐﺮﻗﺖ 4.2ﻣﻠﻠﻲ ﺛﺎﻧﻴﺔ ﻟﻠﺘﻨﻔﻴﺬ .ﻣﻦ ﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ،
ﺗﻀﻤﻨﺖ Speedcodingﻣﺮﻓﻘﺎً ﺟﺪﻳﺪﺍً ﻳﺘﻤﺜﻞ ﻓﻲ ﺯﻳﺎﺩﺓ ﺳﺠﻼﺕ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺗﻠﻘﺎﺉﻴﺎً .ﻟﻢ ﺗﻈﻬﺮ
ﻫﺬﻩﺍﻟﻤﻴﺰﺓ ﻓﻲ ﺍﻷﺟﻬﺰﺓ ﺣﺘﻰ ﺣﻮﺍﺳﻴﺐ UNIVAC 1107ﻟﻌﺎﻡ .1962ﻭﺑﺴﺒﺐ ﻫﺬﻩ ﺍﻟﻤﻴﺰﺍﺕ ،
ﻳﻤﻜﻦﺇﺟﺮﺍء ﻣﻀﺎﻋﻔﺔ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻓﻲ 12ﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ .Speedcodingﺍﺩﻋﻰ ﺑﺎﻛﻮﺱ ﺃﻥ
ﺍﻟﻤﺸﺎﻛﻞﺍﻟﺘﻲ ﻗﺪ ﺗﺴﺘﻐﺮﻕ ﺃﺳﺒﻮﻋﻴﻦ ﻟﺒﺮﻣﺠﺘﻬﺎ ﻓﻲ ﻛﻮﺩ ﺍﻵﻟﺔ ﻳﻤﻜﻦ ﺑﺮﻣﺠﺘﻬﺎ ﻓﻲ ﺑﻀﻊ ﺳﺎﻋﺎﺕ
ﺑﺎﺳﺘﺨﺪﺍﻡﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﺴﺮﻳﻊ.
ﻳﺠﺐﺃﻥ ﻧﺬﻛﺮ ﺃﻳﻀﺎً ﺃﻥ ﻟﻐﺎﺕ ﺍﻟﺘﺠﻤﻴﻊ ،ﻭﺍﻟﺘﻲ ﺗﺨﺘﻠﻒ ﺗﻤﺎﻣﺎً ﻋﻦ ﺍﻷﻛﻮﺍﺩ ﺍﻟﻜﺎﺫﺑﺔ ﺍﻟﺘﻲ
ﺗﻤﺖﻣﻨﺎﻗﺸﺘﻬﺎ ،ﺗﻄﻮﺭﺕ ﺧﻼﻝ ﺃﻭﺍﺉﻞ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ .ﻭﻣﻊ ﺫﻟﻚ ،ﻛﺎﻥ ﻟﻬﺎ
ﺗﺄﺛﻴﺮﺿﺉﻴﻞ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ.
2.3ﺁﻱ ﺑﻲ ﺇﻡ 704ﻭﻓﻮﺭﺗﺮﺍﻥ
ﻣﻦﺍﻟﻤﺆﻛﺪ ﺃﻥ ﺃﺣﺪ ﺃﻋﻈﻢ ﺍﻟﺘﻄﻮﺭﺍﺕ ﺍﻟﻔﺮﺩﻳﺔ ﻓﻲ ﺍﻟﺤﻮﺳﺒﺔ ﺟﺎء ﻣﻊ ﺇﺩﺧﺎﻝ IBM 704ﻓﻲ ﻋﺎﻡ
، 1954ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻷﻥ ﻗﺪﺭﺍﺗﻪ ﺩﻓﻌﺖ ﺇﻟﻰ ﺗﻄﻮﻳﺮ .Fortranﻳﻤﻜﻦ ﻟﻠﻤﺮء ﺃﻥ ﻳﺠﺎﺩﻝ ﺑﺄﻧﻪ ﺇﺫﺍ
ﻟﻢﺗﻜﻦ ﺷﺮﻛﺔ IBMﻣﻊ 704ﻭ ، Fortranﻟﻜﺎﻧﺖ ﺑﻌﺪ ﺫﻟﻚ ﻗﺮﻳﺒﺎً ﻣﻨﻈﻤﺔ ﺃﺧﺮﻯ ﻟﺪﻳﻬﺎ ﻛﻤﺒﻴﻮﺗﺮ
ﻣﺸﺎﺑﻪﻭﻟﻐﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺫﺍﺕ ﺻﻠﺔ .ﻭﻣﻊ ﺫﻟﻚ ،ﻛﺎﻧﺖ ﺷﺮﻛﺔ IBMﻫﻲ ﺍﻷﻭﻟﻰ ﻣﻦ ﺣﻴﺚ
ﺍﻟﺒﺼﻴﺮﺓﻭﺍﻟﻤﻮﺍﺭﺩ ﺍﻟﻼﺯﻣﺔ ﻟﻠﻘﻴﺎﻡ ﺑﻬﺬﻩ ﺍﻟﺘﻄﻮﺭﺍﺕ.
2.3.1ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ
ﻛﺎﻥﺃﺣﺪ ﺍﻷﺳﺒﺎﺏ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﺘﻲ ﺃﺩﺕ ﺇﻟﻰ ﺍﻟﺘﺴﺎﻣﺢ ﻣﻊ ﺑﻂء ﺍﻷﻧﻈﻤﺔ ﺍﻟﺘﻔﺴﻴﺮﻳﺔ ﻣﻦ ﺃﻭﺍﺧﺮ
ﺍﻷﺭﺑﻌﻴﻨﻴﺎﺕﺇﻟﻰ ﻣﻨﺘﺼﻒ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ﻫﻮ ﺍﻻﻓﺘﻘﺎﺭ ﺇﻟﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻔﺎﺻﻠﺔ
ﺍﻟﻌﺎﺉﻤﺔﻓﻲ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﺘﺎﺣﺔ .ﻛﺎﻥ ﻻ ﺑﺪ ﻣﻦ ﻣﺤﺎﻛﺎﺓ ﺟﻤﻴﻊ ﻋﻤﻠﻴﺎﺕ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ
ﻓﻲﺑﺮﻧﺎﻣﺞ ،ﻭﻫﻲ ﻋﻤﻠﻴﺔ ﺗﺴﺘﻐﺮﻕ ﻭﻗﺘﺎً ﻃﻮﻳﻼ ً.ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﻭﻗﺖ ﺍﻟﻤﻌﺎﻟﺞ ﻗﺪ ﺗﻢ ﺇﻧﻔﺎﻗﻪ
ﻓﻲﻣﻌﺎﻟﺠﺔ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺍﻟﻌﺎﺉﻤﺔ ،ﻓﺈﻥ ﺍﻟﻨﻔﻘﺎﺕ ﺍﻟﻌﺎﻣﺔ ﻟﻠﺘﻔﺴﻴﺮ ﻭﻣﺤﺎﻛﺎﺓ ﺍﻟﻔﻬﺮﺳﺔ ﻛﺎﻧﺖ ﻏﻴﺮ
ﻣﻬﻤﺔﻧﺴﺒﻴﺎً .ﻃﺎﻟﻤﺎ ﺃﻥ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﻳﺠﺐ ﺃﻥ ﺗﺘﻢ ﻋﻦ ﻃﺮﻳﻖ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ،ﻓﺈﻥ ﺍﻟﺘﺮﺟﻤﺔ
ﺍﻟﻔﻮﺭﻳﺔﺗﻌﺘﺒﺮ ﻧﻔﻘﺔ ﻣﻘﺒﻮﻟﺔ .ﻭﻣﻊ ﺫﻟﻚ ،ﻓﺈﻥ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﻟﻢ
ﻳﺴﺘﺨﺪﻣﻮﺍﺃﺑﺪﺍً ﺃﻧﻈﻤﺔ ﺗﻔﺴﻴﺮﻳﺔ ،ﻣﻔﻀﻠﻴﻦ ﻛﻔﺎءﺓ ﻟﻐﺔ ﺍﻵﻟﺔ )ﺃﻭ ﺍﻟﺘﺠﻤﻴﻊ( ﺍﻟﻤﺸﻔﺮﺓ ﻳﺪﻭﻳﺎً .ﺃﻋﻠﻦ
ﺍﻹﻋﻼﻥﻋﻦ ﻧﻈﺎﻡ ، IBM 704ﻣﻊ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﻔﻬﺮﺳﺔ ﻭﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﻓﻲ ﺍﻷﺟﻬﺰﺓ ،ﺑﻨﻬﺎﻳﺔ
ﻋﺼﺮﺍﻟﺘﻔﺴﻴﺮ ،ﻋﻠﻰ ﺍﻷﻗﻞ ﻟﻠﺤﺴﺎﺑﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ .ﺃﺩﻯ ﺗﻀﻤﻴﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﺇﻟﻰ ﺇﺯﺍﻟﺔ
ﻣﻜﺎﻥﺍﻻﺧﺘﺒﺎء ﻟﺘﻜﻠﻔﺔ ﺍﻟﺘﺮﺟﻤﺔ.
ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ Fortranﻳﻨُﺴﺐ ﺇﻟﻴﻬﺎ ﻏﺎﻟﺒﺎً ﻛﻮﻧﻬﺎ ﺃﻭﻝ ﻟﻐﺔ ﻣﺠُﻤﻌَّﺔ ﺭﻓﻴﻌﺔ ﺍﻟﻤﺴﺘﻮﻯ ،
ﺇﻻﺃﻥ ﺍﻟﺴﺆﺍﻝ ﺣﻮﻝ ﻣﻦ ﻳﺴﺘﺤﻖ ﺍﻟﺘﻘﺪﻳﺮ ﻟﺘﻨﻔﻴﺬ ﺃﻭﻝ ﻟﻐﺔ ﻣﻦ ﻫﺬﺍ ﺍﻟﻘﺒﻴﻞ ﻣﻔﺘﻮﺡ ﺇﻟﻰ ﺣﺪ ﻣﺎ.
ﺃﻋﻄﻰ ( Knuth and Pardo )1977ﺍﻟﻔﻀﻞ ﺇﻟﻰ .Alick Eﻃﻮﺭ ﺟﻠﻴﻨﻲ ﺍﻟﻤﺘﺮﺟﻢ ﻓﻲ
، Fort Halsteadﻣﺆﺳﺴﺔ ﺃﺑﺤﺎﺙ ﺍﻟﺘﺴﻠﺢ ﺍﻟﻤﻠﻜﻴﺔ ،ﻓﻲ ﺇﻧﺠﻠﺘﺮﺍ .ﺗﻢ ﺗﺸﻐﻴﻞ ﺍﻟﻤﺘﺮﺟﻢ ﺑﺤﻠﻮﻝ
ﺳﺒﺘﻤﺒﺮ .1952ﻭﻣﻊ ﺫﻟﻚ ،ﻭﻓﻘﺎً ﻟﺠﻮﻥ ﺑﺎﻛﻮﺱ ) ، Wexelblat ، 1981ﺹ ، (26
43 2.3ﺁﻱ ﺑﻲ ﺇﻡ 704ﻭﻓﻮﺭﺗﺮﺍﻥ
ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﻫﺬﻩ ﺍﻷﻋﻤﺎﻝ ﺍﻟﺴﺎﺑﻘﺔ ،ﻛﺎﻧﺖ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﻫﻲ ﺃﻭﻝ ﻟﻐﺔ ﻣﺠﻤﻌﺔ ﺭﻓﻴﻌﺔ
ﺍﻟﻤﺴﺘﻮﻯﻣﻘﺒﻮﻟﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ .ﺗﺆﺭﺥ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻫﺬﺍ ﺍﻟﺘﻄﻮﺭ ﺍﻟﻤﻬﻢ.
2.3.2ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ
ﺣﺘﻰﻗﺒﻞ ﺍﻹﻋﻼﻥ ﻋﻦ ﻧﻈﺎﻡ 704ﻓﻲ ﻣﺎﻳﻮ ، 1954ﺑﺪﺃﺕ ﺧﻄﻂ ﻓﻮﺭﺗﺮﺍﻥ .ﺑﺤﻠﻮﻝ ﻧﻮﻓﻤﺒﺮ
، 1954ﺃﻧﺘﺞ ﺟﻮﻥ ﺑﺎﻛﻮﺱ ﻭﻣﺠﻤﻮﻋﺘﻪ ﻓﻲ ﺷﺮﻛﺔ ﺁﻱ ﺑﻲ ﺇﻡ ﺗﻘﺮﻳﺮﺍً ﺑﻌﻨﻮﺍﻥ "ﻧﻈﺎﻡ ﻧﻘﻞ ﺍﻟﺼﻴﻐﺔ
ﺍﻟﺮﻳﺎﺿﻴﺔﻟﺼﻴﻐﺔ ﺁﻱ ﺑﻲ ﺇﻡ) "FORTRAN :ﺁﻱ ﺑﻲ ﺇﻡ .(1954 ،ﻭﺻﻒ ﻫﺬﺍ ﺍﻟﻤﺴﺘﻨﺪ ﺍﻹﺻﺪﺍﺭ
ﺍﻷﻭﻝﻣﻦ ، Fortranﻭﺍﻟﺬﻱ ﻧﺸﻴﺮ ﺇﻟﻴﻪ ﺑﺎﺳﻢ ، Fortran 0ﻗﺒﻞ ﺗﻨﻔﻴﺬﻩ .ﻛﻤﺎ ﻧﺼﺖ ﺑﺠﺮﺃﺓ ﻋﻠﻰ
ﺃﻥﻓﻮﺭﺗﺮﺍﻥ ﺳﺘﻮﻓﺮ ﻛﻔﺎءﺓ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﺸﻔﺮﺓ ﻳﺪﻭﻳﺎً ﻭﺳﻬﻮﻟﺔ ﺑﺮﻣﺠﺔ ﺃﻧﻈﻤﺔ ﺍﻟﺸﻔﺮﺓ ﺍﻟﻜﺎﺫﺑﺔ
ﺍﻟﺘﻔﺴﻴﺮﻳﺔ.ﻭﻓﻲ ﻣﻮﺟﺔ ﺃﺧﺮﻯ ﻣﻦ ﺍﻟﺘﻔﺎﺅﻝ ،ﺫﻛﺮﺕ ﺍﻟﻮﺛﻴﻘﺔ ﺃﻥ ﻓﻮﺭﺗﺮﺍﻥ ﺳﺘﻘﻀﻲ ﻋﻠﻰ ﺃﺧﻄﺎء
ﺍﻟﺘﺮﻣﻴﺰﻭﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﺤﻴﺢ .ﺑﻨﺎء ًﻋﻠﻰ ﻫﺬﻩ ﺍﻟﻔﺮﺿﻴﺔ ،ﺗﻀﻤﻦ ﻣﺘﺮﺟﻢ ﻓﻮﺭﺗﺮﺍﻥ ﺍﻷﻭﻝ ﺍﻟﻘﻠﻴﻞ ﻣﻦ
ﺍﻟﺘﺤﻘﻖﻣﻦ ﺍﻷﺧﻄﺎء ﺍﻟﻨﺤﻮﻳﺔ.
ﻛﺎﻧﺖﺍﻟﺒﻴﺉﺔ ﺍﻟﺘﻲ ﺗﻢ ﻓﻴﻬﺎ ﺗﻄﻮﻳﺮ ﻓﻮﺭﺗﺮﺍﻥ ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ (1) :ﻛﺎﻧﺖ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ
ﺫﺍﺕﺫﺍﻛﺮﺓ ﺻﻐﻴﺮﺓ ﻭﻛﺎﻧﺖ ﺑﻄﻴﺉﺔ ﻭﻏﻴﺮ ﻣﻮﺛﻮﻗﺔ ﻧﺴﺒﻴﺎً ؛ ) (2ﻛﺎﻥ ﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻷﺳﺎﺳﻲ ﻷﺟﻬﺰﺓ
ﺍﻟﻜﻤﺒﻴﻮﺗﺮﻓﻲ ﺍﻟﺤﺴﺎﺑﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ (3) .ﻟﻢ ﺗﻜﻦ ﻫﻨﺎﻙ ﻃﺮﻕ ﻓﻌﺎﻟﺔ ﻭﻓﻌﺎﻟﺔ ﻟﺒﺮﻣﺠﺔ ﺃﺟﻬﺰﺓ
ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ؛ﻭ ) (4ﻧﻈﺮﺍً ﻻﺭﺗﻔﺎﻉ ﺗﻜﻠﻔﺔ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻣﻘﺎﺭﻧﺔ ًﺑﺘﻜﻠﻔﺔ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ،ﻛﺎﻧﺖ ﺳﺮﻋﺔ
ﻛﻮﺩﺍﻟﻜﺎﺉﻦ ﺍﻟﺬﻱ ﺗﻢ ﺇﻧﺸﺎﺅﻩ ﺍﻟﻬﺪﻑ ﺍﻷﺳﺎﺳﻲ ﻟﻤﺠﻤﻌﻲ ﻓﻮﺭﺗﺮﺍﻥ ﺍﻷﻭﺍﺉﻞ .ﺗﺘﺒﻊ ﺧﺼﺎﺉﺺ
ﺍﻹﺻﺪﺍﺭﺍﺕﺍﻟﻘﺪﻳﻤﺔ ﻣﻦ Fortranﻣﺒﺎﺷﺮﺓ ﻣﻦ ﻫﺬﻩ ﺍﻟﺒﻴﺉﺔ.
ﻟﻢﺗﻜﻦ ﻫﻨﺎﻙ ﻋﺒﺎﺭﺍﺕ ﻟﻜﺘﺎﺑﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺑﻠﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﺍﻷﻭﻟﻰ .ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﺘﻲ ﺑﺪﺃﺕ
ﺃﺳﻤﺎﺅﻫﺎﺑـI ، J ، K ، L ، M ،ﻭﻥﻛﺎﻧﺖ ﻧﻮﻋﺎً ﺻﺤﻴﺤﺎً ﺿﻤﻨﻴﺎً ،ﻭﻛﺎﻧﺖ ﺟﻤﻴﻊ ﺍﻷﻧﻮﺍﻉ ﺍﻷﺧﺮﻯ ﻋﺒﺎﺭﺓ
ﻋﻦﻓﺎﺻﻠﺔ ﻋﺎﺉﻤﺔ ﺿﻤﻨﻴﺎً .ﺍﺳﺘﻨﺪ ﺍﺧﺘﻴﺎﺭ ﺍﻟﺤﺮﻭﻑ ﻟﻬﺬﻩ ﺍﻻﺗﻔﺎﻗﻴﺔ ﺇﻟﻰ ﺣﻘﻴﻘﺔ ﺃﻧﻪ ﻓﻲ ﺫﻟﻚ
ﺍﻟﻮﻗﺖﺍﺳﺘﺨﺪﻡ ﺍﻟﻌﻠﻤﺎء ﻭﺍﻟﻤﻬﻨﺪﺳﻮﻥ ﺍﻷﺣﺮﻑ ﻛﻨﺼﻮﺹ ﻣﺘﻐﻴﺮﺓ ،ﻋﺎﺩﺓًﺍﻱ ﺟﺎﻱ،ﻭﻙ.ﻓﻲ ﻟﻔﺘﺔ
ﻣﻦﺍﻟﻜﺮﻡ ،ﺃﻟﻘﻰ ﻣﺼﻤﻤﻮ ﻓﻮﺭﺗﺮﺍﻥ ﺍﻷﺣﺮﻑ ﺍﻟﺜﻼﺛﺔ ﺍﻹﺿﺎﻓﻴﺔ.
ﻛﺎﻥﺍﻹﺩﻋﺎء ﺍﻷﻛﺜﺮ ﺟﺮﺃﺓ ﺍﻟﺬﻱ ﻗﺪﻣﺘﻪ ﻣﺠﻤﻮﻋﺔ ﺗﻄﻮﻳﺮ ﻓﻮﺭﺗﺮﺍﻥ ﺃﺛﻨﺎء ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻫﻮ ﺃﻥ
ﻛﻮﺩﺍﻵﻟﺔ ﺍﻟﺬﻱ ﻳﻨﺘﺠﻪ ﺍﻟﻤﺘﺮﺟﻢ ﺳﻴﻜﻮﻥ ﻧﺼﻒ ﻛﻔﺎءﺓ ﻣﺎ ﻳﻤﻜﻦ ﺇﻧﺘﺎﺟﻪ ﻳﺪﻭﻳﺎً1.ﺃﺛﺎﺭ ﻫﺬﺍ ،ﺃﻛﺜﺮ ﻣﻦ
ﺃﻱﺷﻲء ﺁﺧﺮ ،ﺷﻜﻮﻛﺎً ﻓﻲ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺍﻟﻤﺤﺘﻤﻠﻴﻦ ﻭﻣﻨﻊ ﻗﺪﺭﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺍﻻﻫﺘﻤﺎﻡ ﺑـ Fortran
ﻗﺒﻞﺇﺻﺪﺍﺭﻩ ﺍﻟﻔﻌﻠﻲ .ﻣﻊ ﺫﻟﻚ ،ﻓﺎﺟﺄ ﺍﻟﺠﻤﻴﻊ ﺗﻘﺮﻳﺒﺎً ،ﻣﻊ ﺫﻟﻚ ،ﻛﺎﺩﺕ ﻣﺠﻤﻮﻋﺔ ﺗﻄﻮﻳﺮ
Fortranﺃﻥ ﺗﺤﻘﻖ ﻫﺪﻓﻬﺎ ﻓﻲ ﺍﻟﻜﻔﺎءﺓ .ﺗﻢ ﺇﻧﻔﺎﻕ ﺍﻟﺠﺰء ﺍﻷﻛﺒﺮ ﻣﻦ 18ﻋﺎﻣﺎً ﻣﻦ ﺍﻟﺠﻬﺪ ﺍﻟﻤﺒﺬﻭﻝ
ﻟﺒﻨﺎءﺃﻭﻝ ﻣﺘﺮﺟﻢ ﻋﻠﻰ ﺍﻟﺘﺤﺴﻴﻦ ،ﻭﻛﺎﻧﺖ ﺍﻟﻨﺘﺎﺉﺞ ﻓﻌﺎﻟﺔ ﺑﺸﻜﻞ ﻣﻠﺤﻮﻅ.
2.3.4ﻓﻮﺭﺗﺮﺍﻥ II
ﺗﻢﺗﻮﺯﻳﻊ ﻣﺘﺮﺟﻢ ﻓﻮﺭﺗﺮﺍﻥ 2ﻓﻲ ﺭﺑﻴﻊ ﻋﺎﻡ .1958ﻭﺃﺻﻠﺢ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻷﺧﻄﺎء ﻓﻲ ﻧﻈﺎﻡ ﺍﻟﺘﺠﻤﻴﻊ
ﻓﻮﺭﺗﺮﺍﻥ 1ﻭﺃﺿﺎﻑ ﺑﻌﺾ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﻬﻤﺔ ﻟﻠﻐﺔ ،ﻭﺃﻫﻤﻬﺎ ﺍﻟﺘﺠﻤﻴﻊ ﺍﻟﻤﺴﺘﻘﻞ ﻟﻠﺮﻭﺗﻴﻨﺎﺕ
ﺍﻟﻔﺮﻋﻴﺔ.ﺑﺪﻭﻥ ﺗﺠﻤﻴﻊ ﻣﺴﺘﻘﻞ ،ﺃﻱ ﺗﻐﻴﻴﺮ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻳﺘﻄﻠﺐ ﺇﻋﺎﺩﺓ ﺗﺠﻤﻴﻊ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺄﻛﻤﻠﻪ.
ﺃﺩﻯﺍﻓﺘﻘﺎﺭ Fortran Iﺇﻟﻰ ﻗﺪﺭﺓ ﺍﻟﺘﺮﺟﻤﺔ ﺍﻟﻤﺴﺘﻘﻠﺔ ،ﺇﻟﻰ ﺟﺎﻧﺐ ﺿﻌﻒ ﻣﻮﺛﻮﻗﻴﺔ ، 704ﺇﻟﻰ
ﻭﺿﻊﻗﻴﻮﺩ ﻋﻤﻠﻴﺔ ﻋﻠﻰ ﻃﻮﻝ ﺍﻟﺒﺮﺍﻣﺞ ﺇﻟﻰ ﺣﻮﺍﻟﻲ 300ﺇﻟﻰ 400ﺳﻄﺮ )، Wexelblat ، 1981
ﺹ .(68ﻛﺎﻥ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻷﻃﻮﻝ ﻓﺮﺻﺔ ﺿﻌﻴﻔﺔ ﻓﻲ ﺃﻥ ﻳﺘﻢ ﺗﺠﻤﻴﻌﻬﺎ ﺑﺎﻟﻜﺎﻣﻞ ﻗﺒﻞ ﺣﺪﻭﺙ ﻋﻄﻞ
ﻓﻲﺍﻟﺠﻬﺎﺯ .ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺗﻀﻤﻴﻦ ﺇﺻﺪﺍﺭﺍﺕ ﻟﻐﺔ ﺍﻵﻟﺔ ﺍﻟﻤﺘﺮﺟﻤﺔ ﻣﺴﺒﻘﺎً ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺗﻘﺼﺮ
ﻋﻤﻠﻴﺔﺍﻟﺘﺠﻤﻴﻊ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻭﺟﻌﻠﻬﺎ ﻋﻤﻠﻴﺔ ﻟﺘﻄﻮﻳﺮ ﺑﺮﺍﻣﺞ ﺃﻛﺒﺮ ﺑﻜﺜﻴﺮ.
.1ﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﺍﻋﺘﻘﺪ ﻓﺮﻳﻖ Fortranﺃﻥ ﺍﻟﺸﻔﺮﺓ ﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﺑﻮﺍﺳﻄﺔ ﺑﺮﻧﺎﻣﺞ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ ﺍﻟﺨﺎﺹ ﺑﻬﻢ ﻻ ﻳﻤﻜﻦ ﺃﻥ
ﺗﻜﻮﻥﺃﻗﻞ ﻣﻦ ﻧﺼﻒ ﺳﺮﻋﺔ ﺭﻣﺰ ﺍﻵﻟﺔ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﺨﻂ ﺍﻟﻴﺪ ،ﺃﻭ ﻟﻦ ﻳﺘﻢ ﺍﻋﺘﻤﺎﺩ ﺍﻟﻠﻐﺔ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ.
45 2.3ﺁﻱ ﺑﻲ ﺇﻡ 704ﻭﻓﻮﺭﺗﺮﺍﻥ
ﺗﻢﺍﺳﺘﺒﺪﺍﻝ Fortran IVﺑـ ، Fortran 77ﻭﺍﻟﺬﻱ ﺃﺻﺒﺢ ﺍﻟﻤﻌﻴﺎﺭ ﺍﻟﺠﺪﻳﺪ ﻓﻲ ﻋﺎﻡ ) 1978
ANSI، 1978ﺃ( .ﺍﺣﺘﻔﻆ Fortran 77ﺑﻤﻌﻈﻢ ﻣﻴﺰﺍﺕ Fortran IVﻭﺃﺿﻒ ﻣﻌﺎﻟﺠﺔ ﺳﻠﺴﻠﺔ
ﺍﻷﺣﺮﻑ ،ﻭﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺤﻠﻘﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ،ﻭ
ﻟﻮﻣﻊ ﺧﻴﺎﺭﺁﺧﺮﺑﻨﺪ.
ﻛﺎﻥ ( Fortran 90 )ANSI ، 1992ﻣﺨﺘﻠﻔﺎً ﺑﺸﻜﻞ ﻛﺒﻴﺮ ﻋﻦ .Fortran 77ﻭﻛﺎﻧﺖ ﺃﻫﻢ
ﺍﻹﺿﺎﻓﺎﺕﻫﻲ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﻭﺍﻟﺴﺠﻼﺕ ﻭﺍﻟﻤﺆﺷﺮﺍﺕ ﻭﺑﻴﺎﻥ ﺍﻻﺧﺘﻴﺎﺭ ﺍﻟﻤﺘﻌﺪﺩ
ﻭﺍﻟﻮﺣﺪﺍﺕﺍﻟﻨﻤﻄﻴﺔ .ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺫﻟﻚ ،ﻳﻤﻜﻦ ﺍﺳﺘﺪﻋﺎء ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ Fortran 90ﺑﺸﻜﻞ
ﻣﺘﻜﺮﺭ.
ﻛﺎﻥﺍﻟﻤﻔﻬﻮﻡ ﺍﻟﺠﺪﻳﺪ ﺍﻟﺬﻱ ﺗﻢ ﺗﻀﻤﻴﻨﻪ ﻓﻲ ﺗﻌﺮﻳﻒ Fortran 90ﻫﻮ ﺇﺯﺍﻟﺔ ﺑﻌﺾ ﻣﻴﺰﺍﺕ
ﺍﻟﻠﻐﺔﻣﻦ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﺴﺎﺑﻘﺔ .ﺑﻴﻨﻤﺎ ﺗﻀﻤﻨﺖ Fortran 90ﺟﻤﻴﻊ ﻣﻴﺰﺍﺕ ، Fortran 77
ﺗﻀﻤﻦﺗﻌﺮﻳﻒ ﺍﻟﻠﻐﺔ ﻗﺎﺉﻤﺔ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺘﻲ ﺗﻤﺖ ﺍﻟﺘﻮﺻﻴﺔ ﺑﺈﺯﺍﻟﺘﻬﺎ ﻓﻲ ﺍﻹﺻﺪﺍﺭ ﺍﻟﺘﺎﻟﻲ ﻣﻦ
ﺍﻟﻠﻐﺔ.
ﺗﻀﻤﻨﺖ Fortran 90ﺗﻐﻴﻴﺮﻳﻦ ﻧﺤﻮﻳﻴﻦ ﺑﺴﻴﻄﻴﻦ ﻏﻴﺮﺍ ﻣﻈﻬﺮ ﻛﻼ ﺍﻟﺒﺮﻧﺎﻣﺠﻴﻦ ﻭﺍﻷﺩﺑﻴﺎﺕ
ﺍﻟﺘﻲﺗﺼﻒ ﺍﻟﻠﻐﺔ .ﺃﻭﻻ ً ،ﺗﻢ ﺇﺳﻘﺎﻁ ﺍﻟﺘﻨﺴﻴﻖ ﺍﻟﺜﺎﺑﺖ ﺍﻟﻤﻄﻠﻮﺏ ﻟﻠﺸﻔﺮﺓ ،ﻭﺍﻟﺬﻱ ﻳﺘﻄﻠﺐ
ﺍﺳﺘﺨﺪﺍﻡﻣﻮﺍﺿﻊ ﺷﺨﺼﻴﺔ ﻣﺤﺪﺩﺓ ﻷﺟﺰﺍء ﻣﻌﻴﻨﺔ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻳﻤﻜﻦ ﺃﻥ
ﺗﻈﻬﺮﺗﺴﻤﻴﺎﺕ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻓﻲ ﺍﻟﻤﻮﺍﺿﻊ ﺍﻟﺨﻤﺴﺔ ﺍﻷﻭﻟﻰ ﻓﻘﻂ ﻭﻻ ﻳﻤﻜﻦ ﺃﻥ ﺗﺒﺪﺃ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻗﺒﻞ
ﺍﻟﻤﻮﺿﻊﺍﻟﺴﺎﺑﻊ .ﺗﻢ ﺗﺼﻤﻴﻢ ﻫﺬﺍ ﺍﻟﺘﻨﺴﻴﻖ ﺍﻟﺼﺎﺭﻡ ﻟﻠﺸﻔﺮﺓ ﺣﻮﻝ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺒﻄﺎﻗﺎﺕ ﺍﻟﻤﺜﻘﺒﺔ.
ﺍﻟﺘﻐﻴﻴﺮﺍﻟﺜﺎﻧﻲ ﻫﻮ ﺃﻥ ﺍﻟﺘﻬﺠﺉﺔ ﺍﻟﺮﺳﻤﻴﺔ ﻟـ FORTRANﺃﺻﺒﺤﺖ .Fortranﻛﺎﻥ ﻫﺬﺍ ﺍﻟﺘﻐﻴﻴﺮ
ﻣﺼﺤﻮﺑﺎًﺑﺘﻐﻴﻴﺮ ﻓﻲ ﺍﺻﻄﻼﺡ ﺍﺳﺘﺨﺪﺍﻡ ﺟﻤﻴﻊ ﺍﻷﺣﺮﻑ ﺍﻟﻜﺒﻴﺮﺓ ﻟﻠﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻭﺍﻟﻤﻌﺮﻓﺎﺕ
ﻓﻲﺑﺮﺍﻣﺞ .Fortranﻛﺎﻧﺖ ﺍﻻﺗﻔﺎﻗﻴﺔ ﺍﻟﺠﺪﻳﺪﺓ ﻫﻲ ﺃﻥ ﺍﻟﺤﺮﻑ ﺍﻷﻭﻝ ﻓﻘﻂ ﻣﻦ ﺍﻟﻜﻠﻤﺎﺕ
ﺍﻟﺮﺉﻴﺴﻴﺔﻭﺍﻟﻤﻌﺮﻓﺎﺕ ﺳﻴﻜﻮﻥ ﻛﺒﻴﺮﺍً.
ﺍﺳﺘﻤﺮﻓﻮﺭﺗﺮﺍﻥ (INCITS / ISO / IEC ، 1997) 95ﻓﻲ ﺗﻄﻮﺭ ﺍﻟﻠﻐﺔ ،ﻭﻟﻜﻦ ﺗﻢ ﺇﺟﺮﺍء
ﺗﻐﻴﻴﺮﺍﺕﻗﻠﻴﻠﺔ ﻓﻘﻂ .ﻣﻦ ﺑﻴﻦ ﺃﻣﻮﺭ ﺃﺧﺮﻯ ،ﺑﻨﺎء ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﺠﺪﻳﺪ ،ﻓﻮﺭﺍﻝ ،ﺗﻤﺖ ﺇﺿﺎﻓﺔ ﻟﺘﺴﻬﻴﻞ
ﻣﻬﻤﺔﻣﻮﺍﺯﺍﺓ ﺑﺮﺍﻣﺞ ﻓﻮﺭﺗﺮﺍﻥ.
C.ﺃﺿﺎﻑ ﺩﻋﻤﺎً ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ،ﻭﺃﻧﻮﺍﻉ ﻣﺸﺘﻘﺔ ﺫﺍﺕ ﻣﻌﻠﻤﺎﺕ ،ﻭﻣﺆﺷﺮﺍﺕ
ﺍﻹﺟﺮﺍءﺍﺕ ،ﻭﻗﺎﺑﻠﻴﺔ ﺍﻟﺘﺸﻐﻴﻞ ﺍﻟﺒﻴﻨﻲ ﻣﻊ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ 2003 )Metcalf et al. ، 2004( ،
Fortran
ﺃﺿﺎﻑﺍﻹﺻﺪﺍﺭ ﺍﻷﺧﻴﺮ ﻣﻦ (Fortran ، Fortran 2008 )ISO / IEC 1539-1 ، 2010
ﺩﻋﻤﺎًﻟﻠﻜﺘﻞ ﻟﺘﺤﺪﻳﺪ ﺍﻟﻨﻄﺎﻗﺎﺕ ﺍﻟﻤﺤﻠﻴﺔ ،ﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﻤﺸﺘﺮﻛﺔ ،ﺍﻟﺘﻲ ﺗﻮﻓﺮ ﻧﻤﻮﺫﺝ ﺗﻨﻔﻴﺬ
ﻣﺘﻮﺍﺯﻱ ،ﻭﻫﻞ ﻣﺘﻄﺎﺑﻘﺔﺑﻨﺎء ،ﻟﺘﺤﺪﻳﺪ ﺍﻟﺤﻠﻘﺎﺕ ﺩﻭﻥ ﺍﻻﻋﺘﻤﺎﺩ ﺍﻟﻤﺘﺒﺎﺩﻝ.
2.3.6ﺍﻟﺘﻘﻴﻴﻢ
ﻓﻜﺮﻓﺮﻳﻖ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﺻﻠﻲ ﻟـ Fortranﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻓﻘﻂ ﻛﻤﻘﺪﻣﺔ ﺿﺮﻭﺭﻳﺔ ﻟﻠﻤﻬﻤﺔ
ﺍﻟﺤﺎﺳﻤﺔﺍﻟﻤﺘﻤﺜﻠﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻤﺘﺮﺟﻢ .ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ،ﻟﻢ ﻳﺨﻄﺮ ﺑﺒﺎﻟﻬﻢ ﺃﺑﺪﺍً ﺃﻧﻪ ﻟﻦ ﻳﺘﻢ
ﺍﺳﺘﺨﺪﺍﻡ Fortranﻋﻠﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 46
ﻣﻦﺻﻨﻊ ﺷﺮﻛﺔ .IBMﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﻟﻘﺪ ﺃﺟُﺒﺮﻭﺍ ﻋﻠﻰ ﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﺑﻨﺎء ﺑﺮﺍﻣﺞ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ ﻟـ
Fortranﻷﺟﻬﺰﺓ IBMﺍﻷﺧﺮﻯ ﻓﻘﻂ ﻷﻧﻪ ﺗﻢ ﺍﻹﻋﻼﻥ ﻋﻦ ﺧﻠﻴﻔﺔ ، 709 ، 704ﻗﺒﻞ ﺇﺻﺪﺍﺭ
ﻣﺘﺮﺟﻢ .Fortran 704ﺇﻥ ﺍﻟﺘﺄﺛﻴﺮ ﺍﻟﺬﻱ ﺃﺣﺪﺛﺘﻪ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ،
ﺇﻟﻰﺟﺎﻧﺐ ﺣﻘﻴﻘﺔ ﺃﻥ ﺟﻤﻴﻊ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻼﺣﻘﺔ ﻣﺪﻳﻨﺔ ﺑﻔﻮﺭﺗﺮﺍﻥ ،ﻣﺜﻴﺮ ﻟﻺﻋﺠﺎﺏ ﺣﻘﺎً ﻓﻲ
ﺿﻮءﺍﻷﻫﺪﺍﻑ ﺍﻟﻤﺘﻮﺍﺿﻌﺔ ﻟﻤﺼﻤﻤﻴﻬﺎ.
ﺍﻟﻤﺠﻤﻮﻉ= 0
ﻗﺮﺍءﺓ* List_Len ،
ﺇﺫﺍﻛﺎﻥ )) (AND. )List_Len >100(. (List_Len< 0ﺛﻢ! ﻗﺮﺍءﺓ ﺑﻴﺎﻧﺎﺕ ﺍﻹﺩﺧﺎﻝ ﻓﻲ
ﻣﺼﻔﻮﻓﺔﻭﺣﺴﺎﺏ ﻣﺠﻤﻮﻋﻬﺎ
ﻋﻤﻞﺍﻟﻌﺪﺍﺩ = List_Len ، 1
ﻗﺮﺍءﺓ* ) Int_List ،ﻋﺪﺍﺩ( = Sum + Int_List
) Sumﻋﺪﺍﺩ(
47 2.4ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔLISP :
ﻧﻬﺎﻳﺔﺗﻔﻌﻞ
!ﺍﺣﺴﺐ ﺍﻟﻤﺘﻮﺳﻂ
ﺍﻟﻤﺘﻮﺳﻂ= Sum / List_Len
!ﻗﻢ ﺑﺤﺴﺎﺏ ﺍﻟﻘﻴﻢ ﺍﻷﻛﺒﺮ ﻣﻦ ﺍﻟﻤﺘﻮﺳﻂ
ﻋﻤﻞﺍﻟﻌﺪﺍﺩ = List_Len ، 1
ﺇﺫﺍ)) Int_Listﻋﺪﺍﺩ(< ﻣﺘﻮﺳﻂ( ﺛﻢ
ﺍﻟﻨﺘﻴﺠﺔ= ﺍﻟﻨﺘﻴﺠﺔ 1 +ﻧﻬﺎﻳﺔ ﺇﺫﺍ
ﻧﻬﺎﻳﺔﺗﻔﻌﻞ
!ﺍﻃﺒﻊ ﺍﻟﻨﺘﻴﺠﺔ
ﻃﺒﺎﻋﺔ* " ،ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ ، ":ﺍﻟﻨﺘﻴﺠﺔ ﺍﻷﺧﺮﻯ
ﻃﺒﺎﻋﺔ* " ،ﺧﻄﺄ -ﻗﻴﻤﺔ ﻃﻮﻝ ﺍﻟﻘﺎﺉﻤﺔ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻴﺔ" End If
ﺗﻢﺗﻀﻤﻴﻦ ﺗﻌﻠﻴﻤﺎﺕ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻘﺎﺉﻤﺔ .ﻫﻨﺎﻙ ﻋﺎﻣﻞ ﺁﺧﺮ ﻣﻨﻊ ﻟﻐﺎﺕ IPLﻣﻦ ﺍﻻﻧﺘﺸﺎﺭ ﻭﻫﻮ
ﺗﻄﺒﻴﻘﻬﺎﻋﻠﻰ ﺁﻟﺔ Johnniacﺍﻟﻐﺎﻣﻀﺔ.
ﻫﻨﺎﻙﻣﻄﻠﺐ ﺁﺧﺮ ﻧﺸﺄ ﻣﻦ ﺗﺤﻘﻴﻖ ﺍﻟﺘﻤﺎﻳﺰ ﺍﻟﺮﻣﺰﻱ ﻭﻫﻮ ﺍﻟﺤﺎﺟﺔ ﺇﻟﻰ ﺍﻟﻘﻮﺍﺉﻢ ﺍﻟﻤﺮﺗﺒﻄﺔ
ﺍﻟﻤﻮﺯﻋﺔﺩﻳﻨﺎﻣﻴﻜﻴﺎً ﻭﻧﻮﻉ ﻣﻦ ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﻀﻤﻨﻲ ﻟﻠﻘﻮﺍﺉﻢ ﺍﻟﻤﺘﺮﻭﻛﺔ .ﻟﻦ ﻳﺴﻤﺢ ﻣﻜﺎﺭﺛﻲ
ﺑﺒﺴﺎﻃﺔﻟﺨﻮﺍﺭﺯﻣﻴﺔ ﺍﻟﺘﻤﺎﻳﺰ ﺍﻷﻧﻴﻘﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻪ ﺃﻥ ﺗﺘﺸﺎﺑﻚ ﻣﻊ ﻋﺒﺎﺭﺍﺕ ﺇﻟﻐﺎء ﺍﻟﺘﺨﺼﻴﺺ
ﺍﻟﺼﺮﻳﺤﺔ.
.3ﻗﺎﻡ Advice Takerﺑﺘﻤﺜﻴﻞ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺑﺠﻤﻞ ﻣﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ ﺭﺳﻤﻴﺔ ﻭﺍﺳﺘﺨﺪﻡ ﻋﻤﻠﻴﺔ ﺍﺳﺘﻨﺘﺎﺝ ﻣﻨﻄﻘﻲ ﻟﺘﻘﺮﻳﺮ ﻣﺎ
ﻳﺠﺐﺍﻟﻘﻴﺎﻡ ﺑﻪ.
49 2.4ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔLISP :
2.4.3.1ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﻳﺤﺘﻮﻱ Pure LISPﻋﻠﻰ ﻧﻮﻋﻴﻦ ﻓﻘﻂ ﻣﻦ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ :ﺍﻟﺬﺭﺍﺕ ﻭﺍﻟﻘﻮﺍﺉﻢ .ﺍﻟﺬﺭﺍﺕ ﻫﻲ ﺇﻣﺎ
ﺭﻣﻮﺯﻟﻬﺎ ﺷﻜﻞ ﻣﻌﺮﻓّﺎﺕ ﺃﻭ ﺣﺮﻓﻴﺔ ﺭﻗﻤﻴﺔ .ﻳﻌﺘﺒﺮ ﻣﻔﻬﻮﻡ ﺗﺨﺰﻳﻦ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺍﻟﺮﻣﺰﻳﺔ ﻓﻲ ﻗﻮﺍﺉﻢ
ﻣﺮﺗﺒﻄﺔﺃﻣﺮﺍً ﻃﺒﻴﻌﻴﺎً ﻭﻗﺪ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻓﻲ .IPL-IIﺗﺴﻤﺢ ﻫﺬﻩ ﺍﻟﻬﻴﺎﻛﻞ ﺑﻌﻤﻠﻴﺎﺕ ﺍﻹﺩﺭﺍﺝ
ﻭﺍﻟﺤﺬﻑﻓﻲ ﺃﻱ ﻭﻗﺖ ،ﻭﻫﻲ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺘﻲ ﻛﺎﻥ ﻳﻌُﺘﻘﺪ ﺑﻌﺪ ﺫﻟﻚ ﺃﻧﻬﺎ ﺟﺰء ﺿﺮﻭﺭﻱ ﻣﻦ
ﻣﻌﺎﻟﺠﺔﺍﻟﻘﺎﺉﻤﺔ .ﻭﻗﺪ ﺗﻘﺮﺭ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ،ﻣﻊ ﺫﻟﻚ ،ﺃﻥ ﺑﺮﺍﻣﺞ LISPﻧﺎﺩﺭﺍً ﻣﺎ ﺗﺘﻄﻠﺐ ﻫﺬﻩ
ﺍﻟﻌﻤﻠﻴﺎﺕ.
ﻳﺘﻢﺗﺤﺪﻳﺪ ﺍﻟﻘﻮﺍﺉﻢ ﻋﻦ ﻃﺮﻳﻖ ﺗﺤﺪﻳﺪ ﻋﻨﺎﺻﺮﻫﺎ ﺑﺄﻗﻮﺍﺱ .ﺍﻟﻘﻮﺍﺉﻢ ﺍﻟﺒﺴﻴﻄﺔ ،ﺍﻟﺘﻲ ﺗﻘﺘﺼﺮ
ﻓﻴﻬﺎﺍﻟﻌﻨﺎﺻﺮ ﻋﻠﻰ ﺍﻟﺬﺭﺍﺕ ،ﻟﻬﺎ ﺍﻟﺸﻜﻞ
)ﺍ ﺏ ﺕ ﺙ(
ﻳﺘﻢﺃﻳﻀﺎً ﺗﺤﺪﻳﺪ ﻫﻴﺎﻛﻞ ﺍﻟﻘﺎﺉﻤﺔ ﺍﻟﻤﺘﺪﺍﺧﻠﺔ ﺑﻮﺍﺳﻄﺔ ﺍﻷﻗﻮﺍﺱ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺍﻟﻘﺎﺉﻤﺔ
ﺍﻟﺸﻜﻞ2.2
ﺍﻟﺘﻤﺜﻴﻞﺍﻟﺪﺍﺧﻠﻲ ﻟﻘﺎﺉﻤﺘﻴﻦ
ﻣﻦLISP
ﺩ ﺝ ﺏ ﺃ
ﺩ ﺃ
ﺟﻲ F
)ﺍ ﺏ ﺕ ﺙ(
ﻋﻨﺪﺗﻔﺴﻴﺮﻫﺎ ﻋﻠﻰ ﺃﻧﻬﺎ ﺑﻴﺎﻧﺎﺕ ،ﻓﻬﻲ ﻗﺎﺉﻤﺔ ﻣﻦ ﺃﺭﺑﻌﺔ ﻋﻨﺎﺻﺮ .ﻋﻨﺪﻣﺎ ﻳﻨﻈﺮ ﺇﻟﻴﻪ ﻋﻠﻰ ﺃﻧﻪ ﺭﻣﺰ ،
ﻓﻬﻮﺗﻄﺒﻴﻖ ﺍﻟﻮﻇﻴﻔﺔ ﺍﻟﻤﺴﻤﺎﺓﺃﻟﻠﻤﻌﻠﻤﺎﺕ ﺍﻟﺜﻼﺛﺔﺏ ،ﺝ ،ﻭﺩ.
2.4.4ﺍﻟﺘﻘﻴﻴﻢ
ﺳﻴﻄﺮ LISPﺗﻤﺎﻣﺎً ﻋﻠﻰ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﻟﻤﺪﺓ ﺭﺑﻊ ﻗﺮﻥ .ﺗﻢ ﺍﻟﻘﻀﺎء ﻋﻠﻰ ﺍﻟﻜﺜﻴﺮ ﻣﻦ
ﺃﺳﺒﺎﺏﺳﻤﻌﺔ LISPﻟﻜﻮﻧﻬﺎ ﻏﻴﺮ ﻓﻌﺎﻟﺔ ﻟﻠﻐﺎﻳﺔ .ﻳﺘﻢ ﺗﺠﻤﻴﻊ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻤﻌﺎﺻﺮﺓ ،
ﻭﻳﻜﻮﻥﺍﻟﻜﻮﺩ ﺍﻟﻨﺎﺗﺞ ﺃﺳﺮﻉ ﺑﻜﺜﻴﺮ ﻣﻦ ﺗﺸﻐﻴﻞ ﺍﻟﻜﻮﺩ ﺍﻟﻤﺼﺪﺭﻱ ﻋﻠﻰ ﻣﺘﺮﺟﻢ .ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﻧﺠﺎﺣﻬﺎ
ﻓﻲﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ،ﻛﺎﻧﺖ LISPﺭﺍﺉﺪﺓ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ،ﻭﺍﻟﺘﻲ ﺃﺛﺒﺘﺖ ﺃﻧﻬﺎ ﻣﺠﺎﻝ
ﻧﺸﻂﻟﻠﺒﺤﺚ ﻓﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ .ﻛﻤﺎ ﻫﻮ ﻣﺬﻛﻮﺭ ﻓﻲ ﺍﻟﻔﺼﻞ ﺍﻷﻭﻝ ،ﻳﻌﺘﻘﺪ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺑﺎﺣﺜﻲ
ﻟﻐﺔﺍﻟﺒﺮﻣﺠﺔ ﺃﻥ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﻫﻲ ﻧﻬﺞ ﺃﻓﻀﻞ ﺑﻜﺜﻴﺮ ﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻣﻦ ﺍﻟﺒﺮﻣﺠﺔ
ﺍﻹﺟﺮﺍﺉﻴﺔﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻀﺮﻭﺭﻳﺔ.
51 2.4ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔLISP :
)COND
(ﻻ ﺷﻲء (lis1( )EQ lis1 lis2(( ))ATOM lis2
))ATOM
))ﻗﻮﺍﺉﻢ ﻣﺘﺴﺎﻭﻳﺔ )((CAR lis2) (CAR lis1
)ﻗﻮﺍﺉﻢ ﻣﺘﺴﺎﻭﻳﺔ )(((CDR lis2) (CDR lis1
)ﻻ ﺷﻲء(
(
(
2.4.5.1ﻣﺨﻄﻂ
ﻇﻬﺮﺕﻟﻐﺔ ﺍﻟﻤﺨﻄﻂ ﻣﻦ ﻣﻌﻬﺪ ﻣﺎﺳﺎﺗﺸﻮﺳﺘﺲ ﻟﻠﺘﻜﻨﻮﻟﻮﺟﻴﺎ ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ )
.(Dybvig، 2003ﻳﺘﻤﻴﺰ ﺑﺼﻐﺮ ﺣﺠﻤﻪ ،ﻭﺍﺳﺘﺨﺪﺍﻣﻪ ﺍﻟﺤﺼﺮﻱ ﻟﺘﺤﺪﻳﺪ ﺍﻟﻨﻄﺎﻕ ﺍﻟﺜﺎﺑﺖ )ﺗﻤﺖ
ﻣﻨﺎﻗﺸﺘﻪﻓﻲ ﺍﻟﻔﺼﻞ ﺍﻟﺨﺎﻣﺲ( ،ﻭﻣﻌﺎﻟﺠﺘﻪ ﻟﻠﻮﻇﺎﺉﻒ ﻛﻜﻴﺎﻧﺎﺕ ﻣﻦ ﺍﻟﺪﺭﺟﺔ ﺍﻷﻭﻟﻰ .ﻛﻜﻴﺎﻧﺎﺕ
ﻣﻦﺍﻟﺪﺭﺟﺔ ﺍﻷﻭﻟﻰ ،ﻳﻤﻜﻦ ﺗﻌﻴﻴﻦ ﻭﻇﺎﺉﻒ ﺍﻟﻤﺨﻄﻂ ﻟﻠﻤﺘﻐﻴﺮﺍﺕ ،ﻭﺗﻤﺮﻳﺮﻫﺎ ﻛﻤﻌﻠﻤﺎﺕ ،
ﻭﺇﻋﺎﺩﺗﻬﺎﻛﻘﻴﻢ ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻮﻇﺎﺉﻒ .ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﺃﻳﻀﺎً ﻋﻨﺎﺻﺮ ﺍﻟﻘﻮﺍﺉﻢ .ﻟﻢ ﺗﻮﻓﺮ
ﺍﻹﺻﺪﺍﺭﺍﺕﺍﻟﻤﺒﻜﺮﺓ ﻣﻦ LISPﻛﻞ ﻫﺬﻩ ﺍﻟﻘﺪﺭﺍﺕ ،ﻭﻟﻢ ﺗﺴﺘﺨﺪﻡ ﺗﺤﺪﻳﺪ ﺍﻟﻨﻄﺎﻕ ﺍﻟﺜﺎﺑﺖ.
ﺑﺎﻋﺘﺒﺎﺭﻫﺎﻟﻐﺔ ﺻﻐﻴﺮﺓ ﺫﺍﺕ ﺑﻨﺎء ﺟﻤﻠﺔ ﻭﺩﻻﻻﺕ ﺑﺴﻴﻄﺔ ،ﻓﺈﻥ ﺍﻟﻤﺨﻄﻂ ﻣﻨﺎﺳﺐ ﺗﻤﺎﻣﺎً
ﻟﻠﺘﻄﺒﻴﻘﺎﺕﺍﻟﺘﻌﻠﻴﻤﻴﺔ ،ﻣﺜﻞ ﺍﻟﺪﻭﺭﺍﺕ ﺍﻟﺘﺪﺭﻳﺒﻴﺔ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﻭﺍﻟﻤﻘﺪﻣﺎﺕ ﺍﻟﻌﺎﻣﺔ
ﻟﻠﺒﺮﻣﺠﺔ.ﺗﻢ ﻭﺻﻒ ﺍﻟﻤﺨﻄﻂ ﺑﺸﻲء ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ .15
ﺍﻟﻤﺸﺘﺮﻙ2.4.5.2 LISP
ﺧﻼﻝﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ﻭﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ،ﺗﻢ ﺗﻄﻮﻳﺮ ﻭﺍﺳﺘﺨﺪﺍﻡ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﻟﻬﺠﺎﺕ LISP
ﺍﻟﻤﺨﺘﻠﻔﺔ.ﺃﺩﻯ ﺫﻟﻚ ﺇﻟﻰ ﻣﺸﻜﻠﺔ ﻣﺄﻟﻮﻓﺔ ﺗﺘﻤﺜﻞ ﻓﻲ ﻋﺪﻡ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻨﻘﻞ ﺑﻴﻦ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ
ﺑﺎﻟﻠﻬﺠﺎﺕﺍﻟﻤﺨﺘﻠﻔﺔ .ﺗﻢ ﺇﻧﺸﺎء LISPﺍﻟﻤﺸﺘﺮﻙ ) (Graham ، 1996ﻓﻲ ﻣﺤﺎﻭﻟﺔ ﻟﺘﺼﺤﻴﺢ ﻫﺬﺍ
ﺍﻟﻮﺿﻊ.ﺗﻢ ﺗﺼﻤﻴﻢ LISPﺍﻟﻤﺸﺘﺮﻙ ﻣﻦ ﺧﻼﻝ ﺍﻟﺠﻤﻊ ﺑﻴﻦ ﻣﻴﺰﺍﺕ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻟﻬﺠﺎﺕ LISP
ﺍﻟﺘﻲﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ،ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ، Schemeﻓﻲ ﻟﻐﺔ ﻭﺍﺣﺪﺓ .ﻛﻮﻧﻬﺎ
ﻣﺰﻳﺠﺎًﻣﻦ ﻫﺬﺍ ﺍﻟﻘﺒﻴﻞ ،ﻓﺈﻥ LISPﺍﻟﺸﺎﺉﻌﺔ ﻫﻲ ﻟﻐﺔ ﻛﺒﻴﺮﺓ ﻭﻣﻌﻘﺪﺓ ﻧﺴﺒﻴﺎً .ﻭﻣﻊ ﺫﻟﻚ ،ﻓﺈﻥ
ﺃﺳﺎﺳﻬﺎﻫﻮ LISPﺍﻟﺨﺎﻟﺺ ،ﻟﺬﺍ ﻓﺈﻥ ﺗﺮﻛﻴﺒﻬﺎ ﻭﻭﻇﺎﺉﻔﻬﺎ ﺍﻟﺒﺪﺍﺉﻴﺔ ﻭﻃﺒﻴﻌﺘﻬﺎ ﺍﻷﺳﺎﺳﻴﺔ ﺗﺄﺗﻲ
ﻣﻦﺗﻠﻚ ﺍﻟﻠﻐﺔ.
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 52
ﻣﻦﺧﻼﻝ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻟﻤﺮﻭﻧﺔ ﺍﻟﺘﻲ ﻳﻮﻓﺮﻫﺎ ﺍﻟﻨﻄﺎﻕ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺑﺴﺎﻃﺔ
ﺍﻟﻨﻄﺎﻕﺍﻟﺜﺎﺑﺖ ،ﻳﺴﻤﺢ LISPﺍﻟﻤﺸﺘﺮﻙ ﺑﻜﻠﻴﻬﻤﺎ .ﺍﻟﻨﻄﺎﻕ ﺍﻻﻓﺘﺮﺍﺿﻲ ﻟﻠﻤﺘﻐﻴﺮﺍﺕ ﻫﻮ ﺛﺎﺑﺖ ،
ﻭﻟﻜﻦﻋﻦ ﻃﺮﻳﻖ ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﺍﻟﻤﺘﻐﻴﺮ ﻟﻴﻜﻮﻥﺧﺎﺹ ،ﻳﺼﺒﺢ ﻫﺬﺍ ﺍﻟﻤﺘﻐﻴﺮ ﻣﺤﺪﺩ ﺍﻟﻨﻄﺎﻕ
ﺩﻳﻨﺎﻣﻴﻜﻴﺎً.
ﻳﺤﺘﻮﻱ LISPﺍﻟﺸﺎﺉﻊ ﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺍﻟﻬﻴﺎﻛﻞ ،ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ
ﺍﻟﺴﺠﻼﺕﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻭﺍﻷﺭﻗﺎﻡ ﺍﻟﻤﺮﻛﺒﺔ ﻭﺳﻼﺳﻞ ﺍﻷﺣﺮﻑ .ﻛﻤﺎ ﺃﻥ ﻟﺪﻳﻬﺎ ﺷﻜﻞ ﻣﻦ ﺍﻟﺤﺰﻡ
ﻟﺘﻘﺴﻴﻢﻣﺠﻤﻮﻋﺎﺕ ﺍﻟﻮﻇﺎﺉﻒ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﺗﻮﻓﺮ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﻮﺻﻮﻝ.
.ﻛﻼ ًﻣﻦ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﻭﺍﻟﺒﺮﻣﺠﺔ ﺍﻹﺟﺮﺍﺉﻴﺔ .ﻛﻤﺎ ﺃﻧﻪ ﻳﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﺑﺸﻜﻞ
ﻛﺎﻣﻞ F #ﻳﺪﻋﻢ .NET.ﺃﻳﻀﺎً ﺃﻧﻪ ﻳﻤﻜﻨﻬﺎ ﺍﻟﺘﻌﺎﻣﻞ ﺑﺴﻼﺳﺔ ﻣﻊ ﺃﻱ ﻟﻐﺔ ﺃﺧﺮﻯ ﻣﻦ ﻟﻐﺎﺕ NET
ﺑﺎﻟﻜﺎﻣﻞ.ﻛﻮﻧﻪ .ﺗﻌﻨﻲ ﻟﻐﺔ .NETﻣﻊ ﻭﺻﻮﻝ ﻣﺒﺎﺷﺮ ﺇﻟﻰ ﻣﻜﺘﺒﺔ .NETﻫﻲ ﻟﻐﺔ (et al.، 2010
OCaml. F # )Symeﻫﻲ ﻟﻐﺔ ﻣﻜﺘﻮﺑﺔ ﺟﺪﻳﺪﺓ ﻧﺴﺒﻴﺎً ﺗﻌﺘﻤﺪ ﻣﺒﺎﺷﺮﺓ ﻋﻠﻰ ، F #ﺃﺧﻴﺮﺍً Haskell.
ﻭ MLﺗﻨﺤﺪﺭ ﻣﻦ ، OCaml )Smith ، 2006( ،ﻭﻟﻬﺠﺘﻬﺎ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ (
Caml )Cousineau et al. ، 1998
2.5.1ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ
ﻛﺎﻥ ALGOL 60ﻧﺘﻴﺠﺔ ﺍﻟﺠﻬﻮﺩ ﺍﻟﻤﺒﺬﻭﻟﺔ ﻟﺘﺼﻤﻴﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻋﺎﻟﻤﻴﺔ ﻟﻠﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ.
ﺑﺤﻠﻮﻝﺃﻭﺍﺧﺮ ﻋﺎﻡ ، 1954ﻛﺎﻥ ﻧﻈﺎﻡ Laningﻭ Zierlerﺍﻟﺠﺒﺮﻱ ﻗﻴﺪ ﺍﻟﺘﺸﻐﻴﻞ ﻷﻛﺜﺮ ﻣﻦ ﻋﺎﻡ ،
ﻭﺗﻢﻧﺸﺮ ﺃﻭﻝ ﺗﻘﺮﻳﺮ ﻋﻦ .Fortranﺃﺻﺒﺤﺖ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﺣﻘﻴﻘﺔ ﻭﺍﻗﻌﺔ ﻓﻲ ﻋﺎﻡ ، 1957ﻭﺗﻢ
ﺗﻄﻮﻳﺮﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻷﺧﺮﻯ .ﻛﺎﻥ ﺃﺑﺮﺯﻫﺎ ﻫﻮ ، ITﺍﻟﺬﻱ ﺻﻤﻤﻪ Perlis
Alanﻓﻲ ، Carnegie Techﻭﻟﻐﺘﻴﻦ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ UNIVAC ، MATH-MATICﻭ
.UNICODEﺃﺩﻯ ﺍﻧﺘﺸﺎﺭ ﺍﻟﻠﻐﺎﺕ ﺇﻟﻰ ﺻﻌﻮﺑﺔ ﻣﺸﺎﺭﻛﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﻴﻦ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ .ﻋﻼﻭﺓ ﻋﻠﻰ
ﺫﻟﻚ ،ﻧﺸﺄﺕ ﺟﻤﻴﻊ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ ﺣﻮﻝ ﻣﻌﻤﺎﺭﻳﺎﺕ ﻓﺮﺩﻳﺔ ،ﺑﻌﻀﻬﺎ ﻷﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ
UNIVACﻭﺑﻌﻀﻬﺎ ﻷﺟﻬﺰﺓ .IBM 700-seriesﺭﺩﺍً ﻋﻠﻰ ﺍﺯﺩﻫﺎﺭ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻌﺘﻤﺪﺓ ﻋﻠﻰ ﺍﻵﻟﺔ ،
ﻓﺈﻥﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻣﺠﻤﻮﻋﺎﺕ ﻣﺴﺘﺨﺪﻣﻲ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ ،ﺑﻤﺎ ﻓﻲ
ﺫﻟﻚ) SHAREﻣﺠﻤﻮﻋﺔ ﻣﺴﺘﺨﺪﻣﻲ IBMﺍﻟﻌﻠﻤﻴﻴﻦ( ﻭ Scientific Exchange) USE
، UNIVACﻣﺠﻤﻮﻋﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺍﻟﻌﻠﻤﻴﺔ UNIVACﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ( ،ﻗﺪﻣﺖ ﻋﺮﻳﻀﺔ
ﺇﻟﻰﺟﻤﻌﻴﺔ ﺁﻻﺕ ﺍﻟﺤﻮﺳﺒﺔ ) (ACMﻓﻲ 10ﻣﺎﻳﻮ ، 1957ﻟﺘﺸﻜﻴﻞ ﻟﺠﻨﺔ ﻟﻠﺪﺭﺍﺳﺔ ﻭﺍﻟﺘﻮﺻﻴﺔ
ﺑﺎﺗﺨﺎﺫﺇﺟﺮﺍءﺍﺕ ﻹﻧﺸﺎء ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻋﻠﻤﻴﺔ ﻣﺴﺘﻘﻠﺔ ﻋﻦ ﺍﻵﻟﺔ .ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻟﻐﺔ Fortran
ﻗﺪﺗﻜﻮﻥ ﻣﺮﺷﺤﺎً ،ﺇﻻ ﺃﻧﻬﺎ ﻻ ﻳﻤﻜﻦ ﺃﻥ ﺗﺼﺒﺢ ﻟﻐﺔ ﻋﺎﻟﻤﻴﺔ ،ﻷﻧﻬﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﻛﺎﻧﺖ ﻣﻤﻠﻮﻛﺔ
ﻟﺸﺮﻛﺔ IBMﻭﺣﺪﻫﺎ.
• ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﺗﺮﻛﻴﺐ ﺍﻟﻠﻐﺔ ﺃﻗﺮﺏ ﻣﺎ ﻳﻜﻮﻥ ﺇﻟﻰ ﺍﻟﺘﺪﻭﻳﻦ ﺍﻟﺮﻳﺎﺿﻲ ﺍﻟﻘﻴﺎﺳﻲ ،ﻭﻳﺠﺐ ﺃﻥ
ﺗﻜﻮﻥﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﻓﻴﻪ ﻗﺎﺑﻠﺔ ﻟﻠﻘﺮﺍءﺓ ﻣﻊ ﺍﻟﻘﻠﻴﻞ ﻣﻦ ﺍﻟﺸﺮﺡ ﺍﻹﺿﺎﻓﻲ.
ﺃﺷﺎﺭﺍﻟﻬﺪﻑ ﺍﻷﻭﻝ ﺇﻟﻰ ﺃﻥ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻘﺮﺭ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻌﻠﻤﻴﺔ ،
ﻭﺍﻟﺘﻲﻛﺎﻧﺖ ﻣﺠﺎﻝ ﺗﻄﺒﻴﻖ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻷﺳﺎﺳﻲ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ .ﻛﺎﻥ ﺍﻟﺜﺎﻧﻲ ﺷﻴﺉﺎً ﺟﺪﻳﺪﺍً ﺗﻤﺎﻣﺎً
ﻓﻲﻣﺠﺎﻝ ﺍﻟﺤﻮﺳﺒﺔ .ﺍﻟﻬﺪﻑ ﺍﻷﺧﻴﺮ ﻫﻮ ﺿﺮﻭﺭﺓ ﻭﺍﺿﺤﺔ ﻷﻱ ﻟﻐﺔ ﺑﺮﻣﺠﺔ.
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 54
ﻧﺠﺢﺍﺟﺘﻤﺎﻉ ﺯﻳﻮﺭﺥ ﻓﻲ ﺇﻧﺘﺎﺝ ﻟﻐﺔ ﺗﻠﺒﻲ ﺍﻷﻫﺪﺍﻑ ﺍﻟﻤﻌﻠﻨﺔ ،ﻟﻜﻦ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ ﺗﻄﻠﺒﺖ
ﺗﻨﺎﺯﻻﺕﻻ ﺣﺼﺮ ﻟﻬﺎ ،ﺑﻴﻦ ﺍﻷﻓﺮﺍﺩ ﻭﺑﻴﻦ ﺟﺎﻧﺒﻲ ﺍﻟﻤﺤﻴﻂ ﺍﻷﻃﻠﺴﻲ .ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ،ﻟﻢ ﺗﻜﻦ
ﺍﻟﺤﻠﻮﻝﺍﻟﻮﺳﻂ ﺗﺪﻭﺭ ﺣﻮﻝ ﻗﻀﺎﻳﺎ ﻛﺒﻴﺮﺓ ﺑﻘﺪﺭ ﻣﺎ ﻛﺎﻧﺖ ﺗﺘﻌﻠﻖ ﺑﻤﺠﺎﻻﺕ ﺍﻟﻨﻔﻮﺫ .ﺇﻥ ﻣﺴﺄﻟﺔ
ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻔﺎﺻﻠﺔ )ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﻭﺭﻭﺑﻴﺔ( ﺃﻭ ﺍﻟﻨﻘﻄﺔ )ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﻣﺮﻳﻜﻴﺔ( ﻟﻠﻔﺎﺻﻠﺔ ﺍﻟﻌﺸﺮﻳﺔ ﻫﻲ ﺃﺣﺪ
ﺍﻷﻣﺜﻠﺔ.
ﻣﻦﻧﻮﺍﺡ ﻛﺜﻴﺮﺓ ،ﻛﺎﻥ ALGOL 58ﺳﻠﻴﻼً ﻟـ ، Fortranﻭﻫﻮ ﺃﻣﺮ ﻃﺒﻴﻌﻲ ﺗﻤﺎﻣﺎً .ﻗﺎﻣﺖ
ﺑﺘﻌﻤﻴﻢﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻣﻴﺰﺍﺕ Fortranﻭﺇﺿﺎﻓﺔ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻭﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻟﺠﺪﻳﺪﺓ .ﺑﻌﺾ
ﺍﻟﺘﻌﻤﻴﻤﺎﺕﻛﺎﻥ ﻟﻬﺎ ﻋﻼﻗﺔ ﺑﻬﺪﻑ ﻋﺪﻡ ﺭﺑﻂ ﺍﻟﻠﻐﺔ ﺑﺄﻱ ﺁﻟﺔ ﻣﻌﻴﻨﺔ ،ﻭﺍﻟﺒﻌﺾ ﺍﻵﺧﺮ ﻛﺎﻥ ﻣﺤﺎﻭﻻﺕ
ﻟﺠﻌﻞﺍﻟﻠﻐﺔ ﺃﻛﺜﺮ ﻣﺮﻭﻧﺔ ﻭﻗﻮﺓ .ﻇﻬﺮ ﻣﺰﻳﺞ ﻧﺎﺩﺭ ﻣﻦ ﺍﻟﺒﺴﺎﻃﺔ ﻭﺍﻷﻧﺎﻗﺔ ﻣﻦ ﻫﺬﺍ ﺍﻟﺠﻬﺪ.
ﻗﺎﻡ ALGOL 58ﺑﺈﺿﻔﺎء ﺍﻟﻄﺎﺑﻊ ﺍﻟﺮﺳﻤﻲ ﻋﻠﻰ ﻣﻔﻬﻮﻡ ﻧﻮﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ
ﺍﻟﻤﺘﻐﻴﺮﺍﺕﺍﻟﺘﻲ ﻟﻢ ﺗﻜﻦ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﺗﺘﻄﻠﺐ ﺗﺼﺮﻳﺤﺎً ﺻﺮﻳﺤﺎً .ﺃﺿﺎﻑ ﻓﻜﺮﺓ ﺍﻟﻌﺒﺎﺭﺍﺕ
ﺍﻟﻤﺮﻛﺒﺔ ،ﻭﺍﻟﺘﻲ ﺃﺩﺭﺟﺘﻬﺎ ﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻼﺣﻘﺔ .ﻓﻴﻤﺎ ﻳﻠﻲ ﺑﻌﺾ ﻣﻴﺰﺍﺕ Fortranﺍﻟﺘﻲ ﺗﻢ
ﺗﻌﻤﻴﻤﻬﺎ:ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﻟﻠﻤﻌﺮﻓﺎﺕ ﺑﺄﻱ ﻃﻮﻝ ،ﻋﻠﻰ ﻋﻜﺲ ﺗﻘﻴﻴﺪ Fortran Iﺑﺴﺘﺔ ﺃﺣﺮﻑ ﺃﻭ
ﺃﻗﻞ ؛ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﺑﺄﻱ ﻋﺪﺩ ﻣﻦ ﺃﺑﻌﺎﺩ ﺍﻟﺼﻔﻴﻒ ،ﻋﻠﻰ ﻋﻜﺲ ﻗﻴﻮﺩ Fortran Iﻋﻠﻰ ﻣﺎ ﻻ ﻳﺰﻳﺪ
ﻋﻦﺛﻼﺛﺔ ؛ ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺞ ﺗﺤﺪﻳﺪ ﺍﻟﺤﺪ ﺍﻷﺩﻧﻰ ﻟﻠﻤﺼﻔﻮﻓﺎﺕ ،ﺑﻴﻨﻤﺎ ﻓﻲ Fortranﻛﺎﻥ ﺍﻟﺤﺪ
ﺍﻷﺩﻧﻰ 1؛ ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﺑﻌﺒﺎﺭﺍﺕ ﺍﻻﺧﺘﻴﺎﺭ ﺍﻟﻤﺘﺪﺍﺧﻠﺔ ،ﻭﻟﻢ ﻳﻜﻦ ﻫﺬﺍ ﻫﻮ ﺍﻟﺤﺎﻝ ﻓﻲ .Fortran I
ﺍﺳﺘﺤﻮﺫ ALGOL 58ﻋﻠﻰ ﻋﺎﻣﻞ ﺍﻟﺘﺨﺼﻴﺺ ﺑﻄﺮﻳﻘﺔ ﻏﻴﺮ ﻋﺎﺩﻳﺔ ﺇﻟﻰ ﺣﺪ ﻣﺎ .ﺍﺳﺘﺨﺪﻡ
Zuseﺍﻟﻨﻤﻮﺫﺝ
ﺍﻟﺘﻌﺒﻴﺮ=< ﻣﺘﻐﻴﺮ
ﻟﺒﻴﺎﻥﺍﻟﺘﻨﺎﺯﻝ ﻓﻲ .Plankalkülﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﻋﺪﻡ ﻧﺸﺮ Plankalkülﺑﻌﺪ ،ﺇﻻ ﺃﻥ ﺑﻌﺾ
ﺍﻷﻋﻀﺎءﺍﻷﻭﺭﻭﺑﻴﻴﻦ ﻓﻲ ﻟﺠﻨﺔ ALGOL 58ﻛﺎﻧﻮﺍ ﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺑﺎﻟﻠﻐﺔ .ﺍﻧﺨﺮﻃﺖ ﺍﻟﻠﺠﻨﺔ ﻓﻲ ﻧﻤﻮﺫﺝ
ﺗﻌﻴﻴﻦ Plankalkülﻭﻟﻜﻦ ﺑﺴﺒﺐ ﺍﻟﺤﺠﺞ ﺣﻮﻝ ﻗﻴﻮﺩ ﻣﺠﻤﻮﻋﺔ ﺍﻷﺣﺮﻑ 4،ﺗﻢ ﺗﻐﻴﻴﺮ ﺭﻣﺰ ﺃﻛﺒﺮ ﻣﻦ
ﺇﻟﻰﻧﻘﻄﺘﻴﻦ .ﺑﻌﺪ ﺫﻟﻚ ،ﻭﺑﺈﺻﺮﺍﺭ ﻣﻦ ﺍﻷﻣﺮﻳﻜﻴﻴﻦ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ،ﺗﻢ ﺗﺤﻮﻳﻞ ﺍﻟﺒﻴﺎﻥ ﺑﺎﻟﻜﺎﻣﻞ ﺇﻟﻰ
ﻧﻤﻮﺫﺝﻓﻮﺭﺗﺮﺍﻥ
ﺍﻟﻤﺘﻐﻴﺮ =:ﺍﻟﺘﻌﺒﻴﺮ
ﻓﻀﻞﺍﻷﻭﺭﻭﺑﻴﻮﻥ ﺍﻟﺸﻜﻞ ﺍﻟﻤﻌﺎﻛﺲ ،ﻟﻜﻦ ﻫﺬﺍ ﺳﻴﻜﻮﻥ ﻋﻜﺲ ﻓﻮﺭﺗﺮﺍﻥ.
ﻟﻢﻳﻜﻦ ﺑﺎﻗﻲ ﻣﺠﺘﻤﻊ ﺍﻟﺤﻮﺳﺒﺔ ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ ﻟﻄﻴﻔﺎً ﺟﺪﺍً ﻣﻊ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ .ﻓﻲ
ﺍﻟﺒﺪﺍﻳﺔ ،ﺑﺪﺍ ﺃﻥ ﻛﻞ ﻣﻦ IBMﻭﻣﺠﻤﻮﻋﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺍﻟﻌﻠﻤﻴﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﺘﺎﺑﻌﺔ ﻟﻬﺎ SHARE ،
،ﺗﺘﺒﻨﻰ .ALGOL 58ﺑﺪﺃﺕ IBMﻓﻲ ﺍﻟﺘﻨﻔﻴﺬ ﺑﻌﺪ ﻭﻗﺖ ﻗﺼﻴﺮ ﻣﻦ ﻧﺸﺮ ﺍﻟﺘﻘﺮﻳﺮ ،ﻭﺷﻜﻠﺖ
SHAREﻟﺠﻨﺔ ﻓﺮﻋﻴﺔ ، SHARE IAL ،ﻟﺪﺭﺍﺳﺔ ﺍﻟﻠﻐﺔ .ﺃﻭﺻﺖ ﺍﻟﻠﺠﻨﺔ ﺍﻟﻔﺮﻋﻴﺔ ﻓﻴﻤﺎ ﺑﻌﺪ ﺑﺄﻥ
ﺗﻘﻮﻡ ACMﺑﺘﻮﺣﻴﺪ ALGOL 58ﻭﺃﻥ ﺗﻘﻮﻡ ﺷﺮﻛﺔ IBMﺑﺘﻄﺒﻴﻘﻪ ﻋﻠﻰ ﺟﻤﻴﻊ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ
ﻣﻦﺍﻟﺴﻠﺴﻠﺔ .700ﻟﻜﻦ ﺍﻟﺤﻤﺎﺱ ﻟﻢ ﻳﺪﻡ ﻃﻮﻳﻼ .ﺑﺤﻠﻮﻝ ﺭﺑﻴﻊ ﻋﺎﻡ ، 1959ﻛﺎﻥ ﻟﺪﻯ ﻛﻞ ﻣﻦ
IBMﻭ ، SHAREﻣﻦ ﺧﻼﻝ ﺗﺠﺮﺑﺘﻬﻢ ﻓﻲ ، Fortranﻣﺎ ﻳﻜﻔﻲ ﻣﻦ ﺍﻷﻟﻢ ﻭﺍﻟﻨﻔﻘﺎﺕ ﻟﺒﺪء ﻟﻐﺔ
ﺟﺪﻳﺪﺓ ،ﺳﻮﺍء ﻣﻦ ﺣﻴﺚ ﺗﻄﻮﻳﺮ ﻭﺍﺳﺘﺨﺪﺍﻡ ﻣﺘﺮﺟﻤﻲ ﺍﻟﺠﻴﻞ ﺍﻷﻭﻝ ﻭﻣﻦ ﺣﻴﺚ ﺗﺪﺭﻳﺐ
ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﻋﻠﻰ ﺫﻟﻚ .ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﻭﺇﻗﻨﺎﻋﻬﻢ ﺑﺎﺳﺘﺨﺪﺍﻣﻬﺎ .ﺑﺤﻠﻮﻝ ﻣﻨﺘﺼﻒ ﻋﺎﻡ ، 1959ﺍﻝ
ﻟﻐﺔﻋﻠﻤﻴﺔ ﻵﻻﺕ ﺳﻠﺴﻠﺔ ، IBM 700ﻭﺑﺎﻟﺘﺎﻟﻲ ﺍﻟﺘﺨﻠﻲ ﻋﻦ .ALGOL 58
ﻋﻀﻮﻓﻲ ﻣﺠﻤﻮﻋﺔ ﺯﻳﻮﺭﺥ .ﻛﺎﻥ ﻧﻮﺭ ﻫﻮ ﻣﻦ ﺃﻧﺸﺄ ﻭﻧﺸﺮ ﻣﻠﻒ ﻧﺸﺮﺓ .ALGOLﻗﻀﻰ ﻭﻗﺘﺎً ﻃﻮﻳﻼ ً
ﻓﻲﺩﺭﺍﺳﺔ ﻭﺭﻗﺔ ﺑﺎﻛﻮﺱ ﺍﻟﺘﻲ ﻗﺪﻣﺖ BNFﻭﻗﺮﺭ ﺍﺳﺘﺨﺪﺍﻡ BNFﻟﻮﺻﻒ ﻧﺘﺎﺉﺞ ﺍﺟﺘﻤﺎﻉ 1960
ﺭﺳﻤﻴﺎً.ﺑﻌﺪ ﺇﺟﺮﺍء ﺑﻌﺾ ﺍﻟﺘﻐﻴﻴﺮﺍﺕ ﺍﻟﻄﻔﻴﻔﺔ ﻧﺴﺒﻴﺎً ﻋﻠﻰ ، BNFﻛﺘﺐ ﻭﺻﻔﺎً ﻟﻠﻐﺔ ﺍﻟﻤﻘﺘﺮﺣﺔ
ﺍﻟﺠﺪﻳﺪﺓﻓﻲ BNFﻭﻭﺯﻋﻪ ﻋﻠﻰ ﺃﻋﻀﺎء ﻣﺠﻤﻮﻋﺔ 1960ﻓﻲ ﺑﺪﺍﻳﺔ ﺍﻻﺟﺘﻤﺎﻉ.
• ﺗﻢ ﺗﻘﺪﻳﻢ ﻣﻔﻬﻮﻡ ﻫﻴﻜﻞ ﺍﻟﻜﺘﻠﺔ .ﺳﻤﺢ ﺫﻟﻚ ﻟﻠﻤﺒﺮﻣﺞ ﺑﺘﻮﻃﻴﻦ ﺃﺟﺰﺍء ﻣﻦ ﺍﻟﺒﺮﺍﻣﺞ ﻋﻦ ﻃﺮﻳﻖ
ﺇﺩﺧﺎﻝﺑﻴﺉﺎﺕ ﺃﻭ ﻧﻄﺎﻗﺎﺕ ﺑﻴﺎﻧﺎﺕ ﺟﺪﻳﺪﺓ.
• ﺳﻤُﺢ ﺑﻮﺳﻴﻠﺘﻴﻦ ﻣﺨﺘﻠﻔﺘﻴﻦ ﻟﺘﻤﺮﻳﺮ ﺍﻟﻤﻌﻠﻤﺎﺕ ﺇﻟﻰ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ :ﺍﻟﺘﻤﺮﻳﺮ ﺣﺴﺐ ﺍﻟﻘﻴﻤﺔ
ﻭﺍﻟﻤﺮﻭﺭﺑﺎﻻﺳﻢ.
• ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﻟﻺﺟﺮﺍءﺍﺕ ﺃﻥ ﺗﻜﻮﻥ ﻋﻮﺩﻳﺔ .ﻟﻢ ﻳﻜﻦ ﻭﺻﻒ ALGOL 58ﻭﺍﺿﺤﺎً ﺑﺸﺄﻥ ﻫﺬﻩ
ﺍﻟﻤﺴﺄﻟﺔ.ﻻﺣﻆ ﺃﻧﻪ ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﺍﻟﺘﻜﺮﺍﺭ ﻛﺎﻥ ﺟﺪﻳﺪﺍً ﻟﻠﻐﺎﺕ ﺍﻷﻣﺮ ،ﻓﻘﺪ ﻗﺪﻡ LISP
ﺑﺎﻟﻔﻌﻞﻭﻇﺎﺉﻒ ﺗﻜﺮﺍﺭﻳﺔ ﻓﻲ ﻋﺎﻡ .1959
ﻧﺸُﺮﺗﻘﺮﻳﺮ ALGOL 60ﻓﻲ ﻣﺎﻳﻮ .(Naur ، 1960) 1960ﻻ ﻳﺰﺍﻝ ﻫﻨﺎﻙ ﻋﺪﺩ ﻣﻦ
ﺍﻟﻐﻤﻮﺽﻓﻲ ﻭﺻﻒ ﺍﻟﻠﻐﺔ ،ﻭﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻘﺮﺭ ﻋﻘﺪ ﺍﺟﺘﻤﺎﻉ ﺛﺎﻟﺚ ﻓﻲ ﺃﺑﺮﻳﻞ 1962ﻓﻲ ﺭﻭﻣﺎ
ﻟﻤﻌﺎﻟﺠﺔﺍﻟﻤﺸﺎﻛﻞ .ﻓﻲ ﻫﺬﺍ ﺍﻻﺟﺘﻤﺎﻉ ﺗﻌﺎﻣﻠﺖ ﺍﻟﻤﺠﻤﻮﻋﺔ ﻣﻊ ﺍﻟﻤﺸﺎﻛﻞ ﻓﻘﻂ .ﻟﻢ ﻳﺴُﻤﺢ
ﺑﺈﺿﺎﻓﺎﺕﺇﻟﻰ ﺍﻟﻠﻐﺔ .ﺗﻢ ﻧﺸﺮ ﻧﺘﺎﺉﺞ ﻫﺬﺍ ﺍﻻﺟﺘﻤﺎﻉ ﺗﺤﺖ ﻋﻨﻮﺍﻥ "ﺗﻘﺮﻳﺮ ﻣﻨﻘﺢ ﻋﻦ ﺍﻟﻠﻐﺔ
ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺔ) "ALGOL 60ﺑﺎﻛﻮﺱ ﻭﺁﺧﺮﻭﻥ .(1963 ،
2.5.7ﺍﻟﺘﻘﻴﻴﻢ
ﻣﻦﺑﻌﺾ ﺍﻟﻨﻮﺍﺣﻲ ،ﺣﻘﻖ ALGOL 60ﻧﺠﺎﺣﺎً ﻛﺒﻴﺮﺍً ؛ ﻣﻦ ﻧﻮﺍﺡ ٍﺃﺧﺮﻯ ،ﻛﺎﻥ ﻓﺸﻼ ًﺫﺭﻳﻌﺎً .ﻧﺠﺢ
ﻓﻲﺃﻥ ﻳﺼﺒﺢ ،ﻋﻠﻰ ﺍﻟﻔﻮﺭ ﺗﻘﺮﻳﺒﺎً ،ﺍﻟﻮﺳﻴﻠﺔ ﺍﻟﺮﺳﻤﻴﺔ ﺍﻟﻮﺣﻴﺪﺓ ﺍﻟﻤﻘﺒﻮﻟﺔ ﻟﺘﻮﺻﻴﻞ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺎﺕ
ﻓﻲﺃﺩﺑﻴﺎﺕ ﺍﻟﺤﻮﺳﺒﺔ ،ﻭﻇﻞ ﻛﺬﻟﻚ ﻷﻛﺜﺮ ﻣﻦ 20ﻋﺎﻣﺎً .ﻛﻞ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺿﺮﻭﺭﻳﺔ ﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ
ﻣﻨﺬﻋﺎﻡ 1960ﺗﺪﻳﻦ ﺑﺸﻲء ﻟـ .ALGOL 60ﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﻣﻌﻈﻤﻬﺎ ﻣﺒﺎﺷﺮ
57 2.5ﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻧﺤﻮ ﺍﻟﺘﻄﻮﺭALGOL 60 :
ﺃﻭﺃﺣﻔﺎﺩ ﻏﻴﺮ ﻣﺒﺎﺷﺮ ؛ ﺗﺘﻀﻤﻦ ﺍﻷﻣﺜﻠﺔ PL / Iﻭ SIMULA 67ﻭ ALGOL 68ﻭ Cﻭ Pascalﻭ
Adaﻭ ++ Cﻭ Javaﻭ .# C
ﺗﻀﻤﻨﺖﺟﻬﻮﺩ ﺗﺼﻤﻴﻢ ALGOL 58 / ALGOL 60ﻗﺎﺉﻤﺔ ﻃﻮﻳﻠﺔ ﻣﻦ ﺍﻷﻭﺍﺉﻞ .ﻛﺎﻧﺖ
ﻫﺬﻩﻫﻲ ﺍﻟﻤﺮﺓ ﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﺣﺎﻭﻟﺖ ﻓﻴﻬﺎ ﻣﺠﻤﻮﻋﺔ ﺩﻭﻟﻴﺔ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ .ﻛﺎﻧﺖ ﺃﻭﻝ ﻟﻐﺔ
ﺻﻤُﻤﺖﻟﺘﻜﻮﻥ ﻣﺴﺘﻘﻠﺔ ﻋﻦ ﺍﻵﻟﺔ .ﻛﺎﻧﺖ ﺃﻳﻀﺎً ﺍﻟﻠﻐﺔ ﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﺗﻢ ﻭﺻﻒ ﺗﺮﻛﻴﺒﻬﺎ ﺭﺳﻤﻴﺎً .ﺑﺪﺃ
ﻫﺬﺍﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻨﺎﺟﺢ ﻟﺸﻜﻠﻴﺔ BNFﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺠﺎﻻﺕ ﺍﻟﻤﻬﻤﺔ ﻟﻌﻠﻮﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ :ﺍﻟﻠﻐﺎﺕ
ﺍﻟﺮﺳﻤﻴﺔ ،ﻭﻧﻈﺮﻳﺔ ﺍﻟﺘﺤﻠﻴﻞ ،ﻭﺗﺼﻤﻴﻢ ﺍﻟﻤﺘﺮﺟﻢ ﺍﻟﻤﺴﺘﻨﺪ ﺇﻟﻰ .BNFﺃﺧﻴﺮﺍً ،ﺃﺛﺮ ﻫﻴﻜﻞ 60
ALGOLﻋﻠﻰ ﺑﻨﻴﺔ ﺍﻟﻤﺎﻛﻴﻨﺔ .ﻓﻲ ﺍﻟﻤﺜﺎﻝ ﺍﻷﻛﺜﺮ ﻭﺿﻮﺣﺎ ﻋﻠﻰ ﺫﻟﻚ ،ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻣﺘﺪﺍﺩ ﺍﻟﻠﻐﺔ
ﻛﻠﻐﺔﺃﻧﻈﻤﺔ ﻟﺴﻠﺴﻠﺔ ﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﺍﺳﻌﺔ ﺍﻟﻨﻄﺎﻕ ،ﺁﻻﺕ Burroughs B5000ﻭ
B6000ﻭ ، B7000ﻭﺍﻟﺘﻲ ﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﻜﺪﺱ ﺃﺟﻬﺰﺓ ﻟﺘﻨﻔﻴﺬ ﺍﻟﻜﺘﻠﺔ ﺑﻜﻔﺎءﺓ ﺍﻟﺒﻨﻴﺔ
ﻭﺍﻟﺒﺮﺍﻣﺞﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻌﻮﺩﻳﺔ ﻟﻠﻐﺔ.
ﻋﻠﻰﺍﻟﺠﺎﻧﺐ ﺍﻵﺧﺮ ﻣﻦ ﺍﻟﻌﻤﻠﺔ ،ﻟﻢ ﻳﺤﻘﻖ ALGOL 60ﺍﺳﺘﺨﺪﺍﻣﺎً ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻓﻲ
ﺍﻟﻮﻻﻳﺎﺕﺍﻟﻤﺘﺤﺪﺓ .ﺣﺘﻰ ﻓﻲ ﺃﻭﺭﻭﺑﺎ ،ﺣﻴﺚ ﻛﺎﻧﺖ ﺃﻛﺜﺮ ﺷﻌﺒﻴﺔ ﻣﻦ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ ،ﻟﻢ ﺗﺼﺒﺢ
ﺃﺑﺪﺍًﺍﻟﻠﻐﺔ ﺍﻟﻤﻬﻴﻤﻨﺔ .ﻫﻨﺎﻙ ﻋﺪﺩ ﻣﻦ ﺍﻷﺳﺒﺎﺏ ﻟﻌﺪﻡ ﻗﺒﻮﻟﻬﺎ .ﻟﺴﺒﺐ ﻭﺍﺣﺪ ،ﺗﺒﻴﻦ ﺃﻥ ﺑﻌﺾ
ﻣﻴﺰﺍﺕ ALGOL 60ﻣﺮﻧﺔ ﻟﻠﻐﺎﻳﺔ ؛ ﺟﻌﻠﻮﺍ ﺍﻟﻔﻬﻢ ﺻﻌﺒﺎً ﻭﺍﻟﺘﻨﻔﻴﺬ ﻏﻴﺮ ﻓﻌﺎﻝ .ﺃﻓﻀﻞ ﻣﺜﺎﻝ ﻋﻠﻰ
ﺫﻟﻚﻫﻮ ﻃﺮﻳﻘﺔ ﺗﻤﺮﻳﺮ ﺍﻻﺳﻢ ﻟﺘﻤﺮﻳﺮ ﺍﻟﻤﻌﻠﻤﺎﺕ ﺇﻟﻰ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ،ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ﻓﻲ
ﺍﻟﻔﺼﻞ .9ﻭﻳﺘﻀﺢ ﺍﻟﺼﻌﻮﺑﺎﺕ ﺍﻟﺘﻲ ﺗﻮﺍﺟﻪ ﺗﻨﻔﻴﺬ ALGOL 60ﻣﻦ ﺧﻼﻝ ﺑﻴﺎﻥ ﺭﻭﺗﻴﺸﺎﻭﺳﺮ ﻓﻲ
ﻋﺎﻡ 1967ﺃﻥ ﺍﻟﻘﻠﻴﻞ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ،ﺇﻥ ﻭﺟﺪﺕ ،ﺗﻀﻤﻨﺖ ALGOLﺍﻟﻜﺎﻣﻞ 60ﻟﻐﺔ )
ﺭﻭﺗﻴﺸﻮﺯﺭ ، 1967،ﺹ .(8
ﻛﺎﻥﻋﺪﻡ ﻭﺟﻮﺩ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻤﺪﺧﻼﺕ ﻭﺍﻟﻤﺨﺮﺟﺎﺕ ﻓﻲ ﺍﻟﻠﻐﺔ ﺳﺒﺒﺎً ﺭﺉﻴﺴﻴﺎً ﺁﺧﺮ ﻟﻌﺪﻡ ﻗﺒﻮﻟﻬﺎ.
ﺃﺩﻯﺍﻹﺩﺧﺎﻝ /ﺍﻹﺧﺮﺍﺝ ﺍﻟﻤﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻟﺘﻨﻔﻴﺬ ﺇﻟﻰ ﺻﻌﻮﺑﺔ ﻧﻘﻞ ﺍﻟﺒﺮﺍﻣﺞ ﺇﻟﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ
ﺍﻷﺧﺮﻯ.
ﻭﻣﻦﺍﻟﻤﻔﺎﺭﻗﺎﺕ ،ﺃﻥ ﺃﺣﺪ ﺃﻫﻢ ﺍﻟﻤﺴﺎﻫﻤﺎﺕ ﻓﻲ ﻋﻠﻮﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﺮﺗﺒﻄﺔ ﺑـ 60 ، BNF
، ALGOLﻛﺎﻥ ﺃﻳﻀﺎً ﻋﺎﻣﻼ ًﻓﻲ ﻋﺪﻡ ﻗﺒﻮﻟﻪ .ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ BNFﻳﻌﺘﺒﺮ ﺍﻵﻥ ﻭﺳﻴﻠﺔ ﺑﺴﻴﻄﺔ
ﻭﺃﻧﻴﻘﺔﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ ،ﺇﻻ ﺃﻧﻪ ﻓﻲ ﻋﺎﻡ 1960ﺑﺪﺍ ﻏﺮﻳﺒﺎً ﻭﻣﻌﻘﺪﺍً.
ﺃﺧﻴﺮﺍً ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﻭﺟﻮﺩ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺸﻜﻼﺕ ﺍﻷﺧﺮﻯ ،ﺭﺑﻤﺎ ﻛﺎﻥ ﺗﺮﺳﻴﺦ ﻓﻮﺭﺗﺮﺍﻥ
ﺑﻴﻦﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﻭﻧﻘﺺ ﺍﻟﺪﻋﻢ ﻣﻦ ﻗﺒﻞ ﺷﺮﻛﺔ IBMﻣﻦ ﺃﻫﻢ ﺍﻟﻌﻮﺍﻣﻞ ﻓﻲ ﻓﺸﻞ ALGOL 60
ﻓﻲﺍﻟﺤﺼﻮﻝ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ.
ﻟﻢﻳﻜﻦ ﺟﻬﺪ ALGOL 60ﻣﻜﺘﻤﻼً ﺣﻘﺎً ،ﺑﻤﻌﻨﻰ ﺃﻥ ﺍﻟﻐﻤﻮﺽ ﻭﺍﻟﻐﻤﻮﺽ ﻛﺎﻥ ﺩﺍﺉﻤﺎً ﺟﺰءﺍً
ﻣﻦﻭﺻﻒ ﺍﻟﻠﻐﺔ ).(Knuth ، 1967
ﺍﻟﻨﺘﻴﺠﺔ 0 =:؛
؛ (readint )listlen
ﻟﻮ)(listlen >100() ∧listlen< 0ﺛﻢ
ﻳﺒﺪﺃ
ﺗﻌﻠﻴﻖﻗﺮﺍءﺓ ﺍﻟﻤﺪﺧﻼﺕ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺘﻮﺳﻂ ؛
ﻝﺍﻟﻌﺪﺍﺩ1 = :ﺧﻄﻮﺓ1ﺣﺘﻰlistlenﻳﻔﻌﻞ
ﻳﺒﺪﺃ
[: = sum + intlist ]counter؛ ﺍﻟﻤﺠﻤﻮﻉ
([ readint )intlist ]counterﻧﻬﺎﻳﺔ؛
ﺗﻌﻠﻴﻖﺍﺣﺴﺐ ﺍﻟﻤﺘﻮﺳﻂ
ﺍﻟﻤﺘﻮﺳﻂ sum / listlen =:؛
ﺗﻌﻠﻴﻖﺣﺴﺎﺏ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﻫﻲ< ﻣﺘﻮﺳﻂ ؛
ﻝﺍﻟﻌﺪﺍﺩ1 = :ﺧﻄﻮﺓ1ﺣﺘﻰlistlenﻳﻔﻌﻞ
ﻟﻮﻣﺘﻮﺳﻂ <[ﻋﺪﺍﺩ] intlist
ﺛﻢﺍﻟﻨﺘﻴﺠﺔ = :ﻧﺘﻴﺠﺔ 1 +؛ ﻧﺘﻴﺠﺔ ﺍﻟﻄﺒﺎﻋﺔ
ﺗﻌﻠﻴﻖ
(ﻧﺘﻴﺠﺔ) printint؛(":ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ") printstring
ﻧﻬﺎﻳﺔ
ﺁﺧﺮ
ﺧﻄﺄ -ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ" ؛") printstring
ﻧﻬﺎﻳﺔ
.5ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ،ﻓﻲ ﺩﺭﺍﺳﺔ ﻣﺮﺗﺒﻄﺔ ﺑﻤﺸﻜﻠﺔ ﻋﺎﻡ ، 2000ﻗﺪﺭ ﺃﻥ ﻫﻨﺎﻙ ﻣﺎ ﻳﻘﺮﺏ ﻣﻦ 800ﻣﻠﻴﻮﻥ ﺧﻂ ﻣﻦ
COBOLﻗﻴﺪ ﺍﻻﺳﺘﺨﺪﺍﻡ ﻓﻲ 22ﻣﻴﻼ ًﻣﺮﺑﻌﺎ ًﻣﻦ ﻣﺎﻧﻬﺎﺗﻦ.
59 2.6ﺣﻮﺳﺒﺔ ﺳﺠﻼﺕ ﺍﻷﻋﻤﺎﻝCOBOL :
2.6.1ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ
ﺗﺸﺒﻪﺑﺪﺍﻳﺔ COBOLﺇﻟﻰ ﺣﺪ ﻣﺎ ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ، ALGOL 60ﺑﻤﻌﻨﻰ ﺃﻥ ﺍﻟﻠﻐﺔ ﻗﺪ ﺗﻢ
ﺗﺼﻤﻴﻤﻬﺎﻣﻦ ﻗﺒﻞ ﻟﺠﻨﺔ ﻣﻦ ﺍﻷﺷﺨﺎﺹ ﺍﻟﺬﻳﻦ ﻳﺠﺘﻤﻌﻮﻥ ﻟﻔﺘﺮﺍﺕ ﺯﻣﻨﻴﺔ ﻗﺼﻴﺮﺓ ﻧﺴﺒﻴﺎً .ﻓﻲ
ﺫﻟﻚﺍﻟﻮﻗﺖ ،ﻓﻲ ﻋﺎﻡ ، 1959ﻛﺎﻧﺖ ﺣﺎﻟﺔ ﺣﻮﺳﺒﺔ ﺍﻷﻋﻤﺎﻝ ﻣﺸﺎﺑﻬﺔ ﻟﺤﺎﻟﺔ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﻌﻠﻤﻴﺔ
ﻗﺒﻞﻋﺪﺓ ﺳﻨﻮﺍﺕ ،ﻋﻨﺪﻣﺎ ﺗﻢ ﺗﺼﻤﻴﻢ ﻓﻮﺭﺗﺮﺍﻥ .ﺗﻢ ﺗﻨﻔﻴﺬ ﺇﺣﺪﻯ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺠﻤﻌﺔ ﻟﺘﻄﺒﻴﻘﺎﺕ
ﺍﻷﻋﻤﺎﻝ ، FLOW-MATIC،ﻓﻲ ﻋﺎﻡ ، 1957ﻟﻜﻨﻬﺎ ﺗﻨﺘﻤﻲ ﺇﻟﻰ ﺷﺮﻛﺔ ﻣﺼﻨﻌﺔ ﻭﺍﺣﺪﺓ ،
، UNIVACﻭﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ ﻷﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ ﺗﻠﻚ ﺍﻟﺸﺮﻛﺔ .ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ﺃﺧﺮﻯ ، AIMACO ،
ﻣﻦﻗﺒﻞ ﺍﻟﻘﻮﺍﺕ ﺍﻟﺠﻮﻳﺔ ﺍﻷﻣﺮﻳﻜﻴﺔ ،ﻟﻜﻨﻬﺎ ﻛﺎﻧﺖ ﻣﺠﺮﺩ ﺍﺧﺘﻼﻑ ﺑﺴﻴﻂ ﻓﻲ .FLOW-MATIC
ﺻﻤﻤﺖ IBMﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ COMTRAN )COMmercial TRANslator( ،
،ﻟﻜﻦ ﻟﻢ ﻳﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﺑﻌﺪ .ﺗﻢ ﺍﻟﺘﺨﻄﻴﻂ ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﻣﺸﺎﺭﻳﻊ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﺍﻷﺧﺮﻯ.
2.6.2ﺗﺪﻓﻖ ﻣﺎﺗﻴﻚ
ﺗﺴﺘﺤﻖﺃﺻﻮﻝ FLOW-MATICﻣﻨﺎﻗﺸﺔ ﻣﻮﺟﺰﺓ ﻋﻠﻰ ﺍﻷﻗﻞ ،ﻷﻧﻬﺎ ﻛﺎﻧﺖ ﺍﻟﺴﻠﻒ ﺍﻷﺳﺎﺳﻲ ﻟـ
.COBOLﻓﻲ ﻛﺎﻧﻮﻥ ﺍﻷﻭﻝ )ﺩﻳﺴﻤﺒﺮ( ، 1953ﻛﺘﺒﺖ ﺟﺮﻳﺲ ﻫﻮﺑﺮ ﻣﻦ ﺭﻳﻤﻨﺠﺘﻮﻥ ﺭﺍﻧﺪ ﻳﻮﻧﻴﻔﺎﻙ
ﺍﻗﺘﺮﺍﺣﺎًﻧﺒﻮﻳﺎً ﺑﺎﻟﻔﻌﻞ .ﻭﺍﻗﺘﺮﺡ ﺃﻧﻪ "ﻳﺠﺐ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺮﻳﺎﺿﻴﺔ ﺑﺘﺮﻣﻴﺰ ﺭﻳﺎﺿﻲ ،ﻭﻳﺠﺐ ﻛﺘﺎﺑﺔ
ﺑﺮﺍﻣﺞﻣﻌﺎﻟﺠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﻋﺒﺎﺭﺍﺕ ﺑﺎﻟﻠﻐﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ" ) ، Wexelblat ، 1981ﺹ .(16ﻟﺴﻮء
ﺍﻟﺤﻆ ،ﻓﻲ ﻋﺎﻡ ، 1953ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﺴﺘﺤﻴﻞ ﺇﻗﻨﺎﻉ ﻏﻴﺮ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﺑﺄﻧﻪ ﻳﻤﻜﻦ ﺗﺼﻨﻴﻊ ﺟﻬﺎﺯ
ﻛﻤﺒﻴﻮﺗﺮﻟﻔﻬﻢ ﺍﻟﻜﻠﻤﺎﺕ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ .ﻟﻢ ﻳﻜﻦ ﻫﻨﺎﻙ ﺑﻌﺾ ﺍﻷﻣﻞ ﻓﻲ ﺃﻥ ﻳﺘﻢ ﺗﻤﻮﻳﻞ ﺍﻗﺘﺮﺍﺡ ﻣﻤﺎﺛﻞ
ﻣﻦﻗﺒﻞ ﺇﺩﺍﺭﺓ UNIVACﺣﺘﻰ ﻋﺎﻡ ، 1955ﻭﺣﺘﻰ ﺑﻌﺪ ﺫﻟﻚ ﺍﺳﺘﻐﺮﻕ ﺍﻷﻣﺮ ﻧﻈﺎﻣﺎً ﻧﻤﻮﺫﺟﻴﺎً
ﻟﻠﻘﻴﺎﻡﺑﺎﻹﻗﻨﺎﻉ ﺍﻟﻨﻬﺎﺉﻲ .ﺗﻀﻤﻦ ﺟﺰء ﻣﻦ ﻋﻤﻠﻴﺔ ﺍﻟﺒﻴﻊ ﻫﺬﻩ ﺗﺠﻤﻴﻊ ﻭﺗﺸﻐﻴﻞ ﺑﺮﻧﺎﻣﺞ ﺻﻐﻴﺮ ،
ﺑﺎﺳﺘﺨﺪﺍﻡﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﺃﻭﻻ ً ،ﺛﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﻔﺮﻧﺴﻴﺔ ،ﺛﻢ
ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻷﻟﻤﺎﻧﻴﺔ.
ﻛﺎﻥﺃﺣﺪ ﺍﻻﻫﺘﻤﺎﻣﺎﺕ ﺍﻟﻤﻬﻴﻤﻨﺔ ﻓﻲ ﺍﻻﺟﺘﻤﺎﻉ ﻫﻮ ﺃﻧﻪ ﻳﻨﺒﻐﻲ ﺍﺗﺨﺎﺫ ﺧﻄﻮﺍﺕ ﻹﻧﺸﺎء ﻫﺬﻩ
ﺍﻟﻠﻐﺔﺍﻟﻌﺎﻟﻤﻴﺔ ﺑﺴﺮﻋﺔ ،ﺣﻴﺚ ﺗﻢ ﺑﺎﻟﻔﻌﻞ ﺑﺬﻝ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺍﻟﻌﻤﻞ ﻹﻧﺸﺎء ﻟﻐﺎﺕ ﺃﻋﻤﺎﻝ ﺃﺧﺮﻯ.
ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺎﻟﻴﺔ ،ﻛﺎﻥ RCAﻭ Sylvaniaﻳﻌﻤﻼﻥ ﻋﻠﻰ ﻟﻐﺎﺕ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ
ﺍﻟﺨﺎﺻﺔﺑﻬﻤﺎ .ﻛﺎﻥ ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ ﻛﻠﻤﺎ ﺍﺳﺘﻐﺮﻕ ﺇﻧﺘﺎﺝ ﻟﻐﺔ ﻋﺎﻟﻤﻴﺔ ﻭﻗﺘﺎً ﺃﻃﻮﻝ ،ﺯﺍﺩﺕ ﺻﻌﻮﺑﺔ
ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻠﻐﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ .ﻋﻠﻰ ﻫﺬﺍ ﺍﻷﺳﺎﺱ ،ﺗﻘﺮﺭ ﺃﻧﻪ ﻳﺠﺐ ﺇﺟﺮﺍء ﺩﺭﺍﺳﺔ ﺳﺮﻳﻌﺔ
ﻟﻠﻐﺎﺕﺍﻟﻤﻮﺟﻮﺩﺓ .ﻟﻬﺬﻩ ﺍﻟﻤﻬﻤﺔ ،ﺗﻢ ﺗﺸﻜﻴﻞ ﻟﺠﻨﺔ ﺍﻟﻤﺪﻯ ﺍﻟﻘﺼﻴﺮ.
ﻛﺎﻧﺖﻫﻨﺎﻙ ﻗﺮﺍﺭﺍﺕ ﻣﺒﻜﺮﺓ ﻟﻔﺼﻞ ﻋﺒﺎﺭﺍﺕ ﺍﻟﻠﻐﺔ ﺇﻟﻰ ﻓﺉﺘﻴﻦ -ﻭﺻﻒ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﻭﺍﻟﻌﻤﻠﻴﺎﺕﺍﻟﻘﺎﺑﻠﺔ ﻟﻠﺘﻨﻔﻴﺬ -ﻭﺃﻥ ﺗﻜﻮﻥ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻓﻲ ﻫﺎﺗﻴﻦ ﺍﻟﻔﺉﺘﻴﻦ ﻓﻲ ﺃﺟﺰﺍء ﻣﺨﺘﻠﻔﺔ ﻣﻦ
ﺍﻟﺒﺮﺍﻣﺞ.ﻛﺎﻧﺖ ﺇﺣﺪﻯ ﻣﻨﺎﻗﺸﺎﺕ ﻟﺠﻨﺔ ﺍﻟﻤﺪﻯ ﺍﻟﻘﺼﻴﺮ ﺣﻮﻝ ﺇﺩﺭﺍﺝ ﺍﻷﺳﻤﺎء .ﺟﺎﺩﻝ ﺍﻟﻌﺪﻳﺪ ﻣﻦ
ﺃﻋﻀﺎءﺍﻟﻠﺠﻨﺔ ﺑﺄﻥ ﺍﻟﺘﺴﺠﻴﻼﺕ ﻛﺎﻧﺖ ﻣﻌﻘﺪﺓ ﻟﻠﻐﺎﻳﺔ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻸﺷﺨﺎﺹ ﻓﻲ ﻣﻌﺎﻟﺠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ،
ﻭﺍﻟﺬﻳﻦﻛﺎﻥ ﻳﻌُﺘﻘﺪ ﺃﻧﻬﻢ ﻏﻴﺮ ﻣﺮﺗﺎﺣﻴﻦ ﻟﻠﺘﺪﻭﻳﻦ ﺍﻟﺮﻳﺎﺿﻲ .ﺩﺍﺭﺕ ﺣﺠﺞ ﻣﻤﺎﺛﻠﺔ ﺣﻮﻝ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ
ﻳﻨﺒﻐﻲﺗﻀﻤﻴﻦ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ .ﻭﺻﻒ ﺍﻟﺘﻘﺮﻳﺮ ﺍﻟﻨﻬﺎﺉﻲ ﻟﻠﺠﻨﺔ ﺍﻟﻤﺪﻯ ﺍﻟﻘﺼﻴﺮ ،ﺍﻟﺬﻱ
ﺍﻛﺘﻤﻞﻓﻲ ﺩﻳﺴﻤﺒﺮ ، 1959ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺳﻤﻴﺖ ﻓﻴﻤﺎ ﺑﻌﺪ .COBOL 60
ﺗﻢﻭﺻﻒ ﻣﻮﺍﺻﻔﺎﺕ ﻟﻐﺔ ، COBOL 60ﺍﻟﺘﻲ ﻧﺸﺮﻫﺎ ﻣﻜﺘﺐ ﺍﻟﻄﺒﺎﻋﺔ ﺍﻟﺤﻜﻮﻣﻲ ﻓﻲ ﺃﺑﺮﻳﻞ
)1960ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ، (1960 ،ﺑﺄﻧﻬﺎ "ﺃﻭﻟﻴﺔ" .ﻧﺸُﺮﺕ ﻧﺴﺦ ﻣﻨﻘﺤﺔ ﻓﻲ ﻋﺎﻣﻲ 1961ﻭ ) 1962
ﻭﺯﺍﺭﺓﺍﻟﺪﻓﺎﻉ .(1962 ، 1961 ،ﺗﻢ ﺗﻮﺣﻴﺪ ﺍﻟﻠﻐﺔ ﻣﻦ ﻗﺒﻞ ﻣﺠﻤﻮﻋﺔ ﺍﻟﻤﻌﻬﺪ ﺍﻟﻘﻮﻣﻲ ﺍﻷﻣﺮﻳﻜﻲ
ﻟﻠﻤﻌﺎﻳﻴﺮ) (ANSIﻓﻲ ﻋﺎﻡ .1968ﺗﻢ ﺗﻮﺣﻴﺪ ﺍﻟﻤﺮﺍﺟﻌﺎﺕ ﺍﻟﺜﻼﺛﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻣﻦ ﻗﺒﻞ ANSIﻓﻲ
1974ﻭ 1985ﻭ .2002ﻭﺗﺴﺘﻤﺮ ﺍﻟﻠﻐﺔ ﻓﻲ ﺍﻟﺘﻄﻮﺭ ﺍﻟﻴﻮﻡ.
2.6.4ﺍﻟﺘﻘﻴﻴﻢ
ﻧﺸﺄﺕﻟﻐﺔ COBOLﻋﺪﺩﺍً ﻣﻦ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻟﺠﺪﻳﺪﺓ ،ﻇﻬﺮ ﺑﻌﻀﻬﺎ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ﺑﻠﻐﺎﺕ ﺃﺧﺮﻯ .ﻋﻠﻰ
ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ،ﻣﻠﻒﻳﻌُﺮﻑِّﻛﺎﻥ ﻓﻌﻞ COBOL 60ﺃﻭﻝ ﺑﻨﺎء ﻟﻐﺔ ﻋﺎﻟﻲ ﺍﻟﻤﺴﺘﻮﻯ ﻟﻮﺣﺪﺍﺕ
ﺍﻟﻤﺎﻛﺮﻭ.ﻭﺍﻷﻫﻢ ﻣﻦ ﺫﻟﻚ ،ﺃﻥ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻬﺮﻣﻴﺔ )ﺍﻟﺴﺠﻼﺕ( ،ﺍﻟﺘﻲ ﻇﻬﺮﺕ ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ
، Plankalkülﺗﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ .COBOLﺗﻢ ﺗﻀﻤﻴﻨﻬﺎ ﻓﻲ ﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻀﺮﻭﺭﻳﺔ
ﺍﻟﻤﺼﻤﻤﺔﻣﻨﺬ ﺫﻟﻚ ﺍﻟﺤﻴﻦ .ﻛﺎﻧﺖ COBOLﺃﻳﻀﺎً ﺍﻟﻠﻐﺔ ﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﺳﻤﺤﺖ ﻟﻸﺳﻤﺎء ﺑﺄﻥ
ﺗﻜﻮﻥﺫﺍﺕ ﺩﻻﻟﺔ ﺣﻘﻴﻘﻴﺔ ،ﻷﻧﻬﺎ ﺳﻤﺤﺖ ﺑﻜﻞ ﻣﻦ ﺍﻷﺳﻤﺎء ﺍﻟﻄﻮﻳﻠﺔ )ﺣﺘﻰ 30ﺣﺮﻓﺎً( ﻭﺃﺣﺮﻑ
ﺭﺍﺑﻂﺍﻟﻜﻠﻤﺎﺕ )ﺍﻟﻮﺍﺻﻼﺕ(.
ﺑﺸﻜﻞﻋﺎﻡ ،ﻳﻌﺪ ﺗﻘﺴﻴﻢ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻫﻮ ﺍﻟﺠﺰء ﺍﻟﻘﻮﻱ ﻣﻦ ﺗﺼﻤﻴﻢ ، COBOLﻓﻲ ﺣﻴﻦ ﺃﻥ
ﻗﺴﻢﺍﻹﺟﺮﺍءﺍﺕ ﺿﻌﻴﻒ ﻧﺴﺒﻴﺎً .ﻳﺘﻢ ﺗﻌﺮﻳﻒ ﻛﻞ ﻣﺘﻐﻴﺮ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺗﻘﺴﻴﻢ ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﺑﻤﺎ
ﻓﻲﺫﻟﻚ ﻋﺪﺩ ﺍﻷﺭﻗﺎﻡ ﺍﻟﻌﺸﺮﻳﺔ ﻭﻣﻮﻗﻊ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺸﺮﻳﺔ ﺍﻟﻀﻤﻨﻴﺔ .ﻳﺘﻢ ﺃﻳﻀﺎً ﻭﺻﻒ ﺳﺠﻼﺕ
ﺍﻟﻤﻠﻔﺎﺕﺑﻬﺬﺍ ﺍﻟﻤﺴﺘﻮﻯ ﻣﻦ ﺍﻟﺘﻔﺎﺻﻴﻞ ،ﻭﻛﺬﻟﻚ ﺍﻷﺳﻄﺮ ﺍﻟﺘﻲ ﺳﻴﺘﻢ ﺇﺧﺮﺍﺟﻬﺎ ﺇﻟﻰ ﺍﻟﻄﺎﺑﻌﺔ ،ﻣﻤﺎ
ﻳﺠﻌﻞ COBOLﻣﺜﺎﻟﻴﺎً ﻟﻄﺒﺎﻋﺔ ﺍﻟﺘﻘﺎﺭﻳﺮ ﺍﻟﻤﺤﺎﺳﺒﻴﺔ .ﻭﻟﻌﻞ ﺃﻫﻢ ﻧﻘﺎﻁ ﺿﻌﻒ ﻗﺴﻢ ﺍﻹﺟﺮﺍءﺍﺕ
ﺍﻷﺻﻠﻴﺔﻫﻮ ﺍﻓﺘﻘﺎﺭﻫﺎ ﺇﻟﻰ ﺍﻟﻮﻇﺎﺉﻒ .ﺇﺻﺪﺍﺭﺍﺕ COBOLﺍﻟﺴﺎﺑﻘﺔ ﻟﻤﻌﻴﺎﺭ 1974ﻟﻢ ﺗﺴﻤﺢ
ﺃﻳﻀﺎًﺑﺎﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺫﺍﺕ ﺍﻟﻤﻌﻠﻤﺎﺕ.
ﺗﻌﻠﻴﻘﻨﺎﺍﻷﺧﻴﺮ ﻋﻠﻰ :COBOLﻛﺎﻧﺖ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﺗﻢ ﺗﻔﻮﻳﺾ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﻦ
ﻗﺒﻞﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ) .(DoDﺟﺎء ﻫﺬﺍ ﺍﻟﺘﻔﻮﻳﺾ ﺑﻌﺪ ﺗﻄﻮﻳﺮﻩ ﺍﻷﻭﻟﻲ ،ﻷﻥ COBOLﻟﻢ ﻳﺘﻢ
ﺗﺼﻤﻴﻤﻪﺧﺼﻴﺼﺎً ﻟﻮﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ .ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﻣﺰﺍﻳﺎﻫﺎ ،ﻣﻦ ﺍﻟﻤﺤﺘﻤﻞ ﺃﻻ ﻳﻜﻮﻥ COBOL
61 2.6ﺣﻮﺳﺒﺔ ﺳﺠﻼﺕ ﺍﻷﻋﻤﺎﻝCOBOL :
ﻧﺠﺎﺑﺪﻭﻥ ﻫﺬﺍ ﺍﻟﺘﻔﻮﻳﺾ .ﺃﺩﻯ ﺍﻷﺩﺍء ﺍﻟﻀﻌﻴﻒ ﻟﻠﻤﺘﺮﺟﻤﻴﻦ ﺍﻷﻭﺍﺉﻞ ﺇﻟﻰ ﺟﻌﻞ ﺍﻟﻠﻐﺔ ﺑﺎﻫﻈﺔ
ﺍﻟﺜﻤﻦﻟﻠﻐﺎﻳﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ .ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ،ﺑﺎﻟﻄﺒﻊ ،ﺃﺻﺒﺢ ﺍﻟﻤﺘﺮﺟﻤﻮﻥ ﺃﻛﺜﺮ ﻛﻔﺎءﺓ ﻭﺃﺻﺒﺤﺖ ﺃﺟﻬﺰﺓ
ﺍﻟﻜﻤﺒﻴﻮﺗﺮﺃﺳﺮﻉ ﻭﺃﺭﺧﺺ ﺑﻜﺜﻴﺮ ﻭﻟﺪﻳﻬﺎ ﺫﺍﻛﺮﺓ ﺃﻛﺒﺮ ﺑﻜﺜﻴﺮ .ﻫﺬﻩ ﺍﻟﻌﻮﺍﻣﻞ ﻣﺠﺘﻤﻌﺔ ﺳﻤﺤﺖ ﻟـ
COBOLﺑﺎﻟﻨﺠﺎﺡ ،ﺩﺍﺧﻞ ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ﻭﺧﺎﺭﺟﻬﺎ .ﺃﺩﻯ ﻇﻬﻮﺭﻫﺎ ﺇﻟﻰ ﺍﻟﻤﻴﻜﻨﺔ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺔ
ﻟﻠﻤﺤﺎﺳﺒﺔ ،ﻭﻫﻲ ﺛﻮﺭﺓ ﻣﻬﻤﺔ ﺑﻜﻞ ﺍﻟﻤﻘﺎﻳﻴﺲ.
ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ .COBOLﻳﻘﺮﺃ ﻫﺬﺍ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻣﻠﻔﺎً ﺑﺎﺳﻢﻣﻠﻒ BAL-FWDﺍﻟﺬﻱ
ﻳﺤﺘﻮﻱﻋﻠﻰ ﻣﻌﻠﻮﻣﺎﺕ ﺍﻟﻤﺨﺰﻭﻥ ﺣﻮﻝ ﻣﺠﻤﻮﻋﺔ ﻣﻌﻴﻨﺔ ﻣﻦ ﺍﻟﻌﻨﺎﺻﺮ .ﻣﻦ ﺑﻴﻦ ﺃﺷﻴﺎء ﺃﺧﺮﻯ ،
ﻳﺘﻀﻤﻦﻛﻞ ﺳﺠﻞ ﻋﻨﺼﺮ ﺍﻟﺮﻗﻢ ﺍﻟﻤﻮﺟﻮﺩ ﺣﺎﻟﻴﺎً )ﺑﺎﻝ ﻋﻠﻰ ﺍﻟﻴﺪ(ﻭﻧﻘﻄﺔ ﺇﻋﺎﺩﺓ ﺗﺮﺗﻴﺐ ﺍﻟﻌﻨﺼﺮ
)BAL-REORDER-POINT(.ﻧﻘﻄﺔ ﺇﻋﺎﺩﺓ ﺍﻟﻄﻠﺐ ﻫﻲ ﺍﻟﺤﺪ ﺍﻷﺩﻧﻰ ﻟﻌﺪﺩ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻟﻤﻮﺟﻮﺩﺓ
ﻭﺍﻟﺘﻲﻳﺠﺐ ﻃﻠﺐ ﺍﻟﻤﺰﻳﺪ ﻋﻨﺪﻫﺎ .ﻳﻨﺘﺞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻗﺎﺉﻤﺔ ﺑﺎﻟﻌﻨﺎﺻﺮ ﺍﻟﺘﻲ ﻳﺠﺐ ﺇﻋﺎﺩﺓ ﺗﺮﺗﻴﺒﻬﺎ
ﻛﻤﻠﻒﻣﺴﻤﻰﺇﻋﺎﺩﺓ ﺗﺮﺗﻴﺐ ﺍﻟﻘﻮﺍﺉﻢ.
ﻗﺴﻢﺍﻟﺒﻴﺉﺔ.
ﻗﺴﻢﺍﻟﺘﻜﻮﻳﻦ.
DEC-VAX. SOURCE-COMPUTER.
DEC-VAX. ﻛﺎﺉﻦ-ﺣﺎﺳﻮﺏ.
ﻗﺴﻢﺍﻹﺩﺧﺎﻝ ﻭﺍﻹﺧﺮﺍﺝ.
ﺍﻟﺘﺤﻜﻢﻓﻲ ﺍﻟﻤﻠﻔﺎﺕ.
ﺗﻌﻴﻴﻦﻟﻠﻘﺎﺭﺉ. ﺣﺪﺩBAL-FWD-FILE
ﺗﻌﻴﻴﻦﺇﻟﻰ ﺍﻟﻄﺎﺑﻌﺔ ﺍﻟﻤﺤﻠﻴﺔ. ﺣﺪﺩﺇﻋﺎﺩﺓ ﺗﺮﺗﻴﺐ ﺍﻟﻘﻮﺍﺉﻢ
ﺗﻘﺴﻴﻢﺍﻟﺒﻴﺎﻧﺎﺕ.
ﻗﺴﻢﺍﻟﻤﻠﻒ.
ﻓﺪ ﻣﻠﻒBAL-FWD
ﺳﺠﻼﺕﺍﻟﻤﻠﺼﻘﺎﺕ ﻫﻲ ﺳﺠﻼﺕ ﻗﻴﺎﺳﻴﺔ ﺗﺤﺘﻮﻱ
ﻋﻠﻰ 80ﺣﺮﻓﺎً.
ﺑﻄﺎﻗﺔ.BAL-FWD 01
ﺍﻟﺼﻮﺭﺓ.(5) 9 02ﺑﻞ ﺍﻟﺒﻨﺪ ﺭﻗﻢ
ﺍﻟﺼﻮﺭﺓﻫﻮ (.X )20 02 BAL-ITEM-DESC
ﺍﻟﺼﻮﺭﺓﻫﻮ (.X )5 02ﺣﺸﻮ
ﺍﻟﺼﻮﺭﺓﻫﻲ .999V99 02 BAL-UNIT-PRICE
ﺍﻟﺼﻮﺭﺓ.(5) 9 02 BAL-REORDER-POINT
ﺍﻟﺼﻮﺭﺓ.(5) 9 02ﺑﺎﻝ ﻓﻲ ﺍﻟﻴﺪ
ﺍﻟﺼﻮﺭﺓ.(5) 9 02ﺑﺎﻝ ﻋﻨﺪ ﺍﻟﻄﻠﺐ
ﺍﻟﺼﻮﺭﺓﻫﻮ (.X )30 02ﺣﺸﻮ
ﺇﻋﺎﺩﺓﺗﺮﺗﻴﺐ ﺍﻟﻘﻮﺍﺉﻢ ﻓﺪ
ﺳﺠﻼﺕﺍﻟﻤﻠﺼﻘﺎﺕ ﻫﻲ ﺳﺠﻼﺕ ﻗﻴﺎﺳﻴﺔ ﺗﺤﺘﻮﻱ ﻋﻠﻰ
132ﺣﺮﻓﺎً.
ﻗﺴﻢﺍﻹﺟﺮﺍءﺍﺕ.
-000ﻣﻨﺘﺞ -ﻗﻮﺍﺉﻢ.REORDER-LISTING -
ﻓﺘﺢ BAL-FWD-FILEﺍﻟﻤﺪﺧﻼﺕ .ﻓﺘﺢ ﻗﻮﺍﺉﻢ ﺇﻋﺎﺩﺓ
ﺗﺮﺗﻴﺐﺍﻹﺧﺮﺍﺝ .ﻧﻘﻞ " "Nﺇﻟﻰ ﻣﻔﺘﺎﺡ ﺑﻄﺎﻗﺔ -LINE
EOF. PERFORM 100-PRODUCE-REORDER
-100ﻣﻨﺘﺞ.REORDER-LINE -
ﺃﺩﺍء .READ-INVENTORY RECORD-110ﺇﺫﺍ ﻛﺎﻥ -SWITCH
CARD-EOFﻻ ﻳﺴﺎﻭﻱ "["Y
ﺃﺩﺍء 120ﺣﺴﺎﺏ -ﺍﻟﻤﺨﺰﻭﻥ ﺍﻟﻤﺘﻮﻓﺮ
ﺇﺫﺍﻛﺎﻥ ﺍﻟﻤﺨﺰﻭﻥ ﺍﻟﻤﺘﺎﺡ ﺃﻗﻞ ﻣﻦ ﻧﻘﻄﺔ BAL-REORDER-POINT
PERFORM 130-PRINT-REORDER-LINE.
-110ﻗﺮﺍءﺓ-ﺳﺠﻞ ﺍﻟﻤﺨﺰﻭﻥ.
ﻗﺮﺍءﺓﺳﺠﻞ BAL-FWD-FILE
ﻓﻲﺍﻟﻨﻬﺎﻳﺔ
ﺣﺮﻙﺣﺮﻑ " "Yﺇﻟﻰ ﻣﻔﺘﺎﺡ ﺑﻄﺎﻗﺔ .EOF
ﺇﻋﻄﺎءﺍﻟﻤﺨﺰﻭﻥ ﺍﻟﻤﺘﺎﺡ.
130-PRINT-REORDER-LINE.
ﻹﻋﺎﺩﺓﺗﺮﺗﻴﺐ ﺍﻟﺨﻂ. ﻧﻘﻞﺍﻟﻔﻀﺎء
63 2.7ﺑﺪﺍﻳﺎﺕ ﺗﻘﺎﺳﻢ ﺍﻟﻮﻗﺖ :ﺃﺳﺎﺳﻲ
ﺇﻟﻰ.RL-ITEM-NO ﻧﻘﻞBAL-ITEM-NO
ﺇﻟﻰ.RL-ITEM-DESC ﻧﻘﻞBAL-ITEM-DESC
ﺇﻟﻰ.RL-UNIT-PRICE ﻧﻘﻞBAL-UNIT-PRICE
ﺇﻟﻰ.RL-AVAILABLE-STOCK ﻧﻘﻞﺍﻟﻤﺨﺰﻭﻥ ﺍﻟﻤﺘﻮﻓﺮ
ﺍﻧﻘﻞ BAL-REORDER-POINTﺇﻟﻰ .RL-REORDER-POINTﺍﻛﺘﺐ ﺧﻂ
ﺇﻋﺎﺩﺓﺗﺮﺗﻴﺐ.
2.7.1ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ
ﺗﻢﺗﺼﻤﻴﻢ ) BASICﻛﻮﺩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺮﻣﺰﻳﺔ ﻟﺠﻤﻴﻊ ﺍﻷﻏﺮﺍﺽ ﻟﻠﻤﺒﺘﺪﺉﻴﻦ( ﻓﻲ ﺍﻷﺻﻞ ﻓﻲ ﻛﻠﻴﺔ
ﺩﺍﺭﺗﻤﻮﺙ)ﺍﻵﻥ ﺟﺎﻣﻌﺔ ﺩﺍﺭﺗﻤﻮﺙ( ﻓﻲ ﻧﻴﻮ ﻫﺎﻣﺒﺸﺎﻳﺮ ﻣﻦ ﻗﺒﻞ ﻋﺎﻟﻤﻴﻦ ﺭﻳﺎﺿﻴﻴﻦ ،ﺟﻮﻥ ﻛﻴﻤﻴﻨﻲ
ﻭﺗﻮﻣﺎﺱﻛﻮﺭﺗﺰ ،ﺍﻟﺬﻳﻦ ﻃﻮﺭﻭﺍ ،ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ،ﻣﺘﺮﺟﻤﻴﻦ ﻟﻤﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ
ﻟﻬﺠﺎﺕﻓﻮﺭﺗﺮﺍﻥ ﻭ .ALGOL 60ﻻ ﻳﻮﺍﺟﻪ ﻃﻼﺏ ﺍﻟﻌﻠﻮﻡ ﻋﻤﻮﻣﺎً ﺻﻌﻮﺑﺔ ﻓﻲ ﺗﻌﻠﻢ ﺃﻭ ﺍﺳﺘﺨﺪﺍﻡ
ﺗﻠﻚﺍﻟﻠﻐﺎﺕ ﻓﻲ ﺩﺭﺍﺳﺎﺗﻬﻢ .ﻭﻣﻊ ﺫﻟﻚ ،ﻛﺎﻧﺖ ﺩﺍﺭﺗﻤﻮﺙ ﻓﻲ ﺍﻷﺳﺎﺱ ﻣﺆﺳﺴﺔ ﻟﻠﻔﻨﻮﻥ ﺍﻟﺤﺮﺓ ،
ﺣﻴﺚﺷﻜﻞ ﻃﻼﺏ ﺍﻟﻌﻠﻮﻡ ﻭﺍﻟﻬﻨﺪﺳﺔ ﺣﻮﺍﻟﻲ 25ﺑﺎﻟﻤﺎﺉﺔ ﻓﻘﻂ ﻣﻦ ﻫﻴﺉﺔ ﺍﻟﻄﻼﺏ .ﺗﻘﺮﺭ ﻓﻲ
ﺭﺑﻴﻊﻋﺎﻡ 1963ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺟﺪﻳﺪﺓ ﺧﺎﺻﺔ ﻟﻄﻼﺏ ﺍﻟﻔﻨﻮﻥ ﺍﻟﺤﺮﺓ .ﺳﺘﺴﺘﺨﺪﻡ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ
ﺍﻟﻤﺤﻄﺎﺕﻛﻄﺮﻳﻘﺔ ﻟﻠﻮﺻﻮﻝ ﺇﻟﻰ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ .ﻛﺎﻧﺖ ﺃﻫﺪﺍﻑ ﺍﻟﻨﻈﺎﻡ ﻛﻤﺎ ﻳﻠﻲ:
.6ﺍﺷﺘﻤﻠﺖ ﺑﻌﺾ ﺍﻟﺤﻮﺍﺳﻴﺐ ﺍﻟﺼﻐﻴﺮﺓ ﺍﻟﻤﺒﻜﺮﺓ ﻋﻠﻰ ﻣﺘﺮﺟﻤﻴﻦ ﺃﺳﺎﺳﻴﻴﻦ ﻳﻘﻴﻤﻮﻥ ﻓﻲ 4096ﺑﺎﻳﺖ ﻣﻦ ﺫﺍﻛﺮﺓ ﺍﻟﻘﺮﺍءﺓ
ﻓﻘﻂ.
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 64
ﻛﺎﻥﺍﻟﻬﺪﻑ ﺍﻷﺧﻴﺮ ﺑﺎﻟﻔﻌﻞ ﻣﻔﻬﻮﻣﺎً ﺛﻮﺭﻳﺎً .ﻛﺎﻥ ﻳﻌﺘﻤﺪ ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﺍﻷﻗﻞ ﻋﻠﻰ ﺍﻻﻋﺘﻘﺎﺩ ﺑﺄﻥ ﺃﺟﻬﺰﺓ
ﺍﻟﻜﻤﺒﻴﻮﺗﺮﺳﺘﺼﺒﺢ ﺃﺭﺧﺺ ﺑﻜﺜﻴﺮ ﻣﻊ ﻣﺮﻭﺭ ﺍﻟﻮﻗﺖ ،ﻭﻫﻮ ﻣﺎ ﻓﻌﻠﻮﻩ ﺑﺎﻟﻄﺒﻊ.
ﺃﺩﻯﺍﻟﺠﻤﻊ ﺑﻴﻦ ﺍﻷﻫﺪﺍﻑ ﺍﻟﺜﺎﻧﻴﺔ ﻭﺍﻟﺜﺎﻟﺜﺔ ﻭﺍﻟﺮﺍﺑﻌﺔ ﺇﻟﻰ ﺍﻟﺠﺎﻧﺐ ﺍﻟﻤﺸﺘﺮﻙ ﺑﺎﻟﻮﻗﺖ ﻣﻦ
.BASICﻓﻘﻂ ﻣﻦ ﺧﻼﻝ ﺍﻟﻮﺻﻮﻝ ﺍﻟﻔﺮﺩﻱ ﻣﻦ ﺧﻼﻝ ﺍﻟﻤﺤﻄﺎﺕ ﻣﻦ ﻗﺒﻞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ
ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﺍﻟﻤﺘﺰﺍﻣﻨﻴﻦ ﻳﻤﻜﻦ ﺗﺤﻘﻴﻖ ﻫﺬﻩ ﺍﻷﻫﺪﺍﻑ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ.
ﻓﻲﺻﻴﻒ ﻋﺎﻡ ، 1963ﺑﺪﺃ Kemenyﺍﻟﻌﻤﻞ ﻋﻠﻰ ﺍﻟﻤﺘﺮﺟﻢ ﻟﻠﻨﺴﺨﺔ ﺍﻷﻭﻟﻰ ﻣﻦ ، BASIC
ﺑﺎﺳﺘﺨﺪﺍﻡﺍﻟﻮﺻﻮﻝ ﻋﻦ ﺑﻌﺪ ﺇﻟﻰ ﻛﻤﺒﻴﻮﺗﺮ .GE 225ﺑﺪﺃ ﺗﺼﻤﻴﻢ ﻭﺗﺮﻣﻴﺰ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻟـ BASIC
ﻓﻲﺧﺮﻳﻒ ﻋﺎﻡ .1963ﺍﻟﺴﺎﻋﺔ 4:00
ﺃ.ﻡ.ﻓﻲ 1ﻣﺎﻳﻮ ، 1964ﺗﻤﺖ ﻛﺘﺎﺑﺔ ﻭﺗﺸﻐﻴﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻷﻭﻝ ﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ BASICﺍﻟﻤﺸﺘﺮﻙ
ﺑﺎﻟﻮﻗﺖ.ﻓﻲ ﻳﻮﻧﻴﻮ ،ﺍﺭﺗﻔﻊ ﻋﺪﺩ ﺍﻟﻤﺤﻄﺎﺕ ﻋﻠﻰ ﺍﻟﻨﻈﺎﻡ ﺇﻟﻰ ، 11ﻭﺑﺤﻠﻮﻝ ﺍﻟﺨﺮﻳﻒ ﺍﺭﺗﻔﻊ ﺇﻟﻰ .20
2.7.3ﺍﻟﺘﻘﻴﻴﻢ
ﻛﺎﻥﺃﻫﻢ ﺟﺎﻧﺐ ﻓﻲ BASICﺍﻷﺻﻠﻲ ﻫﻮ ﺃﻧﻬﺎ ﻛﺎﻧﺖ ﺃﻭﻝ ﻟﻐﺔ ﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻳﺘﻢ
ﺍﺳﺘﺨﺪﺍﻣﻬﺎﻣﻦ ﺧﻼﻝ ﻣﺤﻄﺎﺕ ﻣﺘﺼﻠﺔ ﺑﺠﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ ﺑﻌﻴﺪ7.ﻛﺎﻧﺖ ﺍﻟﻤﺤﻄﺎﺕ ﻗﺪ ﺑﺪﺃﺕ ﻟﻠﺘﻮ
ﻓﻲﺃﻥ ﺗﻜﻮﻥ ﻣﺘﺎﺣﺔ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ .ﻗﺒﻞ ﺫﻟﻚ ،ﺗﻢ ﺇﺩﺧﺎﻝ ﻣﻌﻈﻢ ﺍﻟﺒﺮﺍﻣﺞ ﻓﻲ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ
ﺇﻣﺎﻣﻦ ﺧﻼﻝ ﺑﻄﺎﻗﺎﺕ ﻣﺜﻘﺒﺔ ﺃﻭ ﺷﺮﻳﻂ ﻭﺭﻗﻲ.
.7ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ LISPﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ﻣﻦ ﺧﻼﻝ ﺍﻟﻤﺤﻄﺎﺕ ﺍﻟﻄﺮﻓﻴﺔ ،ﻭﻟﻜﻦ ﻟﻢ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ.
65 2.7ﺑﺪﺍﻳﺎﺕ ﺗﻘﺎﺳﻢ ﺍﻟﻮﻗﺖ :ﺃﺳﺎﺳﻲ
ﺃﺟﺰﺍءﻣﻦ ﺃﻛﺒﺮ ﻧﻈﺎﻡ ﺗﺸﻐﻴﻞ ﺧﺎﺹ ﺑﻬﺎ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺼﻐﻴﺮﺓ ، PDP-11 ، RSTSﻓﻲ
ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ.
ﺗﻢﺍﻧﺘﻘﺎﺩ BASICﻟﻀﻌﻒ ﺑﻨﻴﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﻓﻴﻬﺎ ،ﻣﻦ ﺑﻴﻦ ﺃﻣﻮﺭ ﺃﺧﺮﻯ .ﻭﻓﻘﺎً ﻟﻤﻌﺎﻳﻴﺮ
ﺍﻟﺘﻘﻴﻴﻢﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻟﻔﺼﻞ ﺍﻷﻭﻝ ،ﻭﺗﺤﺪﻳﺪﺍ ًﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ ،ﻓﺈﻥ
ﺍﻟﻠﻐﺔﺗﻌﻤﻞ ﺑﺎﻟﻔﻌﻞ ﺑﺸﻜﻞ ﺳﻲء ﻟﻠﻐﺎﻳﺔ .ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﻘﺪﻳﻤﺔ ﻣﻦ ﺍﻟﻠﻐﺔ ﻟﻢ ﺗﻜﻦ
ﻣﺨﺼﺼﺔﻭﻻ ﻳﻨﺒﻐﻲ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﺠﺎﺩﺓ ﻣﻦ ﺃﻱ ﺣﺠﻢ ﻛﺒﻴﺮ .ﺗﻌﺪ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﻼﺣﻘﺔ
ﺃﻛﺜﺮﻣﻼءﻣﺔ ﻟﻤﺜﻞ ﻫﺬﻩ ﺍﻟﻤﻬﺎﻡ.
ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔ
ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔﺍﻃﺒﻊﺍﻟﻨﺘﻴﺠﺔ
ﺍﻃﺒﻊ"ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ":؛
ﻧﺘﻴﺠﺔ
ﺁﺧﺮ
ﺍﻃﺒﻊ"ﺧﻄﺄ -ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ" END IF
ﻧﻬﺎﻳﺔ
ﻣﻘﺎﺑﻠﺔ
66
ﻛﺎﻥ MSDOS.exeﻫﻮ ﺑﺮﻧﺎﻣﺞ shellﻟﻺﺻﺪﺍﺭﺍﺕ " ﻛﻴﻒﺍﻧﺘﻘﻠﺖ ﻣﻦ ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ
ﺷﻞﺇﻟﻰ ﺍﻟﺘﻌﺎﻭﻥ ﻣﻊ Microsoft؟
ﺍﻟﻘﻠﻴﻠﺔﺍﻷﻭﻟﻰ ﻣﻦ .Windowsﻟﻘﺪ ﻛﺎﻥ ﺑﺮﻧﺎﻣﺠﺎً ﻓﻈﻴﻌﺎً ،
ﺣﺎﻣﻞﺛﻼﺛﻲ ﺍﻟﻘﻮﺍﺉﻢ
ﻭﺃﻋﺘﻘﺪﺃﻧﻪ ﻳﻤﻜﻦ ﺗﺤﺴﻴﻨﻪ ﺑﺸﻜﻞ ﻛﺒﻴﺮ ،ﻭﻛﻨﺖ ﺍﻟﺸﺨﺺ ﻭﺭﻭﺑﻲﻫﻤﺎ ﻧﻔﺲ ﺍﻟﺸﻲء .ﺑﻌﺪ ﺃﻥ
ﺍﻟﺬﻱﻳﻘﻮﻡ ﺑﺬﻟﻚ .ﻓﻲ ﻭﻗﺖ ﻓﺮﺍﻏﻲ ،ﺑﺪﺃﺕ ﻋﻠﻰ ﺍﻟﻔﻮﺭ ﻓﻲ ﻭﻗﻌﺖﺻﻔﻘﺔ ﻣﻊ ﺑﻴﻞ ﺟﻴﺘﺲ ،
ﻗﻤﺖﺑﺘﻐﻴﻴﺮ ﺍﺳﻢ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻷﻭﻟﻲ ﻣﻦ
ﻛﺘﺎﺑﺔﺑﺮﻧﺎﻣﺞ ﺷﻞ ﺃﻓﻀﻞ ﻣﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﺬﻱ ﺟﺎء ﺑﻪ
.Windows " ﺗﺮﺍﻳﺒﻮﺩﺇﻟﻰ ﺭﻭﺑﻲ .ﺛﻢ ﺍﺳﺘﺨﺪﻣﺖ
ﻧﻤﻮﺫﺝﺭﻭﺑﻲ ﻛﻨﻤﺎﺫﺝ ﺃﻭﻟﻴﺔ ﻳﺠﺐ
ﺍﺳﺘﺨﺪﺍﻣﻬﺎ:ﻛﻨﻤﻮﺫﺝ ﻳﻤﻜﻦ ﺍﻟﺘﺨﻠﺺ
ﻣﻨﻪﻟﺒﻨﺎء ﺟﻮﺩﺓ ﺍﻹﺻﺪﺍﺭ
67
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 68
2.8.1ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ
ﻣﺜﻞ ، Fortranﺗﻢ ﺗﻄﻮﻳﺮ PL / Iﻛﻤﻨﺘﺞ .IBMﺑﺤﻠﻮﻝ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ،ﺍﺳﺘﻘﺮ ﻣﺴﺘﺨﺪﻣﻮ
ﺃﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﺍﻟﺼﻨﺎﻋﺔ ﻓﻲ ﻣﻌﺴﻜﺮﻳﻦ ﻣﻨﻔﺼﻠﻴﻦ ﻭﻣﺨﺘﻠﻔﻴﻦ ﺗﻤﺎﻣﺎً :ﺍﻟﻌﻠﻤﻲ ﻭﺍﻟﺘﺠﺎﺭﻱ.
ﻣﻦﻭﺟﻬﺔ ﻧﻈﺮ ﺷﺮﻛﺔ ﺁﻱ ﺑﻲ ﺇﻡ ،ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺠﻴﻦ ﺍﻟﻌﻠﻤﻴﻴﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺇﻣﺎ 7090ﺃﻭ ﺃﺟﻬﺰﺓ
ﻛﻤﺒﻴﻮﺗﺮﺁﻱ ﺑﻲ ﺇﻡ ﺻﻐﻴﺮﺓ ﺍﻟﺤﺠﻢ .1620ﺍﺳﺘﺨﺪﻣﺖ ﻫﺬﻩ ﺍﻟﻤﺠﻤﻮﻋﺔ ﺑﻴﺎﻧﺎﺕ ﻭﻣﺼﻔﻮﻓﺎﺕ
ﺍﻟﻔﺎﺻﻠﺔﺍﻟﻌﺎﺉﻤﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ .ﻛﺎﻧﺖ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻷﺳﺎﺳﻴﺔ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ
ﺍﺳﺘﺨﺪﺍﻡﺑﻌﺾ ﻟﻐﺎﺕ ﺍﻟﺘﺠﻤﻴﻊ ﺃﻳﻀﺎً .ﻛﺎﻥ ﻟﺪﻳﻬﻢ ﻣﺠﻤﻮﻋﺔ ﻣﺴﺘﺨﺪﻣﻴﻦ ﺧﺎﺻﺔ ﺑﻬﻢ ، SHARE ،
ﻭﻟﻢﻳﻜﻦ ﻟﺪﻳﻬﻢ ﺍﺗﺼﺎﻝ ﻳﺬﻛﺮ ﻣﻊ ﺃﻱ ﺷﺨﺺ ﻳﻌﻤﻞ ﻓﻲ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ.
ﺃﺩﺕﻫﺬﻩ ﺍﻟﺘﺼﻮﺭﺍﺕ ﺑﺸﻜﻞ ﻃﺒﻴﻌﻲ ﺇﻟﻰ ﻣﻔﻬﻮﻡ ﺗﺼﻤﻴﻢ ﻛﻤﺒﻴﻮﺗﺮ ﻋﺎﻟﻤﻲ ﻭﺍﺣﺪ ﻳﻜﻮﻥ ﻗﺎﺩﺭﺍً
ﻋﻠﻰﺍﻟﻘﻴﺎﻡ ﺑﺤﺴﺎﺏ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ ﻭﺍﻟﺤﺴﺎﺏ ﺍﻟﻌﺸﺮﻱ ،ﻭﺑﺎﻟﺘﺎﻟﻲ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ
ﻭﺍﻟﺘﺠﺎﺭﻳﺔ.ﻭﻫﻜﺬﺍ ﻭﻟﺪ ﻣﻔﻬﻮﻡ ﺧﻂ ﺍﻟﺤﻮﺍﺳﻴﺐ .IBM System / 360ﺇﻟﻰ ﺟﺎﻧﺐ ﺫﻟﻚ ﺟﺎءﺕ
ﻓﻜﺮﺓﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻓﻲ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﻭﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ .ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ
ﻣﻘﻴﺎﺱﺟﻴﺪ ،ﺗﻢ ﻃﺮﺡ ﻣﻴﺰﺍﺕ ﻟﺪﻋﻢ ﺑﺮﻣﺠﺔ ﺍﻷﻧﻈﻤﺔ ﻭﻣﻌﺎﻟﺠﺔ ﺍﻟﻘﻮﺍﺉﻢ .ﻟﺬﻟﻚ ،ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ
ﺍﻟﺠﺪﻳﺪﺓﺗﺤﻞ ﻣﺤﻞ Fortranﻭ COBOLﻭ LISPﻭﺗﻄﺒﻴﻘﺎﺕ ﺃﻧﻈﻤﺔ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ.
.8ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ،ﺗﻄﻠﺒﺖ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﺜﺒﻴﺖ ﺍﻟﻜﺒﻴﺮﺓ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻛﻼ ًﻣﻦ ﺍﻷﺟﻬﺰﺓ ﺑﺪﻭﺍﻡ ﻛﺎﻣﻞ ﻭﻣﻮﻇﻔﻲ ﺻﻴﺎﻧﺔ
ﺑﺮﺍﻣﺞﺍﻟﻨﻈﺎﻡ ﺑﺪﻭﺍﻡ ﻛﺎﻣﻞ.
69 2.8ﻛﻞ ﺷﻲء ﻟﻠﺠﻤﻴﻊPL / I :
2.8.2ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ
ﺑﺪﺃﺕﺟﻬﻮﺩ ﺍﻟﺘﺼﻤﻴﻢ ﻋﻨﺪﻣﺎ ﺷﻜﻠﺖ IBMﻭ SHAREﻟﺠﻨﺔ ﺗﻄﻮﻳﺮ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺘﻘﺪﻣﺔ ﻟﻤﺸﺮﻭﻉ
SHARE Fortranﻓﻲ ﺃﻛﺘﻮﺑﺮ .1963ﺍﺟﺘﻤﻌﺖ ﻫﺬﻩ ﺍﻟﻠﺠﻨﺔ ﺍﻟﺠﺪﻳﺪﺓ ﺑﺴﺮﻋﺔ ﻭﺷﻜﻠﺖ ﻟﺠﻨﺔ
ﻓﺮﻋﻴﺔﺗﺴﻤﻰ ﻟﺠﻨﺔ ، 3 × 3ﺳﻤﻴﺖ ﺑﻬﺬﺍ ﺍﻻﺳﻢ ﻷﻧﻬﺎ ﺗﻀﻢ ﺛﻼﺛﺔ ﺃﻋﻀﺎء ﻣﻦ IBMﻭﺛﻼﺛﺔ
ﺃﻋﻀﺎءﻣﻦ .SHAREﺍﺟﺘﻤﻌﺖ ﻟﺠﻨﺔ 3 × 3ﻟﻤﺪﺓ ﺛﻼﺛﺔ ﺃﻭ ﺃﺭﺑﻌﺔ ﺃﻳﺎﻡ ﻛﻞ ﺃﺳﺒﻮﻋﻴﻦ ﻟﺘﺼﻤﻴﻢ
ﺍﻟﻠﻐﺔ.
• ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺑﺸﻜﻞ ﻣﺘﻜﺮﺭ ،ﻭﻟﻜﻦ ﻳﻤﻜﻦ ﺗﻌﻄﻴﻞ ﺍﻟﻘﺪﺭﺓ ،ﻣﻤﺎ
ﻳﺴﻤﺢﺑﺮﺑﻂ ﺃﻛﺜﺮ ﻛﻔﺎءﺓ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻏﻴﺮ ﺍﻟﺘﻜﺮﺍﺭﻳﺔ.
• ﺗﻢ ﺗﻀﻤﻴﻦ ﺍﻟﻤﺆﺷﺮﺍﺕ ﻛﻨﻮﻉ ﺑﻴﺎﻧﺎﺕ.
• ﻳﻤﻜﻦ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﻤﻘﺎﻃﻊ ﺍﻟﻌﺮﺿﻴﺔ ﻟﻠﻤﺼﻔﻮﻓﺎﺕ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻳﻤﻜﻦ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻰ
ﺍﻟﺼﻒﺍﻟﺜﺎﻟﺚ ﻣﻦ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻛﻤﺎ ﻟﻮ ﻛﺎﻥ ﻣﺼﻔﻮﻓﺔ ﺫﺍﺕ ﺑﻌُﺪ ﻭﺍﺣﺪ.
2.8.4ﺍﻟﺘﻘﻴﻴﻢ
ﻳﺠﺐﺃﻥ ﻳﺒﺪﺃ ﺃﻱ ﺗﻘﻴﻴﻢ ﻟـ PL / Iﺑﺎﻟﺘﻌﺮﻑ ﻋﻠﻰ ﻃﻤﻮﺡ ﺟﻬﺪ ﺍﻟﺘﺼﻤﻴﻢ .ﺑﺎﻟﻨﻈﺮ ﺇﻟﻰ ﺍﻟﻤﺎﺿﻲ ،
ﻳﺒﺪﻭﻣﻦ ﺍﻟﺴﺬﺍﺟﺔ ﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﺃﻧﻪ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺩﻣﺞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺒﻨﻰ ﺑﻨﺠﺎﺡ .ﻭﻣﻊ ﺫﻟﻚ ،
ﻳﺠﺐﺗﺨﻔﻴﻒ ﻫﺬﺍ ﺍﻟﺤﻜﻢ ﻣﻦ ﺧﻼﻝ ﺍﻻﻋﺘﺮﺍﻑ ﺑﺄﻧﻪ ﻛﺎﻧﺖ ﻫﻨﺎﻙ ﺧﺒﺮﺓ ﻗﻠﻴﻠﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ
ﻓﻲﺫﻟﻚ ﺍﻟﻮﻗﺖ .ﺑﺸﻜﻞ ﻋﺎﻡ ،ﺍﺳﺘﻨﺪ ﺗﺼﻤﻴﻢ PL / Iﺇﻟﻰ ﻓﺮﺿﻴﺔ ﺃﻥ ﺃﻱ ﺑﻨﻴﺔ ﻣﻔﻴﺪﺓ ﻭﻳﻤﻜﻦ
ﺗﻨﻔﻴﺬﻫﺎﻳﺠﺐ ﺗﻀﻤﻴﻨﻬﺎ ،ﻣﻊ ﻋﺪﻡ ﺍﻻﻫﺘﻤﺎﻡ ﺍﻟﻜﺎﻓﻲ ﺑﻜﻴﻔﻴﺔ ﻓﻬﻢ ﺍﻟﻤﺒﺮﻣﺞ ﻟﻬﺬﻩ ﺍﻟﻤﺠﻤﻮﻋﺔ ﻣﻦ
ﺍﻟﺘﺮﻛﻴﺒﺎﺕﻭﺍﻟﻤﻴﺰﺍﺕ ﻭﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﺑﺸﻜﻞ ﻓﻌﺎﻝ .ﻗﺪﻡ ، Edsger Dijkstraﻓﻲ ﻣﺤﺎﺿﺮﺓ ﺟﺎﺉﺰﺓ (
، Turing )Dijkstra، 1972ﺃﺣﺪ ﺃﻗﻮﻯ ﺍﻻﻧﺘﻘﺎﺩﺍﺕ ﻟﺘﻌﻘﻴﺪ :PL / I
ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﻣﺸﻜﻠﺔ ﺍﻟﺘﻌﻘﻴﺪ ﺑﺴﺒﺐ ﺣﺠﻤﻪ ﺍﻟﻜﺒﻴﺮ ،ﻋﺎﻧﻰ PL / Iﻣﻦ ﻋﺪﺩ ﻣﻤﺎ ﻳﻌﺘﺒﺮ
ﺍﻵﻥﻫﻴﺎﻛﻞ ﺳﻴﺉﺔ ﺍﻟﺘﺼﻤﻴﻢ .ﻣﻦ ﺑﻴﻦ ﻫﺬﻩ ﺍﻟﻤﺆﺷﺮﺍﺕ ،ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ،ﻭﺍﻟﺘﺰﺍﻣﻦ ،
ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻨﺎ ﻳﺠﺐ ﺃﻥ ﻧﺸﻴﺮ ﺇﻟﻰ ﺃﻧﻪ ﻓﻲ ﺟﻤﻴﻊ ﺍﻟﺤﺎﻻﺕ ،ﻟﻢ ﺗﻈﻬﺮ ﻫﺬﻩ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻓﻲ ﺃﻱ
ﻟﻐﺔﺳﺎﺑﻘﺔ.
ﻣﻦﺣﻴﺚ ﺍﻻﺳﺘﺨﺪﺍﻡ ،ﻳﺠﺐ ﺍﻋﺘﺒﺎﺭ PL / Iﻧﺠﺎﺣﺎً ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﺍﻷﻗﻞ .ﻓﻲ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ،
ﺗﻤﺘﻌﺖﺑﺎﺳﺘﺨﺪﺍﻣﺎﺕ ﻛﺒﻴﺮﺓ ﻓﻲ ﻛﻞ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﺘﺠﺎﺭﻳﺔ ﻭﺍﻟﻌﻠﻤﻴﺔ .ﻛﻤﺎ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻋﻠﻰ
ﻧﻄﺎﻕﻭﺍﺳﻊ ﺧﻼﻝ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﻛﻮﺳﻴﻠﺔ ﺗﻌﻠﻴﻤﻴﺔ ﻓﻲ ﺍﻟﻜﻠﻴﺎﺕ ،ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﻓﻲ ﻋﺪﺓ ﺃﺷﻜﺎﻝ
ﻓﺮﻋﻴﺔ ،ﻣﺜﻞ ) PL / Cﻛﻮﺭﻧﻴﻞ (1977 ،ﻭ ) PL / CSﻛﻮﻧﻮﺍﻱ ﻭﻛﻮﻧﺴﺘﺎﺑﻞ .(1976 ،
ﺍﻟﻨﺘﻴﺠﺔ= ، 0
ﺍﻟﺤﺼﻮﻝﻋﻠﻰ ﻗﺎﺉﻤﺔ ) (LISTLEN؛
ﺇﺫﺍ) (LISTLEN >100) & (LISTLEN< 0ﺛﻢ
71 2.9ﻟﻐﺘﺎﻥ ﺩﻳﻨﺎﻣﻴﻜﻴﺘﺎﻥ ﻣﺒﻜﺮﺗﺎﻥ APL :ﻭ SNOBOL
ﻳﻔﻌﻞ؛
* /ﻗﺮﺍءﺓ ﺑﻴﺎﻧﺎﺕ ﺍﻹﺩﺧﺎﻝ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺠﻤﻮﻉ * /
ﻫﻞﺍﻟﻌﺪﺍﺩ = 1ﻟﻼﺳﺘﻤﺎﻉ ؛
ﺍﻟﺤﺼﻮﻝﻋﻠﻰ ﻗﺎﺉﻤﺔ )( (INTLIST )COUNTER؛
( SUM = SUM + INTLIST )COUNTER؛ ﻧﻬﺎﻳﺔ؛
ﻧﻬﺎﻳﺔ؛
ﺁﺧﺮ
ﻭﺿﻊﻗﺎﺉﻤﺔ ﺍﻟﺘﺨﻄﻲ )"ﺧﻄﺄ -ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﺍﻟﻄﻮﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ"( ؛ ﻧﻬﺎﻳﺔ PLIEX؛
ﻓﻲﺍﻟﻤﻈﻬﺮ ﻭﺍﻟﻐﺮﺽ ،ﺗﺨﺘﻠﻒ APLﻭ SNOBOLﺗﻤﺎﻣﺎً .ﻭﻣﻊ ﺫﻟﻚ ،ﻓﺈﻧﻬﻢ ﻳﺘﺸﺎﺭﻛﻮﻥ ﻓﻲ
ﺧﺎﺻﻴﺘﻴﻦﺃﺳﺎﺳﻴﺘﻴﻦ :ﺍﻟﻜﺘﺎﺑﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﻭﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ .ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻓﻲ
ﻛﻠﺘﺎﺍﻟﻠﻐﺘﻴﻦ ﻏﻴﺮ ﻣﻄﺒﻌﻴﺔ ﻓﻲ ﺍﻷﺳﺎﺱ .ﻳﻜﺘﺴﺐ ﺍﻟﻤﺘﻐﻴﺮ ﻧﻮﻋﺎً ﻋﻨﺪ ﺗﻌﻴﻴﻦ ﻗﻴﻤﺔ ﻟﻪ ،ﻭﻓﻲ ﺫﻟﻚ
ﺍﻟﻮﻗﺖﻳﻔﺘﺮﺽ ﻧﻮﻉ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻌﻴﻨﺔ .ﻳﺘﻢ ﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ ﻟﻠﻤﺘﻐﻴﺮ ﻓﻘﻂ ﻋﻨﺪﻣﺎ ﻳﺘﻢ ﺗﻌﻴﻴﻦ
ﻗﻴﻤﺔﻟﻪ ،ﻷﻧﻪ ﻗﺒﻞ ﺫﻟﻚ ﻻ ﺗﻮﺟﺪ ﻃﺮﻳﻘﺔ ﻟﻤﻌﺮﻓﺔ ﻣﻘﺪﺍﺭ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﻤﻄﻠﻮﺏ.
.9ﻭﻣﻊ ﺫﻟﻚ ،ﻟﺪﻳﻬﻢ ﺑﻌﺾ ﺍﻟﺘﺄﺛﻴﺮ ﻋﻠﻰ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﻏﻴﺮ ﺍﻟﺮﺉﻴﺴﻴﺔ ) Jﻳﻌﺘﻤﺪ ﻋﻠﻰ APL ، ICONﻳﻌﺘﻤﺪ ﻋﻠﻰ
، SNOBOLﻭ AWKﻳﻌﺘﻤﺪ ﺟﺰﺉﻴﺎً ﻋﻠﻰ .(SNOBOL
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 72
ﺗﻢﻭﺻﻒ APLﻷﻭﻝ ﻣﺮﺓ ﻓﻲ ﺍﻟﻜﺘﺎﺏ ﺍﻟﺬﻱ ﺣﺼﻠﺖ ﻣﻨﻪ ﻋﻠﻰ ﺍﺳﻤﻪ ،ﻟﻐﺔ ﺑﺮﻣﺠﺔ)ﺍﻳﻔﺮﺳﻮﻥ ،
.(1962ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ،ﺗﻢ ﺗﻄﻮﻳﺮ ﺃﻭﻝ ﺗﻄﺒﻴﻖ ﻟـ APLﻓﻲ ﺷﺮﻛﺔ .IBM
ﻳﺤﺘﻮﻱ APLﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ﺍﻷﻗﻮﻳﺎء ﺍﻟﻤﺤﺪﺩﻳﻦ ﺑﻌﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺮﻣﻮﺯ ،ﻣﻤﺎ
ﺧﻠﻖﻣﺸﻜﻠﺔ ﻟﻠﻤﻨﻔﺬﻳﻦ .ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ،ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ APLﻣﻦ ﺧﻼﻝ ﻣﺤﻄﺎﺕ ﻃﺒﺎﻋﺔ .IBM
ﺗﺤﺘﻮﻱﻫﺬﻩ ﺍﻟﻤﺤﻄﺎﺕ ﻋﻠﻰ ﻛﺮﺍﺕ ﻃﺒﺎﻋﺔ ﺧﺎﺻﺔ ﺗﻮﻓﺮ ﻣﺠﻤﻮﻋﺔ ﺍﻷﺣﺮﻑ ﺍﻟﻔﺮﺩﻳﺔ ﺍﻟﺘﻲ ﺗﺘﻄﻠﺒﻬﺎ
ﺍﻟﻠﻐﺔ.ﺃﺣﺪ ﺃﺳﺒﺎﺏ ﺍﺣﺘﻮﺍء APLﻋﻠﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ﻫﻮ ﺃﻧﻪ ﻳﻮﻓﺮ ﻋﺪﺩﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﻋﻤﻠﻴﺎﺕ
ﺍﻟﻮﺣﺪﺓﻋﻠﻰ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻳﺘﻢ ﺗﺒﺪﻳﻞ ﺃﻱ ﻣﺼﻔﻮﻓﺔ ﺑﻌﺎﻣﻞ ﺗﺸﻐﻴﻞ ﻭﺍﺣﺪ.
ﺗﻮﻓﺮﺍﻟﻤﺠﻤﻮﻋﺔ ﺍﻟﻜﺒﻴﺮﺓ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ﺗﻌﺒﻴﺮﺍً ﻋﺎﻟﻴﺎً ﺟﺪﺍً ﻭﻟﻜﻨﻬﺎ ﺗﺠﻌﻞ ﻣﻦ ﺍﻟﺼﻌﺐ ﺃﻳﻀﺎً ﻗﺮﺍءﺓ
ﺑﺮﺍﻣﺞ .APLﻟﺬﻟﻚ ،ﻳﻌﺘﻘﺪ ﺍﻟﻨﺎﺱ ﺃﻥ APLﻛﻠﻐﺔ ﺗﺴﺘﺨﺪﻡ ﺑﺸﻜﻞ ﺃﻓﻀﻞ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ "ﺍﻟﻤﻬﻤﻠﺔ"
.ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺇﻣﻜﺎﻧﻴﺔ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺴﺮﻋﺔ ،ﺇﻻ ﺃﻧﻪ ﻳﺠﺐ ﺍﻟﺘﺨﻠﺺ ﻣﻨﻬﺎ ﺑﻌﺪ ﺍﻻﺳﺘﺨﺪﺍﻡ ﻧﻈﺮﺍً
ﻟﺼﻌﻮﺑﺔﺻﻴﺎﻧﺘﻬﺎ.
ﻛﺎﻥ APLﻣﻮﺟﻮﺩﺍً ﻣﻨﺬ ﻣﺎ ﻳﻘﺮﺏ ﻣﻦ 50ﻋﺎﻣﺎً ﻭﻻ ﻳﺰﺍﻝ ﻳﺴﺘﺨﺪﻡ ﺣﺘﻰ ﺍﻟﻴﻮﻡ ،ﻭﺇﻥ ﻟﻢ ﻳﻜﻦ
ﻋﻠﻰﻧﻄﺎﻕ ﻭﺍﺳﻊ .ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ،ﻟﻢ ﻳﺘﻐﻴﺮ ﻛﺜﻴﺮﺍً ﻋﻠﻰ ﻣﺪﺍﺭ ﺣﻴﺎﺗﻪ.
2.10.1ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ
ﻃﻮﺭﺍﻟﻨﺮﻭﻳﺠﻴﺎﻥ ﻛﺮﻳﺴﺘﻴﻦ ﻧﻴﺠﺎﺭﺩ ﻭﺃﻭﻟﻲ ﻳﻮﻫﺎﻥ ﺩﺍﻝ ﻟﻐﺔ SIMULA Iﺑﻴﻦ ﻋﺎﻣﻲ 1962ﻭ 1964
ﻓﻲﻣﺮﻛﺰ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﻨﺮﻭﻳﺠﻲ ) (NCCﻓﻲ ﺃﻭﺳﻠﻮ .ﻛﺎﻧﻮﺍ ﻣﻬﺘﻤﻴﻦ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ ﺑﺎﺳﺘﺨﺪﺍﻡ
ﺃﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻟﻠﻤﺤﺎﻛﺎﺓ ﻭﻟﻜﻨﻬﻢ ﻋﻤﻠﻮﺍ ﺃﻳﻀﺎً ﻓﻲ ﺃﺑﺤﺎﺙ ﺍﻟﻌﻤﻠﻴﺎﺕ .ﺗﻢ ﺗﺼﻤﻴﻢ SIMULA I
ﺣﺼﺮﻳﺎًﻟﻤﺤﺎﻛﺎﺓ ﺍﻟﻨﻈﺎﻡ ﻭﺗﻢ ﺗﻨﻔﻴﺬﻩ ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ ﺃﻭﺍﺧﺮ ﻋﺎﻡ 1964ﻋﻠﻰ ﻛﻤﺒﻴﻮﺗﺮ 1107
.UNIVAC
73 2.11ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﺘﻌﺎﻣﺪALGOL 68 :
ﻟﺘﻮﻓﻴﺮﺍﻟﺪﻋﻢ ﻟﻠﻜﻮﺭﻭﺗﻴﻦ ﻓﻲ ، SIMULA 67ﺗﻢ ﺗﻄﻮﻳﺮ ﺑﻨﻴﺔ ﺍﻟﻔﺼﻞ .ﻛﺎﻥ ﻫﺬﺍ ﺗﻄﻮﺭﺍً ﻣﻬﻤﺎً
ﻷﻥﻣﻔﻬﻮﻡ ﺗﺠﺮﻳﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺑﺪﺃ ﺑﻪ .ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ،ﻳﻮﻓﺮ ﺗﺠﺮﻳﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻷﺳﺎﺱ ﻟﻠﺒﺮﻣﺠﺔ
ﺍﻟﻤﻮﺟﻬﺔﻟﻠﻜﺎﺉﻨﺎﺕ.
2.11.1ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ
ﻟﻢﻳﻨﺘﻪ ﺗﻄﻮﻳﺮ ﻋﺎﺉﻠﺔ ALGOLﻋﻨﺪﻣﺎ ﻇﻬﺮ ﺍﻟﺘﻘﺮﻳﺮ ﺍﻟﻤﻨﻘﺢ ﻋﻦ ALGOL 60ﻓﻲ ﻋﺎﻡ ، 1962
ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﻣﺮﻭﺭ ﺳﺖ ﺳﻨﻮﺍﺕ ﺣﺘﻰ ﺗﻢ ﻧﺸﺮ ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﺘﺎﻟﻲ ﻟﻠﺘﺼﻤﻴﻢ .ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﺍﻟﻨﺎﺗﺠﺔ ( ،
، ALGOL 68 )van Wijngaarden et al. ، 1969ﻣﺨﺘﻠﻔﺔ ﺗﻤﺎﻣﺎً ﻋﻦ ﺳﺎﺑﻘﺘﻬﺎ.
ﻛﺎﻥﺃﺣﺪ ﺃﻛﺜﺮ ﺍﻻﺑﺘﻜﺎﺭﺍﺕ ﺇﺛﺎﺭﺓ ﻟﻼﻫﺘﻤﺎﻡ ﻓﻲ ALGOL 68ﺃﺣﺪ ﻣﻌﺎﻳﻴﺮ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﺳﺎﺳﻴﺔ:
ﺍﻟﺘﻌﺎﻣﺪ.ﺗﺬﻛﺮ ﻣﻨﺎﻗﺸﺘﻨﺎ ﺣﻮﻝ ﺍﻟﺘﻌﺎﻣﺪ ﻓﻲ ﺍﻟﻔﺼﻞ .1ﺃﺩﻯ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻌﺎﻣﺪ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ
ﺍﻟﻤﻴﺰﺍﺕﺍﻟﻤﺒﺘﻜﺮﺓ ﻟـ ، ALGOL 68ﺃﺣﺪﻫﺎ ﻣﻮﺻﻮﻑ ﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻟﺘﺎﻟﻲ.
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 74
ﻛﺎﻥﻧﻬﺞ ALGOL 68ﻓﻲ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻫﻮ ﺗﻮﻓﻴﺮ ﻋﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﺍﻷﻧﻮﺍﻉ ﻭﺍﻟﻬﻴﺎﻛﻞ
ﺍﻟﺒﺪﺍﺉﻴﺔﻭﺍﻟﺴﻤﺎﺡ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺑﺪﻣﺞ ﺗﻠﻚ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻷﻭﻟﻴﺔ ﻓﻲ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﻬﻴﺎﻛﻞ ﺍﻟﻤﺨﺘﻠﻔﺔ.
ﺗﻢﻧﻘﻞ ﻫﺬﺍ ﺍﻟﺤﻜﻢ ﻷﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﺇﻟﻰ ﺟﻤﻴﻊ ﺍﻟﻠﻐﺎﺕ
ﺍﻟﻀﺮﻭﺭﻳﺔﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﻤﺼﻤﻤﺔ ﻣﻨﺬ ﺫﻟﻚ ﺍﻟﺤﻴﻦ .ﺗﻌﺘﺒﺮ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ
ﺍﻟﻤﺴﺘﺨﺪﻡﺫﺍﺕ ﻗﻴﻤﺔ ﻷﻧﻬﺎ ﺗﺴﻤﺢ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺑﺘﺼﻤﻴﻢ ﺗﺠﺮﻳﺪﺍﺕ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﺗﻨﺎﺳﺐ
ﻣﺸﺎﻛﻞﻣﻌﻴﻨﺔ ﺑﺸﻜﻞ ﻭﺛﻴﻖ ﻟﻠﻐﺎﻳﺔ .ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺟﻤﻴﻊ ﺟﻮﺍﻧﺐ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﺍﻟﻔﺼﻞ .6
2.11.3ﺍﻟﺘﻘﻴﻴﻢ
ﻳﺘﻀﻤﻦ ALGOL 68ﻋﺪﺩﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺘﻲ ﻟﻢ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﺴﺒﻘﺎً .ﻛﺎﻥ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ
ﻟﻠﺘﻌﺎﻣﺪ ،ﺍﻟﺬﻱ ﻗﺪ ﻳﺠﺎﺩﻝ ﺍﻟﺒﻌﺾ ﺃﻧﻪ ﻣﺒﺎﻟﻎ ﻓﻴﻪ ،ﻣﻊ ﺫﻟﻚ ﺛﻮﺭﻳﺎً.
ﻛﺮﺭ ALGOL 68ﺇﺣﺪﻯ ﺧﻄﺎﻳﺎ ، ALGOL 60ﻭﻛﺎﻥ ﻋﺎﻣﻼ ًﻣﻬﻤﺎً ﻓﻲ ﺷﻌﺒﻴﺘﻪ ﺍﻟﻤﺤﺪﻭﺩﺓ .ﺗﻢ
ﻭﺻﻒﺍﻟﻠﻐﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ﻣﻌﺪﻧﻴﺔ ﺃﻧﻴﻘﺔ ﻭﻣﺨﺘﺼﺮﺓ ﻭﻟﻜﻦ ﺃﻳﻀﺎً ﻏﻴﺮ ﻣﻌﺮﻭﻓﺔ .ﻗﺒﻞ ﺃﻥ ﻳﺘﻤﻜﻦ
ﺍﻟﻤﺮءﻣﻦ ﻗﺮﺍءﺓ ﻭﺛﻴﻘﺔ ﻭﺻﻒ ﺍﻟﻠﻐﺔ ) ، (van Wijngaarden et al. ، 1969ﻛﺎﻥ ﻋﻠﻴﻪ ﺃﻥ
ﻳﺘﻌﻠﻢﺍﻟﻠﻐﺔ ﺍﻟﻤﻌﺪﻧﻴﺔ ﺍﻟﺠﺪﻳﺪﺓ ،ﺍﻟﻤﺴﻤﺎﺓ ﻗﻮﺍﻋﺪ ﻗﻮﺍﻋﺪ ﻓﺎﻥ ، Wijngaardenﻭﺍﻟﺘﻲ ﻛﺎﻧﺖ ﺃﻛﺜﺮ
ﺗﻌﻘﻴﺪﺍًﺑﻜﺜﻴﺮ ﻣﻦ .BNFﻟﺠﻌﻞ ﺍﻷﻣﻮﺭ ﺃﺳﻮﺃ ،ﺍﺧﺘﺮﻉ ﺍﻟﻤﺼﻤﻤﻮﻥ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻜﻠﻤﺎﺕ ﻟﺸﺮﺡ
ﺍﻟﻘﻮﺍﻋﺪﻭﺍﻟﻠﻐﺔ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺗﻢ ﺍﺳﺘﺪﻋﺎء ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔﺍﻟﻤﺆﺷﺮﺍﺕﺗﻢ ﺍﺳﺘﺪﻋﺎء
ﺍﺳﺘﺨﺮﺍﺝﺍﻟﺴﻠﺴﻠﺔ ﺍﻟﻔﺮﻋﻴﺔﺯﺭﻛﺸﺔ،ﻭﻛﺎﻧﺖ ﻋﻤﻠﻴﺔ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﺗﺴﻤﻰ ﺃﺍﻹﻛﺮﺍﻩ ﻋﻠﻰ
ﺍﻹﻛﺮﺍﻩ ،ﺍﻟﺬﻱ ﻗﺪ ﻳﻜﻮﻥﻭﺩﻳﻊ ،ﺣﺎﺯﻡ ،ﺃﻭ ﺃﻱ ﺷﻲء ﺁﺧﺮ.
ﺣﻘﻘﺖ PL / Iﻗﺒﻮﻻً ﺃﻛﺒﺮ ﺑﻜﺜﻴﺮ ﻣﻦ ، ALGOL 68ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﺇﻟﻰ ﺟﻬﻮﺩ
IBMﺍﻟﺘﺮﻭﻳﺠﻴﺔ ﻭﻣﺸﺎﻛﻞ ﺍﻟﻔﻬﻢ ﻭﺍﻟﺘﻨﻔﻴﺬ
75 2.12ﺑﻌﺾ ﺍﻟﻤﺘﺤﺪﺭﻳﻦ ﺍﻷﻭﺍﺉﻞ ﻣﻦ ALGOLs
.ﺑﻤﺜﻞﻫﺬﺍ ﺍﻟﻤﺘﺒﺮﻉ ALGOL 68ﻟﺘﻄﺒﻴﻘﻬﺎ ﻋﻠﻰ ﺑﻨﺎء ﻣﺘﺮﺟﻢ .ﻟﻢ ﻳﺘﻤﺘﻊ IBMﻛﺎﻥ ﻟﺪﻳﻪ ﻣﻮﺍﺭﺩ / I
PLﻛﺎﻥ ﺍﻟﺘﻨﻔﻴﺬ ﻣﺸﻜﻠﺔ ﺻﻌﺒﺔ ﻟﻜﻠﻴﻬﻤﺎ ،ﻭﻟﻜﻦ ALGOL 68.
2.12.1.1ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ
ﻛﺎﻥﻧﻴﻜﻼﻭﺱ ﻭﻳﺮﺙ )ﻳﻄُﻠﻖ ﻋﻠﻰ ﻭﻳﺮﺙ "ﻓﻴﺮﺕ"( ﻋﻀﻮﺍً ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻟﻌﻤﻞ 2.1ﺍﻟﺘﺎﺑﻌﺔ
ﻟﻼﺗﺤﺎﺩﺍﻟﺪﻭﻟﻲ ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ) ، (IFIPﻭﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻟﻤﻮﺍﺻﻠﺔ ﺗﻄﻮﻳﺮ ALGOLﻓﻲ
ﻣﻨﺘﺼﻒﺍﻟﺴﺘﻴﻨﻴﺎﺕ .ﻓﻲ ﺃﻏﺴﻄﺲ ، 1965ﺳﺎﻫﻢ ") Wirth and CARﺗﻮﻧﻲ"( Hoareﻓﻲ
ﻫﺬﺍﺍﻟﺠﻬﺪ ﻣﻦ ﺧﻼﻝ ﺗﻘﺪﻳﻢ ﺍﻗﺘﺮﺍﺡ ﻣﺘﻮﺍﺿﻊ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﻟﻠﻤﺠﻤﻮﻋﺔ ﻹﺿﺎﻓﺎﺕ ﻭﺗﻌﺪﻳﻼﺕ ﻋﻠﻰ
) ALGOL60ﻭﻳﺮﺙ ﻭﻫﻮﺭ .(1966 ،ﺭﻓﻀﺖ ﻏﺎﻟﺒﻴﺔ ﺍﻟﻤﺠﻤﻮﻋﺔ ﺍﻻﻗﺘﺮﺍﺡ ﺑﺎﻋﺘﺒﺎﺭﻩ ﺗﺤﺴﻨﺎً ﺿﺉﻴﻼً
ﻟﻠﻐﺎﻳﺔﻣﻘﺎﺭﻧﺔ ﺑـ .ALGOL 60ﻭﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ،ﺗﻢ ﺗﻄﻮﻳﺮ ﻣﺮﺍﺟﻌﺔ ﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ،ﻭﺍﻟﺘﻲ ﺃﺻﺒﺤﺖ
ﻓﻲﺍﻟﻨﻬﺎﻳﺔ .ALGOL 68ﻟﻢ ﻳﻌﺘﻘﺪ ﻭﻳﺮﺙ ،ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﻋﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﺃﻋﻀﺎء ﺍﻟﻤﺠﻤﻮﻋﺔ
ﺍﻵﺧﺮﻳﻦ ،ﺃﻥ ALGOLﻛﺎﻥ ﻳﺠﺐ ﺇﺻﺪﺍﺭ ﺗﻘﺮﻳﺮ ، 68ﺑﻨﺎء ًﻋﻠﻰ ﺗﻌﻘﻴﺪ ﻛﻞ ﻣﻦ ﺍﻟﻠﻐﺔ ﻭﺍﻟﻠﻐﺔ
ﺍﻟﻤﻌﺪﻧﻴﺔﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﻮﺻﻔﻪ.
.10ﺳﻤﻲ ﺑﺎﺳﻜﺎﻝ ﻋﻠﻰ ﺍﺳﻢ ﺑﻠﻴﺰ ﺑﺎﺳﻜﺎﻝ ،ﻓﻴﻠﺴﻮﻑ ﻭﻋﺎﻟﻢ ﺭﻳﺎﺿﻴﺎﺕ ﻓﺮﻧﺴﻲ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﺴﺎﺑﻊ ﻋﺸﺮ ﺍﺧﺘﺮﻉ ﺃﻭﻝ ﺁﻟﺔ
ﺇﺿﺎﻓﺔﻣﻴﻜﺎﻧﻴﻜﻴﺔ ﻋﺎﻡ ) 1642ﻣﻦ ﺑﻴﻦ ﺃﺷﻴﺎء ﺃﺧﺮﻯ(.
ﺗﻄﻮﺭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﻔﺼﻞ2 76
2.12.1.2ﺍﻟﺘﻘﻴﻴﻢ
ﻛﺎﻥﺍﻟﺘﺄﺛﻴﺮ ﺍﻷﻛﺒﺮ ﻟﺒﺎﺳﻜﺎﻝ ﻋﻠﻰ ﺗﺪﺭﻳﺲ ﺍﻟﺒﺮﻣﺠﺔ .ﻓﻲ ﻋﺎﻡ ، 1970ﺗﻢ ﺗﻘﺪﻳﻢ ﻣﻌﻈﻢ ﻃﻼﺏ ﻋﻠﻮﻡ
ﺍﻟﻜﻤﺒﻴﻮﺗﺮﻭﺍﻟﻬﻨﺪﺳﺔ ﻭﺍﻟﻌﻠﻮﻡ ﺇﻟﻰ ﺍﻟﺒﺮﻣﺠﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ، Fortranﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺑﻌﺾ
ﺍﻟﺠﺎﻣﻌﺎﺕﺍﺳﺘﺨﺪﻣﺖ ، PL / Iﻭﺍﻟﻠﻐﺎﺕ ﺍﻟﻘﺎﺉﻤﺔ ﻋﻠﻰ ، PL / Iﻭ .ALGOL-Wﺑﺤﻠﻮﻝ
ﻣﻨﺘﺼﻒﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ،ﺃﺻﺒﺤﺖ ﺑﺎﺳﻜﺎﻝ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ﻟﻬﺬﺍ ﺍﻟﻐﺮﺽ .ﻛﺎﻥ ﻫﺬﺍ ﻃﺒﻴﻌﻴﺎً
ﺗﻤﺎﻣﺎً ،ﻷﻥ Pascalﺻﻤُﻤﺖ ﺧﺼﻴﺼﺎً ﻟﺘﺪﺭﻳﺲ ﺍﻟﺒﺮﻣﺠﺔ .ﺣﺘﻰ ﺃﻭﺍﺧﺮ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ﻟﻢ ﺗﻌﺪ
ﺑﺎﺳﻜﺎﻝﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ﻟﺘﺪﺭﻳﺲ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﺍﻟﻜﻠﻴﺎﺕ ﻭﺍﻟﺠﺎﻣﻌﺎﺕ.
ﻧﻈﺮﺍًﻟﺘﺼﻤﻴﻢ ﺑﺎﺳﻜﺎﻝ ﻛﻠﻐﺔ ﺗﺪﺭﻳﺲ ،ﻓﺈﻧﻬﺎ ﺗﻔﺘﻘﺮ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻀﺮﻭﺭﻳﺔ
ﻟﻠﻌﺪﻳﺪﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ .ﺃﻓﻀﻞ ﻣﺜﺎﻝ ﻋﻠﻰ ﺫﻟﻚ ﻫﻮ ﺍﺳﺘﺤﺎﻟﺔ ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ ﻳﺄﺧﺬ
ﻛﻤﻌﺎﻣﻞﺻﻔﻴﻒ ﻣﺘﻐﻴﺮ ﺍﻟﻄﻮﻝ .ﻣﺜﺎﻝ ﺁﺧﺮ ﻫﻮ ﻋﺪﻡ ﻭﺟﻮﺩ ﺃﻱ ﻗﺪﺭﺓ ﺗﺠﻤﻴﻊ ﻣﻨﻔﺼﻠﺔ .ﺃﺩﺕ ﻫﺬﻩ
ﺍﻟﻌﻴﻮﺏﺑﺸﻜﻞ ﻃﺒﻴﻌﻲ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻬﺠﺎﺕ ﻏﻴﺮ ﺍﻟﻘﻴﺎﺳﻴﺔ ،ﻣﺜﻞ .Turbo Pascal
؛intlisttype: intlisttype
ﺍﻟﻌﺪﺍﺩ ،ﺍﻟﻤﺠﻤﻮﻉ ،ﺍﻟﻤﺘﻮﺳﻂ ،ﺍﻟﻨﺘﻴﺠﺔ :ﻋﺪﺩ ﺻﺤﻴﺢ ؛ listlen ،ﻳﺒﺪﺃ
ﺍﻟﻨﺘﻴﺠﺔ 0 =:؛
ﺍﻟﻤﺠﻤﻮﻉ 0 =:؛
؛ (readln )listlen
ﻟﻮ))(listlen< 0ﻭ)((listlen >100ﺛﻢ
ﻳﺒﺪﺃ
}ﺍﻗﺮﺃ ﺍﻹﺩﺧﺎﻝ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺍﺣﺴﺐ ﺍﻟﻤﺠﻤﻮﻉ{
ﻝﺍﻟﻌﺪﺍﺩ1 = :ﻝlistlenﻳﻔﻌﻞ
ﻳﺒﺪﺃ
[: = sum + intlist ]counter؛ ﺍﻟﻤﺠﻤﻮﻉ ([ﻋﺪﺍﺩ
] readln )intlistﻧﻬﺎﻳﺔ؛
77 2.12ﺑﻌﺾ ﺍﻟﻤﺘﺤﺪﺭﻳﻦ ﺍﻷﻭﺍﺉﻞ ﻣﻦ ALGOLs
}ﺍﺣﺴﺐ ﺍﻟﻤﺘﻮﺳﻂ{
ﺍﻟﻤﺘﻮﺳﻂ sum / listlen =:؛
}ﺣﺴﺎﺏ ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﺗﻜﻮﻥ< ﻣﺘﻮﺳﻂ{
ﻝﺍﻟﻌﺪﺍﺩ1 = :ﻝlistlenﻳﻔﻌﻞ
ﻟﻮ)(ﻣﺘﻮﺳﻂ <[ﻋﺪﺍﺩ] intlistﺛﻢ
ﺍﻟﻨﺘﻴﺠﺔ =:ﻧﺘﻴﺠﺔ 1 +؛ }ﻃﺒﺎﻋﺔ
ﺍﻟﻨﺘﻴﺠﺔ{
:"،ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ") writeln
ﻧﺘﻴﺠﺔ(
ﻧﻬﺎﻳﺔ}ﻣﻦ ﻋﺒﺎﺭﺓ ﺛﻢ ﺇﺫﺍ )) {... listlen< 0ﺁﺧﺮ
2.12.2.1ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ
ﺃﺳﻼﻑ Cﺗﺸﻤﻞ CPLﻭ BCPLﻭ Bﻭ .ALGOL 68ﺗﻢ ﺗﻄﻮﻳﺮ CPLﻓﻲ ﺟﺎﻣﻌﺔ ﻛﺎﻣﺒﺮﻳﺪﺝ ﻓﻲ
ﺃﻭﺍﺉﻞﺍﻟﺴﺘﻴﻨﻴﺎﺕ BCPL .ﻫﻲ ﻟﻐﺔ ﺃﻧﻈﻤﺔ ﺑﺴﻴﻄﺔ ،ﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ ﺃﻳﻀﺎً ﻓﻲ ﻛﺎﻣﺒﺮﻳﺪﺝ ،ﻫﺬﻩ
ﺍﻟﻤﺮﺓﺑﻮﺍﺳﻄﺔ Martin Richardsﻓﻲ ﻋﺎﻡ .(Richards ، 1969) 1967
ﺗﻢﺗﻨﻔﻴﺬ ﺃﻭﻝ ﻋﻤﻞ ﻋﻠﻰ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ UNIXﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ﺑﻮﺍﺳﻄﺔ ﻛﻴﻦ
ﻃﻮﻣﺴﻮﻥﻓﻲ ﻣﺨﺘﺒﺮﺍﺕ ﺑﻴﻞ .ﺗﻤﺖ ﻛﺘﺎﺑﺔ ﺍﻟﻨﺴﺨﺔ ﺍﻷﻭﻟﻰ ﺑﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ .ﺃﻭﻝ ﻟﻐﺔ ﻋﺎﻟﻴﺔ
ﺍﻟﻤﺴﺘﻮﻯﺗﻢ ﺗﻨﻔﻴﺬﻫﺎ ﺗﺤﺖ UNIXﻛﺎﻧﺖ ، Bﻭﺍﻟﺘﻲ ﻛﺎﻧﺖ ﻣﺒﻨﻴﺔ ﻋﻠﻰ .BCPLﺗﻢ ﺗﺼﻤﻴﻢ
ﻭﺗﻨﻔﻴﺬ Bﺑﻮﺍﺳﻄﺔ Thompsonﻓﻲ ﻋﺎﻡ .1970
ﻻﺗﻌُﺪ BCPLﻭﻻ Bﻟﻐﺔ ﻣﻜﺘﻮﺑﺔ ،ﻭﻫﻮ ﺃﻣﺮ ﻏﺮﻳﺐ ﺑﻴﻦ ﺍﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ،ﻋﻠﻰ
ﺍﻟﺮﻏﻢﻣﻦ ﺃﻥ ﻛﻼﻫﻤﺎ ﺃﻗﻞ ﻣﺴﺘﻮﻯ ﺑﻜﺜﻴﺮ ﻣﻦ ﻟﻐﺔ ﻣﺜﻞ .Javaﻋﺪﻡ ﺍﻟﻜﺘﺎﺑﺔ ﻳﻌﻨﻲ ﺃﻥ ﺟﻤﻴﻊ
ﺍﻟﺒﻴﺎﻧﺎﺕﺗﻌﺘﺒﺮ ﻛﻠﻤﺎﺕ ﺁﻟﻴﺔ ،ﻭﺍﻟﺘﻲ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺑﺴﺎﻃﺘﻬﺎ ،ﺗﺆﺩﻱ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ
ﺍﻟﺘﻌﻘﻴﺪﺍﺕﻭﻋﺪﻡ ﺍﻷﻣﺎﻥ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻫﻨﺎﻙ ﻣﺸﻜﻠﺔ ﺗﺤﺪﻳﺪ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﺑﺪﻻ ًﻣﻦ
ﺍﻟﺤﺴﺎﺏﺍﻟﺼﺤﻴﺢ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮ .ﻓﻲ ﺃﺣﺪ ﺗﻄﺒﻴﻘﺎﺕ ، BCPLﻛﺎﻧﺖ ﺍﻟﻤﻌﺎﻣﻼﺕ ﺍﻟﻤﺘﻐﻴﺮﺓ ﻟﻌﻤﻠﻴﺔ
ﺍﻟﻔﺎﺻﻠﺔﺍﻟﻌﺎﺉﻤﺔ ﻣﺴﺒﻮﻗﺔ ﺑﻔﺘﺮﺍﺕ .ﺗﻢ ﺍﻋﺘﺒﺎﺭ ﺍﻟﻤﻌﺎﻣﻼﺕ ﺍﻟﻤﺘﻐﻴﺮﺓ ﺍﻟﺘﻲ ﻻ ﺗﺴﺒﻘﻬﺎ ﻓﺘﺮﺍﺕ
ﺃﻋﺪﺍﺩﺍًﺻﺤﻴﺤﺔ .ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﺍﻟﺒﺪﻳﻞ ﻋﻦ ﺫﻟﻚ ﻫﻮ ﺍﺳﺘﺨﺪﺍﻡ ﺭﻣﻮﺯ ﻣﺨﺘﻠﻔﺔ
ﻟﻤﺸﻐﻠﻲﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ.
ﺃﺩﺕﻫﺬﻩ ﺍﻟﻤﺸﻜﻠﺔ ،ﺇﻟﻰ ﺟﺎﻧﺐ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺸﻜﻼﺕ ﺍﻷﺧﺮﻯ ،ﺇﻟﻰ ﺗﻄﻮﻳﺮ ﻟﻐﺔ ﻣﻜﺘﻮﺑﺔ
ﺟﺪﻳﺪﺓﺑﻨﺎء ًﻋﻠﻰ .Bﻛﺎﻧﺖ ﺗﺴﻤﻰ ﻓﻲ ﺍﻷﺻﻞ NBﻭﻟﻜﻦ ﺳﻤﻴﺖ ﻻﺣﻘﺎً ، Cﻭﻗﺪ ﺻﻤﻤﻬﺎ ﻭﻧﻔﺬﻫﺎ
Dennis Ritchieﻓﻲ ﻣﺨﺘﺒﺮﺍﺕ Bellﻓﻲ ﻋﺎﻡ .(Kernighan and Ritchie ، 1978) 1972
ﻓﻲﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ﻣﻦ ﺧﻼﻝ ، BCPLﻭﻓﻲ ﺣﺎﻻﺕ ﺃﺧﺮﻯ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ ،ﺗﺄﺛﺮ Cﺑـ ALGOL 68
.ﻳﻈﻬﺮ ﻫﺬﺍ ﻓﻲﻝ
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 78
ﻛﺎﻥ"ﺍﻟﻤﻌﻴﺎﺭ" ﺍﻟﻮﺣﻴﺪ ﻟﻠﻐﺔ Cﻓﻲ ﺃﻭﻝ ﻋﻘﺪ ﻭﻧﺼﻒ ﻫﻮ ﻛﺘﺎﺏ (and Ritchie )1978
11.Kernighanﺧﻼﻝ ﺗﻠﻚ ﺍﻟﻔﺘﺮﺓ ﺍﻟﺰﻣﻨﻴﺔ ،ﺗﻄﻮﺭﺕ ﺍﻟﻠﻐﺔ ﺑﺒﻂء ،ﺣﻴﺚ ﺃﺿﺎﻑ ﺍﻟﻤﻨﻔﺬﻭﻥ
ﺍﻟﻤﺨﺘﻠﻔﻮﻥﻣﻴﺰﺍﺕ ﻣﺨﺘﻠﻔﺔ .ﻓﻲ ﻋﺎﻡ ، 1989ﺃﻧﺘﺠﺖ ANSIﻭﺻﻔﺎً ﺭﺳﻤﻴﺎً ﻟـ (C )ANSI ، 1989
،ﻭﺍﻟﺬﻱ ﺗﻀﻤﻦ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺘﻲ ﺃﺩﺭﺟﻬﺎ ﺍﻟﻤﻨﻔﺬﻭﻥ ﺑﺎﻟﻔﻌﻞ ﻓﻲ ﺍﻟﻠﻐﺔ .ﺗﻢ ﺗﺤﺪﻳﺚ ﻫﺬﺍ
ﺍﻟﻤﻌﻴﺎﺭﻓﻲ ﻋﺎﻡ .(ISO ، 1999) 1999ﻳﺘﻀﻤﻦ ﻫﺬﺍ ﺍﻹﺻﺪﺍﺭ ﺍﻷﺣﺪﺙ ﺑﻌﺾ ﺍﻟﺘﻐﻴﻴﺮﺍﺕ ﺍﻟﻤﻬﻤﺔ
ﻓﻲﺍﻟﻠﻐﺔ .ﻣﻦ ﺑﻴﻨﻬﺎ ﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﻣﻌﻘﺪ ﻭﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﻣﻨﻄﻘﻴﺔ ﻭﺗﻌﻠﻴﻘﺎﺕ ﻧﻤﻂ .(//) ++ Cﺳﻮﻑ
ﻧﺸﻴﺮﺇﻟﻰ ﺇﺻﺪﺍﺭ ، 1989ﻭﺍﻟﺬﻱ ﻛﺎﻥ ﻳﻄُﻠﻖ ﻋﻠﻴﻪ ﻣﻨﺬ ﻓﺘﺮﺓ ﻃﻮﻳﻠﺔ ، ANSI Cﺑﺎﺳﻢ C89؛
ﺳﻮﻑﻧﺸﻴﺮ ﺇﻟﻰ ﺇﺻﺪﺍﺭ 1999ﺑﺎﺳﻢ .C99
2.12.2.2ﺍﻟﺘﻘﻴﻴﻢ
ﻳﺤﺘﻮﻱ Cﻋﻠﻰ ﺑﻴﺎﻧﺎﺕ ﺗﺤﻜﻢ ﻛﺎﻓﻴﺔ ﻭﻣﺮﺍﻓﻖ ﻫﻴﻜﻠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻟﻠﺴﻤﺎﺡ ﺑﺎﺳﺘﺨﺪﺍﻣﻬﺎ ﻓﻲ ﺍﻟﻌﺪﻳﺪ
ﻣﻦﻣﺠﺎﻻﺕ ﺍﻟﺘﻄﺒﻴﻖ .ﻛﻤﺎ ﺃﻥ ﻟﺪﻳﻬﺎ ﻣﺠﻤﻮﻋﺔ ﻏﻨﻴﺔ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ﺍﻟﺬﻳﻦ ﻳﻮﻓﺮﻭﻥ ﺩﺭﺟﺔ ﻋﺎﻟﻴﺔ
ﻣﻦﺍﻟﺘﻌﺒﻴﺮﻳﺔ.
ﺃﺣﺪﺃﻫﻢ ﺍﻷﺳﺒﺎﺏ ﺍﻟﺘﻲ ﺗﺠﻌﻞ Cﻣﺤﺒﻮﺑﺎً ﻭﻏﻴﺮ ﻣﺮﻏﻮﺏ ﻓﻴﻪ ﻫﻮ ﺍﻓﺘﻘﺎﺭﻩ ﺇﻟﻰ ﺍﻟﺘﺤﻘﻖ ﺍﻟﻜﺎﻣﻞ
ﻣﻦﺍﻟﻨﻮﻉ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻓﻲ ﺍﻹﺻﺪﺍﺭﺍﺕ ﻗﺒﻞ ، C99ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﺘﻲ ﻟﻢ ﻳﺘﻢ
ﺍﻟﺘﺤﻘﻖﻣﻦ ﻧﻮﻉ ﺍﻟﻤﻌﻠﻤﺎﺕ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ .ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻳﺤﺒﻮﻥ Cﻳﻘﺪﺭﻭﻥ ﺍﻟﻤﺮﻭﻧﺔ ؛ ﺃﻭﻟﺉﻚ
ﺍﻟﺬﻳﻦﻻ ﻳﺤﺒﻮﻧﻪ ﻳﺠﺪﻭﻧﻬﺎ ﻏﻴﺮ ﺁﻣﻨﺔ ﻟﻠﻐﺎﻳﺔ .ﻛﺎﻥ ﺃﺣﺪ ﺍﻷﺳﺒﺎﺏ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻟﻠﺰﻳﺎﺩﺓ ﺍﻟﻜﺒﻴﺮﺓ ﻓﻲ
ﺷﻌﺒﻴﺘﻬﺎﻓﻲ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ﻫﻮ ﺃﻥ ﻣﺘﺮﺟﻤﻬﺎ ﻛﺎﻥ ﺟﺰءﺍً ﻣﻦ ﻧﻈﺎﻡ ﺗﺸﻐﻴﻞ UNIXﺍﻟﻤﺴﺘﺨﺪﻡ ﻋﻠﻰ
ﻧﻄﺎﻕﻭﺍﺳﻊ .ﻗﺪﻡ ﻫﺬﺍ ﺍﻟﺘﻀﻤﻴﻦ ﻓﻲ UNIXﻣﺘﺮﺟﻤﺎً ﻣﺠﺎﻧﻴﺎً ﻭﺟﻴﺪﺍً ﺟﺪﺍً ﻛﺎﻥ ﻣﺘﺎﺣﺎً ﻟﻠﻤﺒﺮﻣﺠﻴﻦ
ﻋﻠﻰﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺃﻧﻮﺍﻉ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﺨﺘﻠﻔﺔ.
intﻋﺪﺍﺩ ،ﻣﺠﻤﻮﻉ ،ﻣﺘﻮﺳﻂ ،ﻧﺘﻴﺠﺔ ؛ ﺍﻟﻤﺠﻤﻮﻉ = 0؛ intlist ]99[ ، listlen ،
ﺍﻟﻨﺘﻴﺠﺔ= 0؛
؛ (scanf )"٪ d" ، & listlen
ﻟﻮ))} ((listlen< 0( && )listlen >100
* /ﻗﺮﺍءﺓ ﺍﻟﻤﺪﺧﻼﺕ ﻓﻲ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺠﻤﻮﻉ * /
ﻝ)ﻋﺪﺍﺩ = 0؛ ﻋﺪﺍﺩ > listlen؛ ﻋﺪﺍﺩ } (++
؛ [ﻋﺪﺍﺩ] + = intlist؛ ﻣﺠﻤﻮﻉ ([ﻋﺪﺍﺩ] d" ، & intlist
scanf )"٪
{
2.13.1ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ
ﺧﻼﻝﺃﻭﺍﺉﻞ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ،ﻃﻮﺭ ﺁﻻﻥ ﻛﻮﻟﻤﺮﻭﺭ ﻭﻓﻴﻠﻴﺐ ﺭﻭﺳﻴﻞ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻟﺬﻛﺎء
ﺍﻻﺻﻄﻨﺎﻋﻲﺑﺠﺎﻣﻌﺔ ﺇﻳﻜﺲ ﻣﺮﺳﻴﻠﻴﺎ ،ﻣﻊ ﺭﻭﺑﺮﺕ ﻛﻮﺍﻟﺴﻜﻲ ﻣﻦ ﻗﺴﻢ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ
ﺑﺠﺎﻣﻌﺔﺇﺩﻧﺒﺮﺓ ،ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﺳﺎﺳﻲ ﻟـ .Prologﺍﻟﻤﻜﻮﻧﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻟﺒﺮﻧﺎﻣﺞ Prologﻫﻲ
ﻃﺮﻳﻘﺔﻟﺘﺤﺪﻳﺪ ﻣﻘﺘﺮﺣﺎﺕ ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ ﺍﻷﺻﻠﻴﺔ ﻭﺗﻨﻔﻴﺬ ﺷﻜﻞ ﻣﻘﻴﺪ ﻣﻦ ﺍﻟﺪﻗﺔ.
ﺗﻢﻭﺻﻒ ﻛﻞ ﻣﻦ ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ ﺍﻷﺻﻠﻲ ﻭﺍﻟﻘﺮﺍﺭ ﻓﻲ ﺍﻟﻔﺼﻞ .16ﺗﻢ ﺗﻄﻮﻳﺮ ﺃﻭﻝ
ﻣﺘﺮﺟﻢ Prologﻓﻲ ﻣﺮﺳﻴﻠﻴﺎ ﻓﻲ ﻋﺎﻡ .1972ﻧﺴﺨﺔ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﻢ ﺗﻄﺒﻴﻘﻬﺎ ﻣﻮﺻﻮﻓﺔ ﻓﻲ
ﺭﻭﺳﻴﻞ) .(1975ﺍﺳﻢ Prologﻣﻦﻃﻠﻴﻌﺔﻗﻮﺍﻋﺪ ﺍﻟﻠﻐﺔﺳﺠﻞﺟﻴﻢ.
ﺍﻷﻡ)ﺟﻮﺍﻥ ،ﺟﻴﻚ(.
ﺍﻷﺏ)ﻓﻴﺮﻥ ،ﺟﻮﺍﻥ(.
ﺍﻷﺏ)ﺑﻮﺏ ،ﺩﺍﺭﺳﻲ(.
ﻫﺬﺍﻳﺴﺄﻝ ﺇﺫﺍﺑﻮﺏﻫﻞﺃﺏﻝﺩﺍﺭﺳﻲ.ﻋﻨﺪﻣﺎ ﻳﺘﻢ ﺗﻘﺪﻳﻢ ﻣﺜﻞ ﻫﺬﺍ ﺍﻻﺳﺘﻌﻼﻡ ﺃﻭ ﺍﻟﻬﺪﻑ ﺇﻟﻰ ﻧﻈﺎﻡ
، Prologﻓﺈﻧﻪ ﻳﺴﺘﺨﺪﻡ ﻋﻤﻠﻴﺔ ﺣﻠﻪ ﻟﻤﺤﺎﻭﻟﺔ ﺗﺤﺪﻳﺪ ﺣﻘﻴﻘﺔ ﺍﻟﺒﻴﺎﻥ .ﺇﺫﺍ ﺍﺳﺘﻨﺘﺞ ﺃﻥ ﺍﻟﻬﺪﻑ
ﺻﺤﻴﺢ ،ﻓﺈﻧﻪ ﻳﻌﺮﺽ "ﺻﺤﻴﺢ" .ﺇﺫﺍ ﻟﻢ ﻳﺘﻤﻜﻦ ﻣﻦ ﺇﺛﺒﺎﺕ ﺫﻟﻚ ،ﻓﺈﻧﻪ ﻳﻌﺮﺽ "ﺧﻄﺄ".
2.13.3ﺍﻟﺘﻘﻴﻴﻢ
ﻓﻲﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ،ﻛﺎﻧﺖ ﻫﻨﺎﻙ ﻣﺠﻤﻮﻋﺔ ﺻﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً ﻣﻦ ﻋﻠﻤﺎء ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺬﻳﻦ ﺍﻋﺘﻘﺪﻭﺍ ﺃﻥ
ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻤﻨﻄﻘﻴﺔ ﺗﻮﻓﺮ ﺃﻓﻀﻞ ﺃﻣﻞ ﻟﻠﻬﺮﻭﺏ ﻣﻦ ﺗﻌﻘﻴﺪ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ،ﻭﻛﺬﻟﻚ ﻣﻦ ﺍﻟﻤﺸﻜﻠﺔ
ﺍﻟﻬﺎﺉﻠﺔﺍﻟﻤﺘﻤﺜﻠﺔ ﻓﻲ ﺇﻧﺘﺎﺝ ﻛﻤﻴﺔ ﻛﺒﻴﺮﺓ ﻣﻦ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻮﺛﻮﻗﺔ ﺍﻟﻤﻄﻠﻮﺑﺔ .ﻭﻣﻊ ﺫﻟﻚ ،ﺣﺘﻰ ﺍﻵﻥ ،
ﻫﻨﺎﻙﺳﺒﺒﺎﻥ ﺭﺉﻴﺴﻴﺎﻥ ﻟﻌﺪﻡ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ .ﺃﻭﻻ ً ،ﻛﻤﺎ ﻫﻮ
ﺍﻟﺤﺎﻝﻣﻊ ﺑﻌﺾ ﺍﻟﻤﻨﺎﻫﺞ ﻏﻴﺮ ﺍﻹﺟﺮﺍﺉﻴﺔ ﺍﻷﺧﺮﻯ ،ﺃﺛﺒﺘﺖ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﻠﻐﺎﺕ ﺍﻟﻤﻨﻄﻖ ﺣﺘﻰ
ﺍﻵﻥﺃﻧﻬﺎ ﻏﻴﺮ ﻓﻌﺎﻟﺔ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﺑﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺤﺘﻤﻴﺔ ﺍﻟﻤﻜﺎﻓﺉﺔ .ﺛﺎﻧﻴﺎً ،ﺗﻢ ﺗﺤﺪﻳﺪ ﺃﻧﻪ
ﻧﻬﺞﻓﻌﺎﻝ ﻟﻌﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﻣﺠﺎﻻﺕ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﺼﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً :ﺃﻧﻮﺍﻉ ﻣﻌﻴﻨﺔ ﻣﻦ ﺃﻧﻈﻤﺔ ﺇﺩﺍﺭﺓ
ﻗﻮﺍﻋﺪﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺑﻌﺾ ﻣﺠﺎﻻﺕ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ.
2.14.1ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ
ﺗﻢﺗﻄﻮﻳﺮ ﻟﻐﺔ Adaﻟﻮﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ) ، (DoDﻟﺬﻟﻚ ﻛﺎﻧﺖ ﺣﺎﻟﺔ ﺑﻴﺉﺔ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻬﻢ ﻣﻔﻴﺪﺓ
ﻓﻲﺗﺤﺪﻳﺪ ﺷﻜﻠﻬﺎ .ﺑﺤﻠﻮﻝ ﻋﺎﻡ ، 1974ﻛﺎﻥ ﺃﻛﺜﺮ ﻣﻦ ﻧﺼﻒ ﺗﻄﺒﻴﻘﺎﺕ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ
ﻭﺯﺍﺭﺓﺍﻟﺪﻓﺎﻉ ﺃﻧﻈﻤﺔ ﻣﺪﻣﺠﺔ .ﺍﻟﻨﻈﺎﻡ ﺍﻟﻤﻀﻤﻦ ﻫﻮ ﺍﻟﻨﻈﺎﻡ ﺍﻟﺬﻱ ﻳﺘﻢ ﻓﻴﻪ ﺗﻀﻤﻴﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ
ﻓﻲﺍﻟﺠﻬﺎﺯ ﺍﻟﺬﻱ ﻳﺘﺤﻜﻢ ﻓﻴﻪ ﺃﻭ ﺍﻟﺬﻱ ﻳﻘﺪﻡ ﺧﺪﻣﺎﺕ ﻟﻪ .ﻛﺎﻧﺖ ﺗﻜﺎﻟﻴﻒ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺗﺮﺗﻔﻊ
ﺑﺴﺮﻋﺔ ،ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ ﺇﻟﻰ ﺍﻟﺘﻌﻘﻴﺪ ﺍﻟﻤﺘﺰﺍﻳﺪ ﻟﻸﻧﻈﻤﺔ .ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺃﻛﺜﺮ ﻣﻦ
450ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﺨﺘﻠﻔﺔ ﻟﻤﺸﺎﺭﻳﻊ ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ،ﻭﻟﻢ ﻳﺘﻢ ﺗﻮﺣﻴﺪ ﺃﻱ ﻣﻨﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ.
ﻳﻤﻜﻦﻟﻜﻞ ﻣﻘﺎﻭﻝ ﺩﻓﺎﻉ ﺗﺤﺪﻳﺪ ﻟﻐﺔ ﺟﺪﻳﺪﺓ ﻭﻣﺨﺘﻠﻔﺔ ﻟﻜﻞ ﻋﻘﺪ12.ﺑﺴﺒﺐ ﺍﻧﺘﺸﺎﺭ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ،
ﻧﺎﺩﺭﺍًﻣﺎ ﻳﺘﻢ ﺇﻋﺎﺩﺓ ﺍﺳﺘﺨﺪﺍﻡ ﺑﺮﺍﻣﺞ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ .ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ،ﻟﻢ ﻳﺘﻢ ﺇﻧﺸﺎء ﺃﺩﻭﺍﺕ ﺗﻄﻮﻳﺮ
ﺑﺮﻣﺠﻴﺎﺕ)ﻷﻧﻬﺎ ﻋﺎﺩﺓ ﻣﺎ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻟﻠﻐﺔ( .ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ،ﻭﻟﻜﻦ ﻟﻢ ﻳﻜﻦ ﺃﻱ
ﻣﻨﻬﺎﻣﻨﺎﺳﺒﺎً ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻧﻈﻤﺔ ﺍﻟﻤﻀﻤﻨﺔ .ﻟﻬﺬﻩ ﺍﻷﺳﺒﺎﺏ ،ﻓﻲ ﻋﺎﻡ ، 1974ﺍﻗﺘﺮﺡ ﻛﻞ ﻣﻦ
ﺍﻟﺠﻴﺶﻭﺍﻟﺒﺤﺮﻳﺔ ﻭﺍﻟﻘﻮﺍﺕ ﺍﻟﺠﻮﻳﺔ ﺑﺸﻜﻞ ﻣﺴﺘﻘﻞ ﺗﻄﻮﻳﺮ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻟﻸﻧﻈﻤﺔ
ﺍﻟﻤﺪﻣﺠﺔ.
2.14.2ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ
ﻣﻊﻣﻼﺣﻈﺔ ﻫﺬﺍ ﺍﻻﻫﺘﻤﺎﻡ ﺍﻟﻮﺍﺳﻊ ،ﻓﻲ ﻳﻨﺎﻳﺮ ، 1975ﺷﻜﻞ ﻣﺎﻟﻜﻮﻟﻢ ﻛﻮﺭﻱ ،ﻣﺪﻳﺮ ﺃﺑﺤﺎﺙ ﺍﻟﺪﻓﺎﻉ
ﻭﺍﻟﻬﻨﺪﺳﺔ ،ﻣﺠﻤﻮﻋﺔ ﺍﻟﻌﻤﻞ ﺍﻟﻠﻐﻮﻳﺔ ﺭﻓﻴﻌﺔ ﺍﻟﻤﺴﺘﻮﻯ ) ، (HOLWGﺑﺮﺉﺎﺳﺔ ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ
ﺍﻟﻠﻔﺘﻨﺎﻧﺖﻛﻮﻟﻮﻧﻴﻞ ﻭﻳﻠﻴﺎﻡ ﻭﻳﺘﺎﻛﺮ ﻣﻦ ﺳﻼﺡ ﺍﻟﺠﻮ .ﻛﺎﻥ ﻟﺪﻯ HOLWGﻣﻤﺜﻠﻴﻦ ﻣﻦ ﺟﻤﻴﻊ
ﺍﻟﺨﺪﻣﺎﺕﺍﻟﻌﺴﻜﺮﻳﺔ ﻭﺍﻟﻌﻼﻗﺎﺕ ﻣﻊ ﺑﺮﻳﻄﺎﻧﻴﺎ ﺍﻟﻌﻈﻤﻰ ﻭﻓﺮﻧﺴﺎ ﻭﻣﺎ ﻛﺎﻥ ﻳﻌﺮﻑ ﺁﻧﺬﺍﻙ ﺑﺄﻟﻤﺎﻧﻴﺎ
ﺍﻟﻐﺮﺑﻴﺔ.ﻛﺎﻥ ﻣﻴﺜﺎﻗﻬﺎ ﺍﻷﻭﻟﻲ ﻫﻮ ﺍﻟﻘﻴﺎﻡ ﺑﻤﺎ ﻳﻠﻲ:
.12ﺗﻌﺰﻯ ﻫﺬﻩ ﺍﻟﻨﺘﻴﺠﺔ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﺇﻟﻰ ﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻮﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻟﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻟﻸﻧﻈﻤﺔ ﺍﻟﻤﺪﻣﺠﺔ ،ﺇﻟﻰ ﺟﺎﻧﺐ
ﺣﻘﻴﻘﺔﺃﻥ ﻣﻌﻈﻢ ﺍﻷﻧﻈﻤﺔ ﺍﻟﻤﺪﻣﺠﺔ ﺗﺴﺘﺨﺪﻡ ﻣﻌﺎﻟﺠﺎﺕ ﻣﺘﺨﺼﺼﺔ.
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 82
ﺑﻌﺪﻋﻤﻠﻴﺔ ﺷﺎﻗﺔ ،ﺗﻢ ﺗﻘﻠﻴﺺ ﺍﻟﻤﻘﺘﺮﺣﺎﺕ ﺍﻟﻌﺪﻳﺪﺓ ﺍﻟﻤﻘﺪﻣﺔ ﻟﻠﻐﺔ ﺇﻟﻰ ﺃﺭﺑﻌﺔ ﻣﺘﺴﺎﺑﻘﻴﻦ
ﻧﻬﺎﺉﻴﻴﻦ ،ﻭﻛﻠﻬﺎ ﺗﺴﺘﻨﺪ ﺇﻟﻰ ﺑﺎﺳﻜﺎﻝ .ﻓﻲ ﻣﺎﻳﻮ ، 1979ﺗﻢ ﺍﺧﺘﻴﺎﺭ ﺍﻗﺘﺮﺍﺡ ﺗﺼﻤﻴﻢ ﻟﻐﺔ / Bull
Cii Honeywellﻣﻦ ﺍﻟﻤﺘﺴﺎﺑﻘﻴﻦ ﺍﻟﻨﻬﺎﺉﻴﻴﻦ ﺍﻷﺭﺑﻌﺔ ﻛﺘﺼﻤﻴﻢ ﺳﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ .ﻛﺎﻥ ﻓﺮﻳﻖ
ﺗﺼﻤﻴﻢ Cii Honeywell / Bullﻓﻲ ﻓﺮﻧﺴﺎ ،ﺍﻟﻤﻨﺎﻓﺲ ﺍﻷﺟﻨﺒﻲ ﺍﻟﻮﺣﻴﺪ ﻣﻦ ﺑﻴﻦ ﺍﻷﺭﺑﻌﺔ
ﺍﻟﻨﻬﺎﺉﻴﻴﻦ ،ﺑﻘﻴﺎﺩﺓ ﺟﺎﻥ ﺇﺷﺒﻴﺎﻩ.
ﻓﻲﺭﺑﻴﻊ ﻋﺎﻡ ، 1979ﺃﻭﺻﻰ ﺟﺎﻙ ﻛﻮﺑﺮ ﻣﻦ ﻗﻴﺎﺩﺓ ﺍﻟﻌﺘﺎﺩ ﺍﻟﺒﺤﺮﻳﺔ ﺑﺎﺳﻢ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ،
، Adaﻭﺍﻟﺘﻲ ﺗﻢ ﺗﺒﻨﻴﻬﺎ ﺑﻌﺪ ﺫﻟﻚ .ﻳﺤﺘﻔﻞ ﺍﻻﺳﻢ ﺑﺬﻛﺮﻯ ﺃﻭﻏﺴﺘﺎ ﺁﺩﺍ ﺑﺎﻳﺮﻭﻥ )، (1851-1815
ﻛﻮﻧﺘﻴﺴﺔﻟﻮﻓﻠﻴﺲ ،ﻋﺎﻟﻢ ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ،ﻭﺍﺑﻨﺔ ﺍﻟﺸﺎﻋﺮ ﺍﻟﻠﻮﺭﺩ ﺑﺎﻳﺮﻭﻥ .ﻳﺘﻢ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻴﻬﺎ ﻋﻤﻮﻣﺎً
ﻋﻠﻰﺃﻧﻬﺎ ﺃﻭﻝ ﻣﺒﺮﻣﺠﺔ ﻓﻲ ﺍﻟﻌﺎﻟﻢ .ﻋﻤﻠﺖ ﻣﻊ ﺗﺸﺎﺭﻟﺰ ﺑﺎﺑﺎﺝ ﻋﻠﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻴﻜﺎﻧﻴﻜﻴﺔ
ﺍﻟﺨﺎﺻﺔﺑﻪ ،ﻣﺤﺮﻛﺎﺕ ﺍﻻﺧﺘﻼﻑ ﻭﺍﻟﺘﺤﻠﻴﻞ ،ﻭﻛﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻌﺪﺩﻳﺔ.
ﺗﻢﺍﻻﻧﺘﻬﺎء ﻣﻦ ﻧﺴﺨﺔ ﻣﻨﻘﺤﺔ ﻣﻦ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻓﻲ ﻳﻮﻟﻴﻮ 1980ﻭﺗﻢ ﻗﺒﻮﻟﻬﺎ ﻛﻤﻌﻴﺎﺭ 1815
MIL-STDﺍﻟﺪﻟﻴﻞ ﺍﻟﻤﺮﺟﻌﻲ ﻟﻠﻐﺔ .Adaﺗﻢ ﺍﺧﺘﻴﺎﺭ ﺍﻟﺮﻗﻢ 1815ﻷﻧﻪ ﻛﺎﻥ ﻋﺎﻡ ﻣﻴﻼﺩ ﺃﻭﻏﺴﺘﺎ ﺁﺩﺍ
ﺑﺎﻳﺮﻭﻥ.ﻧﺴﺨﺔ ﻣﻨﻘﺤﺔ ﺃﺧﺮﻯ ﻣﻦﺍﻟﺪﻟﻴﻞ ﺍﻟﻤﺮﺟﻌﻲ ﻟﻠﻐﺔ Adaﺗﻢ ﺇﺻﺪﺍﺭﻩ ﻓﻲ ﻳﻮﻟﻴﻮ .1982ﻓﻲ
ﻋﺎﻡ ، 1983ﻗﺎﻡ ﺍﻟﻤﻌﻬﺪ ﺍﻟﻘﻮﻣﻲ ﺍﻷﻣﺮﻳﻜﻲ ﻟﻠﻤﻌﺎﻳﻴﺮ ﺑﺘﻮﺣﻴﺪ ﻣﻌﺎﻳﻴﺮ .Adaﺗﻢ ﻭﺻﻒ ﻫﺬﻩ
ﺍﻟﻨﺴﺨﺔﺍﻟﺮﺳﻤﻴﺔ "ﺍﻟﻨﻬﺎﺉﻴﺔ" ﻓﻲ ( .Goos and Hartmanis )1983ﺛﻢ ﺗﻢ ﺗﺠﻤﻴﺪ ﺗﺼﻤﻴﻢ
ﻟﻐﺔ Adaﻟﻤﺪﺓ ﺧﻤﺲ ﺳﻨﻮﺍﺕ ﻋﻠﻰ ﺍﻷﻗﻞ.
ﺗﻮﻓﺮﻟﻐﺔ Adaﺃﻳﻀﺎً ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﻤﺘﺰﺍﻣﻦ ﻟﻮﺣﺪﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﺨﺎﺻﺔ ،ﻭﺍﻟﻤﻬﺎﻡ ﺍﻟﻤﺴﻤﺎﺓ ،
ﺑﺎﺳﺘﺨﺪﺍﻡﺁﻟﻴﺔ ﺍﻻﻟﺘﻘﺎء Rendezvous .ﻫﻮ ﺍﺳﻢ ﻃﺮﻳﻘﺔ ﺍﻻﺗﺼﺎﻝ ﻭﺍﻟﺘﺰﺍﻣﻦ ﺑﻴﻦ ﺍﻟﻤﻬﺎﻡ .ﺗﻤﺖ
ﻣﻨﺎﻗﺸﺔﺍﻟﺘﺰﺍﻣﻦ ﻓﻲ ﺍﻟﻔﺼﻞ .13
2.14.4ﺍﻟﺘﻘﻴﻴﻢ
ﻟﻌﻞﺃﻫﻢ ﺟﻮﺍﻧﺐ ﺗﺼﻤﻴﻢ ﻟﻐﺔ Adaﺍﻟﺘﻲ ﻳﺠﺐ ﻣﺮﺍﻋﺎﺗﻬﺎ ﻫﻲ ﻣﺎ ﻳﻠﻲ:
• ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻣﻌﻈﻢ ﺍﻟﻨﺎﺱ ﻟﻢ ﻳﺘﻮﻗﻌﻮﺍ ﺫﻟﻚ ،ﺇﻻ ﺃﻥ ﺗﻄﻮﻳﺮ ﻣﺘﺮﺟﻢ ﻟﻠﻐﺔ Adaﻛﺎﻥ
ﻣﻬﻤﺔﺻﻌﺒﺔ .ﻓﻘﻂ ﻓﻲ ﻋﺎﻡ ، 1985ﺑﻌﺪ ﻣﺎ ﻳﻘﺮﺏ ﻣﻦ ﺃﺭﺑﻊ ﺳﻨﻮﺍﺕ ﻣﻦ ﺍﻛﺘﻤﺎﻝ ﺗﺼﻤﻴﻢ
ﺍﻟﻠﻐﺔ ،ﺑﺪﺃﺕ ﺑﺮﺍﻣﺞ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ Adaﺍﻟﺼﺎﻟﺤﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﺣﻘﺎً ﻓﻲ ﺍﻟﻈﻬﻮﺭ.
ﻛﺎﻥﺃﺧﻄﺮ ﺍﻧﺘﻘﺎﺩ ﻟـ Adaﻓﻲ ﺳﻨﻮﺍﺗﻬﺎ ﺍﻟﻘﻠﻴﻠﺔ ﺍﻷﻭﻟﻰ ﻫﻮ ﺃﻧﻬﺎ ﻛﺎﻧﺖ ﻛﺒﻴﺮﺓ ﺟﺪﺍً ﻭﻣﻌﻘﺪﺓ
ﻟﻠﻐﺎﻳﺔ.ﻋﻠﻰ ﻭﺟﻪ ﺍﻟﺨﺼﻮﺹ ،ﺫﻛﺮ ( Hoare )1981ﺃﻧﻪ ﻻ ﻳﻨﺒﻐﻲ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻷﻱ ﺗﻄﺒﻴﻖ ﺣﻴﺚ
ﺗﻜﻮﻥﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﺃﻣﺮﺍً ﺑﺎﻟﻎ ﺍﻷﻫﻤﻴﺔ ،ﻭﻫﻮ ﺑﺎﻟﻀﺒﻂ ﻧﻮﻉ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﺬﻱ ﺗﻢ ﺗﺼﻤﻴﻤﻪ ﻣﻦ ﺃﺟﻠﻪ .ﻣﻦ
ﻧﺎﺣﻴﺔﺃﺧﺮﻯ ،ﺃﺷﺎﺩ ﺁﺧﺮﻭﻥ ﺑﻬﺎ ﺑﺎﻋﺘﺒﺎﺭﻫﺎ ﻣﺜﺎﻻً ﻟﺘﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻓﻲ ﻭﻗﺘﻬﺎ .ﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﺣﺘﻰ ﻫﻮﺭ
ﺧﻔﻒﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ﻧﻈﺮﺗﻪ ﻟﻠﻐﺔ.
ﺇﺟﺮﺍءAda_Exﻳﻜﻮﻥ
ﻳﻜﺘﺐInt_List_Typeﻫﻲ ﻣﺠﻤﻮﻋﺔ)(99..1ﻝﻋﺪﺩ ﺻﺤﻴﺢ؛
Int_List: Int_List_Type؛
ﺍﻟﻤﺠﻤﻮﻉ ،ﺍﻟﻤﺘﻮﺳﻂ ،ﺍﻟﻨﺘﻴﺠﺔ :ﻋﺪﺩ ﺻﺤﻴﺢ ؛ List_Len ،ﻳﺒﺪﺃ
ﺍﻟﻨﺘﻴﺠﺔ 0 =:؛
ﺍﻟﻤﺠﻤﻮﻉ 0 =:؛
ﺍﻟﺤﺼﻮﻝﻋﻠﻰ )، (List_Len
ﻟﻮ)(List_Len< 0ﻭ)(List_Len >100ﺛﻢ
--ﻗﺮﺍءﺓ ﺑﻴﺎﻧﺎﺕ ﺍﻹﺩﺧﺎﻝ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺠﻤﻮﻉ ﻝﺍﻟﻌﺪﺍﺩList_Len .. 1 = :ﺣﻠﻘﺔ
ﺧﻂﺟﺪﻳﺪ؛
ﺁﺧﺮ
؛ ("ﺧﻄﺄ -ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ") Put_Lineﺇﻧﻬﺎء ﺇﺫﺍ؛
ﻧﻬﺎﻳﺔ؛ Ada_Ex
ﺗﻢﺗﻤﺪﻳﺪ ﺁﻟﻴﺔ ﺍﺷﺘﻘﺎﻕ ﺍﻟﻨﻮﻉ ﻟـ Ada 83ﻓﻲ Ada 95ﻟﻠﺴﻤﺎﺡ ﺑﺈﺿﺎﻓﺔ ﻣﻜﻮﻧﺎﺕ ﺟﺪﻳﺪﺓ
ﻟﺘﻠﻚﺍﻟﻤﻮﺭﻭﺛﺔ ﻣﻦ ﻓﺉﺔ ﺃﺳﺎﺳﻴﺔ .ﻳﻮﻓﺮ ﻫﺬﺍ ﺍﻟﻤﻴﺮﺍﺙ ،ﻭﻫﻮ ﻣﻜﻮﻥ ﺭﺉﻴﺴﻲ ﻓﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ
ﺍﻟﺸﻴﺉﻴﺔ.ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺍﻟﺮﺑﻂ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﻻﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻟﺘﻌﺮﻳﻔﺎﺕ ﺍﻟﺒﺮﺍﻣﺞ
ﺍﻟﻔﺮﻋﻴﺔﻣﻦ ﺧﻼﻝ ﺇﺭﺳﺎﻝ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ،ﻭﺍﻟﺬﻱ ﻳﻌﺘﻤﺪ ﻋﻠﻰ ﻗﻴﻤﺔ ﻋﻼﻣﺔ ﺍﻷﻧﻮﺍﻉ ﺍﻟﻤﺸﺘﻘﺔ
ﻣﻦﺧﻼﻝ ﺍﻷﻧﻮﺍﻉ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺍﻟﻔﺉﺔ .ﺗﻮﻓﺮ ﻫﺬﻩ ﺍﻟﻤﻴﺰﺓ ﺗﻌﺪﺩ ﺍﻷﺷﻜﺎﻝ ،
85 2.15ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔSmalltalk :
ﻣﻴﺰﺓﺭﺉﻴﺴﻴﺔ ﺃﺧﺮﻯ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ .ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻣﻴﺰﺍﺕ Ada 95ﻫﺬﻩ ﻓﻲ ﺍﻟﻔﺼﻞ .12
ﻟﻢﺗﻮﻓﺮ ﺁﻟﻴﺔ ﺍﻻﻟﺘﻘﺎء ﺍﻟﺨﺎﺻﺔ ﺑـ Ada 83ﺳﻮﻯ ﻭﺳﻴﻠﺔ ﻣﺮﻫﻘﺔ ﻭﻏﻴﺮ ﻓﻌﺎﻟﺔ ﻟﻤﺸﺎﺭﻛﺔ
ﺍﻟﺒﻴﺎﻧﺎﺕﺑﻴﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﺘﺰﺍﻣﻨﺔ .ﻛﺎﻥ ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺇﺩﺧﺎﻝ ﻣﻬﻤﺔ ﺟﺪﻳﺪﺓ ﻟﻠﺘﺤﻜﻢ ﻓﻲ ﺍﻟﻮﺻﻮﻝ
ﺇﻟﻰﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺸﺘﺮﻛﺔ .ﺗﻮﻓﺮ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﻤﺤﻤﻴﺔ ﻓﻲ Ada 95ﺑﺪﻳﻼ ًﺟﺬﺍﺑﺎً ﻟﺬﻟﻚ .ﻳﺘﻢ ﺗﻐﻠﻴﻒ
ﺍﻟﺒﻴﺎﻧﺎﺕﺍﻟﻤﺸﺘﺮﻛﺔ ﻓﻲ ﺑﻨﻴﺔ ﻧﺤﻮﻳﺔ ﺗﺘﺤﻜﻢ ﻓﻲ ﻛﻞ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﺇﻣﺎ ﻋﻦ ﻃﺮﻳﻖ ﻣﻮﻋﺪ
ﺃﻭﻋﻦ ﻃﺮﻳﻖ ﺍﺳﺘﺪﻋﺎء ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ .ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺠﺪﻳﺪﺓ ﻟـ Ada 95ﻟﻠﺘﺰﺍﻣﻦ
ﻭﺍﻟﺒﻴﺎﻧﺎﺕﺍﻟﻤﺸﺘﺮﻛﺔ ﻓﻲ ﺍﻟﻔﺼﻞ .13
ﻳﻌُﺘﻘﺪﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺃﻥ ﺷﻌﺒﻴﺔ Ada 95ﻋﺎﻧﺖ ﻷﻥ ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ﺗﻮﻗﻔﺖ ﻋﻦ ﻃﻠﺐ
ﺍﺳﺘﺨﺪﺍﻣﻬﺎﻓﻲ ﺃﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻌﺴﻜﺮﻳﺔ .ﻛﺎﻧﺖ ﻫﻨﺎﻙ ،ﺑﺎﻟﻄﺒﻊ ،ﻋﻮﺍﻣﻞ ﺃﺧﺮﻯ ﺃﻋﺎﻗﺖ ﻧﻤﻮ
ﺷﻌﺒﻴﺘﻬﺎ.ﻛﺎﻥ ﺍﻷﻫﻢ ﻣﻦ ﺑﻴﻨﻬﺎ ﻫﻮ ﺍﻟﻘﺒﻮﻝ ﺍﻟﻮﺍﺳﻊ ﻟـ ++ Cﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ،ﻭﺍﻟﺬﻱ
ﺣﺪﺙﻗﺒﻞ ﺇﺻﺪﺍﺭ .Ada 95
ﻛﺎﻥﻫﻨﺎﻙ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻹﺿﺎﻓﺎﺕ ﺇﻟﻰ Ada 95ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ .Ada 2005ﻣﻦ ﺑﻴﻨﻬﺎ
ﻭﺍﺟﻬﺎﺕ ،ﻣﺸﺎﺑﻬﺔ ﻟﺘﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ، Javaﻭﺍﻟﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺧﻮﺍﺭﺯﻣﻴﺎﺕ ﺍﻟﺠﺪﻭﻟﺔ ،
ﻭﺍﻟﻮﺍﺟﻬﺎﺕﺍﻟﻤﺘﺰﺍﻣﻨﺔ.
ﺗﺴﺘﺨﺪﻡ Adaﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ ﻛﻞ ﻣﻦ ﺇﻟﻜﺘﺮﻭﻧﻴﺎﺕ ﺍﻟﻄﻴﺮﺍﻥ ﺍﻟﺘﺠﺎﺭﻳﺔ ﻭﺍﻟﺪﻓﺎﻋﻴﺔ ،ﻭﻣﺮﺍﻗﺒﺔ
ﺍﻟﺤﺮﻛﺔﺍﻟﺠﻮﻳﺔ ،ﻭﺍﻟﻨﻘﻞ ﺑﺎﻟﺴﻜﻚ ﺍﻟﺤﺪﻳﺪﻳﺔ ،ﻭﻛﺬﻟﻚ ﻓﻲ ﻣﺠﺎﻻﺕ ﺃﺧﺮﻯ.
2.15.1ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ
ﻧﺸﺄﺕﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻟﺘﻲ ﺃﺩﺕ ﺇﻟﻰ ﺗﻄﻮﻳﺮ Smalltalkﻓﻲ ﺭﺳﺎﻟﺔ ﺍﻟﺪﻛﺘﻮﺭﺍﻩ .ﺃﻃﺮﻭﺣﺔ ﺃﻻﻥ ﻛﺎﻱ ﻓﻲ
ﺃﻭﺍﺧﺮﺍﻟﺴﺘﻴﻨﻴﺎﺕ ﻓﻲ ﺟﺎﻣﻌﺔ ﻳﻮﺗﺎ )ﻛﺎﻱ .(1969 ،ﻛﺎﻥ ﻟﺪﻯ ﻛﺎﻱ ﺍﻟﺒﺼﻴﺮﺓ ﺍﻟﺮﺍﺉﻌﺔ ﻟﻠﺘﻨﺒﺆ ﺑﺎﻟﺘﻮﺍﻓﺮ
ﺍﻟﻤﺴﺘﻘﺒﻠﻲﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻜﺘﺒﻴﺔ ﺍﻟﻘﻮﻳﺔ .ﺗﺬﻛﺮ ﺃﻥ ﺃﻧﻈﻤﺔ ﺍﻟﺤﻮﺍﺳﻴﺐ ﺍﻟﺼﻐﻴﺮﺓ ﺍﻷﻭﻟﻰ ﻟﻢ
ﻳﺘﻢﺗﺴﻮﻳﻘﻬﺎ ﺣﺘﻰ ﻣﻨﺘﺼﻒ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ،ﻭﺃﻧﻬﺎ ﻛﺎﻧﺖ ﻣﺮﺗﺒﻄﺔ ﻓﻘﻂ ﻋﻦ ﺑﻌﺪ ﺑﺎﻷﺟﻬﺰﺓ ﺍﻟﺘﻲ
ﺗﺼﻮﺭﻫﺎﻛﺎﻱ ،ﻭﺍﻟﺘﻲ ﺷﻮﻫﺪﺕ ﺗﻨﻔﺬ ﻣﻠﻴﻮﻥ ﺗﻌﻠﻴﻤﺎﺕ ﺃﻭ ﺃﻛﺜﺮ ﻓﻲ ﺍﻟﺜﺎﻧﻴﺔ ﻭﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻋﺪﺓ ﻣﻴﻐﺎ
ﺑﺎﻳﺖﻣﻦ ﺍﻟﺬﺍﻛﺮﺓ .ﺃﺻﺒﺤﺖ ﻫﺬﻩ ﺍﻵﻻﺕ ،ﻓﻲ ﺷﻜﻞ ﻣﺤﻄﺎﺕ ﻋﻤﻞ ،ﻣﺘﺎﺣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ
ﻓﻘﻂﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ.
ﻭﺟﺪﻛﺎﻱ ﻃﺮﻳﻘﻪ ﺇﻟﻰ ﻣﺮﻛﺰ ﺃﺑﺤﺎﺙ ( Xerox Palo Alto )Xerox PARCﻭﻋﺮﺽ ﺃﻓﻜﺎﺭﻩ
ﻋﻠﻰ .Dynabookﺃﺩﻯ ﺫﻟﻚ ﺇﻟﻰ ﺗﻌﻴﻴﻨﻪ ﻫﻨﺎﻙ ﻭﺍﻟﻮﻻﺩﺓ ﺍﻟﻼﺣﻘﺔ ﻟﻤﺠﻤﻮﻋﺔ ﺃﺑﺤﺎﺙ ﺍﻟﺘﻌﻠﻢ ﻓﻲ
.Xeroxﻛﺎﻧﺖ ﺍﻟﺸﺤﻨﺔ ﺍﻷﻭﻟﻰ ﻟﻠﻤﺠﻤﻮﻋﺔ ﻫﻲ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﻟﺪﻋﻢ ﻧﻤﻮﺫﺝ ﺑﺮﻣﺠﺔ Kayﻭﺗﻨﻔﻴﺬﻩ
ﻋﻠﻰﺃﻓﻀﻞ ﺟﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ ﺷﺨﺼﻲ ﻣﺘﺎﺡ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ .ﻧﺘﺞ ﻋﻦ ﻫﺬﻩ ﺍﻟﺠﻬﻮﺩ ﻧﻈﺎﻡ
" Dynabookﻣﺆﻗﺖ" ﻳﺘﻜﻮﻥ ﻣﻦ ﻣﺤﻄﺔ ﻋﻤﻞ Xerox Altoﻭﺑﺮﻧﺎﻣﺞ .Smalltalk-72ﻣﻌﺎً ،
ﺷﻜﻠﻮﺍﺃﺩﺍﺓ ﺑﺤﺚ ﻟﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻄﻮﻳﺮ .ﻭﻗﺪ ﺗﻢ ﺗﻨﻔﻴﺬ ﻋﺪﺩ ﻣﻦ ﺍﻟﻤﺸﺎﺭﻳﻊ ﺍﻟﺒﺤﺜﻴﺔ ﺑﻬﺬﺍ ﺍﻟﻨﻈﺎﻡ ﻣﻨﻬﺎ
ﻋﺪﺓﺗﺠﺎﺭﺏ ﻟﺘﻌﻠﻴﻢ ﺍﻟﺒﺮﻣﺠﺔ ﻟﻸﻃﻔﺎﻝ .ﺇﻟﻰ ﺟﺎﻧﺐ ﺍﻟﺘﺠﺎﺭﺏ ،ﻇﻬﺮﺕ ﺗﻄﻮﺭﺍﺕ ﺃﺧﺮﻯ ﺃﺩﺕ ﺇﻟﻰ
ﺳﻠﺴﻠﺔﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻧﺘﻬﺖ ﺑـ .Smalltalk-80ﻣﻊ ﻧﻤﻮ ﺍﻟﻠﻐﺔ ﻭﻛﺬﻟﻚ ﻗﻮﺓ ﺍﻷﺟﻬﺰﺓ ﺍﻟﺘﻲ ﺗﻮﺟﺪ
ﻋﻠﻴﻬﺎ.ﺑﺤﻠﻮﻝ ﻋﺎﻡ ، 1980ﻛﺎﻧﺖ ﻛﻞ ﻣﻦ ﺍﻟﻠﻐﺔ ﻭﺃﺟﻬﺰﺓ Xeroxﺗﺘﻄﺎﺑﻖ ﺗﻘﺮﻳﺒﺎً ﻣﻊ ﺍﻟﺮﺅﻳﺔ
ﺍﻟﻤﺒﻜﺮﺓﻟـ .Alan Kay
ﻳﺨﺘﻠﻒﺑﻨﺎء ﺟﻤﻠﺔ Smalltalkﻋﻦ ﻣﻌﻈﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻷﺧﺮﻯ ،ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﻓﻲ ﺟﺰء
ﻛﺒﻴﺮﻣﻨﻪ ﺇﻟﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺮﺳﺎﺉﻞ ،ﺑﺪﻻ ًﻣﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﻭ
.13ﺑﺎﻟﻄﺒﻊ ،ﻳﻤﻜﻦ ﻻﺳﺘﺪﻋﺎء ﺍﻟﻄﺮﻳﻘﺔ ﺃﻳﻀﺎً ﺗﻤﺮﻳﺮ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻟﺘﺘﻢ ﻣﻌﺎﻟﺠﺘﻬﺎ ﺑﺎﻟﻄﺮﻳﻘﺔ ﺍﻟﺘﻲ ﺗﻢ ﺍﺳﺘﺪﻋﺎﺅﻫﺎ.
87 2.15ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔSmalltalk :
ﺍﻟﺘﻌﺒﻴﺮﺍﺕﺍﻟﻤﻨﻄﻘﻴﺔ ﻭﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ .ﺗﻢ ﺗﻮﺿﻴﺢ ﺃﺣﺪ ﺑﻨﻴﺎﺕ ﺍﻟﺘﺤﻜﻢ Smalltalkﻓﻲ
ﺍﻟﻤﺜﺎﻝﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻟﻔﺮﻋﻲ ﺍﻟﺘﺎﻟﻲ.
2.15.3ﺍﻟﺘﻘﻴﻴﻢ
ﻟﻘﺪﻗﺎﻡ Smalltalkﺑﻌﻤﻞ ﻛﺒﻴﺮ ﻟﺘﻌﺰﻳﺰ ﺟﺎﻧﺒﻴﻦ ﻣﻨﻔﺼﻠﻴﻦ ﻣﻦ ﺍﻟﺤﻮﺳﺒﺔ :ﻭﺍﺟﻬﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ
ﺍﻟﺮﺳﻮﻣﻴﺔﻭﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ .ﻧﺸﺄﺕ ﺃﻧﻈﻤﺔ ﺍﻟﻨﻮﺍﻓﺬ ﺍﻟﺘﻲ ﺃﺻﺒﺤﺖ ﺍﻵﻥ ﺍﻟﻄﺮﻳﻘﺔ
ﺍﻟﺴﺎﺉﺪﺓﻟﻮﺍﺟﻬﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻷﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﻣﻦ .Smalltalkﺍﻟﻴﻮﻡ ،ﺃﻫﻢ ﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ
ﺍﻟﺒﺮﻣﺠﻴﺎﺕﻭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻣﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ .ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺃﺻﻞ ﺑﻌﺾ ﺃﻓﻜﺎﺭ ﺍﻟﻠﻐﺎﺕ
ﺍﻟﺸﻴﺉﻴﺔﺟﺎء ﻣﻦ ، SIMULA 67ﺇﻻ ﺃﻧﻬﺎ ﻭﺻﻠﺖ ﺇﻟﻰ ﻣﺮﺣﻠﺔ ﺍﻟﻨﻀﺞ ﻓﻲ .Smalltalkﻣﻦ
ﺍﻟﻮﺍﺿﺢﺃﻥ ﺗﺄﺛﻴﺮ Smalltalkﻋﻠﻰ ﻋﺎﻟﻢ ﺍﻟﺤﻮﺳﺒﺔ ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻭﺳﻴﺴﺘﻤﺮ ﻃﻮﻳﻼً.
ﻣﻀﻠﻊ ﺍﺳﻢﺍﻟﻔﺼﻞ
ﻫﺪﻑ ﺍﻟﻄﺒﻘﺔﺍﻟﻌﻠﻴﺎ
ﻗﻠﻤﻨﺎ ﺃﺳﻤﺎءﻣﺘﻐﻴﺮﺍﺕ ﺍﻟﻤﺜﻴﻞ ﻧﻮﻣﺴﻴﺪﻳﺲ
ﻃﻮﻝﺍﻟﺠﺎﻧﺐ
"ﻃﺮﻕ ﺍﻟﻔﺼﻞ"
"ﺇﻧﺸﺎء ﻣﺜﻴﻞ"
ﺟﺪﻳﺪ
^ﺳﻮﺑﺮ ﺟﺪﻳﺪgetPen
"ﻃﺮﻕ ﺍﻟﻤﺜﻴﻞ"
"ﺍﺭﺳﻢ ﻣﻀﻠﻌﺎً"
ﻳﺮﺳﻢ
ﻋﺪﺩﻣﺮﺍﺕ ﺗﻜﺮﺍﺭourPen go: sideLength] :؛
ﺑﺪﻭﺭﻩ[numSides // 360:
ﻟﻴﻦsideLength >-
2.16.1ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ
ﺗﻢﺍﺗﺨﺎﺫ ﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻣﻦ Cﻧﺤﻮ ++ Cﺑﻮﺍﺳﻄﺔ Bjarne Stroustrupﻓﻲ Laboratories
Bellﻓﻲ ﻋﺎﻡ .1980ﺗﻀﻤﻨﺖ ﺍﻟﺘﻌﺪﻳﻼﺕ ﺍﻷﻭﻟﻴﺔ ﻋﻠﻰ Cﺇﺿﺎﻓﺔ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﻧﻮﻉ ﻣﻌﻠﻤﺔ
ﺍﻟﻮﻇﻴﻔﺔﻭﺍﻟﺘﺤﻮﻳﻞ ،ﻭﺍﻷﻫﻢ ﻣﻦ ﺫﻟﻚ ،ﺍﻟﻔﺉﺎﺕ ،ﺍﻟﺘﻲ ﺗﺮﺗﺒﻂ ﺑﺘﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑـ SIMULA 67ﻭ
. Smalltalkﺗﻢ ﺃﻳﻀﺎً ﺗﻀﻤﻴﻦ ﺍﻟﻔﺉﺎﺕ ﺍﻟﻤﺸﺘﻘﺔ ،ﻭﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﻮﺻﻮﻝ ﺍﻟﻌﺎﻡ /ﺍﻟﺨﺎﺹ
ﻟﻠﻤﻜﻮﻧﺎﺕﺍﻟﻤﻮﺭﻭﺛﺔ ،ﻭﻃﺮﻕ ﺍﻟﻤﻨُﺸﺊ ﻭﺍﻟﺘﺪﻣﻴﺮ ،ﻭﻓﺉﺎﺕ ﺍﻷﺻﺪﻗﺎء .ﺧﻼﻝ ﻋﺎﻡ ، 1981ﺗﻤﺖ
ﺇﺿﺎﻓﺔﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﻤﻀﻤﻨﺔ ﻭﺍﻟﻤﻌﻠﻤﺎﺕ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ ﻭﺍﻟﺤﻤﻞ ﺍﻟﺰﺍﺉﺪ ﻟﻤﺸﻐﻞ ﺍﻟﺘﺨﺼﻴﺺ.
ﻛﺎﻧﺖﺍﻟﻠﻐﺔ ﺍﻟﻨﺎﺗﺠﺔ ﺗﺴﻤﻰ Cﻣﻊ Classesﻭﺗﻢ ﻭﺻﻔﻬﺎ ﻓﻲ (.Stroustrup )1983
ﻣﻦﺍﻟﻤﻔﻴﺪ ﺍﻟﻨﻈﺮ ﻓﻲ ﺑﻌﺾ ﺃﻫﺪﺍﻑ Cﻣﻊ ﺍﻟﻔﺉﺎﺕ .ﻛﺎﻥ ﺍﻟﻬﺪﻑ ﺍﻷﺳﺎﺳﻲ ﻫﻮ ﺗﻮﻓﻴﺮ ﻟﻐﺔ
ﻳﻤﻜﻦﺗﻨﻈﻴﻢ ﺍﻟﺒﺮﺍﻣﺞ ﺑﻬﺎ ﻛﻤﺎ ﻳﻤﻜﻦ ﺗﻨﻈﻴﻤﻬﺎ ﻓﻲ - SIMULA 67ﺃﻱ ﻣﻊ ﺍﻟﻔﺼﻮﻝ ﻭﺍﻟﻤﻴﺮﺍﺙ.
ﺍﻟﻬﺪﻑﺍﻟﺜﺎﻧﻲ ﺍﻟﻤﻬﻢ ﻫﻮ ﺃﻧﻪ ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻫﻨﺎﻙ ﺍﻟﻘﻠﻴﻞ ﻣﻦ ﻋﻘﻮﺑﺔ ﺍﻷﺩﺍء ﺑﺎﻟﻨﺴﺒﺔ ﻟـ .Cﻋﻠﻰ
ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ،ﻟﻢ ﻳﺘﻢ ﺍﻋﺘﺒﺎﺭ ﻓﺤﺺ ﻧﻄﺎﻕ ﻓﻬﺮﺱ ﺍﻟﺼﻔﻴﻒ ﺣﺘﻰ ﺑﺴﺒﺐ ﻭﺟﻮﺩ ﻋﻴﺐ ﻛﺒﻴﺮ ﻓﻲ
ﺍﻷﺩﺍء ،ﺑﺎﻟﻨﺴﺒﺔ ﻟـ ، Cﻗﺪ ﻳﻨﺘﺞ ﻋﻨﻪ .ﻛﺎﻥ ﺍﻟﻬﺪﻑ ﺍﻟﺜﺎﻟﺚ ﻟـ C with Classesﻫﻮ ﺃﻧﻪ ﻳﻤﻜﻦ
ﺍﺳﺘﺨﺪﺍﻣﻪﻟﻜﻞ ﺗﻄﺒﻴﻖ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ Cﻓﻴﻪ ،ﻟﺬﻟﻚ ﻟﻦ ﺗﺘﻢ ﺇﺯﺍﻟﺔ ﺃﻱ ﻣﻦ ﻣﻴﺰﺍﺕ Cﺗﻘﺮﻳﺒﺎً ،
ﻭﻻﺣﺘﻰ ﺗﻠﻚ ﺍﻟﺘﻲ ﺗﻌﺘﺒﺮ ﻏﻴﺮ ﺁﻣﻨﺔ.
ﺑﺤﻠﻮﻝﻋﺎﻡ ، 1984ﺗﻢ ﺗﻮﺳﻴﻊ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﻣﻦ ﺧﻼﻝ ﺗﻀﻤﻴﻦ ﺍﻷﺳﺎﻟﻴﺐ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ ،ﻭﺍﻟﺘﻲ
ﺗﻮﻓﺮﺭﺑﻄﺎً ﺩﻳﻨﺎﻣﻴﻜﻴﺎً ﻻﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﻄﺮﻳﻘﺔ ﻟﺘﻌﺮﻳﻔﺎﺕ ﻃﺮﻳﻘﺔ ﻣﺤﺪﺩﺓ ،ﻭﺍﺳﻢ ﺍﻟﻄﺮﻳﻘﺔ ﻭﺍﻟﺤﻤﻞ
ﺍﻟﺰﺍﺉﺪﻟﻠﻤﺸﻐﻞ ،ﻭﺃﻧﻮﺍﻉ ﺍﻟﻤﺮﺍﺟﻊ .ﻫﺬﺍ ﺍﻹﺻﺪﺍﺭ ﻣﻦ ﺍﻟﻠﻐﺔ ﻛﺎﻥ ﻳﺴﻤﻰ .++ Cﺗﻢ ﻭﺻﻔﻪ ﻓﻲ
(.Stroustrup )1984
ﻓﻲﻋﺎﻡ ، 1985ﻇﻬﺮ ﺃﻭﻝ ﺗﻄﺒﻴﻖ ﻣﺘﺎﺡ :ﻧﻈﺎﻡ ﻳﺴﻤﻰ ، Cfrontﻭﺍﻟﺬﻱ ﺗﺮﺟﻢ ﺑﺮﺍﻣﺞ ++ C
ﺇﻟﻰﺑﺮﺍﻣﺞ .Cﺗﻢ ﺗﺴﻤﻴﺔ ﻫﺬﺍ ﺍﻹﺻﺪﺍﺭ ﻣﻦ Cfrontﻭﺇﺻﺪﺍﺭ ++ Cﺍﻟﺬﻱ ﺗﻢ ﺗﻨﻔﻴﺬﻩ ﺑﺎﻹﺻﺪﺍﺭ
.1.0ﺗﻢ ﻭﺻﻔﻪ ﻓﻲ (.Stroustrup )1986
ﺑﻴﻦﻋﺎﻣﻲ 1985ﻭ ، 1989ﺍﺳﺘﻤﺮ ﺗﻄﻮﺭ ، ++ Cﺍﺳﺘﻨﺎﺩﺍً ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻋﻠﻰ ﺭﺩﻭﺩ ﻓﻌﻞ
ﺍﻟﻤﺴﺘﺨﺪﻡﻋﻠﻰ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﻤﻮﺯﻉ ﺍﻷﻭﻝ .ﺗﻢ ﺗﺴﻤﻴﺔ ﻫﺬﺍ ﺍﻹﺻﺪﺍﺭ ﺍﻟﺘﺎﻟﻲ ﺍﻹﺻﺪﺍﺭ .2.0ﺗﻢ ﺇﺻﺪﺍﺭ
ﺗﻄﺒﻴﻖ Cfrontﺍﻟﺨﺎﺹ ﺑﻪ ﻓﻲ ﻳﻮﻧﻴﻮ .1989ﻛﺎﻧﺖ ﺃﻫﻢ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﻀﺎﻓﺔ ﺇﻟﻰ + Release 2.0
C +ﻫﻲ ﺩﻋﻢ ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ )ﺍﻟﻔﺉﺎﺕ ﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺃﻛﺜﺮ ﻣﻦ ﻓﺉﺔ ﺭﺉﻴﺴﻴﺔ ﻭﺍﺣﺪﺓ(
ﻭﺍﻟﻔﺉﺎﺕﺍﻟﻤﺠﺮﺩﺓ ،ﺇﻟﻰ ﺟﺎﻧﺐ ﺑﻌﺾ ﺍﻟﺘﺤﺴﻴﻨﺎﺕ ﺍﻷﺧﺮﻯ .ﺗﻢ ﻭﺻﻒ ﻓﺉﺎﺕ ﺍﻟﻤﻠﺨﺼﺎﺕ ﻓﻲ
ﺍﻟﻔﺼﻞ.12
ﺗﻢﺗﻄﻮﻳﺮ ﺍﻹﺻﺪﺍﺭ 3.0ﻣﻦ ++ Cﺑﻴﻦ ﻋﺎﻣﻲ 1989ﻭ .1990ﻭﻗﺪ ﺃﺿﺎﻑ ﺍﻟﻘﻮﺍﻟﺐ ﺍﻟﺘﻲ
ﺗﻮﻓﺮﺃﻧﻮﺍﻋﺎً ﺫﺍﺕ ﻣﻌﻠﻤﺎﺕ ﻭﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ .ﺍﻟﻨﺴﺨﺔ ﺍﻟﺤﺎﻟﻴﺔ ﻣﻦ ، ++ Cﻭﺍﻟﺘﻲ ﺗﻢ
ﺗﻮﺣﻴﺪﻫﺎﻓﻲ ﻋﺎﻡ ، 1998ﻣﻮﺻﻮﻓﺔ ﻓﻲ (.ISO )1998
89 2.16ﺍﻟﺠﻤﻊ ﺑﻴﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺤﺘﻤﻴﺔ ﻭﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻟﻜﺎﺉﻦ++ C :
ﻳﻤﻜﻦﻗﻮﻟﺒﺔ ﻛﻞ ﻣﻦ ﺍﻟﻄﺮﻕ ﻭﺍﻟﻔﺉﺎﺕ ،ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﻣﻌﻠﻤﺎﺗﻬﺎ .ﻋﻠﻰ ﺳﺒﻴﻞ
ﺍﻟﻤﺜﺎﻝ ،ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﻃﺮﻳﻘﺔ ﻛﻄﺮﻳﻘﺔ ﻣﻘﻮﻟﺒﺔ ﻟﻠﺴﻤﺎﺡ ﻟﻬﺎ ﺑﺎﻟﺤﺼﻮﻝ ﻋﻠﻰ ﺇﺻﺪﺍﺭﺍﺕ ﻟﻤﺠﻤﻮﻋﺔ
ﻣﺘﻨﻮﻋﺔﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﻤﻌﻠﻤﺎﺕ .ﺗﺘﻤﺘﻊ ﺍﻟﻔﺼﻮﻝ ﺑﻨﻔﺲ ﺍﻟﻤﺮﻭﻧﺔ.
ﻳﺪﻋﻢ ++ Cﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ .ﻳﺘﻀﻤﻦ ﺃﻳﻀﺎً ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﺍﻟﺘﻲ ﺗﺨﺘﻠﻒ ﺍﺧﺘﻼﻓﺎً
ﻛﺒﻴﺮﺍًﻋﻦ ﻣﻌﺎﻟﺠﺔ .Adaﻳﺘﻤﺜﻞ ﺃﺣﺪ ﺍﻻﺧﺘﻼﻓﺎﺕ ﻓﻲ ﺃﻧﻪ ﻻ ﻳﻤﻜﻦ ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﺍﻟﺘﻲ
ﻳﻤﻜﻦﺍﻛﺘﺸﺎﻓﻬﺎ ﺑﺸﺪﺓ .ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺑﻨﻴﺎﺕ ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﻟﻜﻞ ﻣﻦ Adaﻭ ++ Cﻓﻲ
ﺍﻟﻔﺼﻞ.14
2.16.3ﺍﻟﺘﻘﻴﻴﻢ
ﺳﺮﻋﺎﻥﻣﺎ ﺃﺻﺒﺤﺖ ﻟﻐﺔ ++ Cﻟﻐﺔ ﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻭﻻ ﺗﺰﺍﻝ ﻛﺬﻟﻚ .ﺃﺣﺪ ﺍﻟﻌﻮﺍﻣﻞ
ﻓﻲﺷﻌﺒﻴﺘﻬﺎ ﻫﻮ ﺗﻮﺍﻓﺮ ﻣﺘﺮﺟﻤﻴﻦ ﺟﻴﺪﻳﻦ ﻭﻏﻴﺮ ﻣﻜﻠﻔﻴﻦ .ﻋﺎﻣﻞ ﺁﺧﺮ ﻫﻮ ﺃﻧﻪ ﻣﺘﻮﺍﻓﻖ ﺗﻤﺎﻣﺎً ﺗﻘﺮﻳﺒﺎً
ﻣﻊ) Cﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻥ ﺑﺮﺍﻣﺞ Cﻳﻤﻜﻦ ،ﻣﻊ ﺗﻐﻴﻴﺮﺍﺕ ﻗﻠﻴﻠﺔ ،ﺗﺠﻤﻴﻌﻬﺎ ﻛﺒﺮﺍﻣﺞ ، (++ Cﻭﻓﻲ
ﻣﻌﻈﻢﺍﻟﺘﻄﺒﻴﻘﺎﺕ ،ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺭﺑﻂ ﻛﻮﺩ ++ Cﺑﺮﻣﺰ - Cﻭﺑﺎﻟﺘﺎﻟﻲ ﺳﻬﻞ ﻧﺴﺒﻴﺎً ﺑﺎﻟﻨﺴﺒﺔ ﻟـ
ﺍﻟﻌﺪﻳﺪﻣﻦ ﻣﺒﺮﻣﺠﻲ Cﻟﺘﻌﻠﻢ .++ Cﺃﺧﻴﺮﺍً ،ﻓﻲ ﺍﻟﻮﻗﺖ ﺍﻟﺬﻱ ﻇﻬﺮﺕ ﻓﻴﻪ ++ Cﻷﻭﻝ ﻣﺮﺓ ،
ﻋﻨﺪﻣﺎﺑﺪﺃﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ﺗﺤﻈﻰ ﺑﺎﻫﺘﻤﺎﻡ ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ،ﻛﺎﻧﺖ ++ Cﻫﻲ
ﺍﻟﻠﻐﺔﺍﻟﻮﺣﻴﺪﺓ ﺍﻟﻤﺘﺎﺣﺔ ﺍﻟﺘﻲ ﻛﺎﻧﺖ ﻣﻨﺎﺳﺒﺔ ﻟﻤﺸﺎﺭﻳﻊ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺍﻟﺘﺠﺎﺭﻳﺔ ﺍﻟﻜﺒﻴﺮﺓ.
ﻋﻠﻰﺍﻟﺠﺎﻧﺐ ﺍﻟﺴﻠﺒﻲ ،ﻧﻈﺮﺍً ﻷﻥ ++ Cﻫﻲ ﻟﻐﺔ ﻛﺒﻴﺮﺓ ﻭﻣﻌﻘﺪﺓ ﺟﺪﺍً ،ﻓﻤﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻬﺎ
ﺗﻌﺎﻧﻲﻣﻦ ﻋﻴﻮﺏ ﻣﻤﺎﺛﻠﺔ ﻟﺘﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑـ .PL / Iﻟﻘﺪ ﻭﺭﺛﺖ ﻣﻌﻈﻢ ﺣﺎﻻﺕ ﻋﺪﻡ ﺍﻷﻣﺎﻥ ﻓﻲ ﻟﻐﺔ
، Cﻣﻤﺎ ﻳﺠﻌﻠﻬﺎ ﺃﻗﻞ ﺃﻣﺎﻧﺎً ﻣﻦ ﻟﻐﺎﺕ ﻣﺜﻞ Adaﻭ .Java
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 90
ﺑﻌﺪﺃﻥ ﺗﺮﻙ ﺳﺘﻴﻒ ﺟﻮﺑﺰ ﺷﺮﻛﺔ Appleﻭﺃﺳﺲ ﺷﺮﻛﺔ ، NeXTﻗﺎﻡ ﺑﺘﺮﺧﻴﺺ -C
Objectiveﻭﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻟﻜﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﻧﻈﺎﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ .NeXTﺃﺻﺪﺭﺕ NeXTﺃﻳﻀ ًﺎ
ﻣﺘﺮﺟﻤﻬﺎ ، Objective-Cﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﺑﻴﺉﺔ ﺗﻄﻮﻳﺮ NeXTstepﻭﻣﻜﺘﺒﺔ ﻣﻦ ﺍﻟﻤﺮﺍﻓﻖ.
ﺑﻌﺪﻓﺸﻞ ﻣﺸﺮﻭﻉ ، NeXTﺍﺷﺘﺮﺕ Apple NeXTﻭﺍﺳﺘﺨﺪﻣﺖ Objective-Cﻟﻜﺘﺎﺑﺔ -C
MAC OS X. Objectiveﻫﻲ ﻟﻐﺔ ﺟﻤﻴﻊ ﺑﺮﺍﻣﺞ ، iPhoneﻭﻫﻮ ﻣﺎ ﻳﻔﺴﺮ ﺍﻻﺭﺗﻔﺎﻉ ﺍﻟﺴﺮﻳﻊ ﻓﻲ
ﺷﻌﺒﻴﺘﻬﺎﺑﻌﺪ ﻇﻬﻮﺭ .iPhone
ﺗﻢﺗﺼﻤﻴﻢ Goﺑﻮﺍﺳﻄﺔ Rob Pikeﻭ Ken Thompsonﻭ Robert Griesemerﻓﻲ .Googleﻃﻮﻣﺴﻮﻥ ﻫﻮ
ﻣﺼﻤﻢﺳﻠﻒ ، C ، Bﻭﻛﺬﻟﻚ ﺍﻟﻤﺼﻤﻢ ﻣﻊ Dennis Ritchieﻣﻦ .UNIXﻛﺎﻥ ﻫﻮ ﻭﺑﺎﻳﻚ ﻳﻌﻤﻼﻥ ﺳﺎﺑﻘﺎً ﻓﻲ ﻣﺨﺘﺒﺮﺍﺕ
ﺑﻴﻞ.ﺑﺪﺃ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﻭﻟﻲ ﻓﻲ ﻋﺎﻡ 2007ﻭﺗﻢ ﺇﺻﺪﺍﺭ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻷﻭﻝ ﻓﻲ ﺃﻭﺍﺧﺮ ﻋﺎﻡ .2009ﻛﺎﻥ ﺃﺣﺪ ﺍﻟﺪﻭﺍﻓﻊ ﺍﻷﻭﻟﻴﺔ ﻟـ Go
ﻫﻮﺑﻂء ﺗﺠﻤﻴﻊ ﺑﺮﺍﻣﺞ ++ Cﺍﻟﻜﺒﻴﺮﺓ ﻓﻲ .Googleﻭﺍﺣﺪﺓ ﻣﻦ ﺧﺼﺎﺉﺺ ﺍﻟﻤﺘﺮﺟﻢ ﺍﻷﻭﻟﻲ ﻟـ Goﻫﻲ ﺃﻧﻪ ﺳﺮﻳﻊ ﻟﻠﻐﺎﻳﺔ.
ﺗﺴﺘﻌﻴﺮﻟﻐﺔ Goﺑﻌﻀﺎً ﻣﻦ ﺗﺮﻛﻴﺒﻬﺎ ﻭﺗﺮﻛﻴﺒﺎﺗﻬﺎ ﻣﻦ .Cﺗﺘﻀﻤﻦ ﺑﻌﺾ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺠﺪﻳﺪﺓ ﻟـ Goﻣﺎ ﻳﻠﻲ (1) :ﻳﺘﻢ ﻋﻜﺲ
ﺑﻴﺎﻧﺎﺕﺍﻟﺒﻴﺎﻧﺎﺕ ﺑﺸﻜﻞ ﻧﺤﻮﻱ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﺍﻟﻤﺴﺘﻨﺪﺓ ﺇﻟﻰ C؛ ) (2ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺗﺴﺒﻖ ﺍﺳﻢ ﺍﻟﻨﻮﻉ ؛ ) (3ﻳﻤﻜﻦ ﺇﻋﻄﺎء
ﺍﻟﺘﺼﺮﻳﺤﺎﺕﺍﻟﻤﺘﻐﻴﺮﺓ ﻧﻮﻋﺎً ﺑﺎﻻﺳﺘﺪﻻﻝ ﺇﺫﺍ ﺗﻢ ﺇﻋﻄﺎء ﺍﻟﻤﺘﻐﻴﺮ ﻗﻴﻤﺔ ﺃﻭﻟﻴﺔ ؛ ﻭ ) (4ﻳﻤﻜﻦ ﺃﻥ ﺗﺮﺟﻊ ﺍﻟﺪﺍﻻﺕ ﻗﻴﻤﺎً ﻣﺘﻌﺪﺩﺓ .ﻻ
ﺗﺪﻋﻢ Goﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ،ﺣﻴﺚ ﻻ ﻳﻮﺟﺪ ﻟﻬﺎ ﺷﻜﻞ ﻣﻦ ﺃﺷﻜﺎﻝ ﺍﻟﻮﺭﺍﺛﺔ .ﻭﻣﻊ ﺫﻟﻚ ،ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ
ﺍﻷﺳﺎﻟﻴﺐﻷﻱ ﻧﻮﻉ .ﻛﻤﺎ ﺃﻧﻪ ﻻ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻷﺩﻭﻳﺔ ﺍﻟﺠﻨﻴﺴﺔ .ﺗﺘﺸﺎﺑﻪ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﺨﺎﺻﺔ ﺑـ Goﻣﻊ ﺗﻠﻚ ﺍﻟﺨﺎﺻﺔ
ﺑﺎﻟﻠﻐﺎﺕﺍﻷﺧﺮﻯ ﺍﻟﻤﺴﺘﻨﺪﺓ ﺇﻟﻰ ﻟﻐﺔ ، Cﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻤﺤﻮﻝ ﻻ ﻳﺘﻀﻤﻦ ﺍﻟﺴﻘﻮﻁ ﺍﻟﻀﻤﻨﻲ ﺇﻟﻰ ﺍﻟﻤﻘﻄﻊ ﺍﻟﺘﺎﻟﻲ.
ﻳﺘﻀﻤﻦ Goﻋﺒﺎﺭﺓ ، gotoﻭﺍﻟﻤﺆﺷﺮﺍﺕ ،ﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ،ﻭﺍﻟﻮﺍﺟﻬﺎﺕ )ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺍﺧﺘﻼﻓﻬﺎ ﻋﻦ ﺗﻠﻚ
ﺍﻟﻤﻮﺟﻮﺩﺓﻓﻲ Javaﻭ ، (# Cﻭﺩﻋﻢ ﺍﻟﺘﺰﺍﻣﻦ ﺑﺎﺳﺘﺨﺪﺍﻡ .goroutinesﻛﻤﺎ ﺃﻧﻪ ﻻ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻷﺩﻭﻳﺔ ﺍﻟﺠﻨﻴﺴﺔ .ﺗﺘﺸﺎﺑﻪ
ﻋﺒﺎﺭﺍﺕﺍﻟﺘﺤﻜﻢ ﺍﻟﺨﺎﺻﺔ ﺑـ Goﻣﻊ ﺗﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﺍﻟﻤﺴﺘﻨﺪﺓ ﺇﻟﻰ ﻟﻐﺔ ، Cﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻤﺤﻮﻝ ﻻ
ﻳﺘﻀﻤﻦﺍﻟﺴﻘﻮﻁ ﺍﻟﻀﻤﻨﻲ ﺇﻟﻰ ﺍﻟﻤﻘﻄﻊ ﺍﻟﺘﺎﻟﻲ .ﻳﺘﻀﻤﻦ Goﻋﺒﺎﺭﺓ ، gotoﻭﺍﻟﻤﺆﺷﺮﺍﺕ ،ﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ،
ﻭﺍﻟﻮﺍﺟﻬﺎﺕ)ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺍﺧﺘﻼﻓﻬﺎ ﻋﻦ ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ Javaﻭ ، (# Cﻭﺩﻋﻢ ﺍﻟﺘﺰﺍﻣﻦ ﺑﺎﺳﺘﺨﺪﺍﻡ .goroutinesﻛﻤﺎ
ﺃﻧﻪﻻ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻷﺩﻭﻳﺔ ﺍﻟﺠﻨﻴﺴﺔ .ﺗﺘﺸﺎﺑﻪ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﺨﺎﺻﺔ ﺑـ Goﻣﻊ ﺗﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﺍﻟﻤﺴﺘﻨﺪﺓ
ﺇﻟﻰﻟﻐﺔ ، Cﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻤﺤﻮﻝ ﻻ ﻳﺘﻀﻤﻦ ﺍﻟﺴﻘﻮﻁ ﺍﻟﻀﻤﻨﻲ ﺇﻟﻰ ﺍﻟﻤﻘﻄﻊ ﺍﻟﺘﺎﻟﻲ .ﻳﺘﻀﻤﻦ Goﻋﺒﺎﺭﺓ ، goto
ﻭﺍﻟﻤﺆﺷﺮﺍﺕ ،ﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ،ﻭﺍﻟﻮﺍﺟﻬﺎﺕ )ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺍﺧﺘﻼﻓﻬﺎ ﻋﻦ ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ Javaﻭ ، (# C
ﻭﺩﻋﻢﺍﻟﺘﺰﺍﻣﻦ ﺑﺎﺳﺘﺨﺪﺍﻡ .goroutines
2.17.1ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ
ﺗﻢﺗﺼﻤﻴﻢ ، Javaﻣﺜﻞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ،ﻟﺘﻄﺒﻴﻖ ﻳﺒﺪﻭ ﺃﻧﻪ ﻻ ﺗﻮﺟﺪ ﻟﻪ ﻟﻐﺔ ﺣﺎﻟﻴﺔ
ﻣﺮﺿﻴﺔ.ﻓﻲ ﻋﺎﻡ ، 1990ﻗﺮﺭﺕ ﺷﺮﻛﺔ Sun Microsystemsﺃﻥ ﻫﻨﺎﻙ ﺣﺎﺟﺔ ﺇﻟﻰ ﻟﻐﺔ ﺑﺮﻣﺠﺔ
ﻟﻸﺟﻬﺰﺓﺍﻹﻟﻜﺘﺮﻭﻧﻴﺔ ﺍﻻﺳﺘﻬﻼﻛﻴﺔ ﺍﻟﻤﻀﻤﻨﺔ ،ﻣﺜﻞ ﺍﻟﻤﺤﻤﺼﺎﺕ ﻭﺃﻓﺮﺍﻥ ﺍﻟﻤﻴﻜﺮﻭﻭﻳﻒ ﻭﺃﻧﻈﻤﺔ
ﺍﻟﺘﻠﻔﺰﻳﻮﻥﺍﻟﺘﻔﺎﻋﻠﻴﺔ .ﻛﺎﻧﺖ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﺃﺣﺪ ﺍﻷﻫﺪﺍﻑ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻤﺜﻞ ﻫﺬﻩ ﺍﻟﻠﻐﺔ .ﻗﺪ ﻻ ﻳﺒﺪﻭ ﺃﻥ
ﺍﻟﻤﻮﺛﻮﻗﻴﺔﺳﺘﻜﻮﻥ ﻋﺎﻣﻼ ًﻣﻬﻤﺎً ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﻓﺮﻥ ﺍﻟﻤﻴﻜﺮﻭﻭﻳﻒ .ﺇﺫﺍ ﻛﺎﻥ ﻟﺪﻯ ﺍﻟﻔﺮﻥ ﺑﺮﻧﺎﻣﺞ
ﻣﻌﻄﻞ ،ﻓﻤﻦ ﺍﻟﻤﺤﺘﻤﻞ ﺃﻻ ﻳﺸﻜﻞ ﺧﻄﺮﺍً ﻛﺒﻴﺮﺍً ﻋﻠﻰ ﺃﻱ ﺷﺨﺺ ،ﻭﻋﻠﻰ ﺍﻷﺭﺟﺢ ﻟﻦ ﻳﺆﺩﻱ ﺇﻟﻰ
ﺗﺴﻮﻳﺎﺕﻗﺎﻧﻮﻧﻴﺔ ﻛﺒﻴﺮﺓ .ﻭﻣﻊ ﺫﻟﻚ ،ﺇﺫﺍ ﺗﺒﻴﻦ ﺃﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﻧﻤﻮﺫﺝ ﻣﻌﻴﻦ ﺧﺎﻃﺊ ﺑﻌﺪ ﺗﺼﻨﻴﻊ
ﻣﻠﻴﻮﻥﻭﺣﺪﺓ ﻭﺑﻴﻌﻬﺎ ،ﻓﺈﻥ ﺍﺳﺘﺮﺟﺎﻋﻬﺎ ﺳﻴﺘﺮﺗﺐ ﻋﻠﻴﻪ ﺗﻜﻠﻔﺔ ﻛﺒﻴﺮﺓ .ﻟﺬﻟﻚ ،ﺍﻟﻤﻮﺛﻮﻗﻴﺔﻳﻜﻮﻥﺳﻤﺔ
ﻣﻬﻤﺔﻟﻠﺒﺮﻧﺎﻣﺞ ﻓﻲ ﺍﻟﻤﻨﺘﺠﺎﺕ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺔ ﺍﻻﺳﺘﻬﻼﻛﻴﺔ.
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 92
ﺑﻌﺪﺍﻟﻨﻈﺮ ﻓﻲ Cﻭ ، ++ Cﺗﻘﺮﺭ ﻋﺪﻡ ﺇﺭﺿﺎء ﺃﻱ ﻣﻨﻬﻤﺎ ﻟﺘﻄﻮﻳﺮ ﺑﺮﺍﻣﺞ ﺍﻷﺟﻬﺰﺓ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺔ
ﺍﻻﺳﺘﻬﻼﻛﻴﺔ.ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻟﻐﺔ Cﻛﺎﻧﺖ ﺻﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً ،ﺇﻻ ﺃﻧﻬﺎ ﻟﻢ ﺗﻘﺪﻡ ﺩﻋﻤﺎً ﻟﻠﺒﺮﻣﺠﺔ
ﺍﻟﺸﻴﺉﻴﺔ ،ﻭﺍﻟﺘﻲ ﺍﻋﺘﺒﺮﻭﻫﺎ ﺿﺮﻭﺭﺓ .ﺩﻋﻢ ++ Cﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ،ﻭﻟﻜﻦ ﺗﻢ ﺍﻟﺤﻜﻢ
ﻋﻠﻴﻬﺎﺑﺄﻧﻬﺎ ﻛﺒﻴﺮﺓ ﺟﺪﺍً ﻭﻣﻌﻘﺪﺓ ،ﺟﺰﺉﻴﺎً ﻷﻧﻬﺎ ﺗﺪﻋﻢ ﺃﻳﻀﺎً ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻹﺟﺮﺍءﺍﺕ .ﻛﻤﺎ
ﻛﺎﻥﻣﻦ ﺍﻟﻤﻌﺘﻘﺪ ﺃﻥ ﻻ Cﻭﻻ ++ Cﺗﻮﻓﺮ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻟﻼﺯﻡ ﻣﻦ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ .ﻟﺬﻟﻚ ،ﺗﻢ ﺗﺼﻤﻴﻢ ﻟﻐﺔ
ﺟﺪﻳﺪﺓ ،ﺳﻤﻴﺖ ﻓﻴﻤﺎ ﺑﻌﺪ .Javaﺍﺳﺘﺮﺷﺪ ﺗﺼﻤﻴﻤﻪ ﺑﺎﻟﻬﺪﻑ ﺍﻷﺳﺎﺳﻲ ﺍﻟﻤﺘﻤﺜﻞ ﻓﻲ ﺗﻮﻓﻴﺮ ﻗﺪﺭ
ﺃﻛﺒﺮﻣﻦ ﺍﻟﺒﺴﺎﻃﺔ ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﻣﻤﺎ ﻛﺎﻥ ﻳﻌُﺘﻘﺪ ﺃﻥ ++ Cﺗﻮﻓﺮﻩ.
ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﺪﺍﻓﻊ ﺍﻷﻭﻟﻲ ﻟﺠﺎﻓﺎ ﻛﺎﻥ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺎﺕ ﺍﻻﺳﺘﻬﻼﻛﻴﺔ ،ﺇﻻ ﺃﻧﻪ ﻟﻢ ﻳﺘﻢ
ﺗﺴﻮﻳﻖﺃﻱ ﻣﻦ ﺍﻟﻤﻨﺘﺠﺎﺕ ﺍﻟﺘﻲ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﻌﻬﺎ ﻓﻲ ﺳﻨﻮﺍﺗﻬﺎ ﺍﻷﻭﻟﻰ .ﺑﺪءﺍً ﻣﻦ ﻋﺎﻡ ، 1993
ﻋﻨﺪﻣﺎﺃﺻﺒﺤﺖ ﺷﺒﻜﺔ ﺍﻟﻮﻳﺐ ﺍﻟﻌﺎﻟﻤﻴﺔ ﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ،ﻭﺑﺴﺒﺐ ﺍﻟﻤﺘﺼﻔﺤﺎﺕ
ﺍﻟﺮﺳﻮﻣﻴﺔﺍﻟﺠﺪﻳﺪﺓ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ،ﺗﻢ ﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ Javaﻛﺄﺩﺍﺓ ﻣﻔﻴﺪﺓ ﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻳﺐ .ﻋﻠﻰ ﻭﺟﻪ
ﺍﻟﺨﺼﻮﺹ ،ﺃﺻﺒﺤﺖ ﺗﻄﺒﻴﻘﺎﺕ Javaﺍﻟﺼﻐﻴﺮﺓ ،ﻭﻫﻲ ﺑﺮﺍﻣﺞ Javaﺻﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً ﻳﺘﻢ ﺗﻔﺴﻴﺮﻫﺎ
ﻓﻲﻣﺘﺼﻔﺤﺎﺕ ﺍﻟﻮﻳﺐ ﻭﻳﻤﻜﻦ ﺇﺩﺭﺍﺝ ﻣﺨﺮﺟﺎﺗﻬﺎ ﻓﻲ ﻣﺴﺘﻨﺪﺍﺕ ﺍﻟﻮﻳﺐ ﺍﻟﻤﻌﺮﻭﺿﺔ ،ﺷﺎﺉﻌﺔ
ﺟﺪﺍًﻓﻲ ﻣﻨﺘﺼﻒ ﺇﻟﻰ ﺃﻭﺍﺧﺮ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ .ﻓﻲ ﺍﻟﺴﻨﻮﺍﺕ ﺍﻟﻘﻠﻴﻠﺔ ﺍﻷﻭﻟﻰ ﻟﺸﻌﺒﻴﺔ ، Javaﻛﺎﻥ
ﺍﻟﻮﻳﺐﻫﻮ ﺃﻛﺜﺮ ﺗﻄﺒﻴﻘﺎﺗﻬﺎ ﺷﻴﻮﻋﺎً.
ﺗﺮﺃﺱﻓﺮﻳﻖ ﺗﺼﻤﻴﻢ Javaﺟﻴﻤﺲ ﺟﻮﺳﻠﻴﻨﺞ ،ﺍﻟﺬﻱ ﺻﻤﻢ ﺳﺎﺑﻘﺎً ﻣﺤﺮﺭ UNIX emacs
ﻭﻧﻈﺎﻡﺍﻟﻨﻮﺍﻓﺬ .NeWS
ﻫﻨﺎﻙﺍﺧﺘﻼﻑ ﻣﻬﻢ ﺁﺧﺮ ﺑﻴﻦ ++ Cﻭ Javaﻭﻫﻮ ﺃﻥ ++ Cﺗﺪﻋﻢ ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ ﻣﺒﺎﺷﺮﺓ
ﻓﻲﺗﻌﺮﻳﻔﺎﺕ ﻓﺉﺘﻬﺎ .ﺗﺪﻋﻢ Javaﻟﻐﺔ ﻭﺍﺣﺪﺓ ﻓﻘﻂ
93 2.17ﻟﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ :ﺟﺎﻓﺎ
ﺗﻮﺭﻳﺚﺍﻟﻔﺉﺎﺕ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻳﻤﻜﻦ ﺍﻟﺤﺼﻮﻝ ﻋﻠﻰ ﺑﻌﺾ ﻓﻮﺍﺉﺪ ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ
ﺑﺎﺳﺘﺨﺪﺍﻡﺑﻨﻴﺔ ﺍﻟﻮﺍﺟﻬﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ.
ﻣﻦﺑﻴﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ++ Cﺍﻟﺘﻲ ﻟﻢ ﻳﺘﻢ ﻧﺴﺨﻬﺎ ﺇﻟﻰ Javaﻫﻲ ﺍﻟﺒﻨﻰ ﻭﺍﻟﻨﻘﺎﺑﺎﺕ.
ﺑﺨﻼﻑ Cﻭ ، ++ Cﺗﺘﻀﻤﻦ Javaﻋﻤﻠﻴﺎﺕ ﺍﻹﻛﺮﺍﻩ ﻋﻠﻰ ﻧﻮﻉ ﺍﻟﻤﻬﻤﺔ )ﺗﺤﻮﻳﻼﺕ ﺍﻟﻨﻮﻉ
ﺍﻟﻀﻤﻨﻲ( ﻓﻘﻂ ﺇﺫﺍ ﻛﺎﻧﺖ ﺗﺘﺴﻊ )ﻣﻦ ﻧﻮﻉ "ﺃﺻﻐﺮ" ﺇﻟﻰ ﻧﻮﻉ "ﺃﻛﺒﺮ"( .ﻟﺬﺍintﻝﻳﻄﻔﻮﻳﺘﻢ ﺍﻹﻛﺮﺍﻩ ﻋﺒﺮ
ﻋﺎﻣﻞﺍﻟﺘﻌﻴﻴﻦ ،ﻭﻟﻜﻦﻳﻄﻔﻮ
ﻝintﺍﻹﻛﺮﺍﻩ ﻟﻴﺲ ﻛﺬﻟﻚ.
2.17.3ﺍﻟﺘﻘﻴﻴﻢ
ﻗﺎﻡﻣﺼﻤﻤﻮ Javaﺑﻌﻤﻞ ﺟﻴﺪ ﻓﻲ ﺗﻘﻠﻴﺺ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺰﺍﺉﺪﺓ ﻭ /ﺃﻭ ﻏﻴﺮ ﺍﻵﻣﻨﺔ ﻟـ .++ Cﻋﻠﻰ
ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ،ﻛﺎﻥ ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﺍﻟﺘﺨﻠﺺ ﻣﻦ ﻧﺼﻒ ﺍﻹﻛﺮﺍﻫﺎﺕ ﻋﻠﻰ ﺍﻟﺘﻌﻴﻴﻦ ﺍﻟﺘﻲ ﺗﺘﻢ ﻓﻲ
++ Cﻛﺎﻥ ﺧﻄﻮﺓ ﻧﺤﻮ ﻣﻮﺛﻮﻗﻴﺔ ﺃﻋﻠﻰ .ﻛﻤﺎ ﺃﻥ ﻓﺤﺺ ﻧﻄﺎﻕ ﺍﻟﻔﻬﺮﺱ ﻟﻮﺻﻮﻝ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻳﺠﻌﻞ
ﺍﻟﻠﻐﺔﺃﻛﺜﺮ ﺃﻣﺎﻧﺎً .ﺗﻌﻤﻞ ﺇﺿﺎﻓﺔ ﺍﻟﺘﺰﺍﻣﻦ ﻋﻠﻰ ﺗﺤﺴﻴﻦ ﻧﻄﺎﻕ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻛﺘﺎﺑﺘﻬﺎ
ﺑﺎﻟﻠﻐﺔ ،ﻛﻤﺎ ﺗﻔﻌﻞ ﻣﻜﺘﺒﺎﺕ ﺍﻟﻔﺉﺎﺕ ﻟﻮﺍﺟﻬﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺮﺳﻮﻣﻴﺔ ﻭﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﻗﺎﻋﺪﺓ
ﺍﻟﺒﻴﺎﻧﺎﺕﻭﺍﻟﺸﺒﻜﺎﺕ.
ﻏﺎﻟﺒﺎًﻣﺎ ﺗﻌُﺰﻯ ﻗﺎﺑﻠﻴﺔ ﺗﻨﻘﻞ ، Javaﻋﻠﻰ ﺍﻷﻗﻞ ﻓﻲ ﺍﻟﺸﻜﻞ ﺍﻟﻤﺘﻮﺳﻂ ،ﺇﻟﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ،
ﻟﻜﻨﻬﺎﻟﻴﺴﺖ ﻛﺬﻟﻚ .ﻳﻤﻜﻦ ﺗﺮﺟﻤﺔ ﺃﻱ ﻟﻐﺔ ﺇﻟﻰ ﺻﻴﻐﺔ ﻭﺳﻴﻄﺔ ﻭ "ﺗﺸﻐﻴﻞ" ﻋﻠﻰ ﺃﻱ ﻧﻈﺎﻡ
ﺃﺳﺎﺳﻲﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺁﻟﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ ﻟﻬﺬﺍ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﻮﺳﻴﻂ .ﺳﻌﺮ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻨﻘﻞ ﻫﻮ
ﺗﻜﻠﻔﺔﺍﻟﺘﻔﺴﻴﺮ ،ﻭﺍﻟﺬﻱ ﻛﺎﻥ ﺗﻘﻠﻴﺪﻳﺎً ﻳﺘﻌﻠﻖ ﺑﺘﺮﺗﻴﺐ ﻣﻦ ﺣﻴﺚ ﺍﻟﺤﺠﻢ ﺃﻛﺜﺮ ﻣﻦ ﺗﻨﻔﻴﺬ ﻛﻮﺩ ﺍﻵﻟﺔ.
ﺍﻹﺻﺪﺍﺭﺍﻷﻭﻟﻲ ﻣﻦ ﻣﺘﺮﺟﻢ ، Javaﺍﻟﻤﺴﻤﻰ ( ، Java Virtual Machine )JVMﻛﺎﻥ ﻓﻲ ﺍﻟﻮﺍﻗﻊ
ﺃﺑﻄﺄ 10ﻣﺮﺍﺕ ﻋﻠﻰ ﺍﻷﻗﻞ ﻣﻦ ﺑﺮﺍﻣﺞ Cﺍﻟﻤﺘﺮﺟﻤﺔ ﺍﻟﻤﻜﺎﻓﺉﺔ .ﻭﻣﻊ ﺫﻟﻚ ،ﻳﺘﻢ ﺍﻵﻥ ﺗﺮﺟﻤﺔ
ﺍﻟﻌﺪﻳﺪﻣﻦ ﺑﺮﺍﻣﺞ Javaﺇﻟﻰ ﻛﻮﺩ ﺍﻟﺠﻬﺎﺯ ﻗﺒﻞ ﺗﻨﻔﻴﺬﻫﺎ ،ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﺘﺮﺟﻤﻲ (Just-in-Time )JIT
.ﻫﺬﺍ ﻳﺠﻌﻞ ﻛﻔﺎءﺓ ﺑﺮﺍﻣﺞ Javaﻣﻨﺎﻓﺴﺔ ﻟﺒﺮﺍﻣﺞ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺘﺮﺟﻤﺔ ﺗﻘﻠﻴﺪﻳﺎً ﻣﺜﻞ .++ C
ﺯﺍﺩﺍﺳﺘﺨﺪﺍﻡ Javaﺑﺸﻜﻞ ﺃﺳﺮﻉ ﻣﻦ ﺃﻱ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺃﺧﺮﻯ .ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ،ﻛﺎﻥ ﻫﺬﺍ ﺑﺴﺒﺐ
ﻗﻴﻤﺘﻬﺎﻓﻲ ﺑﺮﻣﺠﺔ ﻣﺴﺘﻨﺪﺍﺕ ﺍﻟﻮﻳﺐ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ .ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﺃﺣﺪ ﺃﺳﺒﺎﺏ ﺻﻌﻮﺩ Java
ﺍﻟﺴﺮﻳﻊﺇﻟﻰ ﺍﻟﺼﺪﺍﺭﺓ ﻫﻮ ﺑﺒﺴﺎﻃﺔ ﺃﻥ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻳﺤﺒﻮﻥ ﺗﺼﻤﻴﻤﻬﺎ .ﻳﻌﺘﻘﺪ ﺑﻌﺾ ﺍﻟﻤﻄﻮﺭﻳﻦ ﺃﻥ
++ Cﻛﺎﻧﺖ ﺑﺒﺴﺎﻃﺔ ﺃﻳﻀﺎً
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 94
ﻛﺒﻴﺮﺓﻭﻣﻌﻘﺪﺓ ﻟﺘﻜﻮﻥ ﻋﻤﻠﻴﺔ ﻭﺁﻣﻨﺔ .ﻗﺪﻣﺖ ﻟﻬﻢ Javaﺑﺪﻳﻼ ًﻳﺘﻤﺘﻊ ﺑﺎﻟﻜﺜﻴﺮ ﻣﻦ ﻗﻮﺓ ، ++ Cﻭﻟﻜﻦ
ﺑﻠﻐﺔﺃﺑﺴﻂ ﻭﺃﻛﺜﺮ ﺃﻣﺎﻧﺎً .ﺳﺒﺐ ﺁﺧﺮ ﻫﻮ ﺃﻥ ﻧﻈﺎﻡ ﺍﻟﻤﺘﺮﺟﻢ /ﺍﻟﻤﺘﺮﺟﻢ ﺍﻟﻔﻮﺭﻱ ﻟﺠﺎﻓﺎ ﻣﺠﺎﻧﻲ ﻭﻳﻤﻜﻦ
ﺍﻟﺤﺼﻮﻝﻋﻠﻴﻪ ﺑﺴﻬﻮﻟﺔ ﻋﻠﻰ ﺍﻟﻮﻳﺐ .ﺗﺴﺘﺨﺪﻡ Javaﺍﻵﻥ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ
ﻣﻦﻣﺠﺎﻻﺕ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ.
ﻇﻬﺮﺃﺣﺪﺙ ﺇﺻﺪﺍﺭ ﻣﻦ ، Java ، Java 7ﻓﻲ ﻋﺎﻡ .2011ﻣﻨﺬ ﺑﺪﺍﻳﺘﻪ ،ﺗﻤﺖ ﺇﺿﺎﻓﺔ ﺍﻟﻌﺪﻳﺪ
ﻣﻦﺍﻟﻤﻴﺰﺍﺕ ﺇﻟﻰ ﺍﻟﻠﻐﺔ ،ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﻓﺉﺔ ﺍﻟﺘﻌﺪﺍﺩ ،ﻭﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﻌﺎﻣﺔ ،ﻭﺑﻨﺎء ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﺠﺪﻳﺪ.
) System.out.println
{ // ** end of then clause of if ))listlen< 0( ...ﻋﺪﺩ ﺍﻟﻘﻴﻢ<
ﺍﻟﻤﺘﻮﺳﻂﻫﻮ + ":ﻧﺘﻴﺠﺔ( ؛ "\ nﺁﺧﺮ) System.out.println
2.18ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ
ﺗﻄﻮﺭﺕﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﺔ ﻭﻋﺸﺮﻳﻦ ﻋﺎﻣﺎً ﺍﻟﻤﺎﺿﻴﺔ .ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺎﺕ
ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻨﺼﻴﺔ ﺍﻟﻤﺒﻜﺮﺓ ﻣﻦ ﺧﻼﻝ ﻭﺿﻊ ﻗﺎﺉﻤﺔ ﺑﺎﻷﻭﺍﻣﺮ ،ﺗﺴﻤﻰ ﺃﺍﻟﻨﺼﻲ ،ﻓﻲ ﻣﻠﻒ ﻟﻴﺘﻢ
ﺗﻔﺴﻴﺮﻩ.ﺍﺳﻢ ﺃﻭﻝ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕﺵ )ﻛﻤﺠﻤﻮﻋﺔ ﺻﻐﻴﺮﺓ ﻣﻦ ﺍﻷﻭﺍﻣﺮ ﺍﻟﺘﻲ ﺗﻢ ﺗﻔﺴﻴﺮﻫﺎ ﻋﻠﻰ ﺃﻧﻬﺎ
ﺍﺳﺘﺪﻋﺎءﺍﺕﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻟﻠﻨﻈﺎﻡ ﺍﻟﺘﻲ ﺗﺆﺩﻱ ﻭﻇﺎﺉﻒ ﺍﻷﺩﺍﺓ ﺍﻟﻤﺴﺎﻋﺪﺓ ،ﻣﺜﻞ ﺇﺩﺍﺭﺓ ﺍﻟﻤﻠﻔﺎﺕ
ﻭﺗﺼﻔﻴﺔﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﺒﺴﻴﻄﺔ .ﺗﻢ ﺇﺿﺎﻓﺔ ﻣﺘﻐﻴﺮﺍﺕ ﺇﻟﻰ ﺫﻟﻚ ،ﻭﺑﻴﺎﻧﺎﺕ ﺗﺪﻓﻖ ﺍﻟﺘﺤﻜﻢ ،
ﻭﺍﻟﻮﻇﺎﺉﻒ ،ﻭﻣﺨﺘﻠﻒ ﺍﻟﻘﺪﺭﺍﺕ ﺍﻷﺧﺮﻯ ،ﻭﺍﻟﻨﺘﻴﺠﺔ ﻫﻲ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻛﺎﻣﻠﺔ .ﻭﺍﺣﺪ ﻣﻦ ﺃﻗﻮﻯ ﻫﺬﻩ
ﻭﺃﻛﺜﺮﻫﺎﺷﻬﺮﺓ ﻫﻮ .ksh )for shell( ،ﺍﻟﺬﻱ ﻃﻮﺭﻩ ﺩﻳﻔﻴﺪ ﻛﻮﺭﻥ ﻓﻲ ﻣﺨﺘﺒﺮﺍﺕ ﺑﻴﻞ ، 1995( ،
Bolsky and Korn
ﺗﺤﺘﻮﻱﻟﻐﺔ Perlﻋﻠﻰ ﻋﺪﺩ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﺜﻴﺮﺓ ﻟﻼﻫﺘﻤﺎﻡ ،ﻭﺍﻟﺘﻲ ﺗﻢ ﺫﻛﺮ ﺍﻟﻘﻠﻴﻞ ﻣﻨﻬﺎ
ﻓﻘﻂﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻭﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻻﺣﻘﺎً ﻓﻲ ﺍﻟﻜﺘﺎﺏ.
ﺍﻟﻤﺘﻐﻴﺮﺍﺕﻓﻲ Perlﻣﻜﺘﻮﺑﺔ ﺑﺸﻜﻞ ﺛﺎﺑﺖ ﻭﻣﻌﻠﻨﺔ ﺿﻤﻨﻴﺎً .ﻫﻨﺎﻙ ﺛﻼﺙ ﻣﺴﺎﺣﺎﺕ ﺃﺳﻤﺎء
ﻣﻤﻴﺰﺓﻟﻠﻤﺘﻐﻴﺮﺍﺕ ،ﻳﺸُﺎﺭ ﺇﻟﻴﻬﺎ ﺑﺎﻟﺤﺮﻑ ﺍﻷﻭﻝ ﻣﻦ ﺃﺳﻤﺎء ﺍﻟﻤﺘﻐﻴﺮﺍﺕ .ﺗﺒﺪﺃ ﺟﻤﻴﻊ ﺃﺳﻤﺎء
ﺍﻟﻤﺘﻐﻴﺮﺍﺕﺍﻟﻌﺪﺩﻳﺔ ﺑﻌﻼﻣﺎﺕ ﺍﻟﺪﻭﻻﺭ ) ، ($ﻭﺗﺒﺪﺃ ﺟﻤﻴﻊ ﺃﺳﻤﺎء ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺑﻌﻼﻣﺎﺕ )@( ،
ﻭﺗﺒﺪﺃﺟﻤﻴﻊ ﺃﺳﻤﺎء ﺍﻟﺘﺠﺰﺉﺔ )ﻳﺘﻢ ﻭﺻﻒ ﺍﻟﺘﺠﺰﺉﺔ ﺃﺩﻧﺎﻩ( ﺑﻌﻼﻣﺎﺕ ﺍﻟﻨﺴﺒﺔ ﺍﻟﻤﺉﻮﻳﺔ ) .(٪ﻳﺠﻌﻞ
ﻫﺬﺍﺍﻻﺻﻄﻼﺡ ﺃﺳﻤﺎء ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ﺃﻛﺜﺮ ﻗﺎﺑﻠﻴﺔ ﻟﻠﻘﺮﺍءﺓ ﻣﻦ ﺃﻱ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺃﺧﺮﻯ.
ﻟﻐﺔ Perlﻟﻐﺔ ﻗﻮﻳﺔ ﻭﻟﻜﻨﻬﺎ ﺧﻄﻴﺮﺓ ﺇﻟﻰ ﺣﺪ ﻣﺎ .ﻳﺨﺰﻥ ﺍﻟﻨﻮﻉ ﺍﻟﻘﻴﺎﺳﻲ ﺍﻟﺨﺎﺹ ﺑﻪ ﻛﻼ ًﻣﻦ
ﺍﻟﺴﻼﺳﻞﻭﺍﻷﺭﻗﺎﻡ ،ﻭﺍﻟﺘﻲ ﻳﺘﻢ ﺗﺨﺰﻳﻨﻬﺎ ﻋﺎﺩﺓ ًﻓﻲ ﺷﻜﻞ ﻧﻘﻄﺔ ﻋﺎﺉﻤﺔ ﻣﺰﺩﻭﺟﺔ ﺍﻟﺪﻗﺔ .ﺍﻋﺘﻤﺎﺩ ًﺍ
ﻋﻠﻰﺍﻟﺴﻴﺎﻕ ،ﻗﺪ ﻳﺘﻢ ﺇﺟﺒﺎﺭ ﺍﻷﺭﻗﺎﻡ ﻋﻠﻰ ﺍﻟﺴﻼﺳﻞ ﻭﺍﻟﻌﻜﺲ ﺻﺤﻴﺢ .ﺇﺫﺍ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺳﻠﺴﻠﺔ
ﻓﻲﺳﻴﺎﻕ ﺭﻗﻤﻲ ﻭﻻ ﻳﻤﻜﻦ ﺗﺤﻮﻳﻞ ﺍﻟﺴﻠﺴﻠﺔ ﺇﻟﻰ ﺭﻗﻢ ،ﻓﺴﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺼﻔﺮ ﻭﻻ ﻳﺘﻢ ﺗﻮﻓﻴﺮ
ﺭﺳﺎﻟﺔﺗﺤﺬﻳﺮ ﺃﻭ ﺧﻄﺄ ﻟﻠﻤﺴﺘﺨﺪﻡ .ﻳﻤﻜﻦ ﺃﻥ ﻳﺆﺩﻱ ﻫﺬﺍ ﺍﻟﺘﺄﺛﻴﺮ ﺇﻟﻰ ﺃﺧﻄﺎء ﻟﻢ ﻳﺘﻢ ﺍﻛﺘﺸﺎﻓﻬﺎ
ﺑﻮﺍﺳﻄﺔﺍﻟﻤﺘﺮﺟﻢ ﺃﻭ ﻧﻈﺎﻡ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ .ﻻ ﻳﻤﻜﻦ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﻓﻬﺮﺳﺔ ﺍﻟﻤﺼﻔﻮﻓﺔ ،ﻷﻧﻪ ﻻ
ﻳﻮﺟﺪﻧﻄﺎﻕ ﻣﻨﺨﻔﺾ ﻣﻌﻴﻦ ﻷﻱ ﺻﻔﻴﻒ .ﺗﻌﻮﺩ ﺍﻹﺷﺎﺭﺍﺕ ﺇﻟﻰ ﺍﻟﻌﻨﺎﺻﺮ ﻏﻴﺮ ﺍﻟﻤﻮﺟﻮﺩﺓﺃﻭﻧﺪﻳﻒ،
ﻭﺍﻟﺬﻱﻳﺘﻢ ﺗﻔﺴﻴﺮﻩ ﻋﻠﻰ ﺃﻧﻪ ﺻﻔﺮ ﻓﻲ ﺳﻴﺎﻕ ﺭﻗﻤﻲ .ﻟﺬﻟﻚ ،ﻻ ﻳﻮﺟﺪ ﺃﻳﻀﺎً ﺍﻛﺘﺸﺎﻑ ﺧﻄﺄ ﻓﻲ
ﺍﻟﻮﺻﻮﻝﺇﻟﻰ ﻋﻨﺼﺮ ﺍﻟﻤﺼﻔﻮﻓﺔ.
ﺁﺧﺮ}
ﻣﻄﺒﻌﺔ"ﺧﻄﺄ -ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ \ " n؛
{
// example.js
ﺍﻹﺩﺧﺎﻝ:ﻋﺪﺩ ﺻﺤﻴﺢ ، listLen ،ﺣﻴﺚ listLenﺃﻗﻞ //
ﻣﻦ ، 100ﺗﻠﻴﻬﺎ :listLen-numeric value Outputﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ //
ﺍﻷﻛﺒﺮ //
ﻣﻦﻣﺘﻮﺳﻂ ﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ //
) ﻣﻮﺟﻪ = listLen
"ﺍﻟﺮﺟﺎء ﻛﺘﺎﺑﺔ ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ" ("" ،؛ ﻟﻮ))} ((0( && )listLen >100
<listLen
//ﺍﺣﺴﺐ ﺍﻟﻤﺘﻮﺳﻂ
ﺍﻟﻤﺘﻮﺳﻂ= sum / listLen؛
//ﻋﺮﺽ ﺍﻟﻨﺘﺎﺉﺞ
:"،ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ") document.write
ﺍﻟﻨﺘﻴﺠﺔ ("</ br>"،؛
{ﺁﺧﺮ
) document.write
"ﺧﻄﺄ -ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ > ("</ br؛
ﺍﻟﻤﻌﺎﻟﺞﺍﻟﻤﺴﺒﻖ ،ﻭﺍﻟﺬﻱ ﺃﺩﻯ ﻻﺣﻘﺎً ﺇﻟﻰ ﻏﻤﻮﺽ ﺍﻻﺳﻢ ﺍﻷﺻﻠﻲ .ﺗﻢ ﺗﻄﻮﻳﺮ PHPﺍﻵﻥ ﻭﺗﻮﺯﻳﻌﻪ
ﻭﺩﻋﻤﻪﻛﻤﻨﺘﺞ ﻣﻔﺘﻮﺡ ﺍﻟﻤﺼﺪﺭ .ﺗﻮﺟﺪ ﻣﻌﺎﻟﺠﺎﺕ PHPﻓﻲ ﻣﻌﻈﻢ ﺧﻮﺍﺩﻡ ﺍﻟﻮﻳﺐ.
.ﺃﺑﺪﺍً PHPﻟﺬﻟﻚ ،ﻻ ﻳﺮﻯ ﻣﺴﺘﻌﺮﺽ ﺍﻟﻮﻳﺐ ﻛﻮﺩ HTML.ﻓﻲ ﻣﺴﺘﻨﺪ PHPﻛﻤﺨﺮﺝ ،
ﻭﺍﻟﺬﻱﻳﺤﻞ ﻣﺤﻞ ﻛﻮﺩ HTMLﻛﻮﺩ PHPﺍﻟﺬﻱ ﺗﻢ ﺗﻀﻤﻴﻨﻪ ﻓﻴﻪ .ﻋﺎﺩﺓ ًﻣﺎ ﻳﻨﺘﺞ ﻋﻦ ﻛﻮﺩ HTML
ﻋﻠﻰﺧﺎﺩﻡ ﺍﻟﻮﻳﺐ ﻋﻨﺪﻣﺎ ﻳﻄﻠﺐ ﺍﻟﻤﺴﺘﻌﺮﺽ ﻣﺴﺘﻨﺪ PHPﻭﻣﺼﻤﻤﺔ ﺧﺼﻴﺼﺎً ﻟﺘﻄﺒﻴﻘﺎﺕ
ﺍﻟﻮﻳﺐ.ﻳﺘﻢ ﺗﻔﺴﻴﺮ ﻛﻮﺩ HTMLﻫﻲ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻧﺼﻴﺔ ﻣﻦ ﺟﺎﻧﺐ ﺍﻟﺨﺎﺩﻡ ﻣﻀﻤﻨﺔ ﻓﻲ PHP
ﻳﺘﻴﺢ PHPﻭﺻﻮﻻ ًﺑﺴﻴﻄﺎً ﺇﻟﻰ ﺑﻴﺎﻧﺎﺕ ﻧﻤﻮﺫﺝ ، HTMLﻟﺬﺍ ﻓﺈﻥ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻨﻤﺎﺫﺝ ﺳﻬﻠﺔ
ﺑﺎﺳﺘﺨﺪﺍﻡ .PHPﻳﻮﻓﺮ PHPﺍﻟﺪﻋﻢ ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﺃﻧﻈﻤﺔ ﺇﺩﺍﺭﺓ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ .ﻫﺬﺍ
ﻳﺠﻌﻠﻬﺎﻟﻐﺔ ﻣﻔﻴﺪﺓ ﻟﺒﻨﺎء ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺘﻲ ﺗﺤﺘﺎﺝ ﺇﻟﻰ ﻭﺻﻮﻝ ﺍﻟﻮﻳﺐ ﺇﻟﻰ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ.
ﻻﻳﻌﺘﻤﺪ ﺑﻨﺎء ﺟﻤﻠﺔ ﺑﺎﻳﺜﻮﻥ ﻣﺒﺎﺷﺮﺓ ﻋﻠﻰ ﺃﻱ ﻟﻐﺔ ﺷﺎﺉﻌﺔ ﺍﻻﺳﺘﺨﺪﺍﻡ .ﻳﺘﻢ ﻓﺤﺼﻪ ﻣﻦ
ﺍﻟﻨﻮﻉ ،ﻭﻟﻜﻦ ﻳﺘﻢ ﻛﺘﺎﺑﺘﻪ ﺩﻳﻨﺎﻣﻴﻜﻴﺎً .ﺑﺪﻻ ًﻣﻦ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ،ﺗﺘﻀﻤﻦ Pythonﺛﻼﺛﺔ ﺃﻧﻮﺍﻉ ﻣﻦ
ﻫﻴﺎﻛﻞﺍﻟﺒﻴﺎﻧﺎﺕ :ﺍﻟﻘﻮﺍﺉﻢ ؛ ﻏﻴﺮ ﻗﺎﺑﻠﺔ ﻟﻠﺘﻐﻴﻴﺮ ،ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰﻣﺠﻤﻮﻋﺎﺕ؛ ﻭﺍﻟﺘﺠﺰﺉﺔ ،ﻭﺍﻟﺘﻲ
ﻳﺘﻢﺍﺳﺘﺪﻋﺎﺅﻫﺎﻗﻮﺍﻣﻴﺲ .ﻫﻨﺎﻙ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻃﺮﻕ ﺍﻟﻘﺎﺉﻤﺔ ،ﻣﺜﻞﺇﻟﺤﺎﻕ ،ﺇﺩﺭﺍﺝ ،ﺇﺯﺍﻟﺔ ،ﻭﻧﻮﻉ،
ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺃﺳﺎﻟﻴﺐ ﺍﻟﻘﻮﺍﻣﻴﺲ ،ﻣﺜﻞﻣﻔﺎﺗﻴﺢ ،ﻗﻴﻢ ،ﻧﺴﺦ ،ﻭhas_key.ﺗﺪﻋﻢ
Pythonﺃﻳﻀﺎً ﻗﻮﺍﺉﻢ ﺍﻟﻔﻬﻢ ،ﺍﻟﺘﻲ ﻧﺸﺄﺕ ﻣﻊ ﻟﻐﺔ .Haskellﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺍﺳﺘﻴﻌﺎﺏ
ﺍﻟﻘﺎﺉﻤﺔﻓﻲ ﺍﻟﻘﺴﻢ .15.8
.ﻭﻟﺪﻳﻬﺎﻣﻌﺎﻟﺠﺔ ﺍﺳﺘﺜﻨﺎﺉﻴﺔ .ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺟﻤﻊ ﺍﻟﻘﻤﺎﻣﺔ ﻻﺳﺘﻌﺎﺩﺓ ﺍﻟﻜﺎﺉﻨﺎﺕ ﻋﻨﺪﻣﺎ ﻟﻢ
ﺗﻌﺪﻫﻨﺎﻙ ﺣﺎﺟﺔ ﺇﻟﻴﻬﺎ Perl ،ﻫﻲ ﻟﻐﺔ ﻛﺎﺉﻨﻴﺔ ﺍﻟﺘﻮﺟﻪ ،ﻭﺗﺘﻀﻤﻦ ﺇﻣﻜﺎﻧﻴﺎﺕ ﻣﻄﺎﺑﻘﺔ ﺍﻷﻧﻤﺎﻁ
ﻓﻲPython
ﻳﺘﻢﺗﻮﻓﻴﺮ ﺍﻟﺪﻋﻢ ﻟﺒﺮﻣﺠﺔ ، CGIﻭﻣﻌﺎﻟﺠﺔ ﺍﻟﻨﻤﺎﺫﺝ ﻋﻠﻰ ﻭﺟﻪ ﺍﻟﺨﺼﻮﺹ ،ﺑﻮﺍﺳﻄﺔCGI
ﻭﺣﺪﺓ.ﺗﺘﻮﻓﺮ ﺃﻳﻀﺎً ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﻣﻠﻔﺎﺕ ﺗﻌﺮﻳﻒ ﺍﻻﺭﺗﺒﺎﻁ ﻭﺍﻟﺸﺒﻜﺎﺕ ﻭﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ
ﻗﺎﻋﺪﺓﺍﻟﺒﻴﺎﻧﺎﺕ.
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 100
ﺗﺘﻀﻤﻦ Pythonﺩﻋﻤﺎً ﻟﻠﺘﺰﺍﻣﻦ ﻣﻊ ﻣﺆﺷﺮﺍﺕ ﺍﻟﺘﺮﺍﺑﻂ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ،ﻓﻀﻼ ًﻋﻦ ﺩﻋﻢ ﺑﺮﻣﺠﺔ
ﺍﻟﺸﺒﻜﺔﺑﻤﻘﺎﺑﺴﻬﺎ .ﻛﻤﺎ ﺃﻥ ﻟﺪﻳﻬﺎ ﺩﻋﻤﺎً ﺃﻛﺒﺮ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺃﻛﺜﺮ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻏﻴﺮ
ﺍﻟﻮﻇﻴﻔﻴﺔﺍﻷﺧﺮﻯ.
ﺇﺣﺪﻯﺍﻟﻤﻴﺰﺍﺕ ﺍﻷﻛﺜﺮ ﺇﺛﺎﺭﺓ ﻟﻼﻫﺘﻤﺎﻡ ﻓﻲ Pythonﻫﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﺗﻮﺳﻴﻌﻬﺎ ﺑﺴﻬﻮﻟﺔ
ﺑﻮﺍﺳﻄﺔﺃﻱ ﻣﺴﺘﺨﺪﻡ .ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻻﻣﺘﺪﺍﺩﺍﺕ ﺑﺄﻱ ﻟﻐﺔ ﻣﺘﺮﺟﻤﺔ .ﻳﻤﻜﻦ
ﺃﻥﺗﻀﻴﻒ ﺍﻹﺿﺎﻓﺎﺕ ﻭﻇﺎﺉﻒ ﻭﻣﺘﻐﻴﺮﺍﺕ ﻭﺃﻧﻮﺍﻉ ﻛﺎﺉﻨﺎﺕ .ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﻫﺬﻩ ﺍﻻﻣﺘﺪﺍﺩﺍﺕ
ﻛﺈﺿﺎﻓﺎﺕﻟﻤﺘﺮﺟﻢ ﺑﺎﻳﺜﻮﻥ.
ﺍﻟﻤﻴﺰﺓﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﻤﻤﻴﺰﺓ ﻟﺮﻭﺑﻲ ﻫﻲ ﺃﻧﻬﺎ ﻟﻐﺔ ﻣﻮﺟﻬﺔ ﺑﺤﺘﺔ ،ﺗﻤﺎﻣﺎً ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻣﻊ
.Smalltalkﻛﻞ ﻗﻴﻤﺔ ﺑﻴﺎﻧﺎﺕ ﻫﻲ ﻛﺎﺉﻦ ﻭﻛﻞ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺗﺘﻢ ﻋﺒﺮ ﺍﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﻄﺮﻳﻘﺔ.
ﺍﻟﻌﻮﺍﻣﻞﻓﻲ Rubyﻫﻲ ﺁﻟﻴﺎﺕ ﻧﺤﻮﻳﺔ ﻓﻘﻂ ﻟﺘﺤﺪﻳﺪ ﺍﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﻄﺮﻳﻘﺔ ﻟﻠﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﻘﺎﺑﻠﺔ.
ﻷﻧﻬﺎﻃﺮﻕ ،ﻳﻤﻜﻦ ﺇﻋﺎﺩﺓ ﺗﻌﺮﻳﻔﻬﺎ .ﻳﻤﻜﻦ ﺗﺼﻨﻴﻒ ﺟﻤﻴﻊ ﺍﻟﻔﺉﺎﺕ ،ﺍﻟﻤﺤﺪﺩﺓ ﻣﺴﺒﻘﺎً ﺃﻭ ﺍﻟﻤﺤﺪﺩﺓ
ﻣﻦﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ،ﻋﻠﻰ ﺃﻧﻬﺎ ﻓﺮﻋﻴﺔ.
ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻮﻇﻴﻔﻴﺔ ﻣﻊ ﺍﻟﺘﻤﺪﺩ ﻛﺄﺣﺪ ﺃﻫﺪﺍﻓﻬﺎ ﺍﻷﺳﺎﺳﻴﺔ .ﻣﻦ ﺑﻴﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺃﺛﺮﺕ ﻓﻲ
ﺗﺼﻤﻴﻤﻬﺎ Schemeﻭ Iconﻭ .Python
ﻳﺸﺒﻪ Lua JavaScriptﻣﻦ ﺣﻴﺚ ﺃﻧﻪ ﻻ ﻳﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ﻭﻟﻜﻦ ﻣﻦ
ﺍﻟﻮﺍﺿﺢﺃﻧﻪ ﺗﺄﺛﺮ ﺑﻬﺎ .ﻛﻼﻫﻤﺎ ﻟﻪ ﻛﺎﺉﻨﺎﺕ ﺗﻠﻌﺐ ﺩﻭﺭ ﻛﻞ ﻣﻦ ﺍﻟﻔﺉﺎﺕ ﻭﺍﻟﻜﺎﺉﻨﺎﺕ ﻭﻛﻼﻫﻤﺎ ﻟﻪ
ﻣﻴﺮﺍﺙﺍﻟﻨﻤﻮﺫﺝ ﺍﻷﻭﻟﻲ ﺑﺪﻻ ًﻣﻦ ﻭﺭﺍﺛﺔ ﺍﻟﻄﺒﻘﺔ .ﻭﻣﻊ ﺫﻟﻚ ،ﻓﻲ ، Luaﻳﻤﻜﻦ ﺗﻮﺳﻴﻊ ﺍﻟﻠﻐﺔ ﻟﺪﻋﻢ
ﺍﻟﺒﺮﻣﺠﺔﺍﻟﺸﻴﺉﻴﺔ.
ﻛﻤﺎﻫﻮ ﺍﻟﺤﺎﻝ ﻓﻲ ﺍﻟﻤﺨﻄﻂ ،ﻓﺈﻥ ﻭﻇﺎﺉﻒ Luaﻫﻲ ﻗﻴﻢ ﻣﻦ ﺍﻟﺪﺭﺟﺔ ﺍﻷﻭﻟﻰ .ﺃﻳﻀﺎً ،ﻳﺪﻋﻢ
Luaﻋﻤﻠﻴﺎﺕ ﺍﻹﻏﻼﻕ .ﺗﺴﻤﺢ ﻫﺬﻩ ﺍﻟﻘﺪﺭﺍﺕ ﺑﺎﺳﺘﺨﺪﺍﻣﻪ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ .ﺃﻳﻀﺎً ﻣﺜﻞ
، Schemeﻓﺈﻥ Luaﻟﺪﻳﻬﺎ ﺑﻨﻴﺔ ﺑﻴﺎﻧﺎﺕ ﻭﺍﺣﺪﺓ ﻓﻘﻂ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﻓﻲ ﺣﺎﻟﺔ ، Lua
ﻓﻬﻲﺍﻟﺠﺪﻭﻝ .ﺗﻌﻤﻞ ﺟﺪﺍﻭﻝ Luaﻋﻠﻰ ﺗﻮﺳﻴﻊ ﻣﺼﻔﻮﻓﺎﺕ PHPﺍﻟﻤﺴﺎﻋﺪﺓ ،ﻭﺍﻟﺘﻲ ﺗﺸﻤﻞ
ﻣﺼﻔﻮﻓﺎﺕﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ .ﻳﻤﻜﻦ ﺃﻥ ﺗﺄﺧﺬ ﺍﻹﺷﺎﺭﺍﺕ ﺇﻟﻰ ﻋﻨﺎﺻﺮ ﺍﻟﺠﺪﻭﻝ ﺷﻜﻞ
ﻣﺮﺍﺟﻊﺇﻟﻰ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ ﺃﻭ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ﺃﻭ ﺍﻟﺴﺠﻼﺕ .ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﺪﺍﻻﺕ
ﻫﻲﻗﻴﻢ ﻣﻦ ﺍﻟﺪﺭﺟﺔ ﺍﻷﻭﻟﻰ ،ﻓﻴﻤﻜﻦ ﺗﺨﺰﻳﻨﻬﺎ ﻓﻲ ﺟﺪﺍﻭﻝ ،ﻭﻳﻤﻜﻦ ﺃﻥ ﺗﻌﻤﻞ ﻫﺬﻩ ﺍﻟﺠﺪﺍﻭﻝ
ﻛﻤﺴﺎﺣﺎﺕﺃﺳﻤﺎء.
ﻳﺴﺘﺨﺪﻡ Luaﻣﺠﻤﻮﻋﺔ ﺍﻟﻘﻤﺎﻣﺔ ﻟﻜﺎﺉﻨﺎﺗﻪ ،ﻭﺍﻟﺘﻲ ﻳﺘﻢ ﺗﺨﺼﻴﺺ ﻛﻮﻣﺔ ﻛﻠﻬﺎ .ﺗﺴﺘﺨﺪﻡ
ﺍﻟﻜﺘﺎﺑﺔﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ،ﻛﻤﺎ ﺗﻔﻌﻞ ﻣﻌﻈﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﺍﻷﺧﺮﻯ.
ﻟﻮﺍﻫﻲ ﻟﻐﺔ ﺻﻐﻴﺮﺓ ﻭﺑﺴﻴﻄﺔ ﻧﺴﺒﻴﺎً ،ﻭﺗﺤﺘﻮﻱ ﻋﻠﻰ 21ﻛﻠﻤﺔ ﻣﺤﺠﻮﺯﺓ ﻓﻘﻂ .ﻛﺎﻧﺖ ﻓﻠﺴﻔﺔ
ﺗﺼﻤﻴﻢﺍﻟﻠﻐﺔ ﻫﻲ ﺗﻮﻓﻴﺮ ﺍﻷﺳﺎﺳﻴﺎﺕ ﻭﺍﻟﻄﺮﻕ ﺍﻟﺒﺴﻴﻄﺔ ﻧﺴﺒﻴﺎً ﻟﺘﻮﺳﻴﻊ ﺍﻟﻠﻐﺔ ﻟﻠﺴﻤﺎﺡ ﻟﻬﺎ ﺑﺘﻼﺉﻢ
ﻣﺠﻤﻮﻋﺔﻣﺘﻨﻮﻋﺔ ﻣﻦ ﻣﺠﺎﻻﺕ ﺍﻟﺘﻄﺒﻴﻖ .ﺗﻨﺒﻊ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﻗﺎﺑﻠﻴﺘﻬﺎ ﻟﻠﺘﻮﺳﻌﺔ ﻣﻦ ﺑﻨﻴﺔ ﺑﻴﺎﻧﺎﺕ
ﺍﻟﺠﺪﻭﻝﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ،ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺗﺨﺼﻴﺼﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﻔﻬﻮﻡ Luaﺍﻟﻘﺎﺑﻞ ﻟﻠﺘﻮﺳﻴﻊ.
ﻳﻤﻜﻦﺍﺳﺘﺨﺪﺍﻡ Luaﺑﺴﻬﻮﻟﺔ ﻛﻤﻠﺤﻖ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻟﻠﻐﺎﺕ ﺃﺧﺮﻯ .ﻣﺜﻞ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻨﻔﻴﺬ
ﺍﻟﻤﺒﻜﺮﺓﻟـ ، Javaﺗﻤﺖ ﺗﺮﺟﻤﺔ Luaﺇﻟﻰ ﺭﻣﺰ ﻭﺳﻴﻂ ﻭﺗﻔﺴﻴﺮﻫﺎ .ﻳﻤﻜﻦ ﺑﺴﻬﻮﻟﺔ ﺗﻀﻤﻴﻨﻬﺎ
ﺑﺒﺴﺎﻃﺔﻓﻲ ﺃﻧﻈﻤﺔ ﺃﺧﺮﻯ ،ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺟﺰﺉﻴﺎً ﺇﻟﻰ ﺻﻐﺮ ﺣﺠﻢ ﻣﺘﺮﺟﻤﻬﺎ ،ﻭﺍﻟﺬﻱ ﻳﺒﻠﻎ ﺣﻮﺍﻟﻲ
150ﻛﻴﻠﻮ ﺑﺎﻳﺖ ﻓﻘﻂ.
2.19.1ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ
ﻳﻌﺘﻤﺪ # Cﻋﻠﻰ ++ Cﻭ Javaﻭﻟﻜﻨﻪ ﻳﺘﻀﻤﻦ ﺑﻌﺾ ﺍﻷﻓﻜﺎﺭ ﻣﻦ Delphiﻭ .Visual BASIC
ﻣﺼﻤﻤﻬﺎﺍﻟﺮﺉﻴﺴﻲ ، Anders Hejlsberg ،ﺻﻤﻢ ﺃﻳﻀﺎً Turbo Pascalﻭ ، Delphiﻭﻫﻮ
ﻣﺎﻳﻔﺴﺮ ﺃﺟﺰﺍء ﺩﻟﻔﻲ ﻣﻦ ﺗﺮﺍﺙ .# C
ﺍﻟﻐﺮﺽﻣﻦ # 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ﺇﻟﻰ ﻛﻮﺩ ﺍﻵﻟﺔ ﻗﺒﻞ ﺗﻨﻔﻴﺬﻩ.
ﻟﺼﺎﻟﺢﻣﺼﻤﻤﻲ ، # Cﻭﻣﻊ ﺫﻟﻚ ،ﻓﻲ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺤﺎﻻﺕ ،ﺗﻢ ﺗﺤﺴﻴﻦ ﺇﺻﺪﺍﺭ # C
ﻟﻤﻴﺰﺓ .++ Cﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻣﻠﻒﺗﻌﺪﺍﺩﺗﻌﺪ ﺃﻧﻮﺍﻉ # Cﺃﻛﺜﺮ ﺃﻣﺎﻧﺎً ﻣﻦ ﺃﻧﻮﺍﻉ ، ++ Cﻷﻧﻬﺎ ﻻ
ﻳﺘﻢﺗﺤﻮﻳﻠﻬﺎ ﺿﻤﻨﻴﺎً ﺇﻟﻰ ﺃﻋﺪﺍﺩ ﺻﺤﻴﺤﺔ .ﻫﺬﺍ ﻳﺴﻤﺢ ﻟﻬﻢ ﺑﺄﻥ ﻳﻜﻮﻧﻮﺍ ﺃﻛﺜﺮ ﺃﻣﺎﻧﺎً .ﺍﻝﻫﻴﻜﻞﺗﻢ ﺗﻐﻴﻴﺮ
ﺍﻟﻨﻮﻉﺑﺸﻜﻞ ﻛﺒﻴﺮ ،ﻣﻤﺎ ﺃﺩﻯ ﺇﻟﻰ ﺗﻜﻮﻳﻦ ﻣﻔﻴﺪ ﺣﻘﺎً ،ﺑﻴﻨﻤﺎ ﻓﻲ ++ Cﻻ ﻳﺨﺪﻡ ﺃﻱ ﻏﺮﺽ ﺗﻘﺮﻳﺒﺎً.
ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﻫﻴﺎﻛﻞ # Cﻓﻲ ﺍﻟﻔﺼﻞ # C .12ﻳﺄﺧﺬ ﻃﻌﻨﺔ ﻓﻲ ﺗﺤﺴﻴﻦ
ﻳﺤُﻮﻝّﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ Cﻭ ++ Cﻭ .Javaﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻣﻔﺘﺎﺡ # Cﻓﻲ ﺍﻟﻔﺼﻞ .8
ﺗﺤﻮﻳﻞﺍﻟﻘﻴﻢ ﺑﻴﻦ ﺍﻟﻨﻈﺎﻣﻴﻦ -ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻟﻮﺿﻊ ﻗﻴﻤﺔ ﺃﻭﻟﻴﺔ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﺗﺨﺰﻥ
ﺍﻟﻜﺎﺉﻨﺎﺕ.ﻳﺠﻌﻞ # Cﺍﻟﺘﺤﻮﻳﻞ ﺑﻴﻦ ﻗﻴﻢ ﻧﻈﺎﻣﻲ ﺍﻟﻜﺘﺎﺑﺔ ﺿﻤﻨﻴﺎً ﺟﺰﺉﻴﺎً ﻣﻦ ﺧﻼﻝ ﻋﻤﻠﻴﺎﺕ
ﺍﻟﻤﻼﻛﻤﺔﺍﻟﻀﻤﻨﻴﺔ ﻭﺇﻟﻐﺎء ﺍﻟﻌﺒﻮﺓ ،ﻭﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ 20.12
ﺗﻄﻮﺭ # Cﺑﺸﻜﻞ ﻣﺴﺘﻤﺮ ﻭﺳﺮﻳﻊ ﻣﻨﺬ ﺇﺻﺪﺍﺭﻩ ﺍﻷﻭﻟﻲ ﻓﻲ ﻋﺎﻡ .2002ﺃﺣﺪﺙ ﺇﺻﺪﺍﺭ ﻫﻮ
.C #2010ﻳﻀﻴﻒ C # 2010ﺷﻜﻼ ًﻣﻦ ﺃﺷﻜﺎﻝ ﺍﻟﻜﺘﺎﺑﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ،ﻭﺍﻟﻜﺘﺎﺑﺔ ﺍﻟﻀﻤﻨﻴﺔ ،
ﻭﺍﻷﻧﻮﺍﻉﺍﻟﻤﺠﻬﻮﻟﺔ )ﺍﻧﻈﺮ ﺍﻟﻔﺼﻞ .(6
2.19.3ﺍﻟﺘﻘﻴﻴﻢ
ﻛﺎﻥﻣﻦ ﺍﻟﻤﻔﺘﺮﺽ ﺃﻥ ﺗﻜﻮﻥ # Cﺗﺤﺴﻴﻨﺎً ﻟﻜﻞ ﻣﻦ ++ Cﻭ Javaﻛﻠﻐﺔ ﺑﺮﻣﺠﺔ ﺫﺍﺕ ﺃﻏﺮﺍﺽ
ﻋﺎﻣﺔ.ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻳﻤﻜﻦ ﺍﻟﻘﻮﻝ ﺃﻥ ﺑﻌﺾ ﻣﻴﺰﺍﺗﻪ ﻫﻲ ﺧﻄﻮﺓ ﺇﻟﻰ ﺍﻟﻮﺭﺍء ،ﺇﻻ ﺃﻥ # C
ﺗﺘﻀﻤﻦﺑﻮﺿﻮﺡ ﺑﻌﺾ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺘﻲ ﺗﻨﻘﻠﻬﺎ ﺇﻟﻰ ﻣﺎ ﻭﺭﺍء ﺳﺎﺑﻘﺎﺗﻬﺎ .ﺑﺎﻟﺘﺄﻛﻴﺪ ﺳﻴﺘﻢ ﺍﻋﺘﻤﺎﺩ
ﺑﻌﺾﻣﻴﺰﺍﺗﻪ ﺑﻮﺍﺳﻄﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﺍﻟﻤﺴﺘﻘﺒﻞ ﺍﻟﻘﺮﻳﺐ .ﺍﻟﺒﻌﺾ ﻳﻔﻌﻞ ﺑﺎﻟﻔﻌﻞ.
= [ﺍﻟﻌﺪﺍﺩ] intList
Int32.Parse )Console.readLine )(( ،
؛ { - //ﻧﻬﺎﻳﺔ ﻟـ )ﻋﺪﺍﺩ // ...ﺣﺴﺎﺏ ﺍﻟﻤﺘﻮﺳﻂ [
ﻋﺪﺍﺩ] sum + = intList
ﺁﺧﺮ
ﻭﺣﺪﺓﺍﻟﺘﺤﻜﻢ.
"ﺧﻄﺄ -ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ"( ؛ { - //ﻧﻬﺎﻳﺔ ﺍﻟﻄﺮﻳﻘﺔ
ﺍﻟﺮﺉﻴﺴﻴﺔ
{ - //ﻧﻬﺎﻳﺔ ﺍﻟﻔﺉﺔ Ch2example
2.20.1 XSLT
ﻟﻐﺔﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﻤﻮﺳﻌﺔ ) (XMLﻫﻲ ﻟﻐﺔ .metamarkupﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﻟﺘﺤﺪﻳﺪ ﻟﻐﺎﺕ
ﺍﻟﺘﺮﻣﻴﺰ.ﺗﺴﺘﺨﺪﻡ ﻟﻐﺎﺕ ﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﻤﺸﺘﻘﺔ ﻣﻦ XMLﻟﺘﺤﺪﻳﺪ ﻣﺴﺘﻨﺪﺍﺕ ﺍﻟﺒﻴﺎﻧﺎﺕ ،ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰ
ﻣﺴﺘﻨﺪﺍﺕ .XMLﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻣﺴﺘﻨﺪﺍﺕ XMLﻗﺎﺑﻠﺔ ﻟﻠﻘﺮﺍءﺓ ﺍﻟﺒﺸﺮﻳﺔ ،ﺇﻻ ﺃﻧﻬﺎ ﺗﺘﻢ
ﻣﻌﺎﻟﺠﺘﻬﺎﺑﻮﺍﺳﻄﺔ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ .ﺗﺘﻜﻮﻥ ﻫﺬﻩ ﺍﻟﻤﻌﺎﻟﺠﺔ ﻓﻲ ﺑﻌﺾ ﺍﻷﺣﻴﺎﻥ ﻓﻘﻂ ﻣﻦ ﻋﻤﻠﻴﺎﺕ
ﺍﻟﺘﺤﻮﻳﻞﺇﻟﻰ ﺍﻟﻨﻤﺎﺫﺝ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻋﺮﺿﻬﺎ ﺃﻭ ﻃﺒﺎﻋﺘﻬﺎ ﺑﺸﻜﻞ ﻓﻌﺎﻝ .ﻓﻲ ﻛﺜﻴﺮ ﻣﻦ ﺍﻟﺤﺎﻻﺕ ،
ﺗﻜﻮﻥﻫﺬﻩ ﺍﻟﺘﺤﻮﻳﻼﺕ ﺇﻟﻰ ، HTMLﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻋﺮﺿﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺴﺘﻌﺮﺽ ﺍﻟﻮﻳﺐ .ﻓﻲ
ﺣﺎﻻﺕﺃﺧﺮﻯ ،ﺗﺘﻢ ﻣﻌﺎﻟﺠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺍﻟﻤﺴﺘﻨﺪ ،ﺗﻤﺎﻣﺎً ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻣﻊ ﺃﺷﻜﺎﻝ
ﻣﻠﻔﺎﺕﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻷﺧﺮﻯ.
ﻣﻌﺎﻟﺞ XSLTﻫﻮ ﺑﺮﻧﺎﻣﺞ ﻳﺄﺧﺬ ﻛﻤﺪﺧﻼﺕ ﻣﺴﺘﻨﺪ ﺑﻴﺎﻧﺎﺕ XMLﻭﻭﺛﻴﻘﺔ ) XSLTﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ
ﺃﻳﻀﺎًﻓﻲ ﺷﻜﻞ ﻣﺴﺘﻨﺪ .(XMLﻓﻲ ﻫﺬﻩ ﺍﻟﻤﻌﺎﻟﺠﺔ ،ﻳﺘﻢ ﺗﺤﻮﻳﻞ ﻣﺴﺘﻨﺪ ﺑﻴﺎﻧﺎﺕ XMLﺇﻟﻰ XML
ﺁﺧﺮ
105 2.20ﺗﺮﻣﻴﺰ /ﺑﺮﻣﺠﺔ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺨﺘﻠﻄﺔ
ﻳﺤﺘﻮﻱ XSLTﺃﻳﻀﺎً ﻋﻠﻰ ﺑﻨﻴﺎﺕ ﺑﺮﻣﺠﺔ ﺑﻤﺴﺘﻮﻯ ﺃﺩﻧﻰ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻳﺘﻢ ﺗﻀﻤﻴﻦ
ﺑﻨﻴﺔﺍﻟﺘﻜﺮﺍﺭ ،ﻭﺍﻟﺘﻲ ﺗﺴﻤﺢ ﺑﺘﺤﺪﻳﺪ ﺃﺟﺰﺍء ﻣﺘﻜﺮﺭﺓ ﻣﻦ ﻣﺴﺘﻨﺪ .XMLﻫﻨﺎﻙ ﺃﻳﻀﺎ ﻋﻤﻠﻴﺔ ﻓﺮﺯ.
ﻫﺬﻩﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺫﺍﺕ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻷﺩﻧﻰ ﻣﺤﺪﺩﺓ ﺑﻌﻼﻣﺎﺕ ، XSLTﻣﺜﻞ >ﻟﻜﻞ<.
2.20.2 JSP
ﺍﻟﺠﺰء"ﺍﻷﺳﺎﺳﻲ" ﻣﻦ ﻣﻜﺘﺒﺔ ﺍﻟﻌﻼﻣﺎﺕ ﺍﻟﻘﻴﺎﺳﻴﺔ ﻟﺼﻔﺤﺎﺕ ﺧﺎﺩﻡ ﺟﺎﻓﺎ ) (JSTLﻫﻮ ﻟﻐﺔ ﻫﺠﻴﻨﺔ
ﺃﺧﺮﻯﻟﻠﺘﺮﻣﻴﺰ /ﺍﻟﺒﺮﻣﺠﺔ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺍﺧﺘﻼﻑ ﺷﻜﻠﻬﺎ ﻭﺍﻟﻐﺮﺽ ﻣﻨﻬﺎ ﻋﻦ ﻟﻐﺔ .XSLTﻗﺒﻞ
ﻣﻨﺎﻗﺸﺔ ، JSTLﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺗﻘﺪﻳﻢ ﺃﻓﻜﺎﺭ servletsﻭﺻﻔﺤﺎﺕ ﺧﺎﺩﻡ ( .Java )JSPﺃservlet
ﻫﻮﻣﺜﻴﻞ ﻟﻔﺉﺔ Javaﺗﻮﺟﺪ ﻋﻠﻰ ﻧﻈﺎﻡ ﺧﺎﺩﻡ ﻭﻳﺐ ﻭﻳﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻋﻠﻰ ﻧﻈﺎﻡ ﺧﺎﺩﻡ ﺍﻟﻮﻳﺐ .ﻳﺘﻢ
ﻃﻠﺐﺗﻨﻔﻴﺬ servletﺑﻮﺍﺳﻄﺔ ﻭﺛﻴﻘﺔ ﺗﻌﻠﻴﻢ ﻳﺘﻢ ﻋﺮﺿﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺴﺘﻌﺮﺽ ﻭﻳﺐ .ﻳﺘﻢ ﺇﺭﺟﺎﻉ
ﻣﺨﺮﺟﺎﺕ ، servletﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻓﻲ ﺷﻜﻞ ﻭﺛﻴﻘﺔ ، HTMLﺇﻟﻰ ﺑﺮﻧﺎﻣﺞ ﺍﻻﺳﺘﻌﺮﺍﺽ ﺍﻟﻤﻄﻠﻮﺏ.
ﺑﺮﻧﺎﻣﺞﻳﺘﻢ ﺗﺸﻐﻴﻠﻪ ﻓﻲ ﻋﻤﻠﻴﺔ ﺧﺎﺩﻡ ﺍﻟﻮﻳﺐ ،ﻭﻳﺴﻤﻰ aﺣﺎﻭﻳﺔ ،servletﻳﺘﺤﻜﻢ ﻓﻲ ﺗﻨﻔﻴﺬ
.servletsﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ Servletsﺑﺸﻜﻞ ﺷﺎﺉﻊ ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻨﻤﺎﺫﺝ ﻭﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﻗﺎﻋﺪﺓ
ﺍﻟﺒﻴﺎﻧﺎﺕ.
ﺗﻌﺎﻟﺞﺍﻟﺤﺎﻭﻳﺔ ﺃﺟﺰﺍء JSTLﻣﻦ ﻣﺴﺘﻨﺪﺍﺕ JSPﺑﻄﺮﻳﻘﺔ ﻣﺸﺎﺑﻬﺔ ﻟﻜﻴﻔﻴﺔ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻷﻭﻟﻲ C
++ C /ﻟﺒﺮﺍﻣﺞ Cﻭ .++ Cﺃﻭﺍﻣﺮ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻷﻭﻟﻲ ﻫﻲ ﺗﻌﻠﻴﻤﺎﺕ ﻟﻠﻤﻌﺎﻟﺞ ﺍﻷﻭﻟﻲ ﻟﺘﺤﺪﻳﺪ ﻛﻴﻔﻴﺔ
ﺇﻧﺸﺎءﻣﻠﻒ ﺍﻹﺧﺮﺍﺝ ﻣﻦ ﻣﻠﻒ ﺍﻹﺩﺧﺎﻝ .ﻭﺑﺎﻟﻤﺜﻞ ،ﻓﺈﻥ ﻋﻨﺎﺻﺮ ﺗﺼﺮﻑ ﺗﺤﻜﻢ JSTLﻫﻲ
ﺗﻌﻠﻴﻤﺎﺕﻟﻤﻌﺎﻟﺞ JSPﻟﺘﺤﺪﻳﺪ ﻛﻴﻔﻴﺔ ﺑﻨﺎء ﻣﻠﻒ ﻣﺨﺮﺟﺎﺕ XMLﻣﻦ ﻣﻠﻒ ﺇﺩﺧﺎﻝ .XML
ﻣﻠﺨﺺ
ﻟﻘﺪﺑﺤﺜﻨﺎ ﻓﻲ ﺑﻴﺉﺎﺕ ﺍﻟﺘﻄﻮﻳﺮ ﻭﺍﻟﺘﻄﻮﻳﺮ ﻟﻌﺪﺩ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ .ﻳﻤﻨﺢ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﺍﻟﻘﺎﺭﺉ
ﻣﻨﻈﻮﺭﺍًﺟﻴﺪﺍً ﻟﻠﻘﻀﺎﻳﺎ ﺍﻟﺤﺎﻟﻴﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ .ﻟﻘﺪ ﻣﻬﺪﻧﺎ ﺍﻟﻄﺮﻳﻖ ﻹﺟﺮﺍء ﻣﻨﺎﻗﺸﺔ ﻣﺘﻌﻤﻘﺔ
ﺣﻮﻝﺍﻟﺴﻤﺎﺕ ﺍﻟﻤﻬﻤﺔ ﻟﻠﻐﺎﺕ ﺍﻟﻤﻌﺎﺻﺮﺓ.
ﺣﻮﺍﺷﻲﺑﺒﻠﻴﻮﻏﺮﺍﻓﻴﺔ
ﺭﺑﻤﺎﻳﻜﻮﻥ ﺃﻫﻢ ﻣﺼﺪﺭ ﻟﻠﻤﻌﻠﻮﻣﺎﺕ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ ﺣﻮﻝ ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﺒﻜﺮﺓ ﻫﻮﺗﺎﺭﻳﺦ ﻟﻐﺎﺕ
ﺍﻟﺒﺮﻣﺠﺔ ،ﺣﺮﺭﻩ ﺭﻳﺘﺸﺎﺭﺩ ﻭﻳﻜﺴﻠﺒﻼﺕ ) .(1981ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﻄﻮﻳﺮﻳﺔ ﻭﺍﻟﺒﻴﺉﺔ ﻟـ 13
ﻟﻐﺔﺑﺮﻣﺠﺔ ﻣﻬﻤﺔ ،ﻛﻤﺎ ﺭﻭﻯ ﺍﻟﻤﺼﻤﻤﻮﻥ ﺃﻧﻔﺴﻬﻢ .ﻋﻤﻞ ﻣﻤﺎﺛﻞ ﻧﺘﺞ ﻋﻦ ﻣﺆﺗﻤﺮ "ﺍﻟﺘﺎﺭﻳﺦ"
ﺍﻟﺜﺎﻧﻲ ،ﻧﺸﺮ ﻛﻌﺪﺩ ﺧﺎﺹ ﻣﻦﺇﺷﻌﺎﺭﺍﺕ .)ACM SIGPLANﺃ( .ﻓﻲ ﻫﺬﺍ ﺍﻟﻌﻤﻞ ،ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ
ﺗﺎﺭﻳﺦﻭﺗﻄﻮﺭ 13ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺃﺧﺮﻯ ACM ، 1993
ﺍﻟﻮﺭﻗﺔ"ﺍﻟﺘﻄﻮﻳﺮ ﺍﻟﻤﺒﻜﺮ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ" ) ، (Knuth and Pardo، 1977ﻭﻫﻲ ﺟﺰء ﻣﻦ
ﻣﻮﺳﻮﻋﺔﻋﻠﻮﻡ ﻭﺗﻜﻨﻮﻟﻮﺟﻴﺎ ﺍﻟﺤﺎﺳﻮﺏ ﻫﻮ ﻋﻤﻞ ﻣﻤﺘﺎﺯ ﻣﻜﻮﻥ ﻣﻦ 85ﺻﻔﺤﺔ ﻳﻌﺮﺽ ﺗﻔﺎﺻﻴﻞ
ﺗﻄﻮﺭﺍﻟﻠﻐﺎﺕ ﺣﺘﻰ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ .ﺗﺘﻀﻤﻦ ﺍﻟﻮﺭﻗﺔ ﺃﻣﺜﻠﺔ ﻋﻠﻰ ﺑﺮﺍﻣﺞ ﻹﺛﺒﺎﺕ ﻣﻴﺰﺍﺕ
ﺍﻟﻌﺪﻳﺪﻣﻦ ﺗﻠﻚ ﺍﻟﻠﻐﺎﺕ.
ﺭﺍﺟﻊﺍﻷﺳﺉﻠﺔ
.6ﻣﺎ ﻫﻲ ﻗﺪﺭﺓ ﺍﻷﺟﻬﺰﺓ ﺍﻟﺘﻲ ﻇﻬﺮﺕ ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ ﻛﻤﺒﻴﻮﺗﺮ IBM 704ﺍﻟﺘﻲ ﺃﺛﺮﺕ ﺑﺸﺪﺓ ﻋﻠﻰ
ﺗﻄﻮﺭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ؟ ﺍﺷﺮﺡ ﺍﻟﺴﺒﺐ.
.7ﻓﻲ ﺃﻱ ﺳﻨﺔ ﺑﺪﺃ ﻣﺸﺮﻭﻉ ﺗﺼﻤﻴﻢ ﻓﻮﺭﺗﺮﺍﻥ؟
.8ﻣﺎ ﻫﻮ ﻣﺠﺎﻝ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻷﺳﺎﺳﻲ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﺍﻟﻮﻗﺖ ﺍﻟﺬﻱ ﺗﻢ ﻓﻴﻪ ﺗﺼﻤﻴﻢ
Fortran؟
.9ﻣﺎ ﻫﻮ ﻣﺼﺪﺭ ﻛﻞ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺘﺪﻓﻖ ﺍﻟﺨﺎﺻﺔ ﺑـ Fortran I؟
.10ﻣﺎ ﻫﻲ ﺃﻫﻢ ﻣﻴﺰﺓ ﺗﻤﺖ ﺇﺿﺎﻓﺘﻬﺎ ﺇﻟﻰ Fortran Iﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ Fortran II؟
.11ﻣﺎ ﻫﻲ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺘﺪﻓﻖ ﺍﻟﺘﻲ ﺗﻤﺖ ﺇﺿﺎﻓﺘﻬﺎ ﺇﻟﻰ Fortran IVﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ Fortran 77؟
.45ﻣﺎ ﻫﻮ ﻧﻤﻮﺫﺝ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺬﻱ ﻻ ﺗﺪﻋﻤﻪ Goﺗﻘﺮﻳﺒﺎً ﺟﻤﻴﻊ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺼﻤﻤﺔ ﺣﺪﻳﺜﺎً؟
ﺗﻢﺿﺒﻂ ﺍﻟﻤﺸﻜﻠﺔ
.1ﻣﺎ ﻫﻲ ﻣﻴﺰﺍﺕ Plankalkülﺍﻟﺘﻲ ﺗﻌﺘﻘﺪ ﺃﻧﻬﺎ ﺳﻴﻜﻮﻥ ﻟﻬﺎ ﺍﻟﺘﺄﺛﻴﺮ ﺍﻷﻛﺒﺮ ﻋﻠﻰ Fortran 0
ﺇﺫﺍﻛﺎﻥ ﻣﺼﻤﻤﻮ Fortranﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺑـ Plankalkül؟
.7ﺑﺪﺃﺕ LISPﻛﻠﻐﺔ ﻭﻇﻴﻔﻴﺔ ﺧﺎﻟﺼﺔ ﻭﻟﻜﻨﻬﺎ ﺍﻛﺘﺴﺒﺖ ﺗﺪﺭﻳﺠﻴﺎ ًﺍﻟﻤﺰﻳﺪ ﻭﺍﻟﻤﺰﻳﺪ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ
ﺍﻟﻀﺮﻭﺭﻳﺔ.ﻟﻤﺎﺫﺍ؟
.8ﺻﻒِ ﺑﺎﻟﺘﻔﺼﻴﻞ ﺍﻷﺳﺒﺎﺏ ﺍﻟﺜﻼﺛﺔ ﺍﻷﻛﺜﺮ ﺃﻫﻤﻴﺔ ،ﺑﺮﺃﻳﻚ ،ﻟﻤﺎﺫﺍ ﻟﻢ ﺗﺼﺒﺢ ALGOL 60
ﻟﻐﺔﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ.
.9ﻟﻤﺎﺫﺍ ،ﻓﻲ ﺭﺃﻳﻚ ،ﺳﻤﺤﺖ COBOLﺑﻤﻌﺮﻓﺎﺕ ﻃﻮﻳﻠﺔ ﺑﻴﻨﻤﺎ ﻟﻢ ﺗﺴﻤﺢ Fortranﻭ
ALGOLﺑﺬﻟﻚ؟
ﺍﻟﻔﺼﻞ 2ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ 110
.13ﻣﺎ ﻫﻮ ﺍﻟﺴﺒﺐ ﺍﻟﺮﺉﻴﺴﻲ ﻭﺭﺍء ﺍﺳﺘﺨﺪﺍﻡ PL / Iﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺃﻛﺜﺮ ﻣﻦ ALGOL 68
؟
.14ﻣﺎ ﻫﻲ ﺍﻟﺤﺠﺞ ﺍﻟﻤﺆﻳﺪﺓ ﻭﺍﻟﻤﻌﺎﺭﺿﺔ ﻟﻔﻜﺮﺓ ﺍﻟﻠﻐﺔ ﻏﻴﺮ ﺍﻟﻤﺼﻨﻌّﺔ؟
.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
3.1ﻣﻘﺪﻣﺔ
ﺗﻌﺘﺒﺮﻣﻬﻤﺔ ﺗﻘﺪﻳﻢ ﻭﺻﻒ ﻣﻮﺟﺰ ﻭﻣﻔﻬﻮﻡ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺃﻣﺮﺍً ﺻﻌﺒﺎً ﻭﻟﻜﻨﻪ ﺿﺮﻭﺭﻱ ﻟﻨﺠﺎﺡ ﺍﻟﻠﻐﺔ.
ﺗﻢﺗﻘﺪﻳﻢ ALGOL 60ﻭ ALGOL 68ﻷﻭﻝ ﻣﺮﺓ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺃﻭﺻﺎﻑ ﺭﺳﻤﻴﺔ ﻣﻮﺟﺰﺓ ؛ ﻓﻲ ﻛﻠﺘﺎ
ﺍﻟﺤﺎﻟﺘﻴﻦ ،ﻭﻣﻊ ﺫﻟﻚ ،ﻟﻢ ﻳﻜﻦ ﻣﻦ ﺍﻟﺴﻬﻞ ﻓﻬﻢ ﺍﻷﻭﺻﺎﻑ ،ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺟﺰﺉﻴﺎً ﺇﻟﻰ ﺍﺳﺘﺨﺪﺍﻡ
ﻛﻞﻣﻨﻬﻤﺎ ﺗﺮﻣﻴﺰﺍً ﺟﺪﻳﺪﺍً .ﻧﺘﻴﺠﺔ ﻟﺬﻟﻚ ،ﻋﺎﻧﺖ ﻣﺴﺘﻮﻳﺎﺕ ﻗﺒﻮﻝ ﺍﻟﻠﻐﺘﻴﻦ .ﻣﻦ ﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ،
ﻋﺎﻧﺖﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﻣﻦ ﻣﺸﻜﻠﺔ ﻭﺟﻮﺩ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻬﺠﺎﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻗﻠﻴﻼ ً ،ﻧﺘﻴﺠﺔ ﻟﺘﻌﺮﻳﻒ
ﺑﺴﻴﻂﻭﻟﻜﻨﻪ ﻏﻴﺮ ﺭﺳﻤﻲ ﻭﻏﻴﺮ ﺩﻗﻴﻖ.
ﻭﺍﺣﺪﺓﻣﻦ ﺍﻟﻤﺸﺎﻛﻞ ﻓﻲ ﻭﺻﻒ ﺍﻟﻠﻐﺔ ﻫﻮ ﺗﻨﻮﻉ ﺍﻟﻨﺎﺱ ﺍﻟﺬﻳﻦ ﻳﺠﺐ ﺃﻥ ﻳﻔﻬﻤﻮﺍ ﺍﻟﻮﺻﻒ.
ﻭﻣﻦﺑﻴﻦ ﻫﺆﻻء ﺍﻟﻤﻘﻴﻤِّﻮﻥ ﺍﻷﻭﻟﻴﻮﻥ ﻭﺍﻟﻤﻨﻔﺬﻭﻥ ﻭﺍﻟﻤﺴﺘﺨﺪﻣﻮﻥ .ﺗﺨﻀﻊ ﻣﻌﻈﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ
ﺍﻟﺠﺪﻳﺪﺓﻟﻔﺘﺮﺓ ﻣﻦ ﺍﻟﺘﺪﻗﻴﻖ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺍﻟﻤﺤﺘﻤﻠﻴﻦ ،ﻏﺎﻟﺒﺎً ﺍﻷﺷﺨﺎﺹ ﺩﺍﺧﻞ
ﺍﻟﻤﻨﻈﻤﺔﺍﻟﺘﻲ ﺗﻮﻇﻒ ﻣﺼﻤﻢ ﺍﻟﻠﻐﺔ ،ﻗﺒﻞ ﺍﻛﺘﻤﺎﻝ ﺗﺼﻤﻴﻤﺎﺗﻬﺎ .ﻫﺆﻻء ﻫﻢ ﺍﻟﻤﻘﻴﻤﻮﻥ ﺍﻷﻭﻟﻴﻮﻥ.
ﻳﻌﺘﻤﺪﻧﺠﺎﺡ ﺩﻭﺭﺓ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺑﺸﻜﻞ ﻛﺒﻴﺮ ﻋﻠﻰ ﻭﺿﻮﺡ ﺍﻟﻮﺻﻒ.
ﻣﻦﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻣﻨﻔﺬﻱ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻧﻮﺍ ﻗﺎﺩﺭﻳﻦ ﻋﻠﻰ ﺗﺤﺪﻳﺪ ﻛﻴﻔﻴﺔ ﺗﻜﻮﻳﻦ
ﺍﻟﺘﻌﺒﻴﺮﺍﺕﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻭﺣﺪﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻟﻠﻐﺔ ،ﻭﻛﺬﻟﻚ ﺗﺄﺛﻴﺮﻫﺎ ﺍﻟﻤﻘﺼﻮﺩ ﻋﻨﺪ ﺗﻨﻔﻴﺬﻫﺎ .ﺗﺘﺤﺪﺩ
ﺻﻌﻮﺑﺔﻋﻤﻞ ﺍﻟﻤﻨﻔﺬﻳﻦ ،ﺟﺰﺉﻴﺎً ،ﻣﻦ ﺧﻼﻝ ﺍﻛﺘﻤﺎﻝ ﻭﺩﻗﺔ ﻭﺻﻒ ﺍﻟﻠﻐﺔ.
ﺃﺧﻴﺮﺍً ،ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻣﺴﺘﺨﺪﻣﻮ ﺍﻟﻠﻐﺔ ﻗﺎﺩﺭﻳﻦ ﻋﻠﻰ ﺗﺤﺪﻳﺪ ﻛﻴﻔﻴﺔ ﺗﺸﻔﻴﺮ ﺣﻠﻮﻝ ﺍﻟﺒﺮﺍﻣﺞ
ﻣﻦﺧﻼﻝ ﺍﻟﺮﺟﻮﻉ ﺇﻟﻰ ﺩﻟﻴﻞ ﻣﺮﺟﻌﻲ ﻟﻠﻐﺔ .ﺗﺪﺧﻞ ﺍﻟﻜﺘﺐ ﺍﻟﻤﺪﺭﺳﻴﺔ ﻭﺍﻟﺪﻭﺭﺍﺕ ﻓﻲ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔ ،
ﻟﻜﻦﻛﺘﻴﺒﺎﺕ ﺍﻟﻠﻐﺔ ﻋﺎﺩﺓ ﻣﺎ ﺗﻜﻮﻥ ﺍﻟﻤﺼﺪﺭ ﺍﻟﻮﺣﻴﺪ ﺍﻟﻤﻮﺛﻮﻕ ﻟﻠﻤﻌﻠﻮﻣﺎﺕ ﺍﻟﻤﻄﺒﻮﻋﺔ ﺣﻮﻝ ﺍﻟﻠﻐﺔ.
ﻳﻤﻜﻦﺗﻘﺴﻴﻢ ﺩﺭﺍﺳﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ،ﻣﺜﻞ ﺩﺭﺍﺳﺔ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻄﺒﻴﻌﻴﺔ ،ﺇﻟﻰ ﺍﻣﺘﺤﺎﻧﺎﺕ
ﻟﻐﻮﻳﺔﻭﺩﻻﻻﺕ .ﺍﻝﺑﻨﺎء ﺍﻟﺠﻤﻠﺔﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﺷﻜﻞ ﺗﻌﺒﻴﺮﺍﺗﻬﺎ ﻭﺑﻴﺎﻧﺎﺗﻬﺎ ﻭﻭﺣﺪﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﺇﻧﻪ
ﺩﻻﻻﺕﻫﻮ ﻣﻌﻨﻰ ﺗﻠﻚ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻭﺣﺪﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺑﻨﺎء ﺟﻤﻠﺔ
Javaﺑﻴﻨﻤﺎﺍﻟﺒﻴﺎﻥ ﻫﻮ
ﺑﻴﻨﻤﺎ)(boolean_expr
115 3.2ﺍﻟﻤﺸﻜﻠﺔ ﺍﻟﻌﺎﻣﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ
ﺩﻻﻻﺕﻧﻤﻮﺫﺝ ﺍﻟﺒﻴﺎﻥ ﻫﺬﺍ ﻫﻲ ﺃﻧﻪ ﻋﻨﺪﻣﺎ ﺗﻜﻮﻥ ﺍﻟﻘﻴﻤﺔ ﺍﻟﺤﺎﻟﻴﺔ ﻟﻠﺘﻌﺒﻴﺮ ﺍﻟﻤﻨﻄﻘﻲ ﺻﺤﻴﺤﺔ ،ﻳﺘﻢ
ﺗﻨﻔﻴﺬﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﻤﻀﻤﻨﺔ .ﺧﻼﻑ ﺫﻟﻚ ،ﻳﺴﺘﻤﺮ ﺍﻟﺘﺤﻜﻢ ﺑﻌﺪﺑﻴﻨﻤﺎﺑﻨﺎء .ﺛﻢ ﻳﻌﻮﺩ ﻋﻨﺼﺮ ﺍﻟﺘﺤﻜﻢ
ﺿﻤﻨﻴﺎًﺇﻟﻰ ﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﻤﻨﻄﻘﻲ ﻟﺘﻜﺮﺍﺭ ﺍﻟﻌﻤﻠﻴﺔ.
ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﻤﺎ ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻢ ﻓﺼﻠﻬﻤﺎ ﻷﻏﺮﺍﺽ ﺍﻟﻤﻨﺎﻗﺸﺔ ،ﺇﻻ ﺃﻥ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ
ﻭﺍﻟﺪﻻﻻﺕﻳﺮﺗﺒﻄﺎﻥ ﺍﺭﺗﺒﺎﻃﺎً ﻭﺛﻴﻘﺎً .ﻓﻲ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺟﻴﺪﺓ ﺍﻟﺘﺼﻤﻴﻢ ،ﻳﺠﺐ ﺃﻥ ﺗﺘﺒﻊ ﺍﻟﺪﻻﻻﺕ
ﻣﺒﺎﺷﺮﺓﻣﻦ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ؛ ﺃﻱ ﺃﻥ ﻇﻬﻮﺭ ﺍﻟﺒﻴﺎﻥ ﻳﺠﺐ ﺃﻥ ﻳﻮﺣﻲ ﺑﻘﻮﺓ ﺑﻤﺎ ﻳﻘُﺼﺪ ﺑﺎﻟﺒﻴﺎﻥ ﺗﺤﻘﻴﻘﻪ.
ﺇﻥﻭﺻﻒ ﺍﻟﻨﺤﻮ ﺃﺳﻬﻞ ﻣﻦ ﻭﺻﻒ ﺍﻟﺪﻻﻻﺕ ،ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺟﺰﺉﻴﺎً ﺇﻟﻰ ﺗﻮﻓﺮ ﺗﺪﻭﻳﻦ ﻣﻮﺟﺰ
ﻭﻣﻘﺒﻮﻝﻋﺎﻟﻤﻴﺎً ﻟﻮﺻﻒ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ،ﻭﻟﻜﻦ ﻟﻢ ﻳﺘﻢ ﺗﻄﻮﻳﺮ ﺃﻱ ﻣﻨﻬﺎ ﺣﺘﻰ ﺍﻵﻥ ﻟﻠﺪﻻﻻﺕ.
ﻏﺎﻟﺒﺎًﻣﺎ ﻻ ﺗﺘﻀﻤﻦ ﺍﻷﻭﺻﺎﻑ ﺍﻟﺮﺳﻤﻴﺔ ﻟﺒﻨﺎء ﺟﻤﻠﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ،ﻣﻦ ﺃﺟﻞ ﺍﻟﺒﺴﺎﻃﺔ ،
ﺃﻭﺻﺎﻓﺎًﻟﻠﻮﺣﺪﺍﺕ ﺍﻟﻨﺤﻮﻳﺔ ﺫﺍﺕ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻷﺩﻧﻰ .ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﺼﻐﻴﺮﺓ.lexemes
ﻳﻤﻜﻦﺇﻋﻄﺎء ﻭﺻﻒ ﺍﻟﻤﻔﺮﺩﺍﺕ ﺑﻮﺍﺳﻄﺔ ﻣﻮﺍﺻﻔﺔ ﻣﻌﺠﻤﻴﺔ ،ﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻋﺎﺩﺓ ًﻣﻨﻔﺼﻠﺔ ﻋﻦ
ﺍﻟﻮﺻﻒﺍﻟﻨﺤﻮﻱ ﻟﻠﻐﺔ .ﺗﺸﺘﻤﻞ ﻣﻌﺠﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻋﻠﻰ ﺍﻟﺤﺮﻭﻑ ﺍﻟﺮﻗﻤﻴﺔ ﻭﺍﻟﻤﻌﺎﻣﻼﺕ
ﻭﺍﻟﻜﻠﻤﺎﺕﺍﻟﺨﺎﺻﺔ ،ﻣﻦ ﺑﻴﻦ ﺃﻣﻮﺭ ﺃﺧﺮﻯ .ﻳﻤﻜﻦ ﻟﻠﻤﺮء ﺃﻥ ﻳﻔﻜﺮ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ﻋﻠﻰ ﺃﻧﻬﺎ ﺳﻼﺳﻞ
ﻣﻦﺍﻟﻤﻌﺎﺟﻢ ﻭﻟﻴﺲ ﻛﺸﺨﺼﻴﺎﺕ.
mult_op *
ﺍﻟﻤﻌﺮﻑ ﻋﺪﺩ
plus_op +
int_literal 17
ﻓﺎﺻﻠﺔﻣﻨﻘﻮﻃﺔ ؛
ﺇﻥﺗﻮﺻﻴﻔﺎﺕ ﺍﻟﻠﻐﺔ ﺍﻟﻨﻤﻮﺫﺟﻴﺔ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﺑﺴﻴﻄﺔ ﻟﻠﻐﺎﻳﺔ ،ﻭﺗﺸﻤﻞ ﻣﻌﻈﻤﻬﺎ ﺃﻭﺻﺎﻓﺎً
ﻟﻜﺴﻴﻢ.
ﺟﺰءﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻣﻦ ﺍﻟﻤﺘﺮﺟﻢ ﻫﻮ ﺃﺩﺍﺓ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﺘﺮﺟﻤﻬﺎ ﺍﻟﻤﺘﺮﺟﻢ.
ﻓﻲﻫﺬﺍ ﺍﻟﺪﻭﺭ ،ﻻ ﺗﺤﺘﺎﺝ ﺃﺩﺍﺓ ﺍﻟﺘﻌﺮﻑّ ﺇﻟﻰ ﺍﺧﺘﺒﺎﺭ ﺟﻤﻴﻊ ﺍﻟﺴﻼﺳﻞ ﺍﻟﻤﻤﻜﻨﺔ ﻟﻸﺣﺮﻑ ﻣﻦ
ﻣﺠﻤﻮﻋﺔﻣﺎ ﻟﺘﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ ﻛﺎﻧﺖ ﻛﻞ ﻣﻨﻬﺎ ﺑﺎﻟﻠﻐﺔ .ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ،ﻻ ﻳﺤﺘﺎﺝ ﺍﻷﻣﺮ ﺇﻻ ﺇﻟﻰ ﺗﺤﺪﻳﺪ
ﻣﺎﺇﺫﺍ ﻛﺎﻧﺖ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻘﺪﻣﺔ ﺑﺎﻟﻠﻐﺔ ﺃﻡ ﻻ .ﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﻳﻘﻮﻡ ﻣﺤﻠﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺑﺘﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ
ﻛﺎﻧﺖﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻌﻴﻨﺔ ﺻﺤﻴﺤﺔ ﻣﻦ ﺍﻟﻨﺎﺣﻴﺔ ﺍﻟﻨﺤﻮﻳﺔ .ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺑﻨﻴﺔ ﻣﺤﻠﻼﺕ ﺍﻟﻨﺤﻮ ،
ﻭﺍﻟﻤﻌﺮﻭﻓﺔﺃﻳﻀﺎً ﺑﺎﺳﻢ ﺍﻟﻤﺤﻠﻞ ﺍﻟﻠﻐﻮﻱ ،ﻓﻲ ﺍﻟﻔﺼﻞ .4
3.2.2ﻣﻮﻟﺪﺍﺕ ﺍﻟﻠﻐﺔ
ﻣﻮﻟﺪﺍﻟﻠﻐﺔ ﻫﻮ ﺟﻬﺎﺯ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻟﺘﻮﻟﻴﺪ ﺟﻤﻞ ﺍﻟﻠﻐﺔ .ﻳﻤﻜﻨﻨﺎ ﺃﻥ ﻧﻔﻜﺮ ﻓﻲ ﺍﻟﻤﻮﻟﺪ ﻋﻠﻰ ﺃﻧﻪ
ﻳﺤﺘﻮﻱﻋﻠﻰ ﺯﺭ ﻳﻨﺘﺞ ﺟﻤﻠﺔ ﻣﻦ ﺍﻟﻠﻐﺔ ﻓﻲ ﻛﻞ ﻣﺮﺓ ﻳﺘﻢ ﺍﻟﻀﻐﻂ ﻋﻠﻴﻬﺎ .ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﺠﻤﻠﺔ ﺍﻟﻤﺤﺪﺩﺓ
ﺍﻟﺘﻲﻳﻨﺘﺠﻬﺎ ﺍﻟﻤﻮﻟﺪ ﻋﻨﺪ ﺍﻟﻀﻐﻂ ﻋﻠﻰ ﺯﺭﻩ ﻻ ﻳﻤﻜﻦ ﺍﻟﺘﻨﺒﺆ ﺑﻬﺎ ،ﻳﺒﺪﻭ ﺃﻥ ﺍﻟﻤﻮﻟﺪ ﺟﻬﺎﺯ ﺫﻭ ﻓﺎﺉﺪﺓ
ﻣﺤﺪﻭﺩﺓﻛﻮﺍﺻﻒ ﻟﻐﺔ .ﻭﻣﻊ ﺫﻟﻚ ،ﻳﻔﻀﻞ ﺍﻟﻨﺎﺱ ﺃﺷﻜﺎﻻً ﻣﻌﻴﻨﺔ ﻣﻦ ﺍﻟﻤﻮﻟﺪﺍﺕ ﻋﻠﻰ ﺃﺩﻭﺍﺕ
ﺍﻟﺘﻌﺮﻑﻷﻧﻬﺎ ﺗﺴﺘﻄﻴﻊ ﻗﺮﺍءﺗﻬﺎ ﻭﻓﻬﻤﻬﺎ ﺑﺴﻬﻮﻟﺔ ﺃﻛﺒﺮ .ﻋﻠﻰ ﺍﻟﻨﻘﻴﺾ ﻣﻦ ﺫﻟﻚ ،ﻓﺈﻥ ﺟﺰء ﺍﻟﺘﺤﻘﻖ
ﻣﻦﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻣﻦ ﺍﻟﻤﺘﺮﺟﻢ )ﺃﺩﺍﺓ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻟﻠﻐﺔ( ﻟﻴﺲ ﻣﻔﻴﺪﺍً ﻟﻮﺻﻒ ﺍﻟﻠﻐﺔ ﻟﻠﻤﺒﺮﻣﺞ ﻷﻧﻪ
ﻻﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻪ ﺇﻻ ﻓﻲ ﻭﺿﻊ ﺍﻟﺘﺠﺮﺑﺔ ﻭﺍﻟﺨﻄﺄ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻟﺘﺤﺪﻳﺪ ﺍﻟﺼﻴﻐﺔ
ﺍﻟﺼﺤﻴﺤﺔﻟﻌﺒﺎﺭﺓ ﻣﻌﻴﻨﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﺘﺮﺟﻢ ،
117 3.3ﺍﻟﻄﺮﻕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ
ﻳﻘﺒﻠﻬﺎﺍﻟﻤﺘﺮﺟﻢ .ﻣﻦ ﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ،ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺗﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﺑﻨﺎء ﺟﻤﻠﺔ ﺑﻴﺎﻥ
ﻣﻌﻴﻦﺻﺤﻴﺤﺎً ﻋﻦ ﻃﺮﻳﻖ ﻣﻘﺎﺭﻧﺘﻪ ﺑﻬﻴﻜﻞ ﺍﻟﻤﻮﻟﺪ.
ﻫﻨﺎﻙﺍﺭﺗﺒﺎﻁ ﻭﺛﻴﻖ ﺑﻴﻦ ﺃﺟﻬﺰﺓ ﺍﻹﻧﺸﺎء ﻭﺍﻟﺘﻌﺮﻑ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻠﻐﺔ ﻧﻔﺴﻬﺎ .ﻛﺎﻥ ﻫﺬﺍ ﺃﺣﺪ
ﺍﻻﻛﺘﺸﺎﻓﺎﺕﺍﻷﺳﺎﺳﻴﺔ ﻓﻲ ﻋﻠﻮﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ،ﻭﺃﺩﻯ ﺇﻟﻰ ﺍﻟﻜﺜﻴﺮ ﻣﻤﺎ ﻫﻮ ﻣﻌﺮﻭﻑ ﺍﻵﻥ ﻋﻦ ﺍﻟﻠﻐﺎﺕ
ﺍﻟﺮﺳﻤﻴﺔﻭﻧﻈﺮﻳﺔ ﺗﺼﻤﻴﻢ ﺍﻟﻤﺘﺮﺟﻢ .ﻧﻌﻮﺩ ﺇﻟﻰ ﻋﻼﻗﺔ ﺍﻟﻤﻮﻟﺪﺍﺕ ﻭﺃﺟﻬﺰﺓ ﺍﻟﺘﻌﺮﻑ ﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻟﺘﺎﻟﻲ.
ﺃﺻﺒﺤﺖﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﻤﻨﻘﺤﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ ﻣﻌﺮﻭﻓﺔ ﺑﺎﺳﻢ (.ﻧﻮﺭ ALGOL 60 )1960 ،
ﻧﻤﻮﺫﺝﺑﺎﻛﻮﺱ ﻧﻮﺭ ،ﺃﻭ ﺑﺒﺴﺎﻃﺔ.BNF
)Ingerman ، 1967(.ﻟﻮﺻﻒ ﺗﺮﻛﻴﺐ ﺍﻟﻠﻐﺔ ﺍﻟﺴﻨﺴﻜﺮﻳﺘﻴﺔ ﻗﺒﻞ ﺍﻟﻤﺴﻴﺢ ﺑﻌﺪﺓ ﻣﺉﺎﺕ
ﻣﻦﺍﻟﺴﻨﻴﻦ BNFﻫﻮ ﺗﺪﻭﻳﻦ ﻃﺒﻴﻌﻲ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ .ﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﺍﺳﺘﺨﺪﻡ ﺑﺎﻧﻴﻨﻲ ﺷﻴﺉﺎً ﻣﺸﺎﺑﻬﺎً
ﻟـBNF
ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﺳﺘﺨﺪﺍﻡ BNFﻓﻲ ﺗﻘﺮﻳﺮ ALGOL 60ﻟﻢ ﻳﺘﻢ ﻗﺒﻮﻟﻪ ﻋﻠﻰ ﺍﻟﻔﻮﺭ ﻣﻦ ﻗﺒﻞ
ﻣﺴﺘﺨﺪﻣﻲﺍﻟﻜﻤﺒﻴﻮﺗﺮ ،ﺇﻻ ﺃﻧﻪ ﺳﺮﻋﺎﻥ ﻣﺎ ﺃﺻﺒﺢ ﻭﻣﺎ ﺯﺍﻝ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﻟﻮﺻﻒ ﻟﻐﺔ
ﺍﻟﺒﺮﻣﺠﺔﺑﺈﻳﺠﺎﺯ.
ﻣﻦﺍﻟﻼﻓﺖ ﻟﻠﻨﻈﺮ ﺃﻥ BNFﻣﻄﺎﺑﻖ ﺗﻘﺮﻳﺒﺎً ﻷﺟﻬﺰﺓ Chomskyﺍﻟﺘﻮﻟﻴﺪﻳﺔ ﻟﻠﻐﺎﺕ ﺧﺎﻟﻴﺔ ﻣﻦ
ﺍﻟﺴﻴﺎﻕ ،ﺍﻟﻤﺴﻤﺎﺓﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﺧﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ .ﻓﻲ ﺍﻟﺠﺰء ﺍﻟﻤﺘﺒﻘﻲ ﻣﻦ ﺍﻟﻔﺼﻞ ،ﻧﺸﻴﺮ
ﺇﻟﻰﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺨﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ ﺑﺒﺴﺎﻃﺔ ﻋﻠﻰ ﺃﻧﻬﺎ ﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ .ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ،ﻳﺘﻢ
ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻤﺼﻄﻠﺤﺎﺕ BNFﻭﺍﻟﻘﻮﺍﻋﺪ ﺑﺎﻟﺘﺒﺎﺩﻝ.
3.3.1.3ﺍﻷﺳﺎﺳﻴﺎﺕ
ﺃﻣﻴﺘﺎﻟﻨﺠﻮﻳﺞﻫﻲ ﻟﻐﺔ ﺗﺴﺘﺨﺪﻡ ﻟﻮﺻﻒ ﻟﻐﺔ ﺃﺧﺮﻯ BNF .ﻫﻲ ﻟﻐﺔ ﻣﻌﺪﻧﻴﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ.
ﻳﺴﺘﺨﺪﻡ BNFﺍﻟﺘﺠﺮﻳﺪﺍﺕ ﻟﻠﺒﻨﻰ ﺍﻟﻨﺤﻮﻳﺔ .ﻗﺪ ﻳﺘﻢ ﺗﻤﺜﻴﻞ ﻋﺒﺎﺭﺓ ﺗﺨﺼﻴﺺ Javaﺑﺴﻴﻄﺔ ،
ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻣﻦ ﺧﻼﻝ ﺍﻟﺘﺠﺮﻳﺪ >ﺗﻌﻴﻴﻦ< )ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﺴﺘﺨﺪﻡ ﺍﻷﻗﻮﺍﺱ ﺍﻟﻤﺪﺑﺒﺔ ﻟﺘﺤﺪﻳﺪ
ﺃﺳﻤﺎءﺍﻟﺘﺠﺮﻳﺪﺍﺕ( .ﻳﻤﻜﻦ ﺇﻋﻄﺎء ﺍﻟﺘﻌﺮﻳﻒ ﺍﻟﻔﻌﻠﻲ ﻟـ >ﺗﻌﻴﻴﻦ< ﺑﻮﺍﺳﻄﺔ
ﺍﻟﻨﺺﺍﻟﻤﻮﺟﻮﺩ ﻋﻠﻰ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﺴﺮ ﻣﻦ ﺍﻟﺴﻬﻢ ،ﻭﺍﻟﺬﻱ ﻳﺴﻤﻰ ﻋﻠﻰ ﻧﺤﻮ ﻣﻨﺎﺳﺐ ﺑﺎﻣﺘﺪﺍﺩ
ﺍﻟﺠﺎﻧﺐﺍﻷﻳﺴﺮ ﻳﻄﻠﻖ ﻋﻠﻴﻪ LHS.ﻳﺘﻢ ﺗﻌﺮﻳﻒ ﺍﻟﺘﺠﺮﻳﺪ .ﺍﻟﻨﺺ ﺍﻟﻤﻮﺟﻮﺩ ﻋﻠﻰ ﻳﻤﻴﻦ ﺍﻟﺴﻬﻢ ﻫﻮ
ﺗﻌﺮﻳﻒ )LHS( ،ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ) aﻭﻳﺘﻜﻮﻥ ﻣﻦ ﻣﺰﻳﺞ ﻣﻦ ﺍﻟﺮﻣﻮﺯ ﻭﺍﻟﻤﻌﺎﺟﻢ ﻭﺍﻟﻤﺮﺍﺟﻊ ﺇﻟﻰ
ﺍﻟﺘﺠﺮﻳﺪﺍﺕﺍﻷﺧﺮﻯ) .ﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﺍﻟﺮﻣﻮﺯ ﺍﻟﻤﻤﻴﺰﺓ ﻫﻲ ﺃﻳﻀﺎً ﺗﺠﺮﻳﺪﻳﺔ( .ﻭﺇﺟﻤﺎﻻ ً ،ﻳﻄُﻠﻖ ﻋﻠﻰ
ﺍﻟﺘﻌﺮﻳﻒﺍﺳﻢ ( RHSﻗﺎﻋﺪﺓ ،ﺃﻭﺇﻧﺘﺎﺝ .ﻓﻲ ﻗﺎﻋﺪﺓ ﺍﻟﻤﺜﺎﻝ ﺍﻟﻤﻌﻄﺎﺓ ﻟﻠﺘﻮ ،ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ ﻳﺠﺐ
ﺗﺤﺪﻳﺪﺍﻟﺘﺠﺮﻳﺪﺍﺕ > <varﻭ > <expressionﻟﻜﻲ ﻳﻜﻮﻥ ﺗﻌﺮﻳﻒ > <assignﻣﻔﻴﺪﺍً.
ﺗﺤﺪﺩﻫﺬﻩ ﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﺨﺎﺻﺔ ﺃﻥ ﺍﻟﺘﺠﺮﻳﺪ >ﺗﻌﻴﻴﻦ< ﻳﺘﻢ ﺗﻌﺮﻳﻔﻪ ﻛﻤﺜﻴﻞ ﻟﻠﺘﺠﺮﻳﺪ >، <var
ﻣﺘﺒﻮﻋﺎًﺑـ ، = lexemeﻣﺘﺒﻮﻋﺎً ﺑﻤﺜﻴﻞ ﻣﻦ ﺍﻟﺘﺠﺮﻳﺪ > .<expressionﺃﺣﺪ ﺍﻷﻣﺜﻠﺔ ﻋﻠﻰ ﺍﻟﺠﻤﻠﺔ
ﺍﻟﺘﻲﻭﺻﻔﺖ ﺍﻟﻘﺎﻋﺪﺓ ﻫﻴﻜﻠﻬﺎ ﺍﻟﻨﺤﻮﻱ ﻫﻮ
ﻏﺎﻟﺒﺎًﻣﺎ ﻳﺘﻢ ﺍﺳﺘﺪﻋﺎء ﺍﻟﺘﺠﺮﻳﺪﺍﺕ ﻓﻲ ﻭﺻﻒ 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
ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ 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
<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ﻧﻬﺎﻳﺔ
ﻳﺒﺪﺃﻫﺬﺍ ﺍﻻﺷﺘﻘﺎﻕ ،ﻣﺜﻞ ﻛﻞ ﺍﻻﺷﺘﻘﺎﻗﺎﺕ ،ﺑﺮﻣﺰ ﺍﻟﺒﺪﺍﻳﺔ ،ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ >ﺍﻟﺒﺮﻧﺎﻣﺞ< .ﻳﻘُﺮﺃ
ﺍﻟﺮﻣﺰ=< "ﻣﺸﺘﻘﺎﺕ" .ﻳﺘﻢ ﺍﺷﺘﻘﺎﻕ ﻛﻞ ﺳﻠﺴﻠﺔ ﻣﺘﺘﺎﻟﻴﺔ ﻓﻲ ﺍﻟﺘﺴﻠﺴﻞ ﻣﻦ ﺍﻟﺴﻠﺴﻠﺔ ﺍﻟﺴﺎﺑﻘﺔ
ﻋﻦﻃﺮﻳﻖ ﺍﺳﺘﺒﺪﺍﻝ ﺃﺣﺪ ﺍﻷﺣﺮﻑ ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻴﺔ ﺑﺄﺣﺪ ﺗﻌﺮﻳﻔﺎﺕ ﺗﻠﻚ ﻏﻴﺮ ﻧﻬﺎﺉﻴﺔ .ﻛﻞ ﺳﻠﺴﻠﺔ ﻓﻲ
ﺍﻻﺷﺘﻘﺎﻕ ،ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ >ﺑﺮﻧﺎﻣﺞ< ،ﺗﺴﻤﻰ ﺃﺷﻜﻞ ﻭﺟﻮﺩﻱ.
ﻓﻲﻫﺬﺍ ﺍﻻﺷﺘﻘﺎﻕ ،ﺗﻜﻮﻥ ﺍﻟﺼﻴﻐﺔ ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻴﺔ ﺍﻟﻤﺴﺘﺒﺪﻟﺔ ﻫﻲ ﺩﺍﺉﻤﺎً ﺃﻗﺼﻰ ﺍﻟﻴﺴﺎﺭ ﻏﻴﺮ
ﻧﻬﺎﺉﻴﺔﻓﻲ ﺍﻟﺸﻜﻞ ﺍﻟﻤﻌﻴﻦ ﺍﻟﺴﺎﺑﻖ .ﺗﺴﻤﻰ ﺍﻻﺷﺘﻘﺎﻗﺎﺕ ﺍﻟﺘﻲ ﺗﺴﺘﺨﺪﻡ ﺗﺮﺗﻴﺐ ﺍﻻﺳﺘﺒﺪﺍﻝ ﻫﺬﺍ
ﺍﻻﺷﺘﻘﺎﻗﺎﺕﻓﻲ ﺃﻗﺼﻰ ﺍﻟﻴﺴﺎﺭ .ﻳﺴﺘﻤﺮ ﺍﻻﺷﺘﻘﺎﻕ ﺣﺘﻰ ﻻ ﻳﺤﺘﻮﻱ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﻤﻌﺘﻤﺪ ﻋﻠﻰ
ﻏﻴﺮﻧﻬﺎﺉﻴﺔ .ﻫﺬﺍ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﺤﺴﻲ ،ﺍﻟﺬﻱ ﻳﺘﻜﻮﻥ ﻣﻦ ﻣﺤﻄﺎﺕ ﻓﻘﻂ ،ﺃﻭ ، lexemesﻫﻮ
ﺍﻟﺠﻤﻠﺔﺍﻟﻤﻮﻟﺪﺓ.
121 3.3ﺍﻟﻄﺮﻕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ
ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺃﻗﺼﻰ ﺍﻟﻴﺴﺎﺭ ،ﻗﺪ ﻳﻜﻮﻥ ﺍﻻﺷﺘﻘﺎﻕ ﺃﻗﺼﻰ ﺍﻟﻴﻤﻴﻦ ﺃﻭ ﺑﺘﺮﺗﻴﺐ ﻟﻴﺲ ﺃﻗﺼﻰ
ﺍﻟﻴﺴﺎﺭﺃﻭ ﺃﻗﺼﻰ ﺍﻟﻴﻤﻴﻦ .ﻟﻴﺲ ﻷﻣﺮ ﺍﻻﺷﺘﻘﺎﻕ ﺃﻱ ﺗﺄﺛﻴﺮ ﻋﻠﻰ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﻮﻟﺪﻫﺎ ﺍﻟﻘﻮﺍﻋﺪ.
ﺍﻟﻤﺜﺎﻝ 3.2ﻫﻮ ﻣﺜﺎﻝ ﺁﺧﺮ ﻟﻘﻮﺍﻋﺪ ﺍﻟﻠﻐﺔ ﻟﺠﺰء ﻣﻦ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﻤﻮﺫﺟﻴﺔ.
ﻳﺼﻒﺍﻟﻨﺤﻮ ﻓﻲ ﺍﻟﻤﺜﺎﻝ 3.2ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﺘﻲ ﺗﻜﻮﻥ ﺟﻮﺍﻧﺒﻬﺎ ﺍﻟﻴﻤﻨﻰ ﻋﺒﺎﺭﺓ ﻋﻦ
ﺗﻌﺒﻴﺮﺍﺕﺣﺴﺎﺑﻴﺔ ﻣﻊ ﻋﻮﺍﻣﻞ ﺍﻟﻀﺮﺏ ﻭﺍﻟﺠﻤﻊ ﻭﺍﻷﻗﻮﺍﺱ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺍﻟﺒﻴﺎﻥ
ﺃ= ﺏ * )ﺃ +ﺝ(
=< ﺃ = ﺏ * >ﺇﻛﺴﺒﺮ<
=< ﺃ = ﺏ * )>ﺇﻛﺴﺒﺮ<( =< ﺃ = ﺏ * )>
ﻣﻌﺮﻑ< <= (<expr> +ﺃ = ﺏ * )ﺃ > +
ﺇﻛﺴﺒﺮ<( =< ﺃ = ﺏ * )ﺃ > +ﻣﻌﺮﻑ<( =< ﺃ
= ﺏ * )ﺃ +ﺝ (
3.3.1.6ﺗﺤﻠﻴﻞ ﺍﻷﺷﺠﺎﺭ
ﻣﻦﺃﻛﺜﺮ ﺍﻟﻤﻴﺰﺍﺕ ﺟﺎﺫﺑﻴﺔ ﻟﻠﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺃﻧﻬﺎ ﺗﺼﻒ ﺑﺸﻜﻞ ﻃﺒﻴﻌﻲ ﺍﻟﺒﻨﻴﺔ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﻬﺮﻣﻴﺔ
ﻟﺠﻤﻞﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﺤﺪﺩﻫﺎ .ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻬﻴﺎﻛﻞ ﺍﻟﻬﺮﻣﻴﺔﺗﺤﻠﻴﻞ ﺍﻷﺷﺠﺎﺭ .ﻋﻠﻰ ﺳﺒﻴﻞ
ﺍﻟﻤﺜﺎﻝ ،ﺗﻈُﻬﺮ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﻓﻲ ﺍﻟﺸﻜﻞ 3.1ﺑﻨﻴﺔ ﺑﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﻤﺸﺘﻖ ﺳﺎﺑﻘﺎً.
ﺍﻟﻔﺼﻞ 3ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ 122
>ﺗﻌﻴﻴﻦ< ﺍﻟﺸﻜﻞ3.1
ﺷﺠﺮﺓﺗﺤﻠﻴﻞ ﻟﺒﻴﺎﻥ
<>expr = <>id ﺑﺴﻴﻂ
ﺃ= ﺏ * )ﺃ +ﺝ(
<>id ﺃ
ﺝ
ﻳﺘﻢﺗﻤﻴﻴﺰ ﻛﻞ ﻋﻘﺪﺓ ﺩﺍﺧﻠﻴﺔ ﻟﺸﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺑﺮﻣﺰ ﻏﻴﺮ ﻧﻬﺎﺉﻲ ؛ ﻳﺘﻢ ﺗﻤﻴﻴﺰ ﻛﻞ ﻭﺭﻗﺔ ﺑﺮﻣﺰ
ﻃﺮﻓﻲ.ﺗﺼﻒ ﻛﻞ ﺷﺠﺮﺓ ﻓﺮﻋﻴﺔ ﻟﺸﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﻣﺜﻴﻼً ﻭﺍﺣﺪﺍً ﻟﻠﺘﺠﺮﻳﺪ ﻓﻲ ﺍﻟﺠﻤﻠﺔ.
3.3.1.7ﺍﻟﻐﻤﻮﺽ
ﻳﻘُﺎﻝﺇﻥ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺘﻲ ﺗﻨُﺸﺊ ﻧﻤﻮﺫﺟﺎً ﺣﺴﺎﺑﻴﺎً ﻟﻬﺎ ﺷﺠﺮﺗﺎﻥ ﺃﻭ ﺃﻛﺜﺮ ﻣﻦ ﺷﺠﺮﺗﻲ ﺍﻟﺘﺤﻠﻴﻞ
ﺍﻟﻤﺘﻤﻴﺰﺗﻴﻦﻏﺎﻣﺾ .ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﻤﻮﺿﺤﺔ ﻓﻲ ﺍﻟﻤﺜﺎﻝ ، 3.3ﻭﺍﻟﺘﻲ ﺗﻌﺪ
ﺍﺧﺘﻼﻓﺎًﺑﺴﻴﻄﺎً ﻓﻲ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﻤﻮﺿﺤﺔ ﻓﻲ ﺍﻟﻤﺜﺎﻝ .3.2
ﻣﺜﺎﻝ .3.2ﺑﺪﻻ ًﻣﻦ ﺍﻟﺴﻤﺎﺡ ﻟﺸﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﻟﻠﺘﻌﺒﻴﺮ ﺑﺎﻟﻨﻤﻮ ﻋﻠﻰ ﺍﻟﻴﻤﻴﻦ ﻓﻘﻂ ،ﺗﺴﻤﺢ ﻫﺬﻩ
ﺍﻟﻘﻮﺍﻋﺪﺑﺎﻟﻨﻤﻮ ﻋﻠﻰ ﻛﻞ ﻣﻦ ﺍﻟﻴﺴﺎﺭ ﻭﺍﻟﻴﻤﻴﻦ.
ﺷﺠﺮﺗﺎﺗﺤﻠﻴﻞ ﻣﺘﻤﻴﺰﺗﺎﻥ
<>expr = <>id <>expr = <>id
ﻟﻨﻔﺲﺍﻟﺠﻤﻠﺔ ،
ﺃ= ﺏ +ﺝ * ﺃ
<>expr * <>expr ﺃ <>expr + <>expr ﺃ
ﻫﻨﺎﻙﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻷﺧﺮﻯ ﻟﻠﻘﻮﺍﻋﺪ ﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻣﻔﻴﺪﺓ ﺃﺣﻴﺎﻧﺎً ﻓﻲ ﺗﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ
ﻛﺎﻧﺖﺍﻟﻘﻮﺍﻋﺪ ﻏﺎﻣﻀﺔ1.ﻭﻫﻲ ﺗﺸﻤﻞ ﻣﺎ ﻳﻠﻲ (1) :ﺇﺫﺍ ﻛﺎﻧﺖ ﺍﻟﻘﻮﺍﻋﺪ ﺗﻮﻟﺪ ﺟﻤﻠﺔ ﺑﺄﻛﺜﺮ ﻣﻦ
ﺍﺷﺘﻘﺎﻕﻭﺍﺣﺪ ﻓﻲ ﺃﻗﺼﻰ ﺍﻟﻴﺴﺎﺭ ﻭ ) (2ﺇﺫﺍ ﻛﺎﻧﺖ ﺍﻟﻘﻮﺍﻋﺪ ﺗﻮﻟﺪ ﺟﻤﻠﺔ ﺑﺄﻛﺜﺮ ﻣﻦ ﺍﺷﺘﻘﺎﻕ ﻭﺍﺣﺪ ﻓﻲ
ﺃﻗﺼﻰﺍﻟﻴﻤﻴﻦ.
ﻳﻤﻜﻦﺃﻥ ﺗﺴﺘﻨﺪ ﺑﻌﺾ ﺧﻮﺍﺭﺯﻣﻴﺎﺕ ﺍﻟﺘﺤﻠﻴﻞ ﺇﻟﻰ ﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﻏﺎﻣﻀﺔ .ﻋﻨﺪﻣﺎ ﻳﻮﺍﺟﻪ ﻣﺜﻞ
ﻫﺬﺍﺍﻟﻤﺤﻠﻞ ﺍﻟﻠﻐﻮﻱ ﺑﻨﻴﺔ ﻏﺎﻣﻀﺔ ،ﻓﺈﻧﻪ ﻳﺴﺘﺨﺪﻡ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﻏﻴﺮ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺘﻲ ﻳﻮﻓﺮﻫﺎ ﺍﻟﻤﺼﻤﻢ
ﻹﻧﺸﺎءﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﺼﺤﻴﺤﺔ .ﻓﻲ ﻛﺜﻴﺮ ﻣﻦ ﺍﻟﺤﺎﻻﺕ ،ﻳﻤﻜﻦ ﺇﻋﺎﺩﺓ ﻛﺘﺎﺑﺔ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻐﺎﻣﻀﺔ
ﺑﺤﻴﺚﻻ ﻟﺒﺲ ﻓﻴﻬﺎ ﻭﻟﻜﻦ ﻻ ﺗﺰﺍﻝ ﺗﻮﻟﺪ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺮﻏﻮﺑﺔ.
3.3.1.8ﺃﺳﺒﻘﻴﺔ ﺍﻟﻤﺸﻐﻞ
ﻋﻨﺪﻣﺎﻳﺘﻀﻤﻦ ﺍﻟﺘﻌﺒﻴﺮ ﻋﺎﻣﻠﻴﻦ ﻣﺨﺘﻠﻔﻴﻦ ،ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺱ +ﺹ * ﺽ ،ﺇﺣﺪﻯ ﺍﻟﻘﻀﺎﻳﺎ
ﺍﻟﺪﻻﻟﻴﺔﺍﻟﻮﺍﺿﺤﺔ ﻫﻲ ﺗﺮﺗﻴﺐ ﺗﻘﻴﻴﻢ ﺍﻟﻤﺸﻐﻠﻴﻦ )ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻓﻲ ﻫﺬﺍ ﺍﻟﺘﻌﺒﻴﺮ ،ﻫﻞ ﻳﺘﻢ
ﺍﻟﺠﻤﻊﺛﻢ ﺍﻟﻀﺮﺏ ،ﺃﻭ ﺍﻟﻌﻜﺲ؟( .ﻳﻤﻜﻦ ﺍﻹﺟﺎﺑﺔ ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﺴﺆﺍﻝ ﺍﻟﺪﻻﻟﻲ ﻋﻦ ﻃﺮﻳﻖ ﺗﻌﻴﻴﻦ
ﻣﺴﺘﻮﻳﺎﺕﺃﺳﺒﻘﻴﺔ ﻣﺨﺘﻠﻔﺔ ﻟﻠﻤﺸﻐﻠﻴﻦ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺇﺫﺍ ﺗﻢ ﺗﻌﻴﻴﻦ ﺃﺳﺒﻘﻴﺔ ﺃﻋﻠﻰ ﻣﻦ ) +
ﺣﺴﺐﺍﻟﻠﻐﺔ
.1ﻻﺣﻆ ﺃﻧﻪ ﻣﻦ ﺍﻟﻤﺴﺘﺤﻴﻞ ﺭﻳﺎﺿﻴﺎً ﺗﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ ﻛﺎﻧﺖ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺘﻌﺴﻔﻴﺔ ﻏﺎﻣﻀﺔ.
ﺍﻟﻔﺼﻞ 3ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ 124
ﻣﺼﻤﻢ( ،ﺳﻴﺘﻢ ﺍﻟﻀﺮﺏ ﺃﻭﻻ ً ،ﺑﻐﺾ ﺍﻟﻨﻈﺮ ﻋﻦ ﺗﺮﺗﻴﺐ ﻇﻬﻮﺭ ﺍﻟﻌﺎﻣﻠﻴﻦ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮ.
ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ،ﻳﻤﻜﻦ ﻟﻠﻘﻮﺍﻋﺪ ﺃﻥ ﺗﺼﻒ ﺑﻨﻴﺔ ﻧﺤﻮﻳﺔ ﻣﻌﻴﻨﺔ ﺑﺤﻴﺚ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﺟﺰء
ﻣﻦﻣﻌﻨﻰ ﺍﻟﻬﻴﻜﻞ ﻣﻦ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ .ﻋﻠﻰ ﻭﺟﻪ ﺍﻟﺨﺼﻮﺹ ،ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ
ﺣﻘﻴﻘﺔﺃﻥ ﻋﺎﻣﻞ ﺍﻟﺘﺸﻐﻴﻞ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﺤﺴﺎﺑﻲ ﻳﺘﻢ ﺇﻧﺸﺎﺅﻩ ﻓﻲ ﻣﺴﺘﻮﻯ ﺃﺩﻧﻰ ﻓﻲ ﺷﺠﺮﺓ
ﺍﻟﺘﺤﻠﻴﻞ)ﻭﺑﺎﻟﺘﺎﻟﻲ ﻳﺠﺐ ﺗﻘﻴﻴﻤﻪ ﺃﻭﻻ ً( ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺃﻧﻪ ﻟﻪ ﺃﺳﺒﻘﻴﺔ ﻋﻠﻰ ﻋﺎﻣﻞ ﺗﻢ ﺇﻧﺘﺎﺟﻪ ﺃﻋﻠﻰ ﻓﻲ
ﺍﻟﺸﺠﺮﺓ.ﻓﻲ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻷﻭﻟﻰ ﺑﺎﻟﺸﻜﻞ ، 3.2ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻳﺘﻢ ﺇﻧﺸﺎء ﻋﺎﻣﻞ
ﺍﻟﻀﺮﺏﻓﻲ ﻣﺴﺘﻮﻯ ﺃﺩﻧﻰ ﻓﻲ ﺍﻟﺸﺠﺮﺓ ،ﻣﻤﺎ ﻗﺪ ﻳﺸﻴﺮ ﺇﻟﻰ ﺃﻧﻪ ﻟﻪ ﺍﻷﺳﺒﻘﻴﺔ ﻋﻠﻰ ﻋﺎﻣﻞ ﺍﻹﺿﺎﻓﺔ
ﻓﻲﺍﻟﺘﻌﺒﻴﺮ .ﻭﻣﻊ ﺫﻟﻚ ،ﻓﺈﻥ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﺜﺎﻧﻴﺔ ﺗﺸﻴﺮ ﺇﻟﻰ ﺍﻟﻌﻜﺲ ﺗﻤﺎﻣﺎً .ﻟﺬﻟﻚ ﻳﺒﺪﻭ ﺃﻥ
ﺷﺠﺮﺗﺎﺍﻟﺘﺤﻠﻴﻞ ﺗﺸﻴﺮﺍﻥ ﺇﻟﻰ ﻣﻌﻠﻮﻣﺎﺕ ﺃﺳﺒﻘﻴﺔ ﻣﺘﻀﺎﺭﺑﺔ.
ﻻﺣﻆﺃﻧﻪ ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻗﻮﺍﻋﺪ ﺍﻟﻤﺜﺎﻝ 3.2ﻟﻴﺴﺖ ﻏﺎﻣﻀﺔ ،ﻓﺈﻥ ﺗﺮﺗﻴﺐ ﺍﻷﺳﺒﻘﻴﺔ
ﻟﻤﺸﻐﻠﻴﻬﺎﻟﻴﺲ ﻫﻮ ﺍﻟﺘﺮﺗﻴﺐ ﺍﻟﻤﻌﺘﺎﺩ .ﻓﻲ ﻫﺬﻩ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ،ﻓﺈﻥ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﻟﺠﻤﻠﺔ ﻣﻊ
ﻋﻮﺍﻣﻞﺗﺸﻐﻴﻞ ﻣﺘﻌﺪﺩﺓ ،ﺑﻐﺾ ﺍﻟﻨﻈﺮ ﻋﻦ ﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﻤﻌﻴﻨﺔ ،ﻟﻬﺎ ﻋﺎﻣﻞ ﺍﻟﺘﺸﻐﻴﻞ ﺍﻟﻤﻮﺟﻮﺩ ﻓﻲ
ﺃﻗﺼﻰﺍﻟﻴﻤﻴﻦ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮ ﻋﻨﺪ ﺃﺩﻧﻰ ﻧﻘﻄﺔ ﻓﻲ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ،ﻣﻊ ﺗﺤﺮﻙ ﺍﻟﻌﻮﺍﻣﻞ ﺍﻷﺧﺮﻯ ﻓﻲ
ﺍﻟﺸﺠﺮﺓﻟﻸﻋﻠﻰ ﺗﺪﺭﻳﺠﻴﺎ ًﻛﻠﻤﺎ ﺗﺤﺮﻙ ﺍﻟﻤﺮء ﻋﻠﻰ ﺍﻟﻴﺴﺎﺭ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻓﻲ
ﺍﻟﺘﻌﺒﻴﺮﺃ +ﺏ * ﺝ * ،ﻫﻮ ﺍﻷﺩﻧﻰ ﻓﻲ ﺍﻟﺸﺠﺮﺓ ،ﻣﻤﺎ ﻳﺸﻴﺮ ﺇﻟﻰ ﺃﻧﻪ ﻳﺠﺐ ﺍﻟﻘﻴﺎﻡ ﺑﻪ ﺃﻭﻻ ً.ﻭﻣﻊ
ﺫﻟﻚ ،ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮﺃ * ﺏ +ﺝ + ،ﻫﻮ ﺍﻷﺩﻧﻰ ،ﻣﻤﺎ ﻳﺸﻴﺮ ﺇﻟﻰ ﺃﻧﻪ ﻳﺠﺐ ﺍﻟﻘﻴﺎﻡ ﺑﻪ ﺃﻭﻻً.
ﻳﻤﻜﻦﻛﺘﺎﺑﺔ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺒﺴﻴﻄﺔ ﺍﻟﺘﻲ ﻛﻨﺎ ﻧﻨﺎﻗﺸﻬﺎ ﻭﺍﻟﺘﻲ ﻻ ﻟﺒﺲ ﻓﻴﻬﺎ
ﻭﺗﺤﺪﺩﺃﺳﺒﻘﻴﺔ ﻣﺘﺴﻘﺔ ﻟـ
+ﻭ* ،ﺑﻐﺾ ﺍﻟﻨﻈﺮ ﻋﻦ ﺍﻟﺘﺮﺗﻴﺐ ﺍﻟﺬﻱ ﺗﻈﻬﺮ ﺑﻪ ﺍﻟﻌﻮﺍﻣﻞ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮ .ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺍﻟﺘﺮﺗﻴﺐ
ﺍﻟﺼﺤﻴﺢﺑﺎﺳﺘﺨﺪﺍﻡ ﺭﻣﻮﺯ ﻏﻴﺮ ﻧﻬﺎﺉﻴﺔ ﻣﻨﻔﺼﻠﺔ ﻟﺘﻤﺜﻴﻞ ﻣﻌﺎﻣﻼﺕ ﺍﻟﻤﺸﻐﻠﻴﻦ ﺍﻟﺬﻳﻦ ﻟﺪﻳﻬﻢ
ﺃﺳﺒﻘﻴﺔﻣﺨﺘﻠﻔﺔ .ﻫﺬﺍ ﻳﺘﻄﻠﺐ ﻗﻮﺍﻋﺪ ﺇﺿﺎﻓﻴﺔ ﻏﻴﺮ ﻧﻬﺎﺉﻴﺔ ﻭﺑﻌﺾ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺠﺪﻳﺪﺓ .ﺑﺪﻻ ًﻣﻦ
ﺍﺳﺘﺨﺪﺍﻡ> <exprﻟﻜﻞ ﻣﻦ ﺍﻟﻤﻌﺎﻣﻠﻴﻦ +ﻭ * ،ﻳﻤﻜﻨﻨﺎ ﺍﺳﺘﺨﺪﺍﻡ ﺛﻼﺙ ﻣﻌﺎﻣﻼﺕ ﻏﻴﺮ ﻧﻬﺎﺉﻴﺔ
ﻟﺘﻤﺜﻴﻞﺍﻟﻤﻌﺎﻣﻼﺕ ،ﻣﻤﺎ ﻳﺴﻤﺢ ﻟﻠﻘﻮﺍﻋﺪ ﺑﻔﺮﺽ ﻋﻮﺍﻣﻞ ﻣﺨﺘﻠﻔﺔ ﻋﻠﻰ ﻣﺴﺘﻮﻳﺎﺕ ﻣﺨﺘﻠﻔﺔ ﻓﻲ
ﺷﺠﺮﺓﺍﻟﺘﺤﻠﻴﻞ .ﺇﺫﺍ ﻛﺎﻥ > <exprﻫﻮ ﺭﻣﺰ ﺍﻟﺠﺬﺭ ﻟﻠﺘﻌﺒﻴﺮﺍﺕ ،ﻓﻴﻤﻜﻦ ﺇﺟﺒﺎﺭ +ﻋﻠﻰ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ
ﺃﻋﻠﻰﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﻣﻦ ﺧﻼﻝ ﺟﻌﻞ > <exprﻣﺒﺎﺷﺮﺓ ﺗﻮﻟﺪ ﻋﻮﺍﻣﻞ +ﻓﻘﻂ ،ﺑﺎﺳﺘﺨﺪﺍﻡ
ﺍﻟﻤﻌﺎﻣﻞﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻲ ﺍﻟﺠﺪﻳﺪ > ،ﻧﺺ< ،ﻛﻤﻌﺎﻣﻞ ﺃﻳﻤﻦ ﻟـ .+ﺑﻌﺪ ﺫﻟﻚ ،ﻳﻤﻜﻨﻨﺎ ﺗﺤﺪﻳﺪ >ﻧﺺ<
ﻹﻧﺸﺎءﻋﻮﺍﻣﻞ * ،ﺑﺎﺳﺘﺨﺪﺍﻡ >ﻧﺺ< ﻛﻤﻌﺎﻣﻞ ﺃﻳﺴﺮ ﻭﻣﻌﺎﻣﻞ ﻏﻴﺮ ﻧﻬﺎﺉﻲ ﺟﺪﻳﺪ > ،ﻋﺎﻣﻞ< ،
ﻛﻤﻌﺎﻣﻞﺣﻘﻬﺎ .ﺍﻵﻥ ،ﺳﺘﻜﻮﻥ * ﺩﺍﺉﻤﺎً ﺃﻗﻞ ﻓﻲ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ،ﻷﻧﻬﺎ ﺑﺒﺴﺎﻃﺔ ﺃﺑﻌﺪ ﻣﻦ ﺭﻣﺰ
ﺍﻟﺒﺪﺍﻳﺔﻋﻦ +ﻓﻲ ﻛﻞ ﺍﺷﺘﻘﺎﻕ .ﻗﻮﺍﻋﺪ ﺍﻟﻤﺜﺎﻝ 3.4ﻫﻲ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻘﻮﺍﻋﺪ.
125 3.3ﺍﻟﻄﺮﻕ ﺍﻟﺮﺳﻤﻴﺔ ﻟﻮﺻﻒ ﺍﻟﻨﺤﻮ
ﻳﺘﻢﻋﺮﺽ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻔﺮﻳﺪﺓ ﻟﻬﺬﻩ ﺍﻟﺠﻤﻠﺔ ،ﺑﺎﺳﺘﺨﺪﺍﻡ ﻗﻮﺍﻋﺪ ﺍﻟﻤﺜﺎﻝ ، 3.4ﻓﻲ ﺍﻟﺸﻜﻞ
.3.3
ﺍﻟﻌﻼﻗﺔﺑﻴﻦ ﺃﺷﺠﺎﺭ ﺍﻟﺘﺤﻠﻴﻞ ﻭﺍﻻﺷﺘﻘﺎﻗﺎﺕ ﻗﺮﻳﺒﺔ ﺟﺪﺍً :ﻳﻤﻜﻦ ﺑﺴﻬﻮﻟﺔ ﺇﻧﺸﺎء ﺃﻱ ﻣﻨﻬﻤﺎ ﻣﻦ
ﺍﻵﺧﺮ.ﻛﻞ ﺍﺷﺘﻘﺎﻕ ﺑﻘﻮﺍﻋﺪ ﻻ ﻟﺒﺲ ﻓﻴﻬﺎ ﻟﻪ ﺷﺠﺮﺓ ﺗﺤﻠﻴﻞ ﻓﺮﻳﺪﺓ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﻩ
ﺍﻟﺸﺠﺮﺓﻳﻤﻜﻦ ﺗﻤﺜﻴﻠﻬﺎ ﺑﻤﺸﺘﻘﺎﺕ ﻣﺨﺘﻠﻔﺔ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺍﻻﺷﺘﻘﺎﻕ ﺍﻟﺘﺎﻟﻲ ﻟﻠﺠﻤﻠﺔ
ﺃ= ﺏ +ﺝ * ﺃﻳﺨﺘﻠﻒ ﻋﻦ ﺍﺷﺘﻘﺎﻕ ﻧﻔﺲ ﺍﻟﺠﻤﻠﺔ ﺍﻟﻮﺍﺭﺩﺓ ﺳﺎﺑﻘﺎً .ﻫﺬﺍ ﺍﺷﺘﻘﺎﻕ ﺃﻗﺼﻰ ﺍﻟﻴﻤﻴﻦ ،
ﺑﻴﻨﻤﺎﺍﻟﺴﺎﺑﻖ ﻫﻮ ﺃﻗﺼﻰ ﺍﻟﻴﺴﺎﺭ .ﻭﻣﻊ ﺫﻟﻚ ،ﻳﺘﻢ ﺗﻤﺜﻴﻞ ﻛﻼ ﺍﻟﻤﺸﺘﻘﻴﻦ ﻣﻦ ﺧﻼﻝ ﻧﻔﺲ ﺷﺠﺮﺓ
ﺍﻟﺘﺤﻠﻴﻞ.
ﺍﻟﻔﺼﻞ 3ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ 126
>ﺗﻌﻴﻴﻦ< ﺍﻟﺸﻜﻞ3.3
ﺷﺠﺮﺓﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻔﺮﻳﺪﺓ
<>expr = <>id ﻝﺃ = ﺏ +ﺝ * ﺃ
ﺑﺎﺳﺘﺨﺪﺍﻡﻻ ﻟﺒﺲ ﻓﻴﻪ
ﻗﻮﺍﻋﺪ
>ﻧﺺ< + <>expr ﺃ
ﺝ ﺏ
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 ﺃ
ﺝ <>id
ﺏ
ﺍﻟﻔﺼﻞ 3ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ 128
ﻓﻲﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﻮﻓﺮﻫﺎ ،ﻓﺈﻥ ﻋﺎﻣﻞ ﺍﻷﺳﻲ ﻫﻮ ﺍﺭﺗﺒﺎﻁ ﺻﺤﻴﺢ .ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ
ﺍﻻﺭﺗﺒﺎﻁﺍﻟﺼﺤﻴﺢ ،ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﻮﺩﻳﺔ ﺍﻟﺼﺤﻴﺤﺔ .ﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﻨﺤﻮﻳﺔ ﻫﻲﺍﻟﻌﻮﺩﻳﺔ ﺍﻟﺼﺤﻴﺤﺔ
ﺇﺫﺍﻇﻬﺮ LHSﻓﻲ ﺍﻟﻄﺮﻑ ﺍﻷﻳﻤﻦ ﻣﻦ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ .ﻗﻮﺍﻋﺪ ﻣﺜﻞ
<→>if_stmtﻟﻮ><logic_exprﺛﻢ><stmt
ﻟﻮ><logic_exprﺛﻢ><stmtﺁﺧﺮ><stmt
ﺇﺫﺍﻛﺎﻥ ﻟﺪﻳﻨﺎ ﺃﻳﻀﺎً >> →<stmtﻫﺬﻩ ﺍﻟﻘﻮﺍﻋﺪ ﻏﺎﻣﻀﺔ .ﺃﺑﺴﻂ ﺷﻜﻞ ﻣﻌﻨﻮﻱ ﻳﻮﺿﺢ ﻫﺬﺍ
ﺍﻟﻐﻤﻮﺽﻫﻮ if_stmt< ،
ﻟﻮ><logic_exprﺛﻢ ﺇﺫﺍ><logic_exprﺛﻢ><stmtﺁﺧﺮ><stmt
ﻟﻮﺗﻢ ==ﺣﻘﻴﻘﻲ
ﺛﻢﺇﺫﺍﺍﻟﻤﺬﻫﺐ == 0
ﺛﻢﺍﻟﺤﺎﺻﻞ = 0؛
ﺁﺧﺮﺍﻟﺤﺎﺻﻞ = ﻋﺪﺩ /ﺩﻳﻦ ؛
ﺍﻟﻤﺸﻜﻠﺔﻫﻲ ﺃﻧﻪ ﺇﺫﺍ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻌﻠﻴﺎ ﻓﻲ ﺍﻟﺸﻜﻞ 3.5ﻛﺄﺳﺎﺱ ﻟﻠﺘﺮﺟﻤﺔ ،
ﻓﺴﻴﺘﻢﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ elseﻋﻨﺪﻣﺎﻣﻨﺘﻬﻲﻟﻴﺲ ﺻﺤﻴﺤﺎً ،ﻭﺭﺑﻤﺎ ﻟﻢ ﻳﻜﻦ ﻫﺬﺍ ﻣﺎ ﻗﺼﺪﻩ ﻣﺆﻟﻒ
ﺍﻟﺒﻨﺎء.ﺳﻮﻑ ﻧﺪﺭﺱ ﺍﻟﻤﺸﻜﻼﺕ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﻤﺮﺗﺒﻄﺔ ﺑﻤﺸﻜﻠﺔ ﺍﻻﺭﺗﺒﺎﻁ ﺍﻷﺧﺮﻯ ﻓﻲ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻣﻦ.
<>if_stmt ﺍﻟﺸﻜﻞ3.5
ﺷﺠﺮﺗﺎﺗﺤﻠﻴﻞ ﻣﻤﻴﺰﺗﺎﻥ
ﻟﻨﻔﺲﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﻤﻌﻨﻮﻱ
<>if_stmt
<>if_stmt
<>if_stmt
ﻟﻮ><logic_exprﺛﻢ ﺇﺫﺍ><logic_exprﺛﻢ><stmtﺁﺧﺮ><stmt
ﺍﻟﻔﺼﻞ 3ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ 130
ﺍﻟﻤﻤﺘﺪ3.3.2 BNF
ﺑﺴﺒﺐﺑﻌﺾ ﺍﻟﻤﻀﺎﻳﻘﺎﺕ ﺍﻟﺒﺴﻴﻄﺔ ﻓﻲ ، BNFﺗﻢ ﺗﻤﺪﻳﺪﻩ ﺑﻌﺪﺓ ﻃﺮﻕ .ﺗﺴﻤﻰ ﻣﻌﻈﻢ
ﺍﻹﺻﺪﺍﺭﺍﺕﺍﻟﻤﻮﺳﻌﺔ ، Extended BNFﺃﻭ ﺑﺒﺴﺎﻃﺔ ، EBNFﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﻟﻴﺴﺖ ﻛﻠﻬﺎ
ﻣﺘﺸﺎﺑﻬﺔﺗﻤﺎﻣﺎً .ﻻ ﺗﻌﺰﺯ ﺍﻻﻣﺘﺪﺍﺩﺍﺕ ﺍﻟﻘﻮﺓ ﺍﻟﻮﺻﻔﻴﺔ ﻟـ BNF؛ ﺇﻧﻬﺎ ﺗﺰﻳﺪ ﻓﻘﻂ ﻣﻦ ﻗﺎﺑﻠﻴﺘﻬﺎ
ﻟﻠﻘﺮﺍءﺓﻭﺍﻟﻜﺘﺎﺑﺔ.
<→>if_stmtﻟﻮ)>ﺍﻟﺘﻌﺒﻴﺮ<( >ﺍﻟﺒﻴﺎﻥ<
|ﻟﻮ)>ﺍﻟﺘﻌﺒﻴﺮ<( >ﺍﻟﺒﻴﺎﻥ<ﺁﺧﺮ>ﺑﻴﺎﻥ<
ﺍﻻﻣﺘﺪﺍﺩﺍﻟﺜﺎﻧﻲ ﻫﻮ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻷﻗﻮﺍﺱ ﻓﻲ RHSﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺃﻥ ﺍﻟﺠﺰء ﺍﻟﻤﻐﻠﻖ ﻳﻤﻜﻦ ﺗﻜﺮﺍﺭﻩ ﺇﻟﻰ
ﺃﺟﻞﻏﻴﺮ ﻣﺴﻤﻰ ﺃﻭ ﺗﺮﻛﻪ ﺗﻤﺎﻣﺎً .ﻳﺴﻤﺢ ﻫﺬﺍ ﺍﻻﻣﺘﺪﺍﺩ ﺑﺒﻨﺎء ﺍﻟﻘﻮﺍﺉﻢ ﺑﻘﺎﻋﺪﺓ ﻭﺍﺣﺪﺓ ،ﺑﺪﻻ ًﻣﻦ
ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻌﻮﺩﻳﺔ ﻭﻗﺎﻋﺪﺗﻴﻦ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻳﻤﻜﻦ ﻭﺻﻒ ﻗﻮﺍﺉﻢ ﺍﻟﻤﻌﺮﻓﺎﺕ ﺍﻟﻤﻔﺼﻮﻟﺔ
ﺑﻔﻮﺍﺻﻞﺑﺎﻟﻘﺎﻋﺪﺓ ﺍﻟﺘﺎﻟﻴﺔ:
BNF:
<<> →>exprﻧﺺ> expr< +
| ><ﻧﺺ> expr< -
| >ﺍﻟﻤﺼﻄﻠﺢ<
>ﻧﺺ<→ >ﺍﻟﻤﺼﻄﻠﺢ< * >ﺍﻟﻌﺎﻣﻞ<
| >ﺍﻟﻤﺼﻄﻠﺢ< > /ﺍﻟﻌﺎﻣﻞ<
| >ﻋﺎﻣﻞ<
>ﺍﻟﻌﺎﻣﻞ<→ ><exp< ** >factor
<>exp
<>) →>expﺇﻛﺴﺒﺮ<(
|ﺑﻄﺎﻗﺔ ﺗﻌﺮﻳﻒ
EBNF:
<> →>exprﺍﻟﻤﺼﻄﻠﺢ< })> (- | +ﻧﺺ<{ >
ﻧﺺ<→ >ﺍﻟﻌﺎﻣﻞ< })* | > (/ﺍﻟﻌﺎﻣﻞ<{ >ﺍﻟﻌﺎﻣﻞ
<→ ><>) →exp< }** >exp<{ >expﺇﻛﺴﺒﺮ<
(
|ﺑﻄﺎﻗﺔ ﺗﻌﺮﻳﻒ
ﻗﺎﻋﺪﺓBNF
ﻳﺤﺪﺩﺑﻮﺿﻮﺡ -ﻓﻲ ﺍﻟﻮﺍﻗﻊ ﻳﻔﺮﺽ -ﺍﻟﻌﺎﻣﻞ +ﺍﻟﺬﻱ ﻳﺠﺐ ﺗﺮﻛﻪ ﺗﺮﺍﺑﻄﻴﺎً .ﻭﻣﻊ ﺫﻟﻚ ،ﻓﺈﻥ ﺇﺻﺪﺍﺭ
، EBNF
ﻻﻳﻌﻨﻲ ﺍﺗﺠﺎﻩ ﺍﻟﺘﺠﻤﻊ .ﻳﺘﻢ ﺍﻟﺘﻐﻠﺐ ﻋﻠﻰ ﻫﺬﻩ ﺍﻟﻤﺸﻜﻠﺔ ﻓﻲ ﻣﺤﻠﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻋﻠﻰ ﺃﺳﺎﺱ
ﻗﻮﺍﻋﺪ EBNFﻟﻠﺘﻌﺒﻴﺮﺍﺕ ﻣﻦ ﺧﻼﻝ ﺗﺼﻤﻴﻢ ﻋﻤﻠﻴﺔ ﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻟﻔﺮﺽ ﺍﻻﺭﺗﺒﺎﻁ ﺍﻟﺼﺤﻴﺢ.
ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﻫﺬﺍ ﺑﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ .4
ﺗﺴﻤﺢﺑﻌﺾ ﺇﺻﺪﺍﺭﺍﺕ EBNFﺑﺈﺭﻓﺎﻕ ﺧﻂ ﺭﻗﻤﻲ ﻣﺮﺗﻔﻊ ﺑﺎﻟﻘﻮﺱ ﺍﻷﻳﻤﻦ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺣﺪ
ﺃﻋﻠﻰﻟﻌﺪﺩ ﺍﻟﻤﺮﺍﺕ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻓﻴﻬﺎ ﺗﻜﺮﺍﺭ ﺍﻟﺠﺰء ﺍﻟﻤﺮﻓﻖ .ﺃﻳﻀﺎً ،ﺗﺴﺘﺨﺪﻡ ﺑﻌﺾ ﺍﻹﺻﺪﺍﺭﺍﺕ
ﻋﻼﻣﺔﺍﻟﺠﻤﻊ ) (+ﺍﻟﻌﻠﻮﻳﺔ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺗﻜﺮﺍﺭ ﻭﺍﺣﺪ ﺃﻭ ﺃﻛﺜﺮ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ،
>ﻣﺠﻤﻊ<→ﻳﺒﺪﺃ>{<stmt< }>stmtﻧﻬﺎﻳﺔ
ﻭ
>ﻣﺠﻤﻊ<→ﻳﺒﺪﺃ}>{<+stmtﻧﻬﺎﻳﺔ
ﻣﺘﻜﺎﻓﺉﺔ.
ﺍﻟﻔﺼﻞ 3ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ 132
ﻓﻲﺍﻟﺴﻨﻮﺍﺕ ﺍﻷﺧﻴﺮﺓ ،ﻇﻬﺮﺕ ﺑﻌﺾ ﺍﻻﺧﺘﻼﻓﺎﺕ ﻓﻲ BNFﻭ .EBNFﻣﻦ ﺑﻴﻦ ﻫﺆﻻء ﻣﺎ
ﻳﻠﻲ:
• ﺑﺪﻻ ًﻣﻦ ﺍﻟﺴﻬﻢ ،ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻧﻘﻄﺘﻴﻦ ﻭﻳﺘﻢ ﻭﺿﻊ RHSﻋﻠﻰ ﺍﻟﺴﻄﺮ ﺍﻟﺘﺎﻟﻲ.
• ﺑﺪﻻ ًﻣﻦ ﺷﺮﻳﻂ ﻋﻤﻮﺩﻱ ﻟﻔﺼﻞ RHSsﺍﻟﺒﺪﻳﻠﺔ ،ﻳﺘﻢ ﻭﺿﻌﻬﺎ ﺑﺒﺴﺎﻃﺔ ﻓﻲ ﺧﻄﻮﻁ ﻣﻨﻔﺼﻠﺔ.
• ﺑﺪﻻ ًﻣﻦ ﺍﻷﻗﻮﺍﺱ ﺍﻟﻤﺮﺑﻌﺔ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺷﻲء ﻣﺎ ﺍﺧﺘﻴﺎﺭﻱ ،ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺧﻴﺎﺭ ﺍﻻﺷﺘﺮﺍﻙ.
ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ،
ﻣﻌﻠﻦﺍﻟﻤﻨﺸﺊ→ﻗﺎﺉﻤﺔ ﺍﻟﻤﻌﻠﻤﺎﺕ ﺍﻟﺮﺳﻤﻴﺔ) SimpleNameﻳﺨﺘﺎﺭ ،ﻳﻘﺮﺭ(
• ﺑﺪﻻ ًﻣﻦ ﺍﺳﺘﺨﺪﺍﻡ | ﺭﻣﺰ ﻓﻲ ﻗﺎﺉﻤﺔ ﺍﻟﻌﻨﺎﺻﺮ ﺑﻴﻦ ﻗﻮﺳﻴﻦ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺍﺧﺘﻴﺎﺭ ،ﻳﺘﻢ
ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻜﻠﻤﺎﺕ "ﻭﺍﺣﺪ ﻣﻦ" .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ،
ﻣﻬﻤﺔﺗﺸﻐﻴﻞ→ﻭﺍﺣﺪ ﻣﻦ = * = = - = + = ٪= /
>> = << = & = ^ = | =
3.3.3ﺍﻟﻘﻮﺍﻋﺪ ﻭﺍﻟﻤﻌﺮﻓﺎﺕ
ﻓﻲﻭﻗﺖ ﺳﺎﺑﻖ ﻣﻦ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ،ﺍﻗﺘﺮﺣﻨﺎ ﺃﻥ ﻫﻨﺎﻙ ﻋﻼﻗﺔ ﻭﺛﻴﻘﺔ ﺑﻴﻦ ﺃﺟﻬﺰﺓ ﺍﻟﺘﻮﻟﻴﺪ ﻭﺍﻟﺘﻌﺮﻑ
ﻋﻠﻰﻟﻐﺔ ﻣﻌﻴﻨﺔ .ﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﺑﺎﻟﻨﻈﺮ ﺇﻟﻰ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺨﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ ،ﻳﻤﻜﻦ ﺇﻧﺸﺎء ﺃﺩﺍﺓ
ﺍﻟﺘﻌﺮﻑﻋﻠﻰ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻘﻮﺍﻋﺪ ﺑﻄﺮﻳﻘﺔ ﺣﺴﺎﺑﻴﺔ .ﺗﻢ ﺗﻄﻮﻳﺮ ﻋﺪﺩ ﻣﻦ
ﺃﻧﻈﻤﺔﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺘﻲ ﺗﺆﺩﻱ ﻫﺬﺍ ﺍﻟﺒﻨﺎء .ﺗﺴﻤﺢ ﻫﺬﻩ ﺍﻷﻧﻈﻤﺔ ﺑﺎﻹﻧﺸﺎء ﺍﻟﺴﺮﻳﻊ ﻟﺠﺰء ﺗﺤﻠﻴﻞ ﺑﻨﺎء
ﺍﻟﺠﻤﻠﺔﻣﻦ ﻣﺘﺮﺟﻢ ﻟﻠﻐﺔ ﺟﺪﻳﺪﺓ ،ﻭﺑﺎﻟﺘﺎﻟﻲ ﻓﻬﻲ ﺫﺍﺕ ﻗﻴﻤﺔ ﻛﺒﻴﺮﺓ .ﻳﻄُﻠﻖ ﻋﻠﻰ ﺃﺣﺪ ﺃﻭﻝ ﻣﻮﻟﺪﺍﺕ
ﻣﺤﻠﻞﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺍﺳﻢ )3yaccﺟﻮﻧﺴﻮﻥ .(1975 ،ﻫﻨﺎﻙ ﺍﻵﻥ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻫﺬﻩ ﺍﻷﻧﻈﻤﺔ ﺍﻟﻤﺘﺎﺣﺔ.
ﻳﺴﻤﺢﻟﻮﺻﻒ ﻗﻮﺍﻋﺪ ﻟﻐﺔ ﻣﻌﻴﻨﺔ ﺑﺸﻜﻞ ﻣﻼﺉﻢ ،ﻣﺜﻞ ﺗﻮﺍﻓﻖ ﺍﻟﻨﻮﻉ .ﻗﺒﻞ ﺃﻥ
ﻣﻼﺣﻈﺔﺗﺎﺭﻳﺨﻴﺔ ﺫ
ﻧﺤﺪﺩﺷﻜﻞ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺼﻔﺎﺕ ﺭﺳﻤﻴﺎً ،ﻳﺠﺐ ﺃﻥ ﻧﻮﺿﺢ ﻣﻔﻬﻮﻡ
ﺍﻟﺪﻻﻻﺕﺍﻟﺜﺎﺑﺘﺔ. ﺗﻢﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺎﺕ
ﻓﻲﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ،
ﻭﻗﺪﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻟﺘﻘﺪﻳﻢ ﺃﻭﺻﺎﻑ
3.4.1ﺩﻻﻻﺕ ﺛﺎﺑﺘﺔ ﻛﺎﻣﻠﺔﻟﻠﻨﺤﻮ ﻭﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﻐﺎﺕ
ﻫﻨﺎﻙﺑﻌﺾ ﺧﺼﺎﺉﺺ ﺑﻨﻴﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﻳﺼﻌﺐ ﻭﺻﻔﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺒﺮﻣﺠﺔ) (Watt، 1979؛ ﻟﻘﺪ ﺗﻢ
، BNFﻭﺑﻌﻀﻬﺎ ﻣﺴﺘﺤﻴﻞ .ﻛﻤﺜﺎﻝ ﻋﻠﻰ ﻗﺎﻋﺪﺓ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺍﻟﺘﻲ ﻳﺼﻌﺐ ﺍﺳﺘﺨﺪﺍﻣﻬﺎﻛﺘﻌﺮﻳﻒ ﺭﺳﻤﻲ ﻟﻠﻐﺔ
ﺗﺤﺪﻳﺪﻫﺎﺑﺎﺳﺘﺨﺪﺍﻡ ، BNFﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﻗﻮﺍﻋﺪ ﺗﻮﺍﻓﻖ ﺍﻟﻨﻮﻉ .ﻓﻲ ، Java ﻳﻤﻜﻦﺇﺩﺧﺎﻟﻬﺎ ﻓﻲ ﻧﻈﺎﻡ ﺇﻧﺸﺎء ﻣﺘﺮﺟﻢ )
ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻻ ﻳﻤﻜﻦ ﺗﻌﻴﻴﻦ ﻗﻴﻤﺔ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﻟﻤﺘﻐﻴﺮ ﻧﻮﻉ ﻋﺪﺩ (Farrow، 1982؛ ﻭﻗﺪ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ
ﺻﺤﻴﺢ ،ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻌﻜﺲ ﻗﺎﻧﻮﻧﻲ .ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﻛﺄﺳﺎﺱﻟﻠﻌﺪﻳﺪ ﻣﻦ ﺃﻧﻈﻤﺔ ﺍﻟﺘﺤﺮﻳﺮ
ﺍﻟﻤﻮﺟﻬﺔﻧﺤﻮ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ )، 1981
ﻫﺬﺍﺍﻟﺘﻘﻴﻴﺪ ﻓﻲ ، BNFﺇﻻ ﺃﻧﻪ ﻳﺘﻄﻠﺐ ﺭﻣﻮﺯﺍً ﻭﻗﻮﺍﻋﺪ ﻏﻴﺮ ﻧﻬﺎﺉﻴﺔ ﺇﺿﺎﻓﻴﺔ .ﺇﺫﺍ
Teitelbaum and Reps؛ ، 1984
ﺗﻢﺗﺤﺪﻳﺪ ﺟﻤﻴﻊ ﻗﻮﺍﻋﺪ ﺍﻟﻜﺘﺎﺑﺔ ﻓﻲ Javaﻓﻲ ، BNFﻓﺴﺘﺼﺒﺢ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ
.(Fischer et al.ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺫﻟﻚ ،
ﺃﻛﺒﺮﻣﻦ ﺃﻥ ﺗﻜﻮﻥ ﻣﻔﻴﺪﺓ ،ﻷﻥ ﺣﺠﻢ ﺍﻟﻘﻮﺍﻋﺪ ﻳﺤﺪﺩ ﺣﺠﻢ ﻣﺤﻠﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ.
ﺗﻢﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ
ﻟﻠﺨﺼﺎﺉﺺﻓﻲ ﺃﻧﻈﻤﺔ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻠﻐﺔ
ﺍﻟﻄﺒﻴﻌﻴﺔ).(Correa ، 1992
3.4.2ﻣﻔﺎﻫﻴﻢ ﺃﺳﺎﺳﻴﺔ
ﺍﻟﻘﻮﺍﻋﺪﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺎﺕ ﻫﻲ ﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﺧﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ ﺗﻤﺖ ﺇﺿﺎﻓﺔ ﺳﻤﺎﺕ ﺇﻟﻴﻬﺎ
ﻭﻭﻇﺎﺉﻒﺣﺴﺎﺏ ﺍﻟﺴﻤﺎﺕ ﻭﺍﻟﻮﻇﺎﺉﻒ ﺍﻷﺻﻠﻴﺔ.ﺻﻔﺎﺕ ،ﺍﻟﻤﺮﺗﺒﻄﺔ ﺑﺎﻟﺮﻣﻮﺯ ﺍﻟﻨﺤﻮﻳﺔ )ﺍﻟﺮﻣﻮﺯ
ﺍﻟﻄﺮﻓﻴﺔﻭﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻴﺔ( ،ﺗﺸﺒﻪ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺑﻤﻌﻨﻰ ﺃﻧﻪ ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻟﻬﺎ ﻗﻴﻢ ﻣﺨﺼﺼﺔ ﻟﻬﺎ.
ﻭﻇﺎﺉﻒﺣﺴﺎﺏ ﺍﻟﺴﻤﺔ ،ﺗﺴﻤﻰ ﺃﺣﻴﺎﻧﺎً ﺍﻟﺪﻻﻟﻲ
ﺍﻟﻔﺼﻞ 3ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ 134
ﻭﻇﺎﺉﻒﻣﺮﺗﺒﻄﺔ ﺑﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮ .ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻟﺘﺤﺪﻳﺪ ﻛﻴﻔﻴﺔ ﺣﺴﺎﺏ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ.ﻭﻇﺎﺉﻒ
ﺍﻟﻤﺴﻨﺪ ،ﺍﻟﺘﻲ ﺗﻨﺺ ﻋﻠﻰ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺪﻻﻟﻴﺔ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﻐﺔ ،ﺗﺮﺗﺒﻂ ﺑﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮ.
ﺳﺘﺼﺒﺢﻫﺬﻩ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺃﻛﺜﺮ ﻭﺿﻮﺣﺎً ﺑﻌﺪ ﺃﻥ ﻧﺤﺪﺩ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺎﺕ ﺭﺳﻤﻴﺎً ﻭﻧﻘﺪﻡ
ﻣﺜﺎﻻً.
• ﺗﺮﺗﺒﻂ ﺑﻜﻞ ﻗﺎﻋﺪﺓ ﻧﺤﻮﻳﺔ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﺪﻻﻟﻴﺔ ﻭﻣﺠﻤﻮﻋﺔ ﻓﺎﺭﻏﺔ ﻣﻦ ﺍﻟﻮﻇﺎﺉﻒ
ﺍﻷﺻﻠﻴﺔﻋﻠﻰ ﺳﻤﺎﺕ ﺍﻟﺮﻣﻮﺯ ﻓﻲ ﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﻨﺤﻮﻳﺔ .ﻟﻘﺎﻋﺪﺓ 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ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺔ
ﻭﺃﻧﻮﺍﻋﻬﺎ.ﺗﻢ ﺗﻌﻴﻴﻦ ﻣﺤﺘﻮﻳﺎﺕ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﺑﻨﺎء ًﻋﻠﻰ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺼﺮﻳﺢ ﺍﻟﺴﺎﺑﻘﺔ .ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ،
ﺑﺎﻓﺘﺮﺍﺽﺃﻧﻪ ﻗﺪ ﺗﻢ ﺇﻧﺸﺎء ﺷﺠﺮﺓ ﺗﺤﻠﻴﻞ ﻏﻴﺮ ﻣﻨﺴﻮﺑﺔ ﻭﺃﻥ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﻣﻄﻠﻮﺑﺔ ،ﻓﺈﻥ ﺍﻟﺴﻤﺎﺕ
ﺍﻟﻮﺣﻴﺪﺓﺫﺍﺕ ﺍﻟﻘﻴﻢ ﻫﻲ ﺍﻟﺴﻤﺎﺕ ﺍﻟﺠﻮﻫﺮﻳﺔ ﻟﻠﻌﻘﺪ ﺍﻟﻄﺮﻓﻴﺔ .ﺑﺎﻟﻨﻈﺮ ﺇﻟﻰ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﺍﻟﺠﻮﻫﺮﻳﺔ
ﻓﻲﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ،ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﺪﻻﻟﻴﺔ ﻟﺤﺴﺎﺏ ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﺍﻟﻤﺘﺒﻘﻴﺔ.
ﻓﻲﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ ،ﺗﻨﺺ ﺍﻟﻘﺎﻋﺪﺓ ﺍﻷﺻﻠﻴﺔ ﻋﻠﻰ ﺃﻥ ﺳﻤﺔ ﺳﻠﺴﻠﺔ ﺍﻻﺳﻢ ﺍﻟﺨﺎﺻﺔ ﺑـ >ﺍﺳﻢ_
ﺍﻟﻤﺠﻤﻮﻋﺔ< ﻏﻴﺮ ﺍﻟﻄﺮﻓﻴﺔ ﻓﻲ ﺭﺃﺱ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻳﺠﺐ ﺃﻥ ﺗﺘﻄﺎﺑﻖ ﻣﻊ ﺳﻤﺔ ﺳﻠﺴﻠﺔ ﺍﻻﺳﻢ
ﺍﻟﺨﺎﺻﺔﺑـ >ﺍﺳﻢ_ﺍﻟﻤﺠﻤﻮﻋﺔ< ﺍﻟﺘﻲ ﺗﻠﻲ ﻧﻬﺎﻳﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ.
ﺑﻌﺪﺫﻟﻚ ،ﻧﻌﺘﺒﺮ ﻣﺜﺎﻻً ﺃﻛﺒﺮ ﻟﻘﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ .ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ،ﻳﻮﺿﺢ ﺍﻟﻤﺜﺎﻝ ﻛﻴﻒ ﻳﻤﻜﻦ
ﺍﺳﺘﺨﺪﺍﻡﻗﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ ﻟﻠﺘﺤﻘﻖ ﻣﻦ ﻗﻮﺍﻋﺪ ﺍﻟﻨﻮﻉ ﺍﻟﺨﺎﺻﺔ ﺑﺒﻴﺎﻥ ﺍﻹﺳﻨﺎﺩ ﺍﻟﺒﺴﻴﻂ .ﺇﻥ ﺑﻨﺎء
ﺍﻟﺠﻤﻠﺔﻭﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ﻟﺒﻴﺎﻥ ﺍﻟﻤﻬﻤﺔ ﻫﺬﺍ ﻫﻲ ﻛﻤﺎ ﻳﻠﻲ :ﺃﺳﻤﺎء ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻮﺣﻴﺪﺓ ﻫﻲﺃ ،ﺏ ،
ﻭﺝ.ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ ﻣﻦ ﺍﻟﺘﺨﺼﻴﺼﺎﺕ ﺇﻣﺎ ﻣﺘﻐﻴﺮﺍً ﺃﻭ ﺗﻌﺒﻴﺮﺍً ﻓﻲ ﺷﻜﻞ ﻣﺘﻐﻴﺮ
ﻣﻀﺎﻑﺇﻟﻰ ﻣﺘﻐﻴﺮ ﺁﺧﺮ .ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺃﺣﺪ ﻧﻮﻋﻴﻦ int :ﺃﻭ .realﻋﻨﺪﻣﺎ ﻳﻜﻮﻥ
ﻫﻨﺎﻙﻣﺘﻐﻴﺮﻳﻦ ﻋﻠﻰ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ ﻣﻦ ﺍﻟﻤﻬﻤﺔ ،ﻓﻼ ﺩﺍﻋﻲ ﻷﻥ ﻳﻜﻮﻧﺎ ﻣﻦ ﻧﻔﺲ ﺍﻟﻨﻮﻉ .ﻧﻮﻉ
ﺍﻟﺘﻌﺒﻴﺮﻋﻨﺪﻣﺎ ﺗﺨﺘﻠﻒ ﺃﻧﻮﺍﻉ ﺍﻟﻤﻌﺎﻣﻞ ﻫﻮ ﺣﻘﻴﻘﻲ ﺩﺍﺉﻤﺎً .ﻋﻨﺪﻣﺎ ﺗﻜﻮﻥ ﻣﺘﻄﺎﺑﻘﺔ ،ﻳﻜﻮﻥ ﻧﻮﻉ
ﺍﻟﺘﻌﺒﻴﺮﻫﻮ ﻧﻮﻉ ﺍﻟﻤﻌﺎﻣﻼﺕ .ﻳﺠﺐ ﺃﻥ ﻳﺘﻄﺎﺑﻖ ﻧﻮﻉ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﺴﺮ ﻣﻦ ﺍﻟﻤﻬﻤﺔ ﻣﻊ ﻧﻮﻉ ﺍﻟﺠﺎﻧﺐ
ﺍﻷﻳﻤﻦ.ﻟﺬﻟﻚ ﻳﻤﻜﻦ ﺧﻠﻂ ﺃﻧﻮﺍﻉ ﺍﻟﻤﻌﺎﻣﻼﺕ ﻓﻲ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ ،ﻭﻟﻜﻦ ﺍﻟﺘﺨﺼﻴﺺ ﻳﻜﻮﻥ
ﺻﺎﻟﺤﺎًﻓﻘﻂ ﺇﺫﺍ ﻛﺎﻥ ﺍﻟﻬﺪﻑ ﻭﺍﻟﻘﻴﻤﺔ ﺍﻟﻨﺎﺗﺠﺔ ﻋﻦ ﺗﻘﻴﻴﻢ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ ﻣﻦ ﻧﻔﺲ ﺍﻟﻨﻮﻉ .ﺗﺤﺪﺩ
ﻗﻮﺍﻋﺪﺍﻟﺴﻤﺔ ﺍﻟﻨﺤﻮﻳﺔ ﻫﺬﻩ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺪﻻﻟﻴﺔ ﺍﻟﺜﺎﺑﺘﺔ.
ﻳﺘﻢﻭﺻﻒ ﺳﻤﺎﺕ ﺍﻟﻘﻮﺍﻋﺪ ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻴﺔ ﻓﻲ ﻣﺜﺎﻝ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺴﻤﺎﺕ ﻓﻲ
ﺍﻟﻔﻘﺮﺍﺕﺍﻟﺘﺎﻟﻴﺔ:
• ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ—ﺳﻤﻴﺔ ﻣﺮﻛﺒﺔ ﻣﺮﺗﺒﻄﺔ ﺑﺎﻟﻘﻴﻢ ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻴﺔ > <varﻭ > .<exprﻳﺘﻢ
ﺍﺳﺘﺨﺪﺍﻣﻪﻟﺘﺨﺰﻳﻦ ﺍﻟﻨﻮﻉ ﺍﻟﻔﻌﻠﻲ int ،ﺃﻭ ، realﻟﻤﺘﻐﻴﺮ ﺃﻭ ﺗﻌﺒﻴﺮ .ﻓﻲ ﺣﺎﻟﺔ ﺍﻟﻤﺘﻐﻴﺮ ،ﻳﻜﻮﻥ
ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ ﺟﻮﻫﺮﻳﺎً .ﻓﻲ ﺣﺎﻟﺔ ﺍﻟﺘﻌﺒﻴﺮ ،ﻳﺘﻢ ﺗﺤﺪﻳﺪﻩ ﻣﻦ ﺍﻷﻧﻮﺍﻉ ﺍﻟﻔﻌﻠﻴﺔ ﻟﻠﻌﻘﺪﺓ ﺍﻟﻔﺮﻋﻴﺔ ﺃﻭ
ﺍﻟﻌﻘﺪﺍﻟﻔﺮﻋﻴﺔ ﻟـ >.expr< nonterminal
• ﺍﻟﻨﻮﻉ_ ﺍﻟﻤﺘﻮﻗﻊ—ﺳﻤﺔ ﻣﻮﺭﻭﺛﺔ ﻣﺮﺗﺒﻄﺔ ﺑـ > <exprﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻲ .ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻟﺘﺨﺰﻳﻦ
ﺍﻟﻨﻮﻉ ،ﺳﻮﺍء ﺃﻛﺎﻥ ﺻﺤﻴﺤﺎً ﺃﻡ ﺣﻘﻴﻘﻴﺎً ،ﺍﻟﻤﺘﻮﻗﻊ ﻟﻠﺘﻌﺒﻴﺮ ،ﻛﻤﺎ ﻫﻮ ﻣﺤﺪﺩ ﺑﻮﺍﺳﻄﺔ ﻧﻮﻉ
ﺍﻟﻤﺘﻐﻴﺮﻋﻠﻰ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﺴﺮ ﻣﻦ ﺑﻴﺎﻥ ﺍﻹﺳﻨﺎﺩ.
>ﺗﻌﻴﻴﻦ< ﺍﻟﺸﻜﻞ3.6
ﺷﺠﺮﺓﺗﺤﻠﻴﻞ ﻝ
ﺃ= ﺃ +ﺏ
<>expr
ﺗﻈُﻬﺮﺍﻟﺸﺠﺮﺓ ﻓﻲ ﺍﻟﺸﻜﻞ 3.8ﻗﻴﻢ ﺍﻟﺴﻤﺎﺕ ﺍﻟﻨﻬﺎﺉﻴﺔ ﻋﻠﻰ ﺍﻟﻌﻘﺪ .ﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ،ﺃﻳﺘﻢ
ﺗﻌﺮﻳﻔﻪﻋﻠﻰ ﺃﻧﻪ ﺣﻘﻴﻘﻲ ﻭﺏﻳﺘﻢ ﺗﻌﺮﻳﻔﻪ ﻋﻠﻰ ﺃﻧﻪ ﻋﺪﺩ ﺻﺤﻴﺢ.
ﻳﻌﺪﺗﺤﺪﻳﺪ ﺃﻣﺮ ﺗﻘﻴﻴﻢ ﺍﻟﺴﻤﺔ ﻟﻠﺤﺎﻟﺔ ﺍﻟﻌﺎﻣﺔ ﻟﻘﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ ﻣﺸﻜﻠﺔ ﻣﻌﻘﺪﺓ ﺗﺘﻄﻠﺐ ﺇﻧﺸﺎء
ﻣﺨﻄﻂﺗﺒﻌﻴﺔ ﻹﻇﻬﺎﺭ ﺟﻤﻴﻊ ﺗﺒﻌﻴﺎﺕ ﺍﻟﺴﻤﺔ.
ﺍﻟﻔﺼﻞ 3ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ 138
>ﺗﻌﻴﻴﻦ< ﺍﻟﺸﻜﻞ3.7
ﺗﺪﻓﻖﺍﻟﺼﻔﺎﺕ ﻓﻲ
ﺍﻟﺸﺠﺮﺓ
ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ
ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ
>ﻣﺨﺘﻠﻒ< ][3 >ﻣﺨﺘﻠﻒ< ][2 >ﻓﺎﺭ<
>ﺗﻌﻴﻴﻦ< ﺍﻟﺸﻜﻞ3.8
ﻳﻌﺰﻯﺑﺎﻟﻜﺎﻣﻞ
ﺗﺤﻠﻴﻞﺷﺠﺮﺓ
= ﺍﻟﻨﻮﻉ ﺍﻟﻔﻌﻠﻲ [>var< ]3 = ﺍﻟﻨﻮﻉ ﺍﻟﻔﻌﻠﻲ [>var< ]2 >ﻓﺎﺭ< ﺍﻟﻨﻮﻉﺍﻟﻔﻌﻠﻲ =
int_type ﺍﻟﻨﻮﻉﺍﻟﺤﻘﻴﻘﻲ ﺍﻟﻨﻮﻉﺍﻟﺤﻘﻴﻘﻲ
3.4.7ﺍﻟﺘﻘﻴﻴﻢ
ﻳﻌﺪﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﺪﻻﻟﻴﺔ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﻐﺔ ﺟﺰءﺍً ﺃﺳﺎﺳﻴﺎً ﻣﻦ ﺟﻤﻴﻊ ﺍﻟﻤﺠﻤﻌﻴﻦ .ﺣﺘﻰ ﻟﻮ ﻟﻢ
ﻳﺴﻤﻊﻛﺎﺗﺐ ﺍﻟﻤﺘﺮﺟﻢ ﻋﻦ ﻗﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ ﻣﻦ ﻗﺒﻞ ،ﻓﺴﻴﺤﺘﺎﺝ ﺇﻟﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺃﻓﻜﺎﺭﻫﻢ ﺍﻷﺳﺎﺳﻴﺔ
ﻟﺘﺼﻤﻴﻢﺍﺧﺘﺒﺎﺭﺍﺕ ﻗﻮﺍﻋﺪ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﻤﺘﺮﺟﻢ.
ﻫﻨﺎﻙﻋﺪﺓ ﺃﺳﺒﺎﺏ ﻣﺨﺘﻠﻔﺔ ﻭﺭﺍء ﺍﻟﺤﺎﺟﺔ ﺇﻟﻰ ﻣﻨﻬﺠﻴﺔ ﻭﺗﺪﻭﻳﻦ ﻟﻮﺻﻒ ﺍﻟﺪﻻﻻﺕ .ﻣﻦ
ﺍﻟﻮﺍﺿﺢﺃﻥ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻳﺤﺘﺎﺟﻮﻥ ﺇﻟﻰ ﻣﻌﺮﻓﺔ ﺑﺎﻟﻀﺒﻂ ﻣﺎ ﺗﻔﻌﻠﻪ ﻋﺒﺎﺭﺍﺕ ﺍﻟﻠﻐﺔ ﻗﺒﻞ ﺃﻥ ﻳﺘﻤﻜﻨﻮﺍ
ﻣﻦﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﺑﻔﻌﺎﻟﻴﺔ ﻓﻲ ﺑﺮﺍﻣﺠﻬﻢ .ﻳﺠﺐ ﺃﻥ ﻳﻌﺮﻑ ﻣﺆﻟﻔﻮ ﺍﻟﻤﺘﺮﺟﻤﻴﻦ ﺑﺎﻟﻀﺒﻂ ﻣﺎ ﺗﻌﻨﻴﻪ
ﺗﺮﺍﻛﻴﺐﺍﻟﻠﻐﺔ ﻟﺘﺼﻤﻴﻢ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻨﻔﻴﺬ ﻟﻬﻢ ﺑﺸﻜﻞ ﺻﺤﻴﺢ .ﺇﺫﺍ ﻛﺎﻧﺖ ﻫﻨﺎﻙ ﻣﻮﺍﺻﻔﺎﺕ ﺩﻻﻻﺕ
ﺩﻗﻴﻘﺔﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ،ﻓﻤﻦ ﺍﻟﻤﺤﺘﻤﻞ ﺃﻥ ﻳﺘﻢ ﺇﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﻬﺬﻩ ﺍﻟﻠﻐﺔ ﺩﻭﻥ
ﺍﺧﺘﺒﺎﺭ.ﺃﻳﻀﺎً ،ﻳﻤﻜﻦ ﺇﻇﻬﺎﺭ ﺍﻟﻤﺘﺮﺟﻤﻴﻦ ﻹﻧﺘﺎﺝ ﺑﺮﺍﻣﺞ ﺗﻈﻬﺮ ﺑﺎﻟﻀﺒﻂ ﺍﻟﺴﻠﻮﻙ ﺍﻟﻮﺍﺭﺩ ﻓﻲ ﺗﻌﺮﻳﻒ
ﺍﻟﻠﻐﺔ ؛ﺃﻱ ﺃﻧﻪ ﻳﻤﻜﻦ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺘﻬﺎ .ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﻮﺍﺻﻔﺎﺕ ﺍﻟﻜﺎﻣﻠﺔ ﻟﺒﻨﺎء ﺍﻟﺠﻤﻠﺔ
ﻭﺩﻻﻻﺕﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺑﻮﺍﺳﻄﺔ ﺃﺩﺍﺓ ﻹﻧﺸﺎء ﻣﺘﺮﺟﻢ ﻟﻠﻐﺔ ﺗﻠﻘﺎﺉﻴﺎً .ﺃﺧﻴﺮﺍً،
ﻳﺤﺪﺩﻣﻄﻮﺭﻭ ﺍﻟﺒﺮﺍﻣﺞ ﻭﻣﺼﻤﻤﻲ ﺍﻟﻤﺘﺮﺟﻢ ﻋﺎﺩﺓ ًﺩﻻﻻﺕ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻣﻦ ﺧﻼﻝ ﻗﺮﺍءﺓ
ﺍﻟﺘﻔﺴﻴﺮﺍﺕﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﻓﻲ ﻛﺘﻴﺒﺎﺕ ﺍﻟﻠﻐﺔ .ﻧﻈﺮﺍً ﻷﻥ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﺘﻔﺴﻴﺮﺍﺕ ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﻜﻮﻥ ﻏﻴﺮ
ﺩﻗﻴﻘﺔﻭﻏﻴﺮ ﻛﺎﻣﻠﺔ ،ﻓﻤﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻫﺬﺍ ﺍﻟﻨﻬﺞ ﻏﻴﺮ ﻣﺮﺽ .ﻧﻈﺮﺍً ﻟﻌﺪﻡ ﻭﺟﻮﺩ ﻣﻮﺍﺻﻔﺎﺕ
ﺩﻻﻻﺕﻛﺎﻣﻠﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ،ﻧﺎﺩﺭﺍً ﻣﺎ ﻳﺘﻢ ﺇﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺩﻭﻥ ﺍﺧﺘﺒﺎﺭ ،ﻭﻻ ﻳﺘﻢ ﺇﻧﺸﺎء
ﺍﻟﻤﺠﻤﻌﻴﻦﺍﻟﺘﺠﺎﺭﻳﻴﻦ ﺗﻠﻘﺎﺉﻴﺎً ﻣﻦ ﺃﻭﺻﺎﻑ ﺍﻟﻠﻐﺔ.
.ﻭﻫﻲﻟﻐﺔ ﻭﻇﻴﻔﻴﺔ ﻣﻮﺻﻮﻓﺔ ﻓﻲ ﺍﻟﻔﺼﻞ ، 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
ﺍﺫﻫﺐﺇﻟﻰﻣﻠﺼﻖ
ﻟﻮﻓﺎﺭ ﺭﻳﻠﻮﺏ ﻓﺎﺭﺍﺫﻫﺐ ﺇﻟﻰﻣﻠﺼﻖ
ﻓﻲﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻣﻦ ،ﺗﻢ ﻭﺻﻒ ﺩﻻﻻﺕ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﻤﺨﺘﻠﻔﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﻟﻠﻐﺔ
ﺍﻟﻮﺳﻴﻄﺔ.
ﻭﺻﻒﺍﻟﻨﺤﻮ ﻭﺍﻟﻤﻌﺎﻧﻲ ﺍﻟﻔﺼﻞ3 142
3.5.1.2ﺍﻟﺘﻘﻴﻴﻢ
ﻛﺎﻥﺃﻭﻝ ﻭﺃﻫﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻠﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ ﺍﻟﺮﺳﻤﻴﺔ ﻫﻮ ﻭﺻﻒ ﺩﻻﻻﺕ (I )Wegner ، 1972
.PL /ﺗﻢ ﺗﺴﻤﻴﺔ ﻫﺬﻩ ﺍﻵﻟﺔ ﺍﻟﻤﺠﺮﺩﺓ ﺍﻟﺨﺎﺻﺔ ﻭﻗﻮﺍﻋﺪ ﺍﻟﺘﺮﺟﻤﺔ ﻟـ PL / Iﻣﻌﺎً ﺑﺎﺳﻢ ﻟﻐﺔ ﺗﻌﺮﻳﻒ
ﻓﻴﻴﻨﺎ) ، (VDLﺑﻌﺪ ﺍﻟﻤﺪﻳﻨﺔ ﺍﻟﺘﻲ ﺻﻤﻤﺘﻬﺎ ﺷﺮﻛﺔ .IBM
3.5.2ﺩﻻﻻﺕ ﺍﻟﻜﻠﻤﺎﺕ
ﺩﻻﻻﺕﺩﻻﻻﺕﻫﻲ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﺮﺳﻤﻴﺔ ﺍﻷﻛﺜﺮ ﺻﺮﺍﻣﺔ ﻭﺍﻷﻛﺜﺮ ﺷﻬﺮﺓ ﻟﻮﺻﻒ ﻣﻌﻨﻰ ﺍﻟﺒﺮﺍﻣﺞ.
ﻳﻌﺘﻤﺪﺑﻘﻮﺓ ﻋﻠﻰ ﻧﻈﺮﻳﺔ ﺍﻟﻮﻇﻴﻔﺔ ﺍﻟﻌﻮﺩﻳﺔ .ﺇﻥ ﺍﻟﻤﻨﺎﻗﺸﺔ ﺍﻟﺸﺎﻣﻠﺔ ﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ
ﻟﻮﺻﻒﺩﻻﻻﺕ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﺑﺎﻟﻀﺮﻭﺭﺓ ﻃﻮﻳﻠﺔ ﻭﻣﻌﻘﺪﺓ .ﻧﻬﺪﻑ ﺇﻟﻰ ﺗﺰﻭﻳﺪ ﺍﻟﻘﺎﺭﺉ ﺑﻤﻘﺪﻣﺔ
ﻟﻠﻤﻔﺎﻫﻴﻢﺍﻟﻤﺮﻛﺰﻳﺔ ﻟﻠﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ،ﺇﻟﻰ ﺟﺎﻧﺐ ﺑﻌﺾ ﺍﻷﻣﺜﻠﺔ ﺍﻟﺒﺴﻴﻄﺔ ﺫﺍﺕ ﺍﻟﺼﻠﺔ
ﺑﻤﻮﺍﺻﻔﺎﺕﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ.
ﺗﺘﻄﻠﺐﻋﻤﻠﻴﺔ ﺑﻨﺎء ﻣﻮﺍﺻﻔﺎﺕ ﺩﻻﻻﺕ ﺗﻌﺮﻳﻔﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺃﻥ ﻳﻘﻮﻡ ﺍﻟﻤﺮء ﺑﺘﻌﺮﻳﻒ ﻛﻞ
ﻛﻴﺎﻥﻟﻐﻮﻱ ﻛﻼ ًﻣﻦ ﻛﺎﺉﻦ ﺭﻳﺎﺿﻲ ﻭﻭﻇﻴﻔﺔ ﺗﺮﺳﻢ ﻣﺜﻴﻼﺕ ﻫﺬﺍ ﺍﻟﻜﻴﺎﻥ ﺍﻟﻠﻐﻮﻱ ﻋﻠﻰ ﻣﺜﻴﻼﺕ
ﺍﻟﻜﺎﺉﻦﺍﻟﺮﻳﺎﺿﻲ .ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﻜﺎﺉﻨﺎﺕ ﻣﺤﺪﺩﺓ ﺑﺪﻗﺔ ،ﻓﺈﻧﻬﺎ ﺗﻤﺜﻞ ﺍﻟﻤﻌﻨﻰ ﺍﻟﺪﻗﻴﻖ ﻟﻠﻜﻴﺎﻧﺎﺕ
ﺍﻟﻤﻘﺎﺑﻠﺔﻟﻬﺎ .ﺗﺴﺘﻨﺪ ﺍﻟﻔﻜﺮﺓ ﺇﻟﻰ ﺣﻘﻴﻘﺔ ﺃﻥ ﻫﻨﺎﻙ ﻃﺮﻗﺎً ﺻﺎﺭﻣﺔ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ
ﻭﻟﻜﻦﻟﻴﺲ ﻫﻨﺎﻙ ﺗﺮﺍﻛﻴﺐ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ .ﺗﻜﻤﻦ ﺻﻌﻮﺑﺔ ﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﻓﻲ ﺇﻧﺸﺎء ﺍﻟﻜﺎﺉﻨﺎﺕ
ﻭﻭﻇﺎﺉﻒﺍﻟﺘﻌﻴﻴﻦ .ﺍﻟﻄﺮﻳﻘﺔ ﺗﺴﻤﻰﻣﻌﻠﻢ ﺏﻷﻥ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﺗﺪﻝ ﻋﻠﻰ ﻣﻌﻨﻰ ﺍﻟﻜﻴﺎﻧﺎﺕ
ﺍﻟﻨﺤﻮﻳﺔﺍﻟﻤﻘﺎﺑﻠﺔ ﻟﻬﺎ.
ﻭﻇﺎﺉﻒﺍﻟﺘﻌﻴﻴﻦ ﺍﻟﺨﺎﺻﺔ ﺑﻤﻮﺍﺻﻔﺎﺕ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺪﻻﻟﻴﺔ ،ﻣﺜﻞ ﺟﻤﻴﻊ ﺍﻟﻮﻇﺎﺉﻒ ﻓﻲ
ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ،ﻟﻬﺎ ﻣﺠﺎﻝ ﻭﻧﻄﺎﻕ .ﺍﻟﻤﺠﺎﻝ ﻫﻮ ﻣﺠﻤﻮﻋﺔ ﺍﻟﻘﻴﻢ ﺍﻟﺘﻲ ﺗﻌﺘﺒﺮ ﻣﻌﻠﻤﺎﺕ ﺷﺮﻋﻴﺔ
ﻟﻠﻮﻇﻴﻔﺔ ؛ﺍﻟﻨﻄﺎﻕ ﻫﻮ ﻣﺠﻤﻮﻋﺔ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﺘﻲ ﻳﺘﻢ ﺗﻌﻴﻴﻦ ﺍﻟﻤﻌﻠﻤﺎﺕ ﺇﻟﻴﻬﺎ .ﻓﻲ ﺩﻻﻻﺕ
ﺍﻟﺪﻻﻟﺔ ،ﻳﻄُﻠﻖ ﻋﻠﻰ ﺍﻟﻤﺠﺎﻝ ﺍﺳﻢﺍﻟﻤﺠﺎﻝ ﺍﻟﻨﺤﻮﻱ ،ﻷﻧﻬﺎ ﺍﻟﻬﻴﺎﻛﻞ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺘﻲ ﻳﺘﻢ ﺗﻌﻴﻴﻨﻬﺎ.
ﺍﻟﻨﻄﺎﻕﻳﺴﻤﻰﺍﻟﻤﺠﺎﻝ ﺍﻟﺪﻻﻟﻲ.
ﺗﺮﺗﺒﻂﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﺔ ﺑﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻞ .ﻓﻲ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ ،ﺗﺘُﺮﺟﻢ ﺗﺮﻛﻴﺒﺎﺕ ﻟﻐﺔ
ﺍﻟﺒﺮﻣﺠﺔﺇﻟﻰ ﺗﺮﻛﻴﺒﺎﺕ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺃﺑﺴﻂ ،ﻭﺍﻟﺘﻲ ﺗﺼﺒﺢ ﺃﺳﺎﺳﺎً ﻟﻤﻌﻨﻰ
143 3.5ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ :ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ
ﺑﻨﺎء.ﻓﻲ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ،ﻳﺘﻢ ﺗﻌﻴﻴﻦ ﺗﺮﺍﻛﻴﺐ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺇﻟﻰ ﻛﺎﺉﻨﺎﺕ ﺭﻳﺎﺿﻴﺔ ،ﺇﻣﺎ
ﻣﺠﻤﻮﻋﺎﺕﺃﻭ ،ﻓﻲ ﻛﺜﻴﺮ ﻣﻦ ﺍﻷﺣﻴﺎﻥ ،ﻭﻇﺎﺉﻒ .ﻭﻣﻊ ﺫﻟﻚ ،ﻋﻠﻰ ﻋﻜﺲ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻠﻴﺔ ،
ﻓﺈﻥﺩﻻﻻﺕ ﺍﻟﺪﻻﻻﺕ ﻻ ﺗﺸﻜﻞ ﻧﻤﻮﺫﺟﺎً ﻟﻠﻤﻌﺎﻟﺠﺔ ﺍﻟﺤﺴﺎﺑﻴﺔ ﺧﻄﻮﺓ ﺑﺨﻄﻮﺓ ﻟﻠﺒﺮﺍﻣﺞ.
3.5.2.1ﻣﺜﺎﻻﻥ ﺑﺴﻴﻄﺎﻥ
ﻧﺤﻦﻧﺴﺘﺨﺪﻡ ﺑﻨﻴﺔ ﻟﻐﺔ ﺑﺴﻴﻄﺔ ﻟﻠﻐﺎﻳﺔ ،ﺗﻤﺜﻴﻼﺕ ﺳﻠﺴﻠﺔ ﺍﻷﺣﺮﻑ ﻟﻸﺭﻗﺎﻡ ﺍﻟﺜﻨﺎﺉﻴﺔ ،ﻟﺘﻘﺪﻳﻢ
ﻃﺮﻳﻘﺔﺍﻟﺪﻻﻟﺔ .ﻳﻤﻜﻦ ﻭﺻﻒ ﺑﻨﺎء ﺟﻤﻠﺔ ﻫﺬﻩ ﺍﻷﺭﻗﺎﻡ ﺍﻟﺜﻨﺎﺉﻴﺔ ﻣﻦ ﺧﻼﻝ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺘﺎﻟﻴﺔ:
ﺷﺠﺮﺓﺗﺤﻠﻴﻞ ﻟﻠﻤﺜﺎﻝ ﺍﻟﺮﻗﻢ ﺍﻟﺜﻨﺎﺉﻲ ، 110،ﻳﻈﻬﺮ ﻓﻲ ﺍﻟﺸﻜﻞ .3.9ﻻﺣﻆ ﺃﻧﻨﺎ ﻭﺿﻌﻨﺎ ﺍﻟﻔﻮﺍﺻﻞ
ﺍﻟﻌﻠﻴﺎﺣﻮﻝ ﺍﻷﺭﻗﺎﻡ ﺍﻟﻨﺤﻮﻳﺔ ﻹﻇﻬﺎﺭ ﺃﻧﻬﺎ ﻟﻴﺴﺖ ﺃﺭﻗﺎﻣﺎً ﺭﻳﺎﺿﻴﺔ .ﻫﺬﺍ ﻣﺸﺎﺑﻪ ﻟﻠﻌﻼﻗﺔ ﺑﻴﻦ ﺍﻷﺭﻗﺎﻡ
ﺍﻟﻤﺸﻔﺮﺓ ASCIIﻭﺍﻷﺭﻗﺎﻡ ﺍﻟﺮﻳﺎﺿﻴﺔ .ﻋﻨﺪﻣﺎ ﻳﻘﺮﺃ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺭﻗﻤﺎً ﻛﺴﻠﺴﻠﺔ ،ﻳﺠﺐ ﺗﺤﻮﻳﻠﻪ ﺇﻟﻰ ﺭﻗﻢ
ﺭﻳﺎﺿﻲﻗﺒﻞ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻛﻘﻴﻤﺔ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ.
<>bin_num ﺍﻟﺸﻜﻞ3.9
ﺷﺠﺮﺓﺗﺤﻠﻴﻞ ﻟﻠﻌﺪﺩ
ﺍﻟﺜﻨﺎﺉﻲ110
""0 <>bin_num
""1 <>bin_num
""1
ﻓﻲﻣﺜﺎﻟﻨﺎ ،ﻳﺠﺐ ﺃﻥ ﺗﺮﺗﺒﻂ ﺍﻷﺭﻗﺎﻡ ﺍﻟﻌﺸﺮﻳﺔ ﺑﺄﻭﻝ ﻗﺎﻋﺪﺗﻴﻦ ﻧﺤﻮﻳﺘﻴﻦ .ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ
ﺍﻷﺧﺮﻯﻫﻲ ،ﺑﻤﻌﻨﻰ ﻣﺎ ،ﻗﻮﺍﻋﺪ ﺣﺴﺎﺑﻴﺔ ،ﻷﻧﻬﺎ ﺗﺠﻤﻊ ﺑﻴﻦ ﺭﻣﺰ ﻃﺮﻓﻲ ،ﻳﻤﻜﻦ ﺃﻥ ﻳﺮﺗﺒﻂ ﺑﻪ
ﻛﺎﺉﻦ ،ﻣﻊ ﻏﻴﺮ ﻧﻬﺎﺉﻲ ،ﻭﺍﻟﺬﻱ ﻳﻤﻜﻦ ﺗﻮﻗﻌﻪ ﻟﺘﻤﺜﻴﻞ ﺑﻌﺾ ﺍﻟﺒﻨﺎء .ﺑﺎﻓﺘﺮﺍﺽ ﺃﻥ ﺍﻟﺘﻘﻴﻴﻢ ﻳﺘﻘﺪﻡ
ﺇﻟﻰﺃﻋﻠﻰ ﻓﻲ ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ،
ﺍﻟﻔﺼﻞ 3ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ 144
ﺳﻴﻜﻮﻥﻟﻠﻤﻌﻨﻰ ﻏﻴﺮ ﺍﻟﻨﻬﺎﺉﻲ ﻓﻲ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﻤﻦ ﺑﺎﻟﻔﻌﻞ ﻣﻌﻨﺎﻩ ﺍﻟﻤﺮﻓﻖ .ﻟﺬﺍ ،ﻓﺈﻥ ﺍﻟﻘﺎﻋﺪﺓ
ﺍﻟﻨﺤﻮﻳﺔﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻋﻨﺼﺮ ﻏﻴﺮ ﻧﻬﺎﺉﻲ ﻣﺜﻞ RHSﺗﺘﻄﻠﺐ ﻭﻇﻴﻔﺔ ﺗﺤﺴﺐ ﻣﻌﻨﻰ ، LHS
ﻭﺍﻟﺘﻲﺗﻤﺜﻞ ﻣﻌﻨﻰ RHSﺍﻟﻜﺎﻣﻞ.
ﺍﻟﻮﻇﻴﻔﺔﺍﻟﺪﻻﻟﻴﺔ ،ﺍﻟﻤﺴﻤﺎﺓ Mﺳﻠﺔ ﻣﻬﻤﻼﺕ ،ﻳﻌﻴﻦ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﻨﺤﻮﻳﺔ ،ﻛﻤﺎ ﻫﻮ ﻣﻮﺿﺢ ﻓﻲ
ﺍﻟﻘﻮﺍﻋﺪﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺴﺎﺑﻘﺔ ،ﻟﻠﻜﺎﺉﻨﺎﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ، Nﻣﺠﻤﻮﻋﺔ ﺍﻷﺭﻗﺎﻡ ﺍﻟﻌﺸﺮﻳﺔ ﻏﻴﺮ ﺍﻟﺴﺎﻟﺒﺔ.
ﺍﻟﻮﻇﻴﻔﺔ.Mﺳﻠﺔ ﻣﻬﻤﻼﺕﻳﻌﺮﻑ ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ:
ﻳﻤﻜﻦﺭﺑﻂ ﺍﻟﻤﻌﺎﻧﻲ ،ﺃﻭ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﻤﺸُﺎﺭ ﺇﻟﻴﻬﺎ )ﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ﺃﺭﻗﺎﻣﺎً ﻋﺸﺮﻳﺔ( ،
ﺑﻌﻘُﺪﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻤﻮﺿﺤﺔ ﻓﻲ ﺍﻟﺼﻔﺤﺔ ﺍﻟﺴﺎﺑﻘﺔ ،ﻣﻤﺎ ﻳﻨﺘﺞ ﻋﻨﻪ ﺍﻟﺸﺠﺮﺓ ﻓﻲ ﺍﻟﺸﻜﻞ
.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
ﻓﻲﺍﻷﻗﺴﺎﻡ ﺍﻟﺘﺎﻟﻴﺔ ،ﻧﻘﺪﻡ ﺃﻭﺻﺎﻑ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻟﺒﻌﺾ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺒﺴﻴﻄﺔ .ﺃﻫﻢ
ﺍﻓﺘﺮﺍﺽﻣﺒﺴﻂ ﺗﻢ ﺇﺟﺮﺍﺅﻩ ﻫﻨﺎ ﻫﻮ ﺃﻥ ﻛﻼ ﻣﻦ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻭﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ ﻟﻠﺒﻨﻰ ﺻﺤﻴﺤﺔ.
ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺫﻟﻚ ،ﻧﻔﺘﺮﺽ ﺃﻧﻪ ﺗﻢ ﺗﻀﻤﻴﻦ ﻧﻮﻋﻴﻦ ﻋﺪﺩﻳﻴﻦ ﻓﻘﻂ :ﻋﺪﺩ ﺻﺤﻴﺢ ﻭ ﻣﻨﻄﻘﻲ.
3.5.2.2ﺣﺎﻟﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ
ﻳﻤﻜﻦﺗﻌﺮﻳﻒ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻟﺒﺮﻧﺎﻣﺞ ﻣﺎ ﻣﻦ ﺣﻴﺚ ﺗﻐﻴﺮﺍﺕ ﺍﻟﺤﺎﻟﺔ ﻓﻲ ﺟﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ ﻣﺜﺎﻟﻲ.
ﻳﺘﻢﺗﻌﺮﻳﻒ ﺩﻻﻻﺕ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺑﻬﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ،ﻭﻳﺘﻢ ﺗﻌﺮﻳﻒ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ﺑﻨﻔﺲ ﺍﻟﻄﺮﻳﻘﺔ
ﺗﻘﺮﻳﺒﺎً.ﻭﻣﻊ ﺫﻟﻚ ،ﻓﻲ ﻣﺰﻳﺪ ﻣﻦ ﺍﻟﺘﺒﺴﻴﻂ ،ﻳﺘﻢ ﺗﻌﺮﻳﻒ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻣﻦ ﺣﻴﺚ ﻗﻴﻢ ﺟﻤﻴﻊ
ﻣﺘﻐﻴﺮﺍﺕﺍﻟﺒﺮﻧﺎﻣﺞ ﻓﻘﻂ .ﻟﺬﻟﻚ ،ﺗﺴﺘﺨﺪﻡ ﺩﻻﻻﺕ ﺍﻟﺪﻻﻻﺕ ﺣﺎﻟﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻟﻮﺻﻒ ﺍﻟﻤﻌﻨﻰ ،
ﺑﻴﻨﻤﺎﺗﺴﺘﺨﺪﻡ ﺩﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻞ ﺣﺎﻟﺔ ﺍﻵﻟﺔ .ﻳﺘﻤﺜﻞ ﺍﻻﺧﺘﻼﻑ ﺍﻟﺮﺉﻴﺴﻲ ﺑﻴﻦ ﺩﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻞ
ﻭﺍﻟﺪﻻﻻﺕﺍﻟﺪﻻﻟﻴﺔ ﻓﻲ ﺃﻥ ﺗﻐﻴﻴﺮﺍﺕ ﺍﻟﺤﺎﻟﺔ ﻓﻲ ﺩﻻﻻﺕ ﺍﻟﺘﺸﻐﻴﻞ ﻳﺘﻢ ﺗﺤﺪﻳﺪﻫﺎ ﺑﻮﺍﺳﻄﺔ
ﺧﻮﺍﺭﺯﻣﻴﺎﺕﻣﺸﻔﺮﺓ ،ﻣﻜﺘﻮﺑﺔ ﻓﻲ ﺑﻌﺾ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ،ﺑﻴﻨﻤﺎ ﻓﻲ ﺩﻻﻻﺕ ﺍﻟﺪﻻﻟﺔ ،ﻳﺘﻢ ﺗﺤﺪﻳﺪ
ﺗﻐﻴﻴﺮﺍﺕﺍﻟﺤﺎﻟﺔ ﻣﻦ ﺧﻼﻝ ﻭﻇﺎﺉﻒ ﺭﻳﺎﺿﻴﺔ.
ﺩﻉﺣﺎﻻﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻳﺘﻢ ﺗﻤﺜﻴﻠﻬﺎ ﻛﻤﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻷﺯﻭﺍﺝ ﺍﻟﻤﺮﺗﺒﺔ ،ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ:
ﻛﻞ iﻫﻮ ﺍﺳﻢ ﻣﺘﻐﻴﺮ ،ﻭ vﺍﻟﻤﻘﺘﺮﻧﺔ ﺑﻪ ﻫﻲ ﺍﻟﻘﻴﻢ ﺍﻟﺤﺎﻟﻴﺔ ﻟﺘﻠﻚ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ .ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻷﻱ
ﺣﺮﻑ vﻗﻴﻤﺔ ﺧﺎﺻﺔﺃﻭﻧﺪﻳﻒ ،ﻣﻤﺎ ﻳﺸﻴﺮ ﺇﻟﻰ ﺃﻥ ﺍﻟﻤﺘﻐﻴﺮ ﺍﻟﻤﺮﺗﺒﻂ ﺑﻪ ﻏﻴﺮ ﻣﺤﺪﺩ ﺣﺎﻟﻴﺎً .ﺩﻉ
VARMAPﺗﻜﻮﻥ ﺩﺍﻟﺔ ﻣﻦ ﻣﻌﻠﻤﺘﻴﻦ :ﺍﺳﻢ ﻣﺘﻐﻴﺮ ﻭﺣﺎﻟﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﻗﻴﻤﺔ VARMAP )iﻱ vﻫﻮ (، s
ﻱ)ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻘﺘﺮﻧﺔ ﺑـ iﻱﻓﻲ ﺍﻟﺪﻭﻟﺔ( .ﺗﻘﻮﻡ ﻣﻌﻈﻢ ﻭﻇﺎﺉﻒ ﺗﻌﻴﻴﻦ ﺍﻟﺪﻻﻻﺕ ﻟﻠﺒﺮﺍﻣﺞ ﻭﺑﻨﺎء
ﺍﻟﺒﺮﺍﻣﺞﺑﺘﻌﻴﻴﻦ ﺍﻟﺪﻭﻝ ﺇﻟﻰ ﺍﻟﺪﻭﻝ .ﺗﺴُﺘﺨﺪﻡ ﺗﻐﻴﻴﺮﺍﺕ ﺍﻟﺤﺎﻟﺔ ﻫﺬﻩ ﻟﺘﺤﺪﻳﺪ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ ﻭﺑﻨﻴﺎﺕ
ﺍﻟﺒﺮﺍﻣﺞ.ﻳﺘﻢ ﺗﻌﻴﻴﻦ ﺑﻌﺾ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ -ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺍﻟﺘﻌﺒﻴﺮﺍﺕ -ﻋﻠﻰ ﺍﻟﻘﻴﻢ ﻭﻟﻴﺲ
ﺍﻟﺤﺎﻻﺕ.
3.5.2.3ﺍﻟﺘﻌﺒﻴﺮﺍﺕ
ﺍﻟﺘﻌﺒﻴﺮﺍﺕﺃﺳﺎﺳﻴﺔ ﻟﻤﻌﻈﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ .ﻧﻔﺘﺮﺽ ﻫﻨﺎ ﺃﻥ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻟﻴﺲ ﻟﻬﺎ ﺁﺛﺎﺭ ﺟﺎﻧﺒﻴﺔ.
ﻋﻼﻭﺓﻋﻠﻰ ﺫﻟﻚ ،ﻧﺤﻦ ﻧﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺒﺴﻴﻄﺔ ﺟﺪﺍً ﻓﻘﻂ :ﺍﻟﻌﺎﻣﻼﻥ ﺍﻟﻮﺣﻴﺪﺍﻥ ﻫﻤﺎ +ﻭ *
،ﻭﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻟﻠﺘﻌﺒﻴﺮ ﻋﺎﻣﻞ ﻭﺍﺣﺪ ﻋﻠﻰ ﺍﻷﻛﺜﺮ ؛ ﺍﻟﻤﻌﺎﻣﻼﺕ ﺍﻟﻮﺣﻴﺪﺓ ﻫﻲ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ
ﺍﻟﻌﺪﺩﻳﺔﺍﻟﺼﺤﻴﺤﺔ ﻭﺍﻷﺭﻗﺎﻡ ﺍﻟﺤﺮﻓﻴﺔ ﺍﻟﺼﺤﻴﺤﺔ ؛ ﻻ ﻳﻮﺟﺪ ﺃﻗﻮﺍﺱ ﻭﻗﻴﻤﺔ ﺍﻟﺘﻌﺒﻴﺮ ﻋﺪﺩ ﺻﺤﻴﺢ.
ﻓﻴﻤﺎﻳﻠﻲ ﻭﺻﻒ BNFﻟﻬﺬﻩ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ:
ﺍﻟﺨﻄﺄﺍﻟﻮﺣﻴﺪ ﺍﻟﺬﻱ ﻧﻌﺘﺒﺮﻩ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻫﻮ ﻣﺘﻐﻴﺮ ﻟﻪ ﻗﻴﻤﺔ ﻏﻴﺮ ﻣﺤﺪﺩﺓ .ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ
ﻳﻤﻜﻦﺃﻥ ﺗﺤﺪﺙ ﺃﺧﻄﺎء ﺃﺧﺮﻯ ،ﻟﻜﻦ ﻣﻌﻈﻤﻬﺎ ﻳﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻵﻟﺔ .ﺩﻉ Zﻳﻜﻮﻥ ﻣﺠﻤﻮﻋﺔ ﺍﻷﻋﺪﺍﺩ
ﺍﻟﺼﺤﻴﺤﺔ ،ﻭﺩﻉﺧﻄﺄﺗﻜﻮﻥ ﻗﻴﻤﺔ ﺍﻟﺨﻄﺄ .ﺛﻢ Zﺡ }ﺧﻄﺄ{ ﻫﻮ ﺍﻟﻤﺠﺎﻝ ﺍﻟﺪﻻﻟﻲ ﻟﻠﻤﻮﺍﺻﻔﺎﺕ
ﺍﻟﻮﺻﻔﻴﺔﻟﺘﻌﺒﻴﺮﺍﺗﻨﺎ.
ﺗﺘﺒﻊﻭﻇﻴﻔﺔ ﺍﻟﺘﻌﻴﻴﻦ ﻟﺘﻌﺒﻴﺮ ﻣﻌﻴﻦ Eﻭﺍﻟﺤﺎﻟﺔ .ﻟﻠﺘﻤﻴﻴﺰ ﺑﻴﻦ ﺗﻌﺮﻳﻔﺎﺕ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﺮﻳﺎﺿﻴﺔ
ﻭﺑﻴﺎﻧﺎﺕﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﺨﺎﺻﺔ ﺑﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ،ﻧﺴﺘﺨﺪﻡ ﺍﻟﺮﻣﺰ = -ﻟﺘﺤﺪﻳﺪ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﺮﻳﺎﺿﻴﺔ.
ﻳﺮﺑﻂﺍﻟﺮﻣﺰ ﺍﻟﻀﻤﻨﻲ ، <= ،ﺍﻟﻤﺴﺘﺨﺪﻡ ﻓﻲ ﻫﺬﺍ ﺍﻟﺘﻌﺮﻳﻒ ،ﺷﻜﻞ ﺍﻟﻤﻌﺎﻣﻞ ﺑﺒﻨﺎء ﺍﻟﺤﺎﻟﺔ )ﺃﻭ
ﺍﻟﺘﺒﺪﻳﻞ( ﺍﻟﻤﺮﺗﺒﻂ ﺑﻪ .ﻳﺴﺘﺨﺪﻡ ﺗﺪﻭﻳﻦ ﺍﻟﻨﻘﻄﺔ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﻌﻘﺪ ﺍﻟﻔﺮﻋﻴﺔ ﻟﻠﻌﻘﺪﺓ .ﻋﻠﻰ ﺳﺒﻴﻞ
ﺍﻟﻤﺜﺎﻝ ،ﻳﺸﻴﺮ > <binary_expr<. >left_exprﺇﻟﻰ ﺍﻟﻌﻘﺪﺓ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻴﺴﺮﻯ ﻟـ
>.<binary_expr
3.5.2.4ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ
ﻋﺒﺎﺭﺓﺍﻹﺳﻨﺎﺩ ﻫﻲ ﻋﺒﺎﺭﺓ ﻋﻦ ﺗﻘﻴﻴﻢ ﻟﻠﺘﻌﺒﻴﺮ ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺇﻋﺪﺍﺩ ﺍﻟﻤﺘﻐﻴﺮ ﺍﻟﻤﺴﺘﻬﺪﻑ ﻟﻘﻴﻤﺔ
ﺍﻟﺘﻌﺒﻴﺮ.ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ،ﺗﻘﻮﻡ ﺩﺍﻟﺔ ﺍﻟﻤﻌﻨﻰ ﺑﺘﻌﻴﻴﻦ ﺣﺎﻟﺔ ﺇﻟﻰ ﺣﺎﻟﺔ .ﻳﻤﻜﻦ ﻭﺻﻒ ﻫﺬﻩ ﺍﻟﻮﻇﻴﻔﺔ
ﺑﻤﺎﻳﻠﻲ:
ﻻﺣﻆﺃﻥ ﺍﻟﻤﻘﺎﺭﻧﺔ ﻓﻲ ﺍﻟﺴﻄﺮ ﺍﻷﺧﻴﺮ ﺍﻟﺜﺎﻟﺚ ﺃﻋﻼﻩ ،ﺃﻧﺎﻱ.ﻣﻦ ﺍﻷﺳﻤﺎء ﻭﻟﻴﺲ ﺍﻟﻘﻴﻢ == x ،
147 3.5ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ :ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ
ﻣﻌﻨﻰﺍﻟﺤﻠﻘﺔ ﻫﻮ ﺑﺒﺴﺎﻃﺔ ﻗﻴﻤﺔ ﻣﺘﻐﻴﺮﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺍﻟﺤﻠﻘﺔ
ﺑﻌﺪﺩﺍﻟﻤﺮﺍﺕ ﺍﻟﻤﺤﺪﺩ ،ﺑﺎﻓﺘﺮﺍﺽ ﻋﺪﻡ ﻭﺟﻮﺩ ﺃﺧﻄﺎء .ﻓﻲ ﺟﻮﻫﺮﻫﺎ ،ﺗﻢ ﺗﺤﻮﻳﻞ ﺍﻟﺤﻠﻘﺔ ﻣﻦ ﺍﻟﺘﻜﺮﺍﺭ
ﺇﻟﻰﺍﻟﻌﻮﺩﻳﺔ ،ﺣﻴﺚ ﻳﺘﻢ ﺗﻌﺮﻳﻒ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﻌﻮﺩﻳﺔ ﺭﻳﺎﺿﻴﺎً ﻣﻦ ﺧﻼﻝ ﻭﻇﺎﺉﻒ ﺗﻌﻴﻴﻦ ﺍﻟﺤﺎﻟﺔ
ﺍﻟﻌﻮﺩﻳﺔﺍﻷﺧﺮﻯ .ﻣﻦ ﺍﻷﺳﻬﻞ ﻭﺻﻒ ﺍﻟﺘﻜﺮﺍﺭ ﺑﺪﻗﺔ ﺭﻳﺎﺿﻴﺔ ﻣﻦ ﺍﻟﺘﻜﺮﺍﺭ.
3.5.2.6ﺍﻟﺘﻘﻴﻴﻢ
ﻳﻤﻜﻦﺗﻌﺮﻳﻒ ﺍﻟﻜﺎﺉﻨﺎﺕ ﻭﺍﻟﻮﻇﺎﺉﻒ ،ﻣﺜﻞ ﺗﻠﻚ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺴﺎﺑﻘﺔ ،
ﻟﻠﻜﻴﺎﻧﺎﺕﺍﻟﻨﺤﻮﻳﺔ ﺍﻷﺧﺮﻯ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ .ﻋﻨﺪﻣﺎ ﻳﺘﻢ ﺗﻌﺮﻳﻒ ﻧﻈﺎﻡ ﻛﺎﻣﻞ ﻟﻠﻐﺔ ﻣﻌﻴﻨﺔ ،ﻳﻤﻜﻦ
ﺍﺳﺘﺨﺪﺍﻣﻪﻟﺘﺤﺪﻳﺪ ﻣﻌﻨﻰ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻜﺎﻣﻠﺔ ﻓﻲ ﺗﻠﻚ ﺍﻟﻠﻐﺔ .ﻳﻮﻓﺮ ﻫﺬﺍ ﺇﻃﺎﺭﺍً ﻟﻠﺘﻔﻜﻴﺮ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ
ﺑﻄﺮﻳﻘﺔﺻﺎﺭﻣﺔ ﻟﻠﻐﺎﻳﺔ.
ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ،ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻛﻌﺎﻣﻞ ﻣﺴﺎﻋﺪ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ.
ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻗﺪ ﺗﺸﻴﺮ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﺘﻲ ﻳﻜﻮﻥ ﺍﻟﻮﺻﻒ ﺍﻟﺪﻻﻟﻲ ﺍﻟﺪﻻﻟﻲ ﻟﻬﺎ ﻣﻌﻘﺪﺍً ﻭﺻﻌﺒ ًﺎ
ﺇﻟﻰﺍﻟﻤﺼﻤﻢ ﺃﻥ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻗﺪ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﺼﻌﺐ ﺃﻳﻀﺎً ﻋﻠﻰ ﻣﺴﺘﺨﺪﻣﻲ ﺍﻟﻠﻐﺔ ﻓﻬﻤﻬﺎ
ﻭﺃﻥﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﺒﺪﻳﻞ ﻗﺪ ﻳﻜﻮﻥ ﻣﻨﺎﺳﺒﺎً.
ﺑﺴﺒﺐﺗﻌﻘﻴﺪ ﺍﻷﻭﺻﺎﻑ ﺍﻟﺘﻌﺮﻳﻔﻴﺔ ،ﻓﻬﻲ ﻗﻠﻴﻠﺔ ﺍﻟﻔﺎﺉﺪﺓ ﻟﻤﺴﺘﺨﺪﻣﻲ ﺍﻟﻠﻐﺔ .ﻣﻦ ﻧﺎﺣﻴﺔ
ﺃﺧﺮﻯ ،ﻓﺈﻧﻬﺎ ﺗﻮﻓﺮ ﻃﺮﻳﻘﺔ ﻣﻤﺘﺎﺯﺓ ﻟﻮﺻﻒ ﺍﻟﻠﻐﺔ ﺑﺈﻳﺠﺎﺯ.
3.5.3ﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ
ﺩﻻﻻﺕﺑﺪﻳﻬﻴﺔ ،ﺍﻟﺘﻲ ﺳﻤﻴﺖ ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﻨﺤﻮ ﻷﻧﻬﺎ ﺗﺴﺘﻨﺪ ﺇﻟﻰ ﺍﻟﻤﻨﻄﻖ ﺍﻟﺮﻳﺎﺿﻲ ،ﻫﻲ ﺍﻟﻨﻬﺞ
ﺍﻷﻛﺜﺮﺗﺠﺮﻳﺪﺍً ﻟﻤﻮﺍﺻﻔﺎﺕ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ .ﺑﺪﻻ ًﻣﻦ ﺗﺤﺪﻳﺪ
ﻣﻌﻨﻰﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ ،ﺗﺤﺪﺩ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ ﻣﺎ ﻳﻤﻜﻦ ﺇﺛﺒﺎﺗﻪ ﺣﻮﻝ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﺗﺬﻛﺮ ﺃﻥ
ﺃﺣﺪﺍﻻﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻟﻤﻤﻜﻨﺔ ﻟﻠﻤﻮﺍﺻﻔﺎﺕ ﺍﻟﺪﻻﻟﻴﺔ ﻫﻮ ﺇﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ.
ﻓﻲﺍﻟﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ ،ﻻ ﻳﻮﺟﺪ ﻧﻤﻮﺫﺝ ﻟﺤﺎﻟﺔ ﺁﻟﺔ ﺃﻭ ﺑﺮﻧﺎﻣﺞ ﺃﻭ ﻧﻤﻮﺫﺝ ﻟﺘﻐﻴﻴﺮﺍﺕ ﺍﻟﺤﺎﻟﺔ
ﺍﻟﺘﻲﺗﺤﺪﺙ ﻋﻨﺪ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﻳﻌﺘﻤﺪ ﻣﻌﻨﻰ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻋﻠﻰ ﺍﻟﻌﻼﻗﺎﺕ ﺑﻴﻦ ﻣﺘﻐﻴﺮﺍﺕ ﻭﺛﻮﺍﺑﺖ
ﺍﻟﺒﺮﻧﺎﻣﺞ ،ﻭﺍﻟﺘﻲ ﻫﻲ ﻧﻔﺴﻬﺎ ﻓﻲ ﻛﻞ ﺗﻨﻔﻴﺬ ﻟﻠﺒﺮﻧﺎﻣﺞ.
ﺗﻢﺗﻌﺮﻳﻒ ﺩﻻﻻﺕ ﺃﻛﺴﻴﻮﻣﺎﺗﻴﻚ ﺑﺎﻟﺘﺰﺍﻣﻦ ﻣﻊ ﺗﻄﻮﻳﺮ ﻧﻬﺞ ﻹﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ .ﺗﻈﻬﺮ ﺃﺩﻟﺔ
ﺍﻟﺼﺤﺔﻫﺬﻩ ،ﻋﻨﺪﻣﺎ ﻳﻤﻜﻦ ﺑﻨﺎﺅﻫﺎ ،ﺃﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻳﻘﻮﻡ ﺑﺎﻟﺤﺴﺎﺑﺎﺕ ﺍﻟﻤﻮﺻﻮﻓﺔ ﻓﻲ ﻣﻮﺍﺻﻔﺎﺗﻪ.
ﻓﻲﺍﻹﺛﺒﺎﺕ ،ﻳﺴُﺒﻖ ﻛﻞ ﺑﻴﺎﻥ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻭﻳﺘﺒﻌﻪ ﺗﻌﺒﻴﺮ ﻣﻨﻄﻘﻲ ﻳﺤﺪﺩ ﺍﻟﻘﻴﻮﺩ ﻋﻠﻰ ﻣﺘﻐﻴﺮﺍﺕ
ﺍﻟﺒﺮﻧﺎﻣﺞ.ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ،ﺑﺪﻻ ًﻣﻦ ﺍﻟﺤﺎﻟﺔ ﺍﻟﻜﺎﻣﻠﺔ ﻵﻟﺔ ﻣﺠﺮﺩﺓ )ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻣﻊ ﺩﻻﻻﺕ
ﺍﻟﺘﺸﻐﻴﻞ( ،ﻟﺘﺤﺪﻳﺪ ﻣﻌﻨﻰ ﺍﻟﺒﻴﺎﻥ .ﺍﻟﺘﺪﻭﻳﻦ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻟﻮﺻﻒ ﺍﻟﻘﻴﻮﺩ -ﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﻟﻐﺔ
ﺍﻟﺪﻻﻻﺕﺍﻟﺒﺪﻳﻬﻴﺔ -ﻫﻮ ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ ﺍﻷﺻﻠﻲ .ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ
ﺍﻟﻤﻨﻄﻘﻴﺔﺍﻟﺒﺴﻴﻄﺔ ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﻜﻮﻥ ﻛﺎﻓﻴﺔ ﻟﻠﺘﻌﺒﻴﺮ ﻋﻦ ﺍﻟﻘﻴﻮﺩ ،ﺇﻻ ﺃﻧﻬﺎ ﻟﻴﺴﺖ ﻛﺬﻟﻚ ﻓﻲ ﺑﻌﺾ
ﺍﻟﺤﺎﻻﺕ.
ﻋﻨﺪﻣﺎﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ ﻟﺘﺤﺪﻳﺪ ﻣﻌﻨﻰ ﺍﻟﺒﻴﺎﻥ ﺭﺳﻤﻴﺎً ،ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺍﻟﻤﻌﻨﻰ ﻣﻦ
ﺧﻼﻝﺗﺄﺛﻴﺮ ﺍﻟﺒﻴﺎﻥ ﻋﻠﻰ ﺍﻟﺘﺄﻛﻴﺪﺍﺕ ﺣﻮﻝ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺘﺄﺛﺮﺓ ﺑﺎﻟﺒﻴﺎﻥ.
3.5.3.1ﺍﻟﺘﺄﻛﻴﺪﺍﺕ
ﺗﺴﻤﻰﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ ﺍﻟﻤﺴﻨﺪﺍﺕ ﺃﻭ ﺍﻟﺘﺄﻛﻴﺪﺍﺕ .ﺍﻟﺘﺄﻛﻴﺪ
ﺍﻟﺬﻱﻳﺴﺒﻖ ﺑﻴﺎﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻣﺒﺎﺷﺮﺓ ﻳﺼﻒ ﺍﻟﻘﻴﻮﺩ ﺍﻟﻤﻔﺮﻭﺿﺔ ﻋﻠﻰ ﻣﺘﻐﻴﺮﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﺗﻠﻚ
ﺍﻟﻤﺮﺣﻠﺔﻣﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﻳﺼﻒ ﺍﻟﺘﺄﻛﻴﺪ ﺍﻟﺬﻱ ﻳﻠﻲ ﺍﻟﺘﺼﺮﻳﺢ ﻣﺒﺎﺷﺮﺓ ﺍﻟﻘﻴﻮﺩ ﺍﻟﺠﺪﻳﺪﺓ ﻋﻠﻰ ﺗﻠﻚ
ﺍﻟﻤﺘﻐﻴﺮﺍﺕ)ﻭﺭﺑﻤﺎ ﻏﻴﺮﻫﺎ( ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺍﻟﻌﺒﺎﺭﺓ .ﻫﺬﻩ ﺍﻟﺘﺄﻛﻴﺪﺍﺕ ﺗﺴﻤﻰﺷﺮﻁ ﻣﺴﺒﻖﻭﺣﺎﻟﺔ ﻻﺣﻘﺔ
،ﻋﻠﻰ ﺍﻟﺘﻮﺍﻟﻲ ،ﻣﻦ ﺍﻟﺒﻴﺎﻥ .ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺒﻴﺎﻧﻴﻦ ﺍﻟﻤﺘﺠﺎﻭﺭﻳﻦ ،ﻓﺈﻥ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﻟﻸﻭﻝ ﺑﻤﺜﺎﺑﺔ
ﺷﺮﻁﻣﺴﺒﻖ ﻟﻠﺜﺎﻧﻲ .ﻳﺘﻄﻠﺐ ﺗﻄﻮﻳﺮ ﻭﺻﻒ ﺑﺪﻳﻬﻲ ﺃﻭ ﺇﺛﺒﺎﺕ ﻟﺒﺮﻧﺎﻣﺞ ﻣﻌﻴﻦ ﺃﻥ ﻛﻞ ﻋﺒﺎﺭﺓ ﻓﻲ
ﺍﻟﺒﺮﻧﺎﻣﺞﻟﻬﺎ ﺷﺮﻁ ﻣﺴﺒﻖ ﻭﺷﺮﻁ ﻻﺣﻖ.
ﻳﺘﻢﺗﻘﺪﻳﻢ ﺗﺄﻛﻴﺪﺍﺕ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻭﻣﺎ ﺑﻌﺪ ﺍﻟﺸﺮﻁ ﻓﻲ ﺃﻗﻮﺍﺱ ﻟﺘﻤﻴﻴﺰﻫﺎ ﻋﻦ ﺃﺟﺰﺍء ﻣﻦ
ﻋﺒﺎﺭﺍﺕﺍﻟﺒﺮﻧﺎﻣﺞ .ﺃﺣﺪ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻤﺴﺒﻘﺔ ﺍﻟﻤﺤﺘﻤﻠﺔ ﻟﻬﺬﺍ ﺍﻟﺒﻴﺎﻥ ﻫﻮ }x< 10{.
ﻓﻲﺍﻟﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ ،ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﻣﻌﻨﻰ ﺑﻴﺎﻥ ﻣﻌﻴﻦ ﻣﻦ ﺧﻼﻝ ﺷﺮﻃﻪ ﺍﻟﻤﺴﺒﻖ ﻭﺣﺎﻟﺘﻪ
ﺍﻟﻼﺣﻘﺔ.ﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﻓﺈﻥ ﺍﻟﺘﺄﻛﻴﺪﻳﻦ ﻳﺤﺪﺩﺍﻥ ﺑﺪﻗﺔ ﺗﺄﺛﻴﺮ ﺗﻨﻔﻴﺬ ﺍﻟﺒﻴﺎﻥ.
ﻓﻲﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ،ﻧﺮﻛﺰ ﻋﻠﻰ ﺇﺛﺒﺎﺗﺎﺕ ﺻﺤﺔ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻭﺍﻟﺒﺮﺍﻣﺞ ،ﻭﻫﻮ ﺍﺳﺘﺨﺪﺍﻡ
ﺷﺎﺉﻊﻟﻠﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ .ﺍﻟﻤﻔﻬﻮﻡ ﺍﻷﻛﺜﺮ ﻋﻤﻮﻣﻴﺔ ﻟﻠﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ ﻫﻮ ﺗﺤﺪﻳﺪ ﻣﻌﻨﻰ ﺍﻟﺒﻴﺎﻧﺎﺕ
ﻭﺍﻟﺒﺮﺍﻣﺞﺑﺪﻗﺔ ﻣﻦ ﺣﻴﺚ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﻤﻨﻄﻘﻴﺔ .ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻫﻮ ﺃﺣﺪ ﺗﻄﺒﻴﻘﺎﺕ
ﺍﻷﻭﺻﺎﻑﺍﻟﺒﺪﻳﻬﻴﺔ ﻟﻠﻐﺎﺕ.
ﺇﺫﺍﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺣﺴﺎﺏ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻣﻦ ﺃﻛﺜﺮ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻼﺣﻘﺔ ﻋﻤﻮﻣﻴﺔ ﻟﻜﻞ
ﻧﻮﻉﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻟﻠﻐﺔ ،ﻓﺈﻥ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﺤﺴﺎﺏ ﻫﺬﻩ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻤﺴﺒﻘﺔ ﺗﻮﻓﺮ
ﻭﺻﻔﺎًﻣﻮﺟﺰﺍً ﻟﺪﻻﻻﺕ ﺗﻠﻚ ﺍﻟﻠﻐﺔ .ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ،ﻳﻤﻜﻦ ﺇﻧﺸﺎء ﺑﺮﺍﻫﻴﻦ ﺻﺤﺔ ﻟﻠﺒﺮﺍﻣﺞ ﺑﻬﺬﻩ
ﺍﻟﻠﻐﺔ.ﻳﺒﺪﺃ ﺇﺛﺒﺎﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺧﺼﺎﺉﺺ ﻧﺘﺎﺉﺞ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻛﺸﺮﻁ ﻻﺣﻖ ﻵﺧﺮ ﺑﻴﺎﻥ
ﻟﻠﺒﺮﻧﺎﻣﺞ.ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ،ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻷﺧﻴﺮﺓ ،ﻟﺤﺴﺎﺏ
ﺃﺿﻌﻒﺷﺮﻁ ﻣﺴﺒﻖ ﻟﻠﺒﻴﺎﻥ ﺍﻷﺧﻴﺮ .ﺛﻢ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻛﺸﺮﻁ ﻻﺣﻖ ﻟﻠﺒﻴﺎﻥ
ﺍﻷﺧﻴﺮﺍﻟﺜﺎﻧﻲ .ﺗﺴﺘﻤﺮ ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔ ﺣﺘﻰ ﻳﺘﻢ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﺑﺪﺍﻳﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ .ﻓﻲ ﺗﻠﻚ ﺍﻟﻨﻘﻄﺔ،
ﺍﻟﺸﺮﻁﺍﻟﻤﺴﺒﻖ ﻟﻠﻌﺒﺎﺭﺓ ﺍﻷﻭﻟﻰ ﻳﻨﺺ ﻋﻠﻰ ﺍﻟﺸﺮﻭﻁ ﺍﻟﺘﻲ ﺑﻤﻮﺟﺒﻬﺎ ﺳﻴﺤﺴﺐ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻨﺘﺎﺉﺞ
ﺍﻟﻤﺮﺟﻮﺓ.ﺇﺫﺍ ﻛﺎﻧﺖ ﻫﺬﻩ ﺍﻟﺸﺮﻭﻁ ﻣﺘﻀﻤﻨﺔ ﻓﻲ ﻣﻮﺍﺻﻔﺎﺕ ﺇﺩﺧﺎﻝ ﺍﻟﺒﺮﻧﺎﻣﺞ ،ﻓﻘﺪ ﺗﻢ ﺍﻟﺘﺤﻘﻖ ﻣﻦ
ﺻﺤﺔﺍﻟﺒﺮﻧﺎﻣﺞ.
ﺍﻥﺣﻜﻢ ﺍﻻﺳﺘﺪﻻﻝﻫﻲ ﻃﺮﻳﻘﺔ ﻻﺳﺘﻨﺘﺎﺝ ﺣﻘﻴﻘﺔ ﺗﺄﻛﻴﺪ ﻭﺍﺣﺪ ﻋﻠﻰ ﺃﺳﺎﺱ ﻗﻴﻢ ﺍﻟﺘﺄﻛﻴﺪﺍﺕ
ﺍﻷﺧﺮﻯ.ﺍﻟﺸﻜﻞ ﺍﻟﻌﺎﻡ ﻟﻘﺎﻋﺪﺓ ﺍﻻﺳﺘﻨﺘﺎﺝ ﻫﻮ ﻛﻤﺎ ﻳﻠﻲ:
ﺑﺪﻳﻬﻴﺔ.ﻭﻣﻊ ﺫﻟﻚ ،ﻓﻲ ﻣﻌﻈﻢ ﺍﻟﺤﺎﻻﺕ ،ﻻ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺍﻷﺿﻌﻒ ﺇﻻ ﺑﻘﺎﻋﺪﺓ
ﺍﺳﺘﻨﺘﺎﺝ.
ﻻﺳﺘﺨﺪﺍﻡﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ ﻣﻊ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﻌﻴﻨﺔ ،ﺳﻮﺍء ﻹﺛﺒﺎﺗﺎﺕ ﺍﻟﺼﻮﺍﺏ ﺃﻭ ﻟﻤﻮﺍﺻﻔﺎﺕ
ﺍﻟﺪﻻﻻﺕﺍﻟﺮﺳﻤﻴﺔ ،ﻳﺠﺐ ﺃﻥ ﺗﻮﺟﺪ ﺇﻣﺎ ﺑﺪﻳﻬﻴﺔ ﺃﻭ ﻗﺎﻋﺪﺓ ﺍﺳﺘﻨﺘﺎﺝ ﻟﻜﻞ ﻧﻮﻉ ﻣﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻓﻲ
ﺍﻟﻠﻐﺔ.ﻓﻲ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ،ﻧﻘﺪﻡ ﺑﺪﻳﻬﻴﺔ ﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻭﻗﻮﺍﻋﺪ ﺍﻻﺳﺘﺪﻻﻝ
ﻟﺘﺴﻠﺴﻞﺍﻟﻌﺒﺎﺭﺍﺕ ،ﻭﺑﻴﺎﻧﺎﺕ ﺍﻻﺧﺘﻴﺎﺭ ،ﻭﻋﺒﺎﺭﺍﺕ ﺍﻟﺤﻠﻘﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻗﺒﻞ ﺍﻻﺧﺘﺒﺎﺭ .ﻻﺣﻆ ﺃﻧﻨﺎ
ﻧﻔﺘﺮﺽﺃﻧﻪ ﻟﻴﺲ ﻟﻠﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﻭﻻ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺁﺛﺎﺭ ﺟﺎﻧﺒﻴﺔ.
3.5.3.3ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ
ﺍﻟﺸﺮﻁﺍﻟﻤﺴﺒﻖ ﻭﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﻟﺒﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﻣﻌﺎً ﻳﺤﺪﺩﺍﻥ ﻣﻌﻨﺎﻩ ﺑﺪﻗﺔ .ﻟﺘﺤﺪﻳﺪ ﻣﻌﻨﻰ
ﺑﻴﺎﻥﺍﻟﺘﺨﺼﻴﺺ ،ﻧﻈﺮﺍً ﻟﺸﺮﻁ ﻻﺣﻖ ،ﻳﺠﺐ ﺃﻥ ﺗﻜﻮﻥ ﻫﻨﺎﻙ ﻃﺮﻳﻘﺔ ﻟﺤﺴﺎﺏ ﺷﺮﻃﻪ ﺍﻟﻤﺴﺒﻖ
ﻣﻦﻫﺬﺍ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ.
ﻟﻨﻔﺘﺮﺽﺃﻥ x = Eﻋﺒﺎﺭﺓ ﻋﻦ ﺑﻴﺎﻥ ﺗﺨﺼﻴﺺ ﻋﺎﻡ ﻭﺃﻥ ﻳﻜﻮﻥ Qﻫﻮ ﺷﺮﻃﻪ ﺍﻟﻼﺣﻖ .ﺛﻢ ﻳﺘﻢ
ﺗﺤﺪﻳﺪﺷﺮﻃﻬﺎ ﺍﻟﻤﺴﺒﻖ ، P ،ﻣﻦ ﺧﻼﻝ ﺍﻟﺒﺪﻳﻬﻴﺔ
ﺱxﺱﻩ ﻑ=
ﻣﻤﺎﻳﻌﻨﻲ ﺃﻥ Pﻳﺘﻢ ﺣﺴﺎﺑﻬﺎ ﻋﻠﻰ ﺃﻧﻬﺎ Qﻣﻊ ﺍﺳﺘﺒﺪﺍﻝ ﺟﻤﻴﻊ ﻣﺜﻴﻼﺕ xﺑـ .Eﻋﻠﻰ ﺳﺒﻴﻞ
ﺍﻟﻤﺜﺎﻝ ،ﺇﺫﺍ ﻛﺎﻥ ﻟﺪﻳﻨﺎ ﺑﻴﺎﻥ ﺍﻟﻤﻬﻤﺔ ﻭﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ
ﻳﺘﻢﺣﺴﺎﺏ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻋﻦ ﻃﺮﻳﻖ ﺍﻻﺳﺘﺒﺪﺍﻝﺏ 1-2 /ﻝﺃﻓﻲ ﺣﺎﻟﺔ ﻣﺎ ﺑﻌﺪ ﺍﻟﺤﺎﻟﺔ }ﺃ
>، {10ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ:
ﺏ 10> 1 - 2 /
ﺏ>22
ﻭﺑﺎﻟﺘﺎﻟﻲ ،ﻓﺈﻥ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﺒﻴﺎﻥ ﺍﻟﻤﻬﻤﺔ ﻭﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﺍﻟﻤﺤﺪﺩ ﻫﻮ }ﺏ >.{22ﺗﺬﻛﺮ
ﺃﻥﺑﺪﻳﻬﻴﺔ ﺍﻟﺘﺨﺼﻴﺺ ﻣﻀﻤﻮﻧﺔ ﻟﺘﻜﻮﻥ ﺻﺤﻴﺤﺔ ﻓﻘﻂ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪﻡ ﻭﺟﻮﺩ ﺁﺛﺎﺭ ﺟﺎﻧﺒﻴﺔ .ﺑﻴﺎﻥ
ﺍﻟﺘﺨﺼﻴﺺﻟﻪ ﺗﺄﺛﻴﺮ ﺟﺎﻧﺒﻲ ﺇﺫﺍ ﻗﺎﻡ ﺑﺘﻐﻴﻴﺮ ﻣﺘﻐﻴﺮ ﺁﺧﺮ ﻏﻴﺮ ﻫﺪﻓﻪ.
}ﺹ{ ﺹ }ﺱ{
ﺣﻴﺚ Pﻫﻲ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ Q ،ﻫﻲ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ،ﻭ Sﻫﻲ ﻧﻤﻮﺫﺝ ﺍﻟﺒﻴﺎﻥ .ﻓﻲ ﺣﺎﻟﺔ ﺑﻴﺎﻥ
ﺍﻟﺘﻨﺎﺯﻝ ،ﻳﻜﻮﻥ ﺍﻟﺘﺮﻣﻴﺰ
}ﺱxﺱﻩ{ﺱ = ﻩ }ﺱ{
151 3.5ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ :ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ
ﻟﺬﺍ}ﺹ< {14ﻫﻮ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﺒﻴﺎﻥ ﺍﻟﻤﻬﻤﺔ ﻭﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﻫﺬﺍ.
ﻻﺣﻆﺃﻥ ﻣﻈﻬﺮ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﺴﺮ ﻣﻦ ﺑﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﻓﻲ ﺟﺎﻧﺒﻪ ﺍﻷﻳﻤﻦ ﻻ ﻳﺆﺛﺮ ﻋﻠﻰ ﻋﻤﻠﻴﺔ
ﺣﺴﺎﺏﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ .ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﻝ
ﺃﺿﻌﻒﺷﺮﻁ ﻣﺴﺒﻖ
ﺗﺬﻛﺮﺃﻥ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺒﺪﻳﻬﻴﺔ ﻗﺪ ﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ ﻹﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ .ﻓﻲ ﺿﻮء ﺫﻟﻚ ،ﻣﻦ
ﺍﻟﻄﺒﻴﻌﻲﻓﻲ ﻫﺬﻩ ﺍﻟﻤﺮﺣﻠﺔ ﺃﻥ ﻧﺘﺴﺎءﻝ ﻛﻴﻒ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺑﺪﻳﻬﻴﺔ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ
ﻹﺛﺒﺎﺕﺃﻱ ﺷﻲء .ﻭﺇﻟﻴﻚ ﺍﻟﻜﻴﻔﻴﺔ :ﻳﻤﻜﻦ ﺍﻋﺘﺒﺎﺭ ﺑﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﻣﻊ ﻛﻞ ﻣﻦ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ
ﻭﺍﻟﺸﺮﻁﺍﻟﻼﺣﻖ ﺑﻴﺎﻧﺎً ﻣﻨﻄﻘﻴﺎً ﺃﻭ ﻧﻈﺮﻳﺔ .ﺇﺫﺍ ﻛﺎﻧﺖ ﺑﺪﻳﻬﻴﺔ ﺍﻟﺘﺨﺼﻴﺺ ،ﻋﻨﺪ ﺗﻄﺒﻴﻘﻬﺎ ﻋﻠﻰ
ﺍﻟﺸﺮﻁﺍﻟﻼﺣﻖ ﻭﺑﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ،ﺗﻨﺘﺞ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺍﻟﻤﺤﺪﺩ ،ﻳﺘﻢ ﺇﺛﺒﺎﺕ ﺍﻟﻨﻈﺮﻳﺔ .ﻋﻠﻰ
ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ،ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﻤﻨﻄﻘﻴﺔ
ﻳﻨﺘﺞﻋﻨﻪ }x< 3{ ،ﻭﻫﻮ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺍﻟﻤﺤﺪﺩ .ﻟﺬﻟﻚ ،ﻟﻘﺪ ﺃﺛﺒﺘﻨﺎ ﺍﻟﻤﺜﺎﻝ ﺍﻟﻤﻨﻄﻘﻲ ﻟﻠﺒﻴﺎﻥ.
ﻓﻲﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ،ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ x< 5{ ،} ،ﻟﻴﺲ ﻫﻮ ﻧﻔﺲ ﺍﻟﺘﺄﻛﻴﺪ ﺍﻟﻨﺎﺗﺞ ﻋﻦ ﺍﻟﺒﺪﻳﻬﻴﺔ .ﻭﻣﻊ
ﺫﻟﻚ ،ﻓﻤﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ }{x< 5ﻳﺪﻝ }x< 3{.
ﺍﻟﻔﺼﻞ 3ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ 152
ﻻﺳﺘﺨﺪﺍﻡﻫﺬﺍ ﻓﻲ ﺇﺛﺒﺎﺕ ،ﻗﺎﻋﺪﺓ ﺍﺳﺘﻨﺘﺎﺝ ﺗﺴﻤﻰﺣﻜﻢ ﺍﻟﻌﺎﻗﺒﺔ ،ﻭﻫﻨﺎﻙ ﺣﺎﺟﺔ .ﺷﻜﻞ ﺣﻜﻢ
ﺍﻟﻌﺎﻗﺒﺔﻫﻮ
ﻳﻌﻨﻲﺍﻟﺮﻣﺰ =< "ﺿﻤﻨﻴﺎً" ،ﻭﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ 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
3.5.3.4ﺍﻟﺘﺴﻠﺴﻼﺕ
ﻻﻳﻤﻜﻦ ﻭﺻﻒ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﺴﻠﺴﻠﺔ ﻣﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺑﺒﺪﻳﻬﻴﺔ ،ﻷﻥ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ
ﻳﻌﺘﻤﺪﻋﻠﻰ ﺃﻧﻮﺍﻉ ﻣﻌﻴﻨﺔ ﻣﻦ ﺍﻟﻌﺒﺎﺭﺍﺕ ﻓﻲ ﺍﻟﺘﺴﻠﺴﻞ .ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ،ﻻ ﻳﻤﻜﻦ ﻭﺻﻒ ﺍﻟﺸﺮﻁ
ﺍﻟﻤﺴﺒﻖﺇﻻ ﺑﻘﺎﻋﺪﺓ ﺍﺳﺘﻨﺘﺎﺝ .ﻟﻨﻔﺘﺮﺽ ﺃﻥ S1ﻭ S2ﻋﺒﺎﺭﺓ ﻋﻦ ﺑﻴﺎﻧﺎﺕ ﺑﺮﻧﺎﻣﺞ ﻣﺘﺠﺎﻭﺭﺓ .ﺇﺫﺍ
ﻛﺎﻧﺖﺍﻟﻤﺤﻄﺎﺕ S1ﻭ S2ﺗﺤﺘﻮﻳﺎﻥ ﻋﻠﻰ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻤﺴﺒﻘﺔ ﻭﺍﻟﻼﺣﻘﺔ ﺍﻟﺘﺎﻟﻴﺔ
{}P1{ S1 }P2
{}P2{ 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
ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ،ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﺘﺴﻠﺴﻞ ﻭﺍﻟﻈﺮﻭﻑ ﺍﻟﻼﺣﻘﺔ ﺍﻟﺘﺎﻟﻴﺔ:
ﺹ >7
ﻭﺍﻟﺬﻱﻳﺴﺘﺨﺪﻡ ﻛﺸﺮﻁ ﻻﺣﻖ ﻟﻠﺒﻴﺎﻥ ﺍﻷﻭﻝ .ﻳﻤﻜﻦ ﺍﻵﻥ ﺣﺴﺎﺏ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻟﺒﻴﺎﻥ
ﺍﻟﺘﺨﺼﻴﺺﺍﻷﻭﻝ:
3.5.3.5ﺍﻟﺘﺤﺪﻳﺪ
ﻧﻌﺘﺒﺮﺑﻌﺪ ﺫﻟﻚ ﻗﺎﻋﺪﺓ ﺍﻻﺳﺘﺪﻻﻝ ﻟﺒﻴﺎﻧﺎﺕ ﺍﻻﺧﺘﻴﺎﺭ ،ﻭﺍﻟﺸﻜﻞ ﺍﻟﻌﺎﻡ ﻟﻬﺎ ﻫﻮ
ﻟﻮﺏﺛﻢS1ﺁﺧﺮS2
ﺗﺸﻴﺮﻫﺬﻩ ﺍﻟﻘﺎﻋﺪﺓ ﺇﻟﻰ ﺃﻧﻪ ﻳﺠﺐ ﺇﺛﺒﺎﺕ ﻋﺒﺎﺭﺍﺕ ﺍﻻﺧﺘﻴﺎﺭ ﻋﻨﺪﻣﺎ ﻳﻜﻮﻥ ﺗﻌﺒﻴﺮ ﺍﻟﺘﺤﻜﻢ ﺍﻟﻤﻨﻄﻘﻲ
ﺻﺤﻴﺤﺎًﻭﻋﻨﺪﻣﺎ ﻳﻜﻮﻥ ﺧﺎﻃﺉﺎً .ﺍﻟﻌﺒﺎﺭﺓ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻷﻭﻟﻰ ﻓﻮﻕ ﺍﻟﺴﻄﺮ ﺗﻤﺜﻞﺛﻢﺑﻨﺪ؛ ﺍﻟﺜﺎﻧﻲ ﻳﻤﺜﻞ
ﺁﺧﺮ
ﺍﻟﻔﺼﻞ 3ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ 154
ﺑﻨﺪ.ﻭﻓﻘﺎً ﻟﻘﺎﻋﺪﺓ ﺍﻻﺳﺘﺪﻻﻝ ،ﻧﺤﺘﺎﺝ ﺇﻟﻰ ﺷﺮﻁ ﻣﺴﺒﻖ Pﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻓﻲ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ
ﻟﻜﻠﻴﻬﻤﺎﺛﻢﻭﺁﺧﺮﺷﺮﻭﻁ.
ﺿﻊﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﻤﺜﺎﻝ ﺍﻟﺘﺎﻟﻲ ﻟﺤﺴﺎﺏ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻗﺎﻋﺪﺓ ﺍﺳﺘﺪﻻﻝ
ﺍﻟﺘﺤﺪﻳﺪ.ﺑﻴﺎﻥ ﺍﺧﺘﻴﺎﺭ ﺍﻟﻤﺜﺎﻝ ﻫﻮ
ﻟﻮx< 0ﺛﻢ
ﺹ= ﺹ 1 -
ﺁﺧﺮ
ﺹ= ﺹ 1 +
ﻳﻨﺘﺞﻋﻦ ﻫﺬﺍ }ﺹ {0 <1 -ﺃﻭ }ﺹ< .{1ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻛﺠﺰء Pﻣﻦ ﻣﻠﻒ
ﺷﺮﻁﻣﺴﺒﻖ ﻝﺛﻢﺑﻨﺪ .ﺍﻵﻥ ﻧﻄﺒﻖ ﻧﻔﺲ ﺍﻟﺒﺪﻳﻬﻴﺔ ﻋﻠﻰﺁﺧﺮﺑﻨﺪ
ﻣﻼﺣﻈﺔﺗﺎﺭﻳﺨﻴﺔ ﺫ
ﺗﻢﺇﻧﺠﺎﺯ ﻗﺪﺭ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﻌﻤﻞ ﻋﻠﻰ
ﺹ= ﺹ } 1 +ﺹ< {0
ﺇﻣﻜﺎﻧﻴﺔﺍﺳﺘﺨﺪﺍﻡ ﺃﻭﺻﺎﻑ ﺍﻟﻠﻐﺔ
ﺍﻟﻮﺻﻔﻴﺔﻟﺘﻮﻟﻴﺪﻫﺎ
ﺍﻟﺘﻲﺗﻨﺘﺞ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ }ﺹ {0 <1 +ﺃﻭ }ﺹ< .{1-ﻷﻥ }ﺹ< {y< -1} <= {1
،ﺗﺴﻤﺢ ﻟﻨﺎ ﻗﺎﻋﺪﺓ ﺍﻟﻨﺘﻴﺠﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ }ﺹ< {1ﻟﻠﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻟﺒﻴﺎﻥ ﺍﻻﺧﺘﻴﺎﺭ ﺍﻟﻤﺘﺮﺟﻤﻮﻥﺗﻠﻘﺎﺉﻴﺎً )ﺟﻮﻧﺰ 1980 ،؛
ﺑﺄﻛﻤﻠﻪ. ﻣﻴﻠﻮﺱﻭﺁﺧﺮﻭﻥ 1984 ،؛
.ﻭﻗﺪﺃﻇﻬﺮﺕ ﻫﺬﻩ ﺍﻟﺠﻬﻮﺩ ﺃﻥ ﺍﻟﻄﺮﻳﻘﺔ
ﻣﺠﺪﻳﺔ ،ﻟﻜﻦ ﺍﻟﻌﻤﻞ ﻟﻢ ﻳﺘﻘﺪﻡ ﺃﺑﺪﺍً ﺇﻟﻰ
3.5.3.6ﺍﻟﺤﻠﻘﺎﺕ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻟﻤﺴﺒﻘﺔ
ﺍﻟﻨﻘﻄﺔﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻹﻧﺸﺎء
ﺍﻟﺒﻨﺎءﺍﻷﺳﺎﺳﻲ ﺍﻵﺧﺮ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺤﺘﻤﻴﺔ ﻫﻮ ﺍﻻﺧﺘﺒﺎﺭ ﺍﻟﻤﻨﻄﻘﻲ ﺍﻟﻤﺴﺒﻖ ، ﻣﺠﻤﻌّﻴﻦﻣﻔﻴﺪﻳﻦ et al. ، 1982( ،
ﺃﻭﺑﻴﻨﻤﺎﺣﻠﻘﺔ .ﺣﺴﺎﺏ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟـﺑﻴﻨﻤﺎﺣﻠﻘﺔ ﺑﻄﺒﻴﻌﺘﻬﺎ ﺃﺻﻌﺐ ﻣﻦ Bodwin
ﺳﻠﺴﻠﺔ ،ﻷﻥ ﻋﺪﺩ ﺍﻟﺘﻜﺮﺍﺭﺍﺕ ﻻ ﻳﻤﻜﻦ ﺩﺍﺉﻤﺎً ﺗﺤﺪﻳﺪﻩ ﻣﺴﺒﻘﺎً .ﻓﻲ ﺣﺎﻟﺔ ﻣﻌﺮﻓﺔ
ﻋﺪﺩﺍﻟﺘﻜﺮﺍﺭﺍﺕ ،
ﺣﻴﺚﺃﻧﺎ ﺍﻟﺤﻠﻘﺔ ﺍﻟﺜﺎﺑﺘﺔ .ﻳﺒﺪﻭ ﻫﺬﺍ ﺑﺴﻴﻄﺎً ،ﻟﻜﻨﻪ ﻟﻴﺲ ﻛﺬﻟﻚ .ﻳﻜﻤﻦ ﺍﻟﺘﻌﻘﻴﺪ ﻓﻲ ﺇﻳﺠﺎﺩ ﺣﻠﻘﺔ
ﺛﺎﺑﺘﺔﺛﺎﺑﺘﺔ.
155 3.5ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ :ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ
}ﺹ{ﺑﻴﻨﻤﺎﺏﻳﻔﻌﻞﺱﻧﻬﺎﻳﺔ}ﺱ{
ﻳﺠﺐﺃﻥ ﻳﻔﻲ ﻣﺘﻐﻴﺮ ﺍﻟﺤﻠﻘﺔ ﺑﻌﺪﺩ ﻣﻦ ﺍﻟﻤﺘﻄﻠﺒﺎﺕ ﻟﻴﻜﻮﻥ ﻣﻔﻴﺪﺍً .ﺃﻭﻻ ً ،ﺃﺿﻌﻒ ﺷﺮﻁ
ﻣﺴﺒﻖﻟـﺑﻴﻨﻤﺎﻳﺠﺐ ﺃﻥ ﺗﻀﻤﻦ ﺍﻟﺤﻠﻘﺔ ﺣﻘﻴﻘﺔ ﺍﻟﺤﻠﻘﺔ ﺍﻟﺜﺎﺑﺘﺔ .ﻓﻲ ﺍﻟﻤﻘﺎﺑﻞ ،ﻳﺠﺐ ﺃﻥ ﺗﻀﻤﻦ
ﺍﻟﺤﻠﻘﺔﺍﻟﺜﺎﺑﺘﺔ ﺣﻘﻴﻘﺔ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﻋﻨﺪ ﺇﻧﻬﺎء ﺍﻟﺤﻠﻘﺔ .ﺗﻨﻘﻠﻨﺎ ﻫﺬﻩ ﺍﻟﻘﻴﻮﺩ ﻣﻦ ﻗﺎﻋﺪﺓ ﺍﻻﺳﺘﺪﻻﻝ
ﺇﻟﻰﺍﻟﻮﺻﻒ ﺍﻟﺒﺪﻳﻬﻲ .ﺃﺛﻨﺎء ﺗﻨﻔﻴﺬ ﺍﻟﺤﻠﻘﺔ ،ﻳﺠﺐ ﺃﻻ ﺗﺘﺄﺛﺮ ﺣﻘﻴﻘﺔ ﺍﻟﺤﻠﻘﺔ ﺍﻟﺜﺎﺑﺘﺔ ﺑﺘﻘﻴﻴﻢ ﺍﻟﺘﻌﺒﻴﺮ
ﺍﻟﻤﻨﻄﻘﻲﺍﻟﺬﻱ ﻳﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺤﻠﻘﺔ ﻭﻋﺒﺎﺭﺍﺕ ﺟﺴﻢ ﺍﻟﺤﻠﻘﺔ .ﻭﻣﻦ ﻫﻨﺎ ﺍﻻﺳﻢ ﺛﺎﺑﺖ.
ﻋﺎﻣﻞﻣﻌﻘﺪ ﺁﺧﺮ ﻝﺑﻴﻨﻤﺎﺍﻟﺤﻠﻘﺎﺕ ﻫﻲ ﻣﺴﺄﻟﺔ ﺇﻧﻬﺎء ﺍﻟﺤﻠﻘﺔ .ﺍﻟﺤﻠﻘﺔ ﺍﻟﺘﻲ ﻻ ﺗﻨﺘﻬﻲ ﻻ ﻳﻤﻜﻦ
ﺃﻥﺗﻜﻮﻥ ﺻﺤﻴﺤﺔ ،ﻭﻓﻲ ﺍﻟﺤﻘﻴﻘﺔ ﻻ ﺗﺤﺴﺐ ﺷﻴﺉﺎً .ﺇﺫﺍ ﻛﺎﻥ Qﻫﻮ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﺍﻟﺬﻱ ﻳﺘﻢ
ﺍﻻﺣﺘﻔﺎﻅﺑﻪ ﻓﻮﺭ ﺧﺮﻭﺝ ﺍﻟﺤﻠﻘﺔ ،ﻓﺈﻥ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ Pﻟﻠﺤﻠﻘﺔ ﻫﻮ ﺍﻟﺬﻱ ﻳﻀﻤﻦ Qﻋﻨﺪ ﺧﺮﻭﺝ
ﺍﻟﺤﻠﻘﺔﻭﻳﻀﻤﻦ ﺃﻳﻀﺎً ﺇﻧﻬﺎء ﺍﻟﺤﻠﻘﺔ.
ﻑ=< ﺃﻧﺎ
{}I and B{ S }I
ﺗﻨﺘﻬﻲﺍﻟﺤﻠﻘﺔ B(( =< Q
)I and )not
ﺇﺫﺍﻗﺎﻣﺖ ﺣﻠﻘﺔ ﺑﺤﺴﺎﺏ ﺳﻠﺴﻠﺔ ﻣﻦ ﺍﻟﻘﻴﻢ ﺍﻟﺮﻗﻤﻴﺔ ،ﻓﻘﺪ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ
ﺣﻠﻘﺔﺛﺎﺑﺘﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻧﻬﺞ ﻳﺴﺘﺨﺪﻡ ﻟﺘﺤﺪﻳﺪ ﺍﻟﻔﺮﺿﻴﺔ ﺍﻻﺳﺘﻘﺮﺍﺉﻴﺔ ﻋﻨﺪ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺤﺚ
ﺍﻟﺮﻳﺎﺿﻲﻹﺛﺒﺎﺕ ﺑﻴﺎﻥ ﺣﻮﻝ ﺗﺴﻠﺴﻞ ﺭﻳﺎﺿﻲ .ﻳﺘﻢ ﺣﺴﺎﺏ ﺍﻟﻌﻼﻗﺔ ﺑﻴﻦ ﻋﺪﺩ ﺍﻟﺘﻜﺮﺍﺭﺍﺕ ﻭﺍﻟﺸﺮﻁ
ﺍﻟﻤﺴﺒﻖﻟﺠﺴﻢ ﺍﻟﺤﻠﻘﺔ ﻟﻌﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﺍﻟﺤﺎﻻﺕ ،ﻋﻠﻰ ﺃﻣﻞ ﻇﻬﻮﺭ ﻧﻤﻂ ﻳﻨﻄﺒﻖ ﻋﻠﻰ ﺍﻟﺤﺎﻟﺔ
ﺍﻟﻌﺎﻣﺔ.ﻣﻦ ﺍﻟﻤﻔﻴﺪ ﻣﻌﺎﻟﺠﺔ ﻋﻤﻠﻴﺔ ﺇﻧﺘﺎﺝ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻛﻮﻇﻴﻔﺔ .wp ،ﻋﻠﻰ ﺍﻟﻌﻤﻮﻡ
ﺗﺬﻛﺮﺃﻧﻪ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻋﻼﻣﺔ ﺍﻟﺘﺴﺎﻭﻱ ﻟﻐﺮﺿﻴﻦ ﻣﺨﺘﻠﻔﻴﻦ ﻫﻨﺎ .ﻓﻲ ﺍﻟﺘﺄﻛﻴﺪﺍﺕ ،ﻓﻬﺬﺍ ﻳﻌﻨﻲ
ﺍﻟﻤﺴﺎﻭﺍﺓﺍﻟﺮﻳﺎﺿﻴﺔ ؛ ﺍﻟﺘﺄﻛﻴﺪﺍﺕ ﺍﻟﺨﺎﺭﺟﻴﺔ ،ﻓﻬﺬﺍ ﻳﻌﻨﻲ ﻋﺎﻣﻞ ﺍﻟﺘﺨﺼﻴﺺ.
ﺍﻟﻔﺼﻞ 3ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ 156
}ﺹ = ﺱ{
ﻟﺜﻼﺛﺔﺗﻜﺮﺍﺭﺍﺕ ،ﻫﻮ
) wpﺹ = ﺹ } ، 1 +ﺹ = ﺱ } = ({2 -ﺹ = 1 +ﺱ ، {2 -ﺃﻭ }ﺹ = ﺱ {3 -
ﻣﻦﺍﻟﻮﺍﺿﺢ ﺍﻵﻥ ﺃﻥ }ﺹ >ﺱ{ﻳﻜﻔﻲ ﻟﺤﺎﻻﺕ ﺗﻜﺮﺍﺭ ﻭﺍﺣﺪ ﺃﻭ ﺃﻛﺜﺮ .ﺩﻣﺞ ﻫﺬﺍ ﻣﻊ }ﺹ = ﺱ{
ﺑﺎﻟﻨﺴﺒﺔﻟﺤﺎﻟﺔ ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﺼﻔﺮﻳﺔ ،ﻧﺤﺼﻞ ﻋﻠﻰ }ﺹ >= ﺱ{ ،ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻟﻠﺤﻠﻘﺔ
ﺍﻟﺜﺎﺑﺘﺔ.ﺷﺮﻁ ﻣﺴﺒﻖ ﻝﺑﻴﻨﻤﺎﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﺍﻟﺒﻴﺎﻥ ﻣﻦ ﺍﻟﺤﻠﻘﺔ ﺍﻟﺜﺎﺑﺘﺔ .ﻓﻲ ﺍﻟﻮﺍﻗﻊ ،ﻳﻤﻜﻦ
ﺍﺳﺘﺨﺪﺍﻣﻲﻛﺸﺮﻁ ﻣﺴﺒﻖ .P ،
ﻳﺠﺐﺃﻥ ﻧﺘﺄﻛﺪ ﻣﻦ ﺃﻥ ﺍﺧﺘﻴﺎﺭﻧﺎ ﻳﻔﻲ ﺑﺎﻟﻤﻌﺎﻳﻴﺮ ﺍﻷﺭﺑﻌﺔ ﻟـ Iﻟﺤﻠﻘﺔ ﺍﻟﻤﺜﺎﻝ ﺍﻟﺨﺎﺻﺔ ﺑﻨﺎ .ﺃﻭﻻ ً،
ﻷﻥ .P = I ، P =< Iﺍﻟﻤﻄﻠﺐ ﺍﻟﺜﺎﻧﻲ ﻫﻮ ﺃﻧﻪ ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﺻﺤﻴﺤﺎً
ﻓﻲﻣﺜﺎﻟﻨﺎ ﻟﺪﻳﻨﺎ
ﻧﺤﻦﻧﺤﺼﻞ }ﺹ => 1 +ﺱ{ ،ﻭﻫﻮ ﻣﺎ ﻳﻌﺎﺩﻝ }ﺹ >ﺱ{ ،ﻭﻫﻮ ﻣﺎ ﻳﻌﻨﻴﻪ ﺿﻤﻨﻴﺎً }ﺹ >= ﺱﻭ
ﺹ>< ﺱ{.ﻟﺬﻟﻚ ،ﺗﻢ ﺇﺛﺒﺎﺕ ﺍﻟﺒﻴﺎﻥ ﺍﻟﺴﺎﺑﻖ.
ﺑﻌﺪﺫﻟﻚ ،ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻟﺪﻳﻨﺎ
ﻓﻲﻣﺜﺎﻟﻨﺎ ﻟﺪﻳﻨﺎ
})ﺹ >= ﺱ(ﻭ ﻻ )(y >< x({ =< }y = x{ })y >= xﻭ ){= x
y = x({ =< }y = x{ }y = x{ =< }y
ﻟﺬﺍ ،ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻫﺬﺍ ﺻﺤﻴﺢ .ﺑﻌﺪ ﺫﻟﻚ ،ﻳﺠﺐ ﺍﻟﻨﻈﺮ ﻓﻲ ﺇﻧﻬﺎء ﺍﻟﺤﻠﻘﺔ .ﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ ،
ﺍﻟﺴﺆﺍﻝﻫﻮ ﻣﺎ ﺇﺫﺍ ﻛﺎﻧﺖ ﺍﻟﺤﻠﻘﺔ
ﻳﻨﺘﻬﻲ.ﻣﺸﻴﺮﺍً ﺇﻟﻰ ﺫﻟﻚxﻭﺫﻣﻦ ﺍﻟﻤﻔﺘﺮﺽ ﺃﻥ ﺗﻜﻮﻥ ﻣﺘﻐﻴﺮﺍﺕ ﻋﺪﺩ ﺻﺤﻴﺢ ،ﻓﻤﻦ ﺍﻟﺴﻬﻞ ﺃﻥ
ﻧﺮﻯﺃﻥ ﻫﺬﻩ ﺍﻟﺤﻠﻘﺔ ﻻ ﺗﻨﺘﻬﻲ .ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻳﻀﻤﻦ ﺫﻟﻚﺫﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ﻟﻴﺲ ﺃﻛﺒﺮ ﻣﻦx.ﺯﻳﺎﺩﺍﺕ
ﺟﺴﻢﺍﻟﺤﻠﻘﺔﺫﻣﻊ ﻛﻞ ﺗﻜﺮﺍﺭ ،ﺣﺘﻰ
ﺫﻣﺴﺎﻭﻱ ﻝx.ﻣﻬﻤﺎ ﻛﺎﻥ ﺃﺻﻐﺮ ﺑﻜﺜﻴﺮﺫﻫﻮ ﻣﻦxﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ،ﺳﺘﺼﺒﺢ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ﻣﺴﺎﻭﻳﺔ ﻟـx.
ﻟﺬﻟﻚﺳﺘﻨﺘﻬﻲ ﺍﻟﺤﻠﻘﺔ .ﻧﻈﺮﺍً ﻷﻥ ﺍﺧﺘﻴﺎﺭﻧﺎ ﻟـ Iﻳﻠﺒﻲ ﺟﻤﻴﻊ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻷﺭﺑﻌﺔ ،ﻓﻬﻮ ﺷﺮﻁ ﻣﺮُﺽ ٍ
ﻟﻠﺤﻠﻘﺔﺍﻟﺜﺎﺑﺘﺔ ﻭﺍﻟﺤﻠﻘﺔ.
ﺍﻟﻌﻤﻠﻴﺔﺍﻟﺴﺎﺑﻘﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﺤﺴﺎﺏ ﺍﻟﺜﺎﺑﺖ ﻟﻠﺤﻠﻘﺔ ﻻ ﺗﻨﺘﺞ ﺩﺍﺉﻤﺎً ﺗﺄﻛﻴﺪﺍً ﻫﻮ ﺃﺿﻌﻒ
ﺷﺮﻁﻣﺴﺒﻖ )ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﺗﻔﻌﻞ ﺫﻟﻚ ﻓﻲ ﺍﻟﻤﺜﺎﻝ(.
ﻛﻤﺜﺎﻝﺁﺧﺮ ﻹﻳﺠﺎﺩ ﺣﻠﻘﺔ ﺛﺎﺑﺘﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺍﻻﺳﺘﻘﺮﺍء ﺍﻟﺮﻳﺎﺿﻲ ،
ﺿﻊﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﻋﺒﺎﺭﺓ ﺍﻟﺤﻠﻘﺔ ﺍﻟﺘﺎﻟﻴﺔ:
ﻛﻤﺎﻓﻲ ﺍﻟﺴﺎﺑﻖ ،ﻧﺴﺘﺨﺪﻡ ﺑﺪﻳﻬﻴﺔ ﺍﻟﺘﺨﺼﻴﺺ ﻟﻤﺤﺎﻭﻟﺔ ﺇﻳﺠﺎﺩ ﺣﻠﻘﺔ ﺛﺎﺑﺘﺔ ﻭﺷﺮﻁ ﻣﺴﺒﻖ
ﻟﻠﺤﻠﻘﺔ.ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺘﻜﺮﺍﺭ ﺍﻟﺼﻔﺮﻱ ،ﻳﻜﻮﻥ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺍﻷﺿﻌﻒ }ﻕ = .{1ﻟﺘﻜﺮﺍﺭ ﻭﺍﺣﺪ ،ﻫﻮ
ﻛﺬﻟﻚ
ﻟﺜﻼﺛﺔﺗﻜﺮﺍﺭﺍﺕ ،ﻫﻮ
ﻳﻤﻜﻦﺇﺛﺒﺎﺗﻪ ﺑﺴﻬﻮﻟﺔ ،ﻭﻫﺬﺍ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺃﻭﺳﻊ ﺑﻜﺜﻴﺮ ﻣﻦ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺤﺴﻮﺏ ﻣﺴﺒﻘﺎً .ﻳﺘﻢ
ﺍﺳﺘﻴﻔﺎءﺍﻟﺤﻠﻘﺔ ﻭﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻷﻱ ﻗﻴﻤﺔ ﻣﻮﺟﺒﺔ ﻟـﺱ،ﻟﻴﺲ ﻓﻘﻂ ﻗﻮﻯ ، 2ﻛﻤﺎ ﺗﺸﻴﺮ
ﺍﻟﻌﻤﻠﻴﺔ.ﺑﺴﺒﺐ ﻗﺎﻋﺪﺓ ﺍﻟﻌﻮﺍﻗﺐ ،ﻓﺈﻥ ﺍﺳﺘﺨﺪﺍﻡ ﺷﺮﻁ ﻣﺴﺒﻖ ﺃﻗﻮﻯ ﻣﻦ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ
ﻻﻳﺒﻄﻞ ﺍﻟﺪﻟﻴﻞ.
ﺍﻟﻌﺜﻮﺭﻋﻠﻰ ﺛﻮﺍﺑﺖ ﺍﻟﺤﻠﻘﺔ ﻟﻴﺲ ﺑﺎﻷﻣﺮ ﺍﻟﺴﻬﻞ ﺩﺍﺉﻤﺎً .ﻣﻦ ﺍﻟﻤﻔﻴﺪ ﻓﻬﻢ ﻃﺒﻴﻌﺔ ﻫﺬﻩ
ﺍﻟﺜﻮﺍﺑﺖ.ﺃﻭﻻ ً ،ﺍﻟﺤﻠﻘﺔ ﺍﻟﺜﺎﺑﺘﺔ ﻫﻲ ﻧﺴﺨﺔ ﺿﻌﻴﻔﺔ ﻣﻦ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﻟﻠﺤﻠﻘﺔ ﻭﺃﻳﻀﺎً ﺷﺮﻁ
ﻣﺴﺒﻖﻟﻠﺤﻠﻘﺔ .ﻟﺬﻟﻚ ،ﻳﺠﺐ ﺃﻥ ﺃﻛﻮﻥ ﺿﻌﻴﻔﺎً ﺑﻤﺎ ﻳﻜﻔﻲ ﻷﻛﻮﻥ ﺭﺍﺿﻴﺎً ﻗﺒﻞ ﺑﺪء ﺗﻨﻔﻴﺬ ﺍﻟﺤﻠﻘﺔ ،
ﻭﻟﻜﻦﻋﻨﺪ ﺩﻣﺠﻬﺎ ﻣﻊ ﺣﺎﻟﺔ ﺧﺮﻭﺝ ﺍﻟﺤﻠﻘﺔ ،ﻳﺠﺐ ﺃﻥ ﺗﻜﻮﻥ ﻗﻮﻳﺔ ﺑﻤﺎ ﻳﻜﻔﻲ ﻟﻔﺮﺽ ﺣﻘﻴﻘﺔ ﺍﻟﺤﺎﻟﺔ
ﺍﻟﻼﺣﻘﺔ.
ﺍﻟﻔﺼﻞ 3ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﻭﻋﻠﻢ ﺍﻟﺪﻻﻟﺔ 158
ﻧﻈﺮﺍًﻟﺼﻌﻮﺑﺔ ﺇﺛﺒﺎﺕ ﺇﻧﻬﺎء ﺍﻟﺤﻠﻘﺔ ،ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻢ ﺗﺠﺎﻫﻞ ﻫﺬﺍ ﺍﻟﻤﻄﻠﺐ .ﺇﺫﺍ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ
ﺇﻇﻬﺎﺭﺇﻧﻬﺎء ﺍﻟﺤﻠﻘﺔ ،ﻓﺴﻴﺘﻢ ﺍﺳﺘﺪﻋﺎء ﺍﻟﻮﺻﻒ ﺍﻟﺒﺪﻳﻬﻲ ﻟﻠﺤﻠﻘﺔﺻﺤﺔ ﺗﺎﻣﺔ .ﺇﺫﺍ ﻛﺎﻥ ﻣﻦ
ﺍﻟﻤﻤﻜﻦﺍﺳﺘﻴﻔﺎء ﺍﻟﺸﺮﻭﻁ ﺍﻷﺧﺮﻯ ﻭﻟﻜﻦ ﺍﻹﻧﻬﺎء ﻏﻴﺮ ﻣﻀﻤﻮﻥ ،ﻳﺘﻢ ﺍﺳﺘﺪﻋﺎﺅﻩﺻﻮﺍﺏ ﺟﺰﺉﻲ.
ﻓﻲﺍﻟﺤﻠﻘﺎﺕ ﺍﻷﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ،ﻳﺘﻄﻠﺐ ﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ ﺣﻠﻘﺔ ﺛﺎﺑﺘﺔ ﺛﺎﺑﺘﺔ ،ﺣﺘﻰ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﺼﺤﺔ
ﺍﻟﺠﺰﺉﻴﺔ ،ﻗﺪﺭﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺍﻟﺒﺮﺍﻋﺔ .ﻷﻥ ﺣﺴﺎﺏ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻟـﺑﻴﻨﻤﺎﺗﻌﺘﻤﺪ ﺍﻟﺤﻠﻘﺔ ﻋﻠﻰ ﺇﻳﺠﺎﺩ
ﺣﻠﻘﺔﺛﺎﺑﺘﺔ ﺗﺜﺒﺖ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺎﺳﺘﺨﺪﺍﻡﺑﻴﻨﻤﺎﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﺍﻟﺤﻠﻘﺎﺕ ﺍﻟﺘﻲ ﺗﺴﺘﺨﺪﻡ ﺩﻻﻻﺕ
ﺑﺪﻳﻬﻴﺔﺻﻌﺒﺔ.
3.5.3.7ﺑﺮﻫﺎﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ
ﻳﻮﻓﺮﻫﺬﺍ ﺍﻟﻘﺴﻢ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺻﺤﺔ ﺑﺮﻧﺎﻣﺠﻴﻦ ﺑﺴﻴﻄﻴﻦ .ﺍﻟﻤﺜﺎﻝ ﺍﻷﻭﻝ ﻹﺛﺒﺎﺕ
ﺍﻟﺼﻮﺍﺏﻫﻮ ﺑﺮﻧﺎﻣﺞ ﻗﺼﻴﺮ ﺟﺪﺍً ،ﻳﺘﻜﻮﻥ ﻣﻦ ﺳﻠﺴﻠﺔ ﻣﻦ ﺛﻼﺙ ﻋﺒﺎﺭﺍﺕ ﻣﻬﻤﺔ ﺗﺘﺒﺎﺩﻝ ﻗﻴﻢ
ﻣﺘﻐﻴﺮﻳﻦ.
ﺱ= ﺹ ؛
ﺫ= ﺭ ؛
{}x = B AND y = A
ﺑﻌﺪﺫﻟﻚ ،ﻧﺴﺘﺨﺪﻡ ﻫﺬﺍ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﺍﻟﺠﺪﻳﺪ ﻛﺸﺮﻁ ﻻﺣﻖ ﻟﻠﺒﻴﺎﻥ ﺍﻷﻭﺳﻂ ﻭﻧﺤﺴﺐ
ﺷﺮﻃﻪﺍﻟﻤﺴﺒﻖ ،ﻭﻫﻮ
ﺑﻌﺪﺫﻟﻚ ،ﻧﺴﺘﺨﺪﻡ ﻫﺬﺍ ﺍﻟﺘﺄﻛﻴﺪ ﺍﻟﺠﺪﻳﺪ ﺑﺎﻋﺘﺒﺎﺭﻩ ﺍﻟﺸﺮﻁ ﺍﻟﻼﺣﻖ ﻓﻲ ﺍﻟﻌﺒﺎﺭﺓ ﺍﻷﻭﻟﻰ ﻭﻧﻄﺒﻖ
ﺑﺪﻳﻬﻴﺔﺍﻹﺳﻨﺎﺩ ،ﻭﺍﻟﺘﻲ ﻳﻨﺘﺞ ﻋﻨﻬﺎ
}ﺹ = ﺏ ﻭ ﺱ = ﺃ{
ﺍﻟﻤﺜﺎﻝﺍﻟﺘﺎﻟﻲ ﻫﻮ ﺩﻟﻴﻞ ﻋﻠﻰ ﺻﺤﺔ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻜﻮﺩ ﺍﻟﻜﺎﺫﺏ ﺍﻟﺬﻱ ﻳﺤﺴﺐ ﺩﺍﻟﺔ ﺍﻟﻌﻮﺍﻣﻞ.
159 3.5ﻭﺻﻒ ﻣﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ :ﺩﻻﻻﺕ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ
}ﻥ< = {0
ﺍﻟﻌﺪ= ﻥ ؛
ﺣﻘﻴﻘﺔ= 1؛
ﺃﺛﻨﺎءﺍﻟﻌﺪ>< 0ﻓﻌﻞ
ﺣﻘﻴﻘﺔ= ﺣﻘﻴﻘﺔ * ﻋﺪﺩ ؛ ﺍﻟﻌﺪ =
ﺍﻟﻌﺪ 1 -؛
ﻧﻬﺎﻳﺔ
}ﺣﻘﻴﻘﺔ = ﻥ!{
ﺍﻟﻄﺮﻳﻘﺔﺍﻟﻤﻮﺻﻮﻓﺔ ﺳﺎﺑﻘﺎً ﻹﻳﺠﺎﺩ ﺍﻟﺤﻠﻘﺔ ﺍﻟﺜﺎﺑﺘﺔ ﻻ ﺗﻌﻤﻞ ﻟﻠﺤﻠﻘﺔ ﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ .ﻣﻄﻠﻮﺏ
ﺑﻌﺾﺍﻟﺒﺮﺍﻋﺔ ﻫﻨﺎ ،ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﺴﺎﻋﺪ ﻣﻦ ﺧﻼﻝ ﺩﺭﺍﺳﺔ ﻣﻮﺟﺰﺓ ﻟﻠﻜﻮﺩ .ﺍﻟﺤﻠﻘﺔ ﺗﺤﺴﺐ ﺩﺍﻟﺔ
ﺍﻟﻤﻀﺮﻭﺏﺑﺘﺮﺗﻴﺐ ﺍﻟﻀﺮﺏ ﺍﻷﺧﻴﺮ ﺃﻭﻻ ً؛ ﺇﻧﻪ) ،ﻥ * (1 -ﻥﻳﺘﻢ ﺃﻭﻻ ً ،ﻋﻠﻰ ﺍﻓﺘﺮﺍﺽﻥ
ﻭﻟﻜﻦﻳﺠﺐ ﻋﻠﻴﻨﺎ ﺃﻳﻀﺎً ﺃﻥ ﻧﻀﻤﻦ ﺫﻟﻚﻋﺪﺩﺩﺍﺉﻤﺎً ﻏﻴﺮ ﺳﻠﺒﻲ ،ﻭﻫﻮ ﻣﺎ ﻳﻤﻜﻨﻨﺎ ﺍﻟﻘﻴﺎﻡ ﺑﻪ ﺑﺈﺿﺎﻓﺔ
ﺫﻟﻚﺇﻟﻰ ﺍﻟﺘﺄﻛﻴﺪ ﺃﻋﻼﻩ ،ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ
ﺑﻌﺪﺫﻟﻚ ،ﻳﺠﺐ ﺃﻥ ﻧﺆﻛﺪ ﺃﻥ ﻫﺬﺍ ﻳﻠﺒﻲ ﻣﺘﻄﻠﺒﺎﺕ ﺍﻟﺜﻮﺍﺑﺖ .ﻣﺮﺓ ﺃﺧﺮﻯ ،ﻧﺴﻤﺢ ﻟﻲ ﺃﻳﻀﺎً
ﺑﺎﺳﺘﺨﺪﺍﻡ ، Pﻟﺬﺍ ﻓﺈﻥ Pﺗﻌﻨﻲ ﺑﻮﺿﻮﺡ .Iﺍﻟﺴﺆﺍﻝ ﺍﻟﺘﺎﻟﻲ ﻫﻮ
ﺃﻧﺎﻭﺏ ﻫﻮ
ﻣﻤﺎﻳﻘﻠﻞ ﺇﻟﻰ
ﻓﻲﺣﺎﻟﺘﻨﺎ ،ﻳﺠﺐ ﺃﻥ ﻧﺤﺴﺐ ﺍﻟﺸﺮﻁ ﺍﻟﻤﺴﺒﻖ ﻟﺠﺴﻢ ﺍﻟﺤﻠﻘﺔ ،ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺜﺎﺑﺖ ﻟﻠﺸﺮﻁ
ﺍﻟﻼﺣﻖ.ﻝ
ﻧﺤﺴﺐ Pﻟﻴﻜﻮﻥ
ﻣﻦﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻫﺬﺍ ﺻﺤﻴﺢ ،ﺇﻟﻰ ﻣﺘﻰﺍﻟﻌﺪ = ، 0ﺍﻟﺠﺰء ﺍﻷﻭﻝ ﻫﻮ ﺑﺎﻟﻀﺒﻂ ﺗﻌﺮﻳﻒ ﻋﺎﻣﻠﻲ .ﻟﺬﺍ ،
ﻓﺈﻥﺍﺧﺘﻴﺎﺭﻧﺎ ﻟـ Iﻳﻠﺒﻲ ﻣﺘﻄﻠﺒﺎﺕ ﺣﻠﻘﺔ ﺛﺎﺑﺘﺔ .ﺍﻵﻥ ﻳﻤﻜﻨﻨﺎ ﺍﺳﺘﺨﺪﺍﻡ ) Pﻭﻫﻮ ﻧﻔﺲ (Iﻣﻦﺑﻴﻨﻤﺎ
ﻛﺸﺮﻁﻻﺣﻖ ﻟﻠﻤﻬﻤﺔ ﺍﻟﺜﺎﻧﻴﺔ ﻟﻠﺒﺮﻧﺎﻣﺞ
ﺍﻟﺬﻱﻳﻨﺘﺞ ﻋﻦ P
ﺗﻨﺘﺞﻝ P
3.5.3.8ﺍﻟﺘﻘﻴﻴﻢ
ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ،ﻟﺘﺤﺪﻳﺪ ﺩﻻﻻﺕ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻛﺎﻣﻠﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﺒﺪﻳﻬﻴﺔ ،ﻳﺠﺐ ﺃﻥ
ﺗﻜﻮﻥﻫﻨﺎﻙ ﺑﺪﻳﻬﻴﺔ ﺃﻭ ﻗﺎﻋﺪﺓ ﺍﺳﺘﻨﺘﺎﺝ ﻟﻜﻞ ﻧﻮﻉ ﺑﻴﺎﻥ ﻓﻲ ﺍﻟﻠﻐﺔ .ﺗﺤﺪﻳﺪ ﺍﻟﺒﺪﻳﻬﻴﺎﺕ ﺃﻭ ﻗﻮﺍﻋﺪ
ﺍﻻﺳﺘﺪﻻﻝﻝ
161 ﻣﻼﺣﻈﺎﺕﺑﺒﻠﻴﻮﻏﺮﺍﻓﻴﺔ
ﺃﺛﺒﺘﺖﺑﻌﺾ ﻋﺒﺎﺭﺍﺕ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺃﻧﻬﺎ ﻣﻬﻤﺔ ﺻﻌﺒﺔ .ﻳﺘﻤﺜﻞ ﺃﺣﺪ ﺍﻟﺤﻠﻮﻝ ﺍﻟﻮﺍﺿﺤﺔ ﻟﻬﺬﻩ
ﺍﻟﻤﺸﻜﻠﺔﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻣﻊ ﻭﺿﻊ ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﺒﺪﻳﻬﻴﺔ ﻓﻲ ﺍﻻﻋﺘﺒﺎﺭ ،ﺑﺤﻴﺚ ﻳﺘﻢ ﺗﻀﻤﻴﻦ
ﺍﻟﻌﺒﺎﺭﺍﺕﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺪﻳﻬﻴﺎﺕ ﺃﻭ ﻗﻮﺍﻋﺪ ﺍﻻﺳﺘﺪﻻﻝ ﻣﻦ ﺃﺟﻠﻬﺎ .ﻟﺴﻮء ﺍﻟﺤﻆ ،ﻓﺈﻥ ﻣﺜﻞ
ﻫﺬﻩﺍﻟﻠﻐﺔ ﺳﺘﺘﺠﺎﻫﻞ ﺑﺎﻟﻀﺮﻭﺭﺓ ﺑﻌﺾ ﺍﻷﺟﺰﺍء ﺍﻟﻤﻔﻴﺪﺓ ﻭﺍﻟﻘﻮﻳﺔ.
ﺗﻌﺪﺩﻻﻻﺕ ﺃﻛﺴﻴﻮﻣﺎﺗﻴﻚ ﺃﺩﺍﺓ ﻗﻮﻳﺔ ﻟﻠﺒﺤﺚ ﻓﻲ ﺇﺛﺒﺎﺗﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ،ﻭﺗﻮﻓﺮ ﺇﻃﺎﺭﺍً
ﻣﻤﺘﺎﺯﺍًﻳﻤﻜﻦ ﻣﻦ ﺧﻼﻟﻪ ﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ،ﺳﻮﺍء ﺃﺛﻨﺎء ﺑﻨﺎﺉﻬﺎ ﺃﻭ ﻻﺣﻘﺎً .ﻭﻣﻊ ﺫﻟﻚ ،ﻓﺈﻥ
ﻓﺎﺉﺪﺗﻬﺎﻓﻲ ﻭﺻﻒ ﻣﻌﻨﻰ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻟﻤﺴﺘﺨﺪﻣﻲ ﺍﻟﻠﻐﺔ ﻭﻛﺘﺎﺏ ﺍﻟﻤﺘﺮﺟﻤﻴﻦ ﻣﺤﺪﻭﺩﺓ
ﻟﻠﻐﺎﻳﺔ.
ﻣﻠﺨﺺ
ﻗﻮﺍﻋﺪﺍﻟﺴﻤﺔ ﻫﻲ ﺻﻴﻐﺔ ﻭﺻﻔﻴﺔ ﻳﻤﻜﻦ ﺃﻥ ﺗﺼﻒ ﻛﻼ ًﻣﻦ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻭﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ
ﻟﻠﻐﺔ.ﻗﻮﺍﻋﺪ ﺍﻟﺴﻤﺔ ﺍﻟﻨﺤﻮﻳﺔ ﻫﻲ ﺍﻣﺘﺪﺍﺩﺍﺕ ﻟﻠﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺨﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ .ﺗﺘﻜﻮﻥ ﻗﻮﺍﻋﺪ
ﺍﻟﺴﻤﺔﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﻭﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺴﻤﺎﺕ ﻭﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻭﻇﺎﺉﻒ ﺣﺴﺎﺏ ﺍﻟﺴﻤﺎﺕ
ﻭﻣﺠﻤﻮﻋﺔﻣﻦ ﺍﻟﻤﺴﻨﺪﺍﺕ ﺍﻟﺘﻲ ﺗﺼﻒ ﻣﻌﺎً ﻗﻮﺍﻋﺪ ﺍﻟﺪﻻﻻﺕ ﺍﻟﺜﺎﺑﺘﺔ.
ﻳﻘﺪﻡﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻣﻘﺪﻣﺔ ﻣﻮﺟﺰﺓ ﻟﺜﻼﺙ ﻃﺮﻕ ﻟﻠﻮﺻﻒ ﺍﻟﺪﻻﻟﻲ :ﺍﻟﺘﺸﻐﻴﻠﻲ ،ﻭﺍﻟﺪﻻﻟﺔ ،
ﻭﺍﻟﺒﺪﻳﻬﻴﺔ.ﺩﻻﻻﺕ ﺍﻟﻌﻤﻠﻴﺎﺕ ﻫﻲ ﻃﺮﻳﻘﺔ ﻟﻮﺻﻒ ﻣﻌﻨﻰ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ ﻣﻦ ﺣﻴﺚ ﺗﺄﺛﻴﺮﻫﺎ ﻋﻠﻰ
ﺁﻟﺔﻣﺜﺎﻟﻴﺔ .ﻓﻲ ﺩﻻﻻﺕ ﺍﻟﺪﻻﻟﺔ ،ﺗﺴُﺘﺨﺪﻡ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﻟﺘﻤﺜﻴﻞ ﻣﻌﺎﻧﻲ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ.
ﻳﺘﻢﺗﺤﻮﻳﻞ ﻛﻴﺎﻧﺎﺕ ﺍﻟﻠﻐﺔ ﺇﻟﻰ ﻫﺬﻩ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﺫﺍﺕ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﻌﻮﺩﻳﺔ .ﺗﻢ ﺍﺑﺘﻜﺎﺭ
ﺩﻻﻻﺕﺃﻛﺴﻴﻮﻣﺎﺗﻴﻚ ،ﺍﻟﺘﻲ ﺗﻘﻮﻡ ﻋﻠﻰ ﺍﻟﻤﻨﻄﻖ ﺍﻟﺼﻮﺭﻱ ،ﻛﺄﺩﺍﺓ ﻹﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﺍﻣﺞ.
ﺣﻮﺍﺷﻲﺑﺒﻠﻴﻮﻏﺮﺍﻓﻴﺔ
ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﻭﺻﻒ ﺍﻟﻨﺤﻮ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻘﻮﺍﻋﺪ ﺍﻟﻨﺤﻮﻳﺔ ﺍﻟﺨﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺴﻴﺎﻕ ﻭ 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ﻛﻴﻒ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺗﺮﺗﻴﺐ ﺗﻘﻴﻴﻢ ﺍﻟﺴﻤﺎﺕ ﻟﻸﺷﺠﺎﺭ ﻓﻲ ﻗﻮﺍﻋﺪ ﻧﺤﻮﻳﺔ ﻟﺨﺎﺻﻴﺔ ﻣﻌﻴﻨﺔ؟
.26ﺍﺷﺮﺡ ﻣﺎ ﺗﻌﻨﻴﻪ ﺍﻟﺸﺮﻭﻁ ﺍﻟﻤﺴﺒﻘﺔ ﻭﺍﻟﺸﺮﻭﻁ ﺍﻟﻼﺣﻘﺔ ﻟﺒﻴﺎﻥ ﻣﻌﻴﻦ ﻓﻲ ﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ.
ﺗﻢﺿﺒﻂ ﺍﻟﻤﺸﻜﻠﺔ
.1ﺍﻟﻨﻤﻮﺫﺟﺎﻥ ﺍﻟﺮﻳﺎﺿﻴﺎﻥ ﻟﻮﺻﻒ ﺍﻟﻠﻐﺔ ﻫﻤﺎ ﺍﻟﺘﻮﻟﻴﺪ ﻭﺍﻻﻋﺘﺮﺍﻑ .ﺻﻒ ﻛﻴﻒ ﻳﻤﻜﻦ ﻟﻜﻞ ﻣﻨﻬﺎ
ﺗﺤﺪﻳﺪﺑﻨﺎء ﺟﻤﻠﺔ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ.
ﺃ.ﺑﺎﺏ
ﺏ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 ﺗﻢﺿﺒﻂ ﺍﻟﻤﺸﻜﻠﺔ
ﺃ→ﺃ ]ﺏ[ ﺃ
.18ﻣﺎ ﻫﻮ ﺍﻟﻔﺮﻕ ﺑﻴﻦ ﺍﻟﺴﻤﺔ ﺍﻟﺠﻮﻫﺮﻳﺔ ﻭﺍﻟﺴﻤﺔ ﺍﻟﻤﺮﻛﺒﺔ ﻏﻴﺮ ﺍﻟﺪﺍﺧﻠﻴﺔ؟
.19ﺍﻛﺘﺐ ﻗﺎﻋﺪﺓ ﻧﺤﻮﻳﺔ ﻟﻠﺨﺎﺻﻴﺔ ﻳﻜﻮﻥ ﺃﺳﺎﺳﻬﺎ BNFﻫﻮ ﺍﻟﻤﺜﺎﻝ 3.6ﻓﻲ ﺍﻟﻘﺴﻢ 3.4.5ﻭﻟﻜﻦ
ﻗﻮﺍﻋﺪﺍﻟﻠﻐﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻪ ﻫﻲ ﻛﻤﺎ ﻳﻠﻲ :ﻻ ﻳﻤﻜﻦ ﺧﻠﻂ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ،ﻭﻟﻜﻦ
ﻻﻳﻠﺰﻡ ﺃﻥ ﺗﺤﺘﻮﻱ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻋﻠﻰ ﻧﻔﺲ ﺍﻷﻧﻮﺍﻉ ﻋﻠﻰ ﺟﺎﻧﺒﻲ ﺍﻟﻤﻬﻤﺔ ﺍﻟﻤﺸﻐﻞ ﺃﻭ
ﺍﻟﻌﺎﻣﻞ.
.20ﺍﻛﺘﺐ ﻗﻮﺍﻋﺪ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺠﺪﻭﻟﻴﺔ ﺍﻟﺘﻲ ﻳﻜﻮﻥ ﺃﺳﺎﺳﻬﺎ BNFﻫﻮ ﺍﻟﻤﺜﺎﻝ 3.2ﻭﻗﻮﺍﻋﺪ
ﺍﻟﻨﻮﻉﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ﻫﻲ ﻧﻔﺴﻬﺎ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﻣﺜﺎﻝ ﺑﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﻓﻲ ﺍﻟﻘﺴﻢ .3.4.5
ﺃ.ﺁﺩﺍﻝ
ﺏ.ﺟﺎﻓﺎﺍﻓﻌﻞ ﺍﺛﻨﺎء
ﺝ.ﺗﻌﺒﻴﺮﺍﺕ ﺟﺎﻓﺎ ﺍﻟﻤﻨﻄﻘﻴﺔ
ﺩ.ﺟﺎﻓﺎﻝ
ﻩ.ﺝﻳﺤُﻮﻝّ
-23ﺍﺣﺴﺐ ﺃﺿﻌﻒ ﺷﺮﻁ ﻣﺴﺒﻖ ﻟﻜﻞ ﻣﻦ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻭﺍﻟﺸﺮﻭﻁ ﺍﻟﻼﺣﻘﺔ ﺍﻟﺘﺎﻟﻴﺔ:
ﺃ.ﻟﻮ)ﺃ == ﺏ(
ﺏ= * 2ﺃ 1 +
ﺁﺧﺮ
ﺏ= * 2ﺃ ؛
}ﺏ< {1
ﺏ.ﻟﻮ)ﺱ >ﺹ(
ﺱ= ﺱ 1 +
ﺁﺧﺮ
ﺱ= * 3ﺱ
}ﺱ >{0
ﺝ.ﻟﻮ)ﺱ< ﺹ(
ﺹ= * 2ﺱ 1 +
ﺁﺧﺮ
ﺹ= * 3ﺱ 1 -؛
}ﺹ< {3
.26ﺍﺷﺮﺡ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻷﺭﺑﻌﺔ ﻹﺛﺒﺎﺕ ﺻﺤﺔ ﺑﻨﺎء ﺍﻟﺤﻠﻘﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻟﻠﻨﻤﻮﺫﺝﺑﻴﻨﻤﺎﺏ
ﻳﻔﻌﻞﺱﻧﻬﺎﻳﺔ
.27ﺇﺛﺒﺎﺕ ﺃﻥ )ﻥ * (1 +ﺝ *ﻥ = 1
.28ﺇﺛﺒﺎﺕ ﺻﺤﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﺘﺎﻟﻲ:
}ﻥ< {0
ﺍﻟﻌﺪ= ﻥ ؛
ﺍﻟﻤﺠﻤﻮﻉ= 0؛
ﺑﻴﻨﻤﺎﺍﻟﻌﺪ >< 0ﻳﻔﻌﻞ
ﺍﻟﻤﺠﻤﻮﻉ= ﺍﻟﻤﺠﻤﻮﻉ +ﺍﻟﻌﺪ ؛
ﺍﻟﻌﺪ= ﺍﻟﻌﺪ 1 -؛ ﻧﻬﺎﻳﺔ