0% found this document useful (0 votes)
108 views166 pages

Untitled

Uploaded by

Ali Mohammed
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
108 views166 pages

Untitled

Uploaded by

Ali Mohammed
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 166

‫‪1‬‬

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

‫ﻣﻘﺪﻣﺎﺕ‬

‫‪1.1‬ﺃﺳﺒﺎﺏ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬


‫‪1.2‬ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫‪1.3‬ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ‬
‫‪1.4‬ﺍﻟﺘﺄﺛﻴﺮﺍﺕ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‬
‫‪1.5‬ﻓﺉﺎﺕ ﺍﻟﻠﻐﺔ‬
‫‪1.6‬ﻣﻘﺎﻳﻀﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‬
‫‪1.7‬ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‬
‫‪1.8‬ﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬

‫‪1‬‬
‫ﺏ‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪2‬‬

‫ﻗﺒﻞﺃﻥ ﻧﺒﺪﺃ ﻓﻲ ﻣﻨﺎﻗﺸﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻧﺄﺧﺬ ﻓﻲ ﺍﻻﻋﺘﺒﺎﺭ ﺑﻌﺾ‬
‫ﺍﻟﻤﻘﺪﻣﺎﺕ‪.‬ﺃﻭﻻ ً‪ ،‬ﻧﺸﺮﺡ ﺑﻌﺾ ﺍﻷﺳﺒﺎﺏ ﺍﻟﺘﻲ ﺗﺠﻌﻞ ﻃﻼﺏ ﻋﻠﻮﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﻣﻄﻮﺭﻱ‬
‫ﺍﻟﺒﺮﺍﻣﺞﺍﻟﻤﺤﺘﺮﻓﻴﻦ ﻳﺪﺭﺳﻮﻥ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻟﻌﺎﻣﺔ ﻟﺘﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻭﺗﻘﻴﻴﻤﻬﺎ‪ .‬ﺗﻌﺘﺒﺮ ﻫﺬﻩ‬
‫ﺍﻟﻤﻨﺎﻗﺸﺔﺫﺍﺕ ﻗﻴﻤﺔ ﺧﺎﺻﺔ ﻷﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻳﻌﺘﻘﺪﻭﻥ ﺃﻥ ﺍﻟﻤﻌﺮﻓﺔ ﺍﻟﻌﻤﻠﻴﺔ ﺑﻠﻐﺔ ﺃﻭ ﻟﻐﺘﻴﻦ ﻣﻦ ﻟﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔﻛﺎﻓﻴﺔ ﻟﻌﻠﻤﺎء ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﺑﻌﺪ ﺫﻟﻚ ‪ ،‬ﻧﺼﻒ ﺑﺈﻳﺠﺎﺯ ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‪ .‬ﺑﻌﺪ ﺫﻟﻚ ‪،‬‬
‫ﻧﻈﺮﺍًﻷﻥ ﺍﻟﻜﺘﺎﺏ ﻳﻘﻴﻢ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ ﻭﻣﻴﺰﺍﺗﻬﺎ ‪ ،‬ﻓﺈﻧﻨﺎ ﻧﻘﺪﻡ ﻗﺎﺉﻤﺔ ﺑﺎﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ‬
‫ﺑﻤﺜﺎﺑﺔﺃﺳﺎﺱ ﻟﻤﺜﻞ ﻫﺬﻩ ﺍﻷﺣﻜﺎﻡ‪ .‬ﺑﻌﺪ ﺫﻟﻚ ‪ ،‬ﻧﻨﺎﻗﺶ ﺍﻟﺘﺄﺛﻴﺮﻳﻦ ﺍﻟﺮﺉﻴﺴﻴﻴﻦ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‪:‬‬
‫ﻫﻨﺪﺳﺔﺍﻵﻟﺔ ﻭﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﺑﻌﺪ ﺫﻟﻚ ‪ ،‬ﻧﻘﺪﻡ ﻓﺉﺎﺕ ﻣﺨﺘﻠﻔﺔ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬
‫ﺍﻟﺘﺎﻟﻲ‪،‬‬

‫ﻧﻈﺮﺍًﻷﻥ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﻳﺪﻭﺭ ﺃﻳﻀﺎً ﺣﻮﻝ ﺗﻄﺒﻴﻖ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻓﺈﻥ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻳﺘﻀﻤﻦ ﻧﻈﺮﺓ‬
‫ﻋﺎﻣﺔﻋﻠﻰ ﺍﻟﻤﻨﺎﻫﺞ ﺍﻟﻌﺎﻣﺔ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﻟﻠﺘﻨﻔﻴﺬ‪ .‬ﺃﺧﻴﺮﺍً ‪ ،‬ﻧﺼﻒ ﺑﺈﻳﺠﺎﺯ ﺑﻌﺾ ﺍﻷﻣﺜﻠﺔ ﻟﺒﻴﺉﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔﻭﻧﻨﺎﻗﺶ ﺗﺄﺛﻴﺮﻫﺎ ﻋﻠﻰ ﺇﻧﺘﺎﺝ ﺍﻟﺒﺮﺍﻣﺞ‪.‬‬

‫‪1.1‬ﺃﺳﺒﺎﺏ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬


‫ﻣﻦﺍﻟﻄﺒﻴﻌﻲ ﺃﻥ ﻳﺘﺴﺎءﻝ ﺍﻟﻄﻼﺏ ﻋﻦ ﻛﻴﻔﻴﺔ ﺍﺳﺘﻔﺎﺩﺗﻬﻢ ﻣﻦ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﺑﻌﺪ‬
‫ﻛﻞﺷﻲء ‪ ،‬ﻫﻨﺎﻙ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻮﺿﻮﻋﺎﺕ ﺍﻷﺧﺮﻯ ﻓﻲ ﻋﻠﻮﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﺴﺘﺤﻖ ﺍﻟﺪﺭﺍﺳﺔ ﺍﻟﺠﺎﺩﺓ‪.‬‬
‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺎ ﻧﻌﺘﻘﺪ ﺃﻧﻪ ﻗﺎﺉﻤﺔ ﻣﻘﻨﻌﺔ ﺑﺎﻟﻤﺰﺍﻳﺎ ﺍﻟﻤﺤﺘﻤﻠﺔ ﻟﺪﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪:‬‬

‫• ﺯﻳﺎﺩﺓﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺍﻟﺘﻌﺒﻴﺮ ﻋﻦ ﺍﻷﻓﻜﺎﺭ‪.‬ﻣﻦ ﺍﻟﻤﻌﺘﻘﺪ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺃﻥ ﺍﻟﻌﻤﻖ ﺍﻟﺬﻱ ﻳﻤﻜﻦ‬
‫ﻟﻠﻨﺎﺱﺍﻟﺘﻔﻜﻴﺮ ﻓﻴﻪ ﻳﺘﺄﺛﺮ ﺑﺎﻟﻘﻮﺓ ﺍﻟﺘﻌﺒﻴﺮﻳﺔ ﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﻨﻘﻠﻮﻥ ﺑﻬﺎ ﺃﻓﻜﺎﺭﻫﻢ‪ .‬ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ‬
‫ﻟﺪﻳﻬﻢﻓﻬﻢ ﺿﻌﻴﻒ ﻟﻠﻐﺔ ﺍﻟﻄﺒﻴﻌﻴﺔ ﻣﻘﻴﺪﻭﻥ ﻓﻲ ﺗﻌﻘﻴﺪ ﺃﻓﻜﺎﺭﻫﻢ ‪ ،‬ﻻ ﺳﻴﻤﺎ ﻓﻲ ﻋﻤﻖ‬
‫ﺍﻟﺘﺠﺮﻳﺪ‪.‬ﺑﻌﺒﺎﺭﺓ ﺃﺧﺮﻯ ‪ ،‬ﻳﺼﻌﺐ ﻋﻠﻰ ﺍﻟﻨﺎﺱ ﺗﺼﻮﺭ ﺍﻟﻬﻴﺎﻛﻞ ﺍﻟﺘﻲ ﻻ ﻳﻤﻜﻨﻬﻢ ﻭﺻﻔﻬﺎ ﺷﻔﻬﻴﺎ ً‬
‫ﺃﻭﻛﺘﺎﺑﻴﺎ‪ً.‬‬

‫ﺍﻟﻤﺒﺮﻣﺠﻮﻥ ‪،‬ﻓﻲ ﻋﻤﻠﻴﺔ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ‪ ،‬ﻣﻘﻴﺪﻭﻥ ﺑﺎﻟﻤﺜﻞ‪ .‬ﺗﻀﻊ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﻄﻮﺭﻭﻥ‬
‫ﺑﻬﺎﺍﻟﺒﺮﺍﻣﺞ ﻗﻴﻮﺩﺍً ﻋﻠﻰ ﺃﻧﻮﺍﻉ ﻫﻴﺎﻛﻞ ﺍﻟﺘﺤﻜﻢ ﻭﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺍﻟﺘﺠﺮﺩ ﺍﻟﺘﻲ ﻳﻤﻜﻨﻬﻢ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ؛ﻭﺑﺎﻟﺘﺎﻟﻲ ‪ ،‬ﻓﺈﻥ ﺃﺷﻜﺎﻝ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺎﺕ ﺍﻟﺘﻲ ﻳﻤﻜﻨﻬﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻣﺤﺪﻭﺩﺓ ﺑﺎﻟﻤﺜﻞ‪.‬‬
‫ﻳﻤﻜﻦﺃﻥ ﻳﺆﺩﻱ ﺍﻟﻮﻋﻲ ﺑﻤﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﻣﻴﺰﺍﺕ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺇﻟﻰ ﺗﻘﻠﻴﻞ ﻫﺬﻩ ﺍﻟﻘﻴﻮﺩ‬
‫ﻓﻲﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ‪ .‬ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺠﻴﻦ ﺯﻳﺎﺩﺓ ﻧﻄﺎﻕ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ‬
‫ﻣﻦﺧﻼﻝ ﺗﻌﻠﻢ ﺗﺮﺍﻛﻴﺐ ﻟﻐﺔ ﺟﺪﻳﺪﺓ‪.‬‬

‫ﻗﺪﻳﻘُﺎﻝ ﺇﻥ ﺗﻌﻠﻢ ﻗﺪﺭﺍﺕ ﺍﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ ﻻ ﻳﺴﺎﻋﺪ ﺍﻟﻤﺒﺮﻣﺞ ﺍﻟﺬﻱ ﻳﺠُﺒﺮ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﻟﻐﺔﺗﻔﺘﻘﺮ ﺇﻟﻰ ﺗﻠﻚ ﺍﻟﻘﺪﺭﺍﺕ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﻫﺬﻩ ﺍﻟﺤﺠﺔ ﻻ ﺗﺼﻤﺪ ‪ ،‬ﻷﻧﻪ ﻓﻲ ﻛﺜﻴﺮ ﻣﻦ‬
‫ﺍﻷﺣﻴﺎﻥ ‪،‬ﻳﻤﻜﻦ ﻣﺤﺎﻛﺎﺓ ﺑﻨﻴﺎﺕ ﺍﻟﻠﻐﺔ ﺑﻠﻐﺎﺕ ﺃﺧﺮﻯ ﻻ ﺗﺪﻋﻢ ﺗﻠﻚ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ‪.‬‬
‫ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻗﺪ ﻳﺼﻤﻢ ﻣﺒﺮﻣﺞ ﺳﻲ ﺗﻌﻠﻢ ﺑﻨﻴﺔ ﻭﺍﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‬
‫ﺍﻟﺘﺮﺍﺑﻄﻴﺔﻓﻲ ﺑﻴﺮﻝ )‪ Wall‬ﻭﺁﺧﺮﻭﻥ ‪ (2000 ،‬ﻫﻴﺎﻛﻞ ﺗﺤﺎﻛﻲ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ﻓﻲ ﺗﻠﻚ‬
‫ﺍﻟﻠﻐﺔ‪.‬ﻓﻲ ﺃﺧﺮﻯ‬
‫‪3‬‬ ‫‪1.1‬ﺃﺳﺒﺎﺏ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬

‫ﺍﻟﻜﻠﻤﺎﺕ ‪،‬ﻓﺈﻥ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺗﺒﻨﻲ ﺗﻘﺪﻳﺮﺍً ﻟﺨﺼﺎﺉﺺ ﺍﻟﻠﻐﺔ ﺍﻟﻘﻴﻤﺔ ﻭﺗﺒﻨﻴﻬﺎ‬
‫ﻭﺗﺸﺠﻊﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ‪ ،‬ﺣﺘﻰ ﻋﻨﺪﻣﺎ ﻻ ﺗﺪﻋﻢ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﺴﺘﺨﺪﻣﻮﻧﻬﺎ ﻫﺬﻩ‬
‫ﺍﻟﻤﻴﺰﺍﺕﻭﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ‪.‬‬

‫• ﺧﻠﻔﻴﺔﻣﺤﺴﻨﺔ ﻻﺧﺘﻴﺎﺭ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻨﺎﺳﺒﺔ‪.‬ﻛﺎﻥ ﻟﺪﻯ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﺍﻟﻤﺤﺘﺮﻓﻴﻦ‬


‫ﺍﻟﻘﻠﻴﻞﻣﻦ ﺍﻟﺘﻌﻠﻴﻢ ﺍﻟﺮﺳﻤﻲ ﻓﻲ ﻋﻠﻮﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ؛ ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﻓﻘﺪ ﻃﻮﺭﻭﺍ ﻣﻬﺎﺭﺍﺗﻬﻢ ﻓﻲ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺑﺸﻜﻞ ﻣﺴﺘﻘﻞ ﺃﻭ ﻣﻦ ﺧﻼﻝ ﺑﺮﺍﻣﺞ ﺍﻟﺘﺪﺭﻳﺐ ﺍﻟﺪﺍﺧﻠﻴﺔ‪ .‬ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﻘﺼﺮ ﺑﺮﺍﻣﺞ‬
‫ﺍﻟﺘﺪﺭﻳﺐﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻢ ﻋﻠﻰ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﺃﻭ ﻟﻐﺘﻴﻦ ﺫﺍﺕ ﺻﻠﺔ ﻣﺒﺎﺷﺮﺓ ﺑﺎﻟﻤﺸﺎﺭﻳﻊ ﺍﻟﺤﺎﻟﻴﺔ‬
‫ﻟﻠﻤﻨﻈﻤﺔ‪.‬ﺗﻠﻘﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﺍﻵﺧﺮﻳﻦ ﺗﺪﺭﻳﺒﻬﻢ ﺍﻟﺮﺳﻤﻲ ﻣﻨﺬ ﺳﻨﻮﺍﺕ‪ .‬ﻟﻢ ﺗﻌﺪ‬
‫ﺍﻟﻠﻐﺎﺕﺍﻟﺘﻲ ﺗﻌﻠﻤﻮﻫﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﻣﺴﺘﺨﺪﻣﺔ ‪ ،‬ﻭﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﺘﻮﻓﺮﺓ ﺍﻵﻥ‬
‫ﻓﻲﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻟﻢ ﺗﻜﻦ ﻣﻌﺮﻭﻓﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ‪ .‬ﻭﺍﻟﻨﺘﻴﺠﺔ ﻫﻲ ﺃﻥ‬
‫ﺍﻟﻌﺪﻳﺪﻣﻦ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ‪ ،‬ﻋﻨﺪ ﻣﻨﺤﻬﻢ ﺍﺧﺘﻴﺎﺭﺍً ﻟﻠﻐﺎﺕ ﻟﻤﺸﺮﻭﻉ ﺟﺪﻳﺪ ‪ ،‬ﻳﺴﺘﺨﺪﻣﻮﻥ ﺍﻟﻠﻐﺔ‬
‫ﺍﻷﻛﺜﺮﺇﻟﻤﺎﻣﺎً ﺑﻬﺎ ‪ ،‬ﺣﺘﻰ ﻟﻮ ﻛﺎﻧﺖ ﻏﻴﺮ ﻣﻨﺎﺳﺒﺔ ﻟﻠﻤﺸﺮﻭﻉ ﺍﻟﻤﻄﺮﻭﺡ‪ .‬ﺇﺫﺍ ﻛﺎﻥ ﻫﺆﻻء‬
‫ﺍﻟﻤﺒﺮﻣﺠﻮﻥﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺑﻤﺠﻤﻮﻋﺔ ﻭﺍﺳﻌﺔ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﻭﺗﺮﻛﻴﺒﺎﺕ ﺍﻟﻠﻐﺔ ‪،‬‬

‫ﻏﺎﻟﺒﺎًﻣﺎ ﻳﻤﻜﻦ ﻣﺤﺎﻛﺎﺓ ﺑﻌﺾ ﻣﻴﺰﺍﺕ ﺇﺣﺪﻯ ﺍﻟﻠﻐﺎﺕ ﺑﻠﻐﺔ ﺃﺧﺮﻯ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻳﻔُﻀﻞ‬
‫ﺍﺳﺘﺨﺪﺍﻡﻣﻴﺰﺓ ﺗﻢ ﺩﻣﺞ ﺗﺼﻤﻴﻤﻬﺎ ﻓﻲ ﻟﻐﺔ ﺑﺪﻻ ًﻣﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻣﺤﺎﻛﺎﺓ ﻟﺘﻠﻚ ﺍﻟﻤﻴﺰﺓ ‪ ،‬ﻭﺍﻟﺘﻲ‬
‫ﻏﺎﻟﺒﺎًﻣﺎ ﺗﻜﻮﻥ ﺃﻗﻞ ﺃﻧﺎﻗﺔ ﻭﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ﻭﺃﻗﻞ ﺃﻣﺎﻧﺎً‪.‬‬

‫• ﺯﻳﺎﺩﺓﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺗﻌﻠﻢ ﻟﻐﺎﺕ ﺟﺪﻳﺪﺓ‪.‬ﻻ ﺗﺰﺍﻝ ﺑﺮﻣﺠﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﺨﺼﺼﺎً ﺻﻐﻴﺮﺍً ﻧﺴﺒﻴﺎً ‪ ،‬ﻭﻻ‬
‫ﺗﺰﺍﻝﻣﻨﻬﺠﻴﺎﺕ ﺍﻟﺘﺼﻤﻴﻢ ﻭﺃﺩﻭﺍﺕ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﻭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﺣﺎﻟﺔ ﺗﻄﻮﺭ ﻣﺴﺘﻤﺮ‪.‬‬
‫ﻫﺬﺍﻳﺠﻌﻞ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻣﻬﻨﺔ ﻣﺜﻴﺮﺓ ‪ ،‬ﻭﻟﻜﻨﻪ ﻳﻌﻨﻲ ﺃﻳﻀﺎً ﺃﻥ ﺍﻟﺘﻌﻠﻢ ﺍﻟﻤﺴﺘﻤﺮ ﺿﺮﻭﺭﻱ‪.‬‬
‫ﻳﻤﻜﻦﺃﻥ ﺗﻜﻮﻥ ﻋﻤﻠﻴﺔ ﺗﻌﻠﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺟﺪﻳﺪﺓ ﻃﻮﻳﻠﺔ ﻭﺻﻌﺒﺔ ‪ ،‬ﺧﺎﺻﺔ ﺑﺎﻟﻨﺴﺒﺔ ﻟﺸﺨﺺ‬
‫ﻳﺸﻌﺮﺑﺎﻟﺮﺍﺣﺔ ﻣﻊ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﺃﻭ ﻟﻐﺘﻴﻦ ﻓﻘﻂ ﻭﻟﻢ ﻳﻔﺤﺺ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺑﺸﻜﻞ ﻋﺎﻡ‬
‫ﻣﻄﻠﻘﺎً‪.‬ﺑﻤﺠﺮﺩ ﺍﻟﺤﺼﻮﻝ ﻋﻠﻰ ﻓﻬﻢ ﺷﺎﻣﻞ ﻟﻠﻤﻔﺎﻫﻴﻢ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﻐﺎﺕ ‪ ،‬ﻳﺼﺒﺢ ﻣﻦ ﺍﻷﺳﻬﻞ‬
‫ﺑﻜﺜﻴﺮﺭﺅﻳﺔ ﻛﻴﻔﻴﺔ ﺩﻣﺞ ﻫﺬﻩ ﺍﻟﻤﻔﺎﻫﻴﻢ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﺘﻢ ﺗﻌﻠﻤﻬﺎ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ‬
‫ﺍﻟﻤﺜﺎﻝ ‪،‬ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﺍﻟﺬﻳﻦ ﻳﻔﻬﻤﻮﻥ ﻣﻔﺎﻫﻴﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﺳﻴﻜﻮﻥ ﻟﺪﻳﻬﻢ ﻭﻗﺖ‬
‫ﺃﺳﻬﻞﻓﻲ ﺗﻌﻠﻢ ‪،.Java )Arnold et al‬‬

‫ﺗﺤﺪﺙﻧﻔﺲ ﺍﻟﻈﺎﻫﺮﺓ ﻓﻲ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻄﺒﻴﻌﻴﺔ‪ .‬ﻛﻠﻤﺎ ﻋﺮﻓﺖ ﻗﻮﺍﻋﺪ ﻟﻐﺘﻚ ﺍﻷﻡ ﺑﺸﻜﻞ‬
‫ﺃﻓﻀﻞ ‪،‬ﻛﺎﻥ ﻣﻦ ﺍﻷﺳﻬﻞ ﺗﻌﻠﻢ ﻟﻐﺔ ﺛﺎﻧﻴﺔ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﺗﻌﻠﻢ ﻟﻐﺔ ﺛﺎﻧﻴﺔ ﻟﻪ ﻓﺎﺉﺪﺓ‬
‫ﻓﻲﺗﻌﻠﻴﻤﻚ ﺍﻟﻤﺰﻳﺪ ﻋﻦ ﻟﻐﺘﻚ ﺍﻷﻭﻟﻰ‪.‬‬

‫ﻳﺼﺪﺭﻣﺠﺘﻤﻊ ﺑﺮﻣﺠﺔ ‪ TIOBE‬ﻓﻬﺮﺳﺎً )‪http: // www‬‬


‫(‪. tiobe.com/tiobe_index/index.htm‬ﻫﺬﺍ ﻣﺆﺷﺮ ﻋﻠﻰ ﺍﻟﺸﻌﺒﻴﺔ ﺍﻟﻨﺴﺒﻴﺔ ﻟﻠﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻭﻓﻘﺎً ﻟﻠﻔﻬﺮﺱ ‪ ،‬ﻛﺎﻧﺖ ‪ Java‬ﻭ ‪ C‬ﻭ ‪ ++ C‬ﻫﻲ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺜﻼﺙ‬
‫ﺍﻷﻛﺜﺮﺷﻴﻮﻋﺎً ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺃﻏﺴﻄﺲ ‪1.2011‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﺸﺮﺍﺕ ﻣﻦ‬
‫ﺍﻟﻠﻐﺎﺕﺍﻷﺧﺮﻯ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ‬

‫‪.1‬ﻻﺣﻆ ﺃﻥ ﻫﺬﺍ ﺍﻟﻔﻬﺮﺱ ﻫﻮ ﻣﻘﻴﺎﺱ ﻭﺍﺣﺪ ﻓﻘﻂ ﻟﺸﻌﺒﻴﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻭﺩﻗﺘﻪ ﻏﻴﺮ ﻣﻘﺒﻮﻟﺔ ﻋﺎﻟﻤﻴﺎً‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪4‬‬

‫ﺍﻟﻮﻗﺖ‪.‬ﺗﻈﻬﺮ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻔﻬﺮﺱ ﺃﻳﻀﺎً ﺃﻥ ﺗﻮﺯﻳﻊ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻳﺘﻐﻴﺮ ﺩﺍﺉﻤﺎً‪ .‬ﻳﺸﻴﺮ‬
‫ﻋﺪﺩﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻭﺍﻟﻄﺒﻴﻌﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﻟﻺﺣﺼﺎءﺍﺕ ﺇﻟﻰ ﺃﻥ ﻛﻞ ﻣﻄﻮﺭ ﺑﺮﺍﻣﺞ ﻳﺠﺐ‬
‫ﺃﻥﻳﻜﻮﻥ ﻣﺴﺘﻌﺪﺍً ﻟﺘﻌﻠﻢ ﻟﻐﺎﺕ ﻣﺨﺘﻠﻔﺔ‪.‬‬

‫ﺃﺧﻴﺮﺍً ‪،‬ﻣﻦ ﺍﻟﻀﺮﻭﺭﻱ ﺃﻥ ﻳﻌﺮﻑ ﺍﻟﻤﺒﺮﻣﺠﻮﻥ ﺍﻟﻤﻤﺎﺭﺳﻮﻥ ﺍﻟﻤﻔﺮﺩﺍﺕ ﻭﺍﻟﻤﻔﺎﻫﻴﻢ‬


‫ﺍﻷﺳﺎﺳﻴﺔﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺣﺘﻰ ﻳﺘﻤﻜﻨﻮﺍ ﻣﻦ ﻗﺮﺍءﺓ ﻭﻓﻬﻢ ﺃﻭﺻﺎﻑ ﻭﺗﻘﻴﻴﻤﺎﺕ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ‪،‬‬
‫ﻭﻛﺬﻟﻚﺍﻷﺩﺏ ﺍﻟﺘﺮﻭﻳﺠﻲ ﻟﻠﻐﺎﺕ ﻭﺍﻟﻤﺠﻤﻌﻴﻦ‪ .‬ﻫﺬﻩ ﻫﻲ ﻣﺼﺎﺩﺭ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺍﻟﻼﺯﻣﺔ ﻻﺧﺘﻴﺎﺭ‬
‫ﺍﻟﻠﻐﺔﻭﺗﻌﻠﻤﻬﺎ‪.‬‬

‫• ﻓﻬﻢﺃﻓﻀﻞ ﻷﻫﻤﻴﺔ ﺍﻟﺘﻨﻔﻴﺬ‪.‬ﻓﻲ ﺗﻌﻠﻢ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻣﻦ ﺍﻟﻤﺜﻴﺮ ﻟﻼﻫﺘﻤﺎﻡ‬
‫ﻭﺍﻟﻀﺮﻭﺭﻱﺃﻥ ﻧﺘﻄﺮﻕ ﺇﻟﻰ ﻗﻀﺎﻳﺎ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻰ ﺗﻠﻚ ﺍﻟﻤﻔﺎﻫﻴﻢ‪ .‬ﻓﻲ ﺑﻌﺾ‬
‫ﺍﻟﺤﺎﻻﺕ ‪،‬ﻳﺆﺩﻱ ﻓﻬﻢ ﻣﺸﻜﻼﺕ ﺍﻟﺘﻨﻔﻴﺬ ﺇﻟﻰ ﻓﻬﻢ ﺳﺒﺐ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺎﺕ ﺑﺎﻟﻄﺮﻳﻘﺔ ﺍﻟﺘﻲ ﻫﻲ‬
‫ﻋﻠﻴﻬﺎ‪.‬ﺑﺪﻭﺭﻫﺎ ‪ ،‬ﺗﺆﺩﻱ ﻫﺬﻩ ﺍﻟﻤﻌﺮﻓﺔ ﺇﻟﻰ ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺔ ﺑﺸﻜﻞ ﺃﻛﺜﺮ ﺫﻛﺎء ً‪،‬‬
‫ﺣﻴﺚﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ ﻻﺳﺘﺨﺪﺍﻣﻬﺎ‪ .‬ﻳﻤﻜﻨﻨﺎ ﺃﻥ ﻧﺼﺒﺢ ﻣﺒﺮﻣﺠﻴﻦ ﺃﻓﻀﻞ ﻣﻦ ﺧﻼﻝ ﻓﻬﻢ‬
‫ﺍﻟﺨﻴﺎﺭﺍﺕﺑﻴﻦ ﺗﺮﺍﻛﻴﺐ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻭﻋﻮﺍﻗﺐ ﺗﻠﻚ ﺍﻻﺧﺘﻴﺎﺭﺍﺕ‪.‬‬

‫ﻳﻤﻜﻦﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ ﺃﻧﻮﺍﻉ ﻣﻌﻴﻨﺔ ﻣﻦ ﺃﺧﻄﺎء ﺍﻟﺒﺮﺍﻣﺞ ﻭﺇﺻﻼﺣﻬﺎ ﻓﻘﻂ ﺑﻮﺍﺳﻄﺔ ﻣﺒﺮﻣﺞ‬
‫ﻳﻌﺮﻑﺑﻌﺾ ﺗﻔﺎﺻﻴﻞ ﺍﻟﺘﻨﻔﻴﺬ ﺫﺍﺕ ﺍﻟﺼﻠﺔ‪ .‬ﻓﺎﺉﺪﺓ ﺃﺧﺮﻯ ﻟﻔﻬﻢ ﻗﻀﺎﻳﺎ ﺍﻟﺘﻨﻔﻴﺬ ﻫﻲ ﺃﻧﻪ‬
‫ﻳﺴﻤﺢﻟﻨﺎ ﺑﺘﺼﻮﺭ ﻛﻴﻒ ﻳﻨﻔﺬ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﺮﺍﻛﻴﺐ ﻟﻐﻮﻳﺔ ﻣﺨﺘﻠﻔﺔ‪ .‬ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﺗﻮﻓﺮ‬
‫ﺑﻌﺾﺍﻟﻤﻌﺮﻓﺔ ﺑﻘﻀﺎﻳﺎ ﺍﻟﺘﻨﻔﻴﺬ ﺗﻠﻤﻴﺤﺎﺕ ﺣﻮﻝ ﺍﻟﻜﻔﺎءﺓ ﺍﻟﻨﺴﺒﻴﺔ ﻟﻠﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺒﺪﻳﻠﺔ ﺍﻟﺘﻲ‬
‫ﻳﻤﻜﻦﺍﺧﺘﻴﺎﺭﻫﺎ ﻟﻠﺒﺮﻧﺎﻣﺞ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻻ ﻳﺪﺭﻙ ﺍﻟﻤﺒﺮﻣﺠﻮﻥ ﺍﻟﺬﻳﻦ ﻳﻌﺮﻓﻮﻥ‬
‫ﺍﻟﻘﻠﻴﻞﻋﻦ ﺗﻌﻘﻴﺪ ﺗﻨﻔﻴﺬ ﻣﻜﺎﻟﻤﺎﺕ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺃﻥ ﺑﺮﻧﺎﻣﺠﺎً ﻓﺮﻋﻴﺎً ﺻﻐﻴﺮﺍً ﻳﺪُﻋﻰ ﻛﺜﻴﺮﺍً‬
‫ﻳﻤﻜﻦﺃﻥ ﻳﻜﻮﻥ ﺍﺧﺘﻴﺎﺭ ﺗﺼﻤﻴﻢ ﻏﻴﺮ ﻓﻌﺎﻝ ﻟﻠﻐﺎﻳﺔ‪.‬‬

‫ﻧﻈﺮﺍًﻷﻥ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﻻ ﻳﺘﻄﺮﻕ ﺇﻻ ﺇﻟﻰ ﻋﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﻗﻀﺎﻳﺎ ﺍﻟﺘﻨﻔﻴﺬ ‪ ،‬ﻓﺈﻥ ﺍﻟﻔﻘﺮﺗﻴﻦ‬
‫ﺍﻟﺴﺎﺑﻘﺘﻴﻦﺗﺨﺪﻣﺎﻥ ﺃﻳﻀﺎً ﺍﻷﺳﺎﺱ ﺍﻟﻤﻨﻄﻘﻲ ﻟﺪﺭﺍﺳﺔ ﺗﺼﻤﻴﻢ ﺍﻟﻤﺘﺮﺟﻢ‪.‬‬

‫• ﺍﺳﺘﺨﺪﺍﻡﺃﻓﻀﻞ ﻟﻠﻐﺎﺕ ﺍﻟﻤﻌﺮﻭﻓﺔ ﺑﺎﻟﻔﻌﻞ‪.‬ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻌﺎﺻﺮﺓ ﻛﺒﻴﺮﺓ‬


‫ﻭﻣﻌﻘﺪﺓ‪.‬ﻭﻓﻘﺎً ﻟﺬﻟﻚ ‪ ،‬ﻣﻦ ﻏﻴﺮ ﺍﻟﻤﺄﻟﻮﻑ ﺃﻥ ﻳﻜﻮﻥ ﺍﻟﻤﺒﺮﻣﺞ ﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺑﺠﻤﻴﻊ ﻣﻴﺰﺍﺕ ﺍﻟﻠﻐﺔ‬
‫ﺍﻟﺘﻲﻳﺴﺘﺨﺪﻣﻬﺎ ﻭﻳﺴﺘﺨﺪﻣﻬﺎ‪ .‬ﻣﻦ ﺧﻼﻝ ﺩﺭﺍﺳﺔ ﻣﻔﺎﻫﻴﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻳﻤﻜﻦ‬
‫ﻟﻠﻤﺒﺮﻣﺠﻴﻦﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻷﺟﺰﺍء ﻏﻴﺮ ﺍﻟﻤﻌﺮﻭﻓﺔ ﻭﻏﻴﺮ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﺳﺎﺑﻘﺎً ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ‬
‫ﻳﺴﺘﺨﺪﻣﻮﻧﻬﺎﺑﺎﻟﻔﻌﻞ ﻭﺍﻟﺒﺪء ﻓﻲ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﻟﻤﻴﺰﺍﺕ‪.‬‬

‫• ﺍﻟﺘﻘﺪﻡﺍﻟﺸﺎﻣﻞ ﻟﻠﺤﻮﺳﺒﺔ‪.‬ﺃﺧﻴﺮﺍً ‪ ،‬ﻫﻨﺎﻙ ﺭﺅﻳﺔ ﻋﺎﻟﻤﻴﺔ ﻟﻠﺤﻮﺳﺒﺔ ﻳﻤﻜﻦ ﺃﻥ ﺗﺒﺮﺭ ﺩﺭﺍﺳﺔ‬


‫ﻣﻔﺎﻫﻴﻢﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﻋﺎﺩﺓ ًﺗﺤﺪﻳﺪ ﺳﺒﺐ ﺍﻧﺘﺸﺎﺭ ﻟﻐﺔ‬
‫ﺑﺮﻣﺠﺔﻣﻌﻴﻨﺔ ‪ ،‬ﻳﻌﺘﻘﺪ ﺍﻟﻜﺜﻴﺮﻭﻥ ‪ ،‬ﻋﻠﻰ ﺍﻷﻗﻞ ﻓﻲ ﻭﻗﺖ ﻻﺣﻖ ‪ ،‬ﺃﻥ ﺍﻟﻠﻐﺎﺕ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً‬
‫ﻟﻴﺴﺖﺩﺍﺉﻤﺎً ﺃﻓﻀﻞ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺘﺎﺣﺔ‪ .‬ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻗﺪ ﻧﺴﺘﻨﺘﺞ ﺃﻥ ﺍﻟﻠﻐﺔ ﺃﺻﺒﺤﺖ‬
‫ﻣﺴﺘﺨﺪﻣﺔﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ‪ ،‬ﻋﻠﻰ ﺍﻷﻗﻞ ﺟﺰﺉﻴﺎً ‪ ،‬ﻷﻥ ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻓﻲ ﻣﻮﺍﻗﻊ ﻻﺧﺘﻴﺎﺭ‬
‫ﺍﻟﻠﻐﺎﺕﻟﻢ ﻳﻜﻮﻧﻮﺍ ﻋﻠﻰ ﺩﺭﺍﻳﺔ ﻛﺎﻓﻴﺔ ﺑﻤﻔﺎﻫﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻌﺘﻘﺪ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺍﻟﻨﺎﺱ ﺃﻧﻪ ﻛﺎﻥ ﻣﻦ ﺍﻷﻓﻀﻞ ﻟﻮ ﺃﻥ ‪) ALGOL 60‬‬
‫ﺑﺎﻛﻮﺱﻭﺁﺧﺮﻭﻥ ‪ (1963 ،‬ﻗﺪ ﺃﺯﺍﺡ ﻓﻮﺭﺗﺮﺍﻥ )ﻣﻴﺘﻜﺎﻟﻒ ﻭﺁﺧﺮﻭﻥ ‪ (2004 ،‬ﻓﻲ‬
‫‪5‬‬ ‫‪1.2‬ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ‬

‫ﻓﻲﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ‪ ،‬ﻷﻧﻬﺎ ﻛﺎﻧﺖ ﺃﻛﺜﺮ ﺃﻧﺎﻗﺔ ﻭﻛﺎﻥ ﻟﺪﻳﻬﺎ ﺑﻴﺎﻧﺎﺕ ﺗﺤﻜﻢ ﺃﻓﻀﻞ ﺑﻜﺜﻴﺮ ‪ ،‬ﻣﻦ‬
‫ﺑﻴﻦﺃﺳﺒﺎﺏ ﺃﺧﺮﻯ‪ .‬ﻳﺮﺟﻊ ﺫﻟﻚ ﺟﺰﺉﻴﺎً ﺇﻟﻰ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻭﻣﺪﻳﺮﻱ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻓﻲ ﺫﻟﻚ‬
‫ﺍﻟﻮﻗﺖ ‪،‬ﻭﻛﺜﻴﺮ ﻣﻨﻬﻢ ﻟﻢ ﻳﻔﻬﻢ ﺑﻮﺿﻮﺡ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﻔﺎﻫﻴﻤﻲ ﻟـ ‪ .ALGOL 60‬ﻟﻘﺪ ﻭﺟﺪﻭﺍ‬
‫ﻭﺻﻔﻪﺻﻌﺐ ﺍﻟﻘﺮﺍءﺓ )ﻭﻫﻮ ﻣﺎ ﻛﺎﻥ ﻋﻠﻴﻪ( ﻭﺣﺘﻰ ﺃﻛﺜﺮ ﺻﻌﻮﺑﺔ ﻓﻲ ﺍﻟﻘﺮﺍءﺓ‪ .‬ﻳﻔﻬﻢ‪ .‬ﻟﻢ ﻳﻘﺪﺭﻭﺍ‬
‫ﻓﻮﺍﺉﺪﺑﻨﻴﺔ ﺍﻟﻜﺘﻠﺔ ‪ ،‬ﻭﺍﻟﺘﻜﺮﺍﺭ ‪ ،‬ﻭﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﻤﻨﻈﻤﺔ ﺟﻴﺪﺍً ‪ ،‬ﻟﺬﻟﻚ ﻓﺸﻠﻮﺍ ﻓﻲ ﺭﺅﻳﺔ‬
‫ﻓﻮﺍﺉﺪ‪ ALGOL 60‬ﻋﻠﻰ ‪.Fortran‬‬

‫ﺑﺎﻟﻄﺒﻊ ‪،‬ﺳﺎﻫﻤﺖ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻌﻮﺍﻣﻞ ﺍﻷﺧﺮﻯ ﻓﻲ ﻋﺪﻡ ﻗﺒﻮﻝ ‪ ، ALGOL 60‬ﻛﻤﺎ‬


‫ﺳﻨﺮﻯﻓﻲ ﺍﻟﻔﺼﻞ ‪ .2‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﺣﻘﻴﻘﺔ ﺃﻥ ﻣﺴﺘﺨﺪﻣﻲ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻛﺎﻧﻮﺍ ﻋﻤﻮﻣﺎً ﻏﻴﺮ‬
‫ﻣﺪﺭﻛﻴﻦﻟﻔﻮﺍﺉﺪ ﺍﻟﻠﻐﺔ ﻟﻌﺒﺖ ﺩﻭﺭﺍً ﻣﻬﻤﺎً‪.‬‬

‫ﺑﺸﻜﻞﻋﺎﻡ ‪ ،‬ﺇﺫﺍ ﻛﺎﻥ ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻳﺨﺘﺎﺭﻭﻥ ﺍﻟﻠﻐﺎﺕ ﻋﻠﻰ ﺩﺭﺍﻳﺔ ﺟﻴﺪﺓ ‪ ،‬ﻓﺮﺑﻤﺎ ﺗﻀﻐﻂ‬
‫ﺍﻟﻠﻐﺎﺕﺍﻷﻓﻀﻞ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ﻋﻠﻰ ﺍﻟﻠﻐﺎﺕ ﺍﻷﻓﻘﺮ‪.‬‬

‫‪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.3‬ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ‬


‫ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ‪ ،‬ﻓﺈﻥ ﺍﻟﻐﺮﺽ ﻣﻦ ﻫﺬﺍ ﺍﻟﻜﺘﺎﺏ ﻫﻮ ﺍﻟﻔﺤﺺ ﺍﻟﺪﻗﻴﻖ ﻟﻠﻤﻔﺎﻫﻴﻢ ﺍﻷﺳﺎﺳﻴﺔ‬
‫ﻟﻠﺘﺮﻛﻴﺒﺎﺕﻭﺍﻟﻘﺪﺭﺍﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﺳﻨﻘﻮﻡ ﺃﻳﻀﺎً ﺑﺘﻘﻴﻴﻢ ﻫﺬﻩ ﺍﻟﻤﻴﺰﺍﺕ ‪ ،‬ﻣﻊ ﺍﻟﺘﺮﻛﻴﺰ‬
‫ﻋﻠﻰﺗﺄﺛﻴﺮﻫﺎ ﻋﻠﻰ ﻋﻤﻠﻴﺔ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﺼﻴﺎﻧﺔ‪ .‬ﻟﻠﻘﻴﺎﻡ ﺑﺬﻟﻚ ‪ ،‬ﻧﺤﺘﺎﺝ ﺇﻟﻰ‬
‫ﻣﺠﻤﻮﻋﺔﻣﻦ ﻣﻌﺎﻳﻴﺮ ﺍﻟﺘﻘﻴﻴﻢ‪ .‬ﻗﺎﺉﻤﺔ ﺍﻟﻤﻌﺎﻳﻴﺮ ﻫﺬﻩ ﻣﺜﻴﺮﺓ ﻟﻠﺠﺪﻝ ﺑﺎﻟﻀﺮﻭﺭﺓ ‪ ،‬ﻷﻧﻪ ﻣﻦ ﺍﻟﺼﻌﺐ‬
‫ﺇﻗﻨﺎﻉﺍﺛﻨﻴﻦ ﻣﻦ ﻋﻠﻤﺎء ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻋﻠﻰ ﻗﻴﻤﺔ ﺑﻌﺾ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﻠﻐﻮﻳﺔ ﺍﻟﻤﻌﻴﻨﺔ ﺑﺎﻟﻨﺴﺒﺔ‬
‫ﻟﻶﺧﺮﻳﻦ‪.‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﻫﺬﻩ ﺍﻻﺧﺘﻼﻓﺎﺕ ‪ ،‬ﻳﺘﻔﻖ ﻣﻌﻈﻤﻬﻢ ﻋﻠﻰ ﺃﻥ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﺘﻲ ﺗﻤﺖ‬
‫ﻣﻨﺎﻗﺸﺘﻬﺎﻓﻲ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻣﻬﻤﺔ‪.‬‬

‫ﺑﻌﺾﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻰ ﺛﻼﺛﺔ ﻣﻦ ﺍﻷﺭﺑﻌﺔ ﺍﻷﻛﺜﺮ ﺃﻫﻤﻴﺔ ﻣﻦ ﻫﺬﻩ ﺍﻟﻤﻌﺎﻳﻴﺮ‬
‫ﻣﻮﺿﺤﺔﻓﻲ ﺍﻟﺠﺪﻭﻝ ‪ ، 1.1‬ﻭﺍﻟﻤﻌﺎﻳﻴﺮ ﻧﻔﺴﻬﺎ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻷﻗﺴﺎﻡ ﺍﻟﺘﺎﻟﻴﺔ‪2.‬ﻻﺣﻆ ﺃﻧﻪ ﺗﻢ‬
‫ﺗﻀﻤﻴﻦﺃﻫﻢ ﺍﻟﺨﺼﺎﺉﺺ ﻓﻘﻂ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ‪ ،‬ﻣﻤﺎ ﻳﻌﻜﺲ ﺍﻟﻤﻨﺎﻗﺸﺔ ﻓﻲ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ‬
‫ﺍﻟﺘﺎﻟﻴﺔ‪.‬ﺭﺑﻤﺎ ﻳﻤﻜﻦ ﻟﻠﻤﺮء ﺃﻥ ﻳﺪﻋﻲ ﺃﻧﻪ ﺇﺫﺍ ﺍﻋﺘﺒﺮ ﺍﻟﻤﺮء ﺧﺼﺎﺉﺺ ﺃﻗﻞ ﺃﻫﻤﻴﺔ ‪ ،‬ﻓﻴﻤﻜﻦ ﺃﻥ‬
‫ﺗﺸﺘﻤﻞﺟﻤﻴﻊ ﻣﻮﺍﺿﻊ ﺍﻟﺠﺪﻭﻝ ﺗﻘﺮﻳﺒﺎً ﻋﻠﻰ "ﺗﻌﺪﺍﺩ ﻧﻘﻄﻲ"‪.‬‬

‫ﻻﺣﻆﺃﻥ ﺑﻌﺾ ﻫﺬﻩ ﺍﻟﺨﺼﺎﺉﺺ ﻭﺍﺳﻌﺔ ﻭﻏﺎﻣﻀﺔ ﺇﻟﻰ ﺣﺪ ﻣﺎ ‪ ،‬ﻣﺜﻞ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ‪ ،‬ﻓﻲ‬
‫ﺣﻴﻦﺃﻥ ﺍﻟﺒﻌﺾ ﺍﻵﺧﺮ ﻋﺒﺎﺭﺓ ﻋﻦ ﺗﺮﺍﻛﻴﺐ ﻟﻐﻮﻳﺔ ﻣﺤﺪﺩﺓ ‪ ،‬ﻣﺜﻞ ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ‬
‫ﺫﻟﻚ ‪،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻤﻨﺎﻗﺸﺔ ﻗﺪ ﺗﺒﺪﻭ ﻭﻛﺄﻧﻬﺎ ﺗﻮﺣﻲ ﺑﺄﻥ ﺍﻟﻤﻌﺎﻳﻴﺮ ﻟﻬﺎ ﺃﻫﻤﻴﺔ ﻣﺘﺴﺎﻭﻳﺔ ‪،‬‬
‫ﻓﺈﻥﻫﺬﺍ ﺍﻟﻤﻌﻨﻰ ﻏﻴﺮ ﻣﻘﺼﻮﺩ ‪ ،‬ﻭﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﺍﻷﻣﺮ ﻟﻴﺲ ﻛﺬﻟﻚ‪.‬‬

‫‪.2‬ﺍﻟﻤﻌﻴﺎﺭ ﺍﻷﺳﺎﺳﻲ ﺍﻟﺮﺍﺑﻊ ﻫﻮ ﺍﻟﺘﻜﻠﻔﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﻟﻢ ﻳﺘﻢ ﺗﻀﻤﻴﻨﻬﺎ ﻓﻲ ﺍﻟﺠﺪﻭﻝ ﻷﻧﻬﺎ ﻣﺮﺗﺒﻄﺔ ﺑﺸﻜﻞ ﻃﻔﻴﻒ ﻓﻘﻂ‬
‫ﺑﺎﻟﻤﻌﺎﻳﻴﺮﺍﻷﺧﺮﻯ ﻭﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻴﻬﺎ‪.‬‬
‫ﻣﻘﺪﻣﺎﺕ‬ ‫ﺍﻟﻔﺼﻞ‪1‬‬ ‫‪8‬‬

‫ﻣﻌﺎﻳﻴﺮﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ ﻭﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺘﻲ ﺗﺆﺛﺮ ﻋﻠﻴﻬﺎ‬ ‫ﺍﻟﺠﺪﻭﻝ‪1.1‬‬

‫ﻣﻌﺎﻳﻴﺮ‬

‫ﻣﺼﺪﺍﻗﻴﺔ‬ ‫ﺍﻟﻜﺘﺎﺑﺔ‬ ‫ﻣﻘﺮﻭﺉﻴﺔ‬ ‫ﺻﻔﺔﻣﻤﻴﺰﺓ‬


‫•‬ ‫•‬ ‫•‬ ‫ﺑﺴﺎﻃﺔ‬
‫•‬ ‫•‬ ‫•‬ ‫ﺍﻟﺘﻌﺎﻣﺪ‬
‫•‬ ‫•‬ ‫•‬ ‫ﺃﻧﻮﺍﻉﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫•‬ ‫•‬ ‫•‬ ‫ﺍﻟﺘﺼﻤﻴﻢﺍﻟﻨﺤﻮﻱ‬
‫•‬ ‫•‬ ‫ﺩﻋﻢﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﺘﺠﺮﻳﺪﻱ‬
‫•‬ ‫•‬
‫•‬ ‫ﻓﺤﺺﺍﻟﻨﻮﻉ‬
‫•‬ ‫ﻣﻌﺎﻟﺠﺔﺍﻻﺳﺘﺜﻨﺎء‬
‫•‬ ‫ﺍﻟﺘﻌﺮﺝﺍﻟﻤﻘﻴﺪ‬

‫‪1.3.1‬ﺳﻬﻮﻟﺔ ﺍﻟﻘﺮﺍءﺓ‬
‫ﺃﺣﺪﺃﻫﻢ ﻣﻌﺎﻳﻴﺮ ﺍﻟﺤﻜﻢ ﻋﻠﻰ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻮ ﺳﻬﻮﻟﺔ ﻗﺮﺍءﺓ ﺍﻟﺒﺮﺍﻣﺞ ﻭﻓﻬﻤﻬﺎ‪ .‬ﻗﺒﻞ ﻋﺎﻡ ‪، 1970‬‬
‫ﻛﺎﻥﻳﺘﻢ ﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻣﻦ ﺣﻴﺚ ﻛﺘﺎﺑﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ‪.‬‬
‫ﻛﺎﻧﺖﺍﻟﺴﻤﺔ ﺍﻹﻳﺠﺎﺑﻴﺔ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﺍﻟﻜﻔﺎءﺓ‪ .‬ﺗﻢ ﺗﺼﻤﻴﻢ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ ﻣﻦ‬
‫ﻭﺟﻬﺔﻧﻈﺮ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺃﻛﺜﺮ ﻣﻦ ﻭﺟﻬﺔ ﻧﻈﺮ ﻣﺴﺘﺨﺪﻣﻲ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﻭﻟﻜﻦ ﻓﻲ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪ ،‬ﺗﻢ‬
‫ﺗﻄﻮﻳﺮﻣﻔﻬﻮﻡ ﺩﻭﺭﺓ ﺣﻴﺎﺓ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ )‪ .(Booch ، 1987‬ﺗﻢ ﻧﻘﻞ ﺍﻟﺘﺮﻣﻴﺰ ﺇﻟﻰ ﺩﻭﺭ ﺃﺻﻐﺮ ﺑﻜﺜﻴﺮ ‪،‬‬
‫ﻭﺗﻢﺍﻻﻋﺘﺮﺍﻑ ﺑﺎﻟﺼﻴﺎﻧﺔ ﻛﺠﺰء ﺭﺉﻴﺴﻲ ﻣﻦ ﺍﻟﺪﻭﺭﺓ ‪ ،‬ﻻ ﺳﻴﻤﺎ ﻣﻦ ﺣﻴﺚ ﺍﻟﺘﻜﻠﻔﺔ‪ .‬ﻧﻈﺮﺍً ﻷﻥ‬
‫ﺳﻬﻮﻟﺔﺍﻟﺼﻴﺎﻧﺔ ﻳﺘﻢ ﺗﺤﺪﻳﺪﻫﺎ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻣﻦ ﺧﻼﻝ ﺳﻬﻮﻟﺔ ﻗﺮﺍءﺓ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﻓﻘﺪ ﺃﺻﺒﺤﺖ‬
‫ﻗﺎﺑﻠﻴﺔﺍﻟﻘﺮﺍءﺓ ﻣﻘﻴﺎﺳﺎً ﻣﻬﻤﺎً ﻟﺠﻮﺩﺓ ﺍﻟﺒﺮﺍﻣﺞ ﻭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻛﺎﻥ ﻫﺬﺍ ﻣﻨﻌﻄﻔﺎً ﻣﻬﻤﺎً ﻓﻲ ﺗﻄﻮﺭ‬
‫ﻟﻐﺎﺕﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻛﺎﻥ ﻫﻨﺎﻙ ﺗﻘﺎﻃﻊ ﻣﻤﻴﺰ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺰ ﻋﻠﻰ ﺗﻮﺟﻴﻪ ﺍﻵﻟﺔ ﺇﻟﻰ ﺍﻟﺘﺮﻛﻴﺰ ﻋﻠﻰ ﺍﻟﺘﻮﺟﻪ‬
‫ﺍﻟﺒﺸﺮﻱ‪.‬‬

‫ﻳﺠﺐﺍﻟﻨﻈﺮ ﻓﻲ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻓﻲ ﺳﻴﺎﻕ ﻣﺠﺎﻝ ﺍﻟﻤﺸﻜﻠﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺇﺫﺍ ﻛﺎﻥ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﺍﻟﺬﻱ ﻳﺼﻒ ﻋﻤﻠﻴﺔ ﺣﺴﺎﺑﻴﺔ ﻣﻜﺘﻮﺑﺎً ﺑﻠﻐﺔ ﻏﻴﺮ ﻣﺼﻤﻤﺔ ﻟﻬﺬﺍ ﺍﻻﺳﺘﺨﺪﺍﻡ ‪ ،‬ﻓﻘﺪ ﻳﻜﻮﻥ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﻏﻴﺮ ﻃﺒﻴﻌﻲ ﻭﻣﻌﻘﺪﺍً ‪ ،‬ﻣﻤﺎ ﻳﺠﻌﻞ ﻗﺮﺍءﺗﻪ ﺻﻌﺒﺔ ﺑﺸﻜﻞ ﻏﻴﺮ ﻋﺎﺩﻱ‪.‬‬

‫ﺗﺼﻒﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺘﻲ ﺗﺴﺎﻫﻢ ﻓﻲ ﺳﻬﻮﻟﺔ ﻗﺮﺍءﺓ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪1.3.1.1‬ﺍﻟﺒﺴﺎﻃﺔ ﺍﻟﺸﺎﻣﻠﺔ‬
‫ﺗﺆﺛﺮﺍﻟﺒﺴﺎﻃﺔ ﺍﻟﻜﻠﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺑﺸﺪﺓ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺘﻬﺎ ﻟﻠﻘﺮﺍءﺓ‪ .‬ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ‬
‫ﻣﻦﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻫﻲ ﺃﻛﺜﺮ ﺻﻌﻮﺑﺔ ﻓﻲ ﺍﻟﺘﻌﻠﻢ ﻣﻦ ﻟﻐﺔ ﺫﺍﺕ ﻋﺪﺩ ﺃﻗﻞ‪ .‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻌﻠﻢ‬
‫ﺍﻟﻤﺒﺮﻣﺠﻮﻥﺍﻟﺬﻳﻦ ﻳﺠﺐ ﻋﻠﻴﻬﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ﻛﺒﻴﺮﺓ ﻣﺠﻤﻮﻋﺔ ﻓﺮﻋﻴﺔ ﻣﻦ ﺍﻟﻠﻐﺔ ﻭﻳﺘﺠﺎﻫﻠﻮﻥ‬
‫ﻣﻴﺰﺍﺗﻬﺎﺍﻷﺧﺮﻯ‪ .‬ﻳﺴﺘﺨﺪﻡ ﻧﻤﻂ ﺍﻟﺘﻌﻠﻢ ﻫﺬﺍ ﺃﺣﻴﺎﻧﺎً ﻹﻋﻔﺎء ﺍﻟﻌﺪﺩ ﺍﻟﻜﺒﻴﺮ ﻣﻦ ﺗﺮﺍﻛﻴﺐ ﺍﻟﻠﻐﺔ ‪،‬‬
‫‪9‬‬ ‫‪1.3‬ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ‬

‫ﻟﻜﻦﻫﺬﻩ ﺍﻟﺤﺠﺔ ﻏﻴﺮ ﺻﺤﻴﺤﺔ‪ .‬ﺗﺤﺪﺙ ﻣﺸﻜﻼﺕ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻋﻨﺪﻣﺎ ﻳﺘﻌﻠﻢ ﻣﺆﻟﻒ ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﻣﺠﻤﻮﻋﺔﻓﺮﻋﻴﺔ ﻣﺨﺘﻠﻔﺔ ﻣﻦ ﺗﻠﻚ ﺍﻟﻤﺠﻤﻮﻋﺔ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﻲ ﻳﻌﺮﻓﻬﺎ ﺍﻟﻘﺎﺭﺉ‪.‬‬

‫ﺍﻟﺴﻤﺔﺍﻟﺜﺎﻧﻴﺔ ﺍﻟﻤﻌﻘﺪﺓ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲﺗﻌﺪﺩ ﺍﻟﻤﻴﺰﺍﺕ‪ -‬ﺃﻱ ﺃﻥ ﻳﻜﻮﻥ ﻟﺪﻳﻚ ﺃﻛﺜﺮ ﻣﻦ‬
‫ﻃﺮﻳﻘﺔﻹﻧﺠﺎﺯ ﻋﻤﻠﻴﺔ ﻣﻌﻴﻨﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻓﻲ ‪ ، Java‬ﻳﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺯﻳﺎﺩﺓ ﻣﺘﻐﻴﺮ‬
‫ﻋﺪﺩﺻﺤﻴﺢ ﺑﺴﻴﻂ ﺑﺄﺭﺑﻊ ﻃﺮﻕ ﻣﺨﺘﻠﻔﺔ‪:‬‬

‫ﺍﻟﻌﺪ= ﺍﻟﻌﺪ ‪ 1 +‬ﻋﺪﺩ ‪1 = +‬‬

‫ﺍﻟﻌﺪ‪++‬‬
‫‪ + +‬ﺍﻟﻌﺪ‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻌﺒﺎﺭﺗﻴﻦ ﺍﻷﺧﻴﺮﻳﻦ ﻟﻬﻤﺎ ﻣﻌﺎﻧﻲ ﻣﺨﺘﻠﻔﺔ ﻗﻠﻴﻼ ًﻋﻦ ﺑﻌﻀﻬﻤﺎ ﺍﻟﺒﻌﺾ ﻭﻋﻦ‬
‫ﺍﻵﺧﺮﻳﻦﻓﻲ ﺑﻌﺾ ﺍﻟﺴﻴﺎﻗﺎﺕ ‪ ،‬ﺇﻻ ﺃﻥ ﻛﻞ ﻣﻨﻬﻤﺎ ﻟﻬﺎ ﻧﻔﺲ ﺍﻟﻤﻌﻨﻰ ﻋﻨﺪ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻛﺘﻌﺒﻴﺮﺍﺕ‬
‫ﻗﺎﺉﻤﺔﺑﺬﺍﺗﻬﺎ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻫﺬﻩ ﺍﻻﺧﺘﻼﻓﺎﺕ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.7‬‬

‫ﺍﻟﻤﺸﻜﻠﺔﺍﻟﺜﺎﻟﺜﺔ ﺍﻟﻤﺤﺘﻤﻠﺔ ﻫﻲﺍﻟﻤﺸﻐﻞ ﺍﻟﺰﺍﺉﺪ‪ ،‬ﺣﻴﺚ ﻳﻜﻮﻥ ﻟﺮﻣﺰ ﻋﺎﻣﻞ ﻭﺍﺣﺪ ﺃﻛﺜﺮ ﻣﻦ‬
‫ﻣﻌﻨﻰ‪.‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻜﻮﻥ ﻣﻔﻴﺪﺍً ‪ ،‬ﺇﻻ ﺃﻧﻪ ﻳﻤﻜﻦ ﺃﻥ ﻳﺆﺩﻱ ﺇﻟﻰ ﺗﻘﻠﻴﻞ ﻗﺎﺑﻠﻴﺔ‬
‫ﺍﻟﻘﺮﺍءﺓﺇﺫﺍ ﺳﻤُﺢ ﻟﻠﻤﺴﺘﺨﺪﻣﻴﻦ ﺑﺈﻧﺸﺎء ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ ﺍﻟﺨﺎﺹ ﺑﻬﻢ ﻭﻋﺪﻡ ﺍﻟﻘﻴﺎﻡ ﺑﺬﻟﻚ ﺑﺸﻜﻞ‬
‫ﻣﻌﻘﻮﻝ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ ﻣﻦ ﺍﻟﻤﻘﺒﻮﻝ ﺍﺳﺘﺨﺪﺍﻡ ‪ + overload‬ﻻﺳﺘﺨﺪﺍﻣﻪ‬
‫ﻓﻲﻛﻞ ﻣﻦ ﺟﻤﻊ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﻭﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻫﺬﺍ ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ‬
‫ﻳﺒﺴﻂﺍﻟﻠﻐﺔ ﻋﻦ ﻃﺮﻳﻖ ﺗﻘﻠﻴﻞ ﻋﺪﺩ ﺍﻟﻤﺸﻐﻠﻴﻦ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺍﻓﺘﺮﺽ ﺃﻥ ﺍﻟﻤﺒﺮﻣﺞ ﻣﻌﺮﻑ ‪+‬‬
‫ﻣﺴﺘﺨﺪﻡﺑﻴﻦ ﻣﻌﺎﻣﻼﺕ ﺍﻟﻤﺼﻔﻮﻓﺔ ﺃﺣﺎﺩﻳﺔ ﺍﻟﺒﻌﺪ ﻟﻴﻌﻨﻲ ﻣﺠﻤﻮﻉ ﻛﻞ ﻋﻨﺎﺻﺮ ﻛﻼ ﺍﻟﻤﺼﻔﻮﻓﺘﻴﻦ‪.‬‬
‫ﻧﻈﺮﺍًﻷﻥ ﺍﻟﻤﻌﻨﻰ ﺍﻟﻤﻌﺘﺎﺩ ﻹﺿﺎﻓﺔ ﺍﻟﻤﺘﺠﻪ ﻳﺨﺘﻠﻒ ﺗﻤﺎﻣﺎً ﻋﻦ ﻫﺬﺍ ‪ ،‬ﻓﺈﻧﻪ ﺳﻴﺠﻌﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺃﻛﺜﺮ‬
‫ﺇﺭﺑﺎﻛﺎًﻟﻜﻞ ﻣﻦ ﺍﻟﻤﺆﻟﻒ ﻭﻗﺮﺍء ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﺃﺣﺪ ﺍﻷﻣﺜﻠﺔ ﺍﻷﻛﺜﺮ ﺗﻄﺮﻓﺎً ﻋﻠﻰ ﺍﺭﺗﺒﺎﻙ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻫﻮ ﻗﻴﺎﻡ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻡﺑﺘﻌﺮﻳﻒ ‪ +‬ﺑﻴﻦ ﻣﻌﺎﻣﻠﻴﻦ ﻣﺘﺠﻬﻴﻦ ﻟﻴﻌﻨﻲ ﺍﻟﻔﺮﻕ ﺑﻴﻦ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻷﻭﻟﻰ ﻟﻜﻞ ﻣﻨﻬﻤﺎ‪.‬‬
‫ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﺍﻟﺤﻤﻞ ﺍﻟﺰﺍﺉﺪ ﻟﻠﻤﺸﻐﻞ ﺑﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.7‬‬

‫ﺍﻟﺒﺴﺎﻃﺔﻓﻲ ﺍﻟﻠﻐﺎﺕ ﻳﻤﻜﻦ ﺑﺎﻟﻄﺒﻊ ﺗﺠﺎﻭﺯﻫﺎ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻌﺘﺒﺮ ﺷﻜﻞ ﻭﻣﻌﻨﻰ‬
‫ﻣﻌﻈﻢﻋﺒﺎﺭﺍﺕ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻧﻤﺎﺫﺝ ﻣﻦ ﺍﻟﺒﺴﺎﻃﺔ ‪ ،‬ﻛﻤﺎ ﺗﺮﻯ ﻋﻨﺪﻣﺎ ﺗﻔﻜﺮ ﻓﻲ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﺘﻲ‬
‫ﺗﻈﻬﺮﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻟﺘﺎﻟﻲ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﻫﺬﻩ ﺍﻟﺒﺴﺎﻃﺔ ﺗﺠﻌﻞ ﺑﺮﺍﻣﺞ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﺃﻗﻞ ﻗﺎﺑﻠﻴﺔ‬
‫ﻟﻠﻘﺮﺍءﺓ‪.‬ﻷﻧﻬﺎ ﺗﻔﺘﻘﺮ ﺇﻟﻰ ﺑﻴﺎﻧﺎﺕ ﺗﺤﻜﻢ ﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ‪ ،‬ﻓﺈﻥ ﻫﻴﻜﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺃﻗﻞ ﻭﺿﻮﺣﺎً ؛ ﻷﻥ‬
‫ﺍﻟﻌﺒﺎﺭﺍﺕﺑﺴﻴﻄﺔ ‪ ،‬ﻫﻨﺎﻙ ﺣﺎﺟﺔ ﺇﻟﻰ ﻋﺪﺩ ﺃﻛﺒﺮ ﻣﻨﻬﺎ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻤﺎﺛﻠﺔ ﺑﻠﻐﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ‪.‬‬
‫ﺗﻨﻄﺒﻖﻫﺬﻩ ﺍﻟﺤﺠﺞ ﻧﻔﺴﻬﺎ ﻋﻠﻰ ﺍﻟﺤﺎﻟﺔ ﺍﻷﻗﻞ ﺗﻄﺮﻓﺎً ﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻣﻊ ﻋﺪﻡ ﻛﻔﺎﻳﺔ‬
‫ﻋﻨﺎﺻﺮﺍﻟﺘﺤﻜﻢ ﻭﻫﻴﻜﻠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬‬

‫‪1.3.1.2‬ﺍﻟﺘﻌﺎﻣﺪ‬
‫ﺍﻟﺘﻌﺎﻣﺪﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﺩﻣﺞ ﻣﺠﻤﻮﻋﺔ ﺻﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ‬
‫ﻓﻲﻋﺪﺩ ﺻﻐﻴﺮ ﻧﺴﺒﻴﺎً ﻣﻦ ﺍﻟﻄﺮﻕ ﻟﺒﻨﺎء ﻫﻴﺎﻛﻞ ﺍﻟﺘﺤﻜﻢ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﻠﻐﺔ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ‬
‫ﺫﻟﻚ ‪،‬ﻛﻞ ﻣﺠﻤﻮﻋﺔ ﻣﻤﻜﻨﺔ ﻣﻦ ﺍﻷﻭﻟﻴﺎﺕ ﻗﺎﻧﻮﻧﻴﺔ ﻭﺫﺍﺕ ﻣﻐﺰﻯ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺿﻊ ﻓﻲ‬
‫ﺍﻋﺘﺒﺎﺭﻙ‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪10‬‬

‫ﺃﻧﻮﺍﻉﺍﻟﺒﻴﺎﻧﺎﺕ‪ .‬ﻟﻨﻔﺘﺮﺽ ﺃﻥ ﺍﻟﻠﻐﺔ ﺑﻬﺎ ﺃﺭﺑﻌﺔ ﺃﻧﻮﺍﻉ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ )ﻋﺪﺩ ﺻﺤﻴﺢ ‪ ،‬ﻋﺪﺩ‬
‫ﻋﺸﺮﻱ ‪،‬ﻣﺰﺩﻭﺝ ‪ ،‬ﻭﺣﺮﻑ( ﻭﻋﺎﻣﻼﻥ ﻣﻦ ﺍﻟﻨﻮﻉ )ﻣﺼﻔﻮﻓﺔ ﻭﻣﺆﺷﺮ(‪ .‬ﺇﺫﺍ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺗﻄﺒﻴﻖ‬
‫ﻣﺸﻐﻠﻲﺍﻟﻨﻮﻋﻴﻦ ﻋﻠﻰ ﺃﻧﻔﺴﻬﻢ ﻭﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻷﻭﻟﻴﺔ ﺍﻷﺭﺑﻌﺔ ‪ ،‬ﻓﻴﻤﻜﻦ ﺗﺤﺪﻳﺪ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ‬
‫ﻫﻴﺎﻛﻞﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬‬
‫ﻣﻌﻨﻰﻣﻴﺰﺓ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺘﻌﺎﻣﺪﺓ ﻣﺴﺘﻘﻠﺔ ﻋﻦ ﺳﻴﺎﻕ ﻇﻬﻮﺭﻫﺎ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ‪) .‬ﺍﻟﻜﻠﻤﺔﻣﺘﻌﺎﻣﺪﻳﺄﺗﻲ‬
‫ﻣﻦﺍﻟﻤﻔﻬﻮﻡ ﺍﻟﺮﻳﺎﺿﻲ ﻟﻠﻨﺎﻗﻼﺕ ﺍﻟﻤﺘﻌﺎﻣﺪﺓ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻣﺴﺘﻘﻠﺔ ﻋﻦ ﺑﻌﻀﻬﺎ ﺍﻟﺒﻌﺾ‪ (.‬ﺍﻟﺘﻌﺎﻣﺪ‬
‫ﻳﺄﺗﻲﻣﻦ ﺗﻨﺎﻇﺮ ﺍﻟﻌﻼﻗﺎﺕ ﺑﻴﻦ ﺍﻷﻭﻟﻴﺎﺕ‪ .‬ﻳﺆﺩﻱ ﺍﻻﻓﺘﻘﺎﺭ ﺇﻟﻰ ﺍﻟﺘﻌﺎﻣﺪ ﺇﻟﻰ ﺍﺳﺘﺜﻨﺎءﺍﺕ ﻟﻘﻮﺍﻋﺪ‬
‫ﺍﻟﻠﻐﺔ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﻤﺆﺷﺮﺍﺕ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﻣﻦ‬
‫ﺍﻟﻤﻤﻜﻦﺗﺤﺪﻳﺪ ﻣﺆﺷﺮ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺃﻱ ﻧﻮﻉ ﻣﺤﺪﺩ ﻣﺤﺪﺩ ﻓﻲ ﺍﻟﻠﻐﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺇﺫﺍ ﻟﻢ ﻳﺴُﻤﺢ‬
‫ﻟﻠﻤﺆﺷﺮﺍﺕﺑﺎﻹﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ‪ ،‬ﻓﻼ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻌﺮﻓﺔ‬
‫ﻣﻦﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻭﺍﻟﺘﻲ ﻳﺤﺘﻤﻞ ﺃﻥ ﺗﻜﻮﻥ ﻣﻔﻴﺪﺓ‪.‬‬

‫ﻳﻤﻜﻨﻨﺎﺗﻮﺿﻴﺢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻌﺎﻣﺪ ﻛﻤﻔﻬﻮﻡ ﺗﺼﻤﻴﻢ ﻣﻦ ﺧﻼﻝ ﻣﻘﺎﺭﻧﺔ ﺟﺎﻧﺐ ﻭﺍﺣﺪ ﻣﻦ‬
‫ﻟﻐﺎﺕﺍﻟﺘﺠﻤﻴﻊ ﻷﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ ‪ IBM‬ﺍﻟﻤﺮﻛﺰﻳﺔ ﻭﺳﻠﺴﻠﺔ ‪ VAX‬ﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺼﻐﻴﺮﺓ‪.‬‬
‫ﻧﺤﻦﻧﻌﺘﺒﺮ ﻣﻮﻗﻔﺎً ﻭﺍﺣﺪﺍً ﺑﺴﻴﻄﺎً‪ :‬ﺇﺿﺎﻓﺔ ﻗﻴﻤﺘﻴﻦ ﺻﺤﻴﺤﺘﻴﻦ ‪ 32‬ﺑﺖ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺍﻟﺬﺍﻛﺮﺓ ﺃﻭ‬
‫ﺍﻟﺴﺠﻼﺕﻭﺍﺳﺘﺒﺪﺍﻝ ﺇﺣﺪﻯ ﺍﻟﻘﻴﻤﺘﻴﻦ ﺑﺎﻟﻤﺠﻤﻮﻉ‪ .‬ﺗﺤﺘﻮﻱ ﺣﻮﺍﺳﻴﺐ ‪ IBM‬ﺍﻟﻤﺮﻛﺰﻳﺔ ﻋﻠﻰ‬
‫ﺗﻌﻠﻴﻤﺘﻴﻦﻟﻬﺬﺍ ﺍﻟﻐﺮﺽ ‪ ،‬ﻭﺍﻟﺘﻲ ﻟﻬﺎ ﺍﻷﺷﻜﺎﻝ‬

‫‪A Reg1 ، memory_cell‬‬


‫‪AR Reg1 ، Reg2‬‬

‫ﺃﻳﻦﺭﻳﺞ ‪1‬ﻭ‪Reg2‬ﺗﻤﺜﻞ ﺍﻟﺴﺠﻼﺕ‪ .‬ﺩﻻﻻﺕ ﻫﺬﻩ ﻫﻲ‬

‫ﺭﻳﺞ‪←1‬ﻣﺤﺘﻮﻳﺎﺕ )‪ + (Reg1‬ﻣﺤﺘﻮﻳﺎﺕ )‪←Reg1 (memory_cell‬ﺍﻟﻤﺤﺘﻮﻳﺎﺕ‬


‫)‪ + (Reg1‬ﺍﻟﻤﺤﺘﻮﻳﺎﺕ )‪(Reg2‬‬

‫ﺗﻌﻠﻴﻤﺎﺕﺇﺿﺎﻓﺔ ‪ VAX‬ﻟﻘﻴﻢ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ‪ 32‬ﺑﺖ ﻫﻲ‬

‫ﻣﻌﺎﻣﻞ‪ ، ADDL_1‬ﺍﻟﻤﻌﺎﻣﻞ_‪2‬‬

‫ﺍﻟﺬﻱﻫﻮ ﺩﻻﻻﺕ‬

‫ﻣﻌﺎﻣﻞ_‪←2‬ﻣﺤﺘﻮﻳﺎﺕ )‪ + (operand_1‬ﻣﺤﺘﻮﻳﺎﺕ )‪(operand_2‬‬

‫ﻓﻲﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﺃﻱ ﻣﻦ ﺍﻟﻤﻌﺎﻣﻞ ﺳﺠﻼ ًﺃﻭ ﺧﻠﻴﺔ ﺫﺍﻛﺮﺓ‪.‬‬


‫ﺗﺼﻤﻴﻢﺗﻌﻠﻴﻤﺎﺕ ‪ VAX‬ﻣﺘﻌﺎﻣﺪ ﻣﻦ ﺣﻴﺚ ﺃﻥ ﺗﻌﻠﻴﻤﺔ ﻭﺍﺣﺪﺓ ﻳﻤﻜﻦ ﺃﻥ ﺗﺴﺘﺨﺪﻡ ﺇﻣﺎ‬
‫ﺍﻟﺴﺠﻼﺕﺃﻭ ﺧﻼﻳﺎ ﺍﻟﺬﺍﻛﺮﺓ ﻛﻤﻌﺎﻣﻼِﺕ‪ .‬ﻫﻨﺎﻙ ﻃﺮﻳﻘﺘﺎﻥ ﻟﺘﺤﺪﻳﺪ ﺍﻟﻤﻌﺎﻣﻼﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺩﻣﺠﻬﺎ‬
‫ﺑﻜﻞﺍﻟﻄﺮﻕ ﺍﻟﻤﻤﻜﻨﺔ‪ .‬ﺗﺼﻤﻴﻢ ‪ IBM‬ﻟﻴﺲ ﻣﺘﻌﺎﻣﺪ‪ .‬ﺍﺛﻨﺘﺎﻥ ﻓﻘﻂ ﻣﻦ ﺃﺻﻞ ﺃﺭﺑﻊ ﻣﺠﻤﻮﻋﺎﺕ‬
‫ﻣﻌﺎﻣﻼﺕﻗﺎﻧﻮﻧﻴﺔ ‪ ،‬ﻭﺍﻻﺛﻨﺎﻥ ﻳﺘﻄﻠﺒﺎﻥ ﺗﻌﻠﻴﻤﺎﺕ ﻣﺨﺘﻠﻔﺔ ‪،‬ﺃﻭ‪AR.‬ﺗﺼﻤﻴﻢ ‪ IBM‬ﺃﻛﺜﺮ ﺗﻘﻴﻴﺪﺍً‬
‫ﻭﺑﺎﻟﺘﺎﻟﻲﺃﻗﻞ ﻗﺎﺑﻠﻴﺔ ﻟﻠﻜﺘﺎﺑﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻻ ﻳﻤﻜﻨﻚ ﺇﺿﺎﻓﺔ ﻗﻴﻤﺘﻴﻦ ﻭﺗﺨﺰﻳﻦ ﺍﻟﻤﺠﻤﻮﻉ‬
‫ﻓﻲﻣﻮﻗﻊ ﺍﻟﺬﺍﻛﺮﺓ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻳﺼﻌﺐ ﺗﻌﻠﻢ ﺗﺼﻤﻴﻢ ‪ IBM‬ﺑﺴﺒﺐ ﺍﻟﻘﻴﻮﺩ ﻭﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬
‫ﺍﻹﺿﺎﻓﻴﺔ‪.‬‬
‫‪11‬‬ ‫‪1.3‬ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺔ‬

‫ﺗﺮﺗﺒﻂﺍﻟﺘﻌﺎﻣﺪﻳﺔ ﺍﺭﺗﺒﺎﻃﺎً ﻭﺛﻴﻘﺎً ﺑﺎﻟﺒﺴﺎﻃﺔ‪ :‬ﻛﻠﻤﺎ ﻛﺎﻥ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﺃﻛﺜﺮ ﺗﻌﺎﻣﺪﺍً ‪ ،‬ﻗﻞ ﻋﺪﺩ‬
‫ﺍﻻﺳﺘﺜﻨﺎءﺍﺕﺍﻟﺘﻲ ﺗﺘﻄﻠﺒﻬﺎ ﻗﻮﺍﻋﺪ ﺍﻟﻠﻐﺔ‪ .‬ﺗﻌﻨﻲ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﺍﻷﻗﻞ ﺩﺭﺟﺔ ﺃﻋﻠﻰ ﻣﻦ ﺍﻻﻧﺘﻈﺎﻡ ﻓﻲ‬
‫ﺍﻟﺘﺼﻤﻴﻢ ‪،‬ﻣﻤﺎ ﻳﺠﻌﻞ ﺍﻟﻠﻐﺔ ﺃﺳﻬﻞ ﻓﻲ ﺍﻟﺘﻌﻠﻢ ﻭﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻔﻬﻢ‪ .‬ﻳﻤﻜﻦ ﻷﻱ ﺷﺨﺺ ﺗﻌﻠﻢ ﺟﺰءﺍً‬
‫ﻛﺒﻴﺮﺍًﻣﻦ ﺍﻟﻠﻐﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﺃﻥ ﻳﺸﻬﺪ ﻋﻠﻰ ﺻﻌﻮﺑﺔ ﺗﻌﻠﻢ ﺍﺳﺘﺜﻨﺎءﺍﺗﻬﺎ ﺍﻟﻌﺪﻳﺪﺓ ﻣﻦ ﺍﻟﻘﻮﺍﻋﺪ )ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪،‬ﺃﻧﺎﻗﺒﻞﻩﻣﺎﻋﺪﺍ ﺑﻌﺪﺝ(‪.‬‬

‫ﻛﺄﻣﺜﻠﺔﻋﻠﻰ ﺍﻻﻓﺘﻘﺎﺭ ﺇﻟﻰ ﺍﻟﺘﻌﺎﻣﺪ ﻓﻲ ﻟﻐﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ‪ ،‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺍﻟﻘﻮﺍﻋﺪ‬
‫ﻭﺍﻻﺳﺘﺜﻨﺎءﺍﺕﺍﻟﺘﺎﻟﻴﺔ ﻓﻲ ‪ .C‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻟﻐﺔ ‪ C‬ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻧﻮﻋﻴﻦ ﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﺍﻟﻤﻨﻈﻤﺔﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺴﺠﻼﺕ )ﻫﻴﻜﻞﻳﻤﻜﻦ ﺇﺭﺟﺎﻉ ﺍﻟﺴﺠﻼﺕ ﻣﻦ ﺍﻟﻮﻇﺎﺉﻒ ﻭﻟﻜﻦ ﻻ‬
‫ﻳﻤﻜﻦﻟﻠﻤﺼﻔﻮﻓﺎﺕ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻋﻀﻮ ﺍﻟﺒﻨﻴﺔ ﺃﻱ ﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﺑﺎﺳﺘﺜﻨﺎء ‪s( ،‬ﻓﺎﺭﻍﺃﻭ ﻫﻴﻜﻞ ﻣﻦ‬
‫ﻧﻔﺲﺍﻟﻨﻮﻉ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻋﻨﺼﺮ ﺍﻟﻤﺼﻔﻮﻓﺔ ﺃﻱ ﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﺑﺎﺳﺘﺜﻨﺎءﻓﺎﺭﻍﺃﻭ ﻭﻇﻴﻔﺔ‪ .‬ﻳﺘﻢ‬
‫ﺗﻤﺮﻳﺮﺍﻟﻤﻌﻠﻤﺎﺕ ﺑﺎﻟﻘﻴﻤﺔ ‪ ،‬ﻣﺎ ﻟﻢ ﺗﻜﻦ ﻣﺼﻔﻮﻓﺎﺕ ‪ ،‬ﻭﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ﻳﺘﻢ ﺗﻤﺮﻳﺮﻫﺎ ﻓﻌﻠﻴﺎً ﻋﻦ‬
‫ﻃﺮﻳﻖﺍﻟﻤﺮﺟﻊ )ﻷﻥ ﻇﻬﻮﺭ ﺍﺳﻢ ﻣﺼﻔﻮﻓﺔ ﺑﺪﻭﻥ ﺣﺮﻑ ﻣﻨﺨﻔﺾ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ‪ C‬ﻳﺘﻢ ﺗﻔﺴﻴﺮﻩ ﻋﻠﻰ‬
‫ﺃﻧﻪﻋﻨﻮﺍﻥ ﺍﻟﻌﻨﺼﺮ ﺍﻷﻭﻝ ﻟﻠﻤﺼﻔﻮﻓﺔ( ‪.‬‬

‫ﻛﻤﺜﺎﻝﻋﻠﻰ ﺍﻻﻋﺘﻤﺎﺩ ﻋﻠﻰ ﺍﻟﺴﻴﺎﻕ ‪ ،‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺗﻌﺒﻴﺮ ‪.C‬‬

‫ﺃ‪ +‬ﺏ‬

‫ﻏﺎﻟﺒﺎًﻣﺎ ﻳﻌﻨﻲ ﻫﺬﺍ ﺍﻟﺘﻌﺒﻴﺮ ﺃﻥ ﻗﻴﻢﺃﻭﺏﻳﺘﻢ ﺟﻠﺒﻬﺎ ﻭﺇﺿﺎﻓﺘﻬﺎ ﻣﻌﺎً‪ .‬ﻭﻣﻊ ﺫﻟﻚ‪ ،‬ﺇﺫﺍﺃﻳﺤﺪﺙ ﺃﻥ ﻳﻜﻮﻥ‬
‫ﻣﺆﺷﺮﺍً ‪،‬ﻓﻬﻮ ﻳﺆﺛﺮ ﻋﻠﻰ ﻗﻴﻤﺔﺏ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺇﺫﺍﺃﻳﺸﻴﺮ ﺇﻟﻰ ﻗﻴﻤﺔ ﻋﺎﺉﻤﺔ ﺗﺸﻐﻞ ﺃﺭﺑﻌﺔ‬
‫ﺑﺎﻳﺖ ‪،‬ﺛﻢ ﻗﻴﻤﺔﺏ‬
‫ﻳﺠﺐﺗﺤﺠﻴﻤﻬﺎ ‪ -‬ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ﻣﻀﺮﻭﺑﺔ ﻓﻲ ‪ - 4‬ﻗﺒﻞ ﺇﺿﺎﻓﺘﻬﺎ ﺇﻟﻰﺃ‪.‬ﻟﺬﻟﻚ ‪ ،‬ﻓﺈﻥ ﻧﻮﻉﺃﻳﺆﺛﺮ ﻋﻠﻰ‬
‫ﻋﻼﺝﻗﻴﻤﺔﺏ‪.‬ﺳﻴﺎﻕﺏﻳﺆﺛﺮ ﻋﻠﻰ ﻣﻌﻨﺎﻫﺎ‪.‬‬

‫ﻳﻤﻜﻦﺃﻥ ﻳﺴﺒﺐ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺍﻟﺘﻌﺎﻣﺪ ﺃﻳﻀﺎً ﻣﺸﺎﻛﻞ‪ .‬ﺭﺑﻤﺎ ﺗﻜﻮﻥ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻷﻛﺜﺮ ﺗﻌﺎﻣﺪﺍً‬
‫ﻫﻲ (‪ .ALGOL 68 )van Wijngaarden et al. ، 1969‬ﻛﻞ ﺑﻨﺎء ﻟﻐﺔ ﻓﻲ ‪ ALGOL 68‬ﻟﻪ‬
‫ﻧﻮﻉ ‪،‬ﻭﻻ ﺗﻮﺟﺪ ﻗﻴﻮﺩ ﻋﻠﻰ ﻫﺬﻩ ﺍﻷﻧﻮﺍﻉ‪ .‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺫﻟﻚ ‪ ،‬ﺗﻨﺘﺞ ﻣﻌﻈﻢ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻗﻴﻤﺎً‪ .‬ﺗﺴﻤﺢ‬
‫ﻫﺬﻩﺍﻟﺤﺮﻳﺔ ﺍﻟﺘﻮﺍﻓﻘﻴﺔ ﺑﺒﻨﺎءﺍﺕ ﻣﻌﻘﺪﺓ ﻟﻠﻐﺎﻳﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﻳﻈﻬﺮ ﺍﻟﺸﺮﻃﻲ‬
‫ﻋﻠﻰﺃﻧﻪ ﺍﻟﺠﺎﻧﺐ ﺍﻷﻳﺴﺮ ﻣﻦ ﺍﻟﻤﻬﻤﺔ ‪ ،‬ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﺍﻹﻋﻼﻧﺎﺕ ﻭﻋﺒﺎﺭﺍﺕ ﻣﺘﻨﻮﻋﺔ ﺃﺧﺮﻯ ‪،‬‬
‫ﻃﺎﻟﻤﺎﺃﻥ ﺍﻟﻨﺘﻴﺠﺔ ﻫﻲ ﻋﻨﻮﺍﻥ‪ .‬ﻫﺬﺍ ﺍﻟﺸﻜﻞ ﺍﻟﻤﺘﻄﺮﻑ ﻣﻦ ﺍﻟﺘﻌﺎﻣﺪ ﻳﺆﺩﻱ ﺇﻟﻰ ﺗﻌﻘﻴﺪ ﻏﻴﺮ ﺿﺮﻭﺭﻱ‪.‬‬
‫ﻋﻼﻭﺓﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﻠﻐﺎﺕ ﺗﺘﻄﻠﺐ ﻋﺪﺩﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺍﻷﻭﻟﻴﺎﺕ ‪ ،‬ﻓﺈﻥ ﺩﺭﺟﺔ ﻋﺎﻟﻴﺔ ﻣﻦ‬
‫ﺍﻟﺘﻌﺎﻣﺪﺗﺆﺩﻱ ﺇﻟﻰ ﺍﻧﻔﺠﺎﺭ ﻓﻲ ﺍﻟﺘﻮﻟﻴﻔﺎﺕ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﺣﺘﻰ ﻟﻮ ﻛﺎﻧﺖ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺑﺴﻴﻄﺔ ‪ ،‬ﻓﺈﻥ‬
‫ﺃﻋﺪﺍﺩﻫﻢﺍﻟﻬﺎﺉﻠﺔ ﺗﺆﺩﻱ ﺇﻟﻰ ﺍﻟﺘﻌﻘﻴﺪ‪.‬‬

‫ﻭﺑﺎﻟﺘﺎﻟﻲ ‪،‬ﻓﺈﻥ ﺍﻟﺒﺴﺎﻃﺔ ﻓﻲ ﺍﻟﻠﻐﺔ ﻫﻲ ﻋﻠﻰ ﺍﻷﻗﻞ ﺟﺰﺉﻴﺎً ﻧﺘﻴﺠﺔ ﻣﺰﻳﺞ ﻣﻦ ﻋﺪﺩ ﺻﻐﻴﺮ‬
‫ﻧﺴﺒﻴﺎًﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ ﻭﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺤﺪﻭﺩ ﻟﻤﻔﻬﻮﻡ ﺍﻟﺘﻌﺎﻣﺪ‪.‬‬

‫ﻳﻌﺘﻘﺪﺍﻟﺒﻌﺾ ﺃﻥ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺗﻘﺪﻡ ﻣﺰﻳﺠﺎً ﺟﻴﺪﺍً ﻣﻦ ﺍﻟﺒﺴﺎﻃﺔ ﻭﺍﻟﺘﻌﺎﻣﺪ‪ .‬ﺍﻟﻠﻐﺔ‬


‫ﺍﻟﻮﻇﻴﻔﻴﺔ ‪،‬ﻣﺜﻞ ‪ ، LISP‬ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻳﺘﻢ ﻓﻴﻬﺎ ﺇﺟﺮﺍء ﺍﻟﺤﺴﺎﺑﺎﺕ ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﻣﻦ ﺧﻼﻝ‬
‫ﺗﻄﺒﻴﻖﻭﻇﺎﺉﻒ ﻋﻠﻰ ﻣﻌﻠﻤﺎﺕ ﻣﻌﻴﻨﺔ‪ .‬ﻓﻲ ﺍﻟﻤﻘﺎﺑﻞ ‪ ،‬ﻓﻲ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ﻣﺜﻞ ‪ C‬ﻭ ‪ ++ C‬ﻭ‬
‫‪ ، Java‬ﻋﺎﺩﺓ ًﻣﺎ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻭﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ‪.‬‬
‫ﺗﻘﺪﻡﺍﻟﻠﻐﺎﺕ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺃﻛﺒﺮ ﻗﺪﺭ ﻣﻦ ﺍﻟﺒﺴﺎﻃﺔ ﺍﻟﻜﻠﻴﺔ ‪ ،‬ﻷﻧﻬﺎ ﻳﻤﻜﻦ ﺃﻥ ﺗﻨﺠﺰ ﻛﻞ ﺷﻲء ﺑﺒﻨﻴﺔ‬
‫ﻭﺍﺣﺪﺓ ‪،‬ﺍﺳﺘﺪﻋﺎء ﺍﻟﻮﻇﻴﻔﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪12‬‬

‫ﻣﺠﺘﻤﻌﺔﺑﺒﺴﺎﻃﺔ ﻣﻊ ﺍﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻷﺧﺮﻯ‪ .‬ﻫﺬﻩ ﺍﻷﻧﺎﻗﺔ ﺍﻟﺒﺴﻴﻄﺔ ﻫﻲ ﺳﺒﺐ ﺍﻧﺠﺬﺍﺏ‬


‫ﺑﻌﺾﺍﻟﺒﺎﺣﺜﻴﻦ ﺍﻟﻠﻐﻮﻳﻴﻦ ﺇﻟﻰ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻮﻇﻴﻔﻴﺔ ﻛﺒﺪﻳﻞ ﺃﺳﺎﺳﻲ ﻟﻠﻐﺎﺕ ﺍﻟﻤﻌﻘﺪﺓ ﻏﻴﺮ ﺍﻟﻮﻇﻴﻔﻴﺔ‬
‫ﻣﺜﻞ‪ .++ C‬ﻋﻮﺍﻣﻞ ﺃﺧﺮﻯ ‪ ،‬ﻣﺜﻞ ﺍﻟﻜﻔﺎءﺓ ‪ ،‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺣﺎﻟﺖ ﺩﻭﻥ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻮﻇﻴﻔﻴﺔ‬
‫ﻋﻠﻰﻧﻄﺎﻕ ﻭﺍﺳﻊ‪.‬‬

‫‪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.3.4‬ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻜﺘﺎﺑﺔ‬


‫ﻛﻞﻣﻦ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻜﺘﺎﺑﺔ ﺗﺆﺛﺮ ﻋﻠﻰ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ‪ .‬ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﻜﺘﻮﺏ ﺑﻠﻐﺔ ﻻ ﺗﺪﻋﻢ ﺍﻟﻄﺮﻕ‬
‫ﺍﻟﻄﺒﻴﻌﻴﺔﻟﻠﺘﻌﺒﻴﺮ ﻋﻦ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺎﺕ ﺍﻟﻤﻄﻠﻮﺑﺔ ﺳﻴﺴﺘﺨﺪﻡ ﺑﺎﻟﻀﺮﻭﺭﺓ ﻣﻨﺎﻫﺞ ﻏﻴﺮ ﻃﺒﻴﻌﻴﺔ‪ .‬ﻣﻦ ﻏﻴﺮ‬
‫ﺍﻟﻤﺮﺟﺢﺃﻥ ﺗﻜﻮﻥ ﺍﻷﺳﺎﻟﻴﺐ ﻏﻴﺮ ﺍﻟﻄﺒﻴﻌﻴﺔ ﺻﺤﻴﺤﺔ ﻓﻲ ﺟﻤﻴﻊ ﺍﻟﻤﻮﺍﻗﻒ ﺍﻟﻤﻤﻜﻨﺔ‪ .‬ﻛﻠﻤﺎ ﻛﺎﻥ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﺃﺳﻬﻞ ﻓﻲ ﺍﻟﻜﺘﺎﺑﺔ ‪ ،‬ﺯﺍﺩﺕ ﺍﺣﺘﻤﺎﻟﻴﺔ ﺻﺤﺘﻪ‪.‬‬

‫ﺗﺆﺛﺮﺇﻣﻜﺎﻧﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻋﻠﻰ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﻓﻲ ﻣﺮﺣﻠﺘﻲ ﺍﻟﻜﺘﺎﺑﺔ ﻭﺍﻟﺼﻴﺎﻧﺔ ﻟﺪﻭﺭﺓ ﺍﻟﺤﻴﺎﺓ‪ .‬ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﺍﻟﺘﻲﻳﺼﻌﺐ ﻗﺮﺍءﺗﻬﺎ ﻳﺼﻌﺐ ﻛﺘﺎﺑﺘﻬﺎ ﻭﺗﻌﺪﻳﻠﻬﺎ‪.‬‬

‫‪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.3‬ﻫﻨﺎﻙ ﻋﺪﺓ ﻋﻮﺍﻣﻞ ﺃﺧﺮﻯ ﺗﺆﺛﺮ ﻋﻠﻰ‬
‫ﺍﻟﺘﺼﻤﻴﻢﺍﻷﺳﺎﺳﻲ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻭﺃﻫﻤﻬﺎ ﻫﻨﺪﺳﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪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‬‬
‫ﺍﻟﻤﺼﻤﻢﺍﻟﺮﺉﻴﺴﻲ ﻟﻠﻨﺴﺨﺔ ﺍﻷﺻﻠﻴﺔ ﻣﻦ ﻓﻮﺭﺗﺮﺍﻥ ‪ ،‬ﺃﻛﺜﺮﻫﻢ ﺑﻼﻏﺔ‪.‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺣﻘﻴﻘﺔ ﺃﻥ ﺑﻨﻴﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺤﺘﻤﻴﺔ ﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ ﻋﻠﻰ ﻏﺮﺍﺭ ﺑﻨﻴﺔ ﺍﻵﻟﺔ ‪،‬‬
‫ﺑﺪﻻ ًﻣﻦ ﻗﺪﺭﺍﺕ ﻭﻣﻴﻮﻝ ﻣﺴﺘﺨﺪﻣﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻳﻌﺘﻘﺪ ﺍﻟﺒﻌﺾ ﺃﻥ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺎﺕ‬
‫ﺍﻟﺤﺘﻤﻴﺔﺃﻣﺮ ﻃﺒﻴﻌﻲ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﺃﻛﺜﺮ ﻣﻦ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ﻭﻇﻴﻔﻴﺔ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻳﻌﺘﻘﺪ ﻫﺆﻻء ﺍﻷﺷﺨﺎﺹ‬
‫ﺃﻧﻪﺣﺘﻰ ﻟﻮ ﻛﺎﻧﺖ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻮﻇﻴﻔﻴﺔ ﻓﻌﺎﻟﺔ ﻣﺜﻞ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻀﺮﻭﺭﻳﺔ ‪ ،‬ﻓﺈﻥ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻹﻟﺰﺍﻣﻴﺔ ﺳﻴﻈﻞ ﻫﻮ ﺍﻟﻤﺴﻴﻄﺮ‪.‬‬

‫‪1.4.2‬ﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﺒﺮﻣﺠﺔ‬


‫ﻗﺪﻣﺖﺃﻭﺍﺧﺮ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ﻭﺃﻭﺍﺉﻞ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ﺗﺤﻠﻴﻼ ًﻣﻜﺜﻔﺎً ‪ ،‬ﺑﺪﺃ ﻓﻲ ﺟﺰء ﻛﺒﻴﺮ ﻣﻨﻪ ﺑﺤﺮﻛﺔ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻤﻬﻴﻜﻠﺔ ‪ ،‬ﻟﻜﻞ ﻣﻦ ﻋﻤﻠﻴﺔ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻭﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

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

‫ﻛﺎﻧﺖﻣﻨﻬﺠﻴﺎﺕ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ ﺍﻟﺘﻲ ﻇﻬﺮﺕ ﻧﺘﻴﺠﺔ ﻟﺒﺤﻮﺙ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ‬


‫ﺗﺴﻤﻰﺍﻟﺘﺼﻤﻴﻢ ﻣﻦ ﺃﻋﻠﻰ ﺇﻟﻰ ﺃﺳﻔﻞ ﻭﺍﻟﺘﺤﺴﻴﻦ ﺍﻟﺘﺪﺭﻳﺠﻲ‪ .‬ﻛﺎﻧﺖ ﺃﻭﺟﻪ ﺍﻟﻘﺼﻮﺭ ﺍﻷﺳﺎﺳﻴﺔ ﻓﻲ‬
‫ﻟﻐﺔﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﻢ ﺍﻛﺘﺸﺎﻓﻬﺎ ﻫﻲ ﻋﺪﻡ ﺍﻛﺘﻤﺎﻝ ﻓﺤﺺ ﺍﻟﻨﻮﻉ ﻭﻋﺪﻡ ﻛﻔﺎﻳﺔ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ )ﺍﻟﺘﻲ‬
‫ﺗﺘﻄﻠﺐﺍﺳﺘﺨﺪﺍﻣﺎً ﻣﻜﺜﻔﺎً ﻟـ ‪.(gotos‬‬

‫ﻓﻲﺃﻭﺍﺧﺮ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪ ،‬ﺑﺪﺃ ﺍﻟﺘﺤﻮﻝ ﻣﻦ ﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻮﺟﻬﺔ ﺇﻟﻰ‬


‫ﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬ﺑﺒﺴﺎﻃﺔ ‪ ،‬ﺗﺆﻛﺪ ﺍﻷﺳﺎﻟﻴﺐ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﺒﻴﺎﻧﺎﺕ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻣﻊ ﺍﻟﺘﺮﻛﻴﺰ ﻋﻠﻰ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺠﺮﺩﺓ ﻟﺤﻞ ﺍﻟﻤﺸﻜﻼﺕ‪.‬‬
‫‪21‬‬ ‫‪1.5‬ﻓﺉﺎﺕ ﺍﻟﻠﻐﺔ‬

‫ﻻﺳﺘﺨﺪﺍﻡﺍﺳﺘﺨﻼﺹ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺑﺸﻜﻞ ﻓﻌﺎﻝ ﻓﻲ ﺗﺼﻤﻴﻢ ﻧﻈﺎﻡ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ‪ ،‬ﻳﺠﺐ ﺃﻥ‬


‫ﻳﻜﻮﻥﻣﺪﻋﻮﻣﺎً ﺑﺎﻟﻠﻐﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﻠﺘﻨﻔﻴﺬ‪ .‬ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﺍﻷﻭﻟﻰ ﺍﻟﺘﻲ ﻗﺪﻣﺖ ﺣﺘﻰ ﺩﻋﻤﺎً‬
‫ﻣﺤﺪﻭﺩﺍًﻻﺳﺘﺨﺮﺍﺝ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻫﻲ (‪ ، SIMULA 67 )Birtwistle et al. ، 1973‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ‬
‫ﺃﻥﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺑﺎﻟﺘﺄﻛﻴﺪ ﻟﻢ ﺗﻜﻦ ﻣﺪﻓﻮﻋﺔ ﺑﺎﻟﺸﻌﺒﻴﺔ ﺑﺴﺒﺒﻬﺎ‪ .‬ﻟﻢ ﻳﺘﻢ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﻓﻮﺍﺉﺪ ﺗﺠﺮﻳﺪ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺣﺘﻰ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺼﻤﻤﺔ‬
‫ﻣﻨﺬﺃﻭﺍﺧﺮ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ﺗﺪﻋﻢ ﺗﺠﺮﻳﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻭﺍﻟﺬﻱ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻪ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ‬
‫‪.11‬‬
‫ﺃﺣﺪﺙﺧﻄﻮﺓ ﻓﻲ ﺗﻄﻮﺭ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﺑﺪﺃﺕ ﻓﻲ ﺃﻭﺍﺉﻞ‬
‫ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ‪،‬ﻫﻲ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﻮﺟﻪ ﻧﺤﻮ ﺍﻟﻜﺎﺉﻨﺎﺕ‪ .‬ﺗﺒﺪﺃ ﺍﻟﻤﻨﻬﺠﻴﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‬
‫ﺑﺎﺳﺘﺨﺮﺍﺝﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻠﺨﺺ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺑﻜﺎﺉﻨﺎﺕ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺗﺘﺤﻜﻢ ﻓﻲ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕ ‪،‬ﻭﺗﻀﻴﻒ ﺍﻟﻮﺭﺍﺛﺔ ﻭﺭﺑﻂ ﺍﻷﺳﻠﻮﺏ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ‪ .‬ﺍﻟﻮﺭﺍﺛﺔ ﻣﻔﻬﻮﻡ ﻗﻮﻱ ﻳﻌﺰﺯ ﺑﺸﻜﻞ ﻛﺒﻴﺮ‬
‫ﺇﻋﺎﺩﺓﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺤﺘﻤﻠﺔ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﺤﺎﻟﻴﺔ ‪ ،‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﻳﻮﻓﺮ ﺇﻣﻜﺎﻧﻴﺔ ﺍﻟﺰﻳﺎﺩﺍﺕ ﺍﻟﻜﺒﻴﺮﺓ ﻓﻲ ﺇﻧﺘﺎﺟﻴﺔ‬
‫ﺗﻄﻮﻳﺮﺍﻟﺒﺮﻣﺠﻴﺎﺕ‪ .‬ﻫﺬﺍ ﻋﺎﻣﻞ ﻣﻬﻢ ﻓﻲ ﺯﻳﺎﺩﺓ ﺷﻌﺒﻴﺔ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺸﻴﺉﻴﺔ‪ .‬ﻳﺴﻤﺢ ﺭﺑﻂ ﺍﻷﺳﻠﻮﺏ‬
‫ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ)ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ( ﺑﺎﺳﺘﺨﺪﺍﻡ ﺃﻛﺜﺮ ﻣﺮﻭﻧﺔ ﻟﻠﻮﺭﺍﺛﺔ‪.‬‬

‫ﺗﻢﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﻟﻐﺔ ﺗﺪﻋﻢ ﻣﻔﺎﻫﻴﻤﻬﺎ‪، 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‬‬

‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻹﺟﺮﺍءﺍﺕ ﻫﻲ ‪ ،‬ﺑﻤﻌﻨﻰ ﻣﺎ ‪ ،‬ﻋﻜﺲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬‬


‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻷﺳﺎﻟﻴﺐ ﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺗﻬﻴﻤﻦ ﺍﻵﻥ ﻋﻠﻰ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ‪ ،‬ﺇﻻ ﺃﻥ‬
‫ﺍﻷﺳﺎﻟﻴﺐﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻹﺟﺮﺍءﺍﺕ ﻟﻢ ﻳﺘﻢ ﺍﻟﺘﺨﻠﻲ ﻋﻨﻬﺎ‪ .‬ﻋﻠﻰ ﺍﻟﻌﻜﺲ ﻣﻦ ﺫﻟﻚ ‪ ،‬ﻓﻲ ﺍﻟﺴﻨﻮﺍﺕ‬
‫ﺍﻷﺧﻴﺮﺓ ‪،‬ﺣﺪﺙ ﻗﺪﺭ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺒﺤﺚ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻹﺟﺮﺍءﺍﺕ ‪ ،‬ﻻ ﺳﻴﻤﺎ ﻓﻲ ﻣﺠﺎﻝ‬
‫ﺍﻟﺘﺰﺍﻣﻦ‪.‬ﺟﻠﺒﺖ ﻫﺬﻩ ﺍﻟﺠﻬﻮﺩ ﺍﻟﺒﺤﺜﻴﺔ ﻣﻌﻬﻢ ﺍﻟﺤﺎﺟﺔ ﺇﻟﻰ ﺍﻟﺘﺴﻬﻴﻼﺕ ﺍﻟﻠﻐﻮﻳﺔ ﻹﻧﺸﺎء ﻭﺣﺪﺍﺕ‬
‫ﺍﻟﺒﺮﺍﻣﺞﺍﻟﻤﺘﺰﺍﻣﻨﺔ ﻭﺍﻟﺘﺤﻜﻢ ﻓﻴﻬﺎ‪ .‬ﺗﺘﻀﻤﻦ ‪ Ada‬ﻭ ‪ Java‬ﻭ ‪ # C‬ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻘﺪﺭﺍﺕ‪ .‬ﺗﻤﺖ‬
‫ﻣﻨﺎﻗﺸﺔﺍﻟﺘﺰﺍﻣﻦ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.13‬‬

‫ﺃﺩﺕﻛﻞ ﻫﺬﻩ ﺍﻟﺨﻄﻮﺍﺕ ﺍﻟﺘﻄﻮﺭﻳﺔ ﻓﻲ ﻣﻨﻬﺠﻴﺎﺕ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺇﻟﻰ ﺗﺮﺍﻛﻴﺐ ﻟﻐﺔ‬
‫ﺟﺪﻳﺪﺓﻟﺪﻋﻤﻬﺎ‪.‬‬

‫‪1.5‬ﻓﺉﺎﺕ ﺍﻟﻠﻐﺔ‬
‫ﻏﺎﻟﺒﺎًﻣﺎ ﻳﺘﻢ ﺗﺼﻨﻴﻒ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺇﻟﻰ ﺃﺭﺑﻊ ﺳﻼﻝ‪ :‬ﺇﻟﺰﺍﻣﻴﺔ ‪ ،‬ﻭﻇﻴﻔﻴﺔ ‪ ،‬ﻣﻨﻄﻘﻴﺔ ‪ ،‬ﻭﻣﻮﺟﻬﺔ‬
‫ﻟﻠﻜﺎﺉﻨﺎﺕ‪.‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻧﻨﺎ ﻻ ﻧﻌﺘﺒﺮ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﻟﺘﺸﻜﻴﻞ ﻓﺉﺔ‬
‫ﻣﻨﻔﺼﻠﺔﻣﻦ ﺍﻟﻠﻐﺎﺕ‪ .‬ﻟﻘﺪ ﻭﺻﻔﻨﺎ ﻛﻴﻒ ﻧﺸﺄﺕ ﺍﻟﻠﻐﺎﺕ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻟﻤﻮﺟﻬﺔﻟﻠﻜﺎﺉﻨﺎﺕ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻹﻟﺰﺍﻣﻴﺔ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻧﻤﻮﺫﺝ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻮﺟﻪ‬
‫ﻟﻠﻜﺎﺉﻨﺎﺕﻳﺨﺘﻠﻒ ﺍﺧﺘﻼﻓﺎً ﻛﺒﻴﺮﺍً ﻋﻦ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﻤﻮﺟﻪ ﻧﺤﻮ ﺍﻹﺟﺮﺍءﺍﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻋﺎﺩﺓ ًﻣﻊ‬
‫ﺍﻟﻠﻐﺎﺕﺍﻟﺤﺘﻤﻴﺔ ‪،‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪22‬‬

‫ﺍﻣﺘﺪﺍﺩﺍﺕﻟﻠﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻄﻠﻮﺑﺔ ﻟﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﻟﻴﺴﺖ ﻣﻜﺜﻔﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪،‬‬
‫ﺍﻟﺘﻌﺒﻴﺮﺍﺕﻭﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻭﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ‪ C‬ﻭ ‪ Java‬ﻣﺘﻄﺎﺑﻘﺔ ﺗﻘﺮﻳﺒﺎً‪) .‬ﻣﻦ ﻧﺎﺣﻴﺔ‬
‫ﺃﺧﺮﻯ ‪،‬ﺗﺨﺘﻠﻒ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻭﺩﻻﻻﺕ ‪ Java‬ﻋﻦ ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ‪ (.C‬ﻳﻤﻜﻦ‬
‫ﺇﺟﺮﺍءﻋﺒﺎﺭﺍﺕ ﻣﻤﺎﺛﻠﺔ ﻟﻠﻐﺎﺕ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪.‬‬

‫ﻧﻮﻉﺁﺧﺮ ﻣﻦ ﺍﻟﻠﻐﺔ ‪ ،‬ﺍﻟﻠﻐﺔ ﺍﻟﻤﺮﺉﻴﺔ ‪ ،‬ﻫﻲ ﻓﺉﺔ ﻓﺮﻋﻴﺔ ﻟﻠﻐﺎﺕ ﺍﻷﻣﺮ‪ .‬ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺮﺉﻴﺔ ﺍﻷﻛﺜﺮ‬
‫ﺷﻴﻮﻋﺎًﻫﻲ ﻟﻐﺎﺕ ‪ .NET.‬ﺗﺘﻀﻤﻦ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ )ﺃﻭ ﺗﻄﺒﻴﻘﺎﺗﻬﺎ( ﺇﻣﻜﺎﻧﻴﺎﺕ ﺇﻧﺸﺎء ﺍﻟﺴﺤﺐ‬
‫ﻭﺍﻹﻓﻼﺕﻣﻦ ﻣﻘﺎﻃﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ‪ .‬ﻛﺎﻧﺖ ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ ﺫﺍﺕ ﻳﻮﻡ ﻟﻐﺎﺕ ﺍﻟﺠﻴﻞ‬
‫ﺍﻟﺮﺍﺑﻊ ‪،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﺍﻻﺳﻢ ﻟﻢ ﻳﻌﺪ ﺻﺎﻟﺤﺎً ﻟﻼﺳﺘﺨﺪﺍﻡ‪ .‬ﺗﻮﻓﺮ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺮﺉﻴﺔ ﻃﺮﻳﻘﺔ‬
‫ﺑﺴﻴﻄﺔﻹﻧﺸﺎء ﻭﺍﺟﻬﺎﺕ ﻣﺴﺘﺨﺪﻡ ﺭﺳﻮﻣﻴﺔ ﻟﻠﺒﺮﺍﻣﺞ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺑﺎﺳﺘﺨﺪﺍﻡ ‪Studio‬‬
‫‪ Visual‬ﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺑﻠﻐﺎﺕ ‪ ، NET.‬ﻳﻤﻜﻦ ﺇﻧﺸﺎء ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ ﻹﻧﺘﺎﺝ ﻋﺮﺽ ﻟﻌﻨﺼﺮ‬
‫ﺗﺤﻜﻢﻓﻲ ﺍﻟﻨﻤﻮﺫﺝ ‪ ،‬ﻣﺜﻞ ﺯﺭ ﺃﻭ ﻣﺮﺑﻊ ﻧﺺ ‪ ،‬ﺑﻀﻐﻄﺔ ﻣﻔﺘﺎﺡ ﻭﺍﺣﺪﺓ‪ .‬ﺗﺘﻮﻓﺮ ﻫﺬﻩ ﺍﻹﻣﻜﺎﻧﺎﺕ ﺍﻵﻥ‬
‫ﺑﺠﻤﻴﻊﻟﻐﺎﺕ ‪.NET.‬‬

‫ﻳﺸﻴﺮﺑﻌﺾ ﺍﻟﻤﺆﻟﻔﻴﻦ ﺇﻟﻰ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﻛﻔﺉﺔ ﻣﻨﻔﺼﻠﺔ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻭﻣﻊ‬
‫ﺫﻟﻚ ‪،‬ﻓﺈﻥ ﺍﻟﻠﻐﺎﺕ ﻓﻲ ﻫﺬﻩ ﺍﻟﻔﺉﺔ ﻣﺮﺗﺒﻄﺔ ﺑﺒﻌﻀﻬﺎ ﺍﻟﺒﻌﺾ ﺑﻄﺮﻳﻘﺔ ﺍﻟﺘﻨﻔﻴﺬ ‪ ،‬ﺍﻟﺘﺮﺟﻤﺔ ﺍﻟﺠﺰﺉﻴﺔ‬
‫ﺃﻭﺍﻟﻜﺎﻣﻠﺔ ‪ ،‬ﺃﻛﺜﺮ ﻣﻦ ﺍﺭﺗﺒﺎﻃﻬﺎ ﺑﺘﺼﻤﻴﻢ ﻟﻐﺔ ﻣﺸﺘﺮﻛﺔ‪ .‬ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﺴﻤﻰ ﻋﺎﺩﺓ ًﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻟﻨﺼﻴﺔ ‪،‬ﻣﻦ ﺑﻴﻨﻬﺎ ‪ Perl‬ﻭ ‪ JavaScript‬ﻭ ‪ ، Ruby‬ﻫﻲ ﻟﻐﺎﺕ ﺿﺮﻭﺭﻳﺔ ﺑﻜﻞ ﻣﻌﻨﻰ ﺍﻟﻜﻠﻤﺔ‪.‬‬

‫ﻟﻐﺔﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻫﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﻟﻐﺔ ﻗﺎﺉﻤﺔ ﻋﻠﻰ ﺍﻟﻘﻮﺍﻋﺪ‪ .‬ﻓﻲ ﻟﻐﺔ ﺍﻷﻣﺮ ‪ ،‬ﻳﺘﻢ ﺗﺤﺪﻳﺪ‬
‫ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺔﺑﺘﻔﺼﻴﻞ ﻛﺒﻴﺮ ‪ ،‬ﻭﻳﺠﺐ ﺗﻀﻤﻴﻦ ﺍﻟﺘﺮﺗﻴﺐ ﺍﻟﻤﺤﺪﺩ ﻟﺘﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺃﻭ ﺍﻟﻌﺒﺎﺭﺍﺕ‪.‬‬
‫ﻭﻣﻊﺫﻟﻚ ‪ ،‬ﻓﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺴﺘﻨﺪﺓ ﺇﻟﻰ ﺍﻟﻘﻮﺍﻋﺪ ‪ ،‬ﻻ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺍﻟﻘﻮﺍﻋﺪ ﺑﺄﻱ ﺗﺮﺗﻴﺐ ﻣﻌﻴﻦ ‪ ،‬ﻭﻳﺠﺐ‬
‫ﺃﻥﻳﺨﺘﺎﺭ ﻧﻈﺎﻡ ﺗﻄﺒﻴﻖ ﺍﻟﻠﻐﺔ ﺗﺮﺗﻴﺒﺎً ﺗﺴُﺘﺨﺪﻡ ﻓﻴﻪ ﺍﻟﻘﻮﺍﻋﺪ ﻹﻧﺘﺎﺝ ﺍﻟﻨﺘﻴﺠﺔ ﺍﻟﻤﺮﺟﻮﺓ‪ .‬ﻳﺨﺘﻠﻒ ﻫﺬﺍ‬
‫ﺍﻟﻨﻬﺞﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﺍﺧﺘﻼﻓﺎً ﺟﺬﺭﻳﺎً ﻋﻦ ﺗﻠﻚ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻣﻊ ﻓﺉﺘﻴﻦ ﺃﺧﺮﻳﻴﻦ ﻣﻦ ﺍﻟﻠﻐﺎﺕ‬
‫ﻭﻳﺘﻄﻠﺐﺑﻮﺿﻮﺡ ﻧﻮﻋﺎً ﻣﺨﺘﻠﻔﺎً ﺗﻤﺎﻣﺎً ﻣﻦ ﺍﻟﻠﻐﺔ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻟﻐﺔ ﺑﺮﻭﻟﻮﺝ ‪ ،‬ﻭﻫﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻟﻤﻨﻄﻘﻴﺔﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ‪ ،‬ﻭﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.16‬‬

‫ﻓﻲﺍﻟﺴﻨﻮﺍﺕ ﺍﻷﺧﻴﺮﺓ ‪ ،‬ﻇﻬﺮﺕ ﻓﺉﺔ ﺟﺪﻳﺪﺓ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ‪ ،‬ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ /‬ﺍﻟﺘﺮﻣﻴﺰ‬


‫ﺍﻟﻤﺨﺘﻠﻄﺔ‪.‬ﻟﻐﺎﺕ ﺍﻟﺘﺮﻣﻴﺰ ﻟﻴﺴﺖ ﻟﻐﺎﺕ ﺑﺮﻣﺠﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ‪، HTML‬‬
‫ﻭﻫﻲﻟﻐﺔ ﺍﻟﺘﺮﻣﻴﺰ ﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ‪ ،‬ﻟﺘﺤﺪﻳﺪ ﺗﺨﻄﻴﻂ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﻓﻲ ﻣﺴﺘﻨﺪﺍﺕ ﺍﻟﻮﻳﺐ‪ .‬ﻭﻣﻊ‬
‫ﺫﻟﻚ ‪،‬ﻓﻘﺪ ﺗﺴﻠﻠﺖ ﺑﻌﺾ ﻗﺪﺭﺍﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺇﻟﻰ ﺑﻌﺾ ﺍﻻﻣﺘﺪﺍﺩﺍﺕ ﺇﻟﻰ ‪ HTML‬ﻭ ‪ .XML‬ﻣﻦ‬
‫ﺑﻴﻨﻬﺎﻣﻜﺘﺒﺔ ﺍﻟﻌﻼﻣﺎﺕ ﺍﻟﻘﻴﺎﺳﻴﺔ ﻟﺼﻔﺤﺎﺕ ﺧﺎﺩﻡ ﺟﺎﻓﺎ )‪ (JSTL‬ﻭﺗﺤﻮﻻﺕ ﻟﻐﺔ ﻭﺭﻗﺔ ﺍﻷﻧﻤﺎﻁ‬
‫ﺍﻟﻤﻮﺳﻌﺔ)‪ .(XSLT‬ﺗﻢ ﺗﻘﺪﻳﻢ ﻛﻼ ﺍﻟﻠﻐﺘﻴﻦ ﺑﺈﻳﺠﺎﺯ ﻓﻲ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻧﻲ ‪ ،‬ﻭﻻ ﻳﻤﻜﻦ ﻣﻘﺎﺭﻧﺔ ﻫﺬﻩ‬
‫ﺍﻟﻠﻐﺎﺕﺑﺄﻱ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻜﺎﻣﻠﺔ ‪ ،‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﻟﻦ ﺗﺘﻢ ﻣﻨﺎﻗﺸﺘﻬﺎ ﺑﻌﺪ ﺍﻟﻔﺼﻞ ﺍﻟﺜﺎﻧﻲ‪.‬‬

‫ﻇﻬﺮﺕﻣﺠﻤﻮﻋﺔ ﻛﺒﻴﺮﺓ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺫﺍﺕ ﺍﻷﻏﺮﺍﺽ ﺍﻟﺨﺎﺻﺔ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً‬
‫ﺍﻟﻤﺎﺿﻴﺔ‪.‬ﺗﺘﺮﺍﻭﺡ ﻫﺬﻩ ﻣﻦ ﻣﻨُﺸﺊ ﺑﺮﻧﺎﻣﺞ ﺍﻟﺘﻘﺎﺭﻳﺮ )‪ ، (RPG‬ﻭﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ ﻹﻧﺘﺎﺝ ﺗﻘﺎﺭﻳﺮ‬
‫ﺍﻷﻋﻤﺎﻝ ؛ﺇﻟﻰ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﺒﺮﻣﺠﺔ ﺗﻠﻘﺎﺉﻴﺎً )‪ ، (APT‬ﻭﺍﻟﺘﻲ ﺗﺴُﺘﺨﺪﻡ ﻟﺘﻮﺟﻴﻪ ﺃﺩﻭﺍﺕ ﺍﻵﻟﺔ ﺍﻟﻘﺎﺑﻠﺔ‬
‫ﻟﻠﺒﺮﻣﺠﺔ ؛ﺇﻟﻰ ﻧﻈﺎﻡ ﻣﺤﺎﻛﺎﺓ ﺍﻷﻏﺮﺍﺽ ﺍﻟﻌﺎﻣﺔ )‪ ، (GPSS‬ﻭﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ ﻟﻤﺤﺎﻛﺎﺓ ﺍﻷﻧﻈﻤﺔ‪ .‬ﻫﺬﺍ‬
‫ﺍﻟﻜﺘﺎﺏﻻ ﻳﻨﺎﻗﺶ‬
‫‪23‬‬ ‫‪1.7‬ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‬

‫ﺍﻟﻠﻐﺎﺕﺫﺍﺕ ﺍﻷﻏﺮﺍﺽ ﺍﻟﺨﺎﺻﺔ ‪ ،‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺃﺳﺎﺳﺎً ﺇﻟﻰ ﻗﺎﺑﻠﻴﺘﻬﺎ ﻟﻠﺘﻄﺒﻴﻖ ﺍﻟﻀﻴﻖ ﻭﺻﻌﻮﺑﺔ‬
‫ﻣﻘﺎﺭﻧﺘﻬﺎﺑﺎﻟﻠﻐﺎﺕ ﺍﻷﺧﺮﻯ‪.‬‬

‫‪1.6‬ﻣﻘﺎﻳﻀﺎﺕ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‬


‫ﺗﻮﻓﺮﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺿﺤﺔ ﻓﻲ ﺍﻟﻘﺴﻢ ‪ 1.3‬ﺇﻃﺎﺭﺍً ﻟﺘﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‪ .‬ﻟﺴﻮء ﺍﻟﺤﻆ ‪،‬‬
‫ﻫﺬﺍﺍﻹﻃﺎﺭ ﻣﺘﻨﺎﻗﺾ ﻣﻊ ﻧﻔﺴﻪ‪ .‬ﻓﻲ ﻭﺭﻗﺘﻪ ﺍﻟﺜﺎﻗﺒﺔ ﺣﻮﻝ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ‪ ،‬ﺫﻛﺮ (‪ Hoare )1973‬ﺃﻥ‬
‫"ﻫﻨﺎﻙ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﻤﻬﻤﺔ ﻭﻟﻜﻦ ﺍﻟﻤﺘﻀﺎﺭﺑﺔ ‪ ،‬ﻭﺃﻥ ﺍﻟﺘﻮﻓﻴﻖ ﺑﻴﻨﻬﺎ ﻭﺍﻟﺮﺿﺎ ﻋﻨﻬﺎ ﻫﻲ‬
‫ﻣﻬﻤﺔﻫﻨﺪﺳﻴﺔ ﺭﺉﻴﺴﻴﺔ‪".‬‬

‫ﻣﻌﻴﺎﺭﺍﻥﻳﺘﻌﺎﺭﺿﺎﻥ ﻫﻤﺎ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﻭﺗﻜﻠﻔﺔ ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺘﻄﻠﺐ ﺗﻌﺮﻳﻒ‬
‫ﻟﻐﺔ‪ Java‬ﻓﺤﺺ ﺟﻤﻴﻊ ﺍﻟﻤﺮﺍﺟﻊ ﺇﻟﻰ ﻋﻨﺎﺻﺮ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻟﻠﺘﺄﻛﺪ ﻣﻦ ﺃﻥ ﺍﻟﻔﻬﺮﺱ ﺃﻭ ﺍﻟﻔﻬﺎﺭﺱ‬
‫ﻣﻮﺟﻮﺩﺓﻓﻲ ﻧﻄﺎﻗﺎﺗﻬﺎ ﺍﻟﻘﺎﻧﻮﻧﻴﺔ‪ .‬ﺗﻀﻴﻒ ﻫﺬﻩ ﺍﻟﺨﻄﻮﺓ ﻗﺪﺭﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺗﻜﻠﻔﺔ ﺗﻨﻔﻴﺬ ﺑﺮﺍﻣﺞ ‪Java‬‬
‫ﺍﻟﺘﻲﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﻤﺮﺍﺟﻊ ﻟﻌﻨﺎﺻﺮ ﺍﻟﻤﺼﻔﻮﻓﺔ‪ .‬ﻻ ﺗﺘﻄﻠﺐ ﻟﻐﺔ ‪ C‬ﻓﺤﺺ ﻧﻄﺎﻕ‬
‫ﺍﻟﻔﻬﺮﺱ ‪،‬ﻟﺬﻟﻚ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺑﺮﺍﻣﺞ ‪ C‬ﺑﺸﻜﻞ ﺃﺳﺮﻉ ﻣﻦ ﺑﺮﺍﻣﺞ ‪ Java‬ﺍﻟﻤﻜﺎﻓﺉﺔ ﻟﻐﻮﻳﺎً ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ‬
‫ﻣﻦﺃﻥ ﺑﺮﺍﻣﺞ ‪ Java‬ﺃﻛﺜﺮ ﻣﻮﺛﻮﻗﻴﺔ‪ .‬ﻗﺎﻡ ﻣﺼﻤﻤﻮ ‪ Java‬ﺑﺘﺒﺎﺩﻝ ﻛﻔﺎءﺓ ﺍﻟﺘﻨﻔﻴﺬ ﻣﻦ ﺃﺟﻞ ﺍﻟﻤﻮﺛﻮﻗﻴﺔ‪.‬‬

‫ﻛﻤﺜﺎﻝﺁﺧﺮ ﻋﻠﻰ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﻤﺘﻀﺎﺭﺑﺔ ﺍﻟﺘﻲ ﺗﺆﺩﻱ ﻣﺒﺎﺷﺮﺓ ﺇﻟﻰ ﻣﻘﺎﻳﻀﺎﺕ ﺍﻟﺘﺼﻤﻴﻢ ‪ ،‬ﺿﻊ‬
‫ﻓﻲﺍﻋﺘﺒﺎﺭﻙ ﺣﺎﻟﺔ ‪ .APL‬ﻳﺘﻀﻤﻦ ‪ APL‬ﻣﺠﻤﻮﻋﺔ ﻗﻮﻳﺔ ﻣﻦ ﺍﻟﻌﻮﺍﻣﻞ ﻟﻤﻌﺎﻣﻼﺕ ﺍﻟﺼﻔﻴﻒ‪.‬‬
‫ﺑﺴﺒﺐﺍﻟﻌﺪﺩ ﺍﻟﻜﺒﻴﺮ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ‪ ،‬ﻛﺎﻥ ﻻﺑﺪ ﻣﻦ ﺗﻀﻤﻴﻦ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺮﻣﻮﺯ ﺍﻟﺠﺪﻳﺪﺓ ﻓﻲ‬
‫‪ APL‬ﻟﺘﻤﺜﻴﻞ ﺍﻟﻤﺸﻐﻠﻴﻦ‪ .‬ﺃﻳﻀﺎً ‪ ،‬ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻋﻮﺍﻣﻞ ﺗﺸﻐﻴﻞ ‪ APL‬ﻓﻲ ﺗﻌﺒﻴﺮ‬
‫ﻭﺍﺣﺪﻃﻮﻳﻞ ﻭﻣﻌﻘﺪ‪ .‬ﺇﺣﺪﻯ ﻧﺘﺎﺉﺞ ﻫﺬﻩ ﺍﻟﺪﺭﺟﺔ ﺍﻟﻌﺎﻟﻴﺔ ﻣﻦ ﺍﻟﺘﻌﺒﻴﺮﻳﺔ ﻫﻲ ﺃﻧﻪ ﺑﺎﻟﻨﺴﺒﺔ‬
‫ﻟﻠﺘﻄﺒﻴﻘﺎﺕﺍﻟﺘﻲ ﺗﺘﻀﻤﻦ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻋﻤﻠﻴﺎﺕ ﺍﻟﻤﺼﻔﻮﻓﺔ ‪ ،‬ﻓﺈﻥ ‪ APL‬ﻗﺎﺑﻞ ﻟﻠﻜﺘﺎﺑﺔ ﺑﺸﻜﻞ ﻛﺒﻴﺮ‪.‬‬
‫ﻓﻲﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﻗﺪﺭ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺤﺴﺎﺑﺎﺕ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﺻﻐﻴﺮ ﺟﺪﺍً‪ .‬ﻧﺘﻴﺠﺔ ﺃﺧﺮﻯ ﻫﻲ ﺃﻥ‬
‫ﺑﺮﺍﻣﺞ‪ APL‬ﻟﺪﻳﻬﺎ ﻗﺎﺑﻠﻴﺔ ﻗﺮﺍءﺓ ﺿﻌﻴﻔﺔ ﻟﻠﻐﺎﻳﺔ‪ .‬ﻳﻤﺘﻠﻚ ﺍﻟﺘﻌﺒﻴﺮ ﺍﻟﻤﻀﻐﻮﻁ ﻭﺍﻟﻤﻮﺟﺰ ﺟﻤﺎﻻً ﺭﻳﺎﺿﻴﺎً‬
‫ﻣﻌﻴﻨﺎًﻭﻟﻜﻦ ﻳﺼﻌﺐ ﻋﻠﻰ ﺃﻱ ﺷﺨﺺ ﺁﺧﺮ ﻏﻴﺮ ﺍﻟﻤﺒﺮﻣﺞ ﻓﻬﻤﻪ‪ .‬ﻻﺣﻆ ﺍﻟﻤﺆﻟﻒ ﺍﻟﺸﻬﻴﺮ ﺩﺍﻧﻴﺎﻝ‬
‫ﻣﻜﺮﺍﻛﻴﻦ)‪ (1970‬ﺫﺍﺕ ﻣﺮﺓ ﺃﻧﻪ ﺍﺳﺘﻐﺮﻕ ﺃﺭﺑﻊ ﺳﺎﻋﺎﺕ ﻟﻘﺮﺍءﺓ ﻭﻓﻬﻢ ﺑﺮﻧﺎﻣﺞ ‪ APL‬ﺍﻟﻤﻜﻮﻥ ﻣﻦ‬
‫ﺃﺭﺑﻌﺔﺃﺳﻄﺮ‪ .‬ﻗﺎﻡ ﻣﺼﻤﻢ ‪ APL‬ﺑﺎﻟﺘﺪﺍﻭﻝ ﻓﻲ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻟﻠﻜﺘﺎﺑﺔ‪.‬‬

‫ﺍﻟﺼﺮﺍﻉﺑﻴﻦ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﻫﻮ ﺷﺎﺉﻊ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‪ .‬ﻳﻤﻜﻦ ﻣﻌﺎﻟﺠﺔ‬


‫ﻣﺆﺷﺮﺍﺕ‪ ++ C‬ﺑﻌﺪﺓ ﻃﺮﻕ ‪ ،‬ﻣﻤﺎ ﻳﺪﻋﻢ ﻣﻌﺎﻟﺠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺮﻧﺔ ﻟﻠﻐﺎﻳﺔ‪ .‬ﺑﺴﺒﺐ ﻣﺸﺎﻛﻞ‬
‫ﺍﻟﻤﻮﺛﻮﻗﻴﺔﺍﻟﻤﺤﺘﻤﻠﺔ ﻣﻊ ﺍﻟﻤﺆﺷﺮﺍﺕ ‪ ،‬ﻟﻢ ﻳﺘﻢ ﺗﻀﻤﻴﻨﻬﺎ ﻓﻲ ‪.Java‬‬

‫ﺗﻜﺜﺮﺍﻷﻣﺜﻠﺔ ﻋﻠﻰ ﺍﻟﺘﻌﺎﺭﺽ ﺑﻴﻦ ﻣﻌﺎﻳﻴﺮ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ )ﻭﺍﻟﺘﻘﻴﻴﻢ( ؛ ﺑﻌﻀﻬﺎ ﺧﻔﻲ ﻭﺍﻟﺒﻌﺾ‬
‫ﺍﻵﺧﺮﻭﺍﺿﺢ‪ .‬ﻟﺬﻟﻚ ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻣﻬﻤﺔ ﺍﺧﺘﻴﺎﺭ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻭﺍﻟﻤﻴﺰﺍﺕ ﻋﻨﺪ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ‬
‫ﺗﺘﻄﻠﺐﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻨﺎﺯﻻﺕ ﻭﺍﻟﻤﻔﺎﺿﻼﺕ‪.‬‬

‫‪1.7‬ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‬
‫ﻛﻤﺎﻫﻮ ﻣﻮﺿﺢ ﻓﻲ ﺍﻟﻘﺴﻢ ‪ ، 1.4.1‬ﻓﺈﻥ ﺍﺛﻨﻴﻦ ﻣﻦ ﺍﻟﻤﻜﻮﻧﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﻜﻤﺒﻴﻮﺗﺮ ﻫﻤﺎ ﺍﻟﺬﺍﻛﺮﺓ‬
‫ﺍﻟﺪﺍﺧﻠﻴﺔﻭﻣﻌﺎﻟﺠﻬﺎ‪ .‬ﺗﺴﺘﺨﺪﻡ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﺪﺍﺧﻠﻴﺔ ﻟﺘﺨﺰﻳﻦ ﺍﻟﺒﺮﺍﻣﺞ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ‪ .‬ﺍﻟﻤﻌﺎﻟﺞ ﻋﺒﺎﺭﺓ ﻋﻦ‬
‫ﻣﺠﻤﻮﻋﺔﻣﻦ ﺍﻟﺪﻭﺍﺉﺮ ﺍﻟﺘﻲ ﺗﻮﻓﺮ‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪24‬‬

‫ﺇﺩﺭﺍﻙﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ ‪ ،‬ﺃﻭ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻵﻟﺔ ‪ ،‬ﻣﺜﻞ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ‬


‫ﻭﺍﻟﻤﻨﻄﻘﻴﺔ‪.‬ﻓﻲ ﻣﻌﻈﻢ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪ ،‬ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺑﻌﺾ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰ‬
‫ﺃﺣﻴﺎﻧﺎًﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻜﻠﻴﺔ ‪ ،‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻹﺭﺷﺎﺩﺍﺕ ﺗﺴﻤﻰ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺪﻗﻴﻘﺔ ‪،‬‬
‫ﻭﺍﻟﺘﻲﻳﺘﻢ ﺗﺤﺪﻳﺪﻫﺎ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺃﻗﻞ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﺒﺮﺍﻣﺞ ﻻ ﺗﺮُﻯ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺪﻗﻴﻘﺔ ﻣﻄﻠﻘﺎً ‪،‬‬
‫ﻓﻠﻦﺗﺘﻢ ﻣﻨﺎﻗﺸﺘﻬﺎ ﺑﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻫﻨﺎ‪.‬‬

‫ﻟﻐﺔﺍﻵﻟﺔ ﻟﻠﻜﻤﺒﻴﻮﺗﺮ ﻫﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺨﺎﺻﺔ ﺑﻪ‪ .‬ﻓﻲ ﺣﺎﻟﺔ ﻋﺪﻡ ﻭﺟﻮﺩ ﺑﺮﺍﻣﺞ ﺩﺍﻋﻤﺔ‬
‫ﺃﺧﺮﻯ ‪،‬ﻓﺈﻥ ﻟﻐﺔ ﺍﻵﻟﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻮﺣﻴﺪﺓ ﺍﻟﺘﻲ "ﺗﻔﻬﻤﻬﺎ" ﻣﻌﻈﻢ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪.‬‬
‫ﻣﻦﺍﻟﻨﺎﺣﻴﺔ ﺍﻟﻨﻈﺮﻳﺔ ‪ ،‬ﻳﻤﻜﻦ ﺗﺼﻤﻴﻢ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﺑﻨﺎﺅﻩ ﺑﻠﻐﺔ ﻣﻌﻴﻨﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻛﻠﻐﺔ ﺍﻵﻟﺔ‬
‫ﺍﻟﺨﺎﺻﺔﺑﻪ ‪ ،‬ﻭﻟﻜﻨﻪ ﺳﻴﻜﻮﻥ ﻣﻌﻘﺪﺍً ﻭﻣﻜﻠﻔﺎً ﻟﻠﻐﺎﻳﺔ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﺳﻴﻜﻮﻥ ﻏﻴﺮ ﻣﺮﻥ ﻟﻠﻐﺎﻳﺔ ‪،‬‬
‫ﻷﻧﻪﺳﻴﻜﻮﻥ ﻣﻦ ﺍﻟﺼﻌﺐ )ﻭﻟﻜﻦ ﻟﻴﺲ ﻣﻦ ﺍﻟﻤﺴﺘﺤﻴﻞ( ﺍﺳﺘﺨﺪﺍﻣﻪ ﻣﻊ ﻟﻐﺎﺕ ﺃﺧﺮﻯ ﻋﺎﻟﻴﺔ‬
‫ﺍﻟﻤﺴﺘﻮﻯ‪.‬ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺧﻴﺎﺭ ﺗﺼﻤﻴﻢ ﺍﻟﻤﺎﻛﻴﻨﺔ ﺍﻷﻛﺜﺮ ﻋﻤﻠﻴﺔ ﻓﻲ ﺍﻷﺟﻬﺰﺓ ﺑﻠﻐﺔ ﻣﻨﺨﻔﻀﺔ ﺍﻟﻤﺴﺘﻮﻯ‬
‫ﻟﻠﻐﺎﻳﺔﺗﻮﻓﺮ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺒﺪﺍﺉﻴﺔ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﺍﻟﻤﻄﻠﻮﺑﺔ ﻭﺗﺘﻄﻠﺐ ﺑﺮﻧﺎﻣﺞ ﻧﻈﺎﻡ ﻹﻧﺸﺎء ﻭﺍﺟﻬﺔ‬
‫ﻟﻠﺒﺮﺍﻣﺞﺑﻠﻐﺎﺕ ﺫﺍﺕ ﻣﺴﺘﻮﻯ ﺃﻋﻠﻰ‪.‬‬

‫ﻻﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻧﻈﺎﻡ ﺗﻄﺒﻴﻖ ﺍﻟﻠﻐﺔ ﻫﻮ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻮﺣﻴﺪ ﺍﻟﻤﻮﺟﻮﺩ ﻋﻠﻰ ﺟﻬﺎﺯ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪.‬‬
‫ﻣﻄﻠﻮﺏﺃﻳﻀﺎً ﻣﺠﻤﻮﻋﺔ ﻛﺒﻴﺮﺓ ﻣﻦ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﺗﺴﻤﻰ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻮﻓﺮ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻷﻭﻟﻴﺔ‬
‫ﺫﺍﺕﺍﻟﻤﺴﺘﻮﻯ ﺍﻷﻋﻠﻰ ﻣﻦ ﺗﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑﻠﻐﺔ ﺍﻵﻟﺔ‪ .‬ﺗﻮﻓﺮ ﻫﺬﻩ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻷﻭﻟﻴﺔ ﺇﺩﺍﺭﺓ ﻣﻮﺍﺭﺩ‬
‫ﺍﻟﻨﻈﺎﻡ ‪،‬ﻭﻋﻤﻠﻴﺎﺕ ﺍﻹﺩﺧﺎﻝ ﻭﺍﻹﺧﺮﺍﺝ ‪ ،‬ﻭﻧﻈﺎﻡ ﺇﺩﺍﺭﺓ ﺍﻟﻤﻠﻔﺎﺕ ‪ ،‬ﻭﻣﺤﺮﺭﻱ ﺍﻟﻨﺼﻮﺹ ﻭ ‪ /‬ﺃﻭ‬
‫ﺍﻟﺒﺮﺍﻣﺞ ‪،‬ﻭﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻷﺧﺮﻯ ﺍﻟﻤﻄﻠﻮﺑﺔ ﺑﺸﻜﻞ ﺷﺎﺉﻊ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﺃﻧﻈﻤﺔ‬
‫ﺗﻨﻔﻴﺬﺍﻟﻠﻐﺔ ﺗﺤﺘﺎﺝ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻣﺮﺍﻓﻖ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ‪ ،‬ﻓﺈﻧﻬﺎ ﺗﺘﻔﺎﻋﻞ ﻣﻊ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ‬
‫ﺑﺪﻻ ًﻣﻦ ﺍﻟﺘﻌﺎﻣﻞ ﺍﻟﻤﺒﺎﺷﺮ ﻣﻊ ﺍﻟﻤﻌﺎﻟﺞ )ﺑﻠﻐﺔ ﺍﻵﻟﺔ(‪.‬‬

‫ﻳﺘﻢﻭﺿﻊ ﺗﻄﺒﻴﻘﺎﺕ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻭﺍﻟﻠﻐﺔ ﻓﻮﻕ ﻭﺍﺟﻬﺔ ﻟﻐﺔ ﺍﻵﻟﺔ ﻟﻠﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﻳﻤﻜﻦ ﺍﻋﺘﺒﺎﺭ‬
‫ﻫﺬﻩﺍﻟﻄﺒﻘﺎﺕ ﺑﻤﺜﺎﺑﺔ ﺃﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ ﺍﻓﺘﺮﺍﺿﻴﺔ ‪ ،‬ﻣﻤﺎ ﻳﻮﻓﺮ ﻭﺍﺟﻬﺎﺕ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺑﻤﺴﺘﻮﻳﺎﺕ‬
‫ﺃﻋﻠﻰ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻮﻓﺮ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻭﻣﺘﺮﺟﻢ ﻟﻐﺔ ﺳﻲ ﺣﺎﺳﻮﺏ ﺳﻲ ﻇﺎﻫﺮﻱ‪ .‬ﻣﻊ‬
‫ﺑﺮﺍﻣﺞﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ ﺍﻷﺧﺮﻯ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺼﺒﺢ ﺍﻵﻟﺔ ﺃﻧﻮﺍﻋﺎً ﺃﺧﺮﻯ ﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﺍﻻﻓﺘﺮﺍﺿﻴﺔ‪.‬ﺗﻮﻓﺮ ﻣﻌﻈﻢ ﺃﻧﻈﻤﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ ﺍﻟﻤﺨﺘﻠﻔﺔ‪.‬‬
‫ﺗﺸﻜﻞﺑﺮﺍﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻃﺒﻘﺔ ﺃﺧﺮﻯ ﺃﻋﻠﻰ ﻃﺒﻘﺔ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ‪ .‬ﻳﻈﻬﺮ ﻋﺮﺽ‬
‫ﺍﻟﻄﺒﻘﺎﺕﻟﺠﻬﺎﺯ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﺍﻟﺸﻜﻞ ‪.1.2‬‬

‫ﻛﺎﻧﺖﺃﻧﻈﻤﺔ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺨﺎﺻﺔ ﺑﺄﻭﻝ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ‪ ،‬ﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻓﻲ‬
‫ﺃﻭﺍﺧﺮﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ‪ ،‬ﻣﻦ ﺑﻴﻦ ﺃﻛﺜﺮ ﺃﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺗﻌﻘﻴﺪﺍً ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ‪.‬‬
‫ﻓﻲﺍﻟﺴﺘﻴﻨﻴﺎﺕ ‪ ،‬ﺑﺬُﻟﺖ ﺟﻬﻮﺩ ﺑﺤﺜﻴﺔ ﻣﻜﺜﻔﺔ ﻟﻔﻬﻢ ﻭﺇﺿﻔﺎء ﺍﻟﻄﺎﺑﻊ ﺍﻟﺮﺳﻤﻲ ﻋﻠﻰ ﻋﻤﻠﻴﺔ ﺇﻧﺸﺎء‬
‫ﻫﺬﻩﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻠﻐﻮﻳﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ‪ .‬ﻛﺎﻥ ﺃﻛﺒﺮ ﻧﺠﺎﺡ ﻟﻬﺬﻩ ﺍﻟﺠﻬﻮﺩ ﻓﻲ ﻣﺠﺎﻝ ﺗﺤﻠﻴﻞ ﺍﻟﻨﺤﻮ ‪،‬‬
‫ﻭﻳﺮﺟﻊﺫﻟﻚ ﺃﺳﺎﺳﺎً ﺇﻟﻰ ﺃﻥ ﻫﺬﺍ ﺍﻟﺠﺰء ﻣﻦ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻨﻔﻴﺬ ﻫﻮ ﺗﻄﺒﻴﻖ ﻷﺟﺰﺍء ﻣﻦ ﻧﻈﺮﻳﺔ ﺍﻷﻭﺗﻮﻣﺎﺗﺎ‬
‫ﻭﻧﻈﺮﻳﺔﺍﻟﻠﻐﺔ ﺍﻟﺮﺳﻤﻴﺔ ﺍﻟﺘﻲ ﺗﻢ ﻓﻬﻤﻬﺎ ﺟﻴﺪﺍً ﺑﻌﺪ ﺫﻟﻚ‪.‬‬

‫‪1.7.1‬ﺍﻟﺘﺠﻤﻴﻊ‬
‫ﻳﻤﻜﻦﺗﻨﻔﻴﺬ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺑﺄﻱ ﻣﻦ ﺍﻟﻄﺮﻕ ﺍﻟﻌﺎﻣﺔ ﺍﻟﺜﻼﺙ‪ .‬ﻣﻦ ﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ‪ ،‬ﻳﻤﻜﻦ ﺗﺮﺟﻤﺔ‬
‫ﺍﻟﺒﺮﺍﻣﺞﺇﻟﻰ ﻟﻐﺔ ﺍﻵﻟﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺗﻨﻔﻴﺬﻫﺎ ﻣﺒﺎﺷﺮﺓ ﻋﻠﻰ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﺃ‬
‫ﻣﺘﺮﺟﻢ‬
‫‪25‬‬ ‫‪1.7‬ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‬

‫ﺍﻟﻈﺎﻫﺮﻱ‪# C‬‬ ‫ﺍﻓﺘﺮﺍﺿﻲ‬ ‫ﺍﻟﺸﻜﻞ‪1.2‬‬


‫ﺣﺎﺳﻮﺏ‬ ‫‪VB .NET‬‬
‫ﺳﻲ ‪#‬‬
‫ﺣﺎﺳﻮﺏﺟﻢ‬
‫ﻣﺘﺮ‬ ‫ﻭﺍﺟﻬﺔﺫﺍﺕ ﻃﺒﻘﺎﺕ ﻟـ‬
‫ﺃﺟﻬﺰﺓﻛﻤﺒﻴﻮﺗﺮ ﺍﻓﺘﺮﺍﺿﻴﺔ ‪،‬‬
‫ﻳﺘﻢﺗﻮﻓﻴﺮﻫﺎ ﺑﻮﺍﺳﻄﺔ ﻧﻈﺎﻡ‬
‫ﺍﻓﺘﺮﺍﺿﻲ‬
‫ﻣﺨﻄﻂ‬ ‫ﻛﻤﺒﻴﻮﺗﺮﻧﻤﻮﺫﺟﻲ‬
‫ﺣﺎﺳﻮﺏ‬ ‫‪.‬ﺷﺒﻜﺔ‬
‫ﺷﺎﺉﻊ‬
‫‪...‬‬ ‫ﻟﻐﺔ‬
‫ﻣﺨﻄﻂ‬ ‫ﻣﺪﺓﺍﻟﻌﺮﺽ‬ ‫ﺍﻓﺘﺮﺍﺿﻲ‬
‫ﻣﺘﺮﺟﻢ‬ ‫ﺝ‬
‫ﺣﺎﺳﻮﺏ‬
‫ﻧﻈﺎﻡﺍﻟﺘﺸﻐﻴﻞ‬ ‫ﺝ‬
‫ﻣﺘﺮﺟﻢ‬
‫ﺍﻟﺘﺸﻐﻴﻞ‬
‫ﻧﻈﺎﻡ‬ ‫ﺗﻌﻠﻴﻤﺔﻛﻠﻴﺔ‬
‫ﻣﺘﺮﺟﻢ‬ ‫ﺟﺎﻓﺎ‬
‫ﻳﺄﻣﺮ‬
‫ﻣﺘﺮﺟﻢ‬
‫ﻣﺘﺮﺟﻢ‬
‫‪T‬‬
‫‪.NE‬‬
‫ﻣﺘﺮﺟ ‪VB‬‬
‫ﻢ‬
‫ﻋﺎﺭﻳﺔ‬
‫ﺁﻟﺔ‬ ‫ﺟﺎﻓﺎﺍﻻﻓﺘﺮﺍﺿﻴﺔ‬ ‫ﺟﺎﻓﺎﺍﻻﻓﺘﺮﺍﺿﻴﺔ‬
‫ﺁﻟﺔ‬ ‫ﺣﺎﺳﻮﺏ‬

‫ﺍﻟﻤﺠﻤﻊ‬

‫ﺁﺩﺍ‬
‫ﻣﺘﺮﺟﻢ‬

‫ﺍﻓﺘﺮﺍﺿﻲ‬
‫ﺣﺸَﺪ‬ ‫‪...‬‬
‫ﻟﻐﺔ‬
‫ﺣﺎﺳﻮﺏ‬ ‫ﺍﻓﺘﺮﺍﺿﻲ‬
‫ﺁﺩﺍ‬
‫ﺣﺎﺳﻮﺏ‬

‫ﺗﻄﺒﻴﻖﻭﻳﺘﻤﺘﻊ ﺑﻤﻴﺰﺓ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺴﺮﻳﻊ ﻟﻠﺒﺮﻧﺎﻣﺞ ﺑﻤﺠﺮﺩ ﺍﻛﺘﻤﺎﻝ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺮﺟﻤﺔ‪ .‬ﻳﺘﻢ ﺗﻨﻔﻴﺬ‬
‫ﻣﻌﻈﻢﺗﻄﺒﻴﻘﺎﺕ ﺍﻹﻧﺘﺎﺝ ﻟﻠﻐﺎﺕ ‪ ،‬ﻣﺜﻞ ‪ C‬ﻭ ‪ COBOL‬ﻭ ‪ ++ C‬ﻭ ‪ ، Ada‬ﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﺘﺮﺟﻤﻴﻦ‪.‬‬

‫ﺍﻟﻠﻐﺔﺍﻟﺘﻲ ﻳﺘﺮﺟﻤﻬﺎ ﺍﻟﻤﺘﺮﺟﻢ ﺗﺴﻤﻰﻟﻐﺔ ﺍﻟﻤﺼﺪﺭ‪ .‬ﺗﺘﻢ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻭﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﻋﻠﻰﻋﺪﺓ ﻣﺮﺍﺣﻞ ‪ ،‬ﻭﺃﻫﻤﻬﺎ ﻣﺒﻴﻦ ﻓﻲ ﺍﻟﺸﻜﻞ ‪.1.3‬‬

‫ﻳﻘﻮﻡﺍﻟﻤﺤﻠﻞ ﺍﻟﻤﻌﺠﻤﻲ ﺑﺘﺠﻤﻴﻊ ﺃﺣﺮﻑ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﺼﺪﺭ ﻓﻲ ﻭﺣﺪﺍﺕ ﻣﻌﺠﻤﻴﺔ‪ .‬ﺍﻟﻮﺣﺪﺍﺕ‬


‫ﺍﻟﻤﻌﺠﻤﻴﺔﻟﻠﺒﺮﻧﺎﻣﺞ ﻫﻲ ﺍﻟﻤﻌﺮﻓﺎﺕ ‪ ،‬ﻭﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺨﺎﺻﺔ ‪ ،‬ﻭﺍﻟﻤﺸﻐﻼﺕ ‪ ،‬ﻭﺭﻣﻮﺯ ﺍﻟﺘﺮﻗﻴﻢ‪.‬‬
‫ﻳﺘﺠﺎﻫﻞﺍﻟﻤﺤﻠﻞ ﺍﻟﻤﻌﺠﻤﻲ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﺼﺪﺭ ﻷﻥ ﺍﻟﻤﺘﺮﺟﻢ ﻟﻴﺲ ﻟﻪ ﺃﻱ ﻓﺎﺉﺪﺓ‪.‬‬

‫ﻳﺄﺧﺬﻣﺤﻠﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﻤﻌﺠﻤﻴﺔ ﻣﻦ ﻣﺤﻠﻞ ﺍﻟﻤﻌﺠﻢ ﻭﻳﺴﺘﺨﺪﻣﻬﺎ ﻟﺒﻨﺎء ﻫﻴﺎﻛﻞ‬
‫ﻫﺮﻣﻴﺔﺗﺴﻤﻰﺗﺤﻠﻴﻞ ﺍﻷﺷﺠﺎﺭ‪ .‬ﺗﻤﺜﻞ ﺃﺷﺠﺎﺭ ﺍﻟﺘﺤﻠﻴﻞ ﻫﺬﻩ ﺍﻟﺒﻨﻴﺔ ﺍﻟﻨﺤﻮﻳﺔ ﻟﻠﺒﺮﻧﺎﻣﺞ‪ .‬ﻓﻲ ﻛﺜﻴﺮ‬
‫ﻣﻦﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻻ ﻳﺘﻢ ﺇﻧﺸﺎء ﻫﻴﻜﻞ ﺷﺠﺮﺓ ﺗﺤﻠﻴﻞ ﻓﻌﻠﻲ ؛ ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﻳﺘﻢ ﺇﻧﺸﺎء ﺍﻟﻤﻌﻠﻮﻣﺎﺕ‬
‫ﺍﻟﻤﻄﻠﻮﺑﺔﻟﺒﻨﺎء ﺷﺠﺮﺓ ﻭﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﺒﺎﺷﺮﺓ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻛﻞ ﻣﻦ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﻤﻌﺠﻤﻴﺔ ﻭﺃﺷﺠﺎﺭ‬
‫ﺍﻟﺘﺤﻠﻴﻞﻓﻲ ﺍﻟﻔﺼﻞ ‪ .3‬ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻤﻌﺠﻤﻲ ﻭﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ‪ ،‬ﺃﻭ ﺍﻟﺘﺤﻠﻴﻞ ‪ ،‬ﺗﻤﺖ‬
‫ﻣﻨﺎﻗﺸﺘﻬﻤﺎﻓﻲ ﺍﻟﻔﺼﻞ ‪.4‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪26‬‬

‫ﺍﻟﺸﻜﻞ‪1.3‬‬
‫ﻣﺼﺪﺭ‬
‫ﺑﺮﻧﺎﻣﺞ‬ ‫ﻋﻤﻠﻴﺔﺍﻟﺘﺠﻤﻴﻊ‬

‫ﻣﻌﺠﻤﻲ‬
‫ﻣﺤﻠﻞ‬

‫ﺍﻟﻮﺣﺪﺍﺕﺍﻟﻤﻌﺠﻤﻴﺔ‬

‫ﺑﻨﺎءﺍﻟﺠﻤﻠﺔ‬
‫ﻣﺤﻠﻞ‬

‫ﺗﺤﻠﻴﻞﺍﻷﺷﺠﺎﺭ‬

‫ﻣﺘﻮﺳﻂ‬
‫ﺗﺤﺴﻴﻦ‬ ‫ﻣﻮﻟﺪﺍﻷﻛﻮﺍﺩ‬ ‫ﺭﻣﺰ‬
‫)ﺧﻴﺎﺭﻱ(‬ ‫ﻭﺍﻟﺪﻻﻻﺕ‬ ‫ﻃﺎﻭﻟﺔ‬
‫ﻣﺤﻠﻞ‬

‫ﻣﺘﻮﺳﻂ‬
‫ﺷﻔﺮﺓ‬

‫ﺷﻔﺮﺓ‬
‫ﻣﻮﻟﺪﻛﻬﺮﺑﺎء‬

‫ﺁﻟﺔ‬
‫ﺍﺩﺧﺎﻝﺍﻟﺒﻴﺎﻧﺎﺕ‬ ‫ﻟﻐﺔ‬

‫ﺣﺎﺳﻮﺏ‬

‫ﻧﺘﺎﺉﺞ‬

‫ﻳﻨﺘﺞﻣﻨﺸﺊ ﺍﻟﺸﻔﺮﺓ ﺍﻟﻮﺳﻴﻄﺔ ﺑﺮﻧﺎﻣﺠﺎً ﺑﻠﻐﺔ ﻣﺨﺘﻠﻔﺔ ‪ ،‬ﺑﻤﺴﺘﻮﻯ ﻣﺘﻮﺳﻂ ﺑﻴﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﺍﻟﻤﺼﺪﺭﻭﺍﻟﻤﺨﺮﺝ ﺍﻟﻨﻬﺎﺉﻲ ﻟﻠﻤﺘﺮﺟﻢ‪ :‬ﺑﺮﻧﺎﻣﺞ ﻟﻐﺔ ﺍﻵﻟﺔ‪4.‬ﺗﺒﺪﻭ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻮﺳﻴﻄﺔ ﺃﺣﻴﺎﻧﺎً ﻣﺜﻞ ﻟﻐﺎﺕ‬
‫ﺍﻟﺘﺠﻤﻴﻊﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ‪ ،‬ﻭﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺗﻜﻮﻥ ﺃﺣﻴﺎﻧﺎً ﻟﻐﺎﺕ ﺗﺠﻤﻴﻊ ﻓﻌﻠﻴﺔ‪ .‬ﻓﻲ ﺣﺎﻻﺕ ﺃﺧﺮﻯ ‪ ،‬ﻳﻜﻮﻥ‬
‫ﺍﻟﺮﻣﺰﺍﻟﻮﺳﻴﻂ ﻋﻠﻰ ﻣﺴﺘﻮﻯ‬

‫‪.4‬ﻻﺣﻆ ﺃﻥ ﺍﻟﻜﻠﻤﺎﺕﺑﺮﻧﺎﻣﺞﻭﺷﻔﺮﺓﻏﺎﻟﺒﺎً ﻣﺎ ﺗﺴﺘﺨﺪﻡ ﺑﺎﻟﺘﺒﺎﺩﻝ‪.‬‬


‫‪27‬‬ ‫‪1.7‬ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‬

‫ﺇﻟﻰﺣﺪ ﻣﺎ ﺃﻋﻠﻰ ﻣﻦ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‪ .‬ﻳﻌﺘﺒﺮ ﺍﻟﻤﺤﻠﻞ ﺍﻟﺪﻻﻟﻲ ﺟﺰءﺍً ﻻ ﻳﺘﺠﺰﺃ ﻣﻦ ﻣﻨﺸﺊ ﺍﻟﺸﻔﺮﺓ‬
‫ﺍﻟﻮﺳﻴﻄﺔ‪.‬ﻳﺘﺤﻘﻖ ﺍﻟﻤﺤﻠﻞ ﺍﻟﺪﻻﻟﻲ ﻣﻦ ﺍﻷﺧﻄﺎء ‪ ،‬ﻣﺜﻞ ﺃﺧﻄﺎء ﺍﻟﻜﺘﺎﺑﺔ ‪ ،‬ﺍﻟﺘﻲ ﻳﺼﻌﺐ ‪ ،‬ﺇﻥ ﻟﻢ‬
‫ﻳﻜﻦﻣﻦ ﺍﻟﻤﺴﺘﺤﻴﻞ ‪ ،‬ﺍﻛﺘﺸﺎﻓﻬﺎ ﺃﺛﻨﺎء ﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ‪.‬‬

‫ﺍﻟﺘﺤﺴﻴﻦ ‪،‬ﺍﻟﺬﻱ ﻳﺤﺴﻦ ﺍﻟﺒﺮﺍﻣﺞ )ﻋﺎﺩﺓ ًﻓﻲ ﺇﺻﺪﺍﺭ ﺍﻟﻜﻮﺩ ﺍﻟﻮﺳﻴﻂ( ﻋﻦ ﻃﺮﻳﻖ ﺟﻌﻠﻬﺎ ﺃﺻﻐﺮ‬
‫ﺃﻭﺃﺳﺮﻉ ﺃﻭ ﻛﻠﻴﻬﻤﺎ ‪ ،‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻜﻮﻥ ﺟﺰءﺍً ﺍﺧﺘﻴﺎﺭﻳﺎً ﻣﻦ ﺍﻟﺘﺠﻤﻴﻊ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺑﻌﺾ ﺍﻟﻤﺠﻤﻌﻴﻦ‬
‫ﻏﻴﺮﻗﺎﺩﺭﻳﻦ ﻋﻠﻰ ﺍﻟﻘﻴﺎﻡ ﺑﺄﻱ ﺗﺤﺴﻴﻦ ﻛﺒﻴﺮ‪ .‬ﺳﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻟﻤﺘﺮﺟﻢ ﻓﻲ ﺍﻟﻤﻮﺍﻗﻒ‬
‫ﺍﻟﺘﻲﺗﻜﻮﻥ ﻓﻴﻬﺎ ﺳﺮﻋﺔ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﺘﺮﺟﻢ ﺃﻗﻞ ﺃﻫﻤﻴﺔ ﺑﻜﺜﻴﺮ ﻣﻦ ﺳﺮﻋﺔ ﺍﻟﺘﺮﺟﻤﺔ‪ .‬ﻣﺜﺎﻝ ﻋﻠﻰ‬
‫ﻣﺜﻞﻫﺬﺍ ﺍﻟﻤﻮﻗﻒ ﻫﻮ ﻣﺨﺘﺒﺮ ﺍﻟﺤﻮﺳﺒﺔ ﻟﻠﻤﺒﺮﻣﺠﻴﻦ ﺍﻟﻤﺒﺘﺪﺉﻴﻦ‪ .‬ﻓﻲ ﻣﻌﻈﻢ ﺍﻟﻤﻮﺍﻗﻒ ﺍﻟﺘﺠﺎﺭﻳﺔ‬
‫ﻭﺍﻟﺼﻨﺎﻋﻴﺔ ‪،‬ﺗﻜﻮﻥ ﺳﺮﻋﺔ ﺍﻟﺘﻨﻔﻴﺬ ﺃﻛﺜﺮ ﺃﻫﻤﻴﺔ ﻣﻦ ﺳﺮﻋﺔ ﺍﻟﺘﺠﻤﻴﻊ ‪ ،‬ﻟﺬﺍ ﻓﺈﻥ ﺍﻟﺘﺤﺴﻴﻦ ﺃﻣﺮ‬
‫ﻣﺮﻏﻮﺏﻓﻴﻪ ﺑﺸﻜﻞ ﺭﻭﺗﻴﻨﻲ‪ .‬ﻧﻈﺮﺍً ﻟﺼﻌﻮﺑﺔ ﺇﺟﺮﺍء ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﺘﺤﺴﻴﻦ ﻋﻠﻰ ﻟﻐﺔ ﺍﻵﻟﺔ ‪ ،‬ﻳﺘﻢ‬
‫ﺇﺟﺮﺍءﻣﻌﻈﻢ ﺍﻟﺘﺤﺴﻴﻦ ﻋﻠﻰ ﺍﻟﻜﻮﺩ ﺍﻟﻮﺳﻴﻂ‪.‬‬

‫ﻳﻘﻮﻡﻣﻨﺸﺊ ﺍﻟﻜﻮﺩ ﺑﺘﺮﺟﻤﺔ ﺇﺻﺪﺍﺭ ﺍﻟﻜﻮﺩ ﺍﻟﻮﺳﻴﻂ ﺍﻟﻤﺤﺴﻦ ﻟﻠﺒﺮﻧﺎﻣﺞ ﺇﻟﻰ ﺑﺮﻧﺎﻣﺞ ﻟﻐﺔ ﺁﻟﺔ‬
‫ﻣﻜﺎﻓﺊ‪.‬‬
‫ﻳﻌﻤﻞﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﻛﻘﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﺠﻤﻴﻊ‪ .‬ﺍﻟﻤﺤﺘﻮﻳﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻟﺠﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ‬
‫ﻫﻲﺍﻟﻨﻮﻉ ﻭﻣﻌﻠﻮﻣﺎﺕ ﺍﻟﺴﻤﺔ ﻟﻜﻞ ﺍﺳﻢ ﻣﻌﺮﻑ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻳﺘﻢ ﻭﺿﻊ ﻫﺬﻩ‬
‫ﺍﻟﻤﻌﻠﻮﻣﺎﺕﻓﻲ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﺑﻮﺍﺳﻄﺔ ﻣﺤﻠﻠﻲ ﺍﻟﻤﻌﺠﻢ ﻭﺍﻟﻨﺤﻮ ﻭﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺤﻠﻞ‬
‫ﺍﻟﺪﻻﻻﺕﻭﻣﻮﻟﺪ ﺍﻟﺸﻔﺮﺓ‪.‬‬

‫ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻟﻐﺔ ﺍﻵﻟﺔ ﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺘﺮﺟﻢ ﻳﻤﻜﻦ‬
‫ﺗﻨﻔﻴﺬﻫﺎﻣﺒﺎﺷﺮﺓ ﻋﻠﻰ ﺍﻷﺟﻬﺰﺓ ‪ ،‬ﺇﻻ ﺃﻧﻪ ﻳﺠﺐ ﺩﺍﺉﻤﺎً ﺗﺸﻐﻴﻠﻬﺎ ﻣﻊ ﺑﻌﺾ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ‬
‫ﺍﻷﺧﺮﻯ‪.‬ﺗﺘﻄﻠﺐ ﻣﻌﻈﻢ ﺑﺮﺍﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺃﻳﻀﺎً ﺑﺮﺍﻣﺞ ﻣﻦ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ‪ .‬ﻣﻦ ﺑﻴﻦ ﺃﻛﺜﺮ ﻫﺬﻩ‬
‫ﺍﻟﺒﺮﺍﻣﺞﺷﻴﻮﻋﺎً ﺑﺮﺍﻣﺞ ﺍﻹﺩﺧﺎﻝ ﻭﺍﻹﺧﺮﺍﺝ‪ .‬ﻳﻨﺸﺊ ﺍﻟﻤﺘﺮﺟﻢ ﺍﺳﺘﺪﻋﺎءﺍﺕ ﻟﺒﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ ﺍﻟﻤﻄﻠﻮﺑﺔ‬
‫ﻋﻨﺪﻣﺎﻳﺤﺘﺎﺟﻬﺎ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﻗﺒﻞ ﺃﻥ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺑﺮﺍﻣﺞ ﻟﻐﺔ ﺍﻵﻟﺔ ﺍﻟﺘﻲ ﻳﻨﺘﺠﻬﺎ ﺍﻟﻤﺘﺮﺟﻢ ‪،‬‬
‫ﻳﺠﺐﺇﻳﺠﺎﺩ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻄﻠﻮﺑﺔ ﻣﻦ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻭﺭﺑﻄﻬﺎ ﺑﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﺗﻘﻮﻡ ﻋﻤﻠﻴﺔ‬
‫ﺍﻟﺮﺑﻂﺑﺮﺑﻂ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺑﺒﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ ﻋﻦ ﻃﺮﻳﻖ ﻭﺿﻊ ﻋﻨﺎﻭﻳﻦ ﻧﻘﺎﻁ ﺩﺧﻮﻝ ﺑﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ‬
‫ﻓﻲﺍﻟﻤﻜﺎﻟﻤﺎﺕ ﺇﻟﻴﻬﺎ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﻳﻄُﻠﻖ ﺃﺣﻴﺎﻧﺎً ﻋﻠﻰ ﺭﻣﺰ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻭﺍﻟﻨﻈﺎﻡ ﻣﻌﺎً ﺍﺳﻢ‬
‫ﻣﻠﻒﻭﺣﺪﺓ ﺍﻟﺘﺤﻤﻴﻞ‪ ،‬ﺃﻭﺻﻮﺭﺓ ﻗﺎﺑﻠﺔ ﻟﻠﺘﻨﻔﻴﺬ‪ .‬ﺗﺴﻤﻰ ﻋﻤﻠﻴﺔ ﺗﺠﻤﻴﻊ ﺑﺮﺍﻣﺞ ﺍﻟﻨﻈﺎﻡ ﻭﺭﺑﻄﻬﺎ‬
‫ﺑﺒﺮﺍﻣﺞﺍﻟﻤﺴﺘﺨﺪﻡﺍﻟﺮﺑﻂ ﻭﺍﻟﺘﺤﻤﻴﻞ‪ ،‬ﺃﻭ ﻓﻲ ﺑﻌﺾ ﺍﻷﺣﻴﺎﻥ ﻓﻘﻂﺭﺑﻂ‪ .‬ﻳﺘﻢ ﺇﻧﺠﺎﺯﻩ ﺑﻮﺍﺳﻄﺔ‬
‫ﺑﺮﻧﺎﻣﺞﺃﻧﻈﻤﺔ ﻳﺴﻤﻰ ﺃﺭﺍﺑﻂ‪.‬‬

‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺑﺮﺍﻣﺞ ﺍﻷﻧﻈﻤﺔ ‪ ،‬ﻳﺠﺐ ﻏﺎﻟﺒﺎً ﺭﺑﻂ ﺑﺮﺍﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺑﺒﺮﺍﻣﺞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺘﻲ‬
‫ﺗﻢﺗﺠﻤﻴﻌﻬﺎ ﻣﺴﺒﻘﺎً ﻭﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺍﻟﻤﻜﺘﺒﺎﺕ‪ .‬ﻟﺬﻟﻚ ﻻ ﻳﺮﺑﻂ ﺍﻟﺮﺍﺑﻂ ﺑﺮﻧﺎﻣﺠﺎً ﻣﻌﻴﻨﺎً ﺑﺒﺮﺍﻣﺞ‬
‫ﺍﻟﻨﻈﺎﻡﻓﺤﺴﺐ ‪ ،‬ﺑﻞ ﻳﻤﻜﻨﻪ ﺃﻳﻀﺎً ﺭﺑﻄﻪ ﺑﺒﺮﺍﻣﺞ ﻣﺴﺘﺨﺪﻡ ﺃﺧﺮﻯ‪.‬‬

‫ﻋﺎﺩﺓ ًﻣﺎ ﺗﺤﺪﺩ ﺳﺮﻋﺔ ﺍﻻﺗﺼﺎﻝ ﺑﻴﻦ ﺫﺍﻛﺮﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻭﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﺨﺎﺹ ﺑﻪ ﺳﺮﻋﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪،‬‬
‫ﻷﻧﻪﻏﺎﻟﺒﺎً ﻣﺎ ﻳﻤﻜﻦ ﺗﻨﻔﻴﺬ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺑﺸﻜﻞ ﺃﺳﺮﻉ ﻣﻤﺎ ﻳﻤﻜﻦ ﻧﻘﻠﻬﺎ ﺇﻟﻰ ﺍﻟﻤﻌﺎﻟﺞ ﻟﻠﺘﻨﻔﻴﺬ‪ .‬ﻫﺬﺍ‬
‫ﺍﻻﺗﺼﺎﻝﻳﺴﻤﻰﻋﻨﻖ ﺍﻟﺰﺟﺎﺟﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ؛ ﻫﺬﺍ ﻫﻮ ﺍﻟﻌﺎﻣﻞ ﺍﻟﻤﺤﺪﺩ ﺍﻷﺳﺎﺳﻲ ﻓﻲ ﺳﺮﻋﺔ‬
‫ﺃﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻌﻤﺎﺭﻳﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ‪ .‬ﻛﺎﻥ ﻋﻨﻖ ﺯﺟﺎﺟﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ ﺃﺣﺪ ﺍﻟﺪﻭﺍﻓﻊ ﺍﻷﺳﺎﺳﻴﺔ‬
‫ﻟﻠﺒﺤﺚﻭﺍﻟﺘﻄﻮﻳﺮ ﻓﻲ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻮﺍﺯﻳﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪28‬‬

‫‪1.7.2‬ﺗﻔﺴﻴﺮ ﻧﻘﻲ‬
‫ﻳﻘﻊﺍﻟﺘﻔﺴﻴﺮ ﺍﻟﺨﺎﻟﺺ ﻓﻲ ﺍﻟﻄﺮﻑ ﺍﻵﺧﺮ )ﻣﻦ ﺍﻟﺘﺠﻤﻴﻊ( ﻟﻄﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﻣﻊ ﻫﺬﺍ ﺍﻟﻨﻬﺞ ‪ ،‬ﻳﺘﻢ‬
‫ﺗﻔﺴﻴﺮﺍﻟﺒﺮﺍﻣﺞ ﺑﻮﺍﺳﻄﺔ ﺑﺮﻧﺎﻣﺞ ﺁﺧﺮ ﻳﺴﻤﻰ ﻣﺘﺮﺟﻢ ‪ ،‬ﺑﺪﻭﻥ ﺗﺮﺟﻤﺔ ﻋﻠﻰ ﺍﻹﻃﻼﻕ‪ .‬ﻳﻌﻤﻞ ﺑﺮﻧﺎﻣﺞ‬
‫ﺍﻟﻤﺘﺮﺟﻢﺍﻟﻔﻮﺭﻱ ﻛﻤﺤﺎﻛﺎﺓ ﺑﺮﻣﺠﻴﺔ ﻵﻟﺔ ﺗﺘﻌﺎﻣﻞ ﺩﻭﺭﺓ ﺍﻟﺠﻠﺐ ﻭﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ﻣﻊ ﻋﺒﺎﺭﺍﺕ‬
‫ﺑﺮﻧﺎﻣﺞﺍﻟﻠﻐﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺑﺪﻻ ًﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻵﻟﺔ‪ .‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻣﺤﺎﻛﺎﺓ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻫﺬﻩ‬
‫ﺗﻮﻓﺮﺁﻟﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ ﻟﻠﻐﺔ‪.‬‬

‫ﻳﺘﻤﻴﺰﺍﻟﺘﻔﺴﻴﺮ ﺍﻟﺨﺎﻟﺺ ﺑﻤﻴﺰﺓ ﺍﻟﺴﻤﺎﺡ ﺑﺎﻟﺘﻨﻔﻴﺬ ﺍﻟﺴﻬﻞ ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﻋﻤﻠﻴﺎﺕ ﺗﺼﺤﻴﺢ‬


‫ﺍﻷﺧﻄﺎءﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺍﻟﻤﺼﺪﺭ ‪ ،‬ﻷﻥ ﺟﻤﻴﻊ ﺭﺳﺎﺉﻞ ﺧﻄﺄ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ ﻳﻤﻜﻦ ﺃﻥ ﺗﺸﻴﺮ ﺇﻟﻰ‬
‫ﻭﺣﺪﺍﺕﻋﻠﻰ ﻣﺴﺘﻮﻯ ﺍﻟﻤﺼﺪﺭ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺇﺫﺍ ﺗﻢ ﺍﻟﻌﺜﻮﺭ ﻋﻠﻰ ﻓﻬﺮﺱ ﻣﺼﻔﻮﻓﺔ ﺧﺎﺭﺝ‬
‫ﺍﻟﻨﻄﺎﻕ ‪،‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺸﻴﺮ ﺭﺳﺎﻟﺔ ﺍﻟﺨﻄﺄ ﺑﺴﻬﻮﻟﺔ ﺇﻟﻰ ﺳﻄﺮ ﺍﻟﻤﺼﺪﺭ ﻭﺍﺳﻢ ﺍﻟﻤﺼﻔﻮﻓﺔ‪ .‬ﻣﻦ ﻧﺎﺣﻴﺔ‬
‫ﺃﺧﺮﻯ ‪،‬ﻓﺈﻥ ﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﻟﻬﺎ ﻋﻴﺐ ﺧﻄﻴﺮ ﻳﺘﻤﺜﻞ ﻓﻲ ﺃﻥ ﺍﻟﺘﻨﻔﻴﺬ ﺃﺑﻄﺄ ﻣﻦ ‪ 10‬ﺇﻟﻰ ‪ 100‬ﻣﺮﺓ ﻣﻦ‬
‫ﺍﻷﻧﻈﻤﺔﺍﻟﻤﺘﺮﺟﻤﺔ‪ .‬ﺍﻟﻤﺼﺪﺭ ﺍﻷﺳﺎﺳﻲ ﻟﻬﺬﺍ ﺍﻟﺒﻂء ﻫﻮ ﻓﻚ ﺗﺸﻔﻴﺮ ﻋﺒﺎﺭﺍﺕ ﺍﻟﻠﻐﺔ ﻋﺎﻟﻴﺔ‬
‫ﺍﻟﻤﺴﺘﻮﻯ ‪،‬ﻭﺍﻟﺘﻲ ﺗﻌﺪ ﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ﺑﻜﺜﻴﺮ ﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ ﻟﻐﺔ ﺍﻵﻟﺔ )ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻗﺪ ﻳﻜﻮﻥ‬
‫ﻫﻨﺎﻙﻋﺒﺎﺭﺍﺕ ﺃﻗﻞ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﻛﻮﺩ ﺍﻵﻟﺔ ﺍﻟﻤﻜﺎﻓﺊ(‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﺑﻐﺾ‬
‫ﺍﻟﻨﻈﺮﻋﻦ ﻋﺪﺩ ﻣﺮﺍﺕ ﺗﻨﻔﻴﺬ ﺍﻟﻌﺒﺎﺭﺓ ‪ ،‬ﻳﺠﺐ ﻓﻚ ﺗﺸﻔﻴﺮﻫﺎ ﻓﻲ ﻛﻞ ﻣﺮﺓ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﺑﻴﺎﻥ ﻓﻚ‬
‫ﺍﻟﺘﺸﻔﻴﺮ ‪،‬‬

‫ﻋﻴﺐﺁﺧﺮ ﻟﻠﺘﻔﺴﻴﺮ ﺍﻟﺨﺎﻟﺺ ﻫﻮ ﺃﻧﻪ ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻄﻠﺐ ﻣﺴﺎﺣﺔ ﺃﻛﺒﺮ‪ .‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺍﻟﺒﺮﻧﺎﻣﺞ‬
‫ﺍﻟﻤﺼﺪﺭ ‪،‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﻣﻮﺟﻮﺩﺍً ﺃﺛﻨﺎء ﺍﻟﺘﻔﺴﻴﺮ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻗﺪ ﻳﺘﻢ ﺗﺨﺰﻳﻦ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﺍﻟﻤﺼﺪﺭ ﻓﻲ ﻧﻤﻮﺫﺝ ﻣﺼﻤﻢ ﻟﺴﻬﻮﻟﺔ ﺍﻟﻮﺻﻮﻝ ﻭﺍﻟﺘﻌﺪﻳﻞ ﺑﺪﻻ ًﻣﻦ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻟﺬﻱ ﻳﻮﻓﺮ‬
‫ﺍﻟﺤﺪﺍﻷﺩﻧﻰ ﻣﻦ ﺍﻟﺤﺠﻢ‪.‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺒﻜﺮﺓ ﺍﻟﺒﺴﻴﻄﺔ ﻓﻲ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ )‪ APL‬ﻭ ‪ SNOBOL‬ﻭ‬
‫‪ (LISP‬ﺗﻢ ﺗﻔﺴﻴﺮﻫﺎ ﺑﺤﺘﺔ ‪ ،‬ﺑﺤﻠﻮﻝ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ‪ ،‬ﻧﺎﺩﺭﺍً ﻣﺎ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﺍ ﺍﻟﻨﻬﺞ ﻓﻲ ﺍﻟﻠﻐﺎﺕ‬
‫ﻋﺎﻟﻴﺔﺍﻟﻤﺴﺘﻮﻯ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﻲ ﺍﻟﺴﻨﻮﺍﺕ ﺍﻷﺧﻴﺮﺓ ‪ ،‬ﺣﻘﻘﺖ ﺍﻟﺘﺮﺟﻤﺔ ﺍﻟﻔﻮﺭﻳﺔ ﻋﻮﺩﺓ ﻣﻬﻤﺔ ﻣﻊ‬
‫ﺑﻌﺾﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﻟﻠﻮﻳﺐ ‪ ،‬ﻣﺜﻞ ‪ JavaScript‬ﻭ ‪ ، PHP‬ﻭﺍﻟﺘﻲ ﺗﺴُﺘﺨﺪﻡ ﺍﻵﻥ ﻋﻠﻰ‬
‫ﻧﻄﺎﻕﻭﺍﺳﻊ‪ .‬ﺗﻈﻬﺮ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻔﺴﻴﺮ ﺍﻟﻨﻘﻲ ﻓﻲ ﺍﻟﺸﻜﻞ ‪.1.4‬‬

‫ﺍﻟﺸﻜﻞ‪1.4‬‬
‫ﻣﺼﺪﺭ‬
‫ﺑﺮﻧﺎﻣﺞ‬ ‫ﺗﻔﺴﻴﺮﻧﻘﻲ‬

‫ﺍﺩﺧﺎﻝﺍﻟﺒﻴﺎﻧﺎﺕ‬

‫ﻣﺘﺮﺟﻢ‬

‫ﻧﺘﺎﺉﺞ‬
‫‪29‬‬ ‫‪1.7‬ﻃﺮﻕ ﺍﻟﺘﻨﻔﻴﺬ‬

‫‪1.7.3‬ﺃﻧﻈﻤﺔ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﻤﺨﺘﻠﻄﺔ‬


‫ﺗﻌﺘﺒﺮﺑﻌﺾ ﺃﻧﻈﻤﺔ ﺗﻄﺒﻴﻖ ﺍﻟﻠﻐﺔ ﺑﻤﺜﺎﺑﺔ ﺣﻞ ﻭﺳﻂ ﺑﻴﻦ ﺍﻟﻤﺠﻤﻌﻴﻦ ﻭﺍﻟﻤﺘﺮﺟﻤﻴﻦ ﺍﻟﻔﻮﺭﻳﻴﻦ ؛‬
‫ﻳﺘﺮﺟﻤﻮﻥﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻠﻐﻮﻳﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺇﻟﻰ ﻟﻐﺔ ﻣﺘﻮﺳﻄﺔ ﻣﺼﻤﻤﺔ ﻟﻠﺴﻤﺎﺡ ﺑﺎﻟﺘﺮﺟﻤﺔ ﺍﻟﻔﻮﺭﻳﺔ‬
‫ﺑﺴﻬﻮﻟﺔ‪.‬ﻫﺬﻩ ﺍﻟﻄﺮﻳﻘﺔ ﺃﺳﺮﻉ ﻣﻦ ﺍﻟﺘﻔﺴﻴﺮ ﺍﻟﺨﺎﻟﺺ ﻷﻥ ﻋﺒﺎﺭﺍﺕ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺼﺪﺭ ﻳﺘﻢ ﻓﻚ‬
‫ﺗﺸﻔﻴﺮﻫﺎﻣﺮﺓ ﻭﺍﺣﺪﺓ ﻓﻘﻂ‪ .‬ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻟﺘﻄﺒﻴﻘﺎﺕﺃﻧﻈﻤﺔ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﻬﺠﻴﻨﺔ‪.‬‬

‫ﺍﻟﻌﻤﻠﻴﺔﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﻧﻈﺎﻡ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﻤﺨﺘﻠﻂ ﻣﻮﺿﺤﺔ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ .1.5‬ﺑﺪﻻ ًﻣﻦ ﺗﺮﺟﻤﺔ‬


‫ﻛﻮﺩﺍﻟﻠﻐﺔ ﺍﻟﻮﺳﻴﻄﺔ ﺇﻟﻰ ﻛﻮﺩ ﺍﻵﻟﺔ ‪ ،‬ﻓﺈﻧﻪ ﺑﺒﺴﺎﻃﺔ ﻳﻔﺴﺮ ﺍﻟﻜﻮﺩ ﺍﻟﻮﺳﻴﻂ‪.‬‬

‫ﺍﻟﺸﻜﻞ‪1.5‬‬
‫ﻣﺼﺪﺭ‬
‫ﺑﺮﻧﺎﻣﺞ‬ ‫ﺗﻨﻔﻴﺬﻫﺠﻴﻦ‬
‫ﻧﻈﺎﻡ‬

‫ﻣﻌﺠﻤﻲ‬
‫ﻣﺤﻠﻞ‬

‫ﺍﻟﻮﺣﺪﺍﺕﺍﻟﻤﻌﺠﻤﻴﺔ‬

‫ﺑﻨﺎءﺍﻟﺠﻤﻠﺔ‬
‫ﻣﺤﻠﻞ‬

‫ﺗﺤﻠﻴﻞﺍﻷﺷﺠﺎﺭ‬

‫ﻣﺘﻮﺳﻂ‬
‫ﻣﻮﻟﺪﺍﻷﻛﻮﺍﺩ‬

‫ﻣﺘﻮﺳﻂ‬
‫ﺷﻔﺮﺓ‬

‫ﺍﺩﺧﺎﻝﺍﻟﺒﻴﺎﻧﺎﺕ‬

‫ﻣﺘﺮﺟﻢ‬

‫ﻧﺘﺎﺉﺞ‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪30‬‬

‫ﻳﺘﻢﺗﻨﻔﻴﺬ ‪ Perl‬ﺑﻨﻈﺎﻡ ﻫﺠﻴﻦ‪ .‬ﻳﺘﻢ ﺗﺠﻤﻴﻊ ﺑﺮﺍﻣﺞ ‪ Perl‬ﺟﺰﺉﻴﺎً ﻻﻛﺘﺸﺎﻑ ﺍﻷﺧﻄﺎء ﻗﺒﻞ‬
‫ﺍﻟﺘﻔﺴﻴﺮﻭﻟﺘﺒﺴﻴﻂ ﺍﻟﻤﺘﺮﺟﻢ ﺍﻟﻔﻮﺭﻱ‪.‬‬
‫ﻛﺎﻧﺖﺟﻤﻴﻊ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻷﻭﻟﻴﺔ ﻟﺠﺎﻓﺎ ﻣﺨﺘﻠﻄﺔ‪ .‬ﺷﻜﻠﻪ ﺍﻟﻮﺳﻴﻂ ﻳﺴﻤﻰﻛﻮﺩ ﺍﻟﺒﺎﻳﺖ‪،‬‬
‫ﻳﻮﻓﺮﺇﻣﻜﺎﻧﻴﺔ ﺍﻟﻨﻘﻞ ﺇﻟﻰ ﺃﻱ ﺟﻬﺎﺯ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﻣﺘﺮﺟﻢ ﺷﻔﺮﺓ ﺑﺎﻳﺖ ﻭﻧﻈﺎﻡ ﻭﻗﺖ ﺗﺸﻐﻴﻞ ﻣﺮﺗﺒﻂ‬
‫ﺑﻪ‪.‬ﻣﻌﺎً ‪ ،‬ﺗﺴﻤﻰ ﻫﺬﻩ ﺍﻷﺟﻬﺰﺓ ‪ .Java Virtual Machine‬ﺗﻮﺟﺪ ﺍﻵﻥ ﺃﻧﻈﻤﺔ ﺗﺘﺮﺟﻢ ﻛﻮﺩ ‪byte‬‬
‫‪ Java‬ﺇﻟﻰ ﻛﻮﺩ ﺁﻟﺔ ﻟﺘﻨﻔﻴﺬ ﺃﺳﺮﻉ‪.‬‬

‫ﻳﻘﻮﻡﻧﻈﺎﻡ ﺍﻟﺘﻨﻔﻴﺬ (‪ Just-in-Time )JIT‬ﺑﺘﺮﺟﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﻣﺒﺪﺉﻴﺎً ﺇﻟﻰ ﻟﻐﺔ ﻭﺳﻴﻄﺔ‪ .‬ﺛﻢ ‪،‬‬
‫ﺃﺛﻨﺎءﺍﻟﺘﻨﻔﻴﺬ ‪ ،‬ﻳﻘﻮﻡ ﺑﺘﺠﻤﻴﻊ ﺃﺳﺎﻟﻴﺐ ﺍﻟﻠﻐﺔ ﺍﻟﻮﺳﻴﻄﺔ ﻓﻲ ﺭﻣﺰ ﺍﻵﻟﺔ ﻋﻨﺪﻣﺎ ﻳﺘﻢ ﺍﺳﺘﺪﻋﺎﺅﻫﺎ‪ .‬ﻳﺘﻢ‬
‫ﺍﻻﺣﺘﻔﺎﻅﺑﺈﺻﺪﺍﺭ ﻛﻮﺩ ﺍﻟﺠﻬﺎﺯ ﻟﻠﻤﻜﺎﻟﻤﺎﺕ ﺍﻟﻼﺣﻘﺔ‪ .‬ﺗﺴﺘﺨﺪﻡ ﺃﻧﻈﻤﺔ ‪ JIT‬ﺍﻵﻥ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‬
‫ﻟﺒﺮﺍﻣﺞ‪ .Java‬ﺃﻳﻀﺎً ‪ ،‬ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺟﻤﻴﻊ ﻟﻐﺎﺕ ‪ NET.‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻧﻈﺎﻡ ‪.JIT‬‬

‫ﻓﻲﺑﻌﺾ ﺍﻷﺣﻴﺎﻥ ‪ ،‬ﻗﺪ ﻳﻮﻓﺮ ﺍﻟﻤﻨﻔﺬ ﻛﻼ ًﻣﻦ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﻤﺘﺮﺟﻤﺔ ﻭﺍﻟﻤﺘﺮﺟﻤﺔ ﻟﻠﻐﺔ‪.‬‬
‫ﻓﻲﻫﺬﻩ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺘﺮﺟﻢ ﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ﻭﺗﺼﺤﻴﺤﻬﺎ‪ .‬ﺑﻌﺪ ﺫﻟﻚ ‪ ،‬ﺑﻌﺪ ﺍﻟﻮﺻﻮﻝ‬
‫ﺇﻟﻰﺣﺎﻟﺔ ﺧﺎﻟﻴﺔ ﻣﻦ ﺍﻷﺧﻄﺎء )ﻧﺴﺒﻴﺎً( ‪ ،‬ﻳﺘﻢ ﺗﺠﻤﻴﻊ ﺍﻟﺒﺮﺍﻣﺞ ﻟﺰﻳﺎﺩﺓ ﺳﺮﻋﺔ ﺗﻨﻔﻴﺬﻫﺎ‪.‬‬

‫‪1.7.4‬ﺍﻟﻤﻌﺎﻟﺠﺎﺕ ﺍﻟﻤﺴﺒﻘﺔ‬
‫ﺃﺍﻟﻤﻌﺎﻟﺞﻫﻮ ﺑﺮﻧﺎﻣﺞ ﻳﻌﺎﻟﺞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻣﺒﺎﺷﺮﺓ ﻗﺒﻞ ﺗﺠﻤﻴﻊ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻳﺘﻢ ﺗﻀﻤﻴﻦ ﺗﻌﻠﻴﻤﺎﺕ‬
‫ﺍﻟﻤﻌﺎﻟﺞﺍﻟﻤﺴﺒﻖ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ‪ .‬ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﺴﺒﻖ ﻫﻮ ﻓﻲ ﺍﻷﺳﺎﺱ ﻣﻮﺳﻊ ﻣﺎﻛﺮﻭ‪ .‬ﺗﺴُﺘﺨﺪﻡ‬
‫ﺇﺭﺷﺎﺩﺍﺕﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﺴﺒﻖ ﺑﺸﻜﻞ ﺷﺎﺉﻊ ﻟﺘﺤﺪﻳﺪ ﺃﻥ ﺍﻟﻜﻮﺩ ﻣﻦ ﻣﻠﻒ ﺁﺧﺮ ﺳﻴﺘﻢ ﺗﻀﻤﻴﻨﻪ‪ .‬ﻋﻠﻰ‬
‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ‪C‬‬

‫"‪# include "myLib.h‬‬

‫ﻳﺘﺴﺒﺐﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﺴﺒﻖ ﻓﻲ ﻧﺴﺦ ﻣﺤﺘﻮﻳﺎﺕ‪myLib.h‬ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ﻣﻮﻗﻊ ‪#‬ﻳﺸﻤﻞ‪.‬‬

‫ﺗﺴُﺘﺨﺪﻡﺗﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﺴﺒﻖ ﺍﻷﺧﺮﻯ ﻟﺘﺤﺪﻳﺪ ﺍﻟﺮﻣﻮﺯ ﻟﺘﻤﺜﻴﻞ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ‪ .‬ﻋﻠﻰ‬


‫ﺳﺒﻴﻞﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻤﻜﻦ ﻟﻠﻤﺮء ﺍﺳﺘﺨﺪﺍﻡ‬

‫‪ #‬ﺣﺪﺩ ﺍﻟﺤﺪ ﺍﻷﻗﺼﻰ )ﺃ ‪ ،‬ﺏ( ))ﺃ(< )ﺏ(؟ )ﺃ(‪) :‬ﺏ((‬

‫ﻟﺘﺤﺪﻳﺪﺃﻛﺒﺮ ﺗﻌﺒﻴﺮﻳﻦ ﻣﺤﺪﺩﻳﻦ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺍﻟﺘﻌﺒﻴﺮ‬

‫ﺱ= ﻣﺎﻛﺲ )‪ * 2‬ﺹ ‪ ،‬ﺽ ‪ (1.73 /‬؛‬

‫ﺳﻴﺘﻢﺗﻮﺳﻴﻌﻪ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﻌﺎﻟﺞ ﺍﻟﻤﺴﺒﻖ ﺇﻟﻰ‬

‫ﺱ= ))‪ * 2‬ﺹ(< )ﺽ ‪(1.73 /‬؟ )‪ * 2‬ﺹ(‪) :‬ﺽ ‪ (1.73 /‬؛‬

‫ﻻﺣﻆﺃﻥ ﻫﺬﻩ ﻭﺍﺣﺪﺓ ﻣﻦ ﺗﻠﻚ ﺍﻟﺤﺎﻻﺕ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﺴﺒﺐ ﻓﻴﻬﺎ ﺍﻵﺛﺎﺭ ﺍﻟﺠﺎﻧﺒﻴﺔ ﻟﻠﺘﻌﺒﻴﺮ‬
‫ﻣﺸﻜﻠﺔ‪.‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺇﺫﺍ ﻛﺎﻥ ﺃﻱ ﻣﻦ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﻤﻌﻄﺎﺓ ﻟـﺍﻷﻋﻠﻰﺍﻟﻤﺎﻛﺮﻭ ﻟﻬﺎ ﺁﺛﺎﺭ ﺟﺎﻧﺒﻴﺔ‬
‫‪-‬ﻣﺜﻞ‪z ++ -‬ﻳﻤﻜﻦ ﺃﻥ ﻳﺴﺒﺐ ﻣﺸﻜﻠﺔ‪ .‬ﻧﻈﺮﺍً ﻷﻧﻪ ﻳﺘﻢ ﺗﻘﻴﻴﻢ ﺃﺣﺪ ﻣﻌﺎﻣﻠﻲ ﺍﻟﺘﻌﺒﻴﺮ ﻣﺮﺗﻴﻦ ‪ ،‬ﻓﻘﺪ‬
‫ﻳﻨﺘﺞﻋﻦ ﺫﻟﻚﺽﻳﺘﻢ ﺯﻳﺎﺩﺗﻬﺎ ﻣﺮﺗﻴﻦ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻜﻮﺩ ﺍﻟﻨﺎﺗﺞ ﻋﻦ ﺍﻟﺘﻮﺳﻊ ﺍﻟﻜﻠﻲ‪.‬‬
‫‪31‬‬ ‫ﻣﻠﺨﺺ‬

‫‪1.8‬ﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺑﻴﺉﺔﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ‪ .‬ﻗﺪ ﺗﺘﻜﻮﻥ ﻫﺬﻩ‬
‫ﺍﻟﻤﺠﻤﻮﻋﺔﻓﻘﻂ ﻣﻦ ﻧﻈﺎﻡ ﻣﻠﻔﺎﺕ ﻭﻣﺤﺮﺭ ﻧﺼﻮﺹ ﻭﺭﺍﺑﻂ ﻭﻣﺘﺮﺟﻢ‪ .‬ﺃﻭ ﻗﺪ ﻳﺘﻀﻤﻦ ﻣﺠﻤﻮﻋﺔ‬
‫ﻛﺒﻴﺮﺓﻣﻦ ﺍﻷﺩﻭﺍﺕ ﺍﻟﻤﺘﻜﺎﻣﻠﺔ ‪ ،‬ﻳﺘﻢ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﻛﻞ ﻣﻨﻬﺎ ﻣﻦ ﺧﻼﻝ ﻭﺍﺟﻬﺔ ﻣﺴﺘﺨﺪﻡ ﻣﻮﺣﺪﺓ‪.‬‬
‫ﻓﻲﺍﻟﺤﺎﻟﺔ ﺍﻷﺧﻴﺮﺓ ‪ ،‬ﻳﺘﻢ ﺗﺤﺴﻴﻦ ﺗﻄﻮﻳﺮ ﻭﺻﻴﺎﻧﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺸﻜﻞ ﻛﺒﻴﺮ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻓﺈﻥ ﺧﺼﺎﺉﺺ‬
‫ﻟﻐﺔﺍﻟﺒﺮﻣﺠﺔ ﻟﻴﺴﺖ ﻫﻲ ﺍﻟﻤﻘﻴﺎﺱ ﺍﻟﻮﺣﻴﺪ ﻟﻘﺪﺭﺓ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻟﻠﻨﻈﺎﻡ‪ .‬ﻧﺤﻦ ﺍﻵﻥ ﻧﺼﻒ‬
‫ﺑﺈﻳﺠﺎﺯﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪ Macintosh.‬ﻭ ‪ Windows‬ﺗﺒﺪﻭ ﻣﺸﺎﺑﻬﺔ ﻟﺘﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺃﻧﻈﻤﺔ ‪ UNIX‬ﺗﺠﻌﻞ‬


‫ﻭﺍﺟﻬﺎﺕﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺮﺳﻮﻣﻴﺔ ﻫﺬﻩ ﻭﺍﺟﻬﺔ ‪ KDE.‬ﻭ ‪ GNOME‬ﻭ (‪ Solaris )CDE‬ﺑﻴﺉﺔ ﺳﻄﺢ‬
‫ﺍﻟﻤﻜﺘﺐﺍﻟﻤﺸﺘﺮﻛﺔ ﻟـ ‪ UNIX‬ﻣﻦ ﺃﻣﺜﻠﺔ ﻭﺍﺟﻬﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺮﺳﻮﻣﻴﺔ ﻟـ ‪ UNIX.‬ﺗﻌﻤﻞ ﺃﻋﻠﻰ‬
‫ﻧﻈﺎﻡ (‪ )GUI‬ﻏﺎﻟﺒﺎً ﻣﻦ ﺧﻼﻝ ﻭﺍﺟﻬﺔ ﻣﺴﺘﺨﺪﻡ ﺭﺳﻮﻣﻴﺔ ‪ UNIX‬ﻫﻲ ﺍﻟﻮﺍﺟﻬﺔ ﺍﻟﻤﻮﺣﺪﺓ ﺑﻴﻦ‬
‫ﺃﺩﻭﺍﺗﻬﺎ‪.‬ﻫﺬﺍ ﺟﻌﻞ ﺍﻟﺘﻌﻠﻢ ﻭﺍﻻﺳﺘﺨﺪﺍﻡ ﺃﻛﺜﺮ ﺻﻌﻮﺑﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻳﺘﻢ ﺍﻵﻥ ﺍﺳﺘﺨﺪﺍﻡ ‪ UNIX‬ﻫﻲ‬
‫ﺑﻴﺉﺔﺑﺮﻣﺠﺔ ﺃﻗﺪﻡ ‪ ،‬ﺗﻢ ﺗﻮﺯﻳﻌﻬﺎ ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪ ،‬ﻭﺗﻢ ﺑﻨﺎﺅﻫﺎ ﺣﻮﻝ ﻧﻈﺎﻡ‬
‫ﺗﺸﻐﻴﻞﻣﺘﻌﺪﺩ ﺍﻟﺒﺮﺍﻣﺞ ﻣﺤﻤﻮﻝ‪ .‬ﻳﻮﻓﺮ ﻣﺠﻤﻮﻋﺔ ﻭﺍﺳﻌﺔ ﻣﻦ ﺃﺩﻭﺍﺕ ﺍﻟﺪﻋﻢ ﺍﻟﻘﻮﻳﺔ ﻹﻧﺘﺎﺝ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﻭﺻﻴﺎﻧﺘﻬﺎﺑﻤﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﻠﻐﺎﺕ‪ .‬ﻓﻲ ﺍﻟﻤﺎﺿﻲ ‪ ،‬ﻛﺎﻧﺖ ﺃﻫﻢ ﻣﻴﺰﺓ ﻏﺎﺉﺒﺔ ﻋﻦ ‪UNIX‬‬

‫‪ 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‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪32‬‬

‫ﻣﻦﺑﻴﻦ ﺃﻫﻢ ﻣﻌﺎﻳﻴﺮ ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺎﺕ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻜﺘﺎﺑﺔ ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﻭﺍﻟﺘﻜﻠﻔﺔ ﺍﻹﺟﻤﺎﻟﻴﺔ‪.‬‬
‫ﺳﺘﻜﻮﻥﻫﺬﻩ ﻫﻲ ﺍﻷﺳﺎﺱ ﺍﻟﺬﻱ ﻧﻘﻮﻡ ﻋﻠﻰ ﺃﺳﺎﺳﻪ ﺑﻔﺤﺺ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻠﻐﻮﻳﺔ ﺍﻟﻤﺨﺘﻠﻔﺔ ﺍﻟﺘﻲ‬
‫ﺗﻤﺖﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻟﺠﺰء ﺍﻟﻤﺘﺒﻘﻲ ﻣﻦ ﺍﻟﻜﺘﺎﺏ ﻭﺍﻟﺤﻜﻢ ﻋﻠﻴﻬﺎ‪.‬‬

‫ﻛﺎﻧﺖﺍﻟﺘﺄﺛﻴﺮﺍﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻫﻲ ﻫﻨﺪﺳﺔ ﺍﻵﻻﺕ ﻭﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ‬


‫ﺍﻟﺒﺮﻣﺠﻴﺎﺕ‪.‬‬
‫ﻳﻌﺪﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻓﻲ ﺍﻷﺳﺎﺱ ﺇﻧﺠﺎﺯﺍً ﻫﻨﺪﺳﻴﺎً ‪ ،‬ﺣﻴﺚ ﻳﺠﺐ ﺇﺟﺮﺍء ﻗﺎﺉﻤﺔ ﻃﻮﻳﻠﺔ‬
‫ﻣﻦﺍﻟﻤﻔﺎﺿﻼﺕ ﺑﻴﻦ ﺍﻟﻤﻴﺰﺍﺕ ﻭﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻭﺍﻟﻘﺪﺭﺍﺕ‪.‬‬

‫ﺍﻟﻄﺮﻕﺍﻟﺮﺉﻴﺴﻴﺔ ﻟﺘﻄﺒﻴﻖ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻫﻲ ﺍﻟﺘﺠﻤﻴﻊ ﻭﺍﻟﺘﻔﺴﻴﺮ ﺍﻟﺨﺎﻟﺺ ﻭﺍﻟﺘﻨﻔﻴﺬ‬


‫ﺍﻟﻤﺨﺘﻠﻂ‪.‬‬
‫ﺃﺻﺒﺤﺖﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺟﺰءﺍً ﻣﻬﻤﺎً ﻣﻦ ﺃﻧﻈﻤﺔ ﺗﻄﻮﻳﺮ ﺍﻟﺒﺮﺍﻣﺞ ‪ ،‬ﺣﻴﺚ ﺗﻜﻮﻥ ﺍﻟﻠﻐﺔ ﻣﺠﺮﺩ‬
‫ﺃﺣﺪﻣﻜﻮﻧﺎﺗﻬﺎ‪.‬‬

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

‫‪.1‬ﻟﻤﺎﺫﺍ ﻣﻦ ﺍﻟﻤﻔﻴﺪ ﻟﻠﻤﺒﺮﻣﺞ ﺃﻥ ﻳﻜﻮﻥ ﻟﺪﻳﻪ ﺑﻌﺾ ﺍﻟﺨﻠﻔﻴﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ‬
‫ﺃﻧﻪﻗﺪ ﻻ ﻳﻘﻮﻡ ﺃﺑﺪﺍً ﺑﺘﺼﻤﻴﻢ ﻟﻐﺔ ﺑﺮﻣﺠﺔ؟‬

‫‪.2‬ﻛﻴﻒ ﻳﻤﻜﻦ ﺃﻥ ﺗﻔﻴﺪ ﻣﻌﺮﻓﺔ ﺧﺼﺎﺉﺺ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻣﺠﺘﻤﻊ ﺍﻟﺤﻮﺳﺒﺔ ﺑﺄﻛﻤﻠﻪ؟‬

‫‪.3‬ﻣﺎ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺳﻴﻄﺮﺕ ﻋﻠﻰ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﻌﻠﻤﻴﺔ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً‬
‫ﺍﻟﻤﺎﺿﻴﺔ؟‬
‫‪.4‬ﻣﺎ ﻫﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺳﻴﻄﺮﺕ ﻋﻠﻰ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً‬
‫ﺍﻟﻤﺎﺿﻴﺔ؟‬
‫‪.5‬ﻣﺎ ﻫﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺳﻴﻄﺮﺕ ﻋﻠﻰ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً‬
‫ﺍﻟﻤﺎﺿﻴﺔ؟‬
‫‪.6‬ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﻤﻌﻈﻢ ﻳﻮﻧﻜﺲ؟‬
‫‪.7‬ﻣﺎ ﻫﻲ ﻋﻴﻮﺏ ﻭﺟﻮﺩ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﻓﻲ ﺍﻟﻠﻐﺔ؟‬
‫‪.8‬ﻛﻴﻒ ﻳﻤﻜﻦ ﻟﻠﻤﺸﻐﻞ ﺍﻟﺬﻱ ﻳﺤﺪﺩﻩ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺃﻥ ﻳﺆﺩﻱ ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ ﺇﻟﻰ ﺍﻹﺿﺮﺍﺭ ﺑﻘﺮﺍءﺓ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞ؟‬
‫‪.9‬ﻣﺎ ﻫﻮ ﺃﺣﺪ ﺍﻷﻣﺜﻠﺔ ﻋﻠﻰ ﺍﻻﻓﺘﻘﺎﺭ ﺇﻟﻰ ﺍﻟﺘﻌﺎﻣﺪ ﻓﻲ ﺗﺼﻤﻴﻢ ‪C‬؟‬
‫‪.10‬ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ ﺍﻟﺘﻌﺎﻣﺪ ﻛﻤﻌﻴﺎﺭ ﺗﺼﻤﻴﻢ ﺃﺳﺎﺳﻲ؟‬
‫‪.11‬ﻣﺎ ﺑﻴﺎﻥ ﺍﻟﻀﺒﻂ ﺍﻟﺒﺪﺍﺉﻲ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻟﺒﻨﺎء ﺑﻴﺎﻧﺎﺕ ﺗﺤﻜﻢ ﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ﺑﺎﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ‬
‫ﺗﻔﺘﻘﺮﺇﻟﻴﻬﺎ؟‬
‫‪.12‬ﻣﺎ ﻫﻲ ﺑﻨﻴﺔ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﻮﻓﺮ ﺗﺠﺮﻳﺪﺍً ﻟﻠﻌﻤﻠﻴﺔ؟‬

‫‪.13‬ﻣﺎﺫﺍ ﻳﻌﻨﻲ ﺃﻥ ﻳﻜﻮﻥ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻣﻮﺛﻮﻗﺎً ﺑﻪ؟‬


‫‪.14‬ﻟﻤﺎﺫﺍ ﻳﻌﺘﺒﺮ ﻓﺤﺺ ﺍﻟﻨﻮﻉ ﻣﻦ ﻣﻌﺎﻣﻼﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻣﻬﻤﺎً؟‬
‫‪.15‬ﻣﺎ ﻫﻮ ﺍﻟﺘﻌﺮﺝ؟‬
‫‪33‬‬ ‫ﺗﻢﺿﺒﻂ ﺍﻟﻤﺸﻜﻠﺔ‬

‫‪.16‬ﻣﺎ ﻫﻲ ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ؟‬


‫‪.17‬ﻟﻤﺎﺫﺍ ﺗﻌﺘﺒﺮ ﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻣﻬﻤﺔ ﻟﻘﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ؟‬
‫‪.18‬ﻛﻴﻒ ﺗﺮﺗﺒﻂ ﺗﻜﻠﻔﺔ ﺍﻟﻤﺠﻤﻌﻴﻦ ﻟﻠﻐﺔ ﻣﻌﻴﻨﺔ ﺑﺘﺼﻤﻴﻢ ﺗﻠﻚ ﺍﻟﻠﻐﺔ؟‬

‫‪.19‬ﻣﺎ ﻫﻲ ﺃﻗﻮﻯ ﺍﻟﺘﺄﺛﻴﺮﺍﺕ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﻴﻦ ﻋﺎﻣﺎً‬
‫ﺍﻟﻤﺎﺿﻴﺔ؟‬
‫‪.20‬ﻣﺎ ﺍﺳﻢ ﻓﺉﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﻤﻠﻲ ﺑﻨﻴﺘﻬﺎ ﻣﻦ ﻗﺒﻞ ﻫﻨﺪﺳﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻮﻥ‬
‫ﻧﻴﻮﻣﺎﻥ؟‬
‫‪.21‬ﻣﺎ ﻫﻮ ﺍﻟﻨﻘﺼﺎﻥ ﻓﻲ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻠﺬﺍﻥ ﺗﻢ ﺍﻛﺘﺸﺎﻓﻬﻤﺎ ﻧﺘﻴﺠﺔ ﺍﻟﺒﺤﺚ ﻓﻲ ﺗﻄﻮﻳﺮ‬
‫ﺍﻟﺒﺮﻣﺠﻴﺎﺕﻓﻲ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ؟‬
‫‪.22‬ﻣﺎ ﻫﻲ ﺍﻟﺴﻤﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﺜﻼﺛﺔ ﻟﻠﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ؟‬

‫‪.23‬ﻣﺎ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﻛﺎﻧﺖ ﺃﻭﻝ ﻣﻦ ﺩﻋﻢ ﺍﻟﺴﻤﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﺜﻼﺛﺔ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ؟‬

‫‪.24‬ﻣﺎ ﻫﻮ ﻣﺜﺎﻝ ﻟﻤﻌﺎﻳﻴﺮ ﺗﺼﻤﻴﻢ ﻟﻐﺘﻴﻦ ﺗﺘﻌﺎﺭﺽ ﺑﺸﻜﻞ ﻣﺒﺎﺷﺮ ﻣﻊ ﺑﻌﻀﻬﻤﺎ ﺍﻟﺒﻌﺾ؟‬

‫‪.25‬ﻣﺎ ﻫﻲ ﺍﻟﻄﺮﻕ ﺍﻟﻌﺎﻣﺔ ﺍﻟﺜﻼﺙ ﻟﺘﻄﺒﻴﻖ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ؟‬

‫‪.26‬ﻣﺎ ﺍﻟﺬﻱ ﻳﻨﺘﺞ ﻋﻨﻪ ﺗﻨﻔﻴﺬ ﺃﺳﺮﻉ ﻟﻠﺒﺮﻧﺎﻣﺞ ‪ ،‬ﻣﺘﺮﺟﻢ ﺃﻡ ﻣﺘﺮﺟﻢ ﻣﺤﺾ؟‬

‫‪.27‬ﻣﺎ ﻫﻮ ﺍﻟﺪﻭﺭ ﺍﻟﺬﻱ ﻳﻠﻌﺒﻪ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﻓﻲ ﺍﻟﻤﺘﺮﺟﻢ؟‬


‫‪.28‬ﻣﺎﺫﺍ ﻳﻔﻌﻞ ﺍﻟﺮﺍﺑﻂ؟‬
‫‪.29‬ﻣﺎ ﻫﻲ ﺃﻫﻤﻴﺔ ﻋﻨﻖ ﺍﻟﺰﺟﺎﺟﺔ ﻓﻮﻥ ﻧﻴﻮﻣﺎﻥ؟‬
‫‪.30‬ﻣﺎ ﻫﻲ ﻣﺰﺍﻳﺎ ﺗﻄﺒﻴﻖ ﻟﻐﺔ ﻣﻊ ﻣﺘﺮﺟﻢ ﺧﺎﻟﺺ؟‬

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

‫‪.1‬ﻫﻞ ﺗﻌﺘﻘﺪ ﺃﻥ ﻗﺪﺭﺗﻨﺎ ﻋﻠﻰ ﺍﻟﺘﻔﻜﻴﺮ ﺍﻟﻤﺠﺮﺩ ﺗﺘﺄﺛﺮ ﺑﻤﻬﺎﺭﺍﺗﻨﺎ ﺍﻟﻠﻐﻮﻳﺔ؟ ﺩﻋﻢ ﺭﺃﻳﻚ‪.‬‬

‫‪.2‬ﻣﺎ ﻫﻲ ﺑﻌﺾ ﻣﻴﺰﺍﺕ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﺤﺪﺩﺓ ﺍﻟﺘﻲ ﺗﻌﺮﻑ ﺃﺳﺒﺎﺑﻬﺎ ﺍﻟﻐﺎﻣﻀﺔ ﺑﺎﻟﻨﺴﺒﺔ‬
‫ﻟﻚ؟‬
‫‪.3‬ﻣﺎ ﺍﻟﺤﺠﺞ ﺍﻟﺘﻲ ﻳﻤﻜﻨﻚ ﺗﻘﺪﻳﻤﻬﺎ ﻟﻔﻜﺮﺓ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﻟﺠﻤﻴﻊ ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ؟‬

‫‪.4‬ﻣﺎ ﻫﻲ ﺍﻟﺤﺠﺞ ﺍﻟﺘﻲ ﻳﻤﻜﻨﻚ ﺍﻟﻘﻴﺎﻡ ﺑﻬﺎ ﺿﺪ ﻓﻜﺮﺓ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﻟﺠﻤﻴﻊ ﻣﺠﺎﻻﺕ ﺍﻟﺒﺮﻣﺠﺔ؟‬

‫‪.5‬ﺍﺳﻢ ﻭﺷﺮﺡ ﻣﻌﻴﺎﺭﺍً ﺁﺧﺮ ﻳﻤﻜﻦ ﻣﻦ ﺧﻼﻟﻪ ﺍﻟﺤﻜﻢ ﻋﻠﻰ ﺍﻟﻠﻐﺎﺕ )ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺗﻠﻚ ﺍﻟﺘﻲ‬
‫ﺗﻤﺖﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ(‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 1‬ﻣﻘﺪﻣﺎﺕ‬ ‫‪34‬‬

‫‪.6‬ﻣﺎ ﻋﺒﺎﺭﺓ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﺎﺉﻌﺔ ‪ ،‬ﺑﺮﺃﻳﻚ ‪ ،‬ﺍﻷﻛﺜﺮ ﺿﺮﺭﺍً ﻟﻘﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ؟‬

‫‪.7‬ﺗﺴﺘﺨﺪﻡ ‪ Java‬ﻗﻮﺳﺎً ﺃﻳﻤﻨﺎً ﻟﺘﻤﻴﻴﺰ ﻧﻬﺎﻳﺔ ﻛﺎﻓﺔ ﺍﻟﻌﺒﺎﺭﺍﺕ ﺍﻟﻤﺮﻛﺒﺔ‪ .‬ﻣﺎ ﻫﻲ ﺍﻟﺤﺠﺞ‬
‫ﺍﻟﻤﺆﻳﺪﺓﻭﺍﻟﻤﻌﺎﺭﺿﺔ ﻟﻬﺬﺍ ﺍﻟﺘﺼﻤﻴﻢ؟‬
‫‪.8‬ﺗﻤﻴﺰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺑﻴﻦ ﺍﻷﺣﺮﻑ ﺍﻟﻜﺒﻴﺮﺓ ﻭﺍﻟﺼﻐﻴﺮﺓ ﻓﻲ ﺍﻷﺳﻤﺎء ﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻡ‪.‬ﻣﺎ ﻫﻲ ﺇﻳﺠﺎﺑﻴﺎﺕ ﻭﺳﻠﺒﻴﺎﺕ ﻗﺮﺍﺭ ﺍﻟﺘﺼﻤﻴﻢ ﻫﺬﺍ؟‬
‫‪.9‬ﺷﺮﺡ ﺍﻟﺠﻮﺍﻧﺐ ﺍﻟﻤﺨﺘﻠﻔﺔ ﻟﺘﻜﻠﻔﺔ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬
‫‪.10‬ﻣﺎ ﻫﻲ ﺍﻟﺤﺠﺞ ﻟﻜﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﻓﻌﺎﻟﺔ ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻷﺟﻬﺰﺓ ﻏﻴﺮ ﻣﻜﻠﻔﺔ ﻧﺴﺒﻴﺎً؟‬

‫‪.11‬ﺻﻒِ ﺑﻌﺾ ﺍﻟﻤﻘﺎﻳﻀﺎﺕ ﻓﻲ ﺍﻟﺘﺼﻤﻴﻢ ﺑﻴﻦ ﺍﻟﻜﻔﺎءﺓ ﻭﺍﻷﻣﺎﻥ ﻓﻲ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ‬
‫ﺗﻌﺮﻓﻬﺎ‪.‬‬
‫‪.12‬ﻓﻲ ﺭﺃﻳﻚ ‪ ،‬ﻣﺎ ﻫﻲ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﺘﻲ ﻗﺪ ﺗﺘﻀﻤﻨﻬﺎ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﺜﺎﻟﻴﺔ؟‬

‫‪.13‬ﻫﻞ ﺗﻢ ﺗﻨﻔﻴﺬ ﺃﻭﻝ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺗﻌﻠﻤﺘﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﺘﺮﺟﻢ ﻓﻮﺭﻱ ﺃﻭ ﻧﻈﺎﻡ‬
‫ﺗﻨﻔﻴﺬﻫﺠﻴﻦ ﺃﻭ ﻣﺘﺮﺟﻢ؟ )ﻗﺪ ﺗﻀﻄﺮ ﺇﻟﻰ ﺍﻟﺒﺤﺚ ﻋﻦ ﻫﺬﺍ‪(.‬‬

‫‪.14‬ﺻﻒ ﻣﺰﺍﻳﺎ ﻭﻋﻴﻮﺏ ﺑﻌﺾ ﺑﻴﺉﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺍﺳﺘﺨﺪﻣﺘﻬﺎ‪.‬‬

‫‪.15‬ﻛﻴﻒ ﺗﺆﺛﺮ ﺟﻤﻞ ﺍﻟﺘﺼﺮﻳﺢ ﻋﻦ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﺒﺴﻴﻄﺔ ﻋﻠﻰ ﻗﺎﺑﻠﻴﺔ ﻗﺮﺍءﺓ ﺍﻟﻠﻐﺔ ‪ ،‬ﻣﻊ ﺍﻷﺧﺬ ﻓﻲ‬
‫ﺍﻻﻋﺘﺒﺎﺭﺃﻥ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﻻ ﺗﺘﻄﻠﺒﻬﺎ؟‬

‫‪.16‬ﺍﻛﺘﺐ ﺗﻘﻴﻴﻤﺎً ﻟﺒﻌﺾ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻲ ﺗﻌﺮﻓﻬﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﻤﻮﺿﺤﺔ ﻓﻲ ﻫﺬﺍ‬
‫ﺍﻟﻔﺼﻞ‪.‬‬
‫‪.17‬ﺑﻌﺾ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ -‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺑﺎﺳﻜﺎﻝ ‪ -‬ﺍﺳﺘﺨﺪﻣﺖ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻤﻨﻘﻮﻃﺔ‬
‫ﻟﻔﺼﻞﺍﻟﺘﻌﻠﻴﻤﺎﺕ ‪ ،‬ﺑﻴﻨﻤﺎ ﻳﺴﺘﺨﺪﻣﻬﺎ ﺟﺎﻓﺎ ﻹﻧﻬﺎء ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ .‬ﺃﻱ ﻣﻦ ﻫﺬﻩ ‪ ،‬ﺑﺮﺃﻳﻚ ‪ ،‬ﻫﻮ‬
‫ﺍﻷﻛﺜﺮﻃﺒﻴﻌﻴﺔ ﻭﺍﻷﻗﻞ ﺍﺣﺘﻤﺎﻻً ﺃﻥ ﻳﺆﺩﻱ ﺇﻟﻰ ﺃﺧﻄﺎء ﻧﺤﻮﻳﺔ؟ ﺍﺩﻋﻢ ﺇﺟﺎﺑﺘﻚ‪.‬‬

‫‪.18‬ﺗﺴﻤﺢ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻌﺎﺻﺮﺓ ﺑﻨﻮﻋﻴﻦ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ‪ :‬ﺃﺣﺪﻫﻤﺎ ﻳﺴُﺘﺨﺪﻡ ﻓﻴﻪ‬


‫ﺍﻟﻤﺤﺪﺩﺍﺕﻋﻠﻰ ﻛﻼ ﺍﻟﻄﺮﻓﻴﻦ )ﺗﻌﻠﻴﻘﺎﺕ ﻣﺘﻌﺪﺩﺓ ﺍﻷﺳﻄﺮ( ‪ ،‬ﻭﺍﻵﺧﺮ ﻳﺤﺪﺩ ﻓﻴﻪ ﺍﻟﻤﺤﺪﺩ ﺑﺪﺍﻳﺔ‬
‫ﺍﻟﺘﻌﻠﻴﻖﻓﻘﻂ )ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻋﻠﻰ ﺍﻟﺨﻂ(‪ .‬ﻧﺎﻗﺶ ﻣﺰﺍﻳﺎ ﻭﻋﻴﻮﺏ ﻛﻞ ﻣﻦ ﻫﺬﻩ ﻓﻴﻤﺎ‬
‫ﻳﺘﻌﻠﻖﺑﻤﻌﺎﻳﻴﺮﻧﺎ‪.‬‬
‫‪2‬‬
‫ﺗﻄﻮﺭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻟﺮﺉﻴﺴﻴﺔ‬

‫‪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‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬

‫ﻣﺘﺪﻓﻖ‬ ‫ﻓﻮﺭﺗﺮﺍﻥﺍﻷﻭﻝ‬ ‫‪1957‬‬


‫ﺍﻟﺠﻮﻝ‪58‬‬ ‫ﻓﻮﺭﺗﺮﺍﻥﺍﻟﺜﺎﻧﻲ‬ ‫‪58‬‬
‫‪LISP‬‬ ‫‪59‬‬
‫ﻛﻮﺑﻮﻝ‬ ‫‪APL‬‬ ‫ﺍﻟﺠﻮﻝ‪60‬‬ ‫‪60‬‬
‫‪61‬‬
‫‪CPL‬‬ ‫‪62‬ﻓﻮﺭﺗﺮﺍﻥ ﺍﻟﺮﺍﺑﻊ‬
‫ﺳﻨﻮﺑﻮﻝ‬ ‫ﺍﻷﻭﻝ‪SIMULA‬‬ ‫‪63‬‬
‫ﺭﺭ ‪ /‬ﺃﻧﺎ‬ ‫ﺃﺳﺎﺳﻲ‬ ‫‪64‬‬
‫‪65‬‬
‫‪ALGOL W‬‬ ‫‪66‬‬
‫ﺳﻴﻤﻮﻻ‪67‬‬ ‫‪67‬‬
‫ﺍﻟﺠﻮﻝ‪68‬‬ ‫‪68‬‬
‫‪BCPL‬‬ ‫‪69‬‬
‫ﺏ‬ ‫‪70‬‬
‫ﺝ‬ ‫ﺑﺎﺳﻜﺎﻝ‬ ‫‪71‬‬
‫‪72‬‬
‫‪ 73‬ﺑﺮﻭﻟﻮﺝ‬
‫‪74‬‬
‫ﻣﺨﻄﻂ‬ ‫‪75‬‬
‫‪76‬‬
‫ﻣﻮﺩﻭﻻ‪2-‬‬ ‫‪77‬‬
‫‪awk‬‬ ‫‪77 78‬‬
‫‪ML‬‬
‫‪79‬‬
‫ﺳﻤﻮﻝﺗﻮﻙ ‪80‬‬ ‫‪80‬‬
‫‪81‬‬
‫ﺃﻳﻘﻮﻧﺔ‬ ‫‪82‬‬
‫ﻣﻴﺮﺍﻧﺪﺍ‬ ‫ﺁﺩﺍ‪83‬‬ ‫‪83‬‬
‫‪ C ++‬ﺍﻟﺸﻮﺍﺉﺐﺍﻟﻤﺸﺘﺮﻛﺔ‬
‫‪84‬‬
‫‪85‬‬
‫ﺑﻴﺮﻝ‬ ‫‪86‬‬
‫‪87‬‬
‫ﻫﺎﺳﻜﻞ‬ ‫ﻛﻮﻳﻚﺑﻴﺴﻚ‬ ‫ﺃﻭﺑﻴﺮﻭﻥ‬ ‫ﻣﻮﺩﻭﻻ‪3‬‬
‫‪88‬‬
‫(‪ANSI C )C89‬‬ ‫‪89‬‬
‫ﺍﻟﺒﺼﺮﻳﺔﺍﻷﺳﺎﺳﻴﺔ‬ ‫ﺍﻳﻔﻞ‬ ‫‪90‬ﻓﻮﺭﺗﺮﺍﻥ ‪90‬‬
‫ﺑﺎﻳﺜﻮﻥ‬ ‫‪91‬‬
‫‪92‬‬
‫‪93‬‬
‫ﺟﺎﻓﺎ‬ ‫ﺑﻲﺃﺗﺶ ﺑﻲ‬ ‫ﻟﻮﺍ‬ ‫‪94‬‬
‫ﺭﻭﺑﻲ‬ ‫ﺁﺩﺍ‪95‬‬ ‫‪ 95‬ﻓﻮﺭﺗﺮﺍﻥ‪95‬‬
‫‪96‬‬
‫ﺟﺎﻓﺎﺳﻜﺮﻳﺒﺖ‬ ‫‪97‬‬
‫‪98‬‬
‫ﺝ ‪99‬‬ ‫‪99‬‬
‫‪Python2.0‬‬
‫ﺳﻲ ‪#‬‬ ‫‪00‬‬
‫‪Visual Basic.NET‬‬ ‫‪01‬‬
‫‪02‬‬
‫‪ 03‬ﻓﻮﺭﺗﺮﺍﻥ‪2003‬‬
‫ﺟﺎﻓﺎ‪5.0‬‬ ‫ﺭﻭﺑﻲ‪1.8‬‬ ‫‪04‬‬
‫‪05‬‬
‫ﺁﺩﺍ‪2005‬‬
‫ﺳﻲ‪2.0 #‬‬ ‫ﺟﺎﻓﺎ‪6.0‬‬ ‫‪06‬‬
‫ﺑﺎﻳﺜﻮﻥ‪3.0‬‬
‫ﺳﻲ‪3.0 #‬‬
‫‪07‬‬
‫ﺭﻭﺑﻲ‪1.9‬‬ ‫‪ 08‬ﻓﻮﺭﺗﺮﺍﻥ‪2008‬‬
‫ﺝ‪4.0 #‬‬ ‫‪09‬‬
‫ﺟﺎﻓﺎ‪7.0‬‬
‫‪10‬‬
‫‪11‬‬

‫ﺍﻟﺸﻜﻞ‪2.1‬‬

‫ﻋﻠﻢﺍﻷﻧﺴﺎﺏ ﻟﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻟﺸﺎﺉﻌﺔ‬


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

‫‪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‬ﻭﻛﺘﺐ ﺧﻮﺍﺭﺯﻣﻴﺎﺕ ﺑﺎﻟﻠﻐﺔ ﻟﺤﻞ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﻤﺸﺎﻛﻞ‪.‬‬

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


‫ﻛﺎﻥ‪ Plankalkül‬ﻣﻜﺘﻤﻼً ﺑﺸﻜﻞ ﻣﻠﺤﻮﻅ ‪ ،‬ﻣﻊ ﺑﻌﺾ ﻣﻴﺰﺍﺗﻪ ﺍﻷﻛﺜﺮ ﺗﻘﺪﻣﺎً ﻓﻲ ﻣﺠﺎﻝ ﻫﻴﺎﻛﻞ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬ﻛﺎﻥ ﺃﺑﺴﻂ ﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﻓﻲ ‪ Plankalkül‬ﻫﻮ ﺍﻟﺒﺖ ﺍﻟﻔﺮﺩﻱ‪ .‬ﺗﻢ ﺇﻧﺸﺎء ﺍﻷﻧﻮﺍﻉ ﺍﻟﻌﺪﺩﻳﺔ‬
‫ﺍﻟﺼﺤﻴﺤﺔﻭﺍﻟﻌﺎﺉﻤﺔ ﻣﻦ ﻧﻮﻉ ﺍﻟﺒﺖ‪ .‬ﻳﺴﺘﺨﺪﻡ ﻧﻮﻉ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ ﺗﺪﻭﻳﻦ ﻣﻜﻤﻞ ﺛﻨﺎﺉﻲ ﻭﻧﻈﺎﻡ‬
‫"ﺍﻟﺒﺖ ﺍﻟﻤﺨﻔﻲ" ﺍﻟﻤﺴﺘﺨﺪﻡ ﺣﺎﻟﻴﺎً ﻟﺘﺠﻨﺐ ﺗﺨﺰﻳﻦ ﺃﻫﻢ ﺑﺖ ﻣﻦ ﺟﺰء ﺍﻟﻜﺴﺮ ﺍﻟﻤﻘﻴﺲ ﻟﻘﻴﻤﺔ‬
‫ﺍﻟﻨﻘﻄﺔﺍﻟﻌﺎﺉﻤﺔ‪.‬‬

‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺍﻷﻧﻮﺍﻉ ﺍﻟﻘﻴﺎﺳﻴﺔ ﺍﻟﻤﻌﺘﺎﺩﺓ ‪ ،‬ﺗﻀﻤﻦ ‪ Plankalkül‬ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻭﺍﻟﺴﺠﻼﺕ )‬


‫ﺗﺴﻤﻰﺍﻟﻬﻴﺎﻛﻞﻓﻲ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﺴﺘﻨﺪﺓ ﺇﻟﻰ ‪ .(C‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺘﻀﻤﻦ ﺍﻟﺴﺠﻼﺕ ﺳﺠﻼﺕ ﻣﺘﺪﺍﺧﻠﺔ‪.‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻠﻐﺔ ﻻ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻛﻠﻤﺔ ‪ goo‬ﺻﺮﻳﺤﺔ ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﺗﻀﻤﻨﺖ ﺑﻴﺎﻧﺎً ﺗﻜﺮﺍﺭﻳﺎً‬
‫ﻣﺸﺎﺑﻬﺎًﻟـ ‪Ada‬ﻝ‪ .‬ﻛﻤﺎ ﻛﺎﻥ ﻟﺪﻳﻪ ﺍﻷﻣﺮﺯﻋﻨﻔﺔﻣﻊ ﻧﺺ ﻣﺮﺗﻔﻊ ﻳﺤﺪﺩ ﺧﺮﻭﺟﺎً ﻣﻦ ﻋﺪﺩ ﻣﻌﻴﻦ ﻣﻦ‬
‫ﺗﺪﺍﺧﻞﺣﻠﻘﺎﺕ ﺍﻟﺘﻜﺮﺍﺭ ﺃﻭ ﺇﻟﻰ ﺑﺪﺍﻳﺔ ﺩﻭﺭﺓ ﺗﻜﺮﺍﺭ ﺟﺪﻳﺪﺓ‪ .‬ﺗﻀﻤﻦ ‪ Plankalkül‬ﺑﻴﺎﻥ ﺍﺧﺘﻴﺎﺭ ‪ ،‬ﻟﻜﻨﻪ‬
‫ﻟﻢﻳﺴﻤﺢ ﺑـﺁﺧﺮﺑﻨﺪ‪.‬‬

‫ﻛﺎﻧﺖﺇﺣﺪﻯ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻷﻛﺜﺮ ﺇﺛﺎﺭﺓ ﻟﻼﻫﺘﻤﺎﻡ ﻓﻲ ﺑﺮﺍﻣﺞ ‪ Zuse‬ﻫﻲ ﺗﻀﻤﻴﻦ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ‬


‫ﺍﻟﺮﻳﺎﺿﻴﺔﺍﻟﺘﻲ ﺗﻮﺿﺢ ﺍﻟﻌﻼﻗﺎﺕ ﺍﻟﺤﺎﻟﻴﺔ ﺑﻴﻦ ﻣﺘﻐﻴﺮﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﺫﻛﺮﺕ ﻫﺬﻩ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻣﺎ ﻳﻤﻜﻦ‬
‫ﺃﻥﻳﻜﻮﻥ ﺻﺤﻴﺤﺎً ﺃﺛﻨﺎء ﺍﻟﺘﻨﻔﻴﺬ ﻋﻨﺪ ﻧﻘﺎﻁ ﻇﻬﻮﺭﻫﺎ ﻓﻲ ﺍﻟﻜﻮﺩ‪ .‬ﻫﺬﻩ ﺗﺸﺒﻪ ﺇﻟﻰ ﺣﺪ ﺑﻌﻴﺪ ﺗﺄﻛﻴﺪﺍﺕ‬
‫‪ Java‬ﻭﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﺩﻻﻻﺕ ﺑﺪﻳﻬﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.3‬‬
‫‪39‬‬ ‫‪2.2‬ﺍﻷﻛﻮﺍﺩ ﺍﻟﻜﺎﺫﺑﺔ‬

‫ﺍﺣﺘﻮﺕﻣﺨﻄﻮﻃﺔ ‪ Zuse‬ﻋﻠﻰ ﺑﺮﺍﻣﺞ ﺫﺍﺕ ﺗﻌﻘﻴﺪ ﺃﻛﺒﺮ ﺑﻜﺜﻴﺮ ﻣﻦ ﺃﻱ ﺑﺮﺍﻣﺞ ﺗﻤﺖ ﻛﺘﺎﺑﺘﻬﺎ‬
‫ﻗﺒﻞﻋﺎﻡ ‪ .1945‬ﻭﺗﻀﻤﻨﺖ ﺑﺮﺍﻣﺞ ﻟﻔﺮﺯ ﻣﺼﻔﻮﻓﺎﺕ ﻣﻦ ﺍﻷﺭﻗﺎﻡ ؛ ﺍﺧﺘﺒﺎﺭ ﺍﺗﺼﺎﻝ ﺭﺳﻢ ﺑﻴﺎﻧﻲ‬
‫ﻣﻌﻴﻦ ؛ﺗﻨﻔﻴﺬ ﻋﻤﻠﻴﺎﺕ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﻭﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﺠﺬﺭ ﺍﻟﺘﺮﺑﻴﻌﻲ ؛‬
‫ﻭﺇﺟﺮﺍءﺗﺤﻠﻴﻞ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ ﻋﻠﻰ ﺍﻟﺼﻴﻎ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺃﻗﻮﺍﺱ ﻭﻋﻮﺍﻣﻞ ﻓﻲ ﺳﺘﺔ‬
‫ﻣﺴﺘﻮﻳﺎﺕﻣﺨﺘﻠﻔﺔ ﻣﻦ ﺍﻷﺳﺒﻘﻴﺔ‪ .‬ﻭﻟﻌﻞ ﺃﻛﺜﺮ ﻣﺎ ﻳﻤﻴﺰﻩ ﻫﻮ ﺧﻮﺍﺭﺯﻣﻴﺎﺗﻪ ﺍﻟﺘﻲ ﺗﻀﻢ ‪ 49‬ﺻﻔﺤﺔ‬
‫ﻟﻠﻌﺐﺍﻟﺸﻄﺮﻧﺞ ‪ ،‬ﻭﻫﻲ ﻟﻌﺒﺔ ﻟﻢ ﻳﻜﻦ ﺧﺒﻴﺮﺍً ﻓﻴﻬﺎ‪.‬‬

‫ﺇﺫﺍﻛﺎﻥ ﻋﺎﻟﻢ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻗﺪ ﻭﺟﺪ ﻭﺻﻒ ‪ Zuse‬ﻟـ ‪ Plankalkül‬ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ‬


‫ﻣﻦﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ‪ ،‬ﻓﺈﻥ ﺍﻟﺠﺎﻧﺐ ﺍﻟﻮﺣﻴﺪ ﻣﻦ ﺍﻟﻠﻐﺔ ﺍﻟﺬﻱ ﻛﺎﻥ ﺳﻴﻌﻮﻕ ﺗﻨﻔﻴﺬﻩ ﻛﻤﺎ ﻫﻮ ﻣﺤﺪﺩ‬
‫ﻟﻜﺎﻥﻫﻮ ﺍﻟﺘﺪﻭﻳﻦ‪ .‬ﺗﺘﻜﻮﻥ ﻛﻞ ﻋﺒﺎﺭﺓ ﻣﻦ ﺳﻄﺮﻳﻦ ﺃﻭ ﺛﻼﺛﺔ ﺃﺳﻄﺮ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺒﺮﻣﺠﻴﺔ‪ .‬ﻛﺎﻥ‬
‫ﺍﻟﺴﻄﺮﺍﻷﻭﻝ ﺃﺷﺒﻪ ﺑﺒﻴﺎﻧﺎﺕ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺎﻟﻴﺔ‪ .‬ﺍﻟﺴﻄﺮ ﺍﻟﺜﺎﻧﻲ ‪ ،‬ﺍﻟﺬﻱ ﻛﺎﻥ ﺍﺧﺘﻴﺎﺭﻳﺎً ‪ ،‬ﺍﺣﺘﻮﻯ ﻋﻠﻰ‬
‫ﺭﻣﻮﺯﻣﺮﺍﺟﻊ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻓﻲ ﺍﻟﺴﻄﺮ ﺍﻷﻭﻝ‪ .‬ﺍﺳﺘﺨﺪﻡ ﺗﺸﺎﺭﻟﺰ ﺑﺎﺑﺎﺝ ﻧﻔﺲ ﻃﺮﻳﻘﺔ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻰ‬
‫ﺍﻟﻤﺨﻄﻮﻃﺎﺕﻓﻲ ﺑﺮﺍﻣﺞ ﻟﻤﺤﺮﻛﻪ ﺍﻟﺘﺤﻠﻴﻠﻲ ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﻘﺮﻥ ﺍﻟﺘﺎﺳﻊ ﻋﺸﺮ‪ .‬ﺍﺣﺘﻮﻯ ﺍﻟﺴﻄﺮ‬
‫ﺍﻷﺧﻴﺮﻣﻦ ﻛﻞ ﺑﻴﺎﻥ ‪ Plankalkül‬ﻋﻠﻰ ﺃﺳﻤﺎء ﺍﻷﻧﻮﺍﻉ ﻟﻠﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻤﺬﻛﻮﺭﺓ ﻓﻲ ﺍﻟﺴﻄﺮ ﺍﻷﻭﻝ‪.‬‬
‫ﻫﺬﺍﺍﻟﺘﺮﻣﻴﺰ ﻣﺨﻴﻒ ﻟﻠﻐﺎﻳﺔ ﻋﻨﺪ ﺭﺅﻳﺘﻪ ﻷﻭﻝ ﻣﺮﺓ‪.‬‬

‫ﻣﺜﺎﻝﺑﻴﺎﻥ ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﺘﺎﻟﻲ ‪ ،‬ﻭﺍﻟﺬﻱ ﻳﻘﻮﻡ ﺑﺘﻌﻴﻴﻦ ﻗﻴﻤﺔ ﺍﻟﺘﻌﺒﻴﺮﺃ ]‪1+ [4‬ﻝﺃ ]‪، [5‬ﻳﻮﺿﺢ‬
‫ﻫﺬﺍﺍﻟﺘﺮﻣﻴﺰ‪ .‬ﺍﻟﺼﻒ ﺍﻟﻤﺴﻤﻰﺍﻟﺨﺎﻣﺲﻫﻮ ﻟﻠﻤﺨﻄﻮﻃﺎﺕ ‪ ،‬ﻭﺍﻟﺼﻒ ﺍﻟﻤﺴﻤﻰﺱﻫﻮ ﻷﻧﻮﺍﻉ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬ﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ‪1.n،‬‬
‫ﻳﻌﻨﻲﻋﺪﺩﺍً ﺻﺤﻴﺤﺎً ﻣﻦﻥﺃﺟﺰﺍء‪:‬‬

‫| ﺃ ‪ <= 1 +‬ﺃ‬
‫‪5‬‬ ‫ﺍﻟﺨﺎﻣﺲ| ‪4‬‬

‫‪1.n‬‬ ‫‪S | 1.n‬‬

‫ﻻﻳﺴﻌﻨﺎ ﺇﻻ ﺍﻟﺘﻜﻬﻦ ﺑﺎﻻﺗﺠﺎﻩ ﺍﻟﺬﻱ ﻛﺎﻥ ﻳﻤﻜﻦ ﺃﻥ ﻳﺘﺨﺬﻩ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺇﺫﺍ ﻛﺎﻥ ﻋﻤﻞ‬
‫‪ Zuse‬ﻣﻌﺮﻭﻓﺎً ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ ﻋﺎﻡ ‪ 1945‬ﺃﻭ ﺣﺘﻰ ﻋﺎﻡ ‪ .1950‬ﻭﻣﻦ ﺍﻟﻤﺜﻴﺮ ﻟﻼﻫﺘﻤﺎﻡ ﺃﻳﻀ ًﺎ‬
‫ﺍﻟﺘﻔﻜﻴﺮﻓﻲ ﻛﻴﻒ ﻛﺎﻥ ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻋﻤﻠﻪ ﻣﺨﺘﻠﻔﺎً ﻟﻮ ﺃﻧﻪ ﻗﺎﻡ ﺑﺬﻟﻚ ﻓﻲ ﺑﻴﺉﺔ ﺳﻠﻤﻴﺔ ﻣﺤﺎﻃﺔ ﺑـ‬
‫ﻋﻠﻤﺎءﺁﺧﺮﻳﻦ ‪ ،‬ﻭﻟﻴﺲ ﻓﻲ ﺃﻟﻤﺎﻧﻴﺎ ﻋﺎﻡ ‪ 1945‬ﻓﻲ ﻋﺰﻟﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ‪.‬‬

‫‪2.2‬ﺍﻷﻛﻮﺍﺩ ﺍﻟﻜﺎﺫﺑﺔ‬
‫ﺃﻭﻻ ‪،‬ﻻﺣﻆ ﺃﻥ ﺍﻟﻜﻠﻤﺔﻛﻮﺩ ﻣﺰﻳﻒﺗﺴﺘﺨﺪﻡ ﻫﻨﺎ ﺑﻤﻌﻨﻰ ﻣﺨﺘﻠﻒ ﻋﻦ ﻣﻌﻨﺎﻫﺎ ﺍﻟﻤﻌﺎﺻﺮ‪ .‬ﻧﺤﻦ ﻧﻄﻠﻖ‬
‫ﻋﻠﻰﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻘﺴﻢ ﺍﻟﺮﻣﻮﺯ ﺍﻟﻜﺎﺫﺑﺔ ﻷﻥ ﻫﺬﺍ ﻫﻮ ﻣﺎ ﺗﻢ ﺗﺴﻤﻴﺘﻪ‬
‫ﻓﻲﻭﻗﺖ ﺗﻄﻮﻳﺮﻫﺎ ﻭﺍﺳﺘﺨﺪﺍﻣﻬﺎ )ﺃﻭﺍﺧﺮ ﺍﻷﺭﺑﻌﻴﻨﻴﺎﺕ ﻭﺃﻭﺍﺉﻞ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ(‪.‬‬
‫ﻭﻣﻊﺫﻟﻚ ‪ ،‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻬﺎ ﻟﻴﺴﺖ ﺃﻛﻮﺍﺩ ﺯﺍﺉﻔﺔ ﺑﺎﻟﻤﻌﻨﻰ ﺍﻟﻤﻌﺎﺻﺮ‪.‬‬

‫ﻛﺎﻧﺖﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺘﻲ ﺃﺻﺒﺤﺖ ﻣﺘﻮﻓﺮﺓ ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻷﺭﺑﻌﻴﻨﻴﺎﺕ ﻭﺃﻭﺍﺉﻞ‬


‫ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ﺃﻗﻞ ﻗﺎﺑﻠﻴﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﺑﻜﺜﻴﺮ ﻣﻦ ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﺍﻟﻴﻮﻡ‪.‬‬
‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﻛﻮﻧﻬﺎ ﺑﻄﻴﺉﺔ ﻭﻏﻴﺮ ﻣﻮﺛﻮﻗﺔ ﻭﻣﻜﻠﻔﺔ ﻭﻟﺪﻳﻬﺎ ﺫﺍﻛﺮﺓ ﺻﻐﻴﺮﺓ ﻟﻠﻐﺎﻳﺔ ‪ ،‬ﻛﺎﻥ ﻣﻦ‬
‫ﺍﻟﺼﻌﺐﺑﺮﻣﺠﺔ ﺍﻵﻻﺕ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﺑﺴﺒﺐ ﻧﻘﺺ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺪﺍﻋﻤﺔ‪.‬‬
‫ﻟﻢﺗﻜﻦ ﻫﻨﺎﻙ ﻟﻐﺎﺕ ﺑﺮﻣﺠﺔ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺃﻭ ﺣﺘﻰ ﻟﻐﺎﺕ ﺗﺠﻤﻴﻊ ‪ ،‬ﻟﺬﻟﻚ ﺗﻢ ﺇﺟﺮﺍء‬
‫ﺍﻟﺒﺮﻣﺠﺔﻓﻲ ﻛﻮﺩ ﺍﻵﻟﺔ ‪ ،‬ﻭﻫﻮ ﺃﻣﺮ ﺷﺎﻕ ﻭﻣﻀﺠﺮ ﻋﻠﻰ ﺣﺪ ﺳﻮﺍء‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪40‬‬

‫ﻣﻌﺮﺽﻟﻠﺨﻄﺄ‪ .‬ﻣﻦ ﺑﻴﻦ ﻣﺸﺎﻛﻠﻬﺎ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺮﻣﻮﺯ ﺍﻟﺮﻗﻤﻴﺔ ﻟﺘﺤﺪﻳﺪ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ‬
‫ﺍﻟﻤﺜﺎﻝ ‪،‬ﻗﺪ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺗﻌﻠﻴﻤﺎﺕ ﺇﺿﺎﻓﺔ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻜﻮﺩ ‪ 14‬ﺑﺪﻻ ًﻣﻦ ﺍﺳﻢ ﻧﺼﻲ ﺿﻤﻨﻲ ‪ ،‬ﺣﺘﻰ‬
‫ﻟﻮﻛﺎﻥ ﺣﺮﻓﺎً ﻭﺍﺣﺪﺍً ﻓﻘﻂ‪ .‬ﻫﺬﺍ ﻳﺠﻌﻞ ﺍﻟﺒﺮﺍﻣﺞ ﺻﻌﺒﺔ ﺍﻟﻘﺮﺍءﺓ‪ .‬ﺍﻟﻤﺸﻜﻠﺔ ﺍﻷﻛﺜﺮ ﺧﻄﻮﺭﺓ ﻫﻲ‬
‫ﺍﻟﻤﻌﺎﻟﺠﺔﺍﻟﻤﻄﻠﻘﺔ ‪ ،‬ﻣﻤﺎ ﻳﺠﻌﻞ ﺗﻌﺪﻳﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻣﻤﻼ ًﻭﻋﺮﺿﺔ ﻟﻠﺨﻄﺄ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪،‬‬
‫ﺍﻓﺘﺮﺽﺃﻥ ﻟﺪﻳﻨﺎ ﺑﺮﻧﺎﻣﺞ ﻟﻐﺔ ﺁﻟﺔ ﻣﺨﺰﻥ ﻓﻲ ﺍﻟﺬﺍﻛﺮﺓ‪ .‬ﺗﺸﻴﺮ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻓﻲ ﻣﺜﻞ ﻫﺬﺍ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﺇﻟﻰ ﻣﻮﺍﻗﻊ ﺃﺧﺮﻯ ﺩﺍﺧﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ‪ ،‬ﻋﺎﺩﺓ ًﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺃﻭ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺃﻫﺪﺍﻑ‬
‫ﺗﻌﻠﻴﻤﺎﺕﺍﻟﻔﺮﻉ‪ .‬ﻳﺆﺩﻱ ﺇﺩﺧﺎﻝ ﺗﻌﻠﻴﻤﺎﺕ ﻓﻲ ﺃﻱ ﻣﻮﺿﻊ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺨﻼﻑ ﺍﻟﻨﻬﺎﻳﺔ ﺇﻟﻰ ﺇﺑﻄﺎﻝ‬
‫ﺻﺤﺔﺟﻤﻴﻊ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﺗﺸﻴﺮ ﺇﻟﻰ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺍﻟﺘﻲ ﺗﺘﺠﺎﻭﺯ ﻧﻘﻄﺔ ﺍﻹﺩﺭﺍﺝ ‪ ،‬ﻷﻧﻪ ﻳﺠﺐ ﺯﻳﺎﺩﺓ‬
‫ﻫﺬﻩﺍﻟﻌﻨﺎﻭﻳﻦ ﻹﻓﺴﺎﺡ ﺍﻟﻤﺠﺎﻝ ﻟﻠﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ‪ .‬ﻹﺟﺮﺍء ﺍﻹﺿﺎﻓﺔ ﺑﺸﻜﻞ ﺻﺤﻴﺢ ‪ ،‬ﻳﺠﺐ‬
‫ﺍﻟﻌﺜﻮﺭﻋﻠﻰ ﺟﻤﻴﻊ ﺍﻹﺭﺷﺎﺩﺍﺕ ﺍﻟﺘﻲ ﺗﺸﻴﺮ ﺇﻟﻰ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺍﻟﺘﻲ ﺗﻠﻲ ﺍﻹﺿﺎﻓﺔ ﻭﺗﻌﺪﻳﻠﻬﺎ‪ .‬ﺗﺤﺪﺙ‬
‫ﻣﺸﻜﻠﺔﻣﻤﺎﺛﻠﺔ ﻣﻊ ﺣﺬﻑ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ‪ ،‬ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﺘﻀﻤﻦ ﻟﻐﺎﺕ ﺍﻵﻟﺔ‬
‫ﺗﻌﻠﻴﻤﺎﺕ"ﺑﺪﻭﻥ ﻋﻤﻠﻴﺔ" ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺃﻥ ﺗﺤﻞ ﻣﺤﻞ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﻤﺤﺬﻭﻓﺔ ‪ ،‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﺗﺠﻨﺐ‬
‫ﺍﻟﻤﺸﻜﻠﺔ‪.‬‬

‫ﻫﺬﻩﻣﺸﻜﻼﺕ ﻗﻴﺎﺳﻴﺔ ﻣﻊ ﺟﻤﻴﻊ ﻟﻐﺎﺕ ﺍﻵﻟﺔ ﻭﻛﺎﻧﺖ ﺍﻟﺪﻭﺍﻓﻊ ﺍﻷﺳﺎﺳﻴﺔ ﻻﺧﺘﺮﺍﻉ‬


‫ﺍﻟﻤﺠﻤﻌﺎﺕﻭﻟﻐﺎﺕ ﺍﻟﺘﺠﻤﻴﻊ‪ .‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺫﻟﻚ ‪ ،‬ﻛﺎﻧﺖ ﻣﻌﻈﻢ ﻣﺸﺎﻛﻞ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﺫﻟﻚ‬
‫ﺍﻟﻮﻗﺖﺭﻗﻤﻴﺔ ﻭﺗﺘﻄﻠﺐ ﻋﻤﻠﻴﺎﺕ ﺣﺴﺎﺑﻴﺔ ﺑﺎﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ ﻭﻓﻬﺮﺳﺔ ﻣﻦ ﻧﻮﻉ ﻣﺎ ﻟﻠﺴﻤﺎﺡ‬
‫ﺑﺎﻻﺳﺘﺨﺪﺍﻡﺍﻟﻤﺮﻳﺢ ﻟﻠﻤﺼﻔﻮﻓﺎﺕ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻟﻢ ﻳﺘﻢ ﺗﻀﻤﻴﻦ ﺃﻱ ﻣﻦ ﻫﺬﻩ ﺍﻟﻘﺪﺭﺍﺕ ﻓﻲ ﺑﻨﻴﺔ‬
‫ﺃﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻷﺭﺑﻌﻴﻨﻴﺎﺕ ﻭﺃﻭﺍﺉﻞ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ‪ .‬ﺃﺩﺕ ﺃﻭﺟﻪ‬
‫ﺍﻟﻘﺼﻮﺭﻫﺬﻩ ﺑﻄﺒﻴﻌﺔ ﺍﻟﺤﺎﻝ ﺇﻟﻰ ﺗﻄﻮﻳﺮ ﻟﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﺇﻟﻰ ﺣﺪ ﻣﺎ‪.‬‬

‫‪2.2.1‬ﺍﻟﺮﻣﺰ ﺍﻟﻤﺨﺘﺼﺮ‬
‫ﺗﻢﺗﻄﻮﻳﺮ ﺃﻭﻝ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ ‪ ،‬ﺍﻟﻤﺴﻤﺎﺓ ‪ ، Short Code‬ﺑﻮﺍﺳﻄﺔ ‪ John Mauchly‬ﻓﻲ‬
‫ﻋﺎﻡ‪ 1949‬ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪ ، BINAC‬ﻭﺍﻟﺘﻲ ﻛﺎﻧﺖ ﻭﺍﺣﺪﺓ ﻣﻦ ﺃﻭﻟﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺔﺍﻟﻨﺎﺟﺤﺔ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻤﺨﺰﻧﺔ‪ .‬ﺗﻢ ﻧﻘﻞ ﺍﻟﺮﻣﺰ ﺍﻟﻘﺼﻴﺮ ﻻﺣﻘﺎً ﺇﻟﻰ ﻛﻤﺒﻴﻮﺗﺮ ‪) UNIVAC I‬ﺃﻭﻝ‬
‫ﻛﻤﺒﻴﻮﺗﺮﺇﻟﻜﺘﺮﻭﻧﻲ ﺗﺠﺎﺭﻱ ﻳﺒُﺎﻉ ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ( ‪ ،‬ﻭﻛﺎﻥ ﻟﻌﺪﺓ ﺳﻨﻮﺍﺕ ﺃﺣﺪ ﺍﻟﻮﺳﺎﺉﻞ‬
‫ﺍﻷﺳﺎﺳﻴﺔﻟﺒﺮﻣﺠﺔ ﺗﻠﻚ ﺍﻷﺟﻬﺰﺓ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻻ ﻳﻌُﺮﻑ ﺳﻮﻯ ﺍﻟﻘﻠﻴﻞ ﻋﻦ ﺍﻟﻜﻮﺩ ﺍﻟﻤﺨﺘﺼﺮ‬
‫ﺍﻷﺻﻠﻲﻷﻧﻪ ﻟﻢ ﻳﺘﻢ ﻧﺸﺮ ﻭﺻﻔﻪ ﺍﻟﻜﺎﻣﻞ ﻣﻄﻠﻘﺎً ‪ ،‬ﻓﻘﺪ ﻧﺠﺎ ﺩﻟﻴﻞ ﺑﺮﻣﺠﺔ ﻹﺻﺪﺍﺭ (‪-Rand ، 1952‬‬
‫‪ .UNIVAC I )Remington‬ﻣﻦ ﺍﻵﻣﻦ ﺃﻥ ﻧﻔﺘﺮﺽ ﺃﻥ ﺍﻟﻨﺴﺨﺘﻴﻦ ﻛﺎﻧﺘﺎ ﻣﺘﺸﺎﺑﻬﺘﻴﻦ ﻟﻠﻐﺎﻳﺔ‪.‬‬

‫ﻛﺎﻧﺖﻛﻠﻤﺎﺕ ﺫﺍﻛﺮﺓ ‪ UNIVAC I‬ﺗﺤﺘﻮﻱ ﻋﻠﻰ ‪ 72‬ﺑﺘﺎً ‪ ،‬ﻣﺠﻤﻌﺔ ﻓﻲ ‪ 12‬ﺑﺎﻳﺖ ﺳﺘﺔ ﺑﺖ‪.‬‬
‫ﻳﺘﻜﻮﻥﺍﻟﻜﻮﺩ ﺍﻟﻘﺼﻴﺮ ﻣﻦ ﺇﺻﺪﺍﺭﺍﺕ ﻣﺸﻔﺮﺓ ﻣﻦ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺮﻳﺎﺿﻴﺔ ﺍﻟﺘﻲ ﻳﺠﺐ ﺗﻘﻴﻴﻤﻬﺎ‪.‬‬
‫ﻛﺎﻧﺖﺍﻟﺮﻣﻮﺯ ﻋﺒﺎﺭﺓ ﻋﻦ ﻗﻴﻢ ﺛﻨﺎﺉﻴﺔ ﺍﻟﺒﺎﻳﺖ ‪ ،‬ﻭﻳﻤﻜﻦ ﺗﺮﻣﻴﺰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻌﺎﺩﻻﺕ ﻓﻲ ﻛﻠﻤﺔ‬
‫ﻭﺍﺣﺪﺓ‪.‬ﺗﻢ ﺗﻀﻤﻴﻦ ﺭﻣﻮﺯ ﺍﻟﻌﻤﻠﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬

‫‪ 1‬ﻥ )ﻥ ‪ (2 +‬ﺍﻟﻘﻮﺓ ﺍﻟﺜﺎﻧﻴﺔ‬ ‫ﻗﻴﻤﺔﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻄﻠﻘﺔ‬ ‫‪06‬‬ ‫‪-‬‬ ‫‪01‬‬


‫‪ 2‬ﻥ )ﻥ ‪ (2 +‬ﻭ ﺟﺬﺭ‬ ‫‪+‬‬ ‫‪07‬‬ ‫(‬ ‫‪02‬‬
‫‪ 4‬ﻥ ﺇﺫﺍ>= ‪n‬‬ ‫ﻳﻮﻗﻒ‬ ‫‪08‬‬ ‫=‬ ‫‪03‬‬
‫‪ 58‬ﻃﺒﺎﻋﺔﻭﻋﻼﻣﺔ ﺗﺒﻮﻳﺐ‬ ‫)‬ ‫‪09‬‬ ‫‪/‬‬ ‫‪04‬‬
‫‪41‬‬ ‫‪2.2‬ﺍﻷﻛﻮﺍﺩ ﺍﻟﻜﺎﺫﺑﺔ‬

‫ﺗﻤﺖﺗﺴﻤﻴﺔ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺑﺮﻣﻮﺯ ﺯﻭﺝ ﺍﻟﺒﺎﻳﺖ ‪ ،‬ﻭﻛﺬﻟﻚ ﺍﻟﻤﻮﺍﻗﻊ ﺍﻟﺘﻲ ﺳﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻛﺜﻮﺍﺑﺖ‪.‬‬
‫ﻋﻠﻰﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ‪X0،‬ﻭ‪Y0‬ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﻣﺘﻐﻴﺮﺍﺕ‪ .‬ﺍﻟﺒﻴﺎﻥ‬

‫((‪X0 = SQRT )ABS )Y0‬‬

‫ﺳﻴﺘﻢﺗﺮﻣﻴﺰﻫﺎ ﻓﻲ ﻛﻠﻤﺔ ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ‪00 X0 03 20 06 Y0.‬ﺍﻷﻭﻟﻲ‪00‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻛﺤﺸﻮ‬


‫ﻟﻤﻞءﺍﻟﻜﻠﻤﺔ‪ .‬ﻭﻣﻦ ﺍﻟﻤﺜﻴﺮ ﻟﻼﻫﺘﻤﺎﻡ ﺃﻧﻪ ﻟﻢ ﻳﻜﻦ ﻫﻨﺎﻙ ﻛﻮﺩ ﺍﻟﻀﺮﺏ‪ .‬ﺗﻤﺖ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﻀﺮﺏ‬
‫ﻣﻦﺧﻼﻝ ﻭﺿﻊ ﺍﻟﻤﻌﺎﻣﻠﻴﻦ ﺑﺠﻮﺍﺭ ﺑﻌﻀﻬﻤﺎ ﺍﻟﺒﻌﺾ ‪ ،‬ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻓﻲ ﺍﻟﺠﺒﺮ‪.‬‬

‫ﻟﻢﺗﺘﻢ ﺗﺮﺟﻤﺔ ﺍﻟﻜﻮﺩ ﺍﻟﻘﺼﻴﺮ ﺇﻟﻰ ﺭﻣﺰ ﺍﻟﺠﻬﺎﺯ ؛ ﺑﺪﻻ ﻣﻦ ﺫﻟﻚ ‪ ،‬ﺗﻢ ﺗﻨﻔﻴﺬﻩ ﻣﻊ ﻣﺘﺮﺟﻢ ﻧﻘﻲ‪.‬‬
‫ﻓﻲﺫﻟﻚ ﺍﻟﻮﻗﺖ ‪ ،‬ﺗﻢ ﺍﺳﺘﺪﻋﺎء ﻫﺬﻩ ﺍﻟﻌﻤﻠﻴﺔﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺘﻠﻘﺎﺉﻴﺔ‪.‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ ﻳﺒﺴﻂ ﻋﻤﻠﻴﺔ‬
‫ﺍﻟﺒﺮﻣﺠﺔ ‪،‬ﻭﻟﻜﻦ ﻋﻠﻰ ﺣﺴﺎﺏ ﻭﻗﺖ ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﻛﺎﻥ ﺗﻔﺴﻴﺮ ﺍﻟﻜﻮﺩ ﺍﻟﻘﺼﻴﺮ ﺃﺑﻄﺄ ﺑﺤﻮﺍﻟﻲ ‪ 50‬ﻣﺮﺓ ﻣﻦ‬
‫ﻛﻮﺩﺍﻵﻟﺔ‪.‬‬

‫‪2.2.2‬ﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﺴﺮﻳﻊ‬
‫ﻓﻲﺃﻣﺎﻛﻦ ﺃﺧﺮﻯ ‪ ،‬ﺗﻢ ﺗﻄﻮﻳﺮ ﺍﻷﻧﻈﻤﺔ ﺍﻟﺘﻔﺴﻴﺮﻳﺔ ﺍﻟﺘﻲ ﻭﺳﻌﺖ ﻟﻐﺎﺕ ﺍﻵﻟﺔ ﻟﺘﺸﻤﻞ ﻋﻤﻠﻴﺎﺕ‬
‫ﺍﻟﻔﺎﺻﻠﺔﺍﻟﻌﺎﺉﻤﺔ‪ .‬ﻳﻌﺪ ﻧﻈﺎﻡ ‪ Speedcoding‬ﺍﻟﺬﻱ ﻃﻮﺭﻩ ‪ John Backus‬ﻟـ ‪ IBM 701‬ﻣﺜﺎﻻ ً‬
‫ﻋﻠﻰﻣﺜﻞ ﻫﺬﺍ ﺍﻟﻨﻈﺎﻡ )‪ .(Backus ، 1954‬ﻗﺎﻡ ﻣﺘﺮﺟﻢ ﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﺴﺮﻳﻊ ﺑﺘﺤﻮﻳﻞ ‪ 701‬ﺇﻟﻰ ﺁﻟﺔ‬
‫ﺣﺎﺳﺒﺔﺍﻓﺘﺮﺍﺿﻴﺔ ﺫﺍﺕ ﺛﻼﺛﺔ ﻋﻨﺎﻭﻳﻦ ﻟﻠﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ‪ .‬ﺗﻀﻤﻦ ﺍﻟﻨﻈﺎﻡ ﺗﻌﻠﻴﻤﺎﺕ ﺯﺍﺉﻔﺔ‬
‫ﻟﻠﻌﻤﻠﻴﺎﺕﺍﻟﺤﺴﺎﺑﻴﺔ ﺍﻷﺭﺑﻊ ﻋﻠﻰ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ ‪ ،‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﻋﻤﻠﻴﺎﺕ ﻣﺜﻞ ﺍﻟﺠﺬﺭ‬
‫ﺍﻟﺘﺮﺑﻴﻌﻲﻭﺍﻟﺠﻴﺐ ﻭﺍﻟﻈﻞ ﺍﻟﻘﻮﺳﻲ ﻭﺍﻷﺱ ﻭﺍﻟﻠﻮﻏﺎﺭﻳﺘﻢ‪ .‬ﻛﺎﻧﺖ ﺍﻟﻔﺮﻭﻉ ﺍﻟﺸﺮﻃﻴﺔ ﻭﻏﻴﺮ ﺍﻟﻤﺸﺮﻭﻃﺔ‬
‫ﻭﺗﺤﻮﻳﻼﺕﺍﻹﺩﺧﺎﻝ ‪ /‬ﺍﻹﺧﺮﺍﺝ ﺟﺰءﺍً ﻣﻦ ﺍﻟﻌﻤﺎﺭﺓ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ‪ .‬ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﻓﻜﺮﺓ ﻋﻦ ﻗﻴﻮﺩ ﻫﺬﻩ‬
‫ﺍﻷﻧﻈﻤﺔ ‪،‬ﺿﻊ ﻓﻲ ﺍﻋﺘﺒﺎﺭﻙ ﺃﻥ ﺍﻟﺬﺍﻛﺮﺓ ﺍﻟﻘﺎﺑﻠﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﺍﻟﻤﺘﺒﻘﻴﺔ ﺑﻌﺪ ﺗﺤﻤﻴﻞ ﺍﻟﻤﺘﺮﺟﻢ ﻛﺎﻧﺖ‬
‫‪700‬ﻛﻠﻤﺔ ﻓﻘﻂ ﻭﺃﻥ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻹﺿﺎﻓﺔ ﺍﺳﺘﻐﺮﻗﺖ ‪ 4.2‬ﻣﻠﻠﻲ ﺛﺎﻧﻴﺔ ﻟﻠﺘﻨﻔﻴﺬ‪ .‬ﻣﻦ ﻧﺎﺣﻴﺔ ﺃﺧﺮﻯ ‪،‬‬
‫ﺗﻀﻤﻨﺖ‪ Speedcoding‬ﻣﺮﻓﻘﺎً ﺟﺪﻳﺪﺍً ﻳﺘﻤﺜﻞ ﻓﻲ ﺯﻳﺎﺩﺓ ﺳﺠﻼﺕ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺗﻠﻘﺎﺉﻴﺎً‪ .‬ﻟﻢ ﺗﻈﻬﺮ‬
‫ﻫﺬﻩﺍﻟﻤﻴﺰﺓ ﻓﻲ ﺍﻷﺟﻬﺰﺓ ﺣﺘﻰ ﺣﻮﺍﺳﻴﺐ ‪ UNIVAC 1107‬ﻟﻌﺎﻡ ‪ .1962‬ﻭﺑﺴﺒﺐ ﻫﺬﻩ ﺍﻟﻤﻴﺰﺍﺕ ‪،‬‬
‫ﻳﻤﻜﻦﺇﺟﺮﺍء ﻣﻀﺎﻋﻔﺔ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻓﻲ ‪ 12‬ﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ ‪ .Speedcoding‬ﺍﺩﻋﻰ ﺑﺎﻛﻮﺱ ﺃﻥ‬
‫ﺍﻟﻤﺸﺎﻛﻞﺍﻟﺘﻲ ﻗﺪ ﺗﺴﺘﻐﺮﻕ ﺃﺳﺒﻮﻋﻴﻦ ﻟﺒﺮﻣﺠﺘﻬﺎ ﻓﻲ ﻛﻮﺩ ﺍﻵﻟﺔ ﻳﻤﻜﻦ ﺑﺮﻣﺠﺘﻬﺎ ﻓﻲ ﺑﻀﻊ ﺳﺎﻋﺎﺕ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﺍﻟﺘﺮﻣﻴﺰ ﺍﻟﺴﺮﻳﻊ‪.‬‬

‫‪2.2.3‬ﻧﻈﺎﻡ ‪" UNIVAC‬ﺍﻟﺘﺠﻤﻴﻊ"‬


‫ﺑﻴﻦﻋﺎﻣﻲ ‪ 1951‬ﻭ ‪ ، 1953‬ﻃﻮﺭ ﻓﺮﻳﻖ ﺑﻘﻴﺎﺩﺓ ‪ Grace Hopper‬ﻓﻲ ‪ UNIVAC‬ﺳﻠﺴﻠﺔ ﻣﻦ‬
‫ﺃﻧﻈﻤﺔ"ﺍﻟﺘﺠﻤﻴﻊ" ﺍﻟﻤﺴﻤﺎﺓ ‪ A-0‬ﻭ ‪ A-1‬ﻭ ‪ A-2‬ﻭﺍﻟﺘﻲ ﻭﺳﻌﺖ ﺭﻣﺰﺍً ﺯﺍﺉﻔﺎً ﺇﻟﻰ ﺑﺮﺍﻣﺞ ﻓﺮﻋﻴﺔ ﻟﺮﻣﺰ‬
‫ﺍﻵﻟﺔﺑﻨﻔﺲ ﻃﺮﻳﻘﺔ ﺗﻮﺳﻴﻊ ﻭﺣﺪﺍﺕ ﺍﻟﻤﺎﻛﺮﻭ ﻓﻲ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ‪ .‬ﻛﺎﻥ ﻣﺼﺪﺭ ﺍﻟﻜﻮﺩ ﺍﻟﻜﺎﺫﺏ ﻟﻬﺆﻻء "‬
‫ﺍﻟﻤﺘﺮﺟﻤﻴﻦ" ﻻ ﻳﺰﺍﻝ ﺑﺪﺍﺉﻴﺎً ﺗﻤﺎﻣﺎً ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﻛﺎﻥ ﺗﺤﺴﻴﻨﺎً ﻛﺒﻴﺮﺍً ﻋﻠﻰ ﺭﻣﺰ ﺍﻟﺠﻬﺎﺯ‬
‫ﻷﻧﻪﺟﻌﻞ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﺼﺪﺭ ﺃﻗﺼﺮ ﺑﻜﺜﻴﺮ‪ .‬ﺍﻗﺘﺮﺡ ﻭﻳﻠﻜﺲ )‪ (1952‬ﺑﺸﻜﻞ ﻣﺴﺘﻘﻞ ﻋﻤﻠﻴﺔ ﻣﻤﺎﺛﻠﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪42‬‬

‫‪2.2.4‬ﺍﻷﻋﻤﺎﻝ ﺫﺍﺕ ﺍﻟﺼﻠﺔ‬


‫ﺗﻢﺗﻄﻮﻳﺮ ﻭﺳﺎﺉﻞ ﺃﺧﺮﻯ ﻟﺘﺴﻬﻴﻞ ﻣﻬﻤﺔ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﻧﻔﺲ ﺍﻟﻮﻗﺖ ﺗﻘﺮﻳﺒﺎً‪ .‬ﻓﻲ ﺟﺎﻣﻌﺔ‬
‫ﻛﺎﻣﺒﺮﻳﺪﺝ ‪،‬ﻃﻮﺭ ﺩﻳﻔﻴﺪ ﺟﻴﻪ ﻭﻳﻠﺮ )‪ (1950‬ﻃﺮﻳﻘﺔ ﻻﺳﺘﺨﺪﺍﻡ ﻛﺘﻞ ﻣﻦ ﺍﻟﻌﻨﺎﻭﻳﻦ ﺍﻟﻘﺎﺑﻠﺔ ﻟﻠﻨﻘﻞ‬
‫ﻟﺤﻞﻣﺸﻜﻠﺔ ﺍﻟﻌﻨﻮﻧﺔ ﺍﻟﻤﻄﻠﻘﺔ ‪ ،‬ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﺍﻷﻗﻞ ‪ ،‬ﻭﺑﻌﺪ ﺫﻟﻚ ﻗﺎﻡ ﻣﻮﺭﻳﺲ ﻓﻲ‪ .‬ﻭﻳﻠﻜﺲ )ﺃﻳﻀﺎً‬
‫ﻓﻲﻛﺎﻣﺒﺮﻳﺪﺝ( ﺑﺘﻮﺳﻴﻊ ﺍﻟﻔﻜﺮﺓ ﻟﺘﺸﻤﻞ ﺍﻟﺘﺼﻤﻴﻢ ﺑﺮﻧﺎﻣﺞ ﺗﺠﻤﻴﻊ ﻳﻤﻜﻨﻪ ﺍﻟﺠﻤﻊ ﺑﻴﻦ ﺍﻹﺟﺮﺍءﺍﺕ‬
‫ﺍﻟﻔﺮﻋﻴﺔﺍﻟﻤﺨﺘﺎﺭﺓ ﻭﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ )‪ .(Wilkes et al.، 1951، 1957‬ﻛﺎﻥ ﻫﺬﺍ ﺑﺎﻟﻔﻌﻞ ﺗﻘﺪﻣﺎً‬
‫ﻣﻬﻤﺎًﻭﺃﺳﺎﺳﻴﺎً‪.‬‬

‫ﻳﺠﺐﺃﻥ ﻧﺬﻛﺮ ﺃﻳﻀﺎً ﺃﻥ ﻟﻐﺎﺕ ﺍﻟﺘﺠﻤﻴﻊ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺨﺘﻠﻒ ﺗﻤﺎﻣﺎً ﻋﻦ ﺍﻷﻛﻮﺍﺩ ﺍﻟﻜﺎﺫﺑﺔ ﺍﻟﺘﻲ‬
‫ﺗﻤﺖﻣﻨﺎﻗﺸﺘﻬﺎ ‪ ،‬ﺗﻄﻮﺭﺕ ﺧﻼﻝ ﺃﻭﺍﺉﻞ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻛﺎﻥ ﻟﻬﺎ‬
‫ﺗﺄﺛﻴﺮﺿﺉﻴﻞ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ‪.‬‬

‫‪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‬ﻭﻓﻮﺭﺗﺮﺍﻥ‬

‫ﻛﺎﻥ‪ Autocode‬ﺍﻟﺨﺎﺹ ﺑـ ‪ Glennie‬ﻣﻨﺨﻔﺾ ﺍﻟﻤﺴﺘﻮﻯ ﻟﻠﻐﺎﻳﺔ ﻭﻣﻮﺟﻪ ﻧﺤﻮ ﺍﻵﻟﺔ ﺑﺤﻴﺚ ﻻ‬


‫ﻳﻨﺒﻐﻲﺍﻋﺘﺒﺎﺭﻩ ﻧﻈﺎﻣﺎً ﻣﺠﻤﻌﺎً‪ .‬ﻳﻌﻄﻲ ‪ Backus‬ﺍﻟﻔﻀﻞ ﺇﻟﻰ ‪ Laning‬ﻭ ‪ Zierler‬ﻓﻲ ﻣﻌﻬﺪ‬
‫ﻣﺎﺳﺎﺗﺸﻮﺳﺘﺲﻟﻠﺘﻜﻨﻮﻟﻮﺟﻴﺎ‪.‬‬
‫ﻛﺎﻥﻧﻈﺎﻡ (‪ Laning and Zierler )Laning and Zierler ، 1954‬ﺃﻭﻝ ﻧﻈﺎﻡ ﺗﺮﺟﻤﺔ‬
‫ﺟﺒﺮﻱﻳﺘﻢ ﺗﻨﻔﻴﺬﻩ‪ .‬ﻣﻦ ﺧﻼﻝ ﺍﻟﺠﺒﺮ ‪ ،‬ﻓﺈﻧﻨﺎ ﻧﻌﻨﻲ ﺃﻧﻬﺎ ﺗﺮﺟﻤﺖ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ‪ ،‬ﻭﺗﺴﺘﺨﺪﻡ‬
‫ﺑﺮﺍﻣﺞﻓﺮﻋﻴﺔ ﻣﺸﻔﺮﺓ ﺑﺸﻜﻞ ﻣﻨﻔﺼﻞ ﻟﺤﺴﺎﺏ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﻤﺘﻌﺎﻟﻴﺔ )ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪،‬‬
‫ﺍﻟﺠﻴﺐﻭﺍﻟﻠﻮﻏﺎﺭﻳﺘﻢ( ‪ ،‬ﻭﺗﻀﻤﻨﺖ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‪ .‬ﺗﻢ ﺗﻨﻔﻴﺬ ﺍﻟﻨﻈﺎﻡ ﻋﻠﻰ ﻛﻤﺒﻴﻮﺗﺮ ‪Whirlwind‬‬
‫‪ ، MIT‬ﻓﻲ ﺷﻜﻞ ﻧﻤﻮﺫﺝ ﺃﻭﻟﻲ ﺗﺠﺮﻳﺒﻲ ‪ ،‬ﻓﻲ ﺻﻴﻒ ﻋﺎﻡ ‪ 1952‬ﻭﻓﻲ ﺷﻜﻞ ﺃﻛﺜﺮ ﻗﺎﺑﻠﻴﺔ‬
‫ﻟﻼﺳﺘﺨﺪﺍﻡﺑﺤﻠﻮﻝ ﻣﺎﻳﻮ ‪ .1953‬ﻗﺎﻡ ﺍﻟﻤﺘﺮﺟﻢ ﺑﺈﻧﺸﺎء ﺍﺳﺘﺪﻋﺎء ﺭﻭﺗﻴﻦ ﻓﺮﻋﻲ ﻟﺘﺸﻔﻴﺮ ﻛﻞ ﺻﻴﻐﺔ ‪،‬‬
‫ﺃﻭﺗﻌﺒﻴﺮ ‪ ،‬ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ‪ .‬ﻛﺎﻧﺖ ﻟﻐﺔ ﺍﻟﻤﺼﺪﺭ ﺳﻬﻠﺔ ﺍﻟﻘﺮﺍءﺓ ‪ ،‬ﻭﻛﺎﻧﺖ ﺗﻌﻠﻴﻤﺎﺕ ﺍﻵﻟﺔ ﺍﻟﻔﻌﻠﻴﺔ‬
‫ﺍﻟﻮﺣﻴﺪﺓﺍﻟﻤﺘﻀﻤﻨﺔ ﻫﻲ ﺍﻟﺘﻔﺮﻳﻊ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﺍﻟﻌﻤﻞ ﺳﺒﻖ ﺍﻟﻌﻤﻞ ﻋﻠﻰ ‪ ، Fortran‬ﺇﻻ‬
‫ﺃﻧﻪﻟﻢ ﻳﻔﻠﺖ ﻣﻦ ﻣﻌﻬﺪ ﻣﺎﺳﺎﺗﺸﻮﺳﺘﺲ ﻟﻠﺘﻜﻨﻮﻟﻮﺟﻴﺎ‪.‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﻫﺬﻩ ﺍﻷﻋﻤﺎﻝ ﺍﻟﺴﺎﺑﻘﺔ ‪ ،‬ﻛﺎﻧﺖ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﻫﻲ ﺃﻭﻝ ﻟﻐﺔ ﻣﺠﻤﻌﺔ ﺭﻓﻴﻌﺔ‬
‫ﺍﻟﻤﺴﺘﻮﻯﻣﻘﺒﻮﻟﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﺗﺆﺭﺥ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ ﻫﺬﺍ ﺍﻟﺘﻄﻮﺭ ﺍﻟﻤﻬﻢ‪.‬‬

‫‪2.3.2‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﺣﺘﻰﻗﺒﻞ ﺍﻹﻋﻼﻥ ﻋﻦ ﻧﻈﺎﻡ ‪ 704‬ﻓﻲ ﻣﺎﻳﻮ ‪ ، 1954‬ﺑﺪﺃﺕ ﺧﻄﻂ ﻓﻮﺭﺗﺮﺍﻥ‪ .‬ﺑﺤﻠﻮﻝ ﻧﻮﻓﻤﺒﺮ‬
‫‪، 1954‬ﺃﻧﺘﺞ ﺟﻮﻥ ﺑﺎﻛﻮﺱ ﻭﻣﺠﻤﻮﻋﺘﻪ ﻓﻲ ﺷﺮﻛﺔ ﺁﻱ ﺑﻲ ﺇﻡ ﺗﻘﺮﻳﺮﺍً ﺑﻌﻨﻮﺍﻥ "ﻧﻈﺎﻡ ﻧﻘﻞ ﺍﻟﺼﻴﻐﺔ‬
‫ﺍﻟﺮﻳﺎﺿﻴﺔﻟﺼﻴﻐﺔ ﺁﻱ ﺑﻲ ﺇﻡ‪) "FORTRAN :‬ﺁﻱ ﺑﻲ ﺇﻡ ‪ .(1954 ،‬ﻭﺻﻒ ﻫﺬﺍ ﺍﻟﻤﺴﺘﻨﺪ ﺍﻹﺻﺪﺍﺭ‬
‫ﺍﻷﻭﻝﻣﻦ ‪ ، Fortran‬ﻭﺍﻟﺬﻱ ﻧﺸﻴﺮ ﺇﻟﻴﻪ ﺑﺎﺳﻢ ‪ ، Fortran 0‬ﻗﺒﻞ ﺗﻨﻔﻴﺬﻩ‪ .‬ﻛﻤﺎ ﻧﺼﺖ ﺑﺠﺮﺃﺓ ﻋﻠﻰ‬
‫ﺃﻥﻓﻮﺭﺗﺮﺍﻥ ﺳﺘﻮﻓﺮ ﻛﻔﺎءﺓ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﺸﻔﺮﺓ ﻳﺪﻭﻳﺎً ﻭﺳﻬﻮﻟﺔ ﺑﺮﻣﺠﺔ ﺃﻧﻈﻤﺔ ﺍﻟﺸﻔﺮﺓ ﺍﻟﻜﺎﺫﺑﺔ‬
‫ﺍﻟﺘﻔﺴﻴﺮﻳﺔ‪.‬ﻭﻓﻲ ﻣﻮﺟﺔ ﺃﺧﺮﻯ ﻣﻦ ﺍﻟﺘﻔﺎﺅﻝ ‪ ،‬ﺫﻛﺮﺕ ﺍﻟﻮﺛﻴﻘﺔ ﺃﻥ ﻓﻮﺭﺗﺮﺍﻥ ﺳﺘﻘﻀﻲ ﻋﻠﻰ ﺃﺧﻄﺎء‬
‫ﺍﻟﺘﺮﻣﻴﺰﻭﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﺤﻴﺢ‪ .‬ﺑﻨﺎء ًﻋﻠﻰ ﻫﺬﻩ ﺍﻟﻔﺮﺿﻴﺔ ‪ ،‬ﺗﻀﻤﻦ ﻣﺘﺮﺟﻢ ﻓﻮﺭﺗﺮﺍﻥ ﺍﻷﻭﻝ ﺍﻟﻘﻠﻴﻞ ﻣﻦ‬
‫ﺍﻟﺘﺤﻘﻖﻣﻦ ﺍﻷﺧﻄﺎء ﺍﻟﻨﺤﻮﻳﺔ‪.‬‬

‫ﻛﺎﻧﺖﺍﻟﺒﻴﺉﺔ ﺍﻟﺘﻲ ﺗﻢ ﻓﻴﻬﺎ ﺗﻄﻮﻳﺮ ﻓﻮﺭﺗﺮﺍﻥ ﻋﻠﻰ ﺍﻟﻨﺤﻮ ﺍﻟﺘﺎﻟﻲ‪ (1) :‬ﻛﺎﻧﺖ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﺫﺍﺕﺫﺍﻛﺮﺓ ﺻﻐﻴﺮﺓ ﻭﻛﺎﻧﺖ ﺑﻄﻴﺉﺔ ﻭﻏﻴﺮ ﻣﻮﺛﻮﻗﺔ ﻧﺴﺒﻴﺎً ؛ )‪ (2‬ﻛﺎﻥ ﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻷﺳﺎﺳﻲ ﻷﺟﻬﺰﺓ‬
‫ﺍﻟﻜﻤﺒﻴﻮﺗﺮﻓﻲ ﺍﻟﺤﺴﺎﺑﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ‪ (3) .‬ﻟﻢ ﺗﻜﻦ ﻫﻨﺎﻙ ﻃﺮﻕ ﻓﻌﺎﻟﺔ ﻭﻓﻌﺎﻟﺔ ﻟﺒﺮﻣﺠﺔ ﺃﺟﻬﺰﺓ‬
‫ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ؛ﻭ )‪ (4‬ﻧﻈﺮﺍً ﻻﺭﺗﻔﺎﻉ ﺗﻜﻠﻔﺔ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻣﻘﺎﺭﻧﺔ ًﺑﺘﻜﻠﻔﺔ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ‪ ،‬ﻛﺎﻧﺖ ﺳﺮﻋﺔ‬
‫ﻛﻮﺩﺍﻟﻜﺎﺉﻦ ﺍﻟﺬﻱ ﺗﻢ ﺇﻧﺸﺎﺅﻩ ﺍﻟﻬﺪﻑ ﺍﻷﺳﺎﺳﻲ ﻟﻤﺠﻤﻌﻲ ﻓﻮﺭﺗﺮﺍﻥ ﺍﻷﻭﺍﺉﻞ‪ .‬ﺗﺘﺒﻊ ﺧﺼﺎﺉﺺ‬
‫ﺍﻹﺻﺪﺍﺭﺍﺕﺍﻟﻘﺪﻳﻤﺔ ﻣﻦ ‪ Fortran‬ﻣﺒﺎﺷﺮﺓ ﻣﻦ ﻫﺬﻩ ﺍﻟﺒﻴﺉﺔ‪.‬‬

‫‪2.3.3‬ﻧﻈﺮﺓ ﻋﺎﻣﺔ ﻋﻠﻰ ﻓﻮﺭﺗﺮﺍﻥ ‪1‬‬


‫ﺗﻢﺗﻌﺪﻳﻞ ‪ Fortran 0‬ﺧﻼﻝ ﻓﺘﺮﺓ ﺍﻟﺘﻨﻔﻴﺬ ‪ ،‬ﺍﻟﺘﻲ ﺑﺪﺃﺕ ﻓﻲ ﻳﻨﺎﻳﺮ ‪ 1955‬ﻭﺍﺳﺘﻤﺮﺕ ﺣﺘﻰ ﺇﺻﺪﺍﺭ‬
‫ﺍﻟﻤﺘﺮﺟﻢﻓﻲ ﺃﺑﺮﻳﻞ ‪ .1957‬ﺍﻟﻠﻐﺔ ﺍﻟﻤﻄﺒﻘﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﻧﺴﻤﻴﻬﺎ ‪ ، Fortran I‬ﻣﻮﺻﻮﻓﺔ ﻓﻲ ﺃﻭﻝ‬
‫‪ Fortran‬ﺍﻟﺪﻟﻴﻞ ﺍﻟﻤﺮﺟﻌﻲ ﻟﻠﻤﺒﺮﻣﺞ ‪،‬ﻧﺸُﺮ ﻓﻲ ﺃﻛﺘﻮﺑﺮ ‪ .(IBM ، 1956) 1956‬ﺃﺩﺭﺟﺖ ‪I‬‬
‫‪ Fortran‬ﺗﻨﺴﻴﻖ ﺍﻹﺩﺧﺎﻝ ‪ /‬ﺍﻹﺧﺮﺍﺝ ‪ ،‬ﻭﺃﺳﻤﺎء ﻣﺘﻐﻴﺮﺓ ﺗﺼﻞ ﺇﻟﻰ ﺳﺘﺔ ﺃﺣﺮﻑ )ﻛﺎﻥ ﺍﺛﻨﺎﻥ ﻓﻘﻂ‬
‫ﻓﻲ‪ ، (Fortran 0‬ﻭﺍﻟﺮﻭﺗﻴﻨﺎﺕ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪44‬‬

‫ﻻﻳﻤﻜﻦ ﺗﺠﻤﻴﻌﻬﺎ ﺑﺸﻜﻞ ﻣﻨﻔﺼﻞ ‪ ،‬ﻓﺈﻥﻟﻮﺑﻴﺎﻥ ﺍﻻﺧﺘﻴﺎﺭ ‪ ،‬ﻭﻳﻔﻌﻞﺑﻴﺎﻥ ﺍﻟﺤﻠﻘﺔ‪.‬‬

‫ﺍﺳﺘﻨﺪﺕﺟﻤﻴﻊ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﺨﺎﺻﺔ ﺑـ ‪ Fortran I‬ﺇﻟﻰ ‪ 704‬ﺗﻌﻠﻴﻤﺎﺕ‪ .‬ﻟﻴﺲ ﻣﻦ‬


‫ﺍﻟﻮﺍﺿﺢﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﻣﺼﻤﻤﻮ ‪ 704‬ﻗﺪ ﻓﺮﺿﻮﺍ ﺗﺼﻤﻴﻢ ﺑﻴﺎﻥ ﺍﻟﺘﺤﻜﻢ ﻟـ ‪ Fortran I‬ﺃﻭ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ‬
‫ﻣﺼﻤﻤﻮ‪ Fortran I‬ﻗﺪ ﺍﻗﺘﺮﺣﻮﺍ ﻫﺬﻩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻋﻠﻰ ﻣﺼﻤﻤﻲ ‪.704‬‬

‫ﻟﻢﺗﻜﻦ ﻫﻨﺎﻙ ﻋﺒﺎﺭﺍﺕ ﻟﻜﺘﺎﺑﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺑﻠﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﺍﻷﻭﻟﻰ‪ .‬ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﺘﻲ ﺑﺪﺃﺕ‬
‫ﺃﺳﻤﺎﺅﻫﺎﺑـ‪I ، J ، K ، L ، M ،‬ﻭﻥﻛﺎﻧﺖ ﻧﻮﻋﺎً ﺻﺤﻴﺤﺎً ﺿﻤﻨﻴﺎً ‪ ،‬ﻭﻛﺎﻧﺖ ﺟﻤﻴﻊ ﺍﻷﻧﻮﺍﻉ ﺍﻷﺧﺮﻯ ﻋﺒﺎﺭﺓ‬
‫ﻋﻦﻓﺎﺻﻠﺔ ﻋﺎﺉﻤﺔ ﺿﻤﻨﻴﺎً‪ .‬ﺍﺳﺘﻨﺪ ﺍﺧﺘﻴﺎﺭ ﺍﻟﺤﺮﻭﻑ ﻟﻬﺬﻩ ﺍﻻﺗﻔﺎﻗﻴﺔ ﺇﻟﻰ ﺣﻘﻴﻘﺔ ﺃﻧﻪ ﻓﻲ ﺫﻟﻚ‬
‫ﺍﻟﻮﻗﺖﺍﺳﺘﺨﺪﻡ ﺍﻟﻌﻠﻤﺎء ﻭﺍﻟﻤﻬﻨﺪﺳﻮﻥ ﺍﻷﺣﺮﻑ ﻛﻨﺼﻮﺹ ﻣﺘﻐﻴﺮﺓ ‪ ،‬ﻋﺎﺩﺓًﺍﻱ ﺟﺎﻱ‪،‬ﻭﻙ‪.‬ﻓﻲ ﻟﻔﺘﺔ‬
‫ﻣﻦﺍﻟﻜﺮﻡ ‪ ،‬ﺃﻟﻘﻰ ﻣﺼﻤﻤﻮ ﻓﻮﺭﺗﺮﺍﻥ ﺍﻷﺣﺮﻑ ﺍﻟﺜﻼﺛﺔ ﺍﻹﺿﺎﻓﻴﺔ‪.‬‬

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

‫ﻳﻈﻬﺮﺍﻟﻨﺠﺎﺡ ﺍﻟﻤﺒﻜﺮ ﻟـ ‪ Fortran‬ﻣﻦ ﺧﻼﻝ ﻧﺘﺎﺉﺞ ﺍﻻﺳﺘﻄﻼﻉ ﺍﻟﺬﻱ ﺗﻢ ﺇﺟﺮﺍﺅﻩ ﻓﻲ ﺃﺑﺮﻳﻞ‬


‫‪.1958‬ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ‪ ،‬ﻛﺎﻥ ﻣﺎ ﻳﻘﺮﺏ ﻣﻦ ﻧﺼﻒ ﺍﻟﻜﻮﺩ ﺍﻟﻤﻜﺘﻮﺏ ﻟـ ‪ 704s‬ﻳﻜُﺘﺐ ﺑﻠﻐﺔ‬
‫‪ ، Fortran‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺷﻜﻮﻙ ﻣﻌﻈﻢ ﻋﺎﻟﻢ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻘﻂ ﻗﺒﻞ ﻋﺎﻡ‪.‬‬

‫‪2.3.4‬ﻓﻮﺭﺗﺮﺍﻥ ‪II‬‬
‫ﺗﻢﺗﻮﺯﻳﻊ ﻣﺘﺮﺟﻢ ﻓﻮﺭﺗﺮﺍﻥ ‪ 2‬ﻓﻲ ﺭﺑﻴﻊ ﻋﺎﻡ ‪ .1958‬ﻭﺃﺻﻠﺢ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻷﺧﻄﺎء ﻓﻲ ﻧﻈﺎﻡ ﺍﻟﺘﺠﻤﻴﻊ‬
‫ﻓﻮﺭﺗﺮﺍﻥ‪ 1‬ﻭﺃﺿﺎﻑ ﺑﻌﺾ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﻬﻤﺔ ﻟﻠﻐﺔ ‪ ،‬ﻭﺃﻫﻤﻬﺎ ﺍﻟﺘﺠﻤﻴﻊ ﺍﻟﻤﺴﺘﻘﻞ ﻟﻠﺮﻭﺗﻴﻨﺎﺕ‬
‫ﺍﻟﻔﺮﻋﻴﺔ‪.‬ﺑﺪﻭﻥ ﺗﺠﻤﻴﻊ ﻣﺴﺘﻘﻞ ‪ ،‬ﺃﻱ ﺗﻐﻴﻴﺮ ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻳﺘﻄﻠﺐ ﺇﻋﺎﺩﺓ ﺗﺠﻤﻴﻊ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺄﻛﻤﻠﻪ‪.‬‬
‫ﺃﺩﻯﺍﻓﺘﻘﺎﺭ ‪ Fortran I‬ﺇﻟﻰ ﻗﺪﺭﺓ ﺍﻟﺘﺮﺟﻤﺔ ﺍﻟﻤﺴﺘﻘﻠﺔ ‪ ،‬ﺇﻟﻰ ﺟﺎﻧﺐ ﺿﻌﻒ ﻣﻮﺛﻮﻗﻴﺔ ‪ ، 704‬ﺇﻟﻰ‬
‫ﻭﺿﻊﻗﻴﻮﺩ ﻋﻤﻠﻴﺔ ﻋﻠﻰ ﻃﻮﻝ ﺍﻟﺒﺮﺍﻣﺞ ﺇﻟﻰ ﺣﻮﺍﻟﻲ ‪ 300‬ﺇﻟﻰ ‪ 400‬ﺳﻄﺮ )‪، Wexelblat ، 1981‬‬
‫ﺹ‪ .(68‬ﻛﺎﻥ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻷﻃﻮﻝ ﻓﺮﺻﺔ ﺿﻌﻴﻔﺔ ﻓﻲ ﺃﻥ ﻳﺘﻢ ﺗﺠﻤﻴﻌﻬﺎ ﺑﺎﻟﻜﺎﻣﻞ ﻗﺒﻞ ﺣﺪﻭﺙ ﻋﻄﻞ‬
‫ﻓﻲﺍﻟﺠﻬﺎﺯ‪ .‬ﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ ﺗﻀﻤﻴﻦ ﺇﺻﺪﺍﺭﺍﺕ ﻟﻐﺔ ﺍﻵﻟﺔ ﺍﻟﻤﺘﺮﺟﻤﺔ ﻣﺴﺒﻘﺎً ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺗﻘﺼﺮ‬
‫ﻋﻤﻠﻴﺔﺍﻟﺘﺠﻤﻴﻊ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻭﺟﻌﻠﻬﺎ ﻋﻤﻠﻴﺔ ﻟﺘﻄﻮﻳﺮ ﺑﺮﺍﻣﺞ ﺃﻛﺒﺮ ﺑﻜﺜﻴﺮ‪.‬‬

‫‪.1‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺍﻋﺘﻘﺪ ﻓﺮﻳﻖ ‪ Fortran‬ﺃﻥ ﺍﻟﺸﻔﺮﺓ ﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﺑﻮﺍﺳﻄﺔ ﺑﺮﻧﺎﻣﺞ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ ﺍﻟﺨﺎﺹ ﺑﻬﻢ ﻻ ﻳﻤﻜﻦ ﺃﻥ‬
‫ﺗﻜﻮﻥﺃﻗﻞ ﻣﻦ ﻧﺼﻒ ﺳﺮﻋﺔ ﺭﻣﺰ ﺍﻵﻟﺔ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﺨﻂ ﺍﻟﻴﺪ ‪ ،‬ﺃﻭ ﻟﻦ ﻳﺘﻢ ﺍﻋﺘﻤﺎﺩ ﺍﻟﻠﻐﺔ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ‪.‬‬
‫‪45‬‬ ‫‪2.3‬ﺁﻱ ﺑﻲ ﺇﻡ ‪ 704‬ﻭﻓﻮﺭﺗﺮﺍﻥ‬

‫ﻭ‪ 77‬ﻭ ‪ 90‬ﻭ ‪ 95‬ﻭ ‪ 2003‬ﻭ ‪2.3.5 Fortrans IV 2008‬‬


‫ﺗﻢﺗﻄﻮﻳﺮ ‪ ، Fortran III‬ﻟﻜﻦ ﻟﻢ ﻳﺘﻢ ﺗﻮﺯﻳﻌﻪ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺃﺻﺒﺤﺖ ﻟﻐﺔ ‪IV‬‬
‫‪ Fortran‬ﻭﺍﺣﺪﺓ ﻣﻦ ﺃﻛﺜﺮ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﺳﺘﺨﺪﺍﻣﺎً ﻓﻲ ﻋﺼﺮﻫﺎ‪ .‬ﺗﻄﻮﺭﺕ ﺧﻼﻝ ﺍﻟﻔﺘﺮﺓ ﻣﻦ‬
‫‪1960‬ﺇﻟﻰ ‪ 1962‬ﻭﺗﻢ ﺗﻮﺣﻴﺪﻫﺎ ﺑﺎﺳﻢ (‪ ، Fortran 66 )ANSI ، 1966‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ‬
‫ﺍﻻﺳﻢﻛﺎﻥ ﻧﺎﺩﺭﺍً ﻣﺎ ﻳﺴﺘﺨﺪﻡ‪ .‬ﻛﺎﻥ ‪ Fortran IV‬ﺗﺤﺴﻴﻨﺎً ﻋﻠﻰ ‪ Fortran II‬ﻣﻦ ﻧﻮﺍﺡ ﻛﺜﻴﺮﺓ‪ .‬ﻣﻦ‬
‫ﺑﻴﻦﺃﻫﻢ ﺇﺿﺎﻓﺎﺗﻬﺎ ﻛﺎﻧﺖ ﺇﻋﻼﻧﺎﺕ ﺍﻟﻨﻮﻉ ﺍﻟﺼﺮﻳﺢ ﻟﻠﻤﺘﻐﻴﺮﺍﺕ ‪ ،‬ﻭﻫﻮ ﻣﻨﻄﻘﻲﻟﻮﺑﻨﺎء ‪ ،‬ﻭﺍﻟﻘﺪﺭﺓ ﻋﻠﻰ‬
‫ﺗﻤﺮﻳﺮﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻛﻤﻌﻠﻤﺎﺕ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻷﺧﺮﻯ‪.‬‬

‫ﺗﻢﺍﺳﺘﺒﺪﺍﻝ ‪ 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‬ﺇﻥ ﺍﻟﺘﺄﺛﻴﺮ ﺍﻟﺬﻱ ﺃﺣﺪﺛﺘﻪ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﻋﻠﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪،‬‬
‫ﺇﻟﻰﺟﺎﻧﺐ ﺣﻘﻴﻘﺔ ﺃﻥ ﺟﻤﻴﻊ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻼﺣﻘﺔ ﻣﺪﻳﻨﺔ ﺑﻔﻮﺭﺗﺮﺍﻥ ‪ ،‬ﻣﺜﻴﺮ ﻟﻺﻋﺠﺎﺏ ﺣﻘﺎً ﻓﻲ‬
‫ﺿﻮءﺍﻷﻫﺪﺍﻑ ﺍﻟﻤﺘﻮﺍﺿﻌﺔ ﻟﻤﺼﻤﻤﻴﻬﺎ‪.‬‬

‫ﻛﺎﻧﺖﺇﺣﺪﻯ ﻣﻴﺰﺍﺕ ‪ ، Fortran I‬ﻭﺟﻤﻴﻊ ﻣﻦ ﻳﺨﻠﻔﻬﻢ ﻗﺒﻞ ‪ ، 90‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﺢ ﻟﻠﻤﺘﺮﺟﻤﻴﻦ‬


‫ﺑﺎﻟﺘﺤﺴﻴﻦﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ‪ ،‬ﺃﻥ ﺍﻷﻧﻮﺍﻉ ﻭﺍﻟﺘﺨﺰﻳﻦ ﻟﺠﻤﻴﻊ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻳﺘﻢ ﺇﺻﻼﺣﻬﺎ ﻗﺒﻞ ﻭﻗﺖ‬
‫ﺍﻟﺘﺸﻐﻴﻞ‪.‬ﻻ ﻳﻤﻜﻦ ﺗﺨﺼﻴﺺ ﻣﺘﻐﻴﺮﺍﺕ ﺃﻭ ﻣﺴﺎﺣﺔ ﺟﺪﻳﺪﺓ ﺧﻼﻝ ﻭﻗﺖ ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﻛﺎﻥ ﻫﺬﺍ‬
‫ﺗﻀﺤﻴﺔﺑﺎﻟﻤﺮﻭﻧﺔ ﻣﻦ ﺃﺟﻞ ﺍﻟﺒﺴﺎﻃﺔ ﻭﺍﻟﻜﻔﺎءﺓ‪ .‬ﻟﻘﺪ ﺃﻟﻐﻰ ﺇﻣﻜﺎﻧﻴﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻌﻮﺩﻳﺔ ﻭﺟﻌﻞ‬
‫ﻣﻦﺍﻟﺼﻌﺐ ﺗﻨﻔﻴﺬ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﺗﻨﻤﻮ ﺃﻭ ﺗﻐﻴﺮ ﺍﻟﺸﻜﻞ ﺩﻳﻨﺎﻣﻴﻜﻴﺎً‪ .‬ﺑﺎﻟﻄﺒﻊ ‪ ،‬ﻛﺎﻧﺖ ﺃﻧﻮﺍﻉ‬
‫ﺍﻟﺒﺮﺍﻣﺞﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻓﻲ ﻭﻗﺖ ﺗﻄﻮﻳﺮ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻷﻭﻟﻰ ﻣﻦ ‪ Fortran‬ﺫﺍﺕ ﻃﺒﻴﻌﺔ ﺭﻗﻤﻴﺔ‬
‫ﻓﻲﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ ﻭﻛﺎﻧﺖ ﺑﺴﻴﻄﺔ ﻣﻘﺎﺭﻧﺔ ﺑﻤﺸﺎﺭﻳﻊ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺤﺪﻳﺜﺔ‪ .‬ﻟﺬﻟﻚ ﻟﻢ ﺗﻜﻦ ﺍﻟﺬﺑﻴﺤﺔ‬
‫ﻋﻈﻴﻤﺔ‪.‬‬

‫ﻣﻦﺍﻟﺼﻌﺐ ﺍﻟﻤﺒﺎﻟﻐﺔ ﻓﻲ ﺗﻘﺪﻳﺮ ﺍﻟﻨﺠﺎﺡ ﺍﻟﺸﺎﻣﻞ ﻟـ ‪ :Fortran‬ﻓﻘﺪ ﻏﻴﺮ ﻃﺮﻳﻘﺔ ﺍﺳﺘﺨﺪﺍﻡ‬


‫ﺃﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺑﺸﻜﻞ ﻛﺒﻴﺮ‪ .‬ﻫﺬﺍ ‪ ،‬ﺑﺎﻟﻄﺒﻊ ‪ ،‬ﻳﺮﺟﻊ ﻓﻲ ﺟﺰء ﻛﺒﻴﺮ ﻣﻨﻪ ﺇﻟﻰ ﻛﻮﻧﻬﺎ ﺃﻭﻝ ﻟﻐﺔ ﻋﺎﻟﻴﺔ‬
‫ﺍﻟﻤﺴﺘﻮﻯﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﺑﺎﻟﻤﻘﺎﺭﻧﺔ ﻣﻊ ﺍﻟﻤﻔﺎﻫﻴﻢ ﻭﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ‬
‫ﻻﺣﻘﺎً ‪،‬ﻓﺈﻥ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﻤﺒﻜﺮﺓ ﻣﻦ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﺗﻌﺎﻧﻲ ﺑﻄﺮﻕ ﻣﺘﻨﻮﻋﺔ ‪ ،‬ﻛﻤﺎ ﻫﻮ ﻣﺘﻮﻗﻊ‪ .‬ﺑﻌﺪ‬
‫ﻛﻞﺷﻲء ‪ ،‬ﻟﻦ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﻌﺪﻝ ﻣﻘﺎﺭﻧﺔ ﺃﺩﺍء ﻭﺭﺍﺣﺔ ﻃﺮﺍﺯ ‪ 1910‬ﻣﻦ ﻃﺮﺍﺯ ‪ T Ford‬ﻣﻊ ﺃﺩﺍء ﻭﺭﺍﺣﺔ‬
‫‪ .Ford Mustang2013‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻭﺟﻪ ﺍﻟﻘﺼﻮﺭ ﻓﻲ ‪ ، Fortran‬ﻓﺈﻥ ﺯﺧﻢ‬
‫ﺍﻻﺳﺘﺜﻤﺎﺭﺍﻟﻀﺨﻢ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ‪ ، Fortran‬ﻣﻦ ﺑﻴﻦ ﻋﻮﺍﻣﻞ ﺃﺧﺮﻯ ‪ ،‬ﻗﺪ ﺃﺑﻘﻰ ﻋﻠﻴﻪ ﻗﻴﺪ ﺍﻻﺳﺘﺨﺪﺍﻡ‬
‫ﻷﻛﺜﺮﻣﻦ ﻧﺼﻒ ﻗﺮﻥ‪.‬‬

‫ﻗﺎﻝﺁﻻﻥ ﺑﻴﺮﻟﻴﺲ ‪ ،‬ﺃﺣﺪ ﻣﺼﻤﻤﻲ ‪ ، ALGOL 60‬ﻋﻦ ‪ Fortran‬ﻓﻲ ﻋﺎﻡ ‪، 1978‬‬


‫"‪ Fortran‬ﻫﻲﻟﻐﺔ ﻣﺸﺘﺮﻛﺔﻓﻲ ﻋﺎﻟﻢ ﺍﻟﺤﻮﺳﺒﺔ‪ .‬ﺇﻧﻬﺎ ﻟﻐﺔ ﺍﻟﺸﻮﺍﺭﻉ ﺑﺄﻓﻀﻞ ﻣﻌﺎﻧﻲ ﺍﻟﻜﻠﻤﺔ ‪،‬‬
‫ﻭﻟﻴﺲﺑﺎﻟﻤﻌﻨﻰ ﺍﻟﺪﻋﺎﺉﻲ ﻟﻠﻜﻠﻤﺔ‪ .‬ﻭﻗﺪ ﻧﺠﺎ ﻭﺳﻴﺒﻘﻰ ﻷﻧﻪ ﺗﺒﻴﻦ ﺃﻧﻪ ﺟﺰء ﻣﻔﻴﺪ ﺑﺸﻜﻞ ﻣﻠﺤﻮﻅ ﻣﻦ‬
‫ﺗﺠﺎﺭﺓﺣﻴﻮﻳﺔ ﻟﻠﻐﺎﻳﺔ ")‪.(Wexelblat، 1981، p. 161‬‬

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

‫!ﺑﺮﻧﺎﻣﺞ ﻓﻮﺭﺗﺮﺍﻥ ‪ 95‬ﻛﻤﺜﺎﻝ!‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، List_Len ،‬ﺣﻴﺚ ‪ List_Len‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺎً ﺑﻘﻴﻢ‬ ‫ﻣﺪﺧﻞ‪:‬‬
‫‪ List_Len-Integer‬ﺍﻹﺧﺮﺍﺝ‪ :‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻷﻛﺒﺮ‬ ‫!‬
‫!‬
‫ﻣﻦﻣﺘﻮﺳﻂ ﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ‬ ‫!‬
‫ﻻﺷﻲء ﺿﻤﻨﻲ‬
‫ﺍﻟﺒﻌﺪﺍﻟﺼﺤﻴﺢ )‪Int_List :: (99‬‬
‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، List_Len ::‬ﻋﺪﺍﺩ ‪ ،‬ﻣﺠﻤﻮﻉ ‪ ،‬ﻣﺘﻮﺳﻂ ‪ ،‬ﻧﺘﻴﺠﺔ ﺍﻟﻨﺘﻴﺠﺔ = ‪0‬‬

‫ﺍﻟﻤﺠﻤﻮﻉ= ‪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‬‬

‫ﻣﺜﺎﻝﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ﺍﻟﻨﻬﺎﻳﺔ‬

‫‪2.4‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ‪LISP :‬‬


‫ﺗﻢﺍﺧﺘﺮﺍﻉ ﺃﻭﻝ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻭﻇﻴﻔﻴﺔ ﻟﺘﻮﻓﻴﺮ ﻣﻴﺰﺍﺕ ﺍﻟﻠﻐﺔ ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻘﻮﺍﺉﻢ ‪ ،‬ﻭﺍﻟﺘﻲ ﻧﺸﺄﺕ ﺍﻟﺤﺎﺟﺔ‬
‫ﺇﻟﻴﻬﺎﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻭﻟﻰ ﻓﻲ ﻣﺠﺎﻝ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ )‪.(AI‬‬

‫‪2.4.1‬ﺑﺪﺍﻳﺎﺕ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﻭﻣﻌﺎﻟﺠﺔ ﺍﻟﻘﻮﺍﺉﻢ‬


‫ﻇﻬﺮﺍﻻﻫﺘﻤﺎﻡ ﺑﺎﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ﻓﻲ ﻋﺪﺩ ﻣﻦ‬
‫ﺍﻷﻣﺎﻛﻦ‪.‬ﻧﺸﺄ ﺑﻌﺾ ﻫﺬﺍ ﺍﻻﻫﺘﻤﺎﻡ ﻣﻦ ﻋﻠﻢ ﺍﻟﻠﻐﺔ ‪ ،‬ﻭﺍﻟﺒﻌﺾ ﺍﻵﺧﺮ ﻣﻦ ﻋﻠﻢ ﺍﻟﻨﻔﺲ ‪ ،‬ﻭﺍﻟﺒﻌﺾ‬
‫ﺍﻵﺧﺮﻣﻦ ﺍﻟﺮﻳﺎﺿﻴﺎﺕ‪ .‬ﻛﺎﻥ ﺍﻟﻠﻐﻮﻳﻮﻥ ﻣﻬﺘﻤﻴﻦ ﺑﻤﻌﺎﻟﺠﺔ ﺍﻟﻠﻐﺔ ﺍﻟﻄﺒﻴﻌﻴﺔ‪ .‬ﻛﺎﻥ ﻋﻠﻤﺎء ﺍﻟﻨﻔﺲ‬
‫ﻣﻬﺘﻤﻴﻦﺑﻨﻤﺬﺟﺔ ﺗﺨﺰﻳﻦ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺍﻟﺒﺸﺮﻳﺔ ﻭﺍﺳﺘﻌﺎﺩﺗﻬﺎ ‪ ،‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ‬
‫ﺍﻷﺧﺮﻯﻟﻠﺪﻣﺎﻍ‪ .‬ﻛﺎﻥ ﻋﻠﻤﺎء ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ﻣﻬﺘﻤﻴﻦ ﺑﻤﻴﻜﻨﺔ ﺑﻌﺾ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺬﻛﻴﺔ ‪ ،‬ﻣﺜﻞ ﺇﺛﺒﺎﺕ‬
‫ﺍﻟﻨﻈﺮﻳﺔ‪.‬ﺗﻮﺻﻠﺖ ﻛﻞ ﻫﺬﻩ ﺍﻟﺘﺤﻘﻴﻘﺎﺕ ﺇﻟﻰ ﻧﻔﺲ ﺍﻟﻨﺘﻴﺠﺔ‪ :‬ﻳﺠﺐ ﺗﻄﻮﻳﺮ ﻃﺮﻳﻘﺔ ﻣﺎ ﻟﻠﺴﻤﺎﺡ‬
‫ﻷﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺑﻤﻌﺎﻟﺠﺔ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺮﻣﺰﻳﺔ ﻓﻲ ﺍﻟﻘﻮﺍﺉﻢ ﺍﻟﻤﺮﺗﺒﻄﺔ‪ .‬ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ‪ ،‬ﻛﺎﻧﺖ‬
‫ﻣﻌﻈﻢﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﺗﺘﻢ ﻋﻠﻰ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺮﻗﻤﻴﺔ ﻓﻲ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‪.‬‬

‫ﺗﻢﺗﻄﻮﻳﺮ ﻣﻔﻬﻮﻡ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻘﺎﺉﻤﺔ ﺑﻮﺍﺳﻄﺔ ‪ Allen Newell‬ﻭ ‪ JC Shaw‬ﻭ ‪Simon‬‬


‫‪ Herbert‬ﻓﻲ ﻣﺆﺳﺴﺔ ‪ .RAND‬ﺗﻢ ﻧﺸﺮﻩ ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ ﻭﺭﻗﺔ ﺑﺤﺜﻴﺔ ﻛﻼﺳﻴﻜﻴﺔ ﺗﺼﻒ ﺃﺣﺪ‬
‫ﺑﺮﺍﻣﺞﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﺍﻷﻭﻟﻰ ‪2، The Logic Theorist ،‬ﻭﻟﻐﺔ ﻳﻤﻜﻦ ﺗﻨﻔﻴﺬﻫﺎ )‪، 1956‬‬
‫‪ .(Newell and Simon‬ﻟﻢ ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﺍﻟﻠﻐﺔ ‪ ،‬ﺍﻟﻤﺴﻤﺎﺓ ‪) IPL-I‬ﻟﻐﺔ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ‪ .(1‬ﺗﻢ‬
‫ﺗﻨﻔﻴﺬﺍﻹﺻﺪﺍﺭ ﺍﻟﺘﺎﻟﻲ ‪ ، IPL-II ،‬ﻋﻠﻰ ﻛﻤﺒﻴﻮﺗﺮ ‪ .RAND Johnniac‬ﺍﺳﺘﻤﺮ ﺗﻄﻮﻳﺮ ‪ IPL‬ﺣﺘﻰ ﻋﺎﻡ‬
‫‪، 1960‬ﻋﻨﺪﻣﺎ ﺗﻢ ﻧﺸﺮ ﻭﺻﻒ (‪ .IPL-V )Newell and Tonge ، 1960‬ﻣﻨﻊ ﺍﻟﻤﺴﺘﻮﻯ‬
‫ﺍﻟﻤﻨﺨﻔﺾﻟﻠﻐﺎﺕ ‪ IPL‬ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﻛﺎﻧﺖ ﻓﻲ ﺍﻟﻮﺍﻗﻊ ﻟﻐﺎﺕ ﺗﺠﻤﻴﻊ ﻟﺠﻬﺎﺯ‬
‫ﻛﻤﺒﻴﻮﺗﺮﺍﻓﺘﺮﺍﺿﻲ ‪ ،‬ﺗﻢ ﺗﻨﻔﻴﺬﻫﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺘﺮﺟﻢ ﻓﻮﺭﻱ ‪ ،‬ﻭﻓﻴﻬﺎ‬

‫‪.2‬ﺍﻛﺘﺸﻒ ﻣﻨﻈﺮّ ﺍﻟﻤﻨﻄﻖ ﺍﻟﺒﺮﺍﻫﻴﻦ ﻟﻠﻨﻈﺮﻳﺎﺕ ﻓﻲ ﺣﺴﺎﺏ ﺍﻻﻓﺘﺮﺍﺽ‪.‬‬


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

‫ﺗﻢﺗﻀﻤﻴﻦ ﺗﻌﻠﻴﻤﺎﺕ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻘﺎﺉﻤﺔ‪ .‬ﻫﻨﺎﻙ ﻋﺎﻣﻞ ﺁﺧﺮ ﻣﻨﻊ ﻟﻐﺎﺕ ‪ IPL‬ﻣﻦ ﺍﻻﻧﺘﺸﺎﺭ ﻭﻫﻮ‬
‫ﺗﻄﺒﻴﻘﻬﺎﻋﻠﻰ ﺁﻟﺔ ‪ Johnniac‬ﺍﻟﻐﺎﻣﻀﺔ‪.‬‬

‫ﻛﺎﻧﺖﻣﺴﺎﻫﻤﺎﺕ ﻟﻐﺎﺕ ‪ IPL‬ﻓﻲ ﺗﺼﻤﻴﻢ ﻗﺎﺉﻤﺘﻬﻢ ﻭﺇﺛﺒﺎﺗﻬﻢ ﺃﻥ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻘﺎﺉﻤﺔ ﻛﺎﻧﺖ‬


‫ﻣﺠﺪﻳﺔﻭﻣﻔﻴﺪﺓ‪.‬‬
‫ﺃﺻﺒﺤﺖﺷﺮﻛﺔ ‪ IBM‬ﻣﻬﺘﻤﺔ ﺑﺎﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﺨﻤﺴﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ‬
‫ﺍﻟﻤﺎﺿﻲﻭﺍﺧﺘﺎﺭﺕ ﺇﺛﺒﺎﺕ ﺍﻟﻨﻈﺮﻳﺔ ﻛﻤﺠﺎﻝ ﻟﻠﻌﺮﺽ‪ .‬ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ‪ ،‬ﻛﺎﻥ ﻣﺸﺮﻭﻉ ﻓﻮﺭﺗﺮﺍﻥ ﻻ‬
‫ﻳﺰﺍﻝﻗﻴﺪ ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﺃﻗﻨﻌﺖ ﺍﻟﺘﻜﻠﻔﺔ ﺍﻟﻌﺎﻟﻴﺔ ﻟﻤﺘﺮﺟﻢ ‪ Fortran I‬ﺷﺮﻛﺔ ‪ IBM‬ﺑﻀﺮﻭﺭﺓ ﺇﺭﻓﺎﻕ‬
‫ﻣﻌﺎﻟﺠﺔﺍﻟﻘﺎﺉﻤﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻬﻢ ﺑـ ‪ ، Fortran‬ﻭﻟﻴﺲ ﻓﻲ ﺷﻜﻞ ﻟﻐﺔ ﺟﺪﻳﺪﺓ‪ .‬ﻭﻫﻜﺬﺍ ‪ ،‬ﺗﻢ ﺗﺼﻤﻴﻢ‬
‫ﻭﺗﻨﻔﻴﺬﻟﻐﺔ ﻣﻌﺎﻟﺠﺔ ﻗﺎﺉﻤﺔ ﻓﻮﺭﺗﺮﺍﻥ )‪ (FLPL‬ﻛﺎﻣﺘﺪﺍﺩ ﻟـ ‪ .Fortran‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ‪ FLPL‬ﻟﺒﻨﺎء‬
‫ﻣﺒﺮﻫﻦﻧﻈﺮﻱ ﻟﻬﻨﺪﺳﺔ ﺍﻟﻤﺴﺘﻮﻯ ‪ ،‬ﻭﺍﻟﺬﻱ ﻛﺎﻥ ﻳﻌﺘﺒﺮ ﺑﻌﺪ ﺫﻟﻚ ﺃﺳﻬﻞ ﻣﻨﻄﻘﺔ ﻹﺛﺒﺎﺕ ﺍﻟﻨﻈﺮﻳﺔ‬
‫ﺍﻟﻤﻴﻜﺎﻧﻴﻜﻴﺔ‪.‬‬

‫‪2.4.2‬ﻋﻤﻠﻴﺔ ﺗﺼﻤﻴﻢ ‪LISP‬‬


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

‫ﻫﻨﺎﻙﻣﻄﻠﺐ ﺁﺧﺮ ﻧﺸﺄ ﻣﻦ ﺗﺤﻘﻴﻖ ﺍﻟﺘﻤﺎﻳﺰ ﺍﻟﺮﻣﺰﻱ ﻭﻫﻮ ﺍﻟﺤﺎﺟﺔ ﺇﻟﻰ ﺍﻟﻘﻮﺍﺉﻢ ﺍﻟﻤﺮﺗﺒﻄﺔ‬
‫ﺍﻟﻤﻮﺯﻋﺔﺩﻳﻨﺎﻣﻴﻜﻴﺎً ﻭﻧﻮﻉ ﻣﻦ ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﻀﻤﻨﻲ ﻟﻠﻘﻮﺍﺉﻢ ﺍﻟﻤﺘﺮﻭﻛﺔ‪ .‬ﻟﻦ ﻳﺴﻤﺢ ﻣﻜﺎﺭﺛﻲ‬
‫ﺑﺒﺴﺎﻃﺔﻟﺨﻮﺍﺭﺯﻣﻴﺔ ﺍﻟﺘﻤﺎﻳﺰ ﺍﻷﻧﻴﻘﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻪ ﺃﻥ ﺗﺘﺸﺎﺑﻚ ﻣﻊ ﻋﺒﺎﺭﺍﺕ ﺇﻟﻐﺎء ﺍﻟﺘﺨﺼﻴﺺ‬
‫ﺍﻟﺼﺮﻳﺤﺔ‪.‬‬

‫ﻧﻈﺮﺍًﻷﻥ ‪ FLPL‬ﻟﻢ ﻳﺪﻋﻢ ﺍﻟﻌﻮﺩﻳﺔ ﺃﻭ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺸﺮﻃﻴﺔ ﺃﻭ ﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ‬


‫ﺃﻭﺇﻟﻐﺎء ﺍﻟﺘﺨﺼﻴﺺ ﺍﻟﻀﻤﻨﻲ ‪ ،‬ﻓﻘﺪ ﻛﺎﻥ ﻭﺍﺿﺤﺎً ﻟﻤﻜﺎﺭﺛﻲ ﺃﻥ ﻫﻨﺎﻙ ﺣﺎﺟﺔ ﺇﻟﻰ ﻟﻐﺔ ﺟﺪﻳﺪﺓ‪.‬‬

‫ﻋﻨﺪﻣﺎﻋﺎﺩ ﻣﻜﺎﺭﺛﻲ ﺇﻟﻰ ﻣﻌﻬﺪ ﻣﺎﺳﺎﺗﺸﻮﺳﺘﺲ ﻟﻠﺘﻜﻨﻮﻟﻮﺟﻴﺎ ﻓﻲ ﺧﺮﻳﻒ ﻋﺎﻡ ‪ ، 1958‬ﺷﻜﻞ‬


‫ﻫﻮﻭﻣﺎﺭﻓﻦ ﻣﻴﻨﺴﻜﻲ ﻣﺸﺮﻭﻉ ‪ ، MIT AI‬ﺑﺘﻤﻮﻳﻞ ﻣﻦ ﻣﺨﺘﺒﺮ ﺃﺑﺤﺎﺙ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺎﺕ‪ .‬ﻛﺎﻥ ﺍﻟﺠﻬﺪ‬
‫ﺍﻟﻤﻬﻢﺍﻷﻭﻝ ﻟﻠﻤﺸﺮﻭﻉ ﻫﻮ ﺇﻧﺘﺎﺝ ﻧﻈﺎﻡ ﺑﺮﻣﺠﻴﺎﺕ ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻘﻮﺍﺉﻢ‪ .‬ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻘﺮﺭ ﺍﺳﺘﺨﺪﺍﻣﻪ‬
‫ﻓﻲﺍﻟﺒﺪﺍﻳﺔ ﻟﺘﻨﻔﻴﺬ ﺑﺮﻧﺎﻣﺞ ﺍﻗﺘﺮﺣﻪ ﻣﻜﺎﺭﺛﻲ ﻳﺴﻤﻰ ‪3.Advice Taker‬ﺃﺻﺒﺢ ﻫﺬﺍ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﺪﺍﻓﻊ‬
‫ﻟﺘﻄﻮﻳﺮﻟﻐﺔ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻘﺎﺉﻤﺔ ‪ .LISP‬ﻳﻄُﻠﻖ ﻋﻠﻰ ﺍﻹﺻﺪﺍﺭ ﺍﻷﻭﻝ ﻣﻦ ‪ LISP‬ﺃﺣﻴﺎﻧﺎً ﺍﺳﻢ "‪LISP‬‬
‫ﺍﻟﺨﺎﻟﺺ" ﻷﻧﻪ ﻟﻐﺔ ﻭﻇﻴﻔﻴﺔ ﺑﺤﺘﺔ‪ .‬ﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻟﺘﺎﻟﻲ ‪ ،‬ﻧﺼﻒ ﺗﻄﻮﻳﺮ ‪ LISP‬ﺍﻟﻨﻘﻲ‪.‬‬

‫‪.3‬ﻗﺎﻡ ‪ Advice Taker‬ﺑﺘﻤﺜﻴﻞ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺑﺠﻤﻞ ﻣﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ ﺭﺳﻤﻴﺔ ﻭﺍﺳﺘﺨﺪﻡ ﻋﻤﻠﻴﺔ ﺍﺳﺘﻨﺘﺎﺝ ﻣﻨﻄﻘﻲ ﻟﺘﻘﺮﻳﺮ ﻣﺎ‬
‫ﻳﺠﺐﺍﻟﻘﻴﺎﻡ ﺑﻪ‪.‬‬
‫‪49‬‬ ‫‪2.4‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ‪LISP :‬‬

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

‫‪2.4.3.1‬ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﻳﺤﺘﻮﻱ‪ Pure LISP‬ﻋﻠﻰ ﻧﻮﻋﻴﻦ ﻓﻘﻂ ﻣﻦ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ‪ :‬ﺍﻟﺬﺭﺍﺕ ﻭﺍﻟﻘﻮﺍﺉﻢ‪ .‬ﺍﻟﺬﺭﺍﺕ ﻫﻲ ﺇﻣﺎ‬
‫ﺭﻣﻮﺯﻟﻬﺎ ﺷﻜﻞ ﻣﻌﺮﻓّﺎﺕ ﺃﻭ ﺣﺮﻓﻴﺔ ﺭﻗﻤﻴﺔ‪ .‬ﻳﻌﺘﺒﺮ ﻣﻔﻬﻮﻡ ﺗﺨﺰﻳﻦ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺍﻟﺮﻣﺰﻳﺔ ﻓﻲ ﻗﻮﺍﺉﻢ‬
‫ﻣﺮﺗﺒﻄﺔﺃﻣﺮﺍً ﻃﺒﻴﻌﻴﺎً ﻭﻗﺪ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻓﻲ ‪ .IPL-II‬ﺗﺴﻤﺢ ﻫﺬﻩ ﺍﻟﻬﻴﺎﻛﻞ ﺑﻌﻤﻠﻴﺎﺕ ﺍﻹﺩﺭﺍﺝ‬
‫ﻭﺍﻟﺤﺬﻑﻓﻲ ﺃﻱ ﻭﻗﺖ ‪ ،‬ﻭﻫﻲ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺘﻲ ﻛﺎﻥ ﻳﻌُﺘﻘﺪ ﺑﻌﺪ ﺫﻟﻚ ﺃﻧﻬﺎ ﺟﺰء ﺿﺮﻭﺭﻱ ﻣﻦ‬
‫ﻣﻌﺎﻟﺠﺔﺍﻟﻘﺎﺉﻤﺔ‪ .‬ﻭﻗﺪ ﺗﻘﺮﺭ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ‪ ،‬ﻣﻊ ﺫﻟﻚ ‪ ،‬ﺃﻥ ﺑﺮﺍﻣﺞ ‪ LISP‬ﻧﺎﺩﺭﺍً ﻣﺎ ﺗﺘﻄﻠﺐ ﻫﺬﻩ‬
‫ﺍﻟﻌﻤﻠﻴﺎﺕ‪.‬‬
‫ﻳﺘﻢﺗﺤﺪﻳﺪ ﺍﻟﻘﻮﺍﺉﻢ ﻋﻦ ﻃﺮﻳﻖ ﺗﺤﺪﻳﺪ ﻋﻨﺎﺻﺮﻫﺎ ﺑﺄﻗﻮﺍﺱ‪ .‬ﺍﻟﻘﻮﺍﺉﻢ ﺍﻟﺒﺴﻴﻄﺔ ‪ ،‬ﺍﻟﺘﻲ ﺗﻘﺘﺼﺮ‬
‫ﻓﻴﻬﺎﺍﻟﻌﻨﺎﺻﺮ ﻋﻠﻰ ﺍﻟﺬﺭﺍﺕ ‪ ،‬ﻟﻬﺎ ﺍﻟﺸﻜﻞ‬

‫)ﺍ ﺏ ﺕ ﺙ(‬

‫ﻳﺘﻢﺃﻳﻀﺎً ﺗﺤﺪﻳﺪ ﻫﻴﺎﻛﻞ ﺍﻟﻘﺎﺉﻤﺔ ﺍﻟﻤﺘﺪﺍﺧﻠﺔ ﺑﻮﺍﺳﻄﺔ ﺍﻷﻗﻮﺍﺱ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺍﻟﻘﺎﺉﻤﺔ‬

‫)ﺃ )ﻕ( ﺩ )ﻩ )ﻓﻎ(((‬

‫ﻳﺘﻜﻮﻥﻣﻦ ﺃﺭﺑﻌﺔ ﻋﻨﺎﺻﺮ‪ .‬ﺍﻷﻭﻝ ﻫﻮ ﺍﻟﺬﺭﺓﺃ؛ﻭﺍﻟﺜﺎﻧﻲ ﻫﻮ ﺍﻟﻘﺎﺉﻤﺔ ﺍﻟﻔﺮﻋﻴﺔ‬


‫)ﻗﺒﻞ ﺍﻟﻤﻴﻼﺩ(؛ﻭﺍﻟﺜﺎﻟﺚ ﻫﻮ ﺍﻟﺬﺭﺓﺩ؛ﺍﻟﺮﺍﺑﻊ ﻫﻮ ﺍﻟﻘﺎﺉﻤﺔ ﺍﻟﻔﺮﻋﻴﺔ )‪E )FG(( ،‬ﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ‬
‫ﻋﻨﺼﺮﻫﺎﺍﻟﺜﺎﻧﻲ ﺍﻟﻘﺎﺉﻤﺔ ﺍﻟﻔﺮﻋﻴﺔ )‪FG(.‬‬
‫ﺩﺍﺧﻠﻴﺎً ‪،‬ﻳﺘﻢ ﺗﺨﺰﻳﻦ ﺍﻟﻘﻮﺍﺉﻢ ﻋﻠﻰ ﻫﻴﺉﺔ ﻫﻴﺎﻛﻞ ﻗﺎﺉﻤﺔ ﻣﺮﺗﺒﻄﺔ ﺑﻤﻔﺮﺩﻫﺎ ‪ ،‬ﺣﻴﺚ ﺗﺤﺘﻮﻱ‬
‫ﻛﻞﻋﻘﺪﺓ ﻋﻠﻰ ﻣﺆﺷﺮﻳﻦ ﻭﺗﻤﺜﻞ ﻋﻨﺼﺮ ﻗﺎﺉﻤﺔ‪ .‬ﺍﻟﻌﻘﺪﺓ ﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻟﺬﺭﺓ ﻟﻬﺎ ﺃﻭﻝ ﻣﺆﺷﺮ‬
‫ﻟﻬﺎﻳﺸﻴﺮ ﺇﻟﻰ ﺑﻌﺾ ﺗﻤﺜﻴﻞ ﺍﻟﺬﺭﺓ ‪ ،‬ﻣﺜﻞ ﺭﻣﺰﻫﺎ ﺃﻭ ﻗﻴﻤﺘﻬﺎ ﺍﻟﺮﻗﻤﻴﺔ ‪ ،‬ﺃﻭ ﻣﺆﺷﺮ ﺇﻟﻰ ﻗﺎﺉﻤﺔ ﻓﺮﻋﻴﺔ‪.‬‬
‫ﻋﻘﺪﺓﻋﻨﺼﺮ ﻗﺎﺉﻤﺔ ﻓﺮﻋﻴﺔ ﻟﻬﺎ ﺃﻭﻝ ﻣﺆﺷﺮ ﻟﻬﺎ ﻳﺸﻴﺮ ﺇﻟﻰ ﺍﻟﻌﻘﺪﺓ ﺍﻷﻭﻟﻰ ﻣﻦ ﺍﻟﻘﺎﺉﻤﺔ ﺍﻟﻔﺮﻋﻴﺔ‪.‬‬
‫ﻓﻲﻛﻠﺘﺎ ﺍﻟﺤﺎﻟﺘﻴﻦ ‪ ،‬ﻳﺸﻴﺮ ﺍﻟﻤﺆﺷﺮ ﺍﻟﺜﺎﻧﻲ ﻟﻠﻌﻘﺪﺓ ﺇﻟﻰ ﺍﻟﻌﻨﺼﺮ ﺍﻟﺘﺎﻟﻲ ﻣﻦ ﺍﻟﻘﺎﺉﻤﺔ‪ .‬ﺗﺘﻢ ﺍﻹﺷﺎﺭﺓ‬
‫ﺇﻟﻰﻗﺎﺉﻤﺔ ﺑﻤﺆﺷﺮ ﺇﻟﻰ ﻋﻨﺼﺮﻫﺎ ﺍﻷﻭﻝ‪.‬‬

‫ﺍﻟﺘﻤﺜﻴﻼﺕﺍﻟﺪﺍﺧﻠﻴﺔ ﻟﻠﻘﺎﺉﻤﺘﻴﻦ ﺍﻟﻤﺒﻴﻨﺔ ﺳﺎﺑﻘﺎً ﻣﺒﻴﻨﺔ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ .2.2‬ﻻﺣﻆ ﺃﻥ ﻋﻨﺎﺻﺮ‬


‫ﺍﻟﻘﺎﺉﻤﺔﺗﻈﻬﺮ ﺃﻓﻘﻴﺎً‪ .‬ﺍﻟﻌﻨﺼﺮ ﺍﻷﺧﻴﺮ ﻓﻲ ﺍﻟﻘﺎﺉﻤﺔ ﻟﻴﺲ ﻟﻪ ﺧﻠﻒ ‪ ،‬ﻟﺬﺍ ﻓﺈﻥ ﺍﺭﺗﺒﺎﻃﻪ ﻫﻮﻻ ﺷﻲء ‪،‬‬
‫ﻭﺍﻟﺬﻱﻳﺘﻢ ﺗﻤﺜﻴﻠﻪ ﻓﻲ ﺍﻟﺸﻜﻞ ‪ 2.2‬ﻛﺨﻂ ﻗﻄﺮﻱ ﻓﻲ ﺍﻟﻌﻨﺼﺮ‪ .‬ﺗﻈﻬﺮ ﺍﻟﻘﻮﺍﺉﻢ ﺍﻟﻔﺮﻋﻴﺔ ﺑﻨﻔﺲ‬
‫ﺍﻟﻬﻴﻜﻞ‪.‬‬

‫‪2.4.3.2‬ﺍﻟﻌﻤﻠﻴﺎﺕ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ‬


‫ﺗﻢﺗﺼﻤﻴﻢ ‪ LISP‬ﻛﻠﻐﺔ ﺑﺮﻣﺠﺔ ﻭﻇﻴﻔﻴﺔ‪ .‬ﻳﺘﻢ ﺇﻧﺠﺎﺯ ﺟﻤﻴﻊ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﻓﻲ ﺑﺮﻧﺎﻣﺞ ﻭﻇﻴﻔﻲ‬
‫ﺑﺤﺖﻣﻦ ﺧﻼﻝ ﺗﻄﺒﻴﻖ ﺍﻟﻮﻇﺎﺉﻒ ﻋﻠﻰ ﺍﻟﻮﺳﺎﺉﻂ‪ .‬ﻻ ﺗﻌﺘﺒﺮ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺨﺼﻴﺺ ﻭﻻ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ‬
‫ﺍﻟﻜﺜﻴﺮﺓﻓﻲ ﺑﺮﺍﻣﺞ ﺍﻟﻠﻐﺔ ﺍﻟﺤﺘﻤﻴﺔ ﺿﺮﻭﺭﻳﺔ ﻓﻲ ﺑﺮﺍﻣﺞ ﺍﻟﻠﻐﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻳﻤﻜﻦ‬
‫ﺗﺤﺪﻳﺪﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﺘﻜﺮﺭﺓ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﻮﻇﺎﺉﻒ ﺍﻟﻌﻮﺩﻳﺔ ‪ ،‬ﻣﻤﺎ ﻳﺠﻌﻞ ﺍﻟﺘﻜﺮﺍﺭ )‬
‫ﺍﻟﺤﻠﻘﺎﺕ( ﻏﻴﺮ ﺿﺮﻭﺭﻱ‪ .‬ﻫﺬﻩ ﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻷﺳﺎﺳﻴﺔ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺗﺠﻌﻠﻬﺎ ﻣﺨﺘﻠﻔﺔ ﺑﺸﻜﻞ‬
‫ﻛﺒﻴﺮﻋﻦ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﻟﻐﺔ ﺍﻷﻣﺮ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪50‬‬

‫ﺍﻟﺸﻜﻞ‪2.2‬‬

‫ﺍﻟﺘﻤﺜﻴﻞﺍﻟﺪﺍﺧﻠﻲ ﻟﻘﺎﺉﻤﺘﻴﻦ‬
‫ﻣﻦ‪LISP‬‬
‫ﺩ‬ ‫ﺝ‬ ‫ﺏ‬ ‫ﺃ‬

‫ﺩ‬ ‫ﺃ‬

‫ﻩ‬ ‫ﺝ‬ ‫ﺏ‬

‫ﺟﻲ‬ ‫‪F‬‬

‫‪2.4.3.3‬ﺑﻨﺎء ﺟﻤﻠﺔ ‪LISP‬‬


‫ﺗﺨﺘﻠﻒ‪ LISP‬ﻛﺜﻴﺮﺍً ﻋﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ‪ ،‬ﻷﻧﻬﺎ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻭﻇﻴﻔﻴﺔ ﻭﻷﻥ ﻣﻈﻬﺮ ﺑﺮﺍﻣﺞ ‪LISP‬‬
‫ﻳﺨﺘﻠﻒﻛﺜﻴﺮﺍً ﻋﻦ ﺗﻠﻚ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻓﻲ ﻟﻐﺎﺕ ﻣﺜﻞ ‪ Java‬ﺃﻭ ‪ .++ C‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻌﺘﺒﺮ ﺑﻨﺎء‬
‫ﺟﻤﻠﺔ‪ Java‬ﻣﺰﻳﺠﺎً ﻣﻌﻘﺪﺍً ﻣﻦ ﺍﻟﻠﻐﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﻭﺍﻟﺠﺒﺮ ‪ ،‬ﺑﻴﻨﻤﺎ ﻳﻌﺪ ﺗﺮﻛﻴﺐ ‪ LISP‬ﻧﻤﻮﺫﺟﺎً‬
‫ﻟﻠﺒﺴﺎﻃﺔ‪.‬ﺭﻣﺰ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﻟﻬﻤﺎ ﻧﻔﺲ ﺍﻟﺸﻜﻞ ﺗﻤﺎﻣﺎً‪ :‬ﺍﻟﻘﻮﺍﺉﻢ ﺑﻴﻦ ﻗﻮﺳﻴﻦ‪ .‬ﺍﻟﻨﻈﺮ ﻣﺮﺓ‬
‫ﺃﺧﺮﻯﻓﻲ ﺍﻟﻘﺎﺉﻤﺔ‬

‫)ﺍ ﺏ ﺕ ﺙ(‬

‫ﻋﻨﺪﺗﻔﺴﻴﺮﻫﺎ ﻋﻠﻰ ﺃﻧﻬﺎ ﺑﻴﺎﻧﺎﺕ ‪ ،‬ﻓﻬﻲ ﻗﺎﺉﻤﺔ ﻣﻦ ﺃﺭﺑﻌﺔ ﻋﻨﺎﺻﺮ‪ .‬ﻋﻨﺪﻣﺎ ﻳﻨﻈﺮ ﺇﻟﻴﻪ ﻋﻠﻰ ﺃﻧﻪ ﺭﻣﺰ ‪،‬‬
‫ﻓﻬﻮﺗﻄﺒﻴﻖ ﺍﻟﻮﻇﻴﻔﺔ ﺍﻟﻤﺴﻤﺎﺓﺃﻟﻠﻤﻌﻠﻤﺎﺕ ﺍﻟﺜﻼﺛﺔﺏ ‪ ،‬ﺝ ‪،‬ﻭﺩ‪.‬‬

‫‪2.4.4‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﺳﻴﻄﺮ‪ LISP‬ﺗﻤﺎﻣﺎً ﻋﻠﻰ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﻟﻤﺪﺓ ﺭﺑﻊ ﻗﺮﻥ‪ .‬ﺗﻢ ﺍﻟﻘﻀﺎء ﻋﻠﻰ ﺍﻟﻜﺜﻴﺮ ﻣﻦ‬
‫ﺃﺳﺒﺎﺏﺳﻤﻌﺔ ‪ LISP‬ﻟﻜﻮﻧﻬﺎ ﻏﻴﺮ ﻓﻌﺎﻟﺔ ﻟﻠﻐﺎﻳﺔ‪ .‬ﻳﺘﻢ ﺗﺠﻤﻴﻊ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻤﻌﺎﺻﺮﺓ ‪،‬‬
‫ﻭﻳﻜﻮﻥﺍﻟﻜﻮﺩ ﺍﻟﻨﺎﺗﺞ ﺃﺳﺮﻉ ﺑﻜﺜﻴﺮ ﻣﻦ ﺗﺸﻐﻴﻞ ﺍﻟﻜﻮﺩ ﺍﻟﻤﺼﺪﺭﻱ ﻋﻠﻰ ﻣﺘﺮﺟﻢ‪ .‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﻧﺠﺎﺣﻬﺎ‬
‫ﻓﻲﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ‪ ،‬ﻛﺎﻧﺖ ‪ LISP‬ﺭﺍﺉﺪﺓ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺃﺛﺒﺘﺖ ﺃﻧﻬﺎ ﻣﺠﺎﻝ‬
‫ﻧﺸﻂﻟﻠﺒﺤﺚ ﻓﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻛﻤﺎ ﻫﻮ ﻣﺬﻛﻮﺭ ﻓﻲ ﺍﻟﻔﺼﻞ ﺍﻷﻭﻝ ‪ ،‬ﻳﻌﺘﻘﺪ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺑﺎﺣﺜﻲ‬
‫ﻟﻐﺔﺍﻟﺒﺮﻣﺠﺔ ﺃﻥ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﻫﻲ ﻧﻬﺞ ﺃﻓﻀﻞ ﺑﻜﺜﻴﺮ ﻟﺘﻄﻮﻳﺮ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻣﻦ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺍﻹﺟﺮﺍﺉﻴﺔﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻀﺮﻭﺭﻳﺔ‪.‬‬
‫‪51‬‬ ‫‪2.4‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ‪LISP :‬‬

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

‫ﺩﺍﻟﺔ‪ LISP‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ‬ ‫؛‬


‫ﻳﻌﺮﻑّﺍﻟﻜﻮﺩ ﺍﻟﺘﺎﻟﻲ ﺩﺍﻟﺔ ‪ LISP‬ﺍﻟﻤﺴﻨﺪ ﺍﻟﺘﻲ ﺗﺄﺧﺬ ﻗﺎﺉﻤﺘﻴﻦ ﻛﻮﺳﻴﻄﺎﺕ ﻭﺗﻌﻴﺪ ‪ True‬ﺇﺫﺍ‬ ‫؛‬
‫ﻛﺎﻧﺖﺍﻟﻘﺎﺉﻤﺘﺎﻥ ﻣﺘﺴﺎﻭﻳﺘﻴﻦ ‪ ،‬ﻭ ‪) NIL‬ﺧﻄﺄ( ﺑﺨﻼﻑ ﺫﻟﻚ )(‪DEFUN equipists )lis1 lis2‬‬ ‫؛‬
‫؛‬

‫‪)COND‬‬
‫(ﻻ ﺷﻲء (‪lis1( )EQ lis1 lis2(( ))ATOM lis2‬‬
‫‪))ATOM‬‬
‫))ﻗﻮﺍﺉﻢ ﻣﺘﺴﺎﻭﻳﺔ )‪((CAR lis2) (CAR lis1‬‬
‫)ﻗﻮﺍﺉﻢ ﻣﺘﺴﺎﻭﻳﺔ )‪(((CDR lis2) (CDR lis1‬‬
‫)ﻻ ﺷﻲء(‬
‫(‬
‫(‬

‫‪2.4.5‬ﺍﺛﻨﺎﻥ ﻣﻦ ﺃﺣﻔﺎﺩ ‪LISP‬‬


‫ﻳﺘﻢﺍﻵﻥ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻬﺠﺘﻴﻦ ﻣﻦ ‪ LISP‬ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ‪ Scheme ،‬ﻭ ‪ .Common LISP‬ﻫﺬﻩ‬
‫ﻧﻮﻗﺸﺖﺑﺈﻳﺠﺎﺯ ﻓﻲ ﺍﻷﻗﺴﺎﻡ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﺘﺎﻟﻴﺔ‪.‬‬

‫‪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‬ﺍﻟﺸﺎﺉﻊ ﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺍﻟﻬﻴﺎﻛﻞ ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ‬
‫ﺍﻟﺴﺠﻼﺕﻭﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻭﺍﻷﺭﻗﺎﻡ ﺍﻟﻤﺮﻛﺒﺔ ﻭﺳﻼﺳﻞ ﺍﻷﺣﺮﻑ‪ .‬ﻛﻤﺎ ﺃﻥ ﻟﺪﻳﻬﺎ ﺷﻜﻞ ﻣﻦ ﺍﻟﺤﺰﻡ‬
‫ﻟﺘﻘﺴﻴﻢﻣﺠﻤﻮﻋﺎﺕ ﺍﻟﻮﻇﺎﺉﻒ ﻭﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﺗﻮﻓﺮ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﻮﺻﻮﻝ‪.‬‬

‫ﺗﻢﻭﺻﻒ ‪ LISP‬ﺍﻟﺸﺎﺉﻊ ﺑﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.15‬‬

‫‪2.4.6‬ﺍﻟﻠﻐﺎﺕ ﺫﺍﺕ ﺍﻟﺼﻠﺔ‬


‫) ‪ML‬ﻡﺇﺗﺎﺇﻝﻋﺬﺍﺏ‪ .‬ﺃﻭﻟﻤﺎﻥ ‪ (1998 ،‬ﺗﻢ ﺗﺼﻤﻴﻤﻪ ﻓﻲ ﺍﻷﺻﻞ ﻓﻲ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ﻣﻦ ﻗﺒﻞ ﺭﻭﺑﻦ‬
‫ﻣﻴﻠﻨﺮﻓﻲ ﺟﺎﻣﻌﺔ ﺇﺩﻧﺒﺮﺓ ﻛﻠﻐﺔ ﻣﻌﺪﻧﻴﺔ ﻟﻨﻈﺎﻡ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻤﺴﻤﻰ ‪Functions‬‬
‫‪ LCF) Logic for Computable‬؛ ‪ .(Milner et al. ، 1990‬ﺗﻌﺘﺒﺮ ‪ ML‬ﻟﻐﺔ ﻭﻇﻴﻔﻴﺔ ﻓﻲ‬
‫ﺍﻟﻤﻘﺎﻡﺍﻷﻭﻝ ‪ ،‬ﻭﻟﻜﻨﻬﺎ ﺗﺪﻋﻢ ﺃﻳﻀﺎً ﺍﻟﺒﺮﻣﺠﺔ ﺍﻹﻟﺰﺍﻣﻴﺔ‪ .‬ﻋﻠﻰ ﻋﻜﺲ ‪ LISP‬ﻭ ‪ ، Scheme‬ﻳﻤﻜﻦ‬
‫ﺗﺤﺪﻳﺪﻧﻮﻉ ﻛﻞ ﻣﺘﻐﻴﺮ ﻭﺗﻌﺒﻴﺮ ﻓﻲ ‪ ML‬ﻓﻲ ﻭﻗﺖ ﺍﻟﺘﺮﺟﻤﺔ‪ .‬ﺗﺮﺗﺒﻂ ﺍﻷﻧﻮﺍﻉ ﺑﺎﻟﻜﺎﺉﻨﺎﺕ ﺑﺪﻻ ًﻣﻦ‬
‫ﺍﻷﺳﻤﺎء‪.‬ﻳﺘﻢ ﺍﻻﺳﺘﺪﻻﻝ ﻋﻠﻰ ﺃﻧﻮﺍﻉ ﺍﻷﺳﻤﺎء ﻭﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﻣﻦ ﺳﻴﺎﻗﻬﺎ‪.‬‬

‫ﻋﻠﻰﻋﻜﺲ ‪ LISP‬ﻭ ‪ ، Scheme‬ﻻ ﻳﺴﺘﺨﺪﻡ ‪ ML‬ﺍﻟﺼﻴﻐﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺑﻴﻦ ﻗﻮﺳﻴﻦ ﻭﺍﻟﺘﻲ‬


‫ﻧﺸﺄﺕﻣﻊ ﺗﻌﺒﻴﺮﺍﺕ ‪ .lambda‬ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﻓﺈﻥ ﺑﻨﺎء ﺟﻤﻠﺔ ‪ ML‬ﻳﺸﺒﻪ ﻟﻐﺎﺕ ﺍﻷﻣﺮ ‪ ،‬ﻣﺜﻞ‬
‫‪ Java‬ﻭ ‪.++ C‬‬
‫ﺗﻢﺗﻄﻮﻳﺮ ﻣﻴﺮﺍﻧﺪﺍ ﻣﻦ ﻗﺒﻞ ﺩﻳﻔﻴﺪ ﺗﻴﺮﻧﺮ )‪ (1986‬ﻓﻲ ﺟﺎﻣﻌﺔ ﻛﻨﺖ ﻓﻲ ﻛﺎﻧﺘﺮﺑﺮﻱ ‪ ،‬ﺇﻧﺠﻠﺘﺮﺍ ‪،‬‬
‫ﻓﻲﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ‪ .‬ﺗﻌﺘﻤﺪ ‪ Miranda‬ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﺍﻟﻠﻐﺎﺕ ‪ ML‬ﻭ ‪ SASL‬ﻭ ‪ .KRC‬ﻫﺎﺳﻜﻞ )‬
‫‪ (Hudak and Fasel، 1992‬ﻳﻌﺘﻤﺪ ﻓﻲ ﺟﺰء ﻛﺒﻴﺮ ﻣﻨﻪ ﻋﻠﻰ ﻣﻴﺮﺍﻧﺪﺍ‪ .‬ﻣﺜﻞ ﻣﻴﺮﺍﻧﺪﺍ ‪ ،‬ﺇﻧﻬﺎ ﻟﻐﺔ‬
‫ﻭﻇﻴﻔﻴﺔﺑﺤﺘﺔ ‪ ،‬ﻻ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻣﺘﻐﻴﺮﺍﺕ ﻭﻻ ﺑﻴﺎﻥ ﺗﺨﺼﻴﺺ‪ .‬ﻣﻦ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﻤﻤﻴﺰﺓ ﺍﻷﺧﺮﻯ‬
‫ﻟـ‪ Haskell‬ﺍﺳﺘﺨﺪﺍﻣﻪ ﻟﻠﺘﻘﻴﻴﻢ ﺍﻟﻜﺴﻮﻝ‪ .‬ﻫﺬﺍ ﻳﻌﻨﻲ ﺃﻧﻪ ﻻ ﻳﺘﻢ ﺗﻘﻴﻴﻢ ﺃﻱ ﺗﻌﺒﻴﺮ ﺣﺘﻰ ﺗﻜﻮﻥ ﻗﻴﻤﺘﻪ‬
‫ﻣﻄﻠﻮﺑﺔ‪.‬ﻫﺬﺍ ﻳﺆﺩﻱ ﺇﻟﻰ ﺑﻌﺾ ﺍﻟﻘﺪﺭﺍﺕ ﺍﻟﻤﺪﻫﺸﺔ ﻓﻲ ﺍﻟﻠﻐﺔ‪.‬‬

‫‪.‬ﻛﻼ ًﻣﻦ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﻭﺍﻟﺒﺮﻣﺠﺔ ﺍﻹﺟﺮﺍﺉﻴﺔ‪ .‬ﻛﻤﺎ ﺃﻧﻪ ﻳﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﺑﺸﻜﻞ‬
‫ﻛﺎﻣﻞ‪ F #‬ﻳﺪﻋﻢ ‪ .NET.‬ﺃﻳﻀﺎً ﺃﻧﻪ ﻳﻤﻜﻨﻬﺎ ﺍﻟﺘﻌﺎﻣﻞ ﺑﺴﻼﺳﺔ ﻣﻊ ﺃﻱ ﻟﻐﺔ ﺃﺧﺮﻯ ﻣﻦ ﻟﻐﺎﺕ ‪NET‬‬
‫ﺑﺎﻟﻜﺎﻣﻞ‪.‬ﻛﻮﻧﻪ ‪ .‬ﺗﻌﻨﻲ ﻟﻐﺔ ‪ .NET‬ﻣﻊ ﻭﺻﻮﻝ ﻣﺒﺎﺷﺮ ﺇﻟﻰ ﻣﻜﺘﺒﺔ ‪ .NET‬ﻫﻲ ﻟﻐﺔ (‪et al.، 2010‬‬
‫‪ OCaml. F # )Syme‬ﻫﻲ ﻟﻐﺔ ﻣﻜﺘﻮﺑﺔ ﺟﺪﻳﺪﺓ ﻧﺴﺒﻴﺎً ﺗﻌﺘﻤﺪ ﻣﺒﺎﺷﺮﺓ ﻋﻠﻰ ‪ ، F #‬ﺃﺧﻴﺮﺍً ‪Haskell.‬‬
‫ﻭ ‪ ML‬ﺗﻨﺤﺪﺭ ﻣﻦ ‪ ، OCaml )Smith ، 2006( ،‬ﻭﻟﻬﺠﺘﻬﺎ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ (‬
‫‪Caml )Cousineau et al. ، 1998‬‬

‫ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ‪ ML‬ﻭ ‪ Haskell‬ﻭ ‪ # F‬ﺑﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.15‬‬

‫‪2.5‬ﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻧﺤﻮ ﺍﻟﺘﻄﻮﺭ‪ALGOL 60 :‬‬


‫ﻛﺎﻥﻟـ ‪ ALGOL 60‬ﺗﺄﺛﻴﺮ ﻛﺒﻴﺮ ﻋﻠﻰ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻼﺣﻘﺔ ‪ ،‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﻓﻬﻮ ﺫﻭ ﺃﻫﻤﻴﺔ ﻣﺮﻛﺰﻳﺔ ﻓﻲ‬
‫ﺃﻱﺩﺭﺍﺳﺔ ﺗﺎﺭﻳﺨﻴﺔ ﻟﻠﻐﺎﺕ‪.‬‬
‫‪53‬‬ ‫‪2.5‬ﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻧﺤﻮ ﺍﻟﺘﻄﻮﺭ‪ALGOL 60 :‬‬

‫‪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‬ﻭﺣﺪﻫﺎ‪.‬‬

‫ﻓﻲﺍﻟﺴﺎﺑﻖ ‪ ،‬ﻓﻲ ﻋﺎﻡ ‪ ، 1955‬ﺷﻜﻠﺖ ‪) GAMM‬ﺍﺧﺘﺼﺎﺭ ﺃﻟﻤﺎﻧﻲ ﻟﺠﻤﻌﻴﺔ ﺍﻟﺮﻳﺎﺿﻴﺎﺕ‬


‫ﺍﻟﺘﻄﺒﻴﻘﻴﺔﻭﺍﻟﻤﻴﻜﺎﻧﻴﻜﺎ( ﻟﺠﻨﺔ ﻟﺘﺼﻤﻴﻢ ﻟﻐﺔ ﺧﻮﺍﺭﺯﻣﻴﺔ ﻋﺎﻟﻤﻴﺔ ﻭﺍﺣﺪﺓ ﻣﺴﺘﻘﻠﺔ ﻋﻦ ﺍﻵﻟﺔ‪ .‬ﻛﺎﻧﺖ‬
‫ﺍﻟﺮﻏﺒﺔﻓﻲ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﺗﻌﻮﺩ ﺟﺰﺉﻴﺎً ﺇﻟﻰ ﺧﻮﻑ ﺍﻷﻭﺭﻭﺑﻴﻴﻦ ﻣﻦ ﻫﻴﻤﻨﺔ ﺷﺮﻛﺔ ‪ .IBM‬ﻭﻣﻊ‬
‫ﺫﻟﻚ ‪،‬ﺑﺤﻠﻮﻝ ﺃﻭﺍﺧﺮ ﻋﺎﻡ ‪ ، 1957‬ﺃﻗﻨﻊ ﻇﻬﻮﺭ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ‬
‫ﺍﻟﻤﺘﺤﺪﺓﺍﻟﻠﺠﻨﺔ ﺍﻟﻔﺮﻋﻴﺔ ﻟـ ‪ GAMM‬ﺑﻀﺮﻭﺭﺓ ﺗﻮﺳﻴﻊ ﺟﻬﻮﺩﻫﺎ ﻟﺘﺸﻤﻞ ﺍﻷﻣﺮﻳﻜﻴﻴﻦ ‪ ،‬ﻭﺗﻢ ﺇﺭﺳﺎﻝ‬
‫ﺧﻄﺎﺏﺩﻋﻮﺓ ﺇﻟﻰ ‪ .ACM‬ﻓﻲ ﺃﺑﺮﻳﻞ ‪ ، 1958‬ﺑﻌﺪ ﺃﻥ ﻗﺪﻡ ﻓﺮﻳﺘﺰ ﺑﺎﻭﺭ ﻣﻦ ‪ GAMM‬ﺍﻻﻗﺘﺮﺍﺡ‬
‫ﺍﻟﺮﺳﻤﻲﺇﻟﻰ ‪ ، ACM‬ﻭﺍﻓﻘﺖ ﺍﻟﻤﺠﻤﻮﻋﺘﺎﻥ ﺭﺳﻤﻴﺎً ﻋﻠﻰ ﻣﺸﺮﻭﻉ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﻣﺸﺘﺮﻙ‪.‬‬

‫‪2.5.2‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﺒﻜﺮﺓ‬


‫ﺃﺭﺳﻞﻛﻞ ﻣﻦ ‪ GAMM‬ﻭ ‪ ACM‬ﺃﺭﺑﻌﺔ ﺃﻋﻀﺎء ﻻﺟﺘﻤﺎﻉ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﻭﻝ‪ .‬ﺑﺪﺃ ﺍﻻﺟﺘﻤﺎﻉ ﺍﻟﺬﻱ ﻋﻘﺪ‬
‫ﻓﻲﺯﻳﻮﺭﺥ ﻓﻲ ﺍﻟﻔﺘﺮﺓ ﻣﻦ ‪ 27‬ﻣﺎﻳﻮ ﺇﻟﻰ ‪ 1‬ﻳﻮﻧﻴﻮ ‪ 1958‬ﺑﺎﻷﻫﺪﺍﻑ ﺍﻟﺘﺎﻟﻴﺔ ﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ‪:‬‬

‫• ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﺗﺮﻛﻴﺐ ﺍﻟﻠﻐﺔ ﺃﻗﺮﺏ ﻣﺎ ﻳﻜﻮﻥ ﺇﻟﻰ ﺍﻟﺘﺪﻭﻳﻦ ﺍﻟﺮﻳﺎﺿﻲ ﺍﻟﻘﻴﺎﺳﻲ ‪ ،‬ﻭﻳﺠﺐ ﺃﻥ‬
‫ﺗﻜﻮﻥﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﻓﻴﻪ ﻗﺎﺑﻠﺔ ﻟﻠﻘﺮﺍءﺓ ﻣﻊ ﺍﻟﻘﻠﻴﻞ ﻣﻦ ﺍﻟﺸﺮﺡ ﺍﻹﺿﺎﻓﻲ‪.‬‬

‫• ﻳﻨﺒﻐﻲ ﺃﻥ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺔ ﻟﻮﺻﻒ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺎﺕ ﻓﻲ ﺍﻟﻤﻨﺸﻮﺭﺍﺕ‬


‫ﺍﻟﻤﻄﺒﻮﻋﺔ‪.‬‬
‫• ﻳﺠﺐ ﺃﻥ ﺗﻜﻮﻥ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺎﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﻗﺎﺑﻠﺔ ﻟﻠﺘﺮﺟﻤﺔ ﺁﻟﻴﺎً ﺇﻟﻰ ﻟﻐﺔ ﺍﻵﻟﺔ‪.‬‬

‫ﺃﺷﺎﺭﺍﻟﻬﺪﻑ ﺍﻷﻭﻝ ﺇﻟﻰ ﺃﻥ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻘﺮﺭ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻌﻠﻤﻴﺔ ‪،‬‬
‫ﻭﺍﻟﺘﻲﻛﺎﻧﺖ ﻣﺠﺎﻝ ﺗﻄﺒﻴﻖ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻷﺳﺎﺳﻲ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ‪ .‬ﻛﺎﻥ ﺍﻟﺜﺎﻧﻲ ﺷﻴﺉﺎً ﺟﺪﻳﺪﺍً ﺗﻤﺎﻣﺎً‬
‫ﻓﻲﻣﺠﺎﻝ ﺍﻟﺤﻮﺳﺒﺔ‪ .‬ﺍﻟﻬﺪﻑ ﺍﻷﺧﻴﺮ ﻫﻮ ﺿﺮﻭﺭﺓ ﻭﺍﺿﺤﺔ ﻷﻱ ﻟﻐﺔ ﺑﺮﻣﺠﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪54‬‬

‫ﻧﺠﺢﺍﺟﺘﻤﺎﻉ ﺯﻳﻮﺭﺥ ﻓﻲ ﺇﻧﺘﺎﺝ ﻟﻐﺔ ﺗﻠﺒﻲ ﺍﻷﻫﺪﺍﻑ ﺍﻟﻤﻌﻠﻨﺔ ‪ ،‬ﻟﻜﻦ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ ﺗﻄﻠﺒﺖ‬
‫ﺗﻨﺎﺯﻻﺕﻻ ﺣﺼﺮ ﻟﻬﺎ ‪ ،‬ﺑﻴﻦ ﺍﻷﻓﺮﺍﺩ ﻭﺑﻴﻦ ﺟﺎﻧﺒﻲ ﺍﻟﻤﺤﻴﻂ ﺍﻷﻃﻠﺴﻲ‪ .‬ﻓﻲ ﺑﻌﺾ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻟﻢ ﺗﻜﻦ‬
‫ﺍﻟﺤﻠﻮﻝﺍﻟﻮﺳﻂ ﺗﺪﻭﺭ ﺣﻮﻝ ﻗﻀﺎﻳﺎ ﻛﺒﻴﺮﺓ ﺑﻘﺪﺭ ﻣﺎ ﻛﺎﻧﺖ ﺗﺘﻌﻠﻖ ﺑﻤﺠﺎﻻﺕ ﺍﻟﻨﻔﻮﺫ‪ .‬ﺇﻥ ﻣﺴﺄﻟﺔ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻔﺎﺻﻠﺔ )ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﻭﺭﻭﺑﻴﺔ( ﺃﻭ ﺍﻟﻨﻘﻄﺔ )ﺍﻟﻄﺮﻳﻘﺔ ﺍﻷﻣﺮﻳﻜﻴﺔ( ﻟﻠﻔﺎﺻﻠﺔ ﺍﻟﻌﺸﺮﻳﺔ ﻫﻲ ﺃﺣﺪ‬
‫ﺍﻷﻣﺜﻠﺔ‪.‬‬

‫ﻧﻈﺮﺓﻋﺎﻣﺔ ‪2.5.3 ALGOL 58‬‬


‫ﺗﻢﺗﺴﻤﻴﺔ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺼﻤﻤﺔ ﻓﻲ ﺍﺟﺘﻤﺎﻉ ﺯﻳﻮﺭﺥ ﺑﺎﻟﻠﻐﺔ ﺍﻟﺨﻮﺍﺭﺯﻣﻴﺔ ﺍﻟﺪﻭﻟﻴﺔ )‪ .(IAL‬ﺗﻢ ﺍﻗﺘﺮﺍﺡ ﺃﺛﻨﺎء‬
‫ﺍﻟﺘﺼﻤﻴﻢﺃﻥ ﻳﺘﻢ ﺗﺴﻤﻴﺔ ﺍﻟﻠﻐﺔ ‪ ، ALGOL‬ﻟﻠﻐﺔ ‪ ، ALGOrithmic‬ﻭﻟﻜﻦ ﺗﻢ ﺭﻓﺾ ﺍﻻﺳﻢ ﻷﻧﻪ ﻻ‬
‫ﻳﻌﻜﺲﺍﻟﻨﻄﺎﻕ ﺍﻟﺪﻭﻟﻲ ﻟﻠﺠﻨﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺧﻼﻝ ﺍﻟﻌﺎﻡ ﺍﻟﺘﺎﻟﻲ ‪ ،‬ﺗﻢ ﺗﻐﻴﻴﺮ ﺍﻻﺳﻢ ﺇﻟﻰ ‪، ALGOL‬‬
‫ﻭﺃﺻﺒﺤﺖﺍﻟﻠﻐﺔ ﻓﻴﻤﺎ ﺑﻌﺪ ﺗﻌﺮﻑ ﺑﺎﺳﻢ ‪.ALGOL 58‬‬

‫ﻣﻦﻧﻮﺍﺡ ﻛﺜﻴﺮﺓ ‪ ،‬ﻛﺎﻥ ‪ 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،‬ﺗﻢ ﺗﻐﻴﻴﺮ ﺭﻣﺰ ﺃﻛﺒﺮ ﻣﻦ‬
‫ﺇﻟﻰﻧﻘﻄﺘﻴﻦ‪ .‬ﺑﻌﺪ ﺫﻟﻚ ‪ ،‬ﻭﺑﺈﺻﺮﺍﺭ ﻣﻦ ﺍﻷﻣﺮﻳﻜﻴﻴﻦ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ‪ ،‬ﺗﻢ ﺗﺤﻮﻳﻞ ﺍﻟﺒﻴﺎﻥ ﺑﺎﻟﻜﺎﻣﻞ ﺇﻟﻰ‬
‫ﻧﻤﻮﺫﺝﻓﻮﺭﺗﺮﺍﻥ‬

‫ﺍﻟﻤﺘﻐﻴﺮ‪ =:‬ﺍﻟﺘﻌﺒﻴﺮ‬
‫ﻓﻀﻞﺍﻷﻭﺭﻭﺑﻴﻮﻥ ﺍﻟﺸﻜﻞ ﺍﻟﻤﻌﺎﻛﺲ ‪ ،‬ﻟﻜﻦ ﻫﺬﺍ ﺳﻴﻜﻮﻥ ﻋﻜﺲ ﻓﻮﺭﺗﺮﺍﻥ‪.‬‬

‫‪.4‬ﻟﻢ ﺗﺘﻀﻤﻦ ﺧﺮﺍﻣﺎﺕ ﺍﻟﺒﻄﺎﻗﺔ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﺍﻟﺮﻣﺰ ﺃﻛﺒﺮ ﻣﻦ‪.‬‬


‫‪55‬‬ ‫‪2.5‬ﺍﻟﺨﻄﻮﺓ ﺍﻷﻭﻟﻰ ﻧﺤﻮ ﺍﻟﺘﻄﻮﺭ‪ALGOL 60 :‬‬

‫‪2.5.4‬ﺍﺳﺘﻼﻡ ﺗﻘﺮﻳﺮ ‪ALGOL 58‬‬


‫ﻓﻲﺩﻳﺴﻤﺒﺮ ‪ ، 1958‬ﺗﻢ ﺍﻟﺘﺮﺣﻴﺐ ﺑﻨﺸﺮ ﺗﻘﺮﻳﺮ (‪ALGOL 58 )Perlis and Samelson ، 1958‬‬
‫ﺑﻘﺪﺭﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺤﻤﺎﺱ‪ .‬ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ ‪ ،‬ﻛﺎﻥ ﻳﻨُﻈﺮ ﺇﻟﻰ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﻋﻠﻰ ﺃﻧﻬﺎ ﻣﺠﻤﻮﻋﺔ‬
‫ﻣﻦﺍﻷﻓﻜﺎﺭ ﻟﺘﺼﻤﻴﻢ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺃﻛﺜﺮ ﻣﻦ ﻛﻮﻧﻬﺎ ﻟﻐﺔ ﻗﻴﺎﺳﻴﺔ ﻋﺎﻟﻤﻴﺔ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻟﻢ ﻳﻜﻦ‬
‫ﺍﻟﻤﻘﺼﻮﺩﻣﻦ ﺗﻘﺮﻳﺮ ‪ ALGOL 58‬ﺃﻥ ﻳﻜﻮﻥ ﻣﻨﺘﺠﺎً ﻧﻬﺎﺉﻴﺎً ﺑﻞ ﻭﺛﻴﻘﺔ ﺃﻭﻟﻴﺔ ﻟﻠﻤﻨﺎﻗﺸﺔ ﺍﻟﺪﻭﻟﻴﺔ‪.‬‬
‫ﻭﻣﻊﺫﻟﻚ ‪ ،‬ﺍﺳﺘﺨﺪﻣﺖ ﺛﻼﺙ ﺟﻬﻮﺩ ﺭﺉﻴﺴﻴﺔ ﻟﻠﺘﺼﻤﻴﻢ ﻭﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺘﻘﺮﻳﺮ ﻛﺄﺳﺎﺱ ﻟﻬﺎ‪ .‬ﻓﻲ‬
‫ﺟﺎﻣﻌﺔﻣﻴﺸﻴﻐﺎﻥ ‪ ،‬ﻭﻟﺪﺕ ﻟﻐﺔ (‪ .MAD )Arden et al. ، 1961‬ﺃﻧﺘﺠﺖ ﻣﺠﻤﻮﻋﺔ ﺍﻹﻟﻜﺘﺮﻭﻧﻴﺎﺕ‬
‫ﺍﻟﺒﺤﺮﻳﺔﺍﻷﻣﺮﻳﻜﻴﺔ ﻟﻐﺔ (‪ .NELIAC )Huskey et al. ، 1963‬ﻓﻲ ﺷﺮﻛﺔ ‪Corporation‬‬
‫‪ ، System Development‬ﺗﻢ ﺗﺼﻤﻴﻢ ﻭﺗﻨﻔﻴﺬ (‪ .JOVIAL )Shaw ، 1963‬ﺟﻮﻓﻴﺎﻝ ‪ ،‬ﺍﺧﺘﺼﺎﺭ‬
‫ﻟﻨﺴﺨﺔﺟﻮﻝ ﺍﻟﺨﺎﺻﺔ ﻣﻦ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺒﺮﻳﺔ ﺍﻟﺪﻭﻟﻴﺔ ‪ ،‬ﺗﻤﺜﻞ ﺍﻟﻠﻐﺔ ﺍﻟﻮﺣﻴﺪﺓ ﺍﻟﻤﻌﺘﻤﺪﺓ ﻋﻠﻰ ‪58‬‬
‫‪ ALGOL‬ﻟﺘﺤﻘﻴﻖ ﺍﺳﺘﺨﺪﺍﻡ ﻭﺍﺳﻊ )ﻛﺎﻥ ‪ Jules‬ﻫﻮ ‪ ، Jules I. Schwartz‬ﺃﺣﺪ ﻣﺼﻤﻤﻲ‬
‫‪ .(JOVIAL‬ﺃﺻﺒﺤﺖ ﺟﻮﻓﻴﺎﻝ ﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻷﻧﻬﺎ ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﺍﻟﻌﻠﻤﻴﺔ ﺍﻟﺮﺳﻤﻴﺔ‬
‫ﻟﻠﻘﻮﺍﺕﺍﻟﺠﻮﻳﺔ ﺍﻷﻣﺮﻳﻜﻴﺔ ﻟﻤﺪﺓ ﺭﺑﻊ ﻗﺮﻥ‪.‬‬

‫ﻟﻢﻳﻜﻦ ﺑﺎﻗﻲ ﻣﺠﺘﻤﻊ ﺍﻟﺤﻮﺳﺒﺔ ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ ﻟﻄﻴﻔﺎً ﺟﺪﺍً ﻣﻊ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ‪ .‬ﻓﻲ‬
‫ﺍﻟﺒﺪﺍﻳﺔ ‪،‬ﺑﺪﺍ ﺃﻥ ﻛﻞ ﻣﻦ ‪ IBM‬ﻭﻣﺠﻤﻮﻋﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺍﻟﻌﻠﻤﻴﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﺘﺎﺑﻌﺔ ﻟﻬﺎ ‪SHARE ،‬‬
‫‪،‬ﺗﺘﺒﻨﻰ ‪ .ALGOL 58‬ﺑﺪﺃﺕ ‪ IBM‬ﻓﻲ ﺍﻟﺘﻨﻔﻴﺬ ﺑﻌﺪ ﻭﻗﺖ ﻗﺼﻴﺮ ﻣﻦ ﻧﺸﺮ ﺍﻟﺘﻘﺮﻳﺮ ‪ ،‬ﻭﺷﻜﻠﺖ‬
‫‪ SHARE‬ﻟﺠﻨﺔ ﻓﺮﻋﻴﺔ ‪ ، SHARE IAL ،‬ﻟﺪﺭﺍﺳﺔ ﺍﻟﻠﻐﺔ‪ .‬ﺃﻭﺻﺖ ﺍﻟﻠﺠﻨﺔ ﺍﻟﻔﺮﻋﻴﺔ ﻓﻴﻤﺎ ﺑﻌﺪ ﺑﺄﻥ‬
‫ﺗﻘﻮﻡ‪ ACM‬ﺑﺘﻮﺣﻴﺪ ‪ ALGOL 58‬ﻭﺃﻥ ﺗﻘﻮﻡ ﺷﺮﻛﺔ ‪ IBM‬ﺑﺘﻄﺒﻴﻘﻪ ﻋﻠﻰ ﺟﻤﻴﻊ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﻣﻦﺍﻟﺴﻠﺴﻠﺔ ‪ .700‬ﻟﻜﻦ ﺍﻟﺤﻤﺎﺱ ﻟﻢ ﻳﺪﻡ ﻃﻮﻳﻼ‪ .‬ﺑﺤﻠﻮﻝ ﺭﺑﻴﻊ ﻋﺎﻡ ‪ ، 1959‬ﻛﺎﻥ ﻟﺪﻯ ﻛﻞ ﻣﻦ‬
‫‪ IBM‬ﻭ ‪ ، SHARE‬ﻣﻦ ﺧﻼﻝ ﺗﺠﺮﺑﺘﻬﻢ ﻓﻲ ‪ ، Fortran‬ﻣﺎ ﻳﻜﻔﻲ ﻣﻦ ﺍﻷﻟﻢ ﻭﺍﻟﻨﻔﻘﺎﺕ ﻟﺒﺪء ﻟﻐﺔ‬
‫ﺟﺪﻳﺪﺓ ‪،‬ﺳﻮﺍء ﻣﻦ ﺣﻴﺚ ﺗﻄﻮﻳﺮ ﻭﺍﺳﺘﺨﺪﺍﻡ ﻣﺘﺮﺟﻤﻲ ﺍﻟﺠﻴﻞ ﺍﻷﻭﻝ ﻭﻣﻦ ﺣﻴﺚ ﺗﺪﺭﻳﺐ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﻋﻠﻰ ﺫﻟﻚ‪ .‬ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﻭﺇﻗﻨﺎﻋﻬﻢ ﺑﺎﺳﺘﺨﺪﺍﻣﻬﺎ‪ .‬ﺑﺤﻠﻮﻝ ﻣﻨﺘﺼﻒ ﻋﺎﻡ ‪، 1959‬ﺍﻝ‬
‫ﻟﻐﺔﻋﻠﻤﻴﺔ ﻵﻻﺕ ﺳﻠﺴﻠﺔ ‪ ، IBM 700‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﺍﻟﺘﺨﻠﻲ ﻋﻦ ‪.ALGOL 58‬‬

‫‪2.5.5‬ﻋﻤﻠﻴﺔ ﺗﺼﻤﻴﻢ ‪ALGOL 60‬‬


‫ﺧﻼﻝﻋﺎﻡ ‪ ، 1959‬ﻧﻮﻗﺶ ‪ ALGOL 58‬ﺑﺸﺪﺓ ﻓﻲ ﻛﻞ ﻣﻦ ﺃﻭﺭﻭﺑﺎ ﻭﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ‪ .‬ﺗﻢ ﻧﺸﺮ‬
‫ﻋﺪﺩﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺘﻌﺪﻳﻼﺕ ﻭﺍﻹﺿﺎﻓﺎﺕ ﺍﻟﻤﻘﺘﺮﺣﺔ ﻓﻲ ﺃﻭﺭﻭﺑﺎﻧﺸﺮﺓ ‪ALGOL‬ﻭ ﻓﻲﺍﺗﺼﺎﻻﺕ ﻣﻦ‬
‫‪.ACM‬ﻛﺎﻥ ﻣﻦ ﺃﻫﻢ ﺃﺣﺪﺍﺙ ﻋﺎﻡ ‪ 1959‬ﺗﻘﺪﻳﻢ ﻋﻤﻞ ﻟﺠﻨﺔ ﺯﻳﻮﺭﺥ ﺇﻟﻰ ﺍﻟﻤﺆﺗﻤﺮ ﺍﻟﺪﻭﻟﻲ ﻟﻤﻌﺎﻟﺠﺔ‬
‫ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ‪،‬ﺣﻴﺚ ﻗﺪﻡ ﺑﺎﻛﻮﺱ ﺗﺪﻭﻳﻨﻪ ﺍﻟﺠﺪﻳﺪ ﻟﻮﺻﻒ ﺑﻨﺎء ﺟﻤﻠﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﻭﺍﻟﺬﻱ‬
‫ﺃﺻﺒﺢﻓﻴﻤﺎ ﺑﻌﺪ ﻳﻌﺮﻑ ﺑـ ‪ -Backus) BNF‬ﺷﻜﻞ ﻧﺎﻭﺭ(‪ .‬ﺗﻢ ﻭﺻﻒ ‪ BNF‬ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ‬
‫‪.3‬‬

‫ﻓﻲﻳﻨﺎﻳﺮ ‪ ، 1960‬ﻋﻘُﺪ ﺍﻻﺟﺘﻤﺎﻉ ﺍﻟﺜﺎﻧﻲ ﻟـ ‪ ، ALGOL‬ﻫﺬﻩ ﺍﻟﻤﺮﺓ ﻓﻲ ﺑﺎﺭﻳﺲ‪ .‬ﻭﻛﺎﻥ ﺍﻟﻐﺮﺽ‬


‫ﻣﻦﺍﻻﺟﺘﻤﺎﻉ ﻫﻮ ﻣﻨﺎﻗﺸﺔ ‪ 80‬ﺍﻗﺘﺮﺍﺣﺎ ﺗﻢ ﺗﻘﺪﻳﻤﻬﺎ ﺭﺳﻤﻴﺎ ﻟﻠﻨﻈﺮ ﻓﻴﻬﺎ‪ .‬ﺷﺎﺭﻙ ﺑﻴﺘﺮ ﻧﻮﺭ ﻣﻦ‬
‫ﺍﻟﺪﻧﻤﺎﺭﻙﺑﺸﻜﻞ ﻛﺒﻴﺮ ﻓﻲ ﺗﻄﻮﻳﺮ ‪ ، ALGOL‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻟﻢ ﻳﻜﻦ ﻛﺬﻟﻚ‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪56‬‬

‫ﻋﻀﻮﻓﻲ ﻣﺠﻤﻮﻋﺔ ﺯﻳﻮﺭﺥ‪ .‬ﻛﺎﻥ ﻧﻮﺭ ﻫﻮ ﻣﻦ ﺃﻧﺸﺄ ﻭﻧﺸﺮ ﻣﻠﻒ ﻧﺸﺮﺓ ‪.ALGOL‬ﻗﻀﻰ ﻭﻗﺘﺎً ﻃﻮﻳﻼ ً‬
‫ﻓﻲﺩﺭﺍﺳﺔ ﻭﺭﻗﺔ ﺑﺎﻛﻮﺱ ﺍﻟﺘﻲ ﻗﺪﻣﺖ ‪ BNF‬ﻭﻗﺮﺭ ﺍﺳﺘﺨﺪﺍﻡ ‪ BNF‬ﻟﻮﺻﻒ ﻧﺘﺎﺉﺞ ﺍﺟﺘﻤﺎﻉ ‪1960‬‬
‫ﺭﺳﻤﻴﺎً‪.‬ﺑﻌﺪ ﺇﺟﺮﺍء ﺑﻌﺾ ﺍﻟﺘﻐﻴﻴﺮﺍﺕ ﺍﻟﻄﻔﻴﻔﺔ ﻧﺴﺒﻴﺎً ﻋﻠﻰ ‪ ، BNF‬ﻛﺘﺐ ﻭﺻﻔﺎً ﻟﻠﻐﺔ ﺍﻟﻤﻘﺘﺮﺣﺔ‬
‫ﺍﻟﺠﺪﻳﺪﺓﻓﻲ ‪ BNF‬ﻭﻭﺯﻋﻪ ﻋﻠﻰ ﺃﻋﻀﺎء ﻣﺠﻤﻮﻋﺔ ‪ 1960‬ﻓﻲ ﺑﺪﺍﻳﺔ ﺍﻻﺟﺘﻤﺎﻉ‪.‬‬

‫ﻧﻈﺮﺓﻋﺎﻣﺔ ‪2.5.6 ALGOL 60‬‬


‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﺟﺘﻤﺎﻉ ‪ 1960‬ﺍﺳﺘﻤﺮ ﺳﺘﺔ ﺃﻳﺎﻡ ﻓﻘﻂ ‪ ،‬ﺇﻻ ﺃﻥ ﺍﻟﺘﻌﺪﻳﻼﺕ ﺍﻟﺘﻲ ﺗﻢ ﺇﺟﺮﺍﺅﻫﺎ‬
‫ﻋﻠﻰ‪ ALGOL 58‬ﻛﺎﻧﺖ ﺩﺭﺍﻣﺎﺗﻴﻜﻴﺔ‪ .‬ﻭﻣﻦ ﺃﻫﻢ ﺍﻟﺘﻄﻮﺭﺍﺕ ﺍﻟﺠﺪﻳﺪﺓ ﻣﺎ ﻳﻠﻲ‪:‬‬

‫• ﺗﻢ ﺗﻘﺪﻳﻢ ﻣﻔﻬﻮﻡ ﻫﻴﻜﻞ ﺍﻟﻜﺘﻠﺔ‪ .‬ﺳﻤﺢ ﺫﻟﻚ ﻟﻠﻤﺒﺮﻣﺞ ﺑﺘﻮﻃﻴﻦ ﺃﺟﺰﺍء ﻣﻦ ﺍﻟﺒﺮﺍﻣﺞ ﻋﻦ ﻃﺮﻳﻖ‬
‫ﺇﺩﺧﺎﻝﺑﻴﺉﺎﺕ ﺃﻭ ﻧﻄﺎﻗﺎﺕ ﺑﻴﺎﻧﺎﺕ ﺟﺪﻳﺪﺓ‪.‬‬

‫• ﺳﻤُﺢ ﺑﻮﺳﻴﻠﺘﻴﻦ ﻣﺨﺘﻠﻔﺘﻴﻦ ﻟﺘﻤﺮﻳﺮ ﺍﻟﻤﻌﻠﻤﺎﺕ ﺇﻟﻰ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ‪ :‬ﺍﻟﺘﻤﺮﻳﺮ ﺣﺴﺐ ﺍﻟﻘﻴﻤﺔ‬
‫ﻭﺍﻟﻤﺮﻭﺭﺑﺎﻻﺳﻢ‪.‬‬
‫• ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﻟﻺﺟﺮﺍءﺍﺕ ﺃﻥ ﺗﻜﻮﻥ ﻋﻮﺩﻳﺔ‪ .‬ﻟﻢ ﻳﻜﻦ ﻭﺻﻒ ‪ ALGOL 58‬ﻭﺍﺿﺤﺎً ﺑﺸﺄﻥ ﻫﺬﻩ‬
‫ﺍﻟﻤﺴﺄﻟﺔ‪.‬ﻻﺣﻆ ﺃﻧﻪ ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﺍﻟﺘﻜﺮﺍﺭ ﻛﺎﻥ ﺟﺪﻳﺪﺍً ﻟﻠﻐﺎﺕ ﺍﻷﻣﺮ ‪ ،‬ﻓﻘﺪ ﻗﺪﻡ ‪LISP‬‬
‫ﺑﺎﻟﻔﻌﻞﻭﻇﺎﺉﻒ ﺗﻜﺮﺍﺭﻳﺔ ﻓﻲ ﻋﺎﻡ ‪.1959‬‬

‫• ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﺑﺎﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﺍﻟﻤﻜﺪﺳﺔ‪ .‬ﺍﻟﻤﺼﻔﻮﻓﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﺍﻟﻤﻜﺪﺳﺔ ﻫﻲ‬


‫ﺍﻟﺘﻲﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺍﻟﻨﻄﺎﻕ ﺃﻭ ﺍﻟﻨﻄﺎﻗﺎﺕ ﻣﻦ ﺃﺟﻠﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻣﺘﻐﻴﺮﺍﺕ ‪ ،‬ﺑﺤﻴﺚ ﻳﺘﻢ ﺗﻌﻴﻴﻦ‬
‫ﺣﺠﻢﺍﻟﻤﺼﻔﻮﻓﺔ ﻓﻲ ﻭﻗﺖ ﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ ﻟﻠﻤﺼﻔﻮﻓﺔ ‪ ،‬ﻭﺍﻟﺬﻱ ﻳﺤﺪﺙ ﻋﻨﺪ ﺍﻟﻮﺻﻮﻝ‬
‫ﺇﻟﻰﺍﻹﻋﻼﻥ ﺃﺛﻨﺎء ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﺍﻟﻤﻜﺪﺳﺔ ﻣﻮﺻﻮﻓﺔ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ‬
‫ﺍﻟﻔﺼﻞ‪.6‬‬
‫ﺗﻢﺍﻗﺘﺮﺍﺡ ﻭﺭﻓﺾ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺘﻲ ﻗﺪ ﻳﻜﻮﻥ ﻟﻬﺎ ﺗﺄﺛﻴﺮ ﻛﺒﻴﺮ ﻋﻠﻰ ﻧﺠﺎﺡ ﺃﻭ ﻓﺸﻞ‬
‫ﺍﻟﻠﻐﺔ‪.‬ﻭﺍﻷﻛﺜﺮ ﺃﻫﻤﻴﺔ ﻣﻦ ﺑﻴﻨﻬﺎ ﻛﺎﻧﺖ ﻋﺒﺎﺭﺍﺕ ﺍﻹﺩﺧﺎﻝ ﻭﺍﻹﺧﺮﺍﺝ ﺑﺎﻟﺘﻨﺴﻴﻖ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻢ ﺣﺬﻓﻬﺎ‬
‫ﻷﻧﻪﻛﺎﻥ ﻳﻌُﺘﻘﺪ ﺃﻧﻬﺎ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻵﻟﺔ‪.‬‬

‫ﻧﺸُﺮﺗﻘﺮﻳﺮ ‪ 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‬‬

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

‫ﺗﻌﻠﻴﻖﺑﺮﻧﺎﻣﺞ ‪ ALGOL 60‬ﻣﺜﺎﻝ ﻹﺩﺧﺎﻝ ﺍﻟﺒﺮﻧﺎﻣﺞ‪:‬‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، listlen ،‬ﺣﻴﺚ ‪ listlen‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺔ ﺑﻘﻴﻢ ‪-listlen‬‬
‫ﺻﺤﻴﺤﺔ‬
‫ﺍﻹﺧﺮﺍﺝ‪:‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻷﻛﺒﺮ ﻣﻦ‬
‫ﻣﺘﻮﺳﻂﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ؛‬
‫ﻳﺒﺪﺃ‬
‫ﻣﺠﻤﻮﻋﺔﻋﺪﺩ ﺻﺤﻴﺢ؛ [‪intlist ]1:99‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪58‬‬

‫ﻋﺪﺩﺻﺤﻴﺢﻋﺪﺍﺩ ‪ ،‬ﻣﺠﻤﻮﻉ ‪ ،‬ﻣﺘﻮﺳﻂ ‪ ،‬ﻧﺘﻴﺠﺔ ؛ ﺍﻟﻤﺠﻤﻮﻉ‪ 0 = :‬؛ ‪listlen ،‬‬

‫ﺍﻟﻨﺘﻴﺠﺔ‪ 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‬‬
‫ﻧﻬﺎﻳﺔ‬

‫‪2.6‬ﺣﻮﺳﺒﺔ ﺳﺠﻼﺕ ﺍﻷﻋﻤﺎﻝ‪COBOL :‬‬


‫ﻗﺼﺔ‪ COBOL‬ﻫﻲ ‪ ،‬ﺇﻟﻰ ﺣﺪ ﻣﺎ ‪ ،‬ﻋﻜﺲ ﻗﺼﺔ ‪ .ALGOL 60‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﺍﺳﺘﺨﺪﻣﺖ‬
‫ﺃﻛﺜﺮﻣﻦ ﺃﻱ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺃﺧﺮﻯ ‪ ،‬ﺇﻻ ﺃﻥ ‪ COBOL‬ﻛﺎﻥ ﻟﻬﺎ ﺗﺄﺛﻴﺮ ﺿﺉﻴﻞ ﻋﻠﻰ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺎﺕ‬
‫ﺍﻟﻼﺣﻘﺔ ‪،‬ﺑﺎﺳﺘﺜﻨﺎء ‪ .PL / I‬ﻗﺪ ﺗﻜﻮﻥ ﻻ ﺗﺰﺍﻝ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ‪5،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺻﻌﻮﺑﺔ‬
‫ﺍﻟﺘﺄﻛﺪﺑﻄﺮﻳﻘﺔ ﺃﻭ ﺑﺄﺧﺮﻯ‪ .‬ﺭﺑﻤﺎ ﻳﻜﻮﻥ ﺃﻫﻢ ﺳﺒﺐ ﻟﻌﺪﻡ ﺗﺄﺛﻴﺮ ‪ COBOL‬ﻫﻮ ﺃﻥ ﺍﻟﻘﻠﻴﻞ ﻣﻨﻬﻢ ﺣﺎﻭﻝ‬
‫ﺗﺼﻤﻴﻢﻟﻐﺔ ﺟﺪﻳﺪﺓ ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﻣﻨﺬ ﻇﻬﻮﺭﻫﺎ‪ .‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺟﺰﺉﻴﺎً ﺇﻟﻰ ﻣﺪﻯ ﺗﻠﺒﻴﺔ‬
‫ﻗﺪﺭﺍﺕ‪ COBOL‬ﻻﺣﺘﻴﺎﺟﺎﺕ ﻣﻨﻄﻘﺔ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ‪ .‬ﺳﺒﺐ ﺁﺧﺮ ﻫﻮ ﺃﻥ ﻗﺪﺭﺍً ﻛﺒﻴﺮﺍً ﻣﻦ‬
‫ﺍﻟﻨﻤﻮﻓﻲ ﺣﻮﺳﺒﺔ ﺍﻷﻋﻤﺎﻝ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺜﻼﺛﻴﻦ ﻋﺎﻣﺎً ﺍﻟﻤﺎﺿﻴﺔ ﻗﺪ ﺣﺪﺙ ﻓﻲ ﺍﻟﺸﺮﻛﺎﺕ ﺍﻟﺼﻐﻴﺮﺓ‪.‬‬
‫ﻓﻲﻫﺬﻩ ﺍﻷﻋﻤﺎﻝ ‪ ،‬ﺗﻢ ﺗﻄﻮﻳﺮ ﺍﻟﻘﻠﻴﻞ ﺟﺪﺍً ﻣﻦ ﺍﻟﺒﺮﺍﻣﺞ‪ .‬ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﻳﺘﻢ ﺷﺮﺍء ﻣﻌﻈﻢ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﺔﻛﺤﺰﻡ ﺟﺎﻫﺰﺓ ﻟﻤﺨﺘﻠﻒ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﺍﻟﻌﺎﻣﺔ‪.‬‬

‫‪.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‬ﻭﺣﺘﻰ ﺑﻌﺪ ﺫﻟﻚ ﺍﺳﺘﻐﺮﻕ ﺍﻷﻣﺮ ﻧﻈﺎﻣﺎً ﻧﻤﻮﺫﺟﻴﺎً‬
‫ﻟﻠﻘﻴﺎﻡﺑﺎﻹﻗﻨﺎﻉ ﺍﻟﻨﻬﺎﺉﻲ‪ .‬ﺗﻀﻤﻦ ﺟﺰء ﻣﻦ ﻋﻤﻠﻴﺔ ﺍﻟﺒﻴﻊ ﻫﺬﻩ ﺗﺠﻤﻴﻊ ﻭﺗﺸﻐﻴﻞ ﺑﺮﻧﺎﻣﺞ ﺻﻐﻴﺮ ‪،‬‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﺃﻭﻻ ً‪ ،‬ﺛﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﻔﺮﻧﺴﻴﺔ ‪ ،‬ﺛﻢ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻷﻟﻤﺎﻧﻴﺔ‪.‬‬

‫‪2.6.3‬ﻋﻤﻠﻴﺔ ﺗﺼﻤﻴﻢ ﻛﻮﺑﻮﻝ‬


‫ﻋﻘُﺪﺍﻻﺟﺘﻤﺎﻉ ﺍﻟﺮﺳﻤﻲ ﺍﻷﻭﻝ ﺣﻮﻝ ﻣﻮﺿﻮﻉ ﺍﻟﻠﻐﺔ ﺍﻟﻤﺸﺘﺮﻛﺔ ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ‪ ،‬ﻭﺍﻟﺬﻱ ﺭﻋﺘﻪ‬
‫ﻭﺯﺍﺭﺓﺍﻟﺪﻓﺎﻉ ‪ ،‬ﻓﻲ ﺍﻟﺒﻨﺘﺎﻏﻮﻥ ﻓﻲ ‪ 28‬ﻭ ‪ 29‬ﻣﺎﻳﻮ ‪) 1959‬ﺑﺎﻟﻀﺒﻂ ﺑﻌﺪ ﻋﺎﻡ ﻭﺍﺣﺪ ﻣﻦ ﺍﺟﺘﻤﺎﻉ‬
‫ﺯﻳﻮﺭﺥ‪ .(ALGOL‬ﻛﺎﻥ ﺇﺟﻤﺎﻉ ﺍﻟﻤﺠﻤﻮﻋﺔ ﻋﻠﻰ ﺃﻥ ﺍﻟﻠﻐﺔ ‪ ،‬ﺍﻟﺘﻲ ﻛﺎﻧﺖ ﺗﺴﻤﻰ ﺁﻧﺬﺍﻙ ‪) CBL‬ﻟﻐﺔ‬
‫ﺍﻷﻋﻤﺎﻝﺍﻟﻌﺎﻣﺔ( ‪ ،‬ﻳﺠﺐ ﺃﻥ ﺗﺘﻤﺘﻊ ﺑﺎﻟﺨﺼﺎﺉﺺ ﺍﻟﻌﺎﻣﺔ ﺍﻟﺘﺎﻟﻴﺔ‪ :‬ﺍﺗﻔﻖ ﻣﻌﻈﻤﻬﻢ ﻋﻠﻰ ﺃﻧﻪ ﻳﻨﺒﻐﻲ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺍﻟﻠﻐﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﻗﺪﺭ ﺍﻹﻣﻜﺎﻥ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﺒﻌﺾ ﺟﺎﺩﻝ ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﺗﺪﻭﻳﻦ‬
‫ﺭﻳﺎﺿﻲﺃﻛﺜﺮ‪ .‬ﻳﺠﺐ ﺃﻥ ﺗﻜﻮﻥ ﺍﻟﻠﻐﺔ ﺳﻬﻠﺔ ﺍﻻﺳﺘﺨﺪﺍﻡ ‪ ،‬ﺣﺘﻰ ﻋﻠﻰ ﺣﺴﺎﺏ ﻛﻮﻧﻬﺎ ﺃﻗﻞ ﻗﻮﺓ ‪ ،‬ﻣﻦ‬
‫ﺃﺟﻞﺗﻮﺳﻴﻊ ﻗﺎﻋﺪﺓ ﺃﻭﻟﺉﻚ ﺍﻟﺬﻳﻦ ﻳﻤﻜﻨﻬﻢ ﺑﺮﻣﺠﺔ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺟﻌﻞ ﺍﻟﻠﻐﺔ‬
‫ﺳﻬﻠﺔﺍﻻﺳﺘﺨﺪﺍﻡ ‪ ،‬ﻛﺎﻥ ﻳﻌﺘﻘﺪ ﺃﻥ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻠﻐﺔ ﺍﻹﻧﺠﻠﻴﺰﻳﺔ ﺳﻴﺴﻤﺢ ﻟﻠﻤﺪﻳﺮﻳﻦ ﺑﻘﺮﺍءﺓ ﺍﻟﺒﺮﺍﻣﺞ‪.‬‬
‫ﺃﺧﻴﺮﺍً ‪،‬ﻻ ﻳﻨﺒﻐﻲ ﺗﻘﻴﻴﺪ ﺍﻟﺘﺼﻤﻴﻢ ﺑﺸﻜﻞ ﻣﻔﺮﻁ ﺑﺴﺒﺐ ﻣﺸﺎﻛﻞ ﺗﻨﻔﻴﺬﻩ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪60‬‬

‫ﻛﺎﻥﺃﺣﺪ ﺍﻻﻫﺘﻤﺎﻣﺎﺕ ﺍﻟﻤﻬﻴﻤﻨﺔ ﻓﻲ ﺍﻻﺟﺘﻤﺎﻉ ﻫﻮ ﺃﻧﻪ ﻳﻨﺒﻐﻲ ﺍﺗﺨﺎﺫ ﺧﻄﻮﺍﺕ ﻹﻧﺸﺎء ﻫﺬﻩ‬
‫ﺍﻟﻠﻐﺔﺍﻟﻌﺎﻟﻤﻴﺔ ﺑﺴﺮﻋﺔ ‪ ،‬ﺣﻴﺚ ﺗﻢ ﺑﺎﻟﻔﻌﻞ ﺑﺬﻝ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺍﻟﻌﻤﻞ ﻹﻧﺸﺎء ﻟﻐﺎﺕ ﺃﻋﻤﺎﻝ ﺃﺧﺮﻯ‪.‬‬
‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺎﻟﻴﺔ ‪ ،‬ﻛﺎﻥ ‪ 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‬ﺣﺮﻓﺎً‪.‬‬

‫‪01‬ﺧﻂ ﺇﻋﺎﺩﺓ ﺗﺮﺗﻴﺐ‪.‬‬


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

‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.Z )5‬‬ ‫‪02 RL-ITEM-NO‬‬


‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )5‬‬ ‫‪02‬ﺣﺸﻮ‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )20‬‬ ‫‪02 RL-ITEM-DESC‬‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )5‬‬ ‫‪02‬ﺣﺸﻮ‬
‫ﺍﻟﺼﻮﺭﺓﻫﻲ ‪.ZZZ.99‬‬ ‫‪02 RL-UNIT-PRICE‬‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )5‬‬ ‫‪02‬ﺣﺸﻮ‬
‫ﺣﺸﻮ‪02 RL-AVAILABLE-STOCK PICTURE IS Z )5(. 02‬‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )5‬‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.Z )5‬‬ ‫‪02 RL-REORDER-POINT‬‬
‫ﺍﻟﺼﻮﺭﺓﻫﻮ (‪.X )71‬‬ ‫‪02‬ﺣﺸﻮ‬

‫ﻗﺴﻢﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﻌﺎﻣﻞ‪01 .‬‬


‫ﻣﻔﺎﺗﻴﺢ‪.‬‬
‫ﺍﻟﺼﻮﺭﺓﻫﻲ ‪.X‬‬ ‫‪02 CARD-EOF-SWITCH‬‬
‫‪ 01‬ﻣﺠﺎﻻﺕﺍﻟﻌﻤﻞ‪.‬‬
‫ﺍﻟﺼﻮﺭﺓ‪.(5) 9‬‬ ‫‪02‬ﺍﻟﻤﺨﺰﻭﻥ ﺍﻟﻤﺘﻮﻓﺮ‬

‫ﻗﺴﻢﺍﻹﺟﺮﺍءﺍﺕ‪.‬‬
‫‪-000‬ﻣﻨﺘﺞ‪ -‬ﻗﻮﺍﺉﻢ‪.REORDER-LISTING -‬‬
‫ﻓﺘﺢ‪ BAL-FWD-FILE‬ﺍﻟﻤﺪﺧﻼﺕ‪ .‬ﻓﺘﺢ ﻗﻮﺍﺉﻢ ﺇﻋﺎﺩﺓ‬
‫ﺗﺮﺗﻴﺐﺍﻹﺧﺮﺍﺝ‪ .‬ﻧﻘﻞ "‪ "N‬ﺇﻟﻰ ﻣﻔﺘﺎﺡ ﺑﻄﺎﻗﺔ ‪-LINE‬‬
‫‪EOF. PERFORM 100-PRODUCE-REORDER‬‬

‫ﺣﺘﻰﻳﺼﺒﺢ ﻣﻔﺘﺎﺡ ‪ CARD-EOF-SWITCH‬ﻣﺴﺎﻭﻳﺎً ﻟـ "‪ ."Y‬ﺃﻏﻠﻖ‬


‫‪.BAL-FWD-FILE‬‬
‫ﺇﻏﻼﻕﻗﺎﺉﻤﺔ ﺇﻋﺎﺩﺓ ﺍﻟﺘﺮﺗﻴﺐ‪.‬‬
‫ﺗﻮﻗﻒﺗﺸﻐﻴﻞ‪.‬‬

‫‪-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‬‬

‫‪-120‬ﺣﺴﺎﺏ‪-‬ﺍﻟﻤﺨﺰﻭﻥ‪-‬ﺍﻟﻤﺘﻮﻓﺮ‪ .‬ﺃﺿﻒ ﺑﻠﻠﺔ ﻋﻠﻰ ﺍﻟﻴﺪ‬

‫ﺇﻋﻄﺎءﺍﻟﻤﺨﺰﻭﻥ ﺍﻟﻤﺘﺎﺡ‪.‬‬

‫‪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‬ﺑﺪﺍﻳﺎﺕ ﺍﻟﻤﺸﺎﺭﻛﺔ ﺑﺎﻟﻮﻗﺖ‪BASIC :‬‬


‫‪.‬ﻛﺎﻥﻓﻲ ﺇﺻﺪﺍﺭﺍﺗﻪ ﺍﻷﻭﻟﻰ ﻏﻴﺮ ﺃﻧﻴﻖ ﻭﻟﻢ ﻳﺘﻀﻤﻦ ﺳﻮﻯ ﻣﺠﻤﻮﻋﺔ ﻫﺰﻳﻠﺔ ﻣﻦ ﻋﺒﺎﺭﺍﺕ ﺍﻟﺘﺤﻜﻢ ‪،‬‬
‫‪ COBOL‬ﺗﻢ ﺗﺠﺎﻫﻠﻪ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻣﻦ ﻗﺒﻞ ﻋﻠﻤﺎء ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﺃﻳﻀﺎً ‪ ،‬ﻣﺜﻞ ‪ COBOL ،‬ﻫﻲ ﻟﻐﺔ‬
‫ﺑﺮﻣﺠﺔﺃﺧﺮﻯ ﺗﻤﺘﻌﺖ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻭﻟﻜﻨﻬﺎ ﻟﻢ ﺗﺤﻆ ﺇﻻ ﺑﺎﻟﻘﻠﻴﻞ ﻣﻦ ﺍﻻﺣﺘﺮﺍﻡ‪ .‬ﻣﺜﻞ (‬
‫‪BASIC )Mather and Waite، 1971‬‬

‫ﻛﺎﻧﺖ‪ BASIC‬ﺗﺤﻈﻰ ﺑﺸﻌﺒﻴﺔ ﻛﺒﻴﺮﺓ ﻋﻠﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺼﻐﻴﺮﺓ ﻓﻲ ﺃﻭﺍﺧﺮ‬


‫ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕﻭﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ‪ .‬ﺟﺎء ﻫﺬﺍ ﻣﺒﺎﺷﺮﺓ ﻣﻦ ﺍﺛﻨﻴﻦ ﻣﻦ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﺮﺉﻴﺴﻴﺔ‬
‫ﻟﻺﺻﺪﺍﺭﺍﺕﺍﻟﻤﺒﻜﺮﺓ ﻣﻦ ‪ .BASIC‬ﻛﺎﻥ ﻣﻦ ﺍﻟﺴﻬﻞ ﻋﻠﻰ ﺍﻟﻤﺒﺘﺪﺉﻴﻦ ﺍﻟﺘﻌﻠﻢ ‪ ،‬ﺧﺎﺻﺔ ﺃﻭﻟﺉﻚ‬
‫ﺍﻟﺬﻳﻦﻟﻢ ﻳﻜﻦ ﻟﺪﻳﻬﻢ ﺗﻮﺟﻪ ﻋﻠﻤﻲ ‪ ،‬ﻭﻳﻤﻜﻦ ﺗﻄﺒﻴﻖ ﻟﻬﺠﺎﺗﻬﺎ ﺍﻷﺻﻐﺮ ﻋﻠﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺫﺍﺕ‬
‫ﺍﻟﺬﻛﺮﻳﺎﺕﺍﻟﺼﻐﻴﺮﺓ ﺟﺪﺍً‪6.‬ﻋﻨﺪﻣﺎ ﻧﻤﺖ ﻗﺪﺭﺍﺕ ﺍﻟﺤﻮﺍﺳﻴﺐ ﺍﻟﺼﻐﻴﺮﺓ ﻭﻧﻔُﺬﺕ ﻟﻐﺎﺕ ﺃﺧﺮﻯ ‪،‬‬
‫ﺗﻀﺎءﻝﺍﺳﺘﺨﺪﺍﻡ ‪ .BASIC‬ﺑﺪﺃﺕ ﻋﻮﺩﺓ ﻗﻮﻳﺔ ﻓﻲ ﺍﺳﺘﺨﺪﺍﻡ ‪ BASIC‬ﻣﻊ ﻇﻬﻮﺭ (‪، 1991‬‬
‫‪ Visual Basic )Microsoft‬ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ‪.‬‬

‫‪2.7.1‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﺗﻢﺗﺼﻤﻴﻢ ‪) BASIC‬ﻛﻮﺩ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺮﻣﺰﻳﺔ ﻟﺠﻤﻴﻊ ﺍﻷﻏﺮﺍﺽ ﻟﻠﻤﺒﺘﺪﺉﻴﻦ( ﻓﻲ ﺍﻷﺻﻞ ﻓﻲ ﻛﻠﻴﺔ‬
‫ﺩﺍﺭﺗﻤﻮﺙ)ﺍﻵﻥ ﺟﺎﻣﻌﺔ ﺩﺍﺭﺗﻤﻮﺙ( ﻓﻲ ﻧﻴﻮ ﻫﺎﻣﺒﺸﺎﻳﺮ ﻣﻦ ﻗﺒﻞ ﻋﺎﻟﻤﻴﻦ ﺭﻳﺎﺿﻴﻴﻦ ‪ ،‬ﺟﻮﻥ ﻛﻴﻤﻴﻨﻲ‬
‫ﻭﺗﻮﻣﺎﺱﻛﻮﺭﺗﺰ ‪ ،‬ﺍﻟﺬﻳﻦ ﻃﻮﺭﻭﺍ ‪ ،‬ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ‪ ،‬ﻣﺘﺮﺟﻤﻴﻦ ﻟﻤﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ‬
‫ﻟﻬﺠﺎﺕﻓﻮﺭﺗﺮﺍﻥ ﻭ ‪ .ALGOL 60‬ﻻ ﻳﻮﺍﺟﻪ ﻃﻼﺏ ﺍﻟﻌﻠﻮﻡ ﻋﻤﻮﻣﺎً ﺻﻌﻮﺑﺔ ﻓﻲ ﺗﻌﻠﻢ ﺃﻭ ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺗﻠﻚﺍﻟﻠﻐﺎﺕ ﻓﻲ ﺩﺭﺍﺳﺎﺗﻬﻢ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻛﺎﻧﺖ ﺩﺍﺭﺗﻤﻮﺙ ﻓﻲ ﺍﻷﺳﺎﺱ ﻣﺆﺳﺴﺔ ﻟﻠﻔﻨﻮﻥ ﺍﻟﺤﺮﺓ ‪،‬‬
‫ﺣﻴﺚﺷﻜﻞ ﻃﻼﺏ ﺍﻟﻌﻠﻮﻡ ﻭﺍﻟﻬﻨﺪﺳﺔ ﺣﻮﺍﻟﻲ ‪ 25‬ﺑﺎﻟﻤﺎﺉﺔ ﻓﻘﻂ ﻣﻦ ﻫﻴﺉﺔ ﺍﻟﻄﻼﺏ‪ .‬ﺗﻘﺮﺭ ﻓﻲ‬
‫ﺭﺑﻴﻊﻋﺎﻡ ‪ 1963‬ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﺟﺪﻳﺪﺓ ﺧﺎﺻﺔ ﻟﻄﻼﺏ ﺍﻟﻔﻨﻮﻥ ﺍﻟﺤﺮﺓ‪ .‬ﺳﺘﺴﺘﺨﺪﻡ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ‬
‫ﺍﻟﻤﺤﻄﺎﺕﻛﻄﺮﻳﻘﺔ ﻟﻠﻮﺻﻮﻝ ﺇﻟﻰ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪ .‬ﻛﺎﻧﺖ ﺃﻫﺪﺍﻑ ﺍﻟﻨﻈﺎﻡ ﻛﻤﺎ ﻳﻠﻲ‪:‬‬

‫‪.1‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﺍﻟﺘﻌﻠﻢ ﻭﺍﻻﺳﺘﺨﺪﺍﻡ ﺳﻬﻼً ﻋﻠﻰ ﺍﻟﻄﻼﺏ ﻏﻴﺮ ﺍﻟﻤﺪﺭﻛﻴﻦ‪.‬‬


‫‪.2‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ "ﻟﻄﻴﻔﺎً ﻭﻭﺩﻭﺩﺍً"‪.‬‬
‫‪.3‬ﻳﺠﺐ ﺃﻥ ﺗﻮﻓﺮ ﺗﺤﻮﻝ ﺳﺮﻳﻊ ﻟﻠﻮﺍﺟﺐ ﺍﻟﻤﻨﺰﻟﻲ‪.‬‬

‫‪.6‬ﺍﺷﺘﻤﻠﺖ ﺑﻌﺾ ﺍﻟﺤﻮﺍﺳﻴﺐ ﺍﻟﺼﻐﻴﺮﺓ ﺍﻟﻤﺒﻜﺮﺓ ﻋﻠﻰ ﻣﺘﺮﺟﻤﻴﻦ ﺃﺳﺎﺳﻴﻴﻦ ﻳﻘﻴﻤﻮﻥ ﻓﻲ ‪ 4096‬ﺑﺎﻳﺖ ﻣﻦ ﺫﺍﻛﺮﺓ ﺍﻟﻘﺮﺍءﺓ‬
‫ﻓﻘﻂ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪64‬‬

‫‪.4‬ﻳﺠﺐ ﺃﻥ ﻳﺴﻤﺢ ﺑﺎﻟﻮﺻﻮﻝ ﺍﻟﻤﺠﺎﻧﻲ ﻭﺍﻟﺨﺎﺹ‪.‬‬


‫‪.5‬ﻳﺠﺐ ﺍﻋﺘﺒﺎﺭ ﻭﻗﺖ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺃﻛﺜﺮ ﺃﻫﻤﻴﺔ ﻣﻦ ﻭﻗﺖ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪.‬‬

‫ﻛﺎﻥﺍﻟﻬﺪﻑ ﺍﻷﺧﻴﺮ ﺑﺎﻟﻔﻌﻞ ﻣﻔﻬﻮﻣﺎً ﺛﻮﺭﻳﺎً‪ .‬ﻛﺎﻥ ﻳﻌﺘﻤﺪ ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﺍﻷﻗﻞ ﻋﻠﻰ ﺍﻻﻋﺘﻘﺎﺩ ﺑﺄﻥ ﺃﺟﻬﺰﺓ‬
‫ﺍﻟﻜﻤﺒﻴﻮﺗﺮﺳﺘﺼﺒﺢ ﺃﺭﺧﺺ ﺑﻜﺜﻴﺮ ﻣﻊ ﻣﺮﻭﺭ ﺍﻟﻮﻗﺖ ‪ ،‬ﻭﻫﻮ ﻣﺎ ﻓﻌﻠﻮﻩ ﺑﺎﻟﻄﺒﻊ‪.‬‬

‫ﺃﺩﻯﺍﻟﺠﻤﻊ ﺑﻴﻦ ﺍﻷﻫﺪﺍﻑ ﺍﻟﺜﺎﻧﻴﺔ ﻭﺍﻟﺜﺎﻟﺜﺔ ﻭﺍﻟﺮﺍﺑﻌﺔ ﺇﻟﻰ ﺍﻟﺠﺎﻧﺐ ﺍﻟﻤﺸﺘﺮﻙ ﺑﺎﻟﻮﻗﺖ ﻣﻦ‬
‫‪ .BASIC‬ﻓﻘﻂ ﻣﻦ ﺧﻼﻝ ﺍﻟﻮﺻﻮﻝ ﺍﻟﻔﺮﺩﻱ ﻣﻦ ﺧﻼﻝ ﺍﻟﻤﺤﻄﺎﺕ ﻣﻦ ﻗﺒﻞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﺍﻟﻤﺘﺰﺍﻣﻨﻴﻦ ﻳﻤﻜﻦ ﺗﺤﻘﻴﻖ ﻫﺬﻩ ﺍﻷﻫﺪﺍﻑ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ‪.‬‬
‫ﻓﻲﺻﻴﻒ ﻋﺎﻡ ‪ ، 1963‬ﺑﺪﺃ ‪ Kemeny‬ﺍﻟﻌﻤﻞ ﻋﻠﻰ ﺍﻟﻤﺘﺮﺟﻢ ﻟﻠﻨﺴﺨﺔ ﺍﻷﻭﻟﻰ ﻣﻦ ‪، BASIC‬‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﺍﻟﻮﺻﻮﻝ ﻋﻦ ﺑﻌﺪ ﺇﻟﻰ ﻛﻤﺒﻴﻮﺗﺮ ‪ .GE 225‬ﺑﺪﺃ ﺗﺼﻤﻴﻢ ﻭﺗﺮﻣﻴﺰ ﻧﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ﻟـ ‪BASIC‬‬
‫ﻓﻲﺧﺮﻳﻒ ﻋﺎﻡ ‪ .1963‬ﺍﻟﺴﺎﻋﺔ ‪4:00‬‬
‫ﺃ‪.‬ﻡ‪.‬ﻓﻲ ‪ 1‬ﻣﺎﻳﻮ ‪ ، 1964‬ﺗﻤﺖ ﻛﺘﺎﺑﺔ ﻭﺗﺸﻐﻴﻞ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻷﻭﻝ ﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ ‪ BASIC‬ﺍﻟﻤﺸﺘﺮﻙ‬
‫ﺑﺎﻟﻮﻗﺖ‪.‬ﻓﻲ ﻳﻮﻧﻴﻮ ‪ ،‬ﺍﺭﺗﻔﻊ ﻋﺪﺩ ﺍﻟﻤﺤﻄﺎﺕ ﻋﻠﻰ ﺍﻟﻨﻈﺎﻡ ﺇﻟﻰ ‪ ، 11‬ﻭﺑﺤﻠﻮﻝ ﺍﻟﺨﺮﻳﻒ ﺍﺭﺗﻔﻊ ﺇﻟﻰ ‪.20‬‬

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


‫ﻛﺎﻧﺖﺍﻟﻨﺴﺨﺔ ﺍﻷﺻﻠﻴﺔ ﻣﻦ ‪ BASIC‬ﺻﻐﻴﺮﺓ ﺟﺪﺍً ‪ ،‬ﻭﺍﻟﻐﺮﻳﺐ ﺃﻧﻬﺎ ﻟﻢ ﺗﻜﻦ ﺗﻔﺎﻋﻠﻴﺔ‪ :‬ﻟﻢ ﺗﻜﻦ ﻫﻨﺎﻙ‬
‫ﻃﺮﻳﻘﺔﻟﺒﺮﻧﺎﻣﺞ ﻣﻨﻔﺬ ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰ ﺑﻴﺎﻧﺎﺕ ﺍﻹﺩﺧﺎﻝ ﻣﻦ ﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﺗﻤﺖ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﻭﺗﺼﻨﻴﻔﻬﺎﻭﺗﺸﻐﻴﻠﻬﺎ ﺑﻄﺮﻳﻘﺔ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻟﺪﻓُﻌﺎﺕ‪ .‬ﻳﺤﺘﻮﻱ ‪ BASIC‬ﺍﻷﺻﻠﻲ ﻋﻠﻰ ‪ 14‬ﻧﻮﻋﺎً‬
‫ﻣﺨﺘﻠﻔﺎًﻓﻘﻂ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻧﻮﻉ ﺑﻴﺎﻧﺎﺕ ﻭﺍﺣﺪ ‪ -‬ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ‪ .‬ﻷﻧﻪ ﻛﺎﻥ ﻳﻌُﺘﻘﺪ ﺃﻥ ﻗﻠﺔ ﻣﻦ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﺍﻟﻤﺴﺘﻬﺪﻓﻴﻦ ﺳﻴﻘﺪﺭﻭﻥ ﺍﻟﻔﺮﻕ ﺑﻴﻦ ﺃﻧﻮﺍﻉ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﻭﺃﻧﻮﺍﻉ ﺍﻟﻔﺎﺻﻠﺔ‬
‫ﺍﻟﻌﺎﺉﻤﺔ ‪،‬ﺗﻤﺖ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﻨﻮﻉ ﺑﺎﺳﻢ "ﺍﻷﺭﻗﺎﻡ"‪ .‬ﺑﺸﻜﻞ ﻋﺎﻡ ‪ ،‬ﻛﺎﻧﺖ ﻟﻐﺔ ﻣﺤﺪﻭﺩﺓ ﻟﻠﻐﺎﻳﺔ ‪،‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺳﻬﻮﻟﺔ ﺗﻌﻠﻤﻬﺎ‪.‬‬

‫‪2.7.3‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻛﺎﻥﺃﻫﻢ ﺟﺎﻧﺐ ﻓﻲ ‪ BASIC‬ﺍﻷﺻﻠﻲ ﻫﻮ ﺃﻧﻬﺎ ﻛﺎﻧﺖ ﺃﻭﻝ ﻟﻐﺔ ﻣﺴﺘﺨﺪﻣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻳﺘﻢ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻬﺎﻣﻦ ﺧﻼﻝ ﻣﺤﻄﺎﺕ ﻣﺘﺼﻠﺔ ﺑﺠﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ ﺑﻌﻴﺪ‪7.‬ﻛﺎﻧﺖ ﺍﻟﻤﺤﻄﺎﺕ ﻗﺪ ﺑﺪﺃﺕ ﻟﻠﺘﻮ‬
‫ﻓﻲﺃﻥ ﺗﻜﻮﻥ ﻣﺘﺎﺣﺔ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ‪ .‬ﻗﺒﻞ ﺫﻟﻚ ‪ ،‬ﺗﻢ ﺇﺩﺧﺎﻝ ﻣﻌﻈﻢ ﺍﻟﺒﺮﺍﻣﺞ ﻓﻲ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﺇﻣﺎﻣﻦ ﺧﻼﻝ ﺑﻄﺎﻗﺎﺕ ﻣﺜﻘﺒﺔ ﺃﻭ ﺷﺮﻳﻂ ﻭﺭﻗﻲ‪.‬‬

‫ﺟﺎءﺍﻟﻜﺜﻴﺮ ﻣﻦ ﺗﺼﻤﻴﻢ ‪ BASIC‬ﻣﻦ ‪ ، Fortran‬ﻣﻊ ﺑﻌﺾ ﺍﻟﺘﺄﺛﻴﺮ ﺍﻟﺒﺴﻴﻂ ﻣﻦ ﺑﻨﺎء ﺟﻤﻠﺔ‬


‫‪ .ALGOL60‬ﻻﺣﻘﺎً ‪ ،‬ﻧﻤﺎ ﺑﻄﺮﻕ ﻣﺘﻨﻮﻋﺔ ‪ ،‬ﻣﻊ ﺑﺬﻝ ﺍﻟﻘﻠﻴﻞ ﻣﻦ ﺍﻟﺠﻬﺪ ﺃﻭ ﺑﺪﻭﻥ ﺃﻱ ﺟﻬﺪ ﻟﺘﻮﺣﻴﺪﻩ‪.‬‬
‫ﺃﺻﺪﺭﺍﻟﻤﻌﻬﺪ ﺍﻟﻘﻮﻣﻲ ﺍﻷﻣﺮﻳﻜﻲ ﻟﻠﻤﻌﺎﻳﻴﺮ ﻣﻌﻴﺎﺭﺍً ﺃﺳﺎﺳﻴﺎً ﺃﺩﻧﻰ )‪ ANSI ، 1978‬ﺏ( ‪ ،‬ﻟﻜﻦ ﻫﺬﺍ ﻻ‬
‫ﻳﻤﺜﻞﺳﻮﻯ ﺍﻟﺤﺪ ﺍﻷﺩﻧﻰ ﻣﻦ ﻣﻴﺰﺍﺕ ﺍﻟﻠﻐﺔ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﻛﺎﻥ ‪ BASIC‬ﺍﻷﺻﻠﻲ ﻣﺸﺎﺑﻬﺎً ﺟﺪﺍً ﻟـ‬
‫‪.Minimal BASIC‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻗﺪ ﻳﺒﺪﻭ ﻣﻔﺎﺟﺉﺎً ‪ ،‬ﻓﻘﺪ ﺍﺳﺘﺨﺪﻣﺖ ﺷﺮﻛﺔ ‪Equipment Corporation‬‬


‫‪ Digital‬ﻧﺴﺨﺔ ﻣﻌﻘﺪﺓ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﻣﻦ ‪ BASIC‬ﺗﺴﻤﻰ ‪ BASIC-PLUS‬ﻟﻜﺘﺎﺑﺔ ﻣﻬﻤﺔ‬

‫‪.7‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ‪ LISP‬ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ﻣﻦ ﺧﻼﻝ ﺍﻟﻤﺤﻄﺎﺕ ﺍﻟﻄﺮﻓﻴﺔ ‪ ،‬ﻭﻟﻜﻦ ﻟﻢ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ‪.‬‬
‫‪65‬‬ ‫‪2.7‬ﺑﺪﺍﻳﺎﺕ ﺗﻘﺎﺳﻢ ﺍﻟﻮﻗﺖ‪ :‬ﺃﺳﺎﺳﻲ‬

‫ﺃﺟﺰﺍءﻣﻦ ﺃﻛﺒﺮ ﻧﻈﺎﻡ ﺗﺸﻐﻴﻞ ﺧﺎﺹ ﺑﻬﺎ ﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺼﻐﻴﺮﺓ ‪ ، PDP-11 ، RSTS‬ﻓﻲ‬
‫ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ‪.‬‬
‫ﺗﻢﺍﻧﺘﻘﺎﺩ ‪ BASIC‬ﻟﻀﻌﻒ ﺑﻨﻴﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﻓﻴﻬﺎ ‪ ،‬ﻣﻦ ﺑﻴﻦ ﺃﻣﻮﺭ ﺃﺧﺮﻯ‪ .‬ﻭﻓﻘﺎً ﻟﻤﻌﺎﻳﻴﺮ‬
‫ﺍﻟﺘﻘﻴﻴﻢﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻓﻲ ﺍﻟﻔﺼﻞ ﺍﻷﻭﻝ ‪ ،‬ﻭﺗﺤﺪﻳﺪﺍ ًﻗﺎﺑﻠﻴﺔ ﺍﻟﻘﺮﺍءﺓ ﻭﺍﻟﻤﻮﺛﻮﻗﻴﺔ ‪ ،‬ﻓﺈﻥ‬
‫ﺍﻟﻠﻐﺔﺗﻌﻤﻞ ﺑﺎﻟﻔﻌﻞ ﺑﺸﻜﻞ ﺳﻲء ﻟﻠﻐﺎﻳﺔ‪ .‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﻘﺪﻳﻤﺔ ﻣﻦ ﺍﻟﻠﻐﺔ ﻟﻢ ﺗﻜﻦ‬
‫ﻣﺨﺼﺼﺔﻭﻻ ﻳﻨﺒﻐﻲ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﺠﺎﺩﺓ ﻣﻦ ﺃﻱ ﺣﺠﻢ ﻛﺒﻴﺮ‪ .‬ﺗﻌﺪ ﺍﻹﺻﺪﺍﺭﺍﺕ ﺍﻟﻼﺣﻘﺔ‬
‫ﺃﻛﺜﺮﻣﻼءﻣﺔ ﻟﻤﺜﻞ ﻫﺬﻩ ﺍﻟﻤﻬﺎﻡ‪.‬‬

‫ﻛﺎﻥﻇﻬﻮﺭ ‪ BASIC‬ﻓﻲ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ﻣﺪﻓﻮﻋﺎ ًﺑﻈﻬﻮﺭ (‪ .Visual BASIC )VB‬ﺃﺻﺒﺢ ‪VB‬‬


‫ﻣﺴﺘﺨﺪﻣﺎًﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻷﻧﻪ ﻳﻮﻓﺮ ﻃﺮﻳﻘﺔ ﺑﺴﻴﻄﺔ ﻟﺒﻨﺎء ﻭﺍﺟﻬﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺮﺳﻮﻣﻴﺔ‬
‫)‪ ، (GUIs‬ﻭﻣﻦ ﻫﻨﺎ ﺟﺎء ﺍﺳﻢ ‪ ، Visual BASIC. Visual Basic .NET‬ﺃﻭ ‪ VB.NET‬ﻓﻘﻂ ‪ ،‬ﻫﻲ‬
‫ﺇﺣﺪﻯﻟﻐﺎﺕ ‪ .Microsoft .NET‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻳﻌﺪ ﺧﺮﻭﺟﺎً ﻛﺒﻴﺮﺍً ﻋﻦ ‪ ، VB‬ﺇﻻ ﺃﻧﻪ ﺳﺮﻋﺎﻥ‬
‫ﻣﺎﺃﺯﺍﺡ ﺍﻟﻠﻐﺔ ﺍﻟﻘﺪﻳﻤﺔ‪ .‬ﺭﺑﻤﺎ ﻳﻜﻮﻥ ﺍﻻﺧﺘﻼﻑ ﺍﻷﻛﺜﺮ ﺃﻫﻤﻴﺔ ﺑﻴﻦ ‪ VB‬ﻭ ‪ VB.NET‬ﻫﻮ ﺃﻥ ‪VB.NET‬‬
‫ﻳﺪﻋﻢﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﺑﺸﻜﻞ ﻛﺎﻣﻞ‪.‬‬

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

‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔﺑﺮﻧﺎﻣﺞﺍﻟﻤﺜﺎﻝ ﺍﻷﺳﺎﺳﻲ‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، listlen ،‬ﺣﻴﺚ ‪ listlen‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺔ ﺑﻘﻴﻢ ﻋﺪﺩ‬ ‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔﻣﺪﺧﻞ‪:‬‬
‫ﺻﺤﻴﺢ‪ listlen‬ﺍﻹﺧﺮﺍﺝ‪ :‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻷﻛﺒﺮ‬ ‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔ‬

‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔ‬

‫ﻣﻦﻣﺘﻮﺳﻂ ﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ‬ ‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔ‬

‫ﻗﺎﺉﻤﺔ (‪DIM )99‬‬


‫ﺍﻟﻨﺘﻴﺠﺔ= ‪0‬‬
‫ﺍﻟﻤﺠﻤﻮﻉ= ‪0‬‬
‫‪INPUT listlen‬‬
‫ﺇﺫﺍ‪ listlen< 0 AND listlen >100‬ﺛﻢ ‪REM‬‬
‫ﻗﺮﺍءﺓﺍﻟﻤﺪﺧﻼﺕ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﻣﺠﻤﻮﻉ ﺍﻟﻌﺪﺍﺩ = ‪TO listlen 1‬‬

‫(ﻋﺪﺍﺩ) ‪INPUT intlist‬‬


‫‪= sum + intlist )counter( NEXT counter‬‬
‫‪sum‬‬
‫ﻣﺘﻮﺳﻂ‬ ‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔﺍﺣﺴﺐﺍﻝ‬
‫ﺍﻟﻤﺘﻮﺳﻂ= ‪sum / listlen‬‬
‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔﺣﺴﺎﺏﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﻫﻲ< ﻣﺘﻮﺳﻂ ﻟﻠﻌﺪﺍﺩ = ‪TO listlen 1‬‬

‫ﺇﺫﺍ‪) intlist‬ﻋﺪﺍﺩ(< ﻣﺘﻮﺳﻂ‬


‫ﺛﻢﺍﻟﻨﺘﻴﺠﺔ = ﺍﻟﻨﺘﻴﺠﺔ ‪ 1 +‬ﺍﻟﻌﺪﺍﺩ ﺍﻟﺘﺎﻟﻲ‬

‫ﺣﺮﻛﺔﺍﻟﻌﻴﻦ ﺍﻟﺴﺮﻳﻌﺔﺍﻃﺒﻊﺍﻟﻨﺘﻴﺠﺔ‬
‫ﺍﻃﺒﻊ"ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ‪":‬؛‬
‫ﻧﺘﻴﺠﺔ‬
‫ﺁﺧﺮ‬
‫ﺍﻃﺒﻊ"ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ" ‪END IF‬‬

‫ﻧﻬﺎﻳﺔ‬
‫ﻣﻘﺎﺑﻠﺔ‬

‫ﺗﺼﻤﻴﻢﺍﻟﻤﺴﺘﺨﺪﻡ ﻭﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‬


‫ﺍﻻﻧﻜﻮﺑﺮ‬
‫ﺍﻟﻤﺆﻟﻒﺍﻷﻛﺜﺮ ﻣﺒﻴﻌﺎً ﻟـﺣﻮﻝ ﺍﻟﻮﺟﻪ‪ :‬ﺃﺳﺎﺳﻴﺎﺕ ﺗﺼﻤﻴﻢ ﻭﺍﺟﻬﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪،‬ﻛﺎﻥ ﻟـ ‪Alan Cooper‬‬
‫ﺃﻳﻀﺎًﺩﻭﺭ ﻛﺒﻴﺮ ﻓﻲ ﺗﺼﻤﻴﻢ ﻣﺎ ﻳﻤﻜﻦ ﻭﺻﻔﻪ ﺑﺄﻧﻪ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺍﻫﺘﻤﺎﻣﺎً ﺑﺘﺼﻤﻴﻢ ﻭﺍﺟﻬﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪،‬‬
‫‪ .Visual Basic‬ﺑﺎﻟﻨﺴﺒﺔ ﻟﻪ ‪ ،‬ﺍﻷﻣﺮ ﻛﻠﻪ ﻳﺘﻌﻠﻖ ﺑﺮﺅﻳﺔ ﻹﺿﻔﺎء ﺍﻟﻄﺎﺑﻊ ﺍﻹﻧﺴﺎﻧﻲ ﻋﻠﻰ ﺍﻟﺘﻜﻨﻮﻟﻮﺟﻴﺎ‪.‬‬

‫ﻛﺎﻥ‪ MSDOS.exe‬ﻫﻮ ﺑﺮﻧﺎﻣﺞ ‪ shell‬ﻟﻺﺻﺪﺍﺭﺍﺕ ﺍﻟﻘﻠﻴﻠﺔ ﺍﻷﻭﻟﻰ‬ ‫ﺑﻌﺾﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﻋﻦ ﺍﻷﺳﺎﺳﻴﺎﺕ‬


‫ﻣﻦ‪ .Windows‬ﻟﻘﺪ ﻛﺎﻥ ﺑﺮﻧﺎﻣﺠﺎً ﻓﻈﻴﻌﺎً ‪ ،‬ﻭﺃﻋﺘﻘﺪ ﺃﻧﻪ ﻳﻤﻜﻦ‬
‫ﺗﺤﺴﻴﻨﻪﺑﺸﻜﻞ ﻛﺒﻴﺮ ‪ ،‬ﻭﻛﻨﺖ ﺍﻟﺸﺨﺺ ﺍﻟﺬﻱ ﻳﻘﻮﻡ ﺑﺬﻟﻚ‪ .‬ﻓﻲ‬ ‫ﻛﻴﻒﺑﺪﺃﺕ ﻓﻲ ﻛﻞ ﻫﺬﺍ؟ﺃﻧﺎ ﻣﻨﺘﺸﻲ‬
‫ﻭﻗﺖﻓﺮﺍﻏﻲ ‪ ،‬ﺑﺪﺃﺕ ﻋﻠﻰ ﺍﻟﻔﻮﺭ ﻓﻲ ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﺷﻞ ﺃﻓﻀﻞ ﻣﻦ‬ ‫ﺍﻟﺘﺴﺮﺏﻣﻦ ﺍﻟﻤﺪﺭﺳﺔ ﻣﻊ ﺷﻬﺎﺩﺓ ﺟﺎﻣﻌﻴﺔ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ ﻣﻦ ﻛﻠﻴﺔ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﺍﻟﺬﻱ ﺟﺎء ﺑﻪ ‪ .Windows‬ﺃﺳﻤﻴﺘﻪ ﺗﺮﺍﻳﺒﻮﺩ‪ .‬ﻛﺎﻧﺖ ﻗﺬﻳﻔﺔ‬ ‫ﻣﺠﺘﻤﻊﺑﻜﺎﻟﻴﻔﻮﺭﻧﻴﺎ‪ .‬ﻛﺎﻧﺖ ﻭﻇﻴﻔﺘﻲ ﺍﻷﻭﻟﻰ ﻛﻤﺒﺮﻣﺞ ﻟﺸﺮﻛﺔ ‪Lines‬‬
‫‪ Microsoft‬ﺍﻷﺻﻠﻴﺔ ‪ ، MSDOS.exe ،‬ﺇﺣﺪﻯ ﺍﻟﻌﻘﺒﺎﺕ‬ ‫‪) American President‬ﺇﺣﺪﻯ ﺃﻗﺪﻡ ﺷﺮﻛﺎﺕ ﺍﻟﻨﻘﻞ ﺍﻟﺒﺤﺮﻱ ﻓﻲ‬
‫ﺍﻟﺮﺉﻴﺴﻴﺔﺃﻣﺎﻡ ﺍﻟﻨﺠﺎﺡ ﺍﻷﻭﻟﻲ ﻟﻨﻈﺎﻡ ﺍﻟﺘﺸﻐﻴﻞ ‪.Windows‬‬ ‫ﺍﻟﻮﻻﻳﺎﺕﺍﻟﻤﺘﺤﺪﺓ( ﻓﻲ ﺳﺎﻥ ﻓﺮﺍﻧﺴﻴﺴﻜﻮ‪ .‬ﺑﺎﺳﺘﺜﻨﺎء ﺑﻀﻌﺔ ﺃﺷﻬﺮ‬
‫ﺣﺎﻭﻝﺛﻼﺛﻲ ﺍﻟﻘﻮﺍﺉﻢ ﺣﻞ ﺍﻟﻤﺸﻜﻠﺔ ﻣﻦ ﺧﻼﻝ ﺳﻬﻮﻟﺔ ﺍﺳﺘﺨﺪﺍﻣﻪ‬ ‫ﻫﻨﺎﻭﻫﻨﺎﻙ ‪ ،‬ﻇﻠﻠﺖ ﺃﻋﻤﻞ ﻟﺤﺴﺎﺑﻲ ﺍﻟﺨﺎﺹ‪.‬‬
‫ﻭﺗﻜﻮﻳﻨﻪ‪.‬‬

‫ﻣﺎﻫﻲ ﻭﻇﻴﻔﺘﻚ ﺍﻟﺤﺎﻟﻴﺔ؟ﺍﻟﻤﺆﺳﺲ ﻭﺭﺉﻴﺲ ﻣﺠﻠﺲ ﺍﻹﺩﺍﺭﺓ‬


‫ﻣﺘﻰﻛﺎﻥ ﺫﻟﻚ "ﺁﻫﺎ!" ﻟﺤﻈﺔ؟ﻟﻢ ﻳﻜﻦ ﺣﺘﻰ‬ ‫ﻛﻮﺑﺮ ‪،‬ﺍﻟﺸﺮﻛﺔ ﺍﻟﺘﻲ ﺗﻀﻔﻲ ﺍﻟﻄﺎﺑﻊ ﺍﻟﺒﺸﺮﻱ ﻋﻠﻰ ﺍﻟﺘﻜﻨﻮﻟﻮﺟﻴﺎ‬
‫ﻓﻲﺃﻭﺍﺧﺮ ﻋﺎﻡ ‪ ، 1987‬ﻋﻨﺪﻣﺎ ﻛﻨﺖ ﺃﺟﺮﻱ ﻣﻘﺎﺑﻠﺔ ﻣﻊ ﻋﻤﻴﻞ ﺷﺮﻛﺔ ‪،‬‬ ‫)‪.(www.cooper.com‬‬
‫ﺑﺮﺯﺕﺍﺳﺘﺮﺍﺗﻴﺠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻟﺘﺮﺍﻳﺒﻮﺩ ﻓﻲ ﺭﺃﺳﻲ‪ .‬ﻛﻤﺎ‬
‫ﻣﺎﻫﻲ ﺃﻭ ﻛﺎﻧﺖ ﻭﻇﻴﻔﺘﻚ ﺍﻟﻤﻔﻀﻠﺔ؟ﺗﻔﺎﻋﻞ‬
‫ﺃﻭﺿﺢﻟﻲ ﻣﺪﻳﺮ ‪ IS‬ﺣﺎﺟﺘﻪ ﺇﻟﻰ ﺇﻧﺸﺎء ﻭﻧﺸﺮ ﻣﺠﻤﻮﻋﺔ ﻭﺍﺳﻌﺔ ﻣﻦ‬
‫ﺍﺳﺘﺸﺎﺭﻱﺍﻟﺘﺼﻤﻴﻢ‪.‬‬
‫ﺣﻠﻮﻝﺍﻟﺼﺪﻓﺔ ﻟﻘﺎﻋﺪﺓ ﻣﺴﺘﺨﺪﻣﻴﻪ ﺍﻟﻤﺘﺒﺎﻳﻨﺔ ‪ ،‬ﺃﺩﺭﻛﺖ ﺍﻟﻠﻐﺰ‬
‫ﺍﻟﻤﺘﻤﺜﻞﻓﻲ ﻋﺪﻡ ﻭﺟﻮﺩ ﺷﻲء ﻣﺜﻞ ﺍﻟﺼﺪﻓﺔ ﺍﻟﻤﺜﺎﻟﻴﺔ‪ .‬ﺳﻴﺤﺘﺎﺝ ﻛﻞ‬ ‫ﺃﻧﺖﻣﻌﺮﻭﻑ ﺟﻴﺪﺍً ﻓﻲ ﻣﺠﺎﻻﺕ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻭﺗﺼﻤﻴﻢ‬
‫ﻣﺴﺘﺨﺪﻡﺇﻟﻰ ﻏﻼﻑ ﺷﺨﺼﻲ ﺧﺎﺹ ﺑﻪ ‪ ،‬ﺗﻢ ﺗﻜﻮﻳﻨﻪ ﻭﻓﻘﺎً‬ ‫ﻭﺍﺟﻬﺔﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﺃﻱ ﺃﻓﻜﺎﺭ ﺣﻮﻝ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺎﺕ ﻣﻘﺎﺑﻞ‬
‫ﻻﺣﺘﻴﺎﺟﺎﺗﻪﻭﻣﺴﺘﻮﻳﺎﺕ ﻣﻬﺎﺭﺗﻪ‪ .‬ﻓﻲ ﻟﺤﻈﺔ ‪ ،‬ﺃﺩﺭﻛﺖ ﺍﻟﺤﻞ ﻟﻤﺸﻜﻠﺔ‬ ‫ﺗﺼﻤﻴﻢﺍﻟﺒﺮﺍﻣﺞ ﻣﻘﺎﺑﻞ ﺗﺼﻤﻴﻢ ﺃﻱ ﺷﻲء ﺁﺧﺮ؟ﺇﻧﻪ‬
‫ﺗﺼﻤﻴﻢﺍﻟﻘﺸﺮﺓ‪ :‬ﺳﺘﻜﻮﻥ ﻣﺠﻤﻮﻋﺔ ﺑﻨﺎء ﻗﺸﺮﺓ ؛ ﺃﺩﺍﺓ ﻳﻤﻜﻦ ﻟﻜﻞ‬
‫ﻣﺴﺘﺨﺪﻡﻣﻦ ﺧﻼﻟﻬﺎ ﺇﻧﺸﺎء ﺍﻟﺼﺪﻓﺔ ﺍﻟﺘﻲ ﻳﺤﺘﺎﺟﻬﺎ ﺑﺎﻟﻀﺒﻂ ﻟﻤﺰﻳﺞ‬ ‫ﺇﻟﻰﺣﺪ ﻛﺒﻴﺮ ﻧﻔﺲ ﺍﻟﺸﻲء ﻓﻲ ﻋﺎﻟﻢ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ‪ :‬ﺗﻌﺮﻑ ﻋﻠﻰ ﺍﻟﻤﺴﺘﺨﺪﻡ‬
‫ﻓﺮﻳﺪﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﻭﺍﻟﺘﺪﺭﻳﺐ‪.‬‬ ‫ﺍﻟﺨﺎﺹﺑﻚ‪.‬‬

‫ﺣﻮﻝﻫﺬﺍ ﺍﻹﺻﺪﺍﺭ ﺍﻟﻤﺒﻜﺮ ﻟـ ‪WINDOWS‬‬


‫ﻣﺎﺍﻟﻤﻘﻨﻊ ﻓﻲ ﻓﻜﺮﺓ ﺍﻟﻘﺸﺮﺓ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺗﺨﺼﻴﺼﻬﺎ‬ ‫ﻓﻲﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﻤﺎﺿﻲ ‪ ،‬ﺑﺪﺃﺕ ﻓﻲ ﺍﺳﺘﺨﺪﺍﻡ‬
‫ﺑﺸﻜﻞﻓﺮﺩﻱ؟ﺑﺪﻻ ﻣﻦ ﺃﻥ ﺃﻗﻮﻝ‬ ‫‪ Windows‬ﻭﺗﺤﺪﺛﺖ ﻋﻦ ﺍﺳﺘﺪﺭﺍﺟﻚ ﻣﻦ ﺧﻼﻝ ﻣﺰﺍﻳﺎﻫﺎ‪:‬‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﻣﺎ ﻛﺎﻧﺖ ﻋﻠﻴﻪ ﺍﻟﺼﺪﻓﺔ ﺍﻟﻤﺜﺎﻟﻴﺔ ‪ ،‬ﻳﻤﻜﻨﻬﻢ ﺗﺼﻤﻴﻢ‬ ‫ﺩﻋﻢﻭﺍﺟﻬﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺮﺳﻮﻣﻴﺔ ﻭﺍﻟﻤﻜﺘﺒﺔ ﺍﻟﻤﺮﺗﺒﻄﺔ‬
‫ﻏﻼﻓﻬﻢﺍﻟﻤﺜﺎﻟﻲ ﺍﻟﻤﺨﺼﺺ‪ .‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻏﻼﻑ ﻗﺎﺑﻞ ﻟﻠﺘﺨﺼﻴﺺ ‪،‬‬ ‫ﺩﻳﻨﺎﻣﻴﻜﻴﺎًﺍﻟﺘﻲ ﺗﺘﻴﺢ ﻟﻚ ﺇﻧﺸﺎء ﺍﻷﺩﻭﺍﺕ ﺍﻟﺘﻲ ﺗﻬﻴﺊ‬
‫ﻳﻤﻜﻦﻟﻠﻤﺒﺮﻣﺞ ﺇﻧﺸﺎء ﻏﻼﻑ ﻗﻮﻱ ﻭﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻭﻟﻜﻨﻪ ﺃﻳﻀﺎً‬ ‫ﻧﻔﺴﻬﺎﺑﻨﻔﺴﻬﺎ‪ .‬ﻣﺎﺫﺍ ﻋﻦ ﺃﺟﺰﺍء ‪ Windows‬ﺍﻟﺘﻲ‬
‫ﺧﻄﻴﺮﺇﻟﻰ ﺣﺪ ﻣﺎ ‪ ،‬ﻓﻲ ﺣﻴﻦ ﺃﻥ ﻣﺪﻳﺮ ﺗﻜﻨﻮﻟﻮﺟﻴﺎ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﻳﻤﻜﻦ‬ ‫ﺳﺎﻋﺪﺕﻓﻲ ﺗﺸﻜﻴﻠﻬﺎ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ؟ﺍﻧﺎ ﻛﻨﺖ‬
‫ﺃﻥﻳﻨُﺸﺊ ﻏﻼﻓﺎً ﻳﻤﻜﻦ ﺃﻥ ﻳﻌُﻄﻰ ﻟﻤﻮﻇﻒ ﻣﻜﺘﺐ ﻳﻜﺸﻒ ﻓﻘﻂ‬ ‫ﺃﻋﺠﺐﺟﺪﺍً ﺑﺈﺩﺭﺍﺝ ‪ Microsoft‬ﺩﻋﻤﺎً ﻟﺘﻌﺪﺩ ﺍﻟﻤﻬﺎﻡ ﺍﻟﻌﻤﻠﻲ ﻓﻲ‬
‫ﺗﻠﻚﺍﻷﺩﻭﺍﺕ ﺍﻟﻘﻠﻴﻠﺔ ﺍﻟﺨﺎﺻﺔ ﺑﺎﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﺘﻲ ﻳﺴﺘﺨﺪﻣﻬﺎ‬ ‫‪ ، Windows‬ﻭﺷﻤﻞ ﺫﻟﻚ ﺍﻟﻨﻘﻞ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﻭﺍﻻﺗﺼﺎﻻﺕ ﺑﻴﻦ‬
‫ﺍﻟﻤﻮﻇﻒﻣﺴﺘﺨﺪﻡ‪.‬‬ ‫ﺍﻟﻌﻤﻠﻴﺎﺕ‪.‬‬

‫‪66‬‬
‫ﻛﺎﻥ‪ MSDOS.exe‬ﻫﻮ ﺑﺮﻧﺎﻣﺞ ‪ shell‬ﻟﻺﺻﺪﺍﺭﺍﺕ‬ ‫"‬ ‫ﻛﻴﻒﺍﻧﺘﻘﻠﺖ ﻣﻦ ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ‬
‫ﺷﻞﺇﻟﻰ ﺍﻟﺘﻌﺎﻭﻥ ﻣﻊ ‪Microsoft‬؟‬
‫ﺍﻟﻘﻠﻴﻠﺔﺍﻷﻭﻟﻰ ﻣﻦ ‪ .Windows‬ﻟﻘﺪ ﻛﺎﻥ ﺑﺮﻧﺎﻣﺠﺎً ﻓﻈﻴﻌﺎً ‪،‬‬
‫ﺣﺎﻣﻞﺛﻼﺛﻲ ﺍﻟﻘﻮﺍﺉﻢ‬
‫ﻭﺃﻋﺘﻘﺪﺃﻧﻪ ﻳﻤﻜﻦ ﺗﺤﺴﻴﻨﻪ ﺑﺸﻜﻞ ﻛﺒﻴﺮ ‪ ،‬ﻭﻛﻨﺖ ﺍﻟﺸﺨﺺ‬ ‫ﻭﺭﻭﺑﻲﻫﻤﺎ ﻧﻔﺲ ﺍﻟﺸﻲء‪ .‬ﺑﻌﺪ ﺃﻥ‬
‫ﺍﻟﺬﻱﻳﻘﻮﻡ ﺑﺬﻟﻚ‪ .‬ﻓﻲ ﻭﻗﺖ ﻓﺮﺍﻏﻲ ‪ ،‬ﺑﺪﺃﺕ ﻋﻠﻰ ﺍﻟﻔﻮﺭ ﻓﻲ‬ ‫ﻭﻗﻌﺖﺻﻔﻘﺔ ﻣﻊ ﺑﻴﻞ ﺟﻴﺘﺲ ‪،‬‬
‫ﻗﻤﺖﺑﺘﻐﻴﻴﺮ ﺍﺳﻢ ﺍﻟﻨﻤﻮﺫﺝ ﺍﻷﻭﻟﻲ ﻣﻦ‬
‫ﻛﺘﺎﺑﺔﺑﺮﻧﺎﻣﺞ ﺷﻞ ﺃﻓﻀﻞ ﻣﻦ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﺬﻱ ﺟﺎء ﺑﻪ‬
‫‪.Windows‬‬ ‫"‬ ‫ﺗﺮﺍﻳﺒﻮﺩﺇﻟﻰ ﺭﻭﺑﻲ‪ .‬ﺛﻢ ﺍﺳﺘﺨﺪﻣﺖ‬
‫ﻧﻤﻮﺫﺝﺭﻭﺑﻲ ﻛﻨﻤﺎﺫﺝ ﺃﻭﻟﻴﺔ ﻳﺠﺐ‬
‫ﺍﺳﺘﺨﺪﺍﻣﻬﺎ‪:‬ﻛﻨﻤﻮﺫﺝ ﻳﻤﻜﻦ ﺍﻟﺘﺨﻠﺺ‬
‫ﻣﻨﻪﻟﺒﻨﺎء ﺟﻮﺩﺓ ﺍﻹﺻﺪﺍﺭ‬

‫ﻟﻤﺎﺫﺍﻳﺴﻤﻮﻧﻚ "ﺃﺑﻮ ﺍﻟﺒﺼﺮﻳﺎﺕ‬ ‫ﺷﻔﺮﺓ‪.‬ﻭﻫﻮ ﻣﺎ ﻓﻌﻠﺘﻪ‪ .‬ﺃﺧﺬﺕ ‪ MS‬ﻧﺴﺨﺔ ﺍﻹﺻﺪﺍﺭ ﻣﻦ ‪Ruby‬‬


‫ﺃﺳﺎﺳﻲ"؟ﺟﺎء ﺭﻭﺑﻲ ﺑﻠﻐﺔ ﺻﻐﻴﺮﺓ ‪ ،‬ﻟﻐﺔ ﻣﻨﺎﺳﺒﺔ ﻓﻘﻂ ﻟﺘﻨﻔﻴﺬ‬ ‫ﻭﺃﺿﻔﺖ‪ QuickBASIC‬ﺇﻟﻴﻬﺎ ‪ ،‬ﻣﻤﺎ ﺃﺩﻯ ﺇﻟﻰ ﺇﻧﺸﺎء ‪ .VB‬ﻛﻞ ﺗﻠﻚ‬
‫ﻋﺸﺮﺍﺕﺍﻷﻭﺍﻣﺮ ﺍﻟﺒﺴﻴﻄﺔ ﺍﻟﺘﻲ ﻳﺤﺘﺎﺟﻬﺎ ﺑﺮﻧﺎﻣﺞ ﺷﻞ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪،‬‬ ‫ﺍﻻﺑﺘﻜﺎﺭﺍﺕﺍﻷﺻﻠﻴﺔ ﻛﺎﻧﺖ ﻓﻲ ﺗﺮﺍﻳﺒﻮﺩ ‪ /‬ﺭﻭﺑﻲ‪.‬‬
‫ﺗﻢﺗﻨﻔﻴﺬ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﻛﺴﻠﺴﻠﺔ ﻣﻦ ﻣﻜﺘﺒﺎﺕ ‪ ، DLL‬ﺃﻱ ﻋﺪﺩ ﻣﻨﻬﺎ‬
‫ﻳﻤﻜﻦﺗﺜﺒﻴﺘﻪ ﻓﻲ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ‪ .‬ﻳﻘﻮﻡ ﺍﻟﻤﺤﻠﻞ ﺍﻟﻠﻐﻮﻱ ﺍﻟﺪﺍﺧﻠﻲ‬ ‫ﻛﺤﺎﺿﻨﺔﻟﻸﺳﺎﺳﻴﺎﺕ ﺍﻟﻤﺮﺉﻴﺔ ‪RUBY‬‬
‫ﺑﺘﺤﺪﻳﺪﺍﻟﻔﻌﻞ ﺛﻢ ﺗﻤﺮﻳﺮﻩ ﻋﻠﻰ ﻃﻮﻝ ﺳﻠﺴﻠﺔ ﻣﻜﺘﺒﺎﺕ ‪ DLL‬ﺣﺘﻰ‬ ‫ﺩﻋﻨﺎﻧﻌﻴﺪ ﺍﻟﻨﻈﺮ ﻓﻲ ﺍﻫﺘﻤﺎﻣﻚ ﺑﺈﺻﺪﺍﺭﺍﺕ ‪ Windows‬ﻭ‬
‫ﻳﺪﺭﻙﺃﺣﺪﻫﻢ ﺃﻧﻪ ﻳﻌﺮﻑ ﻛﻴﻔﻴﺔ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻔﻌﻞ‪ .‬ﺇﺫﺍ ﺗﻢ ﺗﻤﺮﻳﺮ ﻛﺎﻓﺔ‬ ‫ﺃﻥﻣﻴﺰﺓ ‪.DLL‬ﻟﻢ ﻳﻜﻦ ‪ DLL‬ﺷﻴﺉﺎً ‪ ،‬ﻟﻘﺪ ﻛﺎﻥ ﻣﻨﺸﺄﺓ ﻓﻲ ﻧﻈﺎﻡ‬
‫ﻣﻜﺘﺒﺎﺕ‪ ، DLL‬ﻓﻘﺪ ﺣﺪﺙ ﺧﻄﺄ ﻓﻲ ﺑﻨﺎء ﺍﻟﺠﻤﻠﺔ‪ .‬ﻣﻨﺬ ﻣﻨﺎﻗﺸﺎﺗﻨﺎ‬ ‫ﺍﻟﺘﺸﻐﻴﻞ‪.‬ﻟﻘﺪ ﺳﻤﺢ ﻟﻠﻤﺒﺮﻣﺞ ﺑﺒﻨﺎء ﻛﺎﺉﻨﺎﺕ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ‬
‫ﺍﻷﻭﻟﻰ ‪،‬ﺍﺳﺘﻤﺘﻌﺖ ﺃﻧﺎ ﻭﻣﺎﻳﻜﺮﻭﺳﻮﻓﺖ ﺑﻔﻜﺮﺓ ﺗﻨﻤﻴﺔ ﺍﻟﻠﻐﺔ ‪ ،‬ﻭﺭﺑﻤﺎ‬ ‫ﺍﻟﺒﺮﻣﺠﻴﺔﺍﻟﺘﻲ ﻳﻤﻜﻦ ﺭﺑﻄﻬﺎ ﻓﻲ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ ﺑﺪﻻ ًﻣﻦ ﻭﻗﺖ‬
‫ﺣﺘﻰﺍﺳﺘﺒﺪﺍﻟﻬﺎ ﻛﻠﻴﺎً ﺑﻠﻐﺔ "ﺣﻘﻴﻘﻴﺔ"‪ .‬ﻛﺎﻥ ‪ C‬ﻫﻮ ﺍﻟﻤﺮﺷﺢ ﺍﻷﻛﺜﺮ‬ ‫ﺍﻟﺘﺮﺟﻤﺔﻓﻘﻂ ‪ ،‬ﻭﻫﺬﺍ ﻣﺎ ﺳﻤﺢ ﻟﻲ ﺑﺎﺧﺘﺮﺍﻉ ﺍﻷﺟﺰﺍء ﺍﻟﻘﺎﺑﻠﺔ‬
‫ﺫﻛﺮﺍً ‪،‬ﻭﻟﻜﻦ ﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ‪ ،‬ﺍﺳﺘﻔﺎﺩﺕ ‪ Microsoft‬ﻣﻦ ﻫﺬﻩ ﺍﻟﻮﺍﺟﻬﺔ‬ ‫ﻟﻠﺘﻮﺳﻴﻊﺩﻳﻨﺎﻣﻴﻜﻴﺎً ﻣﻦ ‪ ، VB‬ﺣﻴﺚ ﻳﻤﻜﻦ ﺇﺿﺎﻓﺔ ﻋﻨﺎﺻﺮ ﺍﻟﺘﺤﻜﻢ‬
‫ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔﻟﻔﺼﻞ ﻟﻐﺔ ‪ shell‬ﺍﻟﺼﻐﻴﺮﺓ ﻭﺍﺳﺘﺒﺪﺍﻟﻬﺎ ﺑﺎﻟﻜﺎﻣﻞ ﺑـ‬ ‫ﻣﻦﻗﺒﻞ ﺍﻟﺒﺎﺉﻌﻴﻦ ﺍﻟﺨﺎﺭﺟﻴﻴﻦ‪.‬‬
‫‪.Quick-BASIC‬‬ ‫ﺟﺴﺪﻣﻨﺘﺞ ‪ Ruby‬ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻄﻮﺭﺍﺕ ﺍﻟﻤﻬﻤﺔ ﻓﻲ ﺗﺼﻤﻴﻢ‬
‫ﺍﻟﺒﺮﺍﻣﺞ ‪،‬ﻟﻜﻦ ﺍﺛﻨﺘﻴﻦ ﻣﻨﻬﻤﺎ ﺑﺮﺯﺗﺎ ﻋﻠﻰ ﺃﻧﻬﻤﺎ ﻧﺎﺟﺤﺎﻥ ﺑﺸﻜﻞ‬
‫ﺍﺳﺘﺜﻨﺎﺉﻲ‪.‬ﻛﻤﺎ ﺫﻛﺮﺕ ‪ ،‬ﻛﺎﻧﺖ ﻗﺪﺭﺓ ﺍﻟﺮﺑﻂ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﻟـ‬
‫‪ Windows‬ﺗﺜﻴﺮ ﺍﻫﺘﻤﺎﻣﻲ ﺩﺍﺉﻤﺎً ‪ ،‬ﻭﻟﻜﻦ ﺍﻣﺘﻼﻙ ﺍﻷﺩﻭﺍﺕ‬
‫ﻭﻣﻌﺮﻓﺔﻣﺎ ﻳﺠﺐ ﻓﻌﻠﻪ ﺑﻬﺎ ﻛﺎﻧﺎ ﺷﻴﺉﺎﻥ ﻣﺨﺘﻠﻔﺎﻥ‪ .‬ﻣﻊ ‪، Ruby‬‬
‫ﻭﺟﺪﺕﺃﺧﻴﺮﺍً ﺍﺳﺘﺨﺪﺍﻣﻴﻦ ﻋﻤﻠﻴﻴﻦ ﻟﻠﺮﺑﻂ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ‪ ،‬ﻭﺍﺣﺘﻮﻯ‬
‫ﺍﻟﺒﺮﻧﺎﻣﺞﺍﻷﺻﻠﻲ ﻋﻠﻰ ﻛﻠﻴﻬﻤﺎ‪ .‬ﺃﻭﻻ ً‪ ،‬ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﻗﺎﺑﻠﺔ ﻟﻠﺘﺜﺒﻴﺖ‬
‫ﻭﻳﻤﻜﻦﺗﻤﺪﻳﺪﻫﺎ ﺩﻳﻨﺎﻣﻴﻜﻴﺎً‪ .‬ﺛﺎﻧﻴﺎً ‪ ،‬ﻳﻤﻜﻦ ﺇﺿﺎﻓﺔ ﻟﻮﺣﺔ ﺍﻷﺩﻭﺍﺕ‬
‫ﺑﺸﻜﻞﺩﻳﻨﺎﻣﻴﻜﻲ‪.‬‬
‫ﺑﻌﺾﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺍﻟﻨﻬﺎﺉﻴﺔ ﻋﻠﻰ ﺃﻓﻜﺎﺭ ﺟﺪﻳﺪﺓ‬

‫ﻓﻲﻋﺎﻟﻢ ﺍﻟﺒﺮﻣﺠﺔ ﻭﺃﺩﻭﺍﺕ ﺍﻟﺒﺮﻣﺠﺔ ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﻠﻐﺎﺕ‬


‫ﻭﺍﻟﺒﻴﺉﺎﺕ ‪،‬ﻣﺎ ﺃﻛﺜﺮ ﺍﻟﻤﺸﺎﺭﻳﻊ ﺍﻟﺘﻲ ﺗﻬﻤﻚ؟ﺃﻧﺎ ﻣﻬﺘﻢ ﺏ‬ ‫ﻫﻞﻛﺎﻧﺖ ﻟﻐﺘﻚ ﻓﻲ ‪ Ruby‬ﺃﻭﻝ ﻣﻦ ﺍﻣﺘﻠﻚ ﻣﻜﺘﺒﺔ‬
‫ﻣﺮﺗﺒﻄﺔﺩﻳﻨﺎﻣﻴﻜﻴﺔ ﻭﺗﻢ ﺭﺑﻄﻬﺎ ﺑﻤﻠﻒ‬
‫ﺇﻧﺸﺎءﺃﺩﻭﺍﺕ ﺑﺮﻣﺠﺔ ﻣﺼﻤﻤﺔ ﻟﻤﺴﺎﻋﺪﺓ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺑﺪﻻ ًﻣﻦ‬ ‫ﺍﻟﻮﺍﺟﻬﺔﺍﻷﻣﺎﻣﻴﺔ ﺍﻟﻤﺮﺉﻴﺔ؟ﻋﻠﻰ ﺣﺪ ﻋﻠﻤﻲ ‪ ،‬ﻧﻌﻢ‪.‬‬
‫ﺍﻟﻤﺒﺮﻣﺠﻴﻦ‪.‬‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﻣﺜﺎﻝ ﺑﺴﻴﻂ ‪ ،‬ﻣﺎ ﺍﻟﺬﻱ ﺳﻴﻤﻜﻦ ﻫﺬﺍ ﺍﻟﻤﺒﺮﻣﺞ‬
‫ﻣﺎﻫﻲ ﺍﻟﻘﺎﻋﺪﺓ ﺍﻷﻛﺜﺮ ﺃﻫﻤﻴﺔ ‪ ،‬ﺃﻭ ﺍﻻﻗﺘﺒﺎﺱ ﺍﻟﺸﻬﻴﺮ ‪ ،‬ﺃﻭ ﻓﻜﺮﺓ‬ ‫ﻣﻦﺍﻟﻘﻴﺎﻡ ﺑﻪ ﺑﺒﺮﻧﺎﻣﺠﻪ؟ﺑﻮﺭ‪-‬‬
‫ﺍﻟﺘﺼﻤﻴﻢﺍﻟﺘﻲ ﻳﺠﺐ ﻭﺿﻌﻬﺎ ﻓﻲ ﺍﻻﻋﺘﺒﺎﺭ؟ﻟﻢ ﻳﺘﻢ ﺑﻨﺎء ﺍﻟﺠﺴﻮﺭ‬ ‫ﻗﻢﺑﻤﻄﺎﺭﺩﺓ ﻋﻨﺼﺮ ﺗﺤﻜﻢ ‪ ،‬ﻣﺜﻞ ﻋﻨﺼﺮ ﺗﺤﻜﻢ ﻓﻲ ﺍﻟﺸﺒﻜﺔ ‪ ،‬ﻣﻦ‬
‫ﺍﻟﻤﻬﻨﺪﺳﻴﻦ‪.‬ﺗﻢ ﺑﻨﺎﺅﻫﺎ ﻣﻦ ﻗﺒﻞ ﻋﻤﺎﻝ ﺍﻟﺤﺪﻳﺪ‪.‬‬ ‫ﺑﺎﺉﻊﻃﺮﻑ ﺛﺎﻟﺚ ‪ ،‬ﻭﻗﻢ ﺑﺘﺜﺒﻴﺘﻪ ﻋﻠﻰ ﺟﻬﺎﺯ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺨﺎﺹ ﺑﻪ ‪،‬‬
‫ﻭﺑﺎﻟﻤﺜﻞ ‪،‬ﻓﺈﻥ ﺍﻟﺒﺮﺍﻣﺞ ﻻ ﻳﺘﻢ ﺇﻧﺸﺎﺅﻫﺎ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﻬﻨﺪﺳﻴﻦ ‪،‬‬ ‫ﻭﺟﻌﻞﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺸﺒﻜﺔ ﻳﻈﻬﺮ ﻛﺠﺰء ﻻ ﻳﺘﺠﺰﺃ ﻣﻦ ﺍﻟﻠﻐﺔ ‪ ،‬ﺑﻤﺎ ﻓﻲ‬
‫ﺑﻞﻳﺘﻢ ﺇﻧﺸﺎﺅﻫﺎ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ‪.‬‬ ‫ﺫﻟﻚﺍﻟﻮﺍﺟﻬﺔ ﺍﻷﻣﺎﻣﻴﺔ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﻤﺮﺉﻴﺔ‪.‬‬

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

‫‪2.8‬ﻛﻞ ﺷﻲء ﻟﻠﺠﻤﻴﻊ‪PL / I :‬‬


‫ﺗﻤﺜﻞ‪ PL / I‬ﺃﻭﻝ ﻣﺤﺎﻭﻟﺔ ﻭﺍﺳﻌﺔ ﺍﻟﻨﻄﺎﻕ ﻟﺘﺼﻤﻴﻢ ﻟﻐﺔ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻟﻤﺠﻤﻮﻋﺔ ﻭﺍﺳﻌﺔ ﻣﻦ‬
‫ﻣﺠﺎﻻﺕﺍﻟﺘﻄﺒﻴﻖ‪ .‬ﺭﻛﺰﺕ ﺟﻤﻴﻊ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺴﺎﺑﻘﺔ ﻭﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻼﺣﻘﺔ ﻋﻠﻰ ﻣﺠﺎﻝ ﺗﻄﺒﻴﻖ‬
‫ﻣﻌﻴﻦ ‪،‬ﻣﺜﻞ ﺍﻟﻌﻠﻮﻡ ﺃﻭ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ ﺃﻭ ﺍﻷﻋﻤﺎﻝ‪.‬‬

‫‪2.8.1‬ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ‬
‫ﻣﺜﻞ‪ ، Fortran‬ﺗﻢ ﺗﻄﻮﻳﺮ ‪ PL / I‬ﻛﻤﻨﺘﺞ ‪ .IBM‬ﺑﺤﻠﻮﻝ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ‪ ،‬ﺍﺳﺘﻘﺮ ﻣﺴﺘﺨﺪﻣﻮ‬
‫ﺃﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﺍﻟﺼﻨﺎﻋﺔ ﻓﻲ ﻣﻌﺴﻜﺮﻳﻦ ﻣﻨﻔﺼﻠﻴﻦ ﻭﻣﺨﺘﻠﻔﻴﻦ ﺗﻤﺎﻣﺎً‪ :‬ﺍﻟﻌﻠﻤﻲ ﻭﺍﻟﺘﺠﺎﺭﻱ‪.‬‬
‫ﻣﻦﻭﺟﻬﺔ ﻧﻈﺮ ﺷﺮﻛﺔ ﺁﻱ ﺑﻲ ﺇﻡ ‪ ،‬ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺠﻴﻦ ﺍﻟﻌﻠﻤﻴﻴﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺇﻣﺎ ‪ 7090‬ﺃﻭ ﺃﺟﻬﺰﺓ‬
‫ﻛﻤﺒﻴﻮﺗﺮﺁﻱ ﺑﻲ ﺇﻡ ﺻﻐﻴﺮﺓ ﺍﻟﺤﺠﻢ ‪ .1620‬ﺍﺳﺘﺨﺪﻣﺖ ﻫﺬﻩ ﺍﻟﻤﺠﻤﻮﻋﺔ ﺑﻴﺎﻧﺎﺕ ﻭﻣﺼﻔﻮﻓﺎﺕ‬
‫ﺍﻟﻔﺎﺻﻠﺔﺍﻟﻌﺎﺉﻤﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﻛﺎﻧﺖ ﻟﻐﺔ ﻓﻮﺭﺗﺮﺍﻥ ﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻷﺳﺎﺳﻴﺔ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ‬
‫ﺍﺳﺘﺨﺪﺍﻡﺑﻌﺾ ﻟﻐﺎﺕ ﺍﻟﺘﺠﻤﻴﻊ ﺃﻳﻀﺎً‪ .‬ﻛﺎﻥ ﻟﺪﻳﻬﻢ ﻣﺠﻤﻮﻋﺔ ﻣﺴﺘﺨﺪﻣﻴﻦ ﺧﺎﺻﺔ ﺑﻬﻢ ‪، SHARE ،‬‬
‫ﻭﻟﻢﻳﻜﻦ ﻟﺪﻳﻬﻢ ﺍﺗﺼﺎﻝ ﻳﺬﻛﺮ ﻣﻊ ﺃﻱ ﺷﺨﺺ ﻳﻌﻤﻞ ﻓﻲ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ‪.‬‬

‫ﺑﺎﻟﻨﺴﺒﺔﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ‪ ،‬ﺍﺳﺘﺨﺪﻡ ﺍﻟﻨﺎﺱ ﺃﺟﻬﺰﺓ ﻛﻤﺒﻴﻮﺗﺮ ‪ 7080‬ﺍﻟﻜﺒﻴﺮﺓ ﺃﻭ ﺃﺟﻬﺰﺓ‬


‫ﻛﻤﺒﻴﻮﺗﺮ‪ IBM‬ﺍﻟﺼﻐﻴﺮﺓ ‪ .1401‬ﻟﻘﺪ ﺍﺣﺘﺎﺟﻮﺍ ﺇﻟﻰ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻌﺸﺮﻳﺔ ﻭﺳﻠﺴﻠﺔ ﺍﻷﺣﺮﻑ ‪،‬‬
‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﺗﺴﻬﻴﻼﺕ ﺇﺩﺧﺎﻝ ﻭﺇﺧﺮﺍﺝ ﻣﻌﻘﺪﺓ ﻭﻓﻌﺎﻟﺔ‪ .‬ﺍﺳﺘﺨﺪﻣﻮﺍ ‪ ، COBOL‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ‬
‫ﺃﻧﻪﻓﻲ ﺃﻭﺍﺉﻞ ﻋﺎﻡ ‪ 1963‬ﻋﻨﺪﻣﺎ ﺑﺪﺃﺕ ﻗﺼﺔ ‪ ، PL / I‬ﻛﺎﻥ ﺍﻟﺘﺤﻮﻳﻞ ﻣﻦ ﻟﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﺇﻟﻰ‬
‫‪ COBOL‬ﺑﻌﻴﺪﺍً ﻋﻦ ﺍﻻﻛﺘﻤﺎﻝ‪ .‬ﻛﺎﻥ ﻟﻬﺬﻩ ﺍﻟﻔﺉﺔ ﻣﻦ ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺃﻳﻀﺎً ﻣﺠﻤﻮﻋﺔ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ‪ ، GUIDE ،‬ﻭﻧﺎﺩﺭﺍً ﻣﺎ ﻛﺎﻧﺖ ﻋﻠﻰ ﺍﺗﺼﺎﻝ ﺑﺎﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﺍﻟﻌﻠﻤﻴﻴﻦ‪.‬‬
‫ﻓﻲﺃﻭﺍﺉﻞ ﻋﺎﻡ ‪ ، 1963‬ﺃﺩﺭﻙ ﻣﺨﻄﻄﻮ ﺷﺮﻛﺔ ‪ IBM‬ﺑﺪﺍﻳﺎﺕ ﺍﻟﺘﻐﻴﻴﺮ ﻓﻲ ﻫﺬﺍ ﺍﻟﻮﺿﻊ‪ .‬ﻛﺎﻧﺖ‬
‫ﻣﺠﻤﻮﻋﺘﺎﻣﺴﺘﺨﺪﻣﻲ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻨﻔﺼﻠﺘﺎﻥ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﺗﺘﺠﻬﺎﻥ ﻧﺤﻮ ﺑﻌﻀﻬﻤﺎ ﺍﻟﺒﻌﺾ‬
‫ﺑﻄﺮﻕﻛﺎﻥ ﻳﻌﺘﻘﺪ ﺃﻧﻪ ﻣﻦ ﺍﻟﻤﺆﻛﺪ ﺃﻧﻬﺎ ﺗﺨﻠﻖ ﻣﺸﺎﻛﻞ‪ .‬ﺑﺪﺃ ﺍﻟﻌﻠﻤﺎء ﻓﻲ ﺟﻤﻊ ﻣﻠﻔﺎﺕ ﻛﺒﻴﺮﺓ ﻣﻦ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕﻟﺘﺘﻢ ﻣﻌﺎﻟﺠﺘﻬﺎ‪ .‬ﺗﺘﻄﻠﺐ ﻫﺬﻩ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺗﺴﻬﻴﻼﺕ ﺇﺩﺧﺎﻝ ﻭﻣﺨﺮﺟﺎﺕ ﺃﻛﺜﺮ ﺗﻄﻮﺭﺍ ً‬
‫ﻭﻓﻌﺎﻟﻴﺔ‪.‬ﺑﺪﺃ ﺍﻷﺷﺨﺎﺹ ﻓﻲ ﺗﻄﺒﻴﻘﺎﺕ ﺍﻷﻋﻤﺎﻝ ﻓﻲ ﺍﺳﺘﺨﺪﺍﻡ ﺗﺤﻠﻴﻞ ﺍﻻﻧﺤﺪﺍﺭ ﻟﺒﻨﺎء ﺃﻧﻈﻤﺔ‬
‫ﻣﻌﻠﻮﻣﺎﺕﺇﺩﺍﺭﻳﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺘﻄﻠﺐ ﺑﻴﺎﻧﺎﺕ ﻭﻣﺼﻔﻮﻓﺎﺕ ﺍﻟﻨﻘﻄﺔ ﺍﻟﻌﺎﺉﻤﺔ‪ .‬ﺑﺪﺃ ﻳﺒﺪﻭ ﺃﻥ ﻋﻤﻠﻴﺎﺕ‬
‫ﺗﺜﺒﻴﺖﺍﻟﺤﻮﺳﺒﺔ ﺳﺘﺘﻄﻠﺐ ﻗﺮﻳﺒﺎً ﺟﻬﺎﺯﻱ ﻛﻤﺒﻴﻮﺗﺮ ﻣﻨﻔﺼﻠﻴﻦ ﻭﻓﺮﻳﻖ ﻋﻤﻞ ﻓﻨﻲ ‪ ،‬ﻣﻤﺎ ﻳﺪﻋﻢ‬
‫ﻟﻐﺘﻴﻦﻣﺨﺘﻠﻔﺘﻴﻦ ﺗﻤﺎﻣﺎً ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪8.‬‬

‫ﺃﺩﺕﻫﺬﻩ ﺍﻟﺘﺼﻮﺭﺍﺕ ﺑﺸﻜﻞ ﻃﺒﻴﻌﻲ ﺇﻟﻰ ﻣﻔﻬﻮﻡ ﺗﺼﻤﻴﻢ ﻛﻤﺒﻴﻮﺗﺮ ﻋﺎﻟﻤﻲ ﻭﺍﺣﺪ ﻳﻜﻮﻥ ﻗﺎﺩﺭﺍً‬
‫ﻋﻠﻰﺍﻟﻘﻴﺎﻡ ﺑﺤﺴﺎﺏ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻌﺎﺉﻤﺔ ﻭﺍﻟﺤﺴﺎﺏ ﺍﻟﻌﺸﺮﻱ ‪ ،‬ﻭﺑﺎﻟﺘﺎﻟﻲ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ‬
‫ﻭﺍﻟﺘﺠﺎﺭﻳﺔ‪.‬ﻭﻫﻜﺬﺍ ﻭﻟﺪ ﻣﻔﻬﻮﻡ ﺧﻂ ﺍﻟﺤﻮﺍﺳﻴﺐ ‪ .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‬ﻟﻤﺪﺓ ﺛﻼﺛﺔ ﺃﻭ ﺃﺭﺑﻌﺔ ﺃﻳﺎﻡ ﻛﻞ ﺃﺳﺒﻮﻋﻴﻦ ﻟﺘﺼﻤﻴﻢ‬
‫ﺍﻟﻠﻐﺔ‪.‬‬

‫ﻛﻤﺎﻫﻮ ﺍﻟﺤﺎﻝ ﻣﻊ ﻟﺠﻨﺔ ﺍﻟﻤﺪﻯ ﺍﻟﻘﺼﻴﺮ ﻟـ ‪ ، COBOL‬ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻘﺮﺭ ﺍﻻﻧﺘﻬﺎء ﻣﻦ ﺍﻟﺘﺼﻤﻴﻢ‬


‫ﺍﻷﻭﻟﻲﻓﻲ ﻭﻗﺖ ﻗﺼﻴﺮ ﺑﺸﻜﻞ ﻣﻠﺤﻮﻅ‪ .‬ﻋﻠﻰ ﻣﺎ ﻳﺒﺪﻭ ‪ ،‬ﺑﻐﺾ ﺍﻟﻨﻈﺮ ﻋﻦ ﻧﻄﺎﻕ ﺟﻬﺪ ﺗﺼﻤﻴﻢ‬
‫ﺍﻟﻠﻐﺔ ‪،‬ﻛﺎﻥ ﺍﻻﻋﺘﻘﺎﺩ ﺍﻟﺴﺎﺉﺪ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ﺃﻧﻪ ﻳﻤﻜﻦ ﺍﻟﻘﻴﺎﻡ ﺑﺬﻟﻚ ﻓﻲ ﻏﻀﻮﻥ ﺛﻼﺛﺔ‬
‫ﺃﺷﻬﺮ‪.‬ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻔﺘﺮﺽ ﺃﻥ ﺗﻜﺘﻤﻞ ﺍﻟﻨﺴﺨﺔ ﺍﻷﻭﻟﻰ ﻣﻦ ‪ ، PL / I‬ﻭﺍﻟﺘﻲ ﺳﻤُﻴﺖ ﺁﻧﺬﺍﻙ ‪VI‬‬
‫‪ ، Fortran‬ﺑﺤﻠﻮﻝ ﺩﻳﺴﻤﺒﺮ ‪ ،‬ﺑﻌﺪ ﺃﻗﻞ ﻣﻦ ﺛﻼﺛﺔ ﺃﺷﻬﺮ ﻣﻦ ﺗﺸﻜﻴﻞ ﺍﻟﻠﺠﻨﺔ‪ .‬ﻭﻗﺪ ﻧﺠﺤﺖ ﺍﻟﻠﺠﻨﺔ‬
‫ﻓﻲﻃﻠﺐ ﺍﻟﺘﻤﺪﻳﺪ ﻓﻲ ﻣﻨﺎﺳﺒﺘﻴﻦ ﻣﺨﺘﻠﻔﺘﻴﻦ ‪ ،‬ﺣﻴﺚ ﺃﺭﺟﺄﺕ ﻣﻮﻋﺪ ﺍﻻﺳﺘﺤﻘﺎﻕ ﺇﻟﻰ ﻳﻨﺎﻳﺮ ﺛﻢ ﺇﻟﻰ‬
‫ﺃﻭﺍﺧﺮﻓﺒﺮﺍﻳﺮ ‪.1964‬‬

‫ﻛﺎﻥﻣﻔﻬﻮﻡ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﻭﻟﻲ ﻫﻮ ﺃﻥ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ﺳﺘﻜﻮﻥ ﺍﻣﺘﺪﺍﺩﺍً ﻟـ ‪ ، Fortran IV‬ﻣﻊ‬


‫ﺍﻟﺤﻔﺎﻅﻋﻠﻰ ﺍﻟﺘﻮﺍﻓﻖ ‪ ،‬ﻭﻟﻜﻦ ﺗﻢ ﺇﺳﻘﺎﻁ ﻫﺬﺍ ﺍﻟﻬﺪﻑ ﺑﺴﺮﻋﺔ ﻣﻊ ﺍﺳﻢ ‪ .Fortran VI‬ﺣﺘﻰ ﻋﺎﻡ‬
‫‪، 1965‬ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﺗﻌُﺮﻑ ﺑﺎﺳﻢ ‪) NPL‬ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺠﺪﻳﺪﺓ(‪ .‬ﺗﻢ ﺗﻘﺪﻳﻢ ﺃﻭﻝ ﺗﻘﺮﻳﺮ ﻣﻨﺸﻮﺭ ﻋﻦ‬
‫‪ NPL‬ﻓﻲ ﺍﺟﺘﻤﺎﻉ ‪ SHARE‬ﻓﻲ ﻣﺎﺭﺱ ‪ .1964‬ﺗﻢ ﺍﺗﺒﺎﻉ ﻭﺻﻒ ﺃﻛﺜﺮ ﺍﻛﺘﻤﺎﻻ ًﻓﻲ ﺃﺑﺮﻳﻞ ‪ ،‬ﻭﺗﻢ ﻧﺸﺮ‬
‫ﺍﻟﻨﺴﺨﺔﺍﻟﺘﻲ ﺳﻴﺘﻢ ﺗﻨﻔﻴﺬﻫﺎ ﻓﻌﻠﻴﺎً ﻓﻲ ﺩﻳﺴﻤﺒﺮ ‪ (IBM ، 1964) 1964‬ﻣﻦ ﻗﺒﻞ ﻣﺠﻤﻮﻋﺔ‬
‫ﺍﻟﻤﺘﺮﺟﻤﻴﻦﻓﻲ ‪ IBM Hursley‬ﺍﻟﻤﺨﺘﺒﺮ ﻓﻲ ﺇﻧﺠﻠﺘﺮﺍ ﻭﺍﻟﺬﻱ ﺗﻢ ﺍﺧﺘﻴﺎﺭﻩ ﻟﻠﻘﻴﺎﻡ ﺑﺎﻟﺘﻨﻔﻴﺬ‪ .‬ﻓﻲ ﻋﺎﻡ‬
‫‪، 1965‬ﺗﻢ ﺗﻐﻴﻴﺮ ﺍﻻﺳﻢ ﺇﻟﻰ ‪ PL / I‬ﻟﺘﺠﻨﺐ ﺍﻟﺨﻠﻂ ﺑﻴﻦ ﺍﺳﻢ ‪ NPL‬ﻭﺍﻟﻤﺨﺘﺒﺮ ﺍﻟﻔﻴﺰﻳﺎﺉﻲ ﺍﻟﻮﻃﻨﻲ‬
‫ﻓﻲﺇﻧﺠﻠﺘﺮﺍ‪ .‬ﺇﺫﺍ ﺗﻢ ﺗﻄﻮﻳﺮ ﺍﻟﻤﺘﺮﺟﻢ ﺧﺎﺭﺝ ﺍﻟﻤﻤﻠﻜﺔ ﺍﻟﻤﺘﺤﺪﺓ ‪ ،‬ﻓﺮﺑﻤﺎ ﻇﻞ ﺍﻻﺳﻢ ‪.NPL‬‬

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


‫ﺭﺑﻤﺎﻳﻜﻮﻥ ﺃﻓﻀﻞ ﻭﺻﻒ ﺃﺣﺎﺩﻱ ﺍﻟﺠﻤﻠﺔ ﻟـ ‪ PL / I‬ﻫﻮ ﺃﻧﻪ ﺗﻀﻤﻦ ﻣﺎ ﻛﺎﻥ ﻳﻌﺘﺒﺮ ﻓﻴﻤﺎ ﺑﻌﺪ ﺃﻓﻀﻞ‬
‫ﺃﺟﺰﺍء‪) ALGOL 60‬ﺑﻨﻴﺔ ﺍﻟﻌﻮﺩﻳﺔ ﻭﺍﻟﻜﺘﻠﺔ( ‪ ،‬ﻭ ‪) Fortran IV‬ﺗﺠﻤﻴﻊ ﻣﻨﻔﺼﻞ ﻣﻊ ﺍﻻﺗﺼﺎﻝ ﻣﻦ‬
‫ﺧﻼﻝﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻌﺎﻟﻤﻴﺔ( ‪ ،‬ﻭ ‪) COBOL 60‬ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻭﻣﺮﺍﻓﻖ ﺍﻹﺩﺧﺎﻝ ‪ /‬ﺍﻹﺧﺮﺍﺝ ‪،‬‬
‫ﻭﺇﻧﺸﺎءﺍﻟﺘﻘﺎﺭﻳﺮ( ‪ ،‬ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﻣﺠﻤﻮﻋﺔ ﻭﺍﺳﻌﺔ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ ‪ ،‬ﺟﻤﻴﻌﻬﺎ‬
‫ﻣﺮﺻﻮﻓﺔﺑﻄﺮﻳﻘﺔ ﻣﺎ ﻣﻌﺎً‪ .‬ﻧﻈﺮﺍً ﻷﻥ ‪ PL / I‬ﻟﻢ ﺗﻌﺪ ﻟﻐﺔ ﺷﺎﺉﻌﺔ ‪ ،‬ﻓﻠﻦ ﻧﺤﺎﻭﻝ ‪ ،‬ﻭﻟﻮ ﻟﻔﺘﺮﺓ‬
‫ﻭﺟﻴﺰﺓ ‪،‬ﻣﻨﺎﻗﺸﺔ ﺟﻤﻴﻊ ﻣﻴﺰﺍﺕ ﺍﻟﻠﻐﺔ ‪ ،‬ﺃﻭ ﺣﺘﻰ ﺃﻛﺜﺮ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺇﺛﺎﺭﺓ ﻟﻠﺠﺪﻝ‪ .‬ﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪،‬‬
‫ﺳﻨﺬﻛﺮﺑﻌﺾ ﻣﺴﺎﻫﻤﺎﺕ ﺍﻟﻠﻐﺔ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻟﻤﻌﺮﻓﺔ ﺑﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫ﻛﺎﻧﺖ‪ PL / I‬ﺃﻭﻝ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻟﺪﻳﻬﺎ ﺍﻟﺘﺴﻬﻴﻼﺕ ﺍﻟﺘﺎﻟﻴﺔ‪:‬‬


‫• ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﻟﻠﺒﺮﺍﻣﺞ ﺑﺈﻧﺸﺎء ﺑﺮﺍﻣﺞ ﻓﺮﻋﻴﺔ ﻣﻨﻔﺬﺓ ﺑﺸﻜﻞ ﻣﺘﺰﺍﻣﻦ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﻩ‬
‫ﻛﺎﻧﺖﻓﻜﺮﺓ ﺟﻴﺪﺓ ‪ ،‬ﻓﻘﺪ ﺗﻢ ﺗﻄﻮﻳﺮﻫﺎ ﺑﺸﻜﻞ ﺳﻴﺊ ﻓﻲ ‪.PL / I‬‬
‫• ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺍﻛﺘﺸﺎﻑ ﻭﻣﻌﺎﻟﺠﺔ ‪ 23‬ﻧﻮﻋﺎً ﻣﺨﺘﻠﻔﺎً ﻣﻦ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﺃﻭ ﺃﺧﻄﺎء ﻭﻗﺖ‬
‫ﺍﻟﺘﺸﻐﻴﻞ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪70‬‬

‫• ﺗﻢ ﺍﻟﺴﻤﺎﺡ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺑﺸﻜﻞ ﻣﺘﻜﺮﺭ ‪ ،‬ﻭﻟﻜﻦ ﻳﻤﻜﻦ ﺗﻌﻄﻴﻞ ﺍﻟﻘﺪﺭﺓ ‪ ،‬ﻣﻤﺎ‬
‫ﻳﺴﻤﺢﺑﺮﺑﻂ ﺃﻛﺜﺮ ﻛﻔﺎءﺓ ﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻏﻴﺮ ﺍﻟﺘﻜﺮﺍﺭﻳﺔ‪.‬‬
‫• ﺗﻢ ﺗﻀﻤﻴﻦ ﺍﻟﻤﺆﺷﺮﺍﺕ ﻛﻨﻮﻉ ﺑﻴﺎﻧﺎﺕ‪.‬‬
‫• ﻳﻤﻜﻦ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻰ ﺍﻟﻤﻘﺎﻃﻊ ﺍﻟﻌﺮﺿﻴﺔ ﻟﻠﻤﺼﻔﻮﻓﺎﺕ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﻤﻜﻦ ﺍﻹﺷﺎﺭﺓ ﺇﻟﻰ‬
‫ﺍﻟﺼﻒﺍﻟﺜﺎﻟﺚ ﻣﻦ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻛﻤﺎ ﻟﻮ ﻛﺎﻥ ﻣﺼﻔﻮﻓﺔ ﺫﺍﺕ ﺑﻌُﺪ ﻭﺍﺣﺪ‪.‬‬

‫‪2.8.4‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻳﺠﺐﺃﻥ ﻳﺒﺪﺃ ﺃﻱ ﺗﻘﻴﻴﻢ ﻟـ ‪ PL / I‬ﺑﺎﻟﺘﻌﺮﻑ ﻋﻠﻰ ﻃﻤﻮﺡ ﺟﻬﺪ ﺍﻟﺘﺼﻤﻴﻢ‪ .‬ﺑﺎﻟﻨﻈﺮ ﺇﻟﻰ ﺍﻟﻤﺎﺿﻲ ‪،‬‬
‫ﻳﺒﺪﻭﻣﻦ ﺍﻟﺴﺬﺍﺟﺔ ﺍﻟﺘﻔﻜﻴﺮ ﻓﻲ ﺃﻧﻪ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﺩﻣﺞ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺒﻨﻰ ﺑﻨﺠﺎﺡ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪،‬‬
‫ﻳﺠﺐﺗﺨﻔﻴﻒ ﻫﺬﺍ ﺍﻟﺤﻜﻢ ﻣﻦ ﺧﻼﻝ ﺍﻻﻋﺘﺮﺍﻑ ﺑﺄﻧﻪ ﻛﺎﻧﺖ ﻫﻨﺎﻙ ﺧﺒﺮﺓ ﻗﻠﻴﻠﺔ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ‬
‫ﻓﻲﺫﻟﻚ ﺍﻟﻮﻗﺖ‪ .‬ﺑﺸﻜﻞ ﻋﺎﻡ ‪ ،‬ﺍﺳﺘﻨﺪ ﺗﺼﻤﻴﻢ ‪ PL / I‬ﺇﻟﻰ ﻓﺮﺿﻴﺔ ﺃﻥ ﺃﻱ ﺑﻨﻴﺔ ﻣﻔﻴﺪﺓ ﻭﻳﻤﻜﻦ‬
‫ﺗﻨﻔﻴﺬﻫﺎﻳﺠﺐ ﺗﻀﻤﻴﻨﻬﺎ ‪ ،‬ﻣﻊ ﻋﺪﻡ ﺍﻻﻫﺘﻤﺎﻡ ﺍﻟﻜﺎﻓﻲ ﺑﻜﻴﻔﻴﺔ ﻓﻬﻢ ﺍﻟﻤﺒﺮﻣﺞ ﻟﻬﺬﻩ ﺍﻟﻤﺠﻤﻮﻋﺔ ﻣﻦ‬
‫ﺍﻟﺘﺮﻛﻴﺒﺎﺕﻭﺍﻟﻤﻴﺰﺍﺕ ﻭﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﺑﺸﻜﻞ ﻓﻌﺎﻝ‪ .‬ﻗﺪﻡ ‪ ، Edsger Dijkstra‬ﻓﻲ ﻣﺤﺎﺿﺮﺓ ﺟﺎﺉﺰﺓ (‬
‫‪ ، Turing )Dijkstra، 1972‬ﺃﺣﺪ ﺃﻗﻮﻯ ﺍﻻﻧﺘﻘﺎﺩﺍﺕ ﻟﺘﻌﻘﻴﺪ ‪:PL / I‬‬

‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﻣﺸﻜﻠﺔ ﺍﻟﺘﻌﻘﻴﺪ ﺑﺴﺒﺐ ﺣﺠﻤﻪ ﺍﻟﻜﺒﻴﺮ ‪ ،‬ﻋﺎﻧﻰ ‪ PL / I‬ﻣﻦ ﻋﺪﺩ ﻣﻤﺎ ﻳﻌﺘﺒﺮ‬
‫ﺍﻵﻥﻫﻴﺎﻛﻞ ﺳﻴﺉﺔ ﺍﻟﺘﺼﻤﻴﻢ‪ .‬ﻣﻦ ﺑﻴﻦ ﻫﺬﻩ ﺍﻟﻤﺆﺷﺮﺍﺕ ‪ ،‬ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ‪ ،‬ﻭﺍﻟﺘﺰﺍﻣﻦ ‪،‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻨﺎ ﻳﺠﺐ ﺃﻥ ﻧﺸﻴﺮ ﺇﻟﻰ ﺃﻧﻪ ﻓﻲ ﺟﻤﻴﻊ ﺍﻟﺤﺎﻻﺕ ‪ ،‬ﻟﻢ ﺗﻈﻬﺮ ﻫﺬﻩ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻓﻲ ﺃﻱ‬
‫ﻟﻐﺔﺳﺎﺑﻘﺔ‪.‬‬

‫ﻣﻦﺣﻴﺚ ﺍﻻﺳﺘﺨﺪﺍﻡ ‪ ،‬ﻳﺠﺐ ﺍﻋﺘﺒﺎﺭ ‪ PL / I‬ﻧﺠﺎﺣﺎً ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﺍﻷﻗﻞ‪ .‬ﻓﻲ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪،‬‬
‫ﺗﻤﺘﻌﺖﺑﺎﺳﺘﺨﺪﺍﻣﺎﺕ ﻛﺒﻴﺮﺓ ﻓﻲ ﻛﻞ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﺘﺠﺎﺭﻳﺔ ﻭﺍﻟﻌﻠﻤﻴﺔ‪ .‬ﻛﻤﺎ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻋﻠﻰ‬
‫ﻧﻄﺎﻕﻭﺍﺳﻊ ﺧﻼﻝ ﺫﻟﻚ ﺍﻟﻮﻗﺖ ﻛﻮﺳﻴﻠﺔ ﺗﻌﻠﻴﻤﻴﺔ ﻓﻲ ﺍﻟﻜﻠﻴﺎﺕ ‪ ،‬ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﻓﻲ ﻋﺪﺓ ﺃﺷﻜﺎﻝ‬
‫ﻓﺮﻋﻴﺔ ‪،‬ﻣﺜﻞ ‪) PL / C‬ﻛﻮﺭﻧﻴﻞ ‪ (1977 ،‬ﻭ ‪) PL / CS‬ﻛﻮﻧﻮﺍﻱ ﻭﻛﻮﻧﺴﺘﺎﺑﻞ ‪.(1976 ،‬‬

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

‫‪/ I PROGRAM EXAMPLE INPUT:‬‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ،‬ﺍﺳﺘﻤﻊ ‪ ،‬ﺣﻴﺚ ﻳﻜﻮﻥ ﺍﻻﺳﺘﻤﺎﻉ ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺎً ﺑﻘﻴﻢ‬ ‫‪/ * PL‬‬
‫‪LISTLEN-INTEGER‬‬
‫ﺍﻹﺧﺮﺍﺝ‪:‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺃﻛﺒﺮ ﻣﻦ‬
‫ﻣﺘﻮﺳﻂﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ * ‪ :PLIEX /‬ﺧﻴﺎﺭﺍﺕ ﺍﻹﺟﺮﺍء )‬
‫ﺍﻟﺮﺉﻴﺴﻲ( ؛‬
‫ﺍﻹﻋﻼﻥﻋﻦ ﺍﻟﻘﺎﺉﻤﺔ )‪ (1:99‬ﺛﺎﺑﺖ‪.‬‬
‫ﺇﻋﻼﻥ)ﻗﺎﺉﻤﺔ ‪ ،‬ﻋﺪﺍﺩ ‪ ،‬ﻣﺠﻤﻮﻉ ‪ ،‬ﻣﺘﻮﺳﻂ ‪ ،‬ﻧﺘﻴﺠﺔ( ﺛﺎﺑﺖ ؛ ‪ SUM = 0‬؛‬

‫ﺍﻟﻨﺘﻴﺠﺔ= ‪، 0‬‬
‫ﺍﻟﺤﺼﻮﻝﻋﻠﻰ ﻗﺎﺉﻤﺔ )‪ (LISTLEN‬؛‬
‫ﺇﺫﺍ)‪ (LISTLEN >100) & (LISTLEN< 0‬ﺛﻢ‬
‫‪71‬‬ ‫‪2.9‬ﻟﻐﺘﺎﻥ ﺩﻳﻨﺎﻣﻴﻜﻴﺘﺎﻥ ﻣﺒﻜﺮﺗﺎﻥ‪ APL :‬ﻭ ‪SNOBOL‬‬

‫ﻳﻔﻌﻞ؛‬
‫‪ * /‬ﻗﺮﺍءﺓ ﺑﻴﺎﻧﺎﺕ ﺍﻹﺩﺧﺎﻝ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺠﻤﻮﻉ * ‪/‬‬
‫ﻫﻞﺍﻟﻌﺪﺍﺩ = ‪ 1‬ﻟﻼﺳﺘﻤﺎﻉ ؛‬
‫ﺍﻟﺤﺼﻮﻝﻋﻠﻰ ﻗﺎﺉﻤﺔ )(‪ (INTLIST )COUNTER‬؛‬
‫(‪ SUM = SUM + INTLIST )COUNTER‬؛ ﻧﻬﺎﻳﺔ؛‬

‫‪ * /‬ﺣﺴﺎﺏ ﺍﻟﻤﺘﻮﺳﻂ * ‪/‬‬


‫ﺍﻟﻤﺘﻮﺳﻂ= ‪ SUM / LISTLEN‬؛‬
‫‪ * /‬ﻋﺪ ﻋﺪﺩ ﺍﻟﻘﻴﻢ ﺍﻟﺘﻲ ﻫﻲ< ﻣﺘﻮﺳﻂ * ‪/‬‬
‫ﻫﻞﺍﻟﻌﺪﺍﺩ = ‪ 1‬ﻟﻼﺳﺘﻤﺎﻉ ؛‬
‫ﺇﺫﺍﻛﺎﻥ (‪ <INTLIST )COUNTER‬ﻣﺘﻮﺳﻂ ﺛﻢ‬
‫ﺍﻟﻨﺘﻴﺠﺔ= ﺍﻟﻨﺘﻴﺠﺔ ‪، 1 +‬‬
‫ﻧﻬﺎﻳﺔ؛‬
‫‪ * /‬ﻧﺘﻴﺠﺔ ﺍﻟﻄﺒﺎﻋﺔ * ‪/‬‬
‫ﻭﺿﻊﻗﺎﺉﻤﺔ ﺍﻟﺘﺨﻄﻲ )"ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ‪ (":‬؛ ﻗﺎﺉﻤﺔ ‪) PUT‬ﻧﺘﻴﺠﺔ( ‪،‬‬

‫ﻧﻬﺎﻳﺔ؛‬
‫ﺁﺧﺮ‬
‫ﻭﺿﻊﻗﺎﺉﻤﺔ ﺍﻟﺘﺨﻄﻲ )"ﺧﻄﺄ ‪ -‬ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﺍﻟﻄﻮﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ"( ؛ ﻧﻬﺎﻳﺔ ‪ PLIEX‬؛‬

‫‪2.9‬ﻟﻐﺘﺎﻥ ﺩﻳﻨﺎﻣﻴﻜﻴﺘﺎﻥ ﻣﺒﻜﺮﺗﺎﻥ‪ APL :‬ﻭ ‪SNOBOL‬‬


‫ﻳﺨﺘﻠﻒﻫﻴﻜﻞ ﻫﺬﺍ ﺍﻟﻘﺴﻢ ﻋﻦ ﻫﻴﻜﻞ ﺍﻷﻗﺴﺎﻡ ﺍﻷﺧﺮﻯ ﻷﻥ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻫﻨﺎ‬
‫ﻣﺨﺘﻠﻔﺔﺟﺪﺍً‪ .‬ﻟﻢ ﻳﻜﻦ ﻟﻜﻞ ﻣﻦ ‪ APL‬ﻭ ‪ SNOBOL‬ﺗﺄﺛﻴﺮ ﻛﺒﻴﺮ ﻋﻠﻰ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺴﺎﺉﺪﺓ ﻓﻲ ﻭﻗﺖ‬
‫ﻻﺣﻖ‪9.‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺑﻌﺾ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﺜﻴﺮﺓ ﻟﻼﻫﺘﻤﺎﻡ ﻟـ ‪ APL‬ﻻﺣﻘﺎً ﻓﻲ ﺍﻟﻜﺘﺎﺏ‪.‬‬

‫ﻓﻲﺍﻟﻤﻈﻬﺮ ﻭﺍﻟﻐﺮﺽ ‪ ،‬ﺗﺨﺘﻠﻒ ‪ APL‬ﻭ ‪ SNOBOL‬ﺗﻤﺎﻣﺎً‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻓﺈﻧﻬﻢ ﻳﺘﺸﺎﺭﻛﻮﻥ ﻓﻲ‬
‫ﺧﺎﺻﻴﺘﻴﻦﺃﺳﺎﺳﻴﺘﻴﻦ‪ :‬ﺍﻟﻜﺘﺎﺑﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﻭﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ‪ .‬ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻓﻲ‬
‫ﻛﻠﺘﺎﺍﻟﻠﻐﺘﻴﻦ ﻏﻴﺮ ﻣﻄﺒﻌﻴﺔ ﻓﻲ ﺍﻷﺳﺎﺱ‪ .‬ﻳﻜﺘﺴﺐ ﺍﻟﻤﺘﻐﻴﺮ ﻧﻮﻋﺎً ﻋﻨﺪ ﺗﻌﻴﻴﻦ ﻗﻴﻤﺔ ﻟﻪ ‪ ،‬ﻭﻓﻲ ﺫﻟﻚ‬
‫ﺍﻟﻮﻗﺖﻳﻔﺘﺮﺽ ﻧﻮﻉ ﺍﻟﻘﻴﻤﺔ ﺍﻟﻤﻌﻴﻨﺔ‪ .‬ﻳﺘﻢ ﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ ﻟﻠﻤﺘﻐﻴﺮ ﻓﻘﻂ ﻋﻨﺪﻣﺎ ﻳﺘﻢ ﺗﻌﻴﻴﻦ‬
‫ﻗﻴﻤﺔﻟﻪ ‪ ،‬ﻷﻧﻪ ﻗﺒﻞ ﺫﻟﻚ ﻻ ﺗﻮﺟﺪ ﻃﺮﻳﻘﺔ ﻟﻤﻌﺮﻓﺔ ﻣﻘﺪﺍﺭ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﻤﻄﻠﻮﺏ‪.‬‬

‫‪2.9.1‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ‪APL‬‬


‫ﺗﻢﺗﺼﻤﻴﻢ (‪ APL )Brown et al. ، 1988‬ﻓﻲ ﺣﻮﺍﻟﻲ ﻋﺎﻡ ‪ 1960‬ﺑﻮﺍﺳﻄﺔ ‪E. Iverson‬‬
‫‪ Kenneth‬ﻓﻲ ﺷﺮﻛﺔ ‪ .IBM‬ﻟﻢ ﻳﺘﻢ ﺗﺼﻤﻴﻤﻬﺎ ﻓﻲ ﺍﻷﺻﻞ ﻟﺘﻜﻮﻥ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﻄﺒﻘﺔ ‪ ،‬ﺑﻞ ﻛﺎﻥ‬
‫ﺍﻟﻐﺮﺽﻣﻨﻬﺎ ﺃﻥ ﺗﻜﻮﻥ ﻭﺳﻴﻠﺔ ﻟﻮﺻﻒ ﺑﻨﻴﺔ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‪.‬‬

‫‪.9‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻟﺪﻳﻬﻢ ﺑﻌﺾ ﺍﻟﺘﺄﺛﻴﺮ ﻋﻠﻰ ﺑﻌﺾ ﺍﻟﻠﻐﺎﺕ ﻏﻴﺮ ﺍﻟﺮﺉﻴﺴﻴﺔ )‪ J‬ﻳﻌﺘﻤﺪ ﻋﻠﻰ ‪ APL ، ICON‬ﻳﻌﺘﻤﺪ ﻋﻠﻰ‬
‫‪ ، SNOBOL‬ﻭ ‪ AWK‬ﻳﻌﺘﻤﺪ ﺟﺰﺉﻴﺎً ﻋﻠﻰ ‪.(SNOBOL‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪72‬‬

‫ﺗﻢﻭﺻﻒ ‪ APL‬ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ ﺍﻟﻜﺘﺎﺏ ﺍﻟﺬﻱ ﺣﺼﻠﺖ ﻣﻨﻪ ﻋﻠﻰ ﺍﺳﻤﻪ ‪،‬ﻟﻐﺔ ﺑﺮﻣﺠﺔ)ﺍﻳﻔﺮﺳﻮﻥ ‪،‬‬
‫‪ .(1962‬ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ ‪ ،‬ﺗﻢ ﺗﻄﻮﻳﺮ ﺃﻭﻝ ﺗﻄﺒﻴﻖ ﻟـ ‪ APL‬ﻓﻲ ﺷﺮﻛﺔ ‪.IBM‬‬

‫ﻳﺤﺘﻮﻱ‪ APL‬ﻋﻠﻰ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ﺍﻷﻗﻮﻳﺎء ﺍﻟﻤﺤﺪﺩﻳﻦ ﺑﻌﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺮﻣﻮﺯ ‪ ،‬ﻣﻤﺎ‬
‫ﺧﻠﻖﻣﺸﻜﻠﺔ ﻟﻠﻤﻨﻔﺬﻳﻦ‪ .‬ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ‪ ،‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ‪ APL‬ﻣﻦ ﺧﻼﻝ ﻣﺤﻄﺎﺕ ﻃﺒﺎﻋﺔ ‪.IBM‬‬
‫ﺗﺤﺘﻮﻱﻫﺬﻩ ﺍﻟﻤﺤﻄﺎﺕ ﻋﻠﻰ ﻛﺮﺍﺕ ﻃﺒﺎﻋﺔ ﺧﺎﺻﺔ ﺗﻮﻓﺮ ﻣﺠﻤﻮﻋﺔ ﺍﻷﺣﺮﻑ ﺍﻟﻔﺮﺩﻳﺔ ﺍﻟﺘﻲ ﺗﺘﻄﻠﺒﻬﺎ‬
‫ﺍﻟﻠﻐﺔ‪.‬ﺃﺣﺪ ﺃﺳﺒﺎﺏ ﺍﺣﺘﻮﺍء ‪ APL‬ﻋﻠﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ﻫﻮ ﺃﻧﻪ ﻳﻮﻓﺮ ﻋﺪﺩﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﻋﻤﻠﻴﺎﺕ‬
‫ﺍﻟﻮﺣﺪﺓﻋﻠﻰ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻳﺘﻢ ﺗﺒﺪﻳﻞ ﺃﻱ ﻣﺼﻔﻮﻓﺔ ﺑﻌﺎﻣﻞ ﺗﺸﻐﻴﻞ ﻭﺍﺣﺪ‪.‬‬
‫ﺗﻮﻓﺮﺍﻟﻤﺠﻤﻮﻋﺔ ﺍﻟﻜﺒﻴﺮﺓ ﻣﻦ ﺍﻟﻤﺸﻐﻠﻴﻦ ﺗﻌﺒﻴﺮﺍً ﻋﺎﻟﻴﺎً ﺟﺪﺍً ﻭﻟﻜﻨﻬﺎ ﺗﺠﻌﻞ ﻣﻦ ﺍﻟﺼﻌﺐ ﺃﻳﻀﺎً ﻗﺮﺍءﺓ‬
‫ﺑﺮﺍﻣﺞ‪ .APL‬ﻟﺬﻟﻚ ‪ ،‬ﻳﻌﺘﻘﺪ ﺍﻟﻨﺎﺱ ﺃﻥ ‪ APL‬ﻛﻠﻐﺔ ﺗﺴﺘﺨﺪﻡ ﺑﺸﻜﻞ ﺃﻓﻀﻞ ﻓﻲ ﺍﻟﺒﺮﻣﺠﺔ "ﺍﻟﻤﻬﻤﻠﺔ"‬
‫‪.‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺇﻣﻜﺎﻧﻴﺔ ﻛﺘﺎﺑﺔ ﺍﻟﺒﺮﺍﻣﺞ ﺑﺴﺮﻋﺔ ‪ ،‬ﺇﻻ ﺃﻧﻪ ﻳﺠﺐ ﺍﻟﺘﺨﻠﺺ ﻣﻨﻬﺎ ﺑﻌﺪ ﺍﻻﺳﺘﺨﺪﺍﻡ ﻧﻈﺮﺍً‬
‫ﻟﺼﻌﻮﺑﺔﺻﻴﺎﻧﺘﻬﺎ‪.‬‬

‫ﻛﺎﻥ‪ APL‬ﻣﻮﺟﻮﺩﺍً ﻣﻨﺬ ﻣﺎ ﻳﻘﺮﺏ ﻣﻦ ‪ 50‬ﻋﺎﻣﺎً ﻭﻻ ﻳﺰﺍﻝ ﻳﺴﺘﺨﺪﻡ ﺣﺘﻰ ﺍﻟﻴﻮﻡ ‪ ،‬ﻭﺇﻥ ﻟﻢ ﻳﻜﻦ‬
‫ﻋﻠﻰﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻟﻢ ﻳﺘﻐﻴﺮ ﻛﺜﻴﺮﺍً ﻋﻠﻰ ﻣﺪﺍﺭ ﺣﻴﺎﺗﻪ‪.‬‬

‫‪2.9.2‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ﺳﻨﻮﺑﻮﻝ‬


‫ﺗﻢﺗﺼﻤﻴﻢ ‪) SNOBOL‬ﻳﻨُﻄﻖ "ﻛﺮﺓ ﺍﻟﺜﻠﺞ" ؛ ‪ (Griswold et al. ، 1971‬ﻓﻲ ﺃﻭﺍﺉﻞ‬
‫ﺍﻟﺴﺘﻴﻨﻴﺎﺕﻣﻦ ﻗﺒﻞ ﺛﻼﺛﺔ ﺃﺷﺨﺎﺹ ﻓﻲ ﻣﺨﺘﺒﺮﺍﺕ ﺑﻴﻞ‪ DJ Farber :‬ﻭ ‪ RE Griswold‬ﻭ (‬
‫‪ .IP Polonsky )Farber et al. ، 1964‬ﺗﻢ ﺗﺼﻤﻴﻤﻪ ﺧﺼﻴﺼﺎً ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻨﺼﻮﺹ‪ .‬ﻗﻠﺐ‬
‫‪ SNOBOL‬ﻋﺒﺎﺭﺓ ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻘﻮﻳﺔ ﻟﻤﻄﺎﺑﻘﺔ ﻧﻤﻂ ﺍﻟﺴﻠﺴﻠﺔ‪ .‬ﻛﺎﻥ ﺃﺣﺪ‬
‫ﺍﻟﺘﻄﺒﻴﻘﺎﺕﺍﻟﻤﺒﻜﺮﺓ ﻟـ ‪ SNOBOL‬ﻫﻮ ﻛﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﺗﺤﺮﻳﺮ ﺍﻟﻨﺼﻮﺹ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ﺍﻟﻄﺒﻴﻌﺔ‬
‫ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔﻟـ ‪ SNOBOL‬ﺗﺠﻌﻠﻪ ﺃﺑﻄﺄ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺒﺪﻳﻠﺔ ‪ ،‬ﻟﻢ ﻳﻌﺪ ﻳﺴُﺘﺨﺪﻡ ﻟﻤﺜﻞ ﻫﺬﻩ ﺍﻟﺒﺮﺍﻣﺞ‪.‬‬
‫ﻭﻣﻊﺫﻟﻚ ‪ ،‬ﻻ ﺗﺰﺍﻝ ‪ SNOBOL‬ﻟﻐﺔ ﺣﻴﺔ ﻭﻣﺪﻋﻮﻣﺔ ﺗﺴُﺘﺨﺪﻡ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﻣﻬﺎﻡ‬
‫ﻣﻌﺎﻟﺠﺔﺍﻟﻨﺼﻮﺹ ﻓﻲ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﻣﺠﺎﻻﺕ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﻤﺨﺘﻠﻔﺔ‪.‬‬

‫‪2.10‬ﺑﺪﺍﻳﺎﺕ ﺍﺳﺘﺨﺮﺍﺝ ﺍﻟﺒﻴﺎﻧﺎﺕ‪SIMULA 67 :‬‬


‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ‪ SIMULA 67‬ﻟﻢ ﺗﺤﻘﻖ ﺍﺳﺘﺨﺪﺍﻣﺎً ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﺃﺑﺪﺍً ﻭﻛﺎﻥ ﻟﻬﺎ ﺗﺄﺛﻴﺮ ﺿﺉﻴﻞ‬
‫ﻋﻠﻰﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻭﺍﻟﺤﻮﺳﺒﺔ ﻓﻲ ﻭﻗﺘﻬﺎ ‪ ،‬ﺇﻻ ﺃﻥ ﺑﻌﺾ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺘﻲ ﻗﺪﻣﺘﻬﺎ ﺗﺠﻌﻠﻬﺎ ﻣﻬﻤﺔ ﻣﻦ‬
‫ﺍﻟﻨﺎﺣﻴﺔﺍﻟﺘﺎﺭﻳﺨﻴﺔ‪.‬‬

‫‪2.10.1‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﻃﻮﺭﺍﻟﻨﺮﻭﻳﺠﻴﺎﻥ ﻛﺮﻳﺴﺘﻴﻦ ﻧﻴﺠﺎﺭﺩ ﻭﺃﻭﻟﻲ ﻳﻮﻫﺎﻥ ﺩﺍﻝ ﻟﻐﺔ ‪ SIMULA I‬ﺑﻴﻦ ﻋﺎﻣﻲ ‪ 1962‬ﻭ ‪1964‬‬
‫ﻓﻲﻣﺮﻛﺰ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﻨﺮﻭﻳﺠﻲ )‪ (NCC‬ﻓﻲ ﺃﻭﺳﻠﻮ‪ .‬ﻛﺎﻧﻮﺍ ﻣﻬﺘﻤﻴﻦ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ ﺑﺎﺳﺘﺨﺪﺍﻡ‬
‫ﺃﺟﻬﺰﺓﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻟﻠﻤﺤﺎﻛﺎﺓ ﻭﻟﻜﻨﻬﻢ ﻋﻤﻠﻮﺍ ﺃﻳﻀﺎً ﻓﻲ ﺃﺑﺤﺎﺙ ﺍﻟﻌﻤﻠﻴﺎﺕ‪ .‬ﺗﻢ ﺗﺼﻤﻴﻢ ‪SIMULA I‬‬
‫ﺣﺼﺮﻳﺎًﻟﻤﺤﺎﻛﺎﺓ ﺍﻟﻨﻈﺎﻡ ﻭﺗﻢ ﺗﻨﻔﻴﺬﻩ ﻷﻭﻝ ﻣﺮﺓ ﻓﻲ ﺃﻭﺍﺧﺮ ﻋﺎﻡ ‪ 1964‬ﻋﻠﻰ ﻛﻤﺒﻴﻮﺗﺮ ‪1107‬‬
‫‪.UNIVAC‬‬
‫‪73‬‬ ‫‪2.11‬ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﺘﻌﺎﻣﺪ‪ALGOL 68 :‬‬

‫ﺑﻤﺠﺮﺩﺍﻛﺘﻤﺎﻝ ﺗﻨﻔﻴﺬ ‪ ، SIMULA I‬ﺑﺪﺃ ‪ Nygaard‬ﻭ ‪ Dahl‬ﺟﻬﻮﺩﺍً ﻟﺘﻮﺳﻴﻊ ﺍﻟﻠﻐﺔ ﻋﻦ‬


‫ﻃﺮﻳﻖﺇﺿﺎﻓﺔ ﻣﻴﺰﺍﺕ ﺟﺪﻳﺪﺓ ﻭﺗﻌﺪﻳﻞ ﺑﻌﺾ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺤﺎﻟﻴﺔ ﻟﺠﻌﻞ ﺍﻟﻠﻐﺔ ﻣﻔﻴﺪﺓ ﻟﻠﺘﻄﺒﻴﻘﺎﺕ‬
‫ﺫﺍﺕﺍﻷﻏﺮﺍﺽ ﺍﻟﻌﺎﻣﺔ‪ .‬ﻛﺎﻧﺖ ﻧﺘﻴﺠﺔ ﻫﺬﺍ ﺍﻟﻌﻤﻞ ‪ ، SIMULA 67‬ﺍﻟﺬﻱ ﺗﻢ ﺗﻘﺪﻳﻢ ﺗﺼﻤﻴﻤﻪ ﻷﻭﻝ‬
‫ﻣﺮﺓﻟﻠﺠﻤﻬﻮﺭ ﻓﻲ ﻣﺎﺭﺱ ‪ .(Dahl and Nygaard ، 1967) 1967‬ﺳﻨﻨﺎﻗﺶ ‪SIMULA 67‬‬
‫ﻓﻘﻂ ‪،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺑﻌﺾ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﻬﻤﺔ ﻓﻲ ‪ SIMULA 67‬ﻣﻮﺟﻮﺩﺓ ﺃﻳﻀﺎً ﻓﻲ ‪I‬‬
‫‪.SIMULA‬‬

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


‫ﻟﺘﻄﺒﻴﻘﺎﺕﺍﻟﻤﺤﺎﻛﺎﺓ ﻫﻮ ﺗﺼﻤﻴﻢ ﺑﺮﺍﻣﺠﻬﺎ ﺍﻟﻔﺮﻋﻴﺔ‪ .‬ﺗﺘﻄﻠﺐ ﺍﻟﻤﺤﺎﻛﺎﺓ ﺑﺮﺍﻣﺞ ﻓﺮﻋﻴﺔ ﻳﺴُﻤﺢ ﻟﻬﺎ‬
‫ﺑﺈﻋﺎﺩﺓﺍﻟﺘﺸﻐﻴﻞ ﻓﻲ ﺍﻟﻤﻮﺿﻊ ﺍﻟﺬﻱ ﺗﻮﻗﻔﺖ ﻓﻴﻪ ﺳﺎﺑﻘﺎً‪ .‬ﺗﻌُﺮﻑ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻣﻊ ﻫﺬﺍ ﺍﻟﻨﻮﻉ‬
‫ﻣﻦﺍﻟﺘﺤﻜﻢ ﺑﺎﺳﻢ (ﻭﻟﻐﺎﺕ ﺃﺧﺮﻯ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ) ‪ ALGOL 60‬ﻳﺄﺧﺬ ﻛﻞ ﻣﻦ ﺑﻨﻴﺔ ﺍﻟﻜﺘﻠﺔ‬
‫ﻭﺑﻴﺎﻧﺎﺕﺍﻟﺘﺤﻜﻢ ﻣﻦ ﺗﻠﻚ ﺍﻟﻠﻐﺔ‪ .‬ﻛﺎﻥ ﺍﻟﻨﻘﺺ ﺍﻷﺳﺎﺳﻲ ﻓﻲ ‪ ALGOL 60 ،‬ﻫﻮ ﺍﻣﺘﺪﺍﺩ ﻟـ ‪67‬‬
‫‪SIMULA‬ﻛﻮﺭﻭﺗﻴﻦﻷﻥ ﺍﻟﻤﺘﺼﻞ ﻭﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻤﺴﻤﺎﺓ ﻟﻬﺎ ﻋﻼﻗﺔ ﻣﺘﺴﺎﻭﻳﺔ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﻣﻊ‬
‫ﺑﻌﻀﻬﺎﺍﻟﺒﻌﺾ ‪ ،‬ﺑﺪﻻ ًﻣﻦ ﻋﻼﻗﺔ ﺍﻟﺴﻴﺪ ‪ /‬ﺍﻟﻌﺒﺪ ﺍﻟﺼﺎﺭﻣﺔ ﺍﻟﺘﻲ ﻟﺪﻳﻬﻢ ﻓﻲ ﻣﻌﻈﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ‪.‬‬

‫ﻟﺘﻮﻓﻴﺮﺍﻟﺪﻋﻢ ﻟﻠﻜﻮﺭﻭﺗﻴﻦ ﻓﻲ ‪ ، SIMULA 67‬ﺗﻢ ﺗﻄﻮﻳﺮ ﺑﻨﻴﺔ ﺍﻟﻔﺼﻞ‪ .‬ﻛﺎﻥ ﻫﺬﺍ ﺗﻄﻮﺭﺍً ﻣﻬﻤﺎً‬
‫ﻷﻥﻣﻔﻬﻮﻡ ﺗﺠﺮﻳﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺑﺪﺃ ﺑﻪ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻳﻮﻓﺮ ﺗﺠﺮﻳﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻷﺳﺎﺱ ﻟﻠﺒﺮﻣﺠﺔ‬
‫ﺍﻟﻤﻮﺟﻬﺔﻟﻠﻜﺎﺉﻨﺎﺕ‪.‬‬

‫ﻣﻦﺍﻟﻤﺜﻴﺮ ﻟﻼﻫﺘﻤﺎﻡ ﺃﻥ ﻧﻼﺣﻆ ﺃﻥ ﺍﻟﻤﻔﻬﻮﻡ ﺍﻟﻤﻬﻢ ﻻﺳﺘﺨﺮﺍﺝ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻟﻢ ﻳﺘﻢ ﺗﻄﻮﻳﺮﻩ‬


‫ﻭﻧﺴُﺐﺇﻟﻰ ﺑﻨﻴﺔ ﺍﻟﻔﺼﻞ ﺣﺘﻰ ﻋﺎﻡ ‪ ، 1972‬ﻋﻨﺪﻣﺎ ﺃﺩﺭﻙ (‪ Hoare )1972‬ﺍﻻﺗﺼﺎﻝ‪.‬‬

‫‪2.11‬ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﻤﺘﻌﺎﻣﺪ‪ALGOL 68 :‬‬


‫ﻛﺎﻥ‪ ALGOL 68‬ﻣﺼﺪﺭﺍً ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﺍﻷﻓﻜﺎﺭ ﺍﻟﺠﺪﻳﺪﺓ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻢ ﺍﻋﺘﻤﺎﺩ‬
‫ﺑﻌﻀﻬﺎﻻﺣﻘﺎً ﻣﻦ ﻗﺒﻞ ﻟﻐﺎﺕ ﺃﺧﺮﻯ‪ .‬ﻧﻘﻮﻡ ﺑﺘﻀﻤﻴﻨﻬﺎ ﻫﻨﺎ ﻟﻬﺬﺍ ﺍﻟﺴﺒﺐ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﻟﻢ‬
‫ﺗﺤﻘﻖﺍﺳﺘﺨﺪﺍﻣﺎً ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻓﻲ ﺃﻭﺭﻭﺑﺎ ﺃﻭ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ‪.‬‬

‫‪2.11.1‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﻟﻢﻳﻨﺘﻪ ﺗﻄﻮﻳﺮ ﻋﺎﺉﻠﺔ ‪ ALGOL‬ﻋﻨﺪﻣﺎ ﻇﻬﺮ ﺍﻟﺘﻘﺮﻳﺮ ﺍﻟﻤﻨﻘﺢ ﻋﻦ ‪ ALGOL 60‬ﻓﻲ ﻋﺎﻡ ‪، 1962‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﻣﺮﻭﺭ ﺳﺖ ﺳﻨﻮﺍﺕ ﺣﺘﻰ ﺗﻢ ﻧﺸﺮ ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﺘﺎﻟﻲ ﻟﻠﺘﺼﻤﻴﻢ‪ .‬ﻛﺎﻧﺖ ﺍﻟﻠﻐﺔ ﺍﻟﻨﺎﺗﺠﺔ ‪( ،‬‬
‫‪ ، ALGOL 68 )van Wijngaarden et al. ، 1969‬ﻣﺨﺘﻠﻔﺔ ﺗﻤﺎﻣﺎً ﻋﻦ ﺳﺎﺑﻘﺘﻬﺎ‪.‬‬

‫ﻛﺎﻥﺃﺣﺪ ﺃﻛﺜﺮ ﺍﻻﺑﺘﻜﺎﺭﺍﺕ ﺇﺛﺎﺭﺓ ﻟﻼﻫﺘﻤﺎﻡ ﻓﻲ ‪ ALGOL 68‬ﺃﺣﺪ ﻣﻌﺎﻳﻴﺮ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﺳﺎﺳﻴﺔ‪:‬‬
‫ﺍﻟﺘﻌﺎﻣﺪ‪.‬ﺗﺬﻛﺮ ﻣﻨﺎﻗﺸﺘﻨﺎ ﺣﻮﻝ ﺍﻟﺘﻌﺎﻣﺪ ﻓﻲ ﺍﻟﻔﺼﻞ ‪ .1‬ﺃﺩﻯ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻌﺎﻣﺪ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ‬
‫ﺍﻟﻤﻴﺰﺍﺕﺍﻟﻤﺒﺘﻜﺮﺓ ﻟـ ‪ ، ALGOL 68‬ﺃﺣﺪﻫﺎ ﻣﻮﺻﻮﻑ ﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻟﺘﺎﻟﻲ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪74‬‬

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


‫ﻛﺎﻧﺖﺇﺣﺪﻯ ﺍﻟﻨﺘﺎﺉﺞ ﺍﻟﻤﻬﻤﺔ ﻟﻠﺘﻌﺎﻣﺪ ﻓﻲ ‪ ALGOL 68‬ﺗﻀﻤﻴﻨﻪ ﻷﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ‬
‫ﻗﺒﻞﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﺗﻀﻤﻨﺖ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺴﺎﺑﻘﺔ ‪ ،‬ﻣﺜﻞ ﻓﻮﺭﺗﺮﺍﻥ ‪ ،‬ﻋﺪﺩﺍً ﻗﻠﻴﻼ ًﻣﻦ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﺍﻷﺳﺎﺳﻴﺔ‪.‬ﺗﻀﻤﻨﺖ ‪ PL / I‬ﻋﺪﺩﺍً ﺃﻛﺒﺮ ﻣﻦ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻣﻤﺎ ﺟﻌﻞ ﺍﻟﺘﻌﻠﻢ ﺃﻛﺜﺮ ﺻﻌﻮﺑﺔ‬
‫ﻭﺻﻌﻮﺑﺔﻓﻲ ﺍﻟﺘﻨﻔﻴﺬ ‪ ،‬ﻭﻟﻜﻦ ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻧﻪ ﻻ ﻳﻤﻜﻦ ﺃﻥ ﻳﻮﻓﺮ ﺑﻨﻴﺔ ﺑﻴﺎﻧﺎﺕ ﻣﻨﺎﺳﺒﺔ ﻟﻜﻞ ﺣﺎﺟﺔ‪.‬‬

‫ﻛﺎﻥﻧﻬﺞ ‪ ALGOL 68‬ﻓﻲ ﻫﻴﺎﻛﻞ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻫﻮ ﺗﻮﻓﻴﺮ ﻋﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﺍﻷﻧﻮﺍﻉ ﻭﺍﻟﻬﻴﺎﻛﻞ‬
‫ﺍﻟﺒﺪﺍﺉﻴﺔﻭﺍﻟﺴﻤﺎﺡ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺑﺪﻣﺞ ﺗﻠﻚ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻷﻭﻟﻴﺔ ﻓﻲ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﻬﻴﺎﻛﻞ ﺍﻟﻤﺨﺘﻠﻔﺔ‪.‬‬
‫ﺗﻢﻧﻘﻞ ﻫﺬﺍ ﺍﻟﺤﻜﻢ ﻷﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﺇﻟﻰ ﺟﻤﻴﻊ ﺍﻟﻠﻐﺎﺕ‬
‫ﺍﻟﻀﺮﻭﺭﻳﺔﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﻤﺼﻤﻤﺔ ﻣﻨﺬ ﺫﻟﻚ ﺍﻟﺤﻴﻦ‪ .‬ﺗﻌﺘﺒﺮ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻡﺫﺍﺕ ﻗﻴﻤﺔ ﻷﻧﻬﺎ ﺗﺴﻤﺢ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺑﺘﺼﻤﻴﻢ ﺗﺠﺮﻳﺪﺍﺕ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺘﻲ ﺗﻨﺎﺳﺐ‬
‫ﻣﺸﺎﻛﻞﻣﻌﻴﻨﺔ ﺑﺸﻜﻞ ﻭﺛﻴﻖ ﻟﻠﻐﺎﻳﺔ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺟﻤﻴﻊ ﺟﻮﺍﻧﺐ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.6‬‬

‫ﻛﺄﻭﻝﻣﺮﺓ ﺃﺧﺮﻯ ﻓﻲ ﻣﺠﺎﻝ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ‪ ،‬ﻗﺪﻡ ‪ ALGOL 68‬ﻧﻮﻉ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‬


‫ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔﺍﻟﺘﻲ ﺳﻴﺘﻢ ﺗﺴﻤﻴﺘﻬﺎﻛﻮﻣﺔ ﺩﻳﻨﺎﻣﻴﻜﻴﺔ ﺿﻤﻨﻴﺔﻓﻲ ﺍﻟﻔﺼﻞ ‪ .5‬ﺍﻟﻤﺼﻔﻮﻓﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ‬
‫ﻫﻲﺍﻟﺘﻲ ﻻ ﻳﺤﺪﺩ ﻓﻴﻬﺎ ﺍﻹﻋﻼﻥ ﺣﺪﻭﺩﺍً ﻣﻨﺨﻔﻀﺔ‪ .‬ﺗﺆﺩﻱ ﺍﻟﺘﻌﻴﻴﻨﺎﺕ ﺇﻟﻰ ﺻﻔﻴﻒ ﺩﻳﻨﺎﻣﻴﻜﻲ ﺇﻟﻰ‬
‫ﺗﺨﺼﻴﺺﻣﺴﺎﺣﺔ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﻤﻄﻠﻮﺑﺔ‪ .‬ﻓﻲ ‪ ، ALGOL 68‬ﺗﺴﻤﻰ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔﺛﻨﻲ‬
‫ﺍﻟﻤﺼﻔﻮﻓﺎﺕ‪.‬‬

‫‪2.11.3‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻳﺘﻀﻤﻦ‪ ALGOL 68‬ﻋﺪﺩﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺘﻲ ﻟﻢ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﻣﺴﺒﻘﺎً‪ .‬ﻛﺎﻥ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ‬
‫ﻟﻠﺘﻌﺎﻣﺪ ‪،‬ﺍﻟﺬﻱ ﻗﺪ ﻳﺠﺎﺩﻝ ﺍﻟﺒﻌﺾ ﺃﻧﻪ ﻣﺒﺎﻟﻎ ﻓﻴﻪ ‪ ،‬ﻣﻊ ﺫﻟﻚ ﺛﻮﺭﻳﺎً‪.‬‬

‫ﻛﺮﺭ‪ ALGOL 68‬ﺇﺣﺪﻯ ﺧﻄﺎﻳﺎ ‪ ، ALGOL 60‬ﻭﻛﺎﻥ ﻋﺎﻣﻼ ًﻣﻬﻤﺎً ﻓﻲ ﺷﻌﺒﻴﺘﻪ ﺍﻟﻤﺤﺪﻭﺩﺓ‪ .‬ﺗﻢ‬
‫ﻭﺻﻒﺍﻟﻠﻐﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ﻣﻌﺪﻧﻴﺔ ﺃﻧﻴﻘﺔ ﻭﻣﺨﺘﺼﺮﺓ ﻭﻟﻜﻦ ﺃﻳﻀﺎً ﻏﻴﺮ ﻣﻌﺮﻭﻓﺔ‪ .‬ﻗﺒﻞ ﺃﻥ ﻳﺘﻤﻜﻦ‬
‫ﺍﻟﻤﺮءﻣﻦ ﻗﺮﺍءﺓ ﻭﺛﻴﻘﺔ ﻭﺻﻒ ﺍﻟﻠﻐﺔ )‪ ، (van Wijngaarden et al. ، 1969‬ﻛﺎﻥ ﻋﻠﻴﻪ ﺃﻥ‬
‫ﻳﺘﻌﻠﻢﺍﻟﻠﻐﺔ ﺍﻟﻤﻌﺪﻧﻴﺔ ﺍﻟﺠﺪﻳﺪﺓ ‪ ،‬ﺍﻟﻤﺴﻤﺎﺓ ﻗﻮﺍﻋﺪ ﻗﻮﺍﻋﺪ ﻓﺎﻥ ‪ ، Wijngaarden‬ﻭﺍﻟﺘﻲ ﻛﺎﻧﺖ ﺃﻛﺜﺮ‬
‫ﺗﻌﻘﻴﺪﺍًﺑﻜﺜﻴﺮ ﻣﻦ ‪ .BNF‬ﻟﺠﻌﻞ ﺍﻷﻣﻮﺭ ﺃﺳﻮﺃ ‪ ،‬ﺍﺧﺘﺮﻉ ﺍﻟﻤﺼﻤﻤﻮﻥ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻜﻠﻤﺎﺕ ﻟﺸﺮﺡ‬
‫ﺍﻟﻘﻮﺍﻋﺪﻭﺍﻟﻠﻐﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﺗﻢ ﺍﺳﺘﺪﻋﺎء ﺍﻟﻜﻠﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔﺍﻟﻤﺆﺷﺮﺍﺕﺗﻢ ﺍﺳﺘﺪﻋﺎء‬
‫ﺍﺳﺘﺨﺮﺍﺝﺍﻟﺴﻠﺴﻠﺔ ﺍﻟﻔﺮﻋﻴﺔﺯﺭﻛﺸﺔ‪،‬ﻭﻛﺎﻧﺖ ﻋﻤﻠﻴﺔ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﺗﺴﻤﻰ ﺃﺍﻹﻛﺮﺍﻩ ﻋﻠﻰ‬
‫ﺍﻹﻛﺮﺍﻩ ‪ ،‬ﺍﻟﺬﻱ ﻗﺪ ﻳﻜﻮﻥﻭﺩﻳﻊ ‪ ،‬ﺣﺎﺯﻡ ‪،‬ﺃﻭ ﺃﻱ ﺷﻲء ﺁﺧﺮ‪.‬‬

‫ﻣﻦﺍﻟﻄﺒﻴﻌﻲ ﻣﻘﺎﺭﻧﺔ ﺗﺼﻤﻴﻢ ‪ PL / I‬ﻣﻊ ﺗﺼﻤﻴﻢ ‪ ، ALGOL 68‬ﻷﻧﻬﻤﺎ ﻟﻢ ﻳﺒﺪﻭﺍ ﺳﻮﻯ‬


‫ﺑﻀﻊﺳﻨﻮﺍﺕ‪ .‬ﺣﻘﻖ ‪ ALGOL 68‬ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﻣﻦ ﺧﻼﻝ ﻣﺒﺪﺃ ﺍﻟﺘﻌﺎﻣﺪ‪ :‬ﺑﻌﺾ ﺍﻟﻤﻔﺎﻫﻴﻢ‬
‫ﺍﻟﺒﺪﺍﺉﻴﺔﻭﺍﻻﺳﺘﺨﺪﺍﻡ ﻏﻴﺮ ﺍﻟﻤﻘﻴﺪ ﻟﺒﻌﺾ ﺍﻵﻟﻴﺎﺕ ﺍﻟﻤﺪﻣﺠﺔ‪ .‬ﺣﻘﻖ ‪ PL / I‬ﻗﺎﺑﻠﻴﺔ ﺍﻟﻜﺘﺎﺑﺔ ﻣﻦ‬
‫ﺧﻼﻝﺗﻀﻤﻴﻦ ﻋﺪﺩ ﻛﺒﻴﺮ ﻣﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﺍﻟﺜﺎﺑﺘﺔ‪ .‬ﻭﺳﻌﺖ ‪ ALGOL 68‬ﺍﻟﺒﺴﺎﻃﺔ ﺍﻷﻧﻴﻘﺔ ﻟـ ‪60‬‬
‫‪ ، ALGOL‬ﻓﻲ ﺣﻴﻦ ﺟﻤﻌﺖ ‪ PL / I‬ﺑﺒﺴﺎﻃﺔ ﻣﻴﺰﺍﺕ ﻋﺪﺓ ﻟﻐﺎﺕ ﻟﺘﺤﻘﻴﻖ ﺃﻫﺪﺍﻓﻬﺎ‪ .‬ﺑﺎﻟﻄﺒﻊ ‪،‬‬
‫ﻳﺠﺐﺃﻥ ﻧﺘﺬﻛﺮ ﺃﻥ ﺍﻟﻬﺪﻑ ﻣﻦ ‪ PL / I‬ﻛﺎﻥ ﺗﻮﻓﻴﺮ ﺃﺩﺍﺓ ﻣﻮﺣﺪﺓ ﻟﻔﺉﺔ ﻭﺍﺳﻌﺔ ﻣﻦ ﺍﻟﻤﺸﺎﻛﻞ ‪ ،‬ﻓﻲ‬
‫ﺣﻴﻦﺃﻥ ‪ ALGOL 68‬ﻛﺎﻥ ﻣﺴﺘﻬﺪﻓﺎً ﻟﻔﺉﺔ ﻭﺍﺣﺪﺓ‪ :‬ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻌﻠﻤﻴﺔ‪.‬‬

‫ﺣﻘﻘﺖ‪ PL / I‬ﻗﺒﻮﻻً ﺃﻛﺒﺮ ﺑﻜﺜﻴﺮ ﻣﻦ ‪ ، ALGOL 68‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﺇﻟﻰ ﺟﻬﻮﺩ‬
‫‪ IBM‬ﺍﻟﺘﺮﻭﻳﺠﻴﺔ ﻭﻣﺸﺎﻛﻞ ﺍﻟﻔﻬﻢ ﻭﺍﻟﺘﻨﻔﻴﺬ‬
‫‪75‬‬ ‫‪2.12‬ﺑﻌﺾ ﺍﻟﻤﺘﺤﺪﺭﻳﻦ ﺍﻷﻭﺍﺉﻞ ﻣﻦ ‪ALGOLs‬‬

‫‪.‬ﺑﻤﺜﻞﻫﺬﺍ ﺍﻟﻤﺘﺒﺮﻉ ‪ ALGOL 68‬ﻟﺘﻄﺒﻴﻘﻬﺎ ﻋﻠﻰ ﺑﻨﺎء ﻣﺘﺮﺟﻢ‪ .‬ﻟﻢ ﻳﺘﻤﺘﻊ ‪ IBM‬ﻛﺎﻥ ﻟﺪﻳﻪ ﻣﻮﺍﺭﺩ ‪/ I‬‬
‫‪ PL‬ﻛﺎﻥ ﺍﻟﺘﻨﻔﻴﺬ ﻣﺸﻜﻠﺔ ﺻﻌﺒﺔ ﻟﻜﻠﻴﻬﻤﺎ ‪ ،‬ﻭﻟﻜﻦ ‪ALGOL 68.‬‬

‫‪2.12‬ﺑﻌﺾ ﺍﻷﺣﻔﺎﺩ ﺍﻷﻭﺍﺉﻞ ﻣﻦ ‪ALGOLs‬‬


‫ﺗﺪﻳﻦﺟﻤﻴﻊ ﺍﻟﻠﻐﺎﺕ ﺍﻹﻟﺰﺍﻣﻴﺔ ﺑﺒﻌﺾ ﺗﺼﻤﻴﻤﻬﺎ ﻟـ ‪ ALGOL 60‬ﻭ ‪ /‬ﺃﻭ ‪ .ALGOL 68‬ﻳﻨﺎﻗﺶ ﻫﺬﺍ‬
‫ﺍﻟﻘﺴﻢﺑﻌﺾ ﺍﻟﻤﺘﺤﺪﺭﻳﻦ ﺍﻷﻭﺍﺉﻞ ﻟﻬﺬﻩ ﺍﻟﻠﻐﺎﺕ‪.‬‬

‫‪2.12.1‬ﺍﻟﺒﺴﺎﻃﺔ ﺣﺴﺐ ﺍﻟﺘﺼﻤﻴﻢ‪ :‬ﺑﺎﺳﻜﺎﻝ‬

‫‪2.12.1.1‬ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ‬
‫ﻛﺎﻥﻧﻴﻜﻼﻭﺱ ﻭﻳﺮﺙ )ﻳﻄُﻠﻖ ﻋﻠﻰ ﻭﻳﺮﺙ "ﻓﻴﺮﺕ"( ﻋﻀﻮﺍً ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻟﻌﻤﻞ ‪ 2.1‬ﺍﻟﺘﺎﺑﻌﺔ‬
‫ﻟﻼﺗﺤﺎﺩﺍﻟﺪﻭﻟﻲ ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ )‪ ، (IFIP‬ﻭﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻟﻤﻮﺍﺻﻠﺔ ﺗﻄﻮﻳﺮ ‪ ALGOL‬ﻓﻲ‬
‫ﻣﻨﺘﺼﻒﺍﻟﺴﺘﻴﻨﻴﺎﺕ‪ .‬ﻓﻲ ﺃﻏﺴﻄﺲ ‪ ، 1965‬ﺳﺎﻫﻢ ‪") Wirth and CAR‬ﺗﻮﻧﻲ"( ‪ Hoare‬ﻓﻲ‬
‫ﻫﺬﺍﺍﻟﺠﻬﺪ ﻣﻦ ﺧﻼﻝ ﺗﻘﺪﻳﻢ ﺍﻗﺘﺮﺍﺡ ﻣﺘﻮﺍﺿﻊ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﻟﻠﻤﺠﻤﻮﻋﺔ ﻹﺿﺎﻓﺎﺕ ﻭﺗﻌﺪﻳﻼﺕ ﻋﻠﻰ‬
‫‪) ALGOL60‬ﻭﻳﺮﺙ ﻭﻫﻮﺭ ‪ .(1966 ،‬ﺭﻓﻀﺖ ﻏﺎﻟﺒﻴﺔ ﺍﻟﻤﺠﻤﻮﻋﺔ ﺍﻻﻗﺘﺮﺍﺡ ﺑﺎﻋﺘﺒﺎﺭﻩ ﺗﺤﺴﻨﺎً ﺿﺉﻴﻼً‬
‫ﻟﻠﻐﺎﻳﺔﻣﻘﺎﺭﻧﺔ ﺑـ ‪ .ALGOL 60‬ﻭﺑﺪﻻ ًﻣﻦ ﺫﻟﻚ ‪ ،‬ﺗﻢ ﺗﻄﻮﻳﺮ ﻣﺮﺍﺟﻌﺔ ﺃﻛﺜﺮ ﺗﻌﻘﻴﺪﺍً ‪ ،‬ﻭﺍﻟﺘﻲ ﺃﺻﺒﺤﺖ‬
‫ﻓﻲﺍﻟﻨﻬﺎﻳﺔ ‪ .ALGOL 68‬ﻟﻢ ﻳﻌﺘﻘﺪ ﻭﻳﺮﺙ ‪ ،‬ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﻋﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﺃﻋﻀﺎء ﺍﻟﻤﺠﻤﻮﻋﺔ‬
‫ﺍﻵﺧﺮﻳﻦ ‪،‬ﺃﻥ ‪ ALGOL‬ﻛﺎﻥ ﻳﺠﺐ ﺇﺻﺪﺍﺭ ﺗﻘﺮﻳﺮ ‪ ، 68‬ﺑﻨﺎء ًﻋﻠﻰ ﺗﻌﻘﻴﺪ ﻛﻞ ﻣﻦ ﺍﻟﻠﻐﺔ ﻭﺍﻟﻠﻐﺔ‬
‫ﺍﻟﻤﻌﺪﻧﻴﺔﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﻮﺻﻔﻪ‪.‬‬

‫ﺗﻢﺗﺴﻤﻴﺔ ﺇﺻﺪﺍﺭ ‪ Wirth and Hoare‬ﻣﻦ ‪ ALGOL 60‬ﺑﺎﺳﻢ ‪ .ALGOL-W‬ﺗﻢ ﺗﻨﻔﻴﺬﻩ‬


‫ﻓﻲﺟﺎﻣﻌﺔ ﺳﺘﺎﻧﻔﻮﺭﺩ ﻭﺍﺳﺘﺨﺪﻡ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ ﻛﻮﺳﻴﻠﺔ ﺗﻌﻠﻴﻤﻴﺔ ‪ ،‬ﻭﻟﻜﻦ ﻓﻘﻂ ﻓﻲ ﻋﺪﺩ ﻗﻠﻴﻞ‬
‫ﻣﻦﺍﻟﺠﺎﻣﻌﺎﺕ‪ .‬ﻛﺎﻧﺖ ﺍﻟﻤﺴﺎﻫﻤﺎﺕ ﺍﻷﻭﻟﻴﺔ ﻟـ ‪ ALGOL-W‬ﻫﻲ ﻃﺮﻳﻘﺔ ﻧﺘﻴﺠﺔ ﺍﻟﻘﻴﻤﺔ ﻟﺘﻤﺮﻳﺮ‬
‫ﺍﻟﻤﻌﻠﻤﺎﺕﻭﻗﻀﻴﺔ‬
‫ﺑﻴﺎﻥﻟﻼﺧﺘﻴﺎﺭ ﻣﻦ ﻣﺘﻌﺪﺩ‪ .‬ﻃﺮﻳﻘﺔ ﺍﻟﻘﻴﻤﺔ ﻭﺍﻟﻨﺘﻴﺠﺔ ﻫﻲ ﺑﺪﻳﻞ ﻟﻄﺮﻳﻘﺔ ﺗﻤﺮﻳﺮ ﺍﻻﺳﻢ ﻣﻦ ‪60‬‬
‫‪ .ALGOL‬ﻛﻼﻫﻤﺎ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﻤﺎ ﻓﻲ ﺍﻟﻔﺼﻞ ‪ .9‬ﻭ‬
‫ﻗﻀﻴﺔﺍﻟﺒﻴﺎﻥ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻪ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.8‬‬
‫ﻛﺎﻥﺟﻬﺪ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻟﺮﺉﻴﺴﻲ ﺍﻟﺘﺎﻟﻲ ﻟﻮﻳﺮﺙ ‪ ،‬ﺍﻟﺬﻱ ﺍﻋﺘﻤﺪ ﻣﺮﺓ ﺃﺧﺮﻯ ﻋﻠﻰ ‪، ALGOL 60‬‬
‫ﻫﻮﺍﻷﻛﺜﺮ ﻧﺠﺎﺣﺎً‪ :‬ﺑﺎﺳﻜﺎﻝ‪10.‬ﻇﻬﺮ ﺍﻟﺘﻌﺮﻳﻒ ﺍﻷﺻﻠﻲ ﺍﻟﻤﻨﺸﻮﺭ ﻟﺒﺎﺳﻜﺎﻝ ﻓﻲ ﻋﺎﻡ ‪) 1971‬ﻭﻳﺮﺙ ‪،‬‬
‫‪ .(1971‬ﺗﻢ ﺗﻌﺪﻳﻞ ﻫﺬﺍ ﺍﻹﺻﺪﺍﺭ ﺇﻟﻰ ﺣﺪ ﻣﺎ ﻓﻲ ﻋﻤﻠﻴﺔ ﺍﻟﺘﻨﻔﻴﺬ ﻭﺗﻢ ﻭﺻﻔﻪ ﻓﻲ (‪.Wirth )1973‬‬
‫ﺍﻟﻤﻴﺰﺍﺕﺍﻟﺘﻲ ﺗﻨُﺴﺐ ﻏﺎﻟﺒﺎً ﺇﻟﻰ ﺑﺎﺳﻜﺎﻝ ﺟﺎءﺕ ﻓﻲ ﺍﻟﻮﺍﻗﻊ ﻣﻦ ﻟﻐﺎﺕ ﺳﺎﺑﻘﺔ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ‬
‫ﺍﻟﻤﺜﺎﻝ ‪،‬ﺗﻢ ﺗﻘﺪﻳﻢ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻌﺮﻓﺔ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻓﻲ ‪ ، ALGOL 68‬ﻭﻗﻀﻴﺔﺍﻟﺒﻴﺎﻥ‬
‫ﻓﻲ‪ ، ALGOL-W‬ﻭﺳﺠﻼﺕ ﺑﺎﺳﻜﺎﻝ ﻣﻤﺎﺛﻠﺔ ﻟﺘﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑﺴﺠﻼﺕ ‪ COBOL‬ﻭ ‪.PL / I‬‬

‫‪.10‬ﺳﻤﻲ ﺑﺎﺳﻜﺎﻝ ﻋﻠﻰ ﺍﺳﻢ ﺑﻠﻴﺰ ﺑﺎﺳﻜﺎﻝ ‪ ،‬ﻓﻴﻠﺴﻮﻑ ﻭﻋﺎﻟﻢ ﺭﻳﺎﺿﻴﺎﺕ ﻓﺮﻧﺴﻲ ﻣﻦ ﺍﻟﻘﺮﻥ ﺍﻟﺴﺎﺑﻊ ﻋﺸﺮ ﺍﺧﺘﺮﻉ ﺃﻭﻝ ﺁﻟﺔ‬
‫ﺇﺿﺎﻓﺔﻣﻴﻜﺎﻧﻴﻜﻴﺔ ﻋﺎﻡ ‪) 1642‬ﻣﻦ ﺑﻴﻦ ﺃﺷﻴﺎء ﺃﺧﺮﻯ(‪.‬‬
‫ﺗﻄﻮﺭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫ﺍﻟﻔﺼﻞ‪2‬‬ ‫‪76‬‬

‫‪2.12.1.2‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻛﺎﻥﺍﻟﺘﺄﺛﻴﺮ ﺍﻷﻛﺒﺮ ﻟﺒﺎﺳﻜﺎﻝ ﻋﻠﻰ ﺗﺪﺭﻳﺲ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﻓﻲ ﻋﺎﻡ ‪ ، 1970‬ﺗﻢ ﺗﻘﺪﻳﻢ ﻣﻌﻈﻢ ﻃﻼﺏ ﻋﻠﻮﻡ‬
‫ﺍﻟﻜﻤﺒﻴﻮﺗﺮﻭﺍﻟﻬﻨﺪﺳﺔ ﻭﺍﻟﻌﻠﻮﻡ ﺇﻟﻰ ﺍﻟﺒﺮﻣﺠﺔ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻟﻐﺔ ‪ ، Fortran‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺑﻌﺾ‬
‫ﺍﻟﺠﺎﻣﻌﺎﺕﺍﺳﺘﺨﺪﻣﺖ ‪ ، PL / I‬ﻭﺍﻟﻠﻐﺎﺕ ﺍﻟﻘﺎﺉﻤﺔ ﻋﻠﻰ ‪ ، PL / I‬ﻭ ‪ .ALGOL-W‬ﺑﺤﻠﻮﻝ‬
‫ﻣﻨﺘﺼﻒﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪ ،‬ﺃﺻﺒﺤﺖ ﺑﺎﺳﻜﺎﻝ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ﻟﻬﺬﺍ ﺍﻟﻐﺮﺽ‪ .‬ﻛﺎﻥ ﻫﺬﺍ ﻃﺒﻴﻌﻴﺎً‬
‫ﺗﻤﺎﻣﺎً ‪،‬ﻷﻥ ‪ Pascal‬ﺻﻤُﻤﺖ ﺧﺼﻴﺼﺎً ﻟﺘﺪﺭﻳﺲ ﺍﻟﺒﺮﻣﺠﺔ‪ .‬ﺣﺘﻰ ﺃﻭﺍﺧﺮ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ﻟﻢ ﺗﻌﺪ‬
‫ﺑﺎﺳﻜﺎﻝﻫﻲ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺍﺳﺘﺨﺪﺍﻣﺎً ﻟﺘﺪﺭﻳﺲ ﺍﻟﺒﺮﻣﺠﺔ ﻓﻲ ﺍﻟﻜﻠﻴﺎﺕ ﻭﺍﻟﺠﺎﻣﻌﺎﺕ‪.‬‬

‫ﻧﻈﺮﺍًﻟﺘﺼﻤﻴﻢ ﺑﺎﺳﻜﺎﻝ ﻛﻠﻐﺔ ﺗﺪﺭﻳﺲ ‪ ،‬ﻓﺈﻧﻬﺎ ﺗﻔﺘﻘﺮ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻀﺮﻭﺭﻳﺔ‬
‫ﻟﻠﻌﺪﻳﺪﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ‪ .‬ﺃﻓﻀﻞ ﻣﺜﺎﻝ ﻋﻠﻰ ﺫﻟﻚ ﻫﻮ ﺍﺳﺘﺤﺎﻟﺔ ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ ﻳﺄﺧﺬ‬
‫ﻛﻤﻌﺎﻣﻞﺻﻔﻴﻒ ﻣﺘﻐﻴﺮ ﺍﻟﻄﻮﻝ‪ .‬ﻣﺜﺎﻝ ﺁﺧﺮ ﻫﻮ ﻋﺪﻡ ﻭﺟﻮﺩ ﺃﻱ ﻗﺪﺭﺓ ﺗﺠﻤﻴﻊ ﻣﻨﻔﺼﻠﺔ‪ .‬ﺃﺩﺕ ﻫﺬﻩ‬
‫ﺍﻟﻌﻴﻮﺏﺑﺸﻜﻞ ﻃﺒﻴﻌﻲ ﺇﻟﻰ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻬﺠﺎﺕ ﻏﻴﺮ ﺍﻟﻘﻴﺎﺳﻴﺔ ‪ ،‬ﻣﺜﻞ ‪.Turbo Pascal‬‬

‫ﺍﺳﺘﻨﺪﺕﺷﻌﺒﻴﺔ ﺑﺎﺳﻜﺎﻝ ‪ ،‬ﻓﻲ ﻛﻞ ﻣﻦ ﺗﺪﺭﻳﺲ ﺍﻟﺒﺮﻣﺠﺔ ﻭﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﺧﺮﻯ ‪ ،‬ﻓﻲ ﺍﻟﻤﻘﺎﻡ‬


‫ﺍﻷﻭﻝﺇﻟﻰ ﻣﺰﻳﺠﻬﺎ ﺍﻟﺮﺍﺉﻊ ﻣﻦ ﺍﻟﺒﺴﺎﻃﺔ ﻭﺍﻟﺘﻌﺒﻴﺮﻳﺔ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﻭﺟﻮﺩ ﺑﻌﺾ ﺃﻭﺟﻪ ﻋﺪﻡ‬
‫ﺍﻷﻣﺎﻥﻓﻲ ﺑﺎﺳﻜﺎﻝ ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﻻ ﺗﺰﺍﻝ ﻟﻐﺔ ﺁﻣﻨﺔ ﻧﺴﺒﻴﺎً ‪ ،‬ﻻ ﺳﻴﻤﺎ ﻋﻨﺪ ﻣﻘﺎﺭﻧﺘﻬﺎ ﺑـ ‪ Fortran‬ﺃﻭ ‪.C‬‬
‫ﺑﺤﻠﻮﻝﻣﻨﺘﺼﻒ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ‪ ،‬ﻛﺎﻧﺖ ﺷﻌﺒﻴﺔ ﺑﺎﺳﻜﺎﻝ ﻓﻲ ﺗﺮﺍﺟﻊ ‪ ،‬ﺳﻮﺍء ﻓﻲ ﺍﻟﺼﻨﺎﻋﺔ ﺃﻭ ﻓﻲ‬
‫ﺍﻟﺠﺎﻣﻌﺎﺕ ‪،‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﺃﺳﺎﺳﺎً ﺇﻟﻰ ﻇﻬﻮﺭ ‪ Modula-2‬ﻭ ‪ Ada‬ﻭ ‪ ، ++ C‬ﻭﺍﻟﺘﻲ ﺗﻀﻤﻨﺖ‬
‫ﺟﻤﻴﻌﻬﺎﻣﻴﺰﺍﺕ ﻏﻴﺮ ﻣﺘﻮﻓﺮﺓ ﻓﻲ ﺑﺎﺳﻜﺎﻝ‪.‬‬

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

‫‪Example Program Input:‬‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، listlen ،‬ﺣﻴﺚ ‪ listlen‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺔ ﺑﻘﻴﻢ ‪-listlen‬‬ ‫‪}Pascal‬‬
‫ﺻﺤﻴﺤﺔ‬
‫ﺍﻹﺧﺮﺍﺝ‪:‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻷﻛﺒﺮ ﻣﻦ‬
‫ﻣﺘﻮﺳﻂﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ{ ﺑﺮﻧﺎﻣﺞ؛ (ﺍﻟﻤﺪﺧﻼﺕ‬
‫ﻭﺍﻟﻤﺨﺮﺟﺎﺕ) ‪pasex‬‬
‫ﻳﻜﺘﺐ= ‪intlisttype‬ﻣﺠﻤﻮﻋﺔ ﻣﺼﻔﻮﻓﺔ]‪[99..1‬ﻝﻋﺪﺩ ﺻﺤﻴﺢ؛ ﻓﺎﺭ‬

‫؛‪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‬ﺁﺧﺮ‬

‫("ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ") ‪writeln‬‬


‫ﻧﻬﺎﻳﺔ‪.‬‬

‫‪2.12.2‬ﻟﻐﺔ ﺃﻧﻈﻤﺔ ﻣﺤﻤﻮﻟﺔ‪ :‬ﺝ‬


‫ﻣﺜﻞﺑﺎﺳﻜﺎﻝ ‪ ،‬ﺳﺎﻫﻤﺖ ﻟﻐﺔ ‪ C‬ﻗﻠﻴﻼ ًﻓﻲ ﻣﺠﻤﻮﻋﺔ ﻣﻴﺰﺍﺕ ﺍﻟﻠﻐﺔ ﺍﻟﻤﻌﺮﻭﻓﺔ ﺳﺎﺑﻘﺎً ‪ ،‬ﻟﻜﻨﻬﺎ‬
‫ﺍﺳﺘﺨﺪﻣﺖﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻋﻠﻰ ﻣﺪﻯ ﻓﺘﺮﺓ ﻃﻮﻳﻠﺔ ﻣﻦ ﺍﻟﺰﻣﻦ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻟﻐﺔ ‪C‬‬
‫ﻣﺼﻤﻤﺔﻓﻲ ﺍﻷﺻﻞ ﻟﺒﺮﻣﺠﺔ ﺍﻷﻧﻈﻤﺔ ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﻣﻨﺎﺳﺒﺔ ﺗﻤﺎﻣﺎً ﻟﻤﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ‪.‬‬

‫‪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‬ﻣﺘﺮﺟﻤﺎً ﻣﺠﺎﻧﻴﺎً ﻭﺟﻴﺪﺍً ﺟﺪﺍً ﻛﺎﻥ ﻣﺘﺎﺣﺎً ﻟﻠﻤﺒﺮﻣﺠﻴﻦ‬
‫ﻋﻠﻰﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺃﻧﻮﺍﻉ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﺨﺘﻠﻔﺔ‪.‬‬

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

‫‪:‬ﻣﺜﺎﻝﻋﻠﻰ ﺇﺩﺧﺎﻝ ﺍﻟﺒﺮﻧﺎﻣﺞ ‪/ * C‬‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، listlen ،‬ﺣﻴﺚ ‪ listlen‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺔ ﺑﻘﻴﻢ ‪-listlen‬‬
‫ﺻﺤﻴﺤﺔ‬
‫ﺍﻹﺧﺮﺍﺝ‪:‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻷﻛﺒﺮ ﻣﻦ‬
‫ﻣﺘﻮﺳﻂﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ * ‪int /‬ﺭﺉﻴﺴﻲ )(}‬

‫‪int‬ﻋﺪﺍﺩ ‪ ،‬ﻣﺠﻤﻮﻉ ‪ ،‬ﻣﺘﻮﺳﻂ ‪ ،‬ﻧﺘﻴﺠﺔ ؛ ﺍﻟﻤﺠﻤﻮﻉ = ‪ 0‬؛ ‪intlist ]99[ ، listlen ،‬‬

‫ﺍﻟﻨﺘﻴﺠﺔ= ‪ 0‬؛‬
‫؛ (‪scanf )"٪ d" ، & listlen‬‬
‫ﻟﻮ))} ((‪listlen< 0( && )listlen >100‬‬
‫‪ * /‬ﻗﺮﺍءﺓ ﺍﻟﻤﺪﺧﻼﺕ ﻓﻲ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺠﻤﻮﻉ * ‪/‬‬
‫ﻝ)ﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ >‪ listlen‬؛ ﻋﺪﺍﺩ ‪} (++‬‬
‫؛ [ﻋﺪﺍﺩ] ‪ + = intlist‬؛ ﻣﺠﻤﻮﻉ ([ﻋﺪﺍﺩ] ‪d" ، & intlist‬‬
‫‪scanf )"٪‬‬
‫{‬

‫‪.11‬ﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺸُﺎﺭ ﺇﻟﻰ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ﺑﺎﺳﻢ "‪".K & R C‬‬


‫‪79‬‬ ‫‪2.13‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻘﺎﺉﻤﺔ ﻋﻠﻰ ﺍﻟﻤﻨﻄﻖ‪Prolog :‬‬

‫‪ * /‬ﺍﺣﺴﺐ ﺍﻟﻤﺘﻮﺳﻂ * ‪/‬‬


‫ﺍﻟﻤﺘﻮﺳﻂ= ‪ sum / listlen‬؛‬
‫‪ * /‬ﻋﺪ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﺗﻜﻮﻥ< ﻣﺘﻮﺳﻂ * ‪/‬‬
‫ﻝ)ﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ >‪ listlen‬؛ ﻋﺪﺍﺩ ‪(++‬‬
‫ﻟﻮ)‪ * /‬ﻣﺘﻮﺳﻂ( ﻧﺘﻴﺠﺔ ‪ ++‬؛ ‪ * /‬ﻧﺘﻴﺠﺔ ﺍﻟﻄﺒﺎﻋﺔ <[ﻋﺪﺍﺩ] ‪intlist‬‬

‫؛ (ﺍﻟﻨﺘﻴﺠﺔ ‪:٪ d \ n" ،‬ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ") ‪printf‬‬


‫{‬
‫ﺁﺧﺮ‬
‫؛ ("‪ \ n‬ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻟﻴﺲ ﻗﺎﻧﻮﻧﻴﺎً") ‪printf‬‬
‫{‬

‫‪2.13‬ﺍﻟﺒﺮﻣﺠﺔ ﻋﻠﻰ ﺃﺳﺎﺱ ﺍﻟﻤﻨﻄﻖ‪ :‬ﺑﺮﻭﻟﻮﺝ‬


‫ﺑﺒﺴﺎﻃﺔ ‪،‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻫﻲ ﺍﺳﺘﺨﺪﺍﻡ ﺗﺪﻭﻳﻦ ﻣﻨﻄﻘﻲ ﺭﺳﻤﻲ ﻟﺘﻮﺻﻴﻞ ﺍﻟﻌﻤﻠﻴﺎﺕ‬
‫ﺍﻟﺤﺴﺎﺑﻴﺔﺇﻟﻰ ﺟﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ‪ .‬ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ ﺍﻷﺻﻠﻲ ﻫﻮ ﺍﻟﺘﺪﻭﻳﻦ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻓﻲ‬
‫ﻟﻐﺎﺕﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﺍﻟﺤﺎﻟﻴﺔ‪.‬‬
‫ﺍﻟﺒﺮﻣﺠﺔﺑﻠﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻏﻴﺮ ﺇﺟﺮﺍﺉﻴﺔ‪ .‬ﺍﻟﺒﺮﺍﻣﺞ ﺑﻬﺬﻩ ﺍﻟﻠﻐﺎﺕ ﻻ ﺗﺬﻛﺮ ﺑﺎﻟﻀﺒﻂ‬
‫ﻛﻴﻒﺍﻟﻨﺘﻴﺠﺔ ﻳﺠﺐ ﺣﺴﺎﺑﻬﺎ ﻭﻟﻜﻦ ﺑﺎﻷﺣﺮﻯ ﺗﺼﻒ ﺍﻟﺸﻜﻞ ﻭ ‪ /‬ﺃﻭ ﺍﻟﺨﺼﺎﺉﺺ ﺍﻟﻀﺮﻭﺭﻳﺔ‬
‫ﻟﻠﻨﺘﻴﺠﺔ‪.‬ﻣﺎ ﻫﻮ ﻣﻄﻠﻮﺏ ﻟﺘﻮﻓﻴﺮ ﻫﺬﻩ ﺍﻹﻣﻜﺎﻧﻴﺔ ﻓﻲ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻫﻮ ﻭﺳﻴﻠﺔ ﻣﻮﺟﺰﺓ‬
‫ﻟﺘﺰﻭﻳﺪﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺑﻜﻞ ﻣﻦ ﺍﻟﻤﻌﻠﻮﻣﺎﺕ ﺫﺍﺕ ﺍﻟﺼﻠﺔ ﻭﻋﻤﻠﻴﺔ ﺍﻻﺳﺘﻨﺘﺎﺝ ﻟﺤﺴﺎﺏ ﺍﻟﻨﺘﺎﺉﺞ‬
‫ﺍﻟﻤﺮﻏﻮﺑﺔ‪.‬ﻳﻮﻓﺮ ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ ﺍﻷﺳﺎﺳﻲ ﺍﻟﺸﻜﻞ ﺍﻷﺳﺎﺳﻲ ﻟﻼﺗﺼﺎﻝ ﺑﺎﻟﻜﻤﺒﻴﻮﺗﺮ ‪،‬‬
‫ﻭﺗﻮﻓﺮﻃﺮﻳﻘﺔ ﺍﻹﺛﺒﺎﺕ ‪ ،‬ﺍﻟﻤﺴﻤﺎﺓ ﺍﻟﺪﻗﺔ ‪ ،‬ﺍﻟﺘﻲ ﻃﻮﺭﻫﺎ ﺭﻭﺑﻨﺴﻮﻥ )‪ (1965‬ﺃﻭﻻ ً‪ ،‬ﺗﻘﻨﻴﺔ ﺍﻻﺳﺘﻨﺘﺎﺝ‪.‬‬

‫‪2.13.1‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﺧﻼﻝﺃﻭﺍﺉﻞ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪ ،‬ﻃﻮﺭ ﺁﻻﻥ ﻛﻮﻟﻤﺮﻭﺭ ﻭﻓﻴﻠﻴﺐ ﺭﻭﺳﻴﻞ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﺍﻟﺬﻛﺎء‬
‫ﺍﻻﺻﻄﻨﺎﻋﻲﺑﺠﺎﻣﻌﺔ ﺇﻳﻜﺲ ﻣﺮﺳﻴﻠﻴﺎ ‪ ،‬ﻣﻊ ﺭﻭﺑﺮﺕ ﻛﻮﺍﻟﺴﻜﻲ ﻣﻦ ﻗﺴﻢ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ‬
‫ﺑﺠﺎﻣﻌﺔﺇﺩﻧﺒﺮﺓ ‪ ،‬ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﺳﺎﺳﻲ ﻟـ ‪ .Prolog‬ﺍﻟﻤﻜﻮﻧﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻟﺒﺮﻧﺎﻣﺞ ‪ Prolog‬ﻫﻲ‬
‫ﻃﺮﻳﻘﺔﻟﺘﺤﺪﻳﺪ ﻣﻘﺘﺮﺣﺎﺕ ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ ﺍﻷﺻﻠﻴﺔ ﻭﺗﻨﻔﻴﺬ ﺷﻜﻞ ﻣﻘﻴﺪ ﻣﻦ ﺍﻟﺪﻗﺔ‪.‬‬
‫ﺗﻢﻭﺻﻒ ﻛﻞ ﻣﻦ ﺣﺴﺎﺏ ﺍﻟﺘﻔﺎﺿﻞ ﻭﺍﻟﺘﻜﺎﻣﻞ ﺍﻷﺻﻠﻲ ﻭﺍﻟﻘﺮﺍﺭ ﻓﻲ ﺍﻟﻔﺼﻞ ‪ .16‬ﺗﻢ ﺗﻄﻮﻳﺮ ﺃﻭﻝ‬
‫ﻣﺘﺮﺟﻢ‪ Prolog‬ﻓﻲ ﻣﺮﺳﻴﻠﻴﺎ ﻓﻲ ﻋﺎﻡ ‪ .1972‬ﻧﺴﺨﺔ ﺍﻟﻠﻐﺔ ﺍﻟﺘﻲ ﺗﻢ ﺗﻄﺒﻴﻘﻬﺎ ﻣﻮﺻﻮﻓﺔ ﻓﻲ‬
‫ﺭﻭﺳﻴﻞ)‪ .(1975‬ﺍﺳﻢ ‪ Prolog‬ﻣﻦﻃﻠﻴﻌﺔﻗﻮﺍﻋﺪ ﺍﻟﻠﻐﺔﺳﺠﻞﺟﻴﻢ‪.‬‬

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


‫ﺗﺘﻜﻮﻥﺑﺮﺍﻣﺞ ‪ Prolog‬ﻣﻦ ﻣﺠﻤﻮﻋﺎﺕ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ‪ .‬ﻳﺤﺘﻮﻱ ‪ Prolog‬ﻋﻠﻰ ﺃﻧﻮﺍﻉ ﻗﻠﻴﻠﺔ ﻓﻘﻂ ﻣﻦ‬
‫ﺍﻟﻌﺒﺎﺭﺍﺕ ‪،‬ﻟﻜﻨﻬﺎ ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﻣﻌﻘﺪﺓ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪80‬‬

‫ﺃﺣﺪﺍﻻﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻟﺸﺎﺉﻌﺔ ﻟـ ‪ Prolog‬ﻫﻮ ﻛﻨﻮﻉ ﻣﻦ ﻗﺎﻋﺪﺓ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﺬﻛﻴﺔ‪ .‬ﻳﻮﻓﺮ ﻫﺬﺍ‬


‫ﺍﻟﺘﻄﺒﻴﻖﺇﻃﺎﺭﺍً ﺑﺴﻴﻄﺎً ﻟﻤﻨﺎﻗﺸﺔ ﻟﻐﺔ ‪.Prolog‬‬
‫ﺗﺘﻜﻮﻥﻗﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ﺑﺮﻧﺎﻣﺞ ‪ Prolog‬ﻣﻦ ﻧﻮﻋﻴﻦ ﻣﻦ ﺍﻟﺒﻴﺎﻧﺎﺕ‪ :‬ﺍﻟﺤﻘﺎﺉﻖ ﻭﺍﻟﻘﻮﺍﻋﺪ‪ .‬ﻓﻴﻤﺎ‬
‫ﻳﻠﻲﺃﻣﺜﻠﺔ ﻋﻠﻰ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺤﻘﺎﺉﻖ‪:‬‬

‫ﺍﻷﻡ)ﺟﻮﺍﻥ ‪ ،‬ﺟﻴﻚ(‪.‬‬
‫ﺍﻷﺏ)ﻓﻴﺮﻥ ‪ ،‬ﺟﻮﺍﻥ(‪.‬‬

‫ﻫﺬﻩﺗﻨﺺ ﻋﻠﻰ ﺫﻟﻚﺟﻮﺍﻥﻫﻞﺍﻷﻡﻝﺟﻴﻚﻭﻓﻴﺮﻥﻫﻞﺃﺏﻝ‬


‫ﺟﻮﺍﻥ‪.‬‬
‫ﻣﺜﺎﻝﻋﻠﻰ ﺑﻴﺎﻥ ﺍﻟﻘﺎﻋﺪﺓ‬

‫ﺍﻟﺠﺪ)‪ - :(X، Z‬ﺍﻷﺏ )‪ ،(X، Y‬ﺍﻷﺏ )‪.(Y، Z‬‬

‫ﻫﺬﺍﻳﻨﺺ ﻋﻠﻰ ﺃﻧﻪ ﻳﻤﻜﻦ ﺍﺳﺘﻨﺘﺎﺝ ﺫﻟﻚ‪X‬ﻫﻞﺍﻟﺠﺪﻝﺽﺇﺫﺍ ﻛﺎﻥ ﻫﺬﺍ ﺻﺤﻴﺤﺎً‪X‬ﻫﻞﺍﻷﺑﻮﻳﻦﻝﺹﻭﺹ‬


‫ﻫﻮﻭﺍﻟﺪ‪Z ،‬ﻟﺒﻌﺾ ﺍﻟﻘﻴﻢ ﺍﻟﻤﺤﺪﺩﺓ ﻟﻠﻤﺘﻐﻴﺮﺍﺕ‪X ، Y ،‬ﻭ‪Z.‬‬

‫ﻳﻤﻜﻦﺍﻻﺳﺘﻌﻼﻡ ﻋﻦ ﻗﺎﻋﺪﺓ ﺑﻴﺎﻧﺎﺕ ‪ Prolog‬ﺑﺸﻜﻞ ﺗﻔﺎﻋﻠﻲ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻬﺪﻑ ‪،‬‬


‫ﻭﻣﺜﺎﻝﻋﻠﻰ ﺫﻟﻚ‬

‫ﺍﻷﺏ)ﺑﻮﺏ ‪ ،‬ﺩﺍﺭﺳﻲ(‪.‬‬

‫ﻫﺬﺍﻳﺴﺄﻝ ﺇﺫﺍﺑﻮﺏﻫﻞﺃﺏﻝﺩﺍﺭﺳﻲ‪.‬ﻋﻨﺪﻣﺎ ﻳﺘﻢ ﺗﻘﺪﻳﻢ ﻣﺜﻞ ﻫﺬﺍ ﺍﻻﺳﺘﻌﻼﻡ ﺃﻭ ﺍﻟﻬﺪﻑ ﺇﻟﻰ ﻧﻈﺎﻡ‬
‫‪ ، Prolog‬ﻓﺈﻧﻪ ﻳﺴﺘﺨﺪﻡ ﻋﻤﻠﻴﺔ ﺣﻠﻪ ﻟﻤﺤﺎﻭﻟﺔ ﺗﺤﺪﻳﺪ ﺣﻘﻴﻘﺔ ﺍﻟﺒﻴﺎﻥ‪ .‬ﺇﺫﺍ ﺍﺳﺘﻨﺘﺞ ﺃﻥ ﺍﻟﻬﺪﻑ‬
‫ﺻﺤﻴﺢ ‪،‬ﻓﺈﻧﻪ ﻳﻌﺮﺽ "ﺻﺤﻴﺢ"‪ .‬ﺇﺫﺍ ﻟﻢ ﻳﺘﻤﻜﻦ ﻣﻦ ﺇﺛﺒﺎﺕ ﺫﻟﻚ ‪ ،‬ﻓﺈﻧﻪ ﻳﻌﺮﺽ "ﺧﻄﺄ"‪.‬‬

‫‪2.13.3‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻓﻲﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ ‪ ،‬ﻛﺎﻧﺖ ﻫﻨﺎﻙ ﻣﺠﻤﻮﻋﺔ ﺻﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً ﻣﻦ ﻋﻠﻤﺎء ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﺬﻳﻦ ﺍﻋﺘﻘﺪﻭﺍ ﺃﻥ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻤﻨﻄﻘﻴﺔ ﺗﻮﻓﺮ ﺃﻓﻀﻞ ﺃﻣﻞ ﻟﻠﻬﺮﻭﺏ ﻣﻦ ﺗﻌﻘﻴﺪ ﺍﻟﻠﻐﺎﺕ ﺍﻟﺤﺘﻤﻴﺔ ‪ ،‬ﻭﻛﺬﻟﻚ ﻣﻦ ﺍﻟﻤﺸﻜﻠﺔ‬
‫ﺍﻟﻬﺎﺉﻠﺔﺍﻟﻤﺘﻤﺜﻠﺔ ﻓﻲ ﺇﻧﺘﺎﺝ ﻛﻤﻴﺔ ﻛﺒﻴﺮﺓ ﻣﻦ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻮﺛﻮﻗﺔ ﺍﻟﻤﻄﻠﻮﺑﺔ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﺣﺘﻰ ﺍﻵﻥ ‪،‬‬
‫ﻫﻨﺎﻙﺳﺒﺒﺎﻥ ﺭﺉﻴﺴﻴﺎﻥ ﻟﻌﺪﻡ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‪ .‬ﺃﻭﻻ ً‪ ،‬ﻛﻤﺎ ﻫﻮ‬
‫ﺍﻟﺤﺎﻝﻣﻊ ﺑﻌﺾ ﺍﻟﻤﻨﺎﻫﺞ ﻏﻴﺮ ﺍﻹﺟﺮﺍﺉﻴﺔ ﺍﻷﺧﺮﻯ ‪ ،‬ﺃﺛﺒﺘﺖ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﻠﻐﺎﺕ ﺍﻟﻤﻨﻄﻖ ﺣﺘﻰ‬
‫ﺍﻵﻥﺃﻧﻬﺎ ﻏﻴﺮ ﻓﻌﺎﻟﺔ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﺑﺎﻟﻨﺴﺒﺔ ﺇﻟﻰ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺤﺘﻤﻴﺔ ﺍﻟﻤﻜﺎﻓﺉﺔ‪ .‬ﺛﺎﻧﻴﺎً ‪ ،‬ﺗﻢ ﺗﺤﺪﻳﺪ ﺃﻧﻪ‬
‫ﻧﻬﺞﻓﻌﺎﻝ ﻟﻌﺪﺩ ﻗﻠﻴﻞ ﻣﻦ ﻣﺠﺎﻻﺕ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﺼﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً‪ :‬ﺃﻧﻮﺍﻉ ﻣﻌﻴﻨﺔ ﻣﻦ ﺃﻧﻈﻤﺔ ﺇﺩﺍﺭﺓ‬
‫ﻗﻮﺍﻋﺪﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﺑﻌﺾ ﻣﺠﺎﻻﺕ ﺍﻟﺬﻛﺎء ﺍﻻﺻﻄﻨﺎﻋﻲ‪.‬‬

‫ﻫﻨﺎﻙﻟﻬﺠﺔ ﻣﻦ ‪ Prolog‬ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ‪ .Prolog ++ )Moss ، 1994( -‬ﺗﻢ‬


‫ﻭﺻﻒﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻨﻄﻘﻴﺔ ﻭ ‪ Prolog‬ﺑﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.16‬‬
‫‪81‬‬ ‫‪2.14‬ﺃﻛﺒﺮ ﺟﻬﺪ ﺗﺼﻤﻴﻢ ﻓﻲ ﺍﻟﺘﺎﺭﻳﺦ‪Ada :‬‬

‫‪2.14‬ﺃﻛﺒﺮ ﺟﻬﺪ ﺗﺼﻤﻴﻢ ﻓﻲ ﺍﻟﺘﺎﺭﻳﺦ‪Ada :‬‬


‫ﻟﻐﺔ‪ Ada‬ﻫﻲ ﻧﺘﻴﺠﺔ ﺟﻬﻮﺩ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﺍﻷﻛﺜﺮ ﺷﻤﻮﻻ ًﻭﺗﻜﻠﻔﺔ ﻋﻠﻰ ﺍﻹﻃﻼﻕ‪ .‬ﺗﺼﻒ ﺍﻟﻔﻘﺮﺍﺕ‬
‫ﺍﻟﺘﺎﻟﻴﺔﺑﺈﻳﺠﺎﺯ ﺗﻄﻮﺭ ‪.Ada‬‬

‫‪2.14.1‬ﺍﻟﺨﻠﻔﻴﺔ ﺍﻟﺘﺎﺭﻳﺨﻴﺔ‬
‫ﺗﻢﺗﻄﻮﻳﺮ ﻟﻐﺔ ‪ Ada‬ﻟﻮﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ )‪ ، (DoD‬ﻟﺬﻟﻚ ﻛﺎﻧﺖ ﺣﺎﻟﺔ ﺑﻴﺉﺔ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻬﻢ ﻣﻔﻴﺪﺓ‬
‫ﻓﻲﺗﺤﺪﻳﺪ ﺷﻜﻠﻬﺎ‪ .‬ﺑﺤﻠﻮﻝ ﻋﺎﻡ ‪ ، 1974‬ﻛﺎﻥ ﺃﻛﺜﺮ ﻣﻦ ﻧﺼﻒ ﺗﻄﺒﻴﻘﺎﺕ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ‬
‫ﻭﺯﺍﺭﺓﺍﻟﺪﻓﺎﻉ ﺃﻧﻈﻤﺔ ﻣﺪﻣﺠﺔ‪ .‬ﺍﻟﻨﻈﺎﻡ ﺍﻟﻤﻀﻤﻦ ﻫﻮ ﺍﻟﻨﻈﺎﻡ ﺍﻟﺬﻱ ﻳﺘﻢ ﻓﻴﻪ ﺗﻀﻤﻴﻦ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ‬
‫ﻓﻲﺍﻟﺠﻬﺎﺯ ﺍﻟﺬﻱ ﻳﺘﺤﻜﻢ ﻓﻴﻪ ﺃﻭ ﺍﻟﺬﻱ ﻳﻘﺪﻡ ﺧﺪﻣﺎﺕ ﻟﻪ‪ .‬ﻛﺎﻧﺖ ﺗﻜﺎﻟﻴﻒ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﺗﺮﺗﻔﻊ‬
‫ﺑﺴﺮﻋﺔ ‪،‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ ﺇﻟﻰ ﺍﻟﺘﻌﻘﻴﺪ ﺍﻟﻤﺘﺰﺍﻳﺪ ﻟﻸﻧﻈﻤﺔ‪ .‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺃﻛﺜﺮ ﻣﻦ‬
‫‪450‬ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﺨﺘﻠﻔﺔ ﻟﻤﺸﺎﺭﻳﻊ ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ‪ ،‬ﻭﻟﻢ ﻳﺘﻢ ﺗﻮﺣﻴﺪ ﺃﻱ ﻣﻨﻬﺎ ﺑﻮﺍﺳﻄﺔ ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ‪.‬‬
‫ﻳﻤﻜﻦﻟﻜﻞ ﻣﻘﺎﻭﻝ ﺩﻓﺎﻉ ﺗﺤﺪﻳﺪ ﻟﻐﺔ ﺟﺪﻳﺪﺓ ﻭﻣﺨﺘﻠﻔﺔ ﻟﻜﻞ ﻋﻘﺪ‪12.‬ﺑﺴﺒﺐ ﺍﻧﺘﺸﺎﺭ ﻫﺬﻩ ﺍﻟﻠﻐﺔ ‪،‬‬
‫ﻧﺎﺩﺭﺍًﻣﺎ ﻳﺘﻢ ﺇﻋﺎﺩﺓ ﺍﺳﺘﺨﺪﺍﻡ ﺑﺮﺍﻣﺞ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻟﻢ ﻳﺘﻢ ﺇﻧﺸﺎء ﺃﺩﻭﺍﺕ ﺗﻄﻮﻳﺮ‬
‫ﺑﺮﻣﺠﻴﺎﺕ)ﻷﻧﻬﺎ ﻋﺎﺩﺓ ﻣﺎ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﺍﻟﻠﻐﺔ(‪ .‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻠﻐﺎﺕ ‪ ،‬ﻭﻟﻜﻦ ﻟﻢ ﻳﻜﻦ ﺃﻱ‬
‫ﻣﻨﻬﺎﻣﻨﺎﺳﺒﺎً ﻟﺘﻄﺒﻴﻘﺎﺕ ﺍﻷﻧﻈﻤﺔ ﺍﻟﻤﻀﻤﻨﺔ‪ .‬ﻟﻬﺬﻩ ﺍﻷﺳﺒﺎﺏ ‪ ،‬ﻓﻲ ﻋﺎﻡ ‪ ، 1974‬ﺍﻗﺘﺮﺡ ﻛﻞ ﻣﻦ‬
‫ﺍﻟﺠﻴﺶﻭﺍﻟﺒﺤﺮﻳﺔ ﻭﺍﻟﻘﻮﺍﺕ ﺍﻟﺠﻮﻳﺔ ﺑﺸﻜﻞ ﻣﺴﺘﻘﻞ ﺗﻄﻮﻳﺮ ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ ﻟﻸﻧﻈﻤﺔ‬
‫ﺍﻟﻤﺪﻣﺠﺔ‪.‬‬

‫‪2.14.2‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﻣﻊﻣﻼﺣﻈﺔ ﻫﺬﺍ ﺍﻻﻫﺘﻤﺎﻡ ﺍﻟﻮﺍﺳﻊ ‪ ،‬ﻓﻲ ﻳﻨﺎﻳﺮ ‪ ، 1975‬ﺷﻜﻞ ﻣﺎﻟﻜﻮﻟﻢ ﻛﻮﺭﻱ ‪ ،‬ﻣﺪﻳﺮ ﺃﺑﺤﺎﺙ ﺍﻟﺪﻓﺎﻉ‬
‫ﻭﺍﻟﻬﻨﺪﺳﺔ ‪،‬ﻣﺠﻤﻮﻋﺔ ﺍﻟﻌﻤﻞ ﺍﻟﻠﻐﻮﻳﺔ ﺭﻓﻴﻌﺔ ﺍﻟﻤﺴﺘﻮﻯ )‪ ، (HOLWG‬ﺑﺮﺉﺎﺳﺔ ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ‬
‫ﺍﻟﻠﻔﺘﻨﺎﻧﺖﻛﻮﻟﻮﻧﻴﻞ ﻭﻳﻠﻴﺎﻡ ﻭﻳﺘﺎﻛﺮ ﻣﻦ ﺳﻼﺡ ﺍﻟﺠﻮ‪ .‬ﻛﺎﻥ ﻟﺪﻯ ‪ HOLWG‬ﻣﻤﺜﻠﻴﻦ ﻣﻦ ﺟﻤﻴﻊ‬
‫ﺍﻟﺨﺪﻣﺎﺕﺍﻟﻌﺴﻜﺮﻳﺔ ﻭﺍﻟﻌﻼﻗﺎﺕ ﻣﻊ ﺑﺮﻳﻄﺎﻧﻴﺎ ﺍﻟﻌﻈﻤﻰ ﻭﻓﺮﻧﺴﺎ ﻭﻣﺎ ﻛﺎﻥ ﻳﻌﺮﻑ ﺁﻧﺬﺍﻙ ﺑﺄﻟﻤﺎﻧﻴﺎ‬
‫ﺍﻟﻐﺮﺑﻴﺔ‪.‬ﻛﺎﻥ ﻣﻴﺜﺎﻗﻬﺎ ﺍﻷﻭﻟﻲ ﻫﻮ ﺍﻟﻘﻴﺎﻡ ﺑﻤﺎ ﻳﻠﻲ‪:‬‬

‫• ﺗﺤﺪﻳﺪ ﻣﺘﻄﻠﺒﺎﺕ ﻟﻐﺔ ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ﺍﻟﺠﺪﻳﺪﺓ ﻋﺎﻟﻴﺔ ﺍﻟﻤﺴﺘﻮﻯ‪.‬‬


‫• ﺗﻘﻴﻴﻢ ﺍﻟﻠﻐﺎﺕ ﺍﻟﻤﻮﺟﻮﺩﺓ ﻟﺘﺤﺪﻳﺪ ﻣﺎ ﺇﺫﺍ ﻛﺎﻥ ﻫﻨﺎﻙ ﻣﺮﺷﺢ ﻗﺎﺑﻞ ﻟﻠﺘﻄﺒﻴﻖ‪.‬‬

‫• ﺍﻟﺘﻮﺻﻴﺔ ﺑﺎﻋﺘﻤﺎﺩ ﺃﻭ ﺗﻨﻔﻴﺬ ﺍﻟﺤﺪ ﺍﻷﺩﻧﻰ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫ﻓﻲﺃﺑﺮﻳﻞ ‪ ، 1975‬ﺃﻧﺘﺠﺖ ‪ HOLWG‬ﻭﺛﻴﻘﺔ ﻣﺘﻄﻠﺒﺎﺕ ‪ Strawman‬ﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ )ﻭﺯﺍﺭﺓ‬


‫ﺍﻟﺪﻓﺎﻉ ‪ 1975،‬ﺃ(‪ .‬ﺗﻢ ﺗﻮﺯﻳﻌﻬﺎ ﻋﻠﻰ ﺍﻟﻔﺮﻭﻉ ﺍﻟﻌﺴﻜﺮﻳﺔ ﻭﺍﻟﻮﻛﺎﻻﺕ ﺍﻟﻔﻴﺪﺭﺍﻟﻴﺔ ﻭﻣﻤﺜﻠﻲ ﺍﻟﺼﻨﺎﻋﺔ‬
‫ﻭﺍﻟﺠﺎﻣﻌﺎﺕﺍﻟﻤﺨﺘﺎﺭﻳﻦ ﻭﺍﻷﻃﺮﺍﻑ ﺍﻟﻤﻬﺘﻤﺔ ﻓﻲ ﺃﻭﺭﻭﺑﺎ‪.‬‬

‫‪.12‬ﺗﻌﺰﻯ ﻫﺬﻩ ﺍﻟﻨﺘﻴﺠﺔ ﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﺇﻟﻰ ﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻟﻮﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻟﻠﻐﺔ ﺍﻟﺘﺠﻤﻴﻊ ﻟﻸﻧﻈﻤﺔ ﺍﻟﻤﺪﻣﺠﺔ ‪ ،‬ﺇﻟﻰ ﺟﺎﻧﺐ‬
‫ﺣﻘﻴﻘﺔﺃﻥ ﻣﻌﻈﻢ ﺍﻷﻧﻈﻤﺔ ﺍﻟﻤﺪﻣﺠﺔ ﺗﺴﺘﺨﺪﻡ ﻣﻌﺎﻟﺠﺎﺕ ﻣﺘﺨﺼﺼﺔ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪82‬‬

‫ﻭﺛﻴﻘﺔﺳﺘﺮﻭﻣﺎﻥ ﺗﺒﻌﻬﺎ ﻭﻭﺩﻣﺎﻥ )ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ‪ 1975 ،‬ﺏ( ﻓﻲ ﺃﻏﺴﻄﺲ ‪ ، 1975‬ﺗﻴﻨﻤﺎﻥ )‬


‫ﻭﺯﺍﺭﺓﺍﻟﺪﻓﺎﻉ ‪ (1976 ،‬ﻓﻲ ﻳﻨﺎﻳﺮ ‪ ، 1976‬ﺁﻳﺮﻭﻧﻤﺎﻥ )ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ‪ (1977 ،‬ﻓﻲ ﻳﻨﺎﻳﺮ ‪، 1977‬‬
‫ﻭﺃﺧﻴﺮﺍ ًﺳﺘﻴﻠﻤﺎﻥ )ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ‪ (1978 ،‬ﻓﻲ ﻳﻮﻧﻴﻮ ‪.1978‬‬

‫ﺑﻌﺪﻋﻤﻠﻴﺔ ﺷﺎﻗﺔ ‪ ،‬ﺗﻢ ﺗﻘﻠﻴﺺ ﺍﻟﻤﻘﺘﺮﺣﺎﺕ ﺍﻟﻌﺪﻳﺪﺓ ﺍﻟﻤﻘﺪﻣﺔ ﻟﻠﻐﺔ ﺇﻟﻰ ﺃﺭﺑﻌﺔ ﻣﺘﺴﺎﺑﻘﻴﻦ‬
‫ﻧﻬﺎﺉﻴﻴﻦ ‪،‬ﻭﻛﻠﻬﺎ ﺗﺴﺘﻨﺪ ﺇﻟﻰ ﺑﺎﺳﻜﺎﻝ‪ .‬ﻓﻲ ﻣﺎﻳﻮ ‪ ، 1979‬ﺗﻢ ﺍﺧﺘﻴﺎﺭ ﺍﻗﺘﺮﺍﺡ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ‪/ Bull‬‬
‫‪ Cii Honeywell‬ﻣﻦ ﺍﻟﻤﺘﺴﺎﺑﻘﻴﻦ ﺍﻟﻨﻬﺎﺉﻴﻴﻦ ﺍﻷﺭﺑﻌﺔ ﻛﺘﺼﻤﻴﻢ ﺳﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ‪ .‬ﻛﺎﻥ ﻓﺮﻳﻖ‬
‫ﺗﺼﻤﻴﻢ‪ Cii Honeywell / Bull‬ﻓﻲ ﻓﺮﻧﺴﺎ ‪ ،‬ﺍﻟﻤﻨﺎﻓﺲ ﺍﻷﺟﻨﺒﻲ ﺍﻟﻮﺣﻴﺪ ﻣﻦ ﺑﻴﻦ ﺍﻷﺭﺑﻌﺔ‬
‫ﺍﻟﻨﻬﺎﺉﻴﻴﻦ ‪،‬ﺑﻘﻴﺎﺩﺓ ﺟﺎﻥ ﺇﺷﺒﻴﺎﻩ‪.‬‬

‫ﻓﻲﺭﺑﻴﻊ ﻋﺎﻡ ‪ ، 1979‬ﺃﻭﺻﻰ ﺟﺎﻙ ﻛﻮﺑﺮ ﻣﻦ ﻗﻴﺎﺩﺓ ﺍﻟﻌﺘﺎﺩ ﺍﻟﺒﺤﺮﻳﺔ ﺑﺎﺳﻢ ﺍﻟﻠﻐﺔ ﺍﻟﺠﺪﻳﺪﺓ ‪،‬‬
‫‪ ، Ada‬ﻭﺍﻟﺘﻲ ﺗﻢ ﺗﺒﻨﻴﻬﺎ ﺑﻌﺪ ﺫﻟﻚ‪ .‬ﻳﺤﺘﻔﻞ ﺍﻻﺳﻢ ﺑﺬﻛﺮﻯ ﺃﻭﻏﺴﺘﺎ ﺁﺩﺍ ﺑﺎﻳﺮﻭﻥ )‪، (1851-1815‬‬
‫ﻛﻮﻧﺘﻴﺴﺔﻟﻮﻓﻠﻴﺲ ‪ ،‬ﻋﺎﻟﻢ ﺍﻟﺮﻳﺎﺿﻴﺎﺕ ‪ ،‬ﻭﺍﺑﻨﺔ ﺍﻟﺸﺎﻋﺮ ﺍﻟﻠﻮﺭﺩ ﺑﺎﻳﺮﻭﻥ‪ .‬ﻳﺘﻢ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻴﻬﺎ ﻋﻤﻮﻣﺎً‬
‫ﻋﻠﻰﺃﻧﻬﺎ ﺃﻭﻝ ﻣﺒﺮﻣﺠﺔ ﻓﻲ ﺍﻟﻌﺎﻟﻢ‪ .‬ﻋﻤﻠﺖ ﻣﻊ ﺗﺸﺎﺭﻟﺰ ﺑﺎﺑﺎﺝ ﻋﻠﻰ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻴﻜﺎﻧﻴﻜﻴﺔ‬
‫ﺍﻟﺨﺎﺻﺔﺑﻪ ‪ ،‬ﻣﺤﺮﻛﺎﺕ ﺍﻻﺧﺘﻼﻑ ﻭﺍﻟﺘﺤﻠﻴﻞ ‪ ،‬ﻭﻛﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﻌﺪﺩﻳﺔ‪.‬‬

‫ﺗﻢﻧﺸﺮ ﺍﻟﺘﺼﻤﻴﻢ ﻭﺍﻷﺳﺎﺱ ﺍﻟﻤﻨﻄﻘﻲ ﻟـ ‪ Ada‬ﺑﻮﺍﺳﻄﺔ ‪ ACM‬ﻓﻲ ﻣﻠﻔﻬﺎ ﺇﺷﻌﺎﺭﺍﺕ‬


‫‪.)SIGPLAN‬ﻭﺗﻢ ﺗﻮﺯﻳﻌﻬﺎ ﻋﻠﻰ ﺟﻤﻬﻮﺭ ﻣﻦ ﺃﻛﺜﺮ ﻣﻦ ‪ 10000‬ﺷﺨﺺ‪ .‬ﺗﻢ ﻋﻘﺪ ﻣﺆﺗﻤﺮ ﺍﺧﺘﺒﺎﺭ‬
‫ﻭﺗﻘﻴﻴﻢﻋﺎﻡ ﻓﻲ ﺃﻛﺘﻮﺑﺮ ‪ 1979‬ﻓﻲ ﺑﻮﺳﻄﻦ ‪ ،‬ﻣﻊ ﻣﻤﺜﻠﻴﻦ ﻣﻦ ﺃﻛﺜﺮ ﻣﻦ ‪ 100‬ﻣﻨﻈﻤﺔ ﻣﻦ‬
‫ﺍﻟﻮﻻﻳﺎﺕﺍﻟﻤﺘﺤﺪﺓ ﻭﺃﻭﺭﻭﺑﺎ‪ .‬ﺑﺤﻠﻮﻝ ﻧﻮﻓﻤﺒﺮ ‪ ،‬ﺗﻢ ﺗﻠﻘﻲ ﺃﻛﺜﺮ ﻣﻦ ‪ 500‬ﺗﻘﺮﻳﺮ ﻟﻐﻮﻱ ﻣﻦ ‪ 15‬ﺩﻭﻟﺔ‬
‫ﻣﺨﺘﻠﻔﺔ‪.‬ﺍﻗﺘﺮﺣﺖ ﻣﻌﻈﻢ ﺍﻟﺘﻘﺎﺭﻳﺮ ﺗﻌﺪﻳﻼﺕ ﺻﻐﻴﺮﺓ ﺑﺪﻻ ًﻣﻦ ﺗﻐﻴﻴﺮﺍﺕ ﺟﺬﺭﻳﺔ ﻭﺭﻓﺾ ﻣﻄﻠﻖ‪.‬‬
‫ﺍﺳﺘﻨﺎﺩﺍًﺇﻟﻰ ﺗﻘﺎﺭﻳﺮ ﺍﻟﻠﻐﺔ ‪ ،‬ﺗﻢ ﺇﺻﺪﺍﺭ ﺍﻹﺻﺪﺍﺭ ﺍﻟﺘﺎﻟﻲ ﻣﻦ ﻣﻮﺍﺻﻔﺎﺕ ﺍﻟﻤﺘﻄﻠﺒﺎﺕ ‪ ،‬ﻭﺛﻴﻘﺔ‬
‫ﺳﺘﻮﻧﻤﺎﻥ)ﻭﺯﺍﺭﺓ ﺍﻟﺪﻓﺎﻉ ‪ 1980 ،‬ﺃ( ‪ ،‬ﻓﻲ ﻓﺒﺮﺍﻳﺮ ‪ACM ، 1979( 1980‬‬

‫ﺗﻢﺍﻻﻧﺘﻬﺎء ﻣﻦ ﻧﺴﺨﺔ ﻣﻨﻘﺤﺔ ﻣﻦ ﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻓﻲ ﻳﻮﻟﻴﻮ ‪ 1980‬ﻭﺗﻢ ﻗﺒﻮﻟﻬﺎ ﻛﻤﻌﻴﺎﺭ ‪1815‬‬
‫‪MIL-STD‬ﺍﻟﺪﻟﻴﻞ ﺍﻟﻤﺮﺟﻌﻲ ﻟﻠﻐﺔ ‪ .Ada‬ﺗﻢ ﺍﺧﺘﻴﺎﺭ ﺍﻟﺮﻗﻢ ‪ 1815‬ﻷﻧﻪ ﻛﺎﻥ ﻋﺎﻡ ﻣﻴﻼﺩ ﺃﻭﻏﺴﺘﺎ ﺁﺩﺍ‬
‫ﺑﺎﻳﺮﻭﻥ‪.‬ﻧﺴﺨﺔ ﻣﻨﻘﺤﺔ ﺃﺧﺮﻯ ﻣﻦﺍﻟﺪﻟﻴﻞ ﺍﻟﻤﺮﺟﻌﻲ ﻟﻠﻐﺔ ‪ Ada‬ﺗﻢ ﺇﺻﺪﺍﺭﻩ ﻓﻲ ﻳﻮﻟﻴﻮ ‪ .1982‬ﻓﻲ‬
‫ﻋﺎﻡ‪ ، 1983‬ﻗﺎﻡ ﺍﻟﻤﻌﻬﺪ ﺍﻟﻘﻮﻣﻲ ﺍﻷﻣﺮﻳﻜﻲ ﻟﻠﻤﻌﺎﻳﻴﺮ ﺑﺘﻮﺣﻴﺪ ﻣﻌﺎﻳﻴﺮ ‪ .Ada‬ﺗﻢ ﻭﺻﻒ ﻫﺬﻩ‬
‫ﺍﻟﻨﺴﺨﺔﺍﻟﺮﺳﻤﻴﺔ "ﺍﻟﻨﻬﺎﺉﻴﺔ" ﻓﻲ (‪ .Goos and Hartmanis )1983‬ﺛﻢ ﺗﻢ ﺗﺠﻤﻴﺪ ﺗﺼﻤﻴﻢ‬
‫ﻟﻐﺔ‪ Ada‬ﻟﻤﺪﺓ ﺧﻤﺲ ﺳﻨﻮﺍﺕ ﻋﻠﻰ ﺍﻷﻗﻞ‪.‬‬

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


‫ﻳﺼﻒﻫﺬﺍ ﺍﻟﻘﺴﻢ ﺍﻟﻔﺮﻋﻲ ﺑﺈﻳﺠﺎﺯ ﺃﺭﺑﻌﺔ ﻣﻦ ﺍﻟﻤﺴﺎﻫﻤﺎﺕ ﺍﻟﺮﺉﻴﺴﻴﺔ ﻟﻠﻐﺔ ‪.Ada‬‬

‫ﺗﻮﻓﺮﺍﻟﺤﺰﻡ ﺑﻠﻐﺔ ‪ Ada‬ﺍﻟﻮﺳﺎﺉﻞ ﻟﺘﻐﻠﻴﻒ ﻛﺎﺉﻨﺎﺕ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻭﻣﻮﺍﺻﻔﺎﺕ ﺃﻧﻮﺍﻉ ﺍﻟﺒﻴﺎﻧﺎﺕ‬


‫ﻭﺍﻹﺟﺮﺍءﺍﺕ‪.‬ﻭﻫﺬﺍ ﺑﺪﻭﺭﻩ ﻳﻮﻓﺮ ﺍﻟﺪﻋﻢ ﻻﺳﺘﺨﺪﺍﻡ ﺗﺠﺮﻳﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻓﻲ ﺗﺼﻤﻴﻢ ﺍﻟﺒﺮﻧﺎﻣﺞ ‪ ،‬ﻛﻤﺎ ﻫﻮ‬
‫ﻣﻮﺿﺢﻓﻲ ﺍﻟﻔﺼﻞ ‪.11‬‬

‫ﺗﺘﻀﻤﻦﻟﻐﺔ ‪ Ada‬ﺗﺴﻬﻴﻼﺕ ﻭﺍﺳﻌﺔ ﻟﻠﺘﻌﺎﻣﻞ ﻣﻊ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﺢ ﻟﻠﻤﺒﺮﻣﺞ‬


‫ﺑﺎﻟﺘﺤﻜﻢﺑﻌﺪ ﺃﻱ ﻭﺍﺣﺪ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻭﺍﺳﻌﺔ‬
‫‪83‬‬ ‫‪2.14‬ﺃﻛﺒﺮ ﺟﻬﺪ ﺗﺼﻤﻴﻢ ﻓﻲ ﺍﻟﺘﺎﺭﻳﺦ‪Ada :‬‬

‫ﻣﻦﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﺃﻭ ﺃﺧﻄﺎء ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻣﻌﺎﻟﺠﺔ ﺍﻻﺳﺘﺜﻨﺎءﺍﺕ ﻓﻲ ﺍﻟﻔﺼﻞ‬


‫‪.14‬‬
‫ﻳﻤﻜﻦﺃﻥ ﺗﻜﻮﻥ ﻭﺣﺪﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻋﺎﻣﺔ ﻓﻲ ‪ .Ada‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻣﻦ ﺍﻟﻤﻤﻜﻦ ﻛﺘﺎﺑﺔ‬
‫ﺇﺟﺮﺍءﻓﺮﺯ ﻳﺴﺘﺨﺪﻡ ﻧﻮﻋﺎً ﻏﻴﺮ ﻣﺤﺪﺩ ﻟﻠﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺮﺍﺩ ﻓﺮﺯﻫﺎ‪ .‬ﻳﺠﺐ ﺇﻧﺸﺎء ﻣﺜﻴﻞ ﻟﻤﺜﻞ ﻫﺬﺍ ﺍﻹﺟﺮﺍء‬
‫ﺍﻟﻌﺎﻡﻟﻨﻮﻉ ﻣﺤﺪﺩ ﻗﺒﻞ ﺍﺳﺘﺨﺪﺍﻣﻪ ‪ ،‬ﻭﻳﺘﻢ ﺫﻟﻚ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻋﺒﺎﺭﺓ ﺗﺆﺩﻱ ﺇﻟﻰ ﻗﻴﺎﻡ ﺍﻟﻤﺤﻮﻝ ﺍﻟﺒﺮﻣﺠﻲ‬
‫ﺑﺈﻧﺸﺎءﻧﺴﺨﺔ ﻣﻦ ﺍﻹﺟﺮﺍء ﺑﺎﻟﻨﻮﻉ ﺍﻟﻤﺤﺪﺩ‪ .‬ﻳﺰﻳﺪ ﺗﻮﺍﻓﺮ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﻌﺎﻣﺔ ﻣﻦ ﻧﻄﺎﻕ‬
‫ﻭﺣﺪﺍﺕﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﺘﻲ ﻳﻤﻜﻦ ﻟﻠﻤﺒﺮﻣﺠﻴﻦ ﺇﻋﺎﺩﺓ ﺍﺳﺘﺨﺪﺍﻣﻬﺎ ﺑﺪﻻ ًﻣﻦ ﺗﻜﺮﺍﺭﻫﺎ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﻋﻠﻢ‬
‫ﺍﻟﻮﺭﺍﺛﺔﻓﻲ ﺍﻟﻔﺼﻠﻴﻦ ‪ 9‬ﻭ ‪.11‬‬

‫ﺗﻮﻓﺮﻟﻐﺔ ‪ Ada‬ﺃﻳﻀﺎً ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﻤﺘﺰﺍﻣﻦ ﻟﻮﺣﺪﺍﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﺨﺎﺻﺔ ‪ ،‬ﻭﺍﻟﻤﻬﺎﻡ ﺍﻟﻤﺴﻤﺎﺓ ‪،‬‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﺁﻟﻴﺔ ﺍﻻﻟﺘﻘﺎء‪ Rendezvous .‬ﻫﻮ ﺍﺳﻢ ﻃﺮﻳﻘﺔ ﺍﻻﺗﺼﺎﻝ ﻭﺍﻟﺘﺰﺍﻣﻦ ﺑﻴﻦ ﺍﻟﻤﻬﺎﻡ‪ .‬ﺗﻤﺖ‬
‫ﻣﻨﺎﻗﺸﺔﺍﻟﺘﺰﺍﻣﻦ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.13‬‬

‫‪2.14.4‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻟﻌﻞﺃﻫﻢ ﺟﻮﺍﻧﺐ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ‪ Ada‬ﺍﻟﺘﻲ ﻳﺠﺐ ﻣﺮﺍﻋﺎﺗﻬﺎ ﻫﻲ ﻣﺎ ﻳﻠﻲ‪:‬‬

‫• ﻷﻥ ﺍﻟﺘﺼﻤﻴﻢ ﻛﺎﻥ ﺗﻨﺎﻓﺴﻴﺎً ‪ ،‬ﻟﻢ ﺗﻜﻦ ﻫﻨﺎﻙ ﻗﻴﻮﺩ ﻋﻠﻰ ﺍﻟﻤﺸﺎﺭﻛﺔ‪.‬‬


‫• ﻟﻐﺔ ‪ Ada‬ﺗﺠﺴﺪ ﻣﻌﻈﻢ ﻣﻔﺎﻫﻴﻢ ﻫﻨﺪﺳﺔ ﺍﻟﺒﺮﻣﺠﻴﺎﺕ ﻭﺗﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ‪.‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻳﻤﻜﻦ ﻟﻠﻤﺮء ﺃﻥ ﻳﺘﺴﺎءﻝ ﻋﻦ ﺍﻷﺳﺎﻟﻴﺐ ﺍﻟﻔﻌﻠﻴﺔ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻟﺪﻣﺞ ﻫﺬﻩ‬
‫ﺍﻟﻤﻴﺰﺍﺕ ‪،‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺍﻟﺤﻜﻤﺔ ﻣﻦ ﺗﻀﻤﻴﻦ ﻣﺜﻞ ﻫﺬﺍ ﺍﻟﻌﺪﺩ ﺍﻟﻜﺒﻴﺮ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﻓﻲ‬
‫ﺍﻟﻠﻐﺔ ‪،‬ﻳﺘﻔﻖ ﻣﻌﻈﻤﻬﻢ ﻋﻠﻰ ﺃﻥ ﺍﻟﻤﻴﺰﺍﺕ ﺫﺍﺕ ﻗﻴﻤﺔ‪.‬‬

‫• ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻣﻌﻈﻢ ﺍﻟﻨﺎﺱ ﻟﻢ ﻳﺘﻮﻗﻌﻮﺍ ﺫﻟﻚ ‪ ،‬ﺇﻻ ﺃﻥ ﺗﻄﻮﻳﺮ ﻣﺘﺮﺟﻢ ﻟﻠﻐﺔ ‪ Ada‬ﻛﺎﻥ‬
‫ﻣﻬﻤﺔﺻﻌﺒﺔ‪ .‬ﻓﻘﻂ ﻓﻲ ﻋﺎﻡ ‪ ، 1985‬ﺑﻌﺪ ﻣﺎ ﻳﻘﺮﺏ ﻣﻦ ﺃﺭﺑﻊ ﺳﻨﻮﺍﺕ ﻣﻦ ﺍﻛﺘﻤﺎﻝ ﺗﺼﻤﻴﻢ‬
‫ﺍﻟﻠﻐﺔ ‪،‬ﺑﺪﺃﺕ ﺑﺮﺍﻣﺞ ﺍﻟﺘﺤﻮﻳﻞ ﺍﻟﺒﺮﻣﺠﻲ ‪ Ada‬ﺍﻟﺼﺎﻟﺤﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﺣﻘﺎً ﻓﻲ ﺍﻟﻈﻬﻮﺭ‪.‬‬

‫ﻛﺎﻥﺃﺧﻄﺮ ﺍﻧﺘﻘﺎﺩ ﻟـ ‪ Ada‬ﻓﻲ ﺳﻨﻮﺍﺗﻬﺎ ﺍﻟﻘﻠﻴﻠﺔ ﺍﻷﻭﻟﻰ ﻫﻮ ﺃﻧﻬﺎ ﻛﺎﻧﺖ ﻛﺒﻴﺮﺓ ﺟﺪﺍً ﻭﻣﻌﻘﺪﺓ‬
‫ﻟﻠﻐﺎﻳﺔ‪.‬ﻋﻠﻰ ﻭﺟﻪ ﺍﻟﺨﺼﻮﺹ ‪ ،‬ﺫﻛﺮ (‪ Hoare )1981‬ﺃﻧﻪ ﻻ ﻳﻨﺒﻐﻲ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻷﻱ ﺗﻄﺒﻴﻖ ﺣﻴﺚ‬
‫ﺗﻜﻮﻥﺍﻟﻤﻮﺛﻮﻗﻴﺔ ﺃﻣﺮﺍً ﺑﺎﻟﻎ ﺍﻷﻫﻤﻴﺔ ‪ ،‬ﻭﻫﻮ ﺑﺎﻟﻀﺒﻂ ﻧﻮﻉ ﺍﻟﺘﻄﺒﻴﻖ ﺍﻟﺬﻱ ﺗﻢ ﺗﺼﻤﻴﻤﻪ ﻣﻦ ﺃﺟﻠﻪ‪ .‬ﻣﻦ‬
‫ﻧﺎﺣﻴﺔﺃﺧﺮﻯ ‪ ،‬ﺃﺷﺎﺩ ﺁﺧﺮﻭﻥ ﺑﻬﺎ ﺑﺎﻋﺘﺒﺎﺭﻫﺎ ﻣﺜﺎﻻً ﻟﺘﺼﻤﻴﻢ ﺍﻟﻠﻐﺔ ﻓﻲ ﻭﻗﺘﻬﺎ‪ .‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺣﺘﻰ ﻫﻮﺭ‬
‫ﺧﻔﻒﻓﻲ ﺍﻟﻨﻬﺎﻳﺔ ﻧﻈﺮﺗﻪ ﻟﻠﻐﺔ‪.‬‬

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

‫‪ --‬ﺑﺮﻧﺎﻣﺞ ﻣﺜﺎﻝ ‪Ada‬‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، List_Len ،‬ﺣﻴﺚ ﻳﻜﻮﻥ ‪ List_Len‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻋﺎً ﺑﻘﻴﻢ‬ ‫‪ --‬ﻣﺪﺧﻞ‪:‬‬
‫‪ -List_Len‬ﻋﺪﺩ ﺻﺤﻴﺢ‬ ‫‪--‬‬
‫‪ --‬ﺍﻹﺧﺮﺍﺝ‪ :‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻷﻛﺒﺮ‬
‫ﻣﻦﻣﺘﻮﺳﻂ ﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ‪، Ada.Integer.Text_IO‬‬ ‫‪--‬‬
‫‪Ada.Text_IO‬؛ ‪ Ada.Text_IO ، Ada.Integer.Text_IO‬؛‬ ‫ﻣﻊ‬
‫ﻳﺴﺘﺨﺪﻡ‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪84‬‬

‫ﺇﺟﺮﺍء‪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 = :‬ﺣﻠﻘﺔ‬

‫ﺍﻟﺤﺼﻮﻝﻋﻠﻰ )(‪ (Int_List )Counter‬؛ ﺍﻟﻤﺠﻤﻮﻉ‪= :‬‬


‫‪) Sum + Int_List‬ﻋﺪﺍﺩ( ؛ ﺣﻠﻘﺔ ﺍﻟﻨﻬﺎﻳﺔ‬

‫‪ --‬ﺣﺴﺎﺏ ﺍﻟﻤﺘﻮﺳﻂ ﺍﻟﻤﺘﻮﺳﻂ‪/ List_Len = :‬‬


‫‪ Sum‬؛‬
‫‪ --‬ﻋﺪ ﻋﺪﺩ ﺍﻟﻘﻴﻢ ﺍﻟﺘﻲ ﺗﻜﻮﻥ< ﻣﺘﻮﺳﻂ ﻝﺍﻟﻌﺪﺍﺩ‪List_Len .. 1 = :‬ﺣﻠﻘﺔ‬

‫ﻟﻮﻣﺘﻮﺳﻂ <(ﻋﺪﺍﺩ) ‪Int_List‬ﺛﻢ‬


‫ﺍﻟﻨﺘﻴﺠﺔ‪ =:‬ﺍﻟﻨﺘﻴﺠﺔ ‪ 1 +‬؛‬
‫ﺇﻧﻬﺎءﺇﺫﺍ؛‬
‫ﺣﻠﻘﺔﺍﻟﻨﻬﺎﻳﺔ‬
‫‪ --‬ﻧﺘﻴﺠﺔ ﺍﻟﻄﺒﺎﻋﺔ‬
‫ﺿﻊ)"ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ‪(":‬؛ ﻭﺿﻊ )ﻧﺘﻴﺠﺔ( ؛‬

‫ﺧﻂﺟﺪﻳﺪ؛‬
‫ﺁﺧﺮ‬
‫؛ ("ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ") ‪ Put_Line‬ﺇﻧﻬﺎء ﺇﺫﺍ؛‬

‫ﻧﻬﺎﻳﺔ؛ ‪Ada_Ex‬‬

‫‪2.14.5 Ada 95 and Ada2005‬‬


‫ﻳﺘﻢﻭﺻﻒ ﺍﺛﻨﻴﻦ ﻣﻦ ﺃﻫﻢ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺠﺪﻳﺪﺓ ﻓﻲ ‪ Ada 95‬ﺑﺈﻳﺠﺎﺯ ﻓﻲ ﺍﻟﻔﻘﺮﺍﺕ ﺍﻟﺘﺎﻟﻴﺔ‪ .‬ﻓﻲ ﺍﻟﺠﺰء‬
‫ﺍﻟﻤﺘﺒﻘﻲﻣﻦ ﺍﻟﻜﺘﺎﺏ ‪ ،‬ﺳﻨﺴﺘﺨﺪﻡ ﺍﺳﻢ ‪ Ada 83‬ﻟﻺﺻﺪﺍﺭ ﺍﻷﺻﻠﻲ ﻭ ‪) Ada 95‬ﺍﺳﻤﻪ ﺍﻟﻔﻌﻠﻲ(‬
‫ﻟﻺﺻﺪﺍﺭﺍﻷﺣﺪﺙ ﻋﻨﺪﻣﺎ ﻳﻜﻮﻥ ﻣﻦ ﺍﻟﻤﻬﻢ ﺍﻟﺘﻤﻴﻴﺰ ﺑﻴﻦ ﺍﻟﻨﺴﺨﺘﻴﻦ‪ .‬ﻓﻲ ﺍﻟﻤﻨﺎﻗﺸﺎﺕ ﺣﻮﻝ ﻣﻴﺰﺍﺕ‬
‫ﺍﻟﻠﻐﺔﺍﻟﻤﺸﺘﺮﻛﺔ ﻟﻜﻼ ﺍﻹﺻﺪﺍﺭﻳﻦ ‪ ،‬ﺳﻨﺴﺘﺨﺪﻡ ﺍﺳﻢ ‪ .Ada‬ﺗﻢ ﺗﻌﺮﻳﻒ ﻟﻐﺔ ‪ Ada 95‬ﺍﻟﻘﻴﺎﺳﻴﺔ ﻓﻲ‬
‫(‪.ARM )1995‬‬

‫ﺗﻢﺗﻤﺪﻳﺪ ﺁﻟﻴﺔ ﺍﺷﺘﻘﺎﻕ ﺍﻟﻨﻮﻉ ﻟـ ‪ 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‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ‪Smalltalk :‬‬


‫ﻛﺎﻧﺖ‪ Smalltalk‬ﻫﻲ ﺃﻭﻝ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﺑﺸﻜﻞ ﻛﺎﻣﻞ‪ .‬ﻟﺬﻟﻚ ﻓﻬﻮ ﺟﺰء‬
‫ﻣﻬﻢﻣﻦ ﺃﻱ ﻣﻨﺎﻗﺸﺔ ﻟﺘﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‪.‬‬

‫‪2.15.1‬ﻋﻤﻠﻴﺔ ﺍﻟﺘﺼﻤﻴﻢ‬
‫ﻧﺸﺄﺕﺍﻟﻤﻔﺎﻫﻴﻢ ﺍﻟﺘﻲ ﺃﺩﺕ ﺇﻟﻰ ﺗﻄﻮﻳﺮ ‪ Smalltalk‬ﻓﻲ ﺭﺳﺎﻟﺔ ﺍﻟﺪﻛﺘﻮﺭﺍﻩ‪ .‬ﺃﻃﺮﻭﺣﺔ ﺃﻻﻥ ﻛﺎﻱ ﻓﻲ‬
‫ﺃﻭﺍﺧﺮﺍﻟﺴﺘﻴﻨﻴﺎﺕ ﻓﻲ ﺟﺎﻣﻌﺔ ﻳﻮﺗﺎ )ﻛﺎﻱ ‪ .(1969 ،‬ﻛﺎﻥ ﻟﺪﻯ ﻛﺎﻱ ﺍﻟﺒﺼﻴﺮﺓ ﺍﻟﺮﺍﺉﻌﺔ ﻟﻠﺘﻨﺒﺆ ﺑﺎﻟﺘﻮﺍﻓﺮ‬
‫ﺍﻟﻤﺴﺘﻘﺒﻠﻲﻷﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻜﺘﺒﻴﺔ ﺍﻟﻘﻮﻳﺔ‪ .‬ﺗﺬﻛﺮ ﺃﻥ ﺃﻧﻈﻤﺔ ﺍﻟﺤﻮﺍﺳﻴﺐ ﺍﻟﺼﻐﻴﺮﺓ ﺍﻷﻭﻟﻰ ﻟﻢ‬
‫ﻳﺘﻢﺗﺴﻮﻳﻘﻬﺎ ﺣﺘﻰ ﻣﻨﺘﺼﻒ ﺍﻟﺴﺒﻌﻴﻨﻴﺎﺕ ‪ ،‬ﻭﺃﻧﻬﺎ ﻛﺎﻧﺖ ﻣﺮﺗﺒﻄﺔ ﻓﻘﻂ ﻋﻦ ﺑﻌﺪ ﺑﺎﻷﺟﻬﺰﺓ ﺍﻟﺘﻲ‬
‫ﺗﺼﻮﺭﻫﺎﻛﺎﻱ ‪ ،‬ﻭﺍﻟﺘﻲ ﺷﻮﻫﺪﺕ ﺗﻨﻔﺬ ﻣﻠﻴﻮﻥ ﺗﻌﻠﻴﻤﺎﺕ ﺃﻭ ﺃﻛﺜﺮ ﻓﻲ ﺍﻟﺜﺎﻧﻴﺔ ﻭﺗﺤﺘﻮﻱ ﻋﻠﻰ ﻋﺪﺓ ﻣﻴﻐﺎ‬
‫ﺑﺎﻳﺖﻣﻦ ﺍﻟﺬﺍﻛﺮﺓ‪ .‬ﺃﺻﺒﺤﺖ ﻫﺬﻩ ﺍﻵﻻﺕ ‪ ،‬ﻓﻲ ﺷﻜﻞ ﻣﺤﻄﺎﺕ ﻋﻤﻞ ‪ ،‬ﻣﺘﺎﺣﺔ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ‬
‫ﻓﻘﻂﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ‪.‬‬

‫ﺍﻋﺘﻘﺪﻛﺎﻱ ﺃﻥ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺍﻟﻤﻜﺘﺒﻴﺔ ﺳﺘﺴﺘﺨﺪﻡ ﻣﻦ ﻗﺒﻞ ﻏﻴﺮ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ‪ ،‬ﻭﺑﺎﻟﺘﺎﻟﻲ‬


‫ﺳﺘﺤﺘﺎﺝﺇﻟﻰ ﻗﺪﺭﺍﺕ ﺗﻔﺎﻋﻞ ﺑﺸﺮﻳﺔ ﻗﻮﻳﺔ ﻟﻠﻐﺎﻳﺔ‪ .‬ﻛﺎﻧﺖ ﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻟﺴﺘﻴﻨﻴﺎﺕ‬
‫ﻣﻮﺟﻬﺔﺇﻟﻰ ﺣﺪ ﻛﺒﻴﺮ ﻭﻛﺎﻧﺖ ﺗﺴﺘﺨﺪﻡ ﺣﺼﺮﻳﺎً ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ﻭﺍﻟﻌﻠﻤﺎء ﺍﻟﻤﺤﺘﺮﻓﻴﻦ‪ .‬ﻗﺮﺭ‬
‫ﻛﺎﻱﺃﻧﻪ ﻻﺳﺘﺨﺪﺍﻣﻪ ﻣﻦ ﻗﺒﻞ ﻏﻴﺮ ﺍﻟﻤﺒﺮﻣﺠﻴﻦ ‪ ،‬ﻳﺠﺐ ﺃﻥ ﻳﻜﻮﻥ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ﺗﻔﺎﻋﻠﻴﺎً ﻟﻠﻐﺎﻳﺔ‬
‫ﻭﻳﺴﺘﺨﺪﻡﺭﺳﻮﻣﺎﺕ ﻣﺘﻄﻮﺭﺓ ﻓﻲ ﻭﺍﺟﻬﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺨﺎﺻﺔ ﺑﻪ‪ .‬ﺟﺎءﺕ ﺑﻌﺾ ﻣﻔﺎﻫﻴﻢ‬
‫ﺍﻟﺮﺳﻮﻣﺎﺕﻣﻦ‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪86‬‬

‫ﺗﺠﺮﺑﺔ‪ LOGO‬ﻟـ ‪ ، Seymour Papert‬ﺣﻴﺚ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺮﺳﻮﻣﺎﺕ ﻟﻤﺴﺎﻋﺪﺓ ﺍﻷﻃﻔﺎﻝ ﻓﻲ‬


‫ﺍﺳﺘﺨﺪﺍﻡﺃﺟﻬﺰﺓ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ )‪.(Papert ، 1980‬‬
‫ﺗﺼﻮﺭﻛﺎﻱ ﻓﻲ ﺍﻷﺻﻞ ﻧﻈﺎﻣﺎً ﺃﺳﻤﺎﻩ ‪ ، Dynabook‬ﻭﺍﻟﺬﻱ ﻛﺎﻥ ﻣﻦ ﺍﻟﻤﻔﺘﺮﺽ ﺃﻥ ﻳﻜﻮﻥ‬
‫ﻣﻌﺎﻟﺠﺎًﻋﺎﻣﺎً ﻟﻠﻤﻌﻠﻮﻣﺎﺕ‪ .‬ﻛﺎﻥ ﻳﻌﺘﻤﺪ ﺟﺰﺉﻴﺎً ﻋﻠﻰ ﻟﻐﺔ ‪ ، Flex‬ﺍﻟﺘﻲ ﺳﺎﻋﺪ ﻓﻲ ﺗﺼﻤﻴﻤﻬﺎ‪ .‬ﺍﻋﺘﻤﺪ‬
‫‪ Flex‬ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ ﻋﻠﻰ ‪ .SIMULA 67‬ﺍﺳﺘﺨﺪﻡ ‪ Dynabook‬ﻧﻤﻮﺫﺝ ﺍﻟﻤﻜﺘﺐ ﺍﻟﻨﻤﻮﺫﺟﻲ ‪،‬‬
‫ﺣﻴﺚﻳﻮﺟﺪ ﻋﺪﺩ ﻣﻦ ﺍﻷﻭﺭﺍﻕ ‪ ،‬ﺑﻌﻀﻬﺎ ﻣﻐﻄﻰ ﺟﺰﺉﻴﺎً‪ .‬ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﻜﻮﻥ ﺍﻟﻮﺭﻗﺔ ﺍﻟﻌﻠﻴﺎ ﻫﻲ ﻣﺤﻮﺭ‬
‫ﺍﻻﻫﺘﻤﺎﻡ ‪،‬ﺑﻴﻨﻤﺎ ﻳﻜﻮﻥ ﺍﻵﺧﺮﻭﻥ ﺧﺎﺭﺝ ﻧﻄﺎﻕ ﺍﻟﺘﺮﻛﻴﺰ ﻣﺆﻗﺘﺎً‪ .‬ﺳﻴﻌﺮﺽ ﻋﺮﺽ ‪ Dynabook‬ﻫﺬﺍ‬
‫ﺍﻟﻤﺸﻬﺪ ‪،‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻧﻮﺍﻓﺬ ﺍﻟﺸﺎﺷﺔ ﻟﺘﻤﺜﻴﻞ ﺃﻭﺭﺍﻕ ﻣﺨﺘﻠﻔﺔ ﻋﻠﻰ ﺳﻄﺢ ﺍﻟﻤﻜﺘﺐ‪ .‬ﻳﺘﻔﺎﻋﻞ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻡﻣﻊ ﻣﺜﻞ ﻫﺬﻩ ﺍﻟﺸﺎﺷﺔ ﺳﻮﺍء ﻣﻦ ﺧﻼﻝ ﺿﻐﻄﺎﺕ ﺍﻟﻤﻔﺎﺗﻴﺢ ﺃﻭ ﻋﻦ ﻃﺮﻳﻖ ﻟﻤﺲ‬
‫ﺍﻟﺸﺎﺷﺔﺑﺄﺻﺎﺑﻌﻪ‪ .‬ﺑﻌﺪ ﺃﻥ ﺃﻛﺴﺒﻪ ﺍﻟﺘﺼﻤﻴﻢ ﺍﻷﻭﻟﻲ ﻟـ ‪ Dynabook‬ﺩﺭﺟﺔ ﺍﻟﺪﻛﺘﻮﺭﺍﻩ ‪ ،‬ﺃﺻﺒﺢ‬
‫ﻫﺪﻑﻛﺎﻱ ﻫﻮ ﺇﻧﺸﺎء ﻣﺜﻞ ﻫﺬﻩ ﺍﻵﻟﺔ‪.‬‬

‫ﻭﺟﺪﻛﺎﻱ ﻃﺮﻳﻘﻪ ﺇﻟﻰ ﻣﺮﻛﺰ ﺃﺑﺤﺎﺙ (‪ Xerox Palo Alto )Xerox PARC‬ﻭﻋﺮﺽ ﺃﻓﻜﺎﺭﻩ‬
‫ﻋﻠﻰ‪ .Dynabook‬ﺃﺩﻯ ﺫﻟﻚ ﺇﻟﻰ ﺗﻌﻴﻴﻨﻪ ﻫﻨﺎﻙ ﻭﺍﻟﻮﻻﺩﺓ ﺍﻟﻼﺣﻘﺔ ﻟﻤﺠﻤﻮﻋﺔ ﺃﺑﺤﺎﺙ ﺍﻟﺘﻌﻠﻢ ﻓﻲ‬
‫‪ .Xerox‬ﻛﺎﻧﺖ ﺍﻟﺸﺤﻨﺔ ﺍﻷﻭﻟﻰ ﻟﻠﻤﺠﻤﻮﻋﺔ ﻫﻲ ﺗﺼﻤﻴﻢ ﻟﻐﺔ ﻟﺪﻋﻢ ﻧﻤﻮﺫﺝ ﺑﺮﻣﺠﺔ ‪ Kay‬ﻭﺗﻨﻔﻴﺬﻩ‬
‫ﻋﻠﻰﺃﻓﻀﻞ ﺟﻬﺎﺯ ﻛﻤﺒﻴﻮﺗﺮ ﺷﺨﺼﻲ ﻣﺘﺎﺡ ﻓﻲ ﺫﻟﻚ ﺍﻟﻮﻗﺖ‪ .‬ﻧﺘﺞ ﻋﻦ ﻫﺬﻩ ﺍﻟﺠﻬﻮﺩ ﻧﻈﺎﻡ‬
‫‪" Dynabook‬ﻣﺆﻗﺖ" ﻳﺘﻜﻮﻥ ﻣﻦ ﻣﺤﻄﺔ ﻋﻤﻞ ‪ Xerox Alto‬ﻭﺑﺮﻧﺎﻣﺞ ‪ .Smalltalk-72‬ﻣﻌﺎً ‪،‬‬
‫ﺷﻜﻠﻮﺍﺃﺩﺍﺓ ﺑﺤﺚ ﻟﻤﺰﻳﺪ ﻣﻦ ﺍﻟﺘﻄﻮﻳﺮ‪ .‬ﻭﻗﺪ ﺗﻢ ﺗﻨﻔﻴﺬ ﻋﺪﺩ ﻣﻦ ﺍﻟﻤﺸﺎﺭﻳﻊ ﺍﻟﺒﺤﺜﻴﺔ ﺑﻬﺬﺍ ﺍﻟﻨﻈﺎﻡ ﻣﻨﻬﺎ‬
‫ﻋﺪﺓﺗﺠﺎﺭﺏ ﻟﺘﻌﻠﻴﻢ ﺍﻟﺒﺮﻣﺠﺔ ﻟﻸﻃﻔﺎﻝ‪ .‬ﺇﻟﻰ ﺟﺎﻧﺐ ﺍﻟﺘﺠﺎﺭﺏ ‪ ،‬ﻇﻬﺮﺕ ﺗﻄﻮﺭﺍﺕ ﺃﺧﺮﻯ ﺃﺩﺕ ﺇﻟﻰ‬
‫ﺳﻠﺴﻠﺔﻣﻦ ﺍﻟﻠﻐﺎﺕ ﺍﻧﺘﻬﺖ ﺑـ ‪ .Smalltalk-80‬ﻣﻊ ﻧﻤﻮ ﺍﻟﻠﻐﺔ ﻭﻛﺬﻟﻚ ﻗﻮﺓ ﺍﻷﺟﻬﺰﺓ ﺍﻟﺘﻲ ﺗﻮﺟﺪ‬
‫ﻋﻠﻴﻬﺎ‪.‬ﺑﺤﻠﻮﻝ ﻋﺎﻡ ‪ ، 1980‬ﻛﺎﻧﺖ ﻛﻞ ﻣﻦ ﺍﻟﻠﻐﺔ ﻭﺃﺟﻬﺰﺓ ‪ Xerox‬ﺗﺘﻄﺎﺑﻖ ﺗﻘﺮﻳﺒﺎً ﻣﻊ ﺍﻟﺮﺅﻳﺔ‬
‫ﺍﻟﻤﺒﻜﺮﺓﻟـ ‪.Alan Kay‬‬

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


‫ﻻﻳﺴﻜﻦ ﻋﺎﻟﻢ ‪ Smalltalk‬ﺳﻮﻯ ﺍﻟﻜﺎﺉﻨﺎﺕ ‪ ،‬ﻣﻦ ﺛﻮﺍﺑﺖ ﺍﻷﻋﺪﺍﺩ ﺍﻟﺼﺤﻴﺤﺔ ﺇﻟﻰ ﺃﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ‬
‫ﺍﻟﻤﻌﻘﺪﺓﺍﻟﻜﺒﻴﺮﺓ‪ .‬ﺗﺘﻢ ﺟﻤﻴﻊ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺤﻮﺳﺒﺔ ﻓﻲ ‪ Smalltalk‬ﺑﻨﻔﺲ ﺍﻷﺳﻠﻮﺏ ﺍﻟﻤﻮﺣﺪ‪:‬‬
‫ﺇﺭﺳﺎﻝﺭﺳﺎﻟﺔ ﺇﻟﻰ ﻛﺎﺉﻦ ﻻﺳﺘﺪﻋﺎء ﺇﺣﺪﻯ ﻃﺮﻗﻪ‪ .‬ﺍﻟﺮﺩ ﻋﻠﻰ ﺍﻟﺮﺳﺎﻟﺔ ﻫﻮ ﻛﺎﺉﻦ ‪ ،‬ﺇﻣﺎ ﻳﻘﻮﻡ ﺑﺈﺭﺟﺎﻉ‬
‫ﺍﻟﻤﻌﻠﻮﻣﺎﺕﺍﻟﻤﻄﻠﻮﺑﺔ ﺃﻭ ﻳﻘﻮﻡ ﺑﺒﺴﺎﻃﺔ ﺑﺈﻋﻼﻡ ﺍﻟﻤﺮﺳﻞ ﺑﺄﻥ ﺍﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﻄﻠﻮﺑﺔ ﻗﺪ ﺍﻛﺘﻤﻠﺖ‪.‬‬
‫ﻳﺘﻤﺜﻞﺍﻻﺧﺘﻼﻑ ﺍﻷﺳﺎﺳﻲ ﺑﻴﻦ ﺍﻟﺮﺳﺎﻟﺔ ﻭﺍﺳﺘﺪﻋﺎء ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻓﻲ ﺍﻟﺘﺎﻟﻲ‪ :‬ﻳﺘﻢ ﺇﺭﺳﺎﻝ‬
‫ﺭﺳﺎﻟﺔﺇﻟﻰ ﻛﺎﺉﻦ ﺑﻴﺎﻧﺎﺕ ‪ ،‬ﻋﻠﻰ ﻭﺟﻪ ﺍﻟﺘﺤﺪﻳﺪ ﺇﻟﻰ ﺇﺣﺪﻯ ﺍﻟﻄﺮﻕ ﺍﻟﻤﺤﺪﺩﺓ ﻟﻠﻜﺎﺉﻦ‪ .‬ﻳﺘﻢ ﺑﻌﺪ ﺫﻟﻚ‬
‫ﺗﻨﻔﻴﺬﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﺘﻲ ﺗﻢ ﺍﺳﺘﺪﻋﺎﺅﻫﺎ ‪ ،‬ﻭﻏﺎﻟﺒﺎً ﻣﺎ ﻳﺘﻢ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎﺕ ﺍﻟﻜﺎﺉﻦ ﺍﻟﺬﻱ ﺗﻢ ﺇﺭﺳﺎﻝ‬
‫ﺍﻟﺮﺳﺎﻟﺔﺇﻟﻴﻪ ؛ ﻣﻜﺎﻟﻤﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﻫﻲ ﺭﺳﺎﻟﺔ ﺇﻟﻰ ﺭﻣﺰ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ‪ .‬ﻋﺎﺩﺓ ًﻣﺎ ﻳﺘﻢ ﺇﺭﺳﺎﻝ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕﺍﻟﻤﺮﺍﺩ ﻣﻌﺎﻟﺠﺘﻬﺎ ﺑﻮﺍﺳﻄﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻔﺮﻋﻲ ﺇﻟﻴﻬﺎ ﻛﻤﻌﺎﻣﻞ‪13.‬‬

‫ﻓﻲ‪ ، Smalltalk‬ﺗﺠﺮﻳﺪﺍﺕ ﺍﻟﻜﺎﺉﻨﺎﺕ ﻫﻲ ﻓﺉﺎﺕ ﺗﺸﺒﻪ ﺇﻟﻰ ﺣﺪ ﺑﻌﻴﺪ ﻓﺉﺎﺕ ‪67‬‬


‫‪ .SIMULA‬ﻳﻤﻜﻦ ﺇﻧﺸﺎء ﻣﺜﻴﻼﺕ ﻣﻦ ﺍﻟﻔﺉﺔ ﻭﻣﻦ ﺛﻢ ﺗﺼﺒﺢ ﻛﺎﺉﻨﺎﺕ ﺍﻟﺒﺮﻧﺎﻣﺞ‪.‬‬

‫ﻳﺨﺘﻠﻒﺑﻨﺎء ﺟﻤﻠﺔ ‪ Smalltalk‬ﻋﻦ ﻣﻌﻈﻢ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻷﺧﺮﻯ ‪ ،‬ﻭﻳﺮﺟﻊ ﺫﻟﻚ ﻓﻲ ﺟﺰء‬
‫ﻛﺒﻴﺮﻣﻨﻪ ﺇﻟﻰ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺮﺳﺎﺉﻞ ‪ ،‬ﺑﺪﻻ ًﻣﻦ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﻭ‬

‫‪.13‬ﺑﺎﻟﻄﺒﻊ ‪ ،‬ﻳﻤﻜﻦ ﻻﺳﺘﺪﻋﺎء ﺍﻟﻄﺮﻳﻘﺔ ﺃﻳﻀﺎً ﺗﻤﺮﻳﺮ ﺍﻟﺒﻴﺎﻧﺎﺕ ﻟﺘﺘﻢ ﻣﻌﺎﻟﺠﺘﻬﺎ ﺑﺎﻟﻄﺮﻳﻘﺔ ﺍﻟﺘﻲ ﺗﻢ ﺍﺳﺘﺪﻋﺎﺅﻫﺎ‪.‬‬
‫‪87‬‬ ‫‪2.15‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ‪Smalltalk :‬‬

‫ﺍﻟﺘﻌﺒﻴﺮﺍﺕﺍﻟﻤﻨﻄﻘﻴﺔ ﻭﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﺘﻘﻠﻴﺪﻳﺔ‪ .‬ﺗﻢ ﺗﻮﺿﻴﺢ ﺃﺣﺪ ﺑﻨﻴﺎﺕ ﺍﻟﺘﺤﻜﻢ ‪ Smalltalk‬ﻓﻲ‬
‫ﺍﻟﻤﺜﺎﻝﻓﻲ ﺍﻟﻘﺴﻢ ﺍﻟﻔﺮﻋﻲ ﺍﻟﺘﺎﻟﻲ‪.‬‬

‫‪2.15.3‬ﺍﻟﺘﻘﻴﻴﻢ‬
‫ﻟﻘﺪﻗﺎﻡ ‪ Smalltalk‬ﺑﻌﻤﻞ ﻛﺒﻴﺮ ﻟﺘﻌﺰﻳﺰ ﺟﺎﻧﺒﻴﻦ ﻣﻨﻔﺼﻠﻴﻦ ﻣﻦ ﺍﻟﺤﻮﺳﺒﺔ‪ :‬ﻭﺍﺟﻬﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ‬
‫ﺍﻟﺮﺳﻮﻣﻴﺔﻭﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪ .‬ﻧﺸﺄﺕ ﺃﻧﻈﻤﺔ ﺍﻟﻨﻮﺍﻓﺬ ﺍﻟﺘﻲ ﺃﺻﺒﺤﺖ ﺍﻵﻥ ﺍﻟﻄﺮﻳﻘﺔ‬
‫ﺍﻟﺴﺎﺉﺪﺓﻟﻮﺍﺟﻬﺎﺕ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻷﻧﻈﻤﺔ ﺍﻟﺒﺮﺍﻣﺞ ﻣﻦ ‪ .Smalltalk‬ﺍﻟﻴﻮﻡ ‪ ،‬ﺃﻫﻢ ﻣﻨﻬﺠﻴﺎﺕ ﺗﺼﻤﻴﻢ‬
‫ﺍﻟﺒﺮﻣﺠﻴﺎﺕﻭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻣﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺃﺻﻞ ﺑﻌﺾ ﺃﻓﻜﺎﺭ ﺍﻟﻠﻐﺎﺕ‬
‫ﺍﻟﺸﻴﺉﻴﺔﺟﺎء ﻣﻦ ‪ ، SIMULA 67‬ﺇﻻ ﺃﻧﻬﺎ ﻭﺻﻠﺖ ﺇﻟﻰ ﻣﺮﺣﻠﺔ ﺍﻟﻨﻀﺞ ﻓﻲ ‪ .Smalltalk‬ﻣﻦ‬
‫ﺍﻟﻮﺍﺿﺢﺃﻥ ﺗﺄﺛﻴﺮ ‪ Smalltalk‬ﻋﻠﻰ ﻋﺎﻟﻢ ﺍﻟﺤﻮﺳﺒﺔ ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻭﺳﻴﺴﺘﻤﺮ ﻃﻮﻳﻼ‪ً.‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺗﻌﺮﻳﻒ ﻓﺉﺔ ‪:Smalltalk‬‬

‫"ﺑﺮﻧﺎﻣﺞ ﻣﺜﺎﻝ ‪"Smalltalk‬‬


‫"ﺍﻟﺘﺎﻟﻲ ﻫﻮ ﺗﻌﺮﻳﻒ ﻓﺉﺔ ‪ ،‬ﻳﻤﻜﻦ ﻟﻠﺘﺸﻜﻴﻼﺕ ﺃﻥ ﺗﺮﺳﻢ ﻣﻀﻠﻌﺎﺕ ﻣﺘﺴﺎﻭﻳﺔ ﺍﻷﺿﻼﻉ ﻣﻦ ﺃﻱ ﻋﺪﺩ‬
‫ﻣﻦﺍﻟﺠﻮﺍﻧﺐ"‬

‫ﻣﻀﻠﻊ‬ ‫ﺍﺳﻢﺍﻟﻔﺼﻞ‬
‫ﻫﺪﻑ‬ ‫ﺍﻟﻄﺒﻘﺔﺍﻟﻌﻠﻴﺎ‬
‫ﻗﻠﻤﻨﺎ‬ ‫ﺃﺳﻤﺎءﻣﺘﻐﻴﺮﺍﺕ ﺍﻟﻤﺜﻴﻞ ﻧﻮﻣﺴﻴﺪﻳﺲ‬

‫ﻃﻮﻝﺍﻟﺠﺎﻧﺐ‬
‫"ﻃﺮﻕ ﺍﻟﻔﺼﻞ"‬
‫"ﺇﻧﺸﺎء ﻣﺜﻴﻞ"‬
‫ﺟﺪﻳﺪ‬
‫^ﺳﻮﺑﺮ ﺟﺪﻳﺪ‪getPen‬‬

‫ﺍﻟﺤﺼﻮﻝﻋﻠﻰ ﻗﻠﻢ ﻟﺮﺳﻢ ﺍﻟﻤﻀﻠﻌﺎﺕ ‪getPen‬‬

‫ﺍﻟﻘﻠﻢ‪ourPen >-‬ﺟﺪﻳﺪﺍﻻﻓﺘﺮﺍﺿﻲ‪2 :‬‬

‫"ﻃﺮﻕ ﺍﻟﻤﺜﻴﻞ"‬
‫"ﺍﺭﺳﻢ ﻣﻀﻠﻌﺎً"‬
‫ﻳﺮﺳﻢ‬
‫ﻋﺪﺩﻣﺮﺍﺕ ﺗﻜﺮﺍﺭ‪ourPen go: sideLength] :‬؛‬
‫ﺑﺪﻭﺭﻩ‪[numSides // 360:‬‬

‫ﻃﻮﻝ"ﺿﺒﻂ ﻃﻮﻝ ﺍﻟﺠﻮﺍﻧﺐ"‪ :‬ﻟﻴﻦ‬

‫ﻟﻴﻦ‪sideLength >-‬‬

‫"ﺗﻌﻴﻴﻦ ﻋﺪﺩ ﺍﻟﺠﻮﺍﻧﺐ" ﺟﻮﺍﻧﺐ‪:‬‬


‫ﺍﻷﺳﻄﻮﺍﻧﺎﺕ‬
‫ﻋﺪﺩ‪numSides >-‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪88‬‬

‫‪2.16‬ﺍﻟﺠﻤﻊ ﺑﻴﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﺤﺘﻤﻴﺔ ﻭﺍﻟﻤﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻟﻜﺎﺉﻦ‪++ C :‬‬


‫ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﺃﺻﻮﻝ ‪ C‬ﻓﻲ ﺍﻟﻘﺴﻢ ‪ 2.12‬؛ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺃﺻﻮﻝ ‪ Simula 67‬ﻓﻲ ﺍﻟﻘﺴﻢ‬
‫‪ 2.10‬؛ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺃﺻﻮﻝ ‪ Smalltalk‬ﻓﻲ ﺍﻟﻘﺴﻢ ‪ .2.15‬ﺗﺒﻨﻲ ‪ ++ C‬ﺗﺴﻬﻴﻼﺕ ﻟﻐﻮﻳﺔ ‪،‬‬
‫ﻣﺴﺘﻌﺎﺭﺓﻣﻦ ‪ ، Simula 67‬ﻋﻠﻰ ﺭﺃﺱ ‪ C‬ﻟﺪﻋﻢ ﺍﻟﻜﺜﻴﺮ ﻣﻤﺎ ﺍﺑﺘﻜﺮﻩ ‪ .Smalltalk‬ﺗﻄﻮﺭﺕ ‪++ C‬‬
‫ﻣﻦﻟﻐﺔ ‪ C‬ﻣﻦ ﺧﻼﻝ ﺳﻠﺴﻠﺔ ﻣﻦ ﺍﻟﺘﻌﺪﻳﻼﺕ ﻟﺘﺤﺴﻴﻦ ﻣﻴﺰﺍﺗﻬﺎ ﺍﻟﺤﺘﻤﻴﺔ ﻭﻹﺿﺎﻓﺔ ﺑﻨﻴﺎﺕ ﻟﺪﻋﻢ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪.‬‬

‫‪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 :‬‬

‫ﻓﻲﻋﺎﻡ ‪ ، 2002‬ﺃﺻﺪﺭﺕ ‪ Microsoft‬ﻣﻨﺼﺔ ﺍﻟﺤﻮﺳﺒﺔ ‪ NET.‬ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ‪ ،‬ﻭﺍﻟﺘﻲ‬


‫ﺗﻀﻤﻨﺖﺇﺻﺪﺍﺭﺍً ﺟﺪﻳﺪﺍً ﻣﻦ ‪ ، ++ C‬ﻳﺴُﻤﻰ ‪ ، ++ Managed C‬ﺃﻭ ‪ .++ MC‬ﻳﻘﻮﻡ ‪++ MC‬‬
‫ﺑﺘﻮﺳﻴﻊ‪ ++ C‬ﻟﺘﻮﻓﻴﺮ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ ﻭﻇﺎﺉﻒ ‪ .NET Framework.‬ﺗﺸﻤﻞ ﺍﻹﺿﺎﻓﺎﺕ‬
‫ﺍﻟﺨﺼﺎﺉﺺﻭﺍﻟﻤﻔﻮﺿﻴﻦ ﻭﺍﻟﻮﺍﺟﻬﺎﺕ ﻭﻧﻮﻉ ﻣﺮﺟﻌﻲ ﻟﻠﻜﺎﺉﻨﺎﺕ ﺍﻟﺘﻲ ﺗﻢ ﺟﻤﻌﻬﺎ ﻣﻦ ‪.Garbag‬‬
‫ﺗﻤﺖﻣﻨﺎﻗﺸﺔ ﺍﻟﺨﺼﺎﺉﺺ ﻓﻲ ﺍﻟﻔﺼﻞ ‪ .11‬ﺗﺘﻢ ﻣﻨﺎﻗﺸﺔ ﺍﻟﻤﻨﺪﻭﺑﻴﻦ ﺑﺈﻳﺠﺎﺯ ﻓﻲ ﻣﻘﺪﻣﺔ ‪ # C‬ﻓﻲ‬
‫ﺍﻟﻘﺴﻢ‪ .2.19‬ﻷﻥ ‪ NET.‬ﻻ ﻳﻌﺘﻤﺪ ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ ‪ ،‬ﻭﻻ ‪ ++ MC‬ﺃﻳﻀﺎً‪.‬‬

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


‫ﻧﻈﺮﺍًﻷﻥ ‪ ++ C‬ﻟﻬﺎ ﻭﻇﺎﺉﻒ ﻭﻃﺮﻕ ‪ ،‬ﻓﻬﻲ ﺗﺪﻋﻢ ﻛﻞ ﻣﻦ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻹﺟﺮﺍﺉﻴﺔ ﻭﺍﻟﻤﻮﺟﻬﺔ‬
‫ﻟﻠﻜﺎﺉﻨﺎﺕ‪.‬‬
‫ﻳﻤﻜﻦﺯﻳﺎﺩﺓ ﺍﻟﺘﺤﻤﻴﻞ ﻋﻠﻰ ﺍﻟﻤﺸﻐﻠﻴﻦ ﻓﻲ ‪ ، ++ C‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺇﻧﺸﺎء‬
‫ﻋﻮﺍﻣﻞﺗﺸﻐﻴﻞ ﻟﻠﻤﺸﻐﻠﻴﻦ ﺍﻟﺤﺎﻟﻴﻴﻦ ﻋﻠﻰ ﺃﻧﻮﺍﻉ ﻣﺤﺪﺩﺓ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ‪ .‬ﻳﻤﻜﻦ ﺃﻳﻀﺎً‬
‫ﺗﺤﻤﻴﻞﻃﺮﻕ ‪ ++ C‬ﺑﺸﻜﻞ ﺯﺍﺉﺪ ‪ ،‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﻟﻠﻤﺴﺘﺨﺪﻡ ﺗﺤﺪﻳﺪ ﺃﻛﺜﺮ ﻣﻦ ﻃﺮﻳﻘﺔ‬
‫ﻭﺍﺣﺪﺓﺑﻨﻔﺲ ﺍﻻﺳﻢ ‪ ،‬ﺑﺸﺮﻁ ﺃﻥ ﺗﻜﻮﻥ ﺃﺭﻗﺎﻡ ﺃﻭ ﺃﻧﻮﺍﻉ ﻣﻌﻠﻤﺎﺗﻬﺎ ﻣﺨﺘﻠﻔﺔ‪.‬‬
‫ﻳﺘﻢﺗﻮﻓﻴﺮ ﺍﻟﺮﺑﻂ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﻓﻲ ‪ ++ C‬ﺑﺎﻟﻄﺮﻕ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ‪ .‬ﺗﺤﺪﺩ ﻫﺬﻩ ﺍﻟﻄﺮﻕ ﺍﻟﻌﻤﻠﻴﺎﺕ‬
‫ﺍﻟﻤﻌﺘﻤﺪﺓﻋﻠﻰ ﺍﻟﻨﻮﻉ ‪ ،‬ﺑﺎﺳﺘﺨﺪﺍﻡ ﻃﺮﻕ ﺍﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ ‪ ،‬ﺿﻤﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻔﺉﺎﺕ‬
‫ﺍﻟﻤﺮﺗﺒﻄﺔﺑﺎﻟﻮﺭﺍﺛﺔ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﻳﺸﻴﺮ ﺍﻟﻤﺆﺷﺮ ﺇﻟﻰ ﻛﺎﺉﻦ ﻣﻦ ﺍﻟﻔﺉﺔ ‪ A‬ﺃﻳﻀﺎً ﺇﻟﻰ ﻛﺎﺉﻨﺎﺕ ﻣﻦ‬
‫ﺍﻟﻔﺉﺎﺕﺍﻟﺘﻲ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺍﻟﻔﺉﺔ ‪ A‬ﻛﺄﺻﻞ‪ .‬ﻋﻨﺪﻣﺎ ﻳﺸﻴﺮ ﻫﺬﺍ ﺍﻟﻤﺆﺷﺮ ﺇﻟﻰ ﻃﺮﻳﻘﺔ ﺍﻓﺘﺮﺍﺿﻴﺔ‬
‫ﻣﺤﻤﻠﺔﺑﺸﻜﻞ ﺯﺍﺉﺪ ‪ ،‬ﻳﺘﻢ ﺍﺧﺘﻴﺎﺭ ﻃﺮﻳﻘﺔ ﺍﻟﻨﻮﻉ ﺍﻟﺤﺎﻟﻲ ﺩﻳﻨﺎﻣﻴﻜﻴﺎً‪.‬‬

‫ﻳﻤﻜﻦﻗﻮﻟﺒﺔ ﻛﻞ ﻣﻦ ﺍﻟﻄﺮﻕ ﻭﺍﻟﻔﺉﺎﺕ ‪ ،‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ ﻣﻌﻠﻤﺎﺗﻬﺎ‪ .‬ﻋﻠﻰ ﺳﺒﻴﻞ‬
‫ﺍﻟﻤﺜﺎﻝ ‪،‬ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﻃﺮﻳﻘﺔ ﻛﻄﺮﻳﻘﺔ ﻣﻘﻮﻟﺒﺔ ﻟﻠﺴﻤﺎﺡ ﻟﻬﺎ ﺑﺎﻟﺤﺼﻮﻝ ﻋﻠﻰ ﺇﺻﺪﺍﺭﺍﺕ ﻟﻤﺠﻤﻮﻋﺔ‬
‫ﻣﺘﻨﻮﻋﺔﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻟﻤﻌﻠﻤﺎﺕ‪ .‬ﺗﺘﻤﺘﻊ ﺍﻟﻔﺼﻮﻝ ﺑﻨﻔﺲ ﺍﻟﻤﺮﻭﻧﺔ‪.‬‬

‫ﻳﺪﻋﻢ‪ ++ 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‬‬

‫‪2.16.4‬ﻟﻐﺔ ﺫﺍﺕ ﺻﻠﺔ‪ :‬ﺍﻟﻬﺪﻑ‪C -‬‬


‫‪.‬ﻟﻬﺬﺍﺍﻟﺪﻋﻢ ‪ Smalltalk‬ﻫﻮ ﺍﻟﻮﺣﻴﺪ ﺍﻟﺬﻱ ﻳﺴﺘﺨﺪﻡ ﺻﻴﻐﺔ ‪ Objective-C‬ﻣﻦ ﺑﻴﻦ ﻟﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﺘﻲ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻋﻦ ﻃﺮﻳﻖ ﺇﺿﺎﻓﺔ ﺩﻋﻢ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ﺇﻟﻰ ﻟﻐﺔ ﺣﺘﻤﻴﺔ ‪،‬‬
‫ﻓﺈﻥ ‪ Smalltalk.‬ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﺍﻟﻔﺉﺎﺕ ﻭﺭﺳﺎﻟﺔ ﺗﻤﺮﻳﺮ ‪ C‬ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺜﻤﺎﻧﻴﻨﻴﺎﺕ‪ .‬ﻓﻲ ﺍﻟﺒﺪﺍﻳﺔ ‪،‬‬
‫ﻛﺎﻥﻳﺘﺄﻟﻒ ﻣﻦ ‪ Tom Love‬ﻭ ‪ Brad Cox‬ﺑﻮﺍﺳﻄﺔ ‪ Objective-C‬ﻫﻲ ﻟﻐﺔ ﻫﺠﻴﻨﺔ ﺃﺧﺮﻯ ﺑﻬﺎ‬
‫ﻣﻴﺰﺍﺕﺣﺘﻤﻴﺔ ﻭﻣﻮﺟﻬﺔ ﻧﺤﻮ ﺍﻟﻜﺎﺉﻦ‪ .‬ﺗﻢ ﺗﺼﻤﻴﻢ (ﻛﻮﺗﺸﺎﻥ ‪Objective-C )2009 ،‬‬

‫ﺑﻌﺪﺃﻥ ﺗﺮﻙ ﺳﺘﻴﻒ ﺟﻮﺑﺰ ﺷﺮﻛﺔ ‪ Apple‬ﻭﺃﺳﺲ ﺷﺮﻛﺔ ‪ ، NeXT‬ﻗﺎﻡ ﺑﺘﺮﺧﻴﺺ ‪-C‬‬
‫‪ Objective‬ﻭﺗﻢ ﺍﺳﺘﺨﺪﺍﻣﻪ ﻟﻜﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﻧﻈﺎﻡ ﺍﻟﻜﻤﺒﻴﻮﺗﺮ ‪ .NeXT‬ﺃﺻﺪﺭﺕ ‪ NeXT‬ﺃﻳﻀ ًﺎ‬
‫ﻣﺘﺮﺟﻤﻬﺎ‪ ، Objective-C‬ﺟﻨﺒﺎً ﺇﻟﻰ ﺟﻨﺐ ﻣﻊ ﺑﻴﺉﺔ ﺗﻄﻮﻳﺮ ‪ NeXTstep‬ﻭﻣﻜﺘﺒﺔ ﻣﻦ ﺍﻟﻤﺮﺍﻓﻖ‪.‬‬
‫ﺑﻌﺪﻓﺸﻞ ﻣﺸﺮﻭﻉ ‪ ، NeXT‬ﺍﺷﺘﺮﺕ ‪ Apple NeXT‬ﻭﺍﺳﺘﺨﺪﻣﺖ ‪ Objective-C‬ﻟﻜﺘﺎﺑﺔ ‪-C‬‬
‫‪ MAC OS X. Objective‬ﻫﻲ ﻟﻐﺔ ﺟﻤﻴﻊ ﺑﺮﺍﻣﺞ ‪ ، iPhone‬ﻭﻫﻮ ﻣﺎ ﻳﻔﺴﺮ ﺍﻻﺭﺗﻔﺎﻉ ﺍﻟﺴﺮﻳﻊ ﻓﻲ‬
‫ﺷﻌﺒﻴﺘﻬﺎﺑﻌﺪ ﻇﻬﻮﺭ ‪.iPhone‬‬

‫ﺇﺣﺪﻯﺍﻟﺴﻤﺎﺕ ﺍﻟﺘﻲ ﻭﺭﺛﻬﺎ ‪ Objective-C‬ﻣﻦ ‪ Smalltalk‬ﻫﻲ ﺍﻻﺭﺗﺒﺎﻁ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ‬


‫ﻟﻠﺮﺳﺎﺉﻞﺑﺎﻟﻜﺎﺉﻨﺎﺕ‪ .‬ﻫﺬﺍ ﻳﻌﻨﻲ ﺃﻧﻪ ﻻ ﻳﻮﺟﺪ ﻓﺤﺺ ﺛﺎﺑﺖ ﻟﻠﺮﺳﺎﺉﻞ‪ .‬ﺇﺫﺍ ﺗﻢ ﺇﺭﺳﺎﻝ ﺭﺳﺎﻟﺔ ﺇﻟﻰ‬
‫ﻛﺎﺉﻦﻭﻻ ﻳﻤﻜﻦ ﻟﻠﻜﺎﺉﻦ ﺍﻻﺳﺘﺠﺎﺑﺔ ﻟﻠﺮﺳﺎﻟﺔ ‪ ،‬ﻓﻠﻦ ﻳﻜﻮﻥ ﻣﻌﺮﻭﻓﺎً ﺣﺘﻰ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ ‪ ،‬ﻋﻨﺪ‬
‫ﻇﻬﻮﺭﺍﺳﺘﺜﻨﺎء‪.‬‬

‫ﻓﻲﻋﺎﻡ ‪ ، 2006‬ﺃﻋﻠﻨﺖ ﺷﺮﻛﺔ ‪ Apple‬ﻋﻦ ‪ ، Objective-C 2.0‬ﻭﺍﻟﺬﻱ ﺃﺿﺎﻑ ﺷﻜﻼ ًﻣﻦ‬


‫ﺃﺷﻜﺎﻝﺟﻤﻊ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻬﻤﻠﺔ ﻭﺑﻨﺎء ﺟﻤﻠﺔ ﺟﺪﻳﺪ ﻹﻋﻼﻥ ﺍﻟﺨﺼﺎﺉﺺ‪ .‬ﻟﺴﻮء ﺍﻟﺤﻆ ‪ ،‬ﻻ ﻳﺘﻢ ﺩﻋﻢ‬
‫ﺟﻤﻊﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﻬﻤﻠﺔ ﺑﻮﺍﺳﻄﺔ ﻧﻈﺎﻡ ﻭﻗﺖ ﺗﺸﻐﻴﻞ ‪.iPhone‬‬
‫‪ Objective-C.‬ﻟﺬﺍ ﻓﺈﻥ ﺟﻤﻴﻊ ﺃﻭﺟﻪ ﻋﺪﻡ ﺍﻷﻣﺎﻥ ﻓﻲ ﺗﻠﻚ ﺍﻟﻠﻐﺔ ﻣﻮﺟﻮﺩﺓ ﻓﻲ ‪ C ،‬ﻫﻲ‬
‫ﻣﺠﻤﻮﻋﺔﺷﺎﻣﻠﺔ ﺻﺎﺭﻣﺔ ﻣﻦ ‪Objective-C‬‬

‫‪2.16.5‬ﻟﻐﺔ ﺃﺧﺮﻯ ﺫﺍﺕ ﺻﻠﺔ‪ :‬ﺩﻟﻔﻲ‬


‫ﺩﻟﻔﻲ)ﻟﻴﺴﻨﺮ ‪ (2000 ،‬ﻫﻲ ﻟﻐﺔ ﻫﺠﻴﻨﺔ ‪ ،‬ﺷﺒﻴﻬﺔ ﺑـ ‪ ++ C‬ﻭ ‪ Objetive-C‬ﺣﻴﺚ ﺗﻢ ﺇﻧﺸﺎﺅﻫﺎ ﻋﻦ‬
‫ﻃﺮﻳﻖﺇﺿﺎﻓﺔ ﺩﻋﻢ ﻣﻮﺟﻪ ﻟﻠﻜﺎﺉﻨﺎﺕ ‪ ،‬ﻣﻦ ﺑﻴﻦ ﺃﺷﻴﺎء ﺃﺧﺮﻯ ‪ ،‬ﺇﻟﻰ ﻟﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻮﺟﻮﺩﺓ ‪ ،‬ﻓﻲ ﻫﺬﻩ‬
‫ﺍﻟﺤﺎﻟﺔﺑﺎﺳﻜﺎﻝ‪ .‬ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻻﺧﺘﻼﻓﺎﺕ ﺑﻴﻦ ‪ ++ C‬ﻭ ‪ Delphi‬ﻫﻲ ﻧﺘﻴﺠﺔ ﻟﻠﻐﺎﺕ ﺍﻟﺴﺎﺑﻘﺔ‬
‫ﻭﺛﻘﺎﻓﺎﺕﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﺤﻴﻄﺔ ﺍﻟﺘﻲ ﺗﻢ ﺍﺷﺘﻘﺎﻗﻬﺎ ﻣﻨﻬﺎ‪ .‬ﻧﻈﺮﺍً ﻷﻥ ‪ C‬ﻟﻐﺔ ﻗﻮﻳﺔ ﻭﻟﻜﻨﻬﺎ ﻗﺪ ﺗﻜﻮﻥ ﻏﻴﺮ‬
‫ﺁﻣﻨﺔ ‪،‬ﻓﺈﻥ ‪ ++ C‬ﺗﻨﺎﺳﺐ ﻫﺬﺍ ﺍﻟﻮﺻﻒ ﺃﻳﻀﺎً ‪ ،‬ﻋﻠﻰ ﺍﻷﻗﻞ ﻓﻲ ﻣﺠﺎﻻﺕ ﻓﺤﺺ ﻧﻄﺎﻕ ﺍﻟﺼﻔﻴﻒ‬
‫ﺍﻟﻤﻨﺨﻔﺾ ‪،‬ﻭﺣﺴﺎﺏ ﺍﻟﻤﺆﺷﺮ ‪ ،‬ﻭﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺃﻧﻮﺍﻉ ﺍﻹﻛﺮﺍﻩ ﻋﻠﻰ ﺍﻟﻨﻮﻉ‪ .‬ﻭﺑﺎﻟﻤﺜﻞ ‪ ،‬ﻧﻈﺮﺍً ﻷﻥ‬
‫‪ Pascal‬ﺃﻛﺜﺮ ﺃﻧﺎﻗﺔ ﻭﺃﻣﺎﻧﺎً ﻣﻦ ‪ ، C‬ﻓﺈﻥ ‪ Delphi‬ﺃﻛﺜﺮ ﺃﻧﺎﻗﺔ ﻭﺃﻣﺎﻧﺎً ﻣﻦ ‪ .++ C‬ﺩﻟﻔﻲ ﺃﻳﻀﺎً ﺃﻗﻞ‬
‫ﺗﻌﻘﻴﺪﺍًﻣﻦ ‪ .++ C‬ﻋﻠﻰ ﺳﺒﻴﻞ ﺍﻟﻤﺜﺎﻝ ‪ ،‬ﻻ ﺗﺴﻤﺢ ﺩﻟﻔﻲ ﺑﺎﻟﺘﺤﻤﻴﻞ ﺍﻟﺰﺍﺉﺪ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪،‬‬
‫ﻭﺍﻟﺒﺮﺍﻣﺞﺍﻟﻔﺮﻋﻴﺔ ﺍﻟﻌﺎﻣﺔ ‪ ،‬ﻭﺍﻟﻔﺉﺎﺕ ﺫﺍﺕ ﺍﻟﻤﻌﻠﻤﺎﺕ ‪ ،‬ﻭﻛﻠﻬﺎ ﺟﺰء ﻣﻦ ‪.++ C‬‬

‫ﺗﻮﻓﺮﺩﻟﻔﻲ ‪ ،‬ﻣﺜﻞ ‪ ، ++ Visual C‬ﻭﺍﺟﻬﺔ ﻣﺴﺘﺨﺪﻡ ﺭﺳﻮﻣﻴﺔ )‪ (GUI‬ﻟﻠﻤﻄﻮﺭ ﻭﻃﺮﻕ‬


‫ﺑﺴﻴﻄﺔﻹﻧﺸﺎء ﻭﺍﺟﻬﺎﺕ ﻭﺍﺟﻬﺔ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺍﻟﺮﺳﻮﻣﻴﺔ ﻟﻠﺘﻄﺒﻴﻘﺎﺕ ﺍﻟﻤﻜﺘﻮﺑﺔ ﻓﻲ ﺩﻟﻔﻲ‪ .‬ﺗﻢ‬
‫ﺗﺼﻤﻴﻢﺩﻟﻔﻲ ﺑﻮﺍﺳﻄﺔ ‪ ، Anders Hejlsberg‬ﺍﻟﺬﻱ ﺳﺒﻖ ﺃﻥ ﻃﻮﺭ ﻧﻈﺎﻡ ‪.Turbo Pascal‬‬
‫ﻛﻼﻫﻤﺎﺗﻢ ﺗﺴﻮﻳﻘﻪ ﻭﺗﻮﺯﻳﻌﻪ ﺑﻮﺍﺳﻄﺔ ‪ .Borland‬ﻛﺎﻥ ‪ Hejlsberg‬ﺃﻳﻀﺎً ﺍﻟﻤﺼﻤﻢ ﺍﻟﺮﺉﻴﺴﻲ ﻟـ ‪C‬‬
‫‪.#‬‬
‫‪91‬‬ ‫‪2.17‬ﻟﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪ :‬ﺟﺎﻓﺎ‬

‫‪2.16.6‬ﻟﻐﺔ ﺫﺍﺕ ﺻﻠﺔ ﻓﻀﻔﺎﺿﺔ‪Go :‬‬


‫ﻻﺗﺮﺗﺒﻂ ﻟﻐﺔ ﺍﻟﺒﺮﻣﺠﺔ ‪ Go‬ﻣﺒﺎﺷﺮﺓ ﺑـ ‪ ، ++ C‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ‪ .C‬ﺇﻧﻪ ﻓﻲ ﻫﺬﺍ‬
‫ﺍﻟﻘﺴﻢﺟﺰﺉﻴﺎً ﻷﻧﻪ ﻻ ﻳﺴﺘﺤﻖ ﻗﺴﻤﺎً ﺧﺎﺻﺎً ﺑﻪ ﻭﻻ ﻳﻨﺎﺳﺐ ﺃﻱ ﻣﻜﺎﻥ ﺁﺧﺮ‪.‬‬

‫ﺗﻢﺗﺼﻤﻴﻢ ‪ 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‬ﻟﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪ :‬ﺟﺎﻓﺎ‬


‫ﺑﺪﺃﻣﺼﻤﻤﻮ ‪ Java‬ﺑـ ‪ ، ++ C‬ﻭﺃﺯﺍﻟﻮﺍ ﺑﻌﺾ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ‪ ،‬ﻭﻏﻴﺮﻭﺍ ﺑﻌﻀﻬﺎ ‪ ،‬ﻭﺃﺿﻔﻮﺍ ﺍﻟﻘﻠﻴﻞ ﻣﻦ‬
‫ﺍﻟﺒﻨﻰﺍﻷﺧﺮﻯ‪ .‬ﺗﻮﻓﺮ ﺍﻟﻠﻐﺔ ﺍﻟﻨﺎﺗﺠﺔ ﺍﻟﻜﺜﻴﺮ ﻣﻦ ﻗﻮﺓ ﻭﻣﺮﻭﻧﺔ ‪ ، ++ C‬ﻭﻟﻜﻦ ﺑﻠﻐﺔ ﺃﺻﻐﺮ ﻭﺃﺑﺴﻂ ﻭﺃﻛﺜﺮ‬
‫ﺃﻣﺎﻧﺎً‪.‬‬

‫‪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‬‬

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


‫ﻛﻤﺎﺫﻛﺮﻧﺎ ﺳﺎﺑﻘﺎً ‪ ،‬ﺗﻌﺘﻤﺪ ‪ Java‬ﻋﻠﻰ ‪ ++ C‬ﻭﻟﻜﻦ ﺗﻢ ﺗﺼﻤﻴﻤﻬﺎ ﺧﺼﻴﺼﺎً ﻟﺘﻜﻮﻥ ﺃﺻﻐﺮ ﻭﺃﺑﺴﻂ‬
‫ﻭﺃﻛﺜﺮﻣﻮﺛﻮﻗﻴﺔ‪ .‬ﻣﺜﻞ ‪ ، ++ C‬ﺗﺤﺘﻮﻱ ‪ Java‬ﻋﻠﻰ ﻓﺉﺎﺕ ﻭﺃﻧﻮﺍﻉ ﺑﺪﺍﺉﻴﺔ‪ .‬ﻣﺼﻔﻮﻓﺎﺕ ‪ Java‬ﻫﻲ‬
‫ﺃﻣﺜﻠﺔﻟﻔﺉﺔ ﻣﺤﺪﺩﺓ ﻣﺴﺒﻘﺎً ‪ ،‬ﺑﻴﻨﻤﺎ ﻓﻲ ‪ ++ C‬ﻟﻴﺴﺖ ﻛﺬﻟﻚ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﺍﻟﻌﺪﻳﺪ ﻣﻦ‬
‫ﻣﺴﺘﺨﺪﻣﻲ‪ ++ C‬ﻳﻨﺸﺉﻮﻥ ﻓﺉﺎﺕ ﻣﺠﻤﻌﺔ ﻟﻠﻤﺼﻔﻮﻓﺎﺕ ﻹﺿﺎﻓﺔ ﻣﻴﺰﺍﺕ ﻣﺜﻞ ﻓﺤﺺ ﻧﻄﺎﻕ‬
‫ﺍﻟﻔﻬﺮﺱ ‪،‬ﻭﻫﻮ ﺃﻣﺮ ﺿﻤﻨﻲ ﻓﻲ ‪.Java‬‬
‫ﻻﺗﺤﺘﻮﻱ ‪ Java‬ﻋﻠﻰ ﻣﺆﺷﺮﺍﺕ ‪ ،‬ﻟﻜﻦ ﺃﻧﻮﺍﻉ ﺍﻟﻤﺮﺍﺟﻊ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ﺗﻮﻓﺮ ﺑﻌﺾ ﺇﻣﻜﺎﻧﻴﺎﺕ‬
‫ﺍﻟﻤﺆﺷﺮﺍﺕ‪.‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻫﺬﻩ ﺍﻟﻤﺮﺍﺟﻊ ﻟﻺﺷﺎﺭﺓ ﺇﻟﻰ ﺣﺎﻻﺕ ﺍﻟﻔﺼﻞ ﺍﻟﺪﺭﺍﺳﻲ‪ .‬ﻳﺘﻢ ﺗﺨﺼﻴﺺ‬
‫ﻛﺎﻓﺔﺍﻟﻜﺎﺉﻨﺎﺕ ﻓﻲ ﺍﻟﻜﻮﻣﺔ‪ .‬ﻳﺘﻢ ﺩﺍﺉﻤﺎً ﺇﻟﻐﺎء ﺍﻹﺷﺎﺭﺓ ﺑﺸﻜﻞ ﺿﻤﻨﻲ ‪ ،‬ﻋﻨﺪ ﺍﻟﻀﺮﻭﺭﺓ‪ .‬ﻟﺬﺍ ﻓﻬﻢ‬
‫ﻳﺘﺼﺮﻓﻮﻥﻣﺜﻞ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻌﺪﺩﻳﺔ ﺍﻟﻌﺎﺩﻳﺔ‪.‬‬
‫ﺗﺤﺘﻮﻱ‪ Java‬ﻋﻠﻰ ﻧﻮﻉ ‪ Boolean‬ﺑﺪﺍﺉﻲ ﻣﺴﻤﻰﻗﻴﻤﺔ ﻣﻨﻄﻘﻴﺔ‪ ،‬ﺗﺴﺘﺨﺪﻡ ﺑﺸﻜﻞ ﺃﺳﺎﺳﻲ‬
‫ﻟﺘﻌﺒﻴﺮﺍﺕﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺑﻴﺎﻧﺎﺕ ﺍﻟﺘﺤﻜﻢ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ )ﻣﺜﻞﻟﻮﻭﺑﻴﻨﻤﺎ(‪ .‬ﻋﻠﻰ ﻋﻜﺲ ‪ C‬ﻭ ‪ ، ++ C‬ﻻ‬
‫ﻳﻤﻜﻦﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﻟﺘﻌﺒﻴﺮﺍﺕ ﺍﻟﺘﺤﻜﻢ‪.‬‬
‫ﺃﺣﺪﺍﻻﺧﺘﻼﻓﺎﺕ ﺍﻟﻤﻬﻤﺔ ﺑﻴﻦ ‪ Java‬ﻭﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺳﺎﺑﻘﺎﺗﻬﺎ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ‬
‫ﻟﻠﻜﺎﺉﻨﺎﺕ ‪،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ‪ ، ++ C‬ﻫﻮ ﺃﻧﻪ ﻻ ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﺑﺮﺍﻣﺞ ﻓﺮﻋﻴﺔ ﻗﺎﺉﻤﺔ ﺑﺬﺍﺗﻬﺎ ﻓﻲ ‪.Java‬‬
‫ﺟﻤﻴﻊﺑﺮﺍﻣﺞ ‪ Java‬ﺍﻟﻔﺮﻋﻴﺔ ﻫﻲ ﻃﺮﻕ ﻭﻳﺘﻢ ﺗﻌﺮﻳﻔﻬﺎ ﻓﻲ ﻓﺉﺎﺕ‪ .‬ﻋﻼﻭﺓ ﻋﻠﻰ ﺫﻟﻚ ‪ ،‬ﻳﻤﻜﻦ‬
‫ﺍﺳﺘﺪﻋﺎءﺍﻷﺳﺎﻟﻴﺐ ﻣﻦ ﺧﻼﻝ ﻓﺉﺔ ﺃﻭ ﻛﺎﺉﻦ ﻓﻘﻂ‪ .‬ﺗﺘﻤﺜﻞ ﺇﺣﺪﻯ ﻧﺘﺎﺉﺞ ﺫﻟﻚ ﻓﻲ ﺃﻧﻪ ﺑﻴﻨﻤﺎ‬
‫ﻳﺪﻋﻢ‪ ++ C‬ﺍﻟﺒﺮﻣﺠﺔ ﺍﻹﺟﺮﺍﺉﻴﺔ ﻭﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ‪ ،‬ﻓﺈﻥ ‪ Java‬ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻤﻮﺟﻬﺔ‬
‫ﻟﻠﻜﺎﺉﻨﺎﺕﻓﻘﻂ‪.‬‬

‫ﻫﻨﺎﻙﺍﺧﺘﻼﻑ ﻣﻬﻢ ﺁﺧﺮ ﺑﻴﻦ ‪ ++ C‬ﻭ ‪ Java‬ﻭﻫﻮ ﺃﻥ ‪ ++ C‬ﺗﺪﻋﻢ ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ ﻣﺒﺎﺷﺮﺓ‬
‫ﻓﻲﺗﻌﺮﻳﻔﺎﺕ ﻓﺉﺘﻬﺎ‪ .‬ﺗﺪﻋﻢ ‪ Java‬ﻟﻐﺔ ﻭﺍﺣﺪﺓ ﻓﻘﻂ‬
‫‪93‬‬ ‫‪2.17‬ﻟﻐﺔ ﺣﺘﻤﻴﺔ ﻣﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ‪ :‬ﺟﺎﻓﺎ‬

‫ﺗﻮﺭﻳﺚﺍﻟﻔﺉﺎﺕ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻪ ﻳﻤﻜﻦ ﺍﻟﺤﺼﻮﻝ ﻋﻠﻰ ﺑﻌﺾ ﻓﻮﺍﺉﺪ ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻤﺘﻌﺪﺩﺓ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡﺑﻨﻴﺔ ﺍﻟﻮﺍﺟﻬﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ‪.‬‬
‫ﻣﻦﺑﻴﻦ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ‪ ++ C‬ﺍﻟﺘﻲ ﻟﻢ ﻳﺘﻢ ﻧﺴﺨﻬﺎ ﺇﻟﻰ ‪ Java‬ﻫﻲ ﺍﻟﺒﻨﻰ ﻭﺍﻟﻨﻘﺎﺑﺎﺕ‪.‬‬

‫ﺗﺘﻀﻤﻦ‪ Java‬ﺷﻜﻼ ًﺑﺴﻴﻄﺎً ﻧﺴﺒﻴﺎً ﻣﻦ ﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﺘﺰﺍﻣﻦ ﻣﻦ ﺧﻼﻝ‬


‫ﻣﺘﺰﺍﻣﻦﺍﻟﻤﻌﺪﻝ ‪ ،‬ﻭﺍﻟﺬﻱ ﻳﻤﻜﻦ ﺃﻥ ﻳﻈﻬﺮ ﻓﻲ ﺍﻷﺳﺎﻟﻴﺐ ﻭﺍﻟﻜﺘﻞ‪ .‬ﻓﻲ ﻛﻠﺘﺎ ﺍﻟﺤﺎﻟﺘﻴﻦ ‪ ،‬ﻳﺘﺴﺒﺐ‬
‫ﻓﻲﺇﺭﻓﺎﻕ ﻗﻔﻞ‪ .‬ﻳﻀﻤﻦ ﺍﻟﻘﻔﻞ ﺍﻟﻮﺻﻮﻝ ﺃﻭ ﺍﻟﺘﻨﻔﻴﺬ ﺍﻟﺤﺼﺮﻱ ﻟﻠﻄﺮﻓﻴﻦ‪ .‬ﻓﻲ ‪ ، Java‬ﻣﻦ ﺍﻟﺴﻬﻞ‬
‫ﻧﺴﺒﻴﺎًﺇﻧﺸﺎء ﻋﻤﻠﻴﺎﺕ ﻣﺘﺰﺍﻣﻨﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰ ﻓﻲ ‪Java‬ﺍﻟﺨﻴﻮﻁ‪.‬‬

‫ﺗﺴﺘﺨﺪﻡ‪ Java‬ﺇﻟﻐﺎء ﺗﺨﺼﻴﺺ ﺍﻟﺘﺨﺰﻳﻦ ﺍﻟﻀﻤﻨﻲ ﻟﻜﺎﺉﻨﺎﺗﻬﺎ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰ ﻏﺎﻟﺒﺎًﺟﻤﻊ‬


‫ﺍﻟﻘﻤﺎﻣﺔ‪ .‬ﻫﺬﺍ ﻳﺤﺮﺭ ﺍﻟﻤﺒﺮﻣﺞ ﻣﻦ ﺍﻟﺤﺎﺟﺔ ﺇﻟﻰ ﺣﺬﻑ ﺍﻟﻜﺎﺉﻨﺎﺕ ﺑﺸﻜﻞ ﺻﺮﻳﺢ ﻋﻨﺪﻣﺎ ﻟﻢ ﺗﻌﺪ‬
‫ﻫﻨﺎﻙﺣﺎﺟﺔ ﺇﻟﻴﻬﺎ‪ .‬ﻏﺎﻟﺒﺎً ﻣﺎ ﺗﻌﺎﻧﻲ ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﻤﻜﺘﻮﺑﺔ ﺑﻠﻐﺎﺕ ﻻ ﺗﺤﺘﻮﻱ ﻋﻠﻰ ﺧﺪﻣﺔ ﺟﻤﻊ ﺍﻟﺒﻴﺎﻧﺎﺕ‬
‫ﺍﻟﻤﻬﻤﻠﺔﻣﻤﺎ ﻳﺴﻤﻰ ﺃﺣﻴﺎﻧﺎً ﺗﺴﺮﺏ ﺍﻟﺬﺍﻛﺮﺓ ‪ ،‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻥ ﺍﻟﺘﺨﺰﻳﻦ ﻣﺨﺼﺺ ﻭﻟﻜﻦ ﻻ ﻳﺘﻢ ﺇﻟﻐﺎء‬
‫ﺗﺨﺼﻴﺼﻪﻣﻄﻠﻘﺎً‪ .‬ﻣﻦ ﺍﻟﻮﺍﺿﺢ ﺃﻥ ﻫﺬﺍ ﻳﻤﻜﻦ ﺃﻥ ﻳﺆﺩﻱ ﺇﻟﻰ ﺍﺳﺘﻨﻔﺎﺩ ﻛﻞ ﻣﺴﺎﺣﺔ ﺍﻟﺘﺨﺰﻳﻦ‬
‫ﺍﻟﻤﺘﺎﺣﺔﻓﻲ ﻧﻬﺎﻳﺔ ﺍﻟﻤﻄﺎﻑ‪ .‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺇﻟﻐﺎء ﺗﺨﺼﻴﺺ ﺍﻟﻜﺎﺉﻦ ﺑﺎﻟﺘﻔﺼﻴﻞ ﻓﻲ ﺍﻟﻔﺼﻞ ‪.6‬‬

‫ﺑﺨﻼﻑ‪ 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‬ﻣﻨﺬ ﺑﺪﺍﻳﺘﻪ ‪ ،‬ﺗﻤﺖ ﺇﺿﺎﻓﺔ ﺍﻟﻌﺪﻳﺪ‬
‫ﻣﻦﺍﻟﻤﻴﺰﺍﺕ ﺇﻟﻰ ﺍﻟﻠﻐﺔ ‪ ،‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﻓﺉﺔ ﺍﻟﺘﻌﺪﺍﺩ ‪ ،‬ﻭﺍﻟﻌﻮﺍﻣﻞ ﺍﻟﻌﺎﻣﺔ ‪ ،‬ﻭﺑﻨﺎء ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﺠﺪﻳﺪ‪.‬‬

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

‫‪ //‬ﺑﺮﻧﺎﻣﺞ ‪ Java‬ﻣﺜﺎﻝ ‪//‬‬


‫ﺍﻹﺩﺧﺎﻝ‪:‬ﻋﺪﺩ ﺻﺤﻴﺢ ‪ ، listlen ،‬ﺣﻴﺚ ‪ listlen‬ﺃﻗﻞ‬
‫ﻣﻦ‪ ، 100‬ﻣﺘﺒﻮﻋﺔ ﺑﻘﻴﻢ ﻋﺪﺩ ﺻﺤﻴﺢ ﻟﻠﻄﻮﻝ‬ ‫‪//‬‬
‫‪ //‬ﺍﻟﻤﺨﺮﺟﺎﺕ‪ :‬ﻋﺪﺩ ﺑﻴﺎﻧﺎﺕ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﺗﻜﻮﻥ ﺃﻛﺒﺮ ﻣﻦ ‪//‬‬
‫ﻣﺘﻮﺳﻂﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ‪ * .java.io‬؛‬
‫ﻳﺴﺘﻮﺭﺩ‬
‫ﻓﺼﻞ } ‪IntSort‬‬
‫ﺍﻟﻔﺮﺍﻍﺍﻟﻌﺎﻡ ﺍﻟﺜﺎﺑﺖﺭﺉﻴﺴﻲ )ﺳﻼﺳﻞ ﺍﻟﺴﻠﺴﻠﺔ ][(ﺭﻣﻴﺎﺕﺍﺳﺘﺜﻨﺎء ‪} IO‬‬
‫= ﻓﻲ ‪DataInputStream‬ﺟﺪﻳﺪ‪int DataInputStream )System.in( ،‬‬
‫‪listlen،‬‬
‫ﻋﺪﺍﺩ‪،‬‬
‫ﺍﻟﻤﺠﻤﻮﻉ= ‪، 0‬‬
‫ﻣﺘﻮﺳﻂ‪،‬‬
‫ﺍﻟﻨﺘﻴﺠﺔ= ‪ 0‬؛‬
‫‪][ intlist =int‬ﻛﺜﺎﻓﺔ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ]‪ [99‬؛‬
‫‪ listlen = Integer.parseInt )in.readLine )(( ،‬ﻟﻮ))} ((‪>100‬‬
‫‪listlen< 0( && )listlen‬‬
‫‪ * /‬ﻗﺮﺍءﺓ ﺍﻟﻤﺪﺧﻼﺕ ﻓﻲ ﺍﻟﻤﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺠﻤﻮﻉ * ‪/‬‬
‫ﻝ)ﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ >‪ listlen‬؛ ﻋﺪﺍﺩ ‪} (++‬‬
‫= [ﻋﺪﺍﺩ] ‪intlist‬‬
‫؛ [ﻋﺪﺍﺩ] ‪ + = intlist‬؛ ﻣﺠﻤﻮﻉ () ‪((. intValue‬‬
‫) ‪Integer.valueOf )in.readLine‬‬
‫{‬
‫‪ * /‬ﺍﺣﺴﺐ ﺍﻟﻤﺘﻮﺳﻂ * ‪/‬‬
‫ﺍﻟﻤﺘﻮﺳﻂ= ‪ sum / listlen‬؛‬
‫‪ * /‬ﻋﺪ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﺗﻜﻮﻥ< ﻣﺘﻮﺳﻂ * ‪/‬‬
‫ﻝ)ﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ >‪ listlen‬؛ ﻋﺪﺍﺩ ‪(++‬‬
‫ﻟﻮ)‪ * /‬ﻣﺘﻮﺳﻂ( ﻧﺘﻴﺠﺔ ‪ ++‬؛ ‪ * /‬ﻧﺘﻴﺠﺔ ﺍﻟﻄﺒﺎﻋﺔ <[ﻋﺪﺍﺩ] ‪intlist‬‬

‫) ‪System.out.println‬‬
‫‪ { // ** end of then clause of if ))listlen< 0( ...‬ﻋﺪﺩ ﺍﻟﻘﻴﻢ<‬
‫ﺍﻟﻤﺘﻮﺳﻂﻫﻮ‪ + ":‬ﻧﺘﻴﺠﺔ( ؛ ‪ "\ n‬ﺁﺧﺮ) ‪System.out.println‬‬

‫"ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ \ ‪ ("n‬؛‬


‫‪main{ // ** end of class IntSort‬‬
‫‪{ // ** end of method‬‬
‫‪95‬‬ ‫‪2.18‬ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬

‫‪2.18‬ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬
‫ﺗﻄﻮﺭﺕﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﻋﻠﻰ ﻣﺪﺍﺭ ﺍﻟﺨﻤﺴﺔ ﻭﻋﺸﺮﻳﻦ ﻋﺎﻣﺎً ﺍﻟﻤﺎﺿﻴﺔ‪ .‬ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﻟﻐﺎﺕ‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻨﺼﻴﺔ ﺍﻟﻤﺒﻜﺮﺓ ﻣﻦ ﺧﻼﻝ ﻭﺿﻊ ﻗﺎﺉﻤﺔ ﺑﺎﻷﻭﺍﻣﺮ ‪ ،‬ﺗﺴﻤﻰ ﺃﺍﻟﻨﺼﻲ‪ ،‬ﻓﻲ ﻣﻠﻒ ﻟﻴﺘﻢ‬
‫ﺗﻔﺴﻴﺮﻩ‪.‬ﺍﺳﻢ ﺃﻭﻝ ﻫﺬﻩ ﺍﻟﻠﻐﺎﺕﺵ )ﻛﻤﺠﻤﻮﻋﺔ ﺻﻐﻴﺮﺓ ﻣﻦ ﺍﻷﻭﺍﻣﺮ ﺍﻟﺘﻲ ﺗﻢ ﺗﻔﺴﻴﺮﻫﺎ ﻋﻠﻰ ﺃﻧﻬﺎ‬
‫ﺍﺳﺘﺪﻋﺎءﺍﺕﻟﻠﺒﺮﺍﻣﺞ ﺍﻟﻔﺮﻋﻴﺔ ﻟﻠﻨﻈﺎﻡ ﺍﻟﺘﻲ ﺗﺆﺩﻱ ﻭﻇﺎﺉﻒ ﺍﻷﺩﺍﺓ ﺍﻟﻤﺴﺎﻋﺪﺓ ‪ ،‬ﻣﺜﻞ ﺇﺩﺍﺭﺓ ﺍﻟﻤﻠﻔﺎﺕ‬
‫ﻭﺗﺼﻔﻴﺔﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﺒﺴﻴﻄﺔ‪ .‬ﺗﻢ ﺇﺿﺎﻓﺔ ﻣﺘﻐﻴﺮﺍﺕ ﺇﻟﻰ ﺫﻟﻚ ‪ ،‬ﻭﺑﻴﺎﻧﺎﺕ ﺗﺪﻓﻖ ﺍﻟﺘﺤﻜﻢ ‪،‬‬
‫ﻭﺍﻟﻮﻇﺎﺉﻒ ‪،‬ﻭﻣﺨﺘﻠﻒ ﺍﻟﻘﺪﺭﺍﺕ ﺍﻷﺧﺮﻯ ‪ ،‬ﻭﺍﻟﻨﺘﻴﺠﺔ ﻫﻲ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻛﺎﻣﻠﺔ‪ .‬ﻭﺍﺣﺪ ﻣﻦ ﺃﻗﻮﻯ ﻫﺬﻩ‬
‫ﻭﺃﻛﺜﺮﻫﺎﺷﻬﺮﺓ ﻫﻮ ‪.ksh )for shell( ،‬ﺍﻟﺬﻱ ﻃﻮﺭﻩ ﺩﻳﻔﻴﺪ ﻛﻮﺭﻥ ﻓﻲ ﻣﺨﺘﺒﺮﺍﺕ ﺑﻴﻞ ‪، 1995( ،‬‬
‫‪Bolsky and Korn‬‬

‫ﻟﻐﺔﺑﺮﻣﺠﺔ ﺃﺧﺮﻯ ﻫﻲ‪awk‬ﺗﻢ ﺗﻄﻮﻳﺮﻩ ﺑﻮﺍﺳﻄﺔ ‪ Al Aho‬ﻭ ‪ Brian Kernighan‬ﻭ‬


‫‪ Peter Weinberger‬ﻓﻲ (‪awk.Bell Laboratories )Aho et al. ، 1988‬ﺑﺪﺃﺕ ﻛﻠﻐﺔ‬
‫ﻟﺘﻮﻟﻴﺪﺍﻟﺘﻘﺎﺭﻳﺮ ﻭﻟﻜﻨﻬﺎ ﺃﺻﺒﺤﺖ ﻓﻴﻤﺎ ﺑﻌﺪ ﻟﻐﺔ ﺫﺍﺕ ﺃﻏﺮﺍﺽ ﻋﺎﻣﺔ‪.‬‬

‫‪2.18.1‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ﻟﻐﺔ ‪Perl‬‬


‫ﻟﻐﺔﺑﻴﺮﻝ ‪ ،‬ﺍﻟﺘﻲ ﻃﻮﺭﻫﺎ ﻻﺭﻱ ﻭﻭﻝ ‪ ،‬ﻛﺎﻧﺖ ﻓﻲ ﺍﻷﺻﻞ ﻣﺰﻳﺠﺎً ﻣﻦﺵﻭ‪awk.‬ﻧﻤﺖ ﻟﻐﺔ ‪Perl‬‬
‫ﺑﺸﻜﻞﻣﻠﺤﻮﻅ ﻣﻨﺬ ﺑﺪﺍﻳﺎﺗﻬﺎ ﻭﺃﺻﺒﺤﺖ ﺍﻵﻥ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻗﻮﻳﺔ ‪ ،‬ﺭﻏﻢ ﺃﻧﻬﺎ ﻻ ﺗﺰﺍﻝ ﺑﺪﺍﺉﻴﺔ ﺇﻟﻰ ﺣﺪ‬
‫ﻣﺎ‪.‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﻻ ﺗﺰﺍﻝ ﺗﺴﻤﻰ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻧﺼﻴﺔ ‪ ،‬ﺇﻻ ﺃﻧﻬﺎ ﻓﻲ ﺍﻟﻮﺍﻗﻊ ﺗﺸﺒﻪ ﻟﻐﺔ ﺍﻷﻣﺮ‬
‫ﺍﻟﻨﻤﻮﺫﺟﻴﺔ ‪،‬ﺣﻴﺚ ﻳﺘﻢ ﺗﺠﻤﻴﻌﻬﺎ ﺩﺍﺉﻤﺎً ‪ ،‬ﻋﻠﻰ ﺍﻷﻗﻞ ﺇﻟﻰ ﻟﻐﺔ ﻭﺳﻴﻄﺔ ‪ ،‬ﻗﺒﻞ ﺗﻨﻔﻴﺬﻫﺎ‪ .‬ﻋﻼﻭﺓ‬
‫ﻋﻠﻰﺫﻟﻚ ‪ ،‬ﻓﺈﻧﻪ ﻳﺤﺘﻮﻱ ﻋﻠﻰ ﺟﻤﻴﻊ ﺍﻟﺘﺮﻛﻴﺒﺎﺕ ﻟﺠﻌﻠﻪ ﻗﺎﺑﻼ ًﻟﻠﺘﻄﺒﻴﻖ ﻋﻠﻰ ﻣﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ‬
‫ﻣﺠﺎﻻﺕﺍﻟﻤﺸﻜﻼﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ‪.‬‬

‫ﺗﺤﺘﻮﻱﻟﻐﺔ ‪ Perl‬ﻋﻠﻰ ﻋﺪﺩ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﺍﻟﻤﺜﻴﺮﺓ ﻟﻼﻫﺘﻤﺎﻡ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﻢ ﺫﻛﺮ ﺍﻟﻘﻠﻴﻞ ﻣﻨﻬﺎ‬
‫ﻓﻘﻂﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ ﻭﺍﻟﺘﻲ ﺗﻤﺖ ﻣﻨﺎﻗﺸﺘﻬﺎ ﻻﺣﻘﺎً ﻓﻲ ﺍﻟﻜﺘﺎﺏ‪.‬‬
‫ﺍﻟﻤﺘﻐﻴﺮﺍﺕﻓﻲ ‪ Perl‬ﻣﻜﺘﻮﺑﺔ ﺑﺸﻜﻞ ﺛﺎﺑﺖ ﻭﻣﻌﻠﻨﺔ ﺿﻤﻨﻴﺎً‪ .‬ﻫﻨﺎﻙ ﺛﻼﺙ ﻣﺴﺎﺣﺎﺕ ﺃﺳﻤﺎء‬
‫ﻣﻤﻴﺰﺓﻟﻠﻤﺘﻐﻴﺮﺍﺕ ‪ ،‬ﻳﺸُﺎﺭ ﺇﻟﻴﻬﺎ ﺑﺎﻟﺤﺮﻑ ﺍﻷﻭﻝ ﻣﻦ ﺃﺳﻤﺎء ﺍﻟﻤﺘﻐﻴﺮﺍﺕ‪ .‬ﺗﺒﺪﺃ ﺟﻤﻴﻊ ﺃﺳﻤﺎء‬
‫ﺍﻟﻤﺘﻐﻴﺮﺍﺕﺍﻟﻌﺪﺩﻳﺔ ﺑﻌﻼﻣﺎﺕ ﺍﻟﺪﻭﻻﺭ )‪ ، ($‬ﻭﺗﺒﺪﺃ ﺟﻤﻴﻊ ﺃﺳﻤﺎء ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺑﻌﻼﻣﺎﺕ )@( ‪،‬‬
‫ﻭﺗﺒﺪﺃﺟﻤﻴﻊ ﺃﺳﻤﺎء ﺍﻟﺘﺠﺰﺉﺔ )ﻳﺘﻢ ﻭﺻﻒ ﺍﻟﺘﺠﺰﺉﺔ ﺃﺩﻧﺎﻩ( ﺑﻌﻼﻣﺎﺕ ﺍﻟﻨﺴﺒﺔ ﺍﻟﻤﺉﻮﻳﺔ )‪ .(٪‬ﻳﺠﻌﻞ‬
‫ﻫﺬﺍﺍﻻﺻﻄﻼﺡ ﺃﺳﻤﺎء ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﻓﻲ ﺍﻟﺒﺮﺍﻣﺞ ﺃﻛﺜﺮ ﻗﺎﺑﻠﻴﺔ ﻟﻠﻘﺮﺍءﺓ ﻣﻦ ﺃﻱ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﺃﺧﺮﻯ‪.‬‬

‫ﺗﺘﻀﻤﻦ‪ Perl‬ﻋﺪﺩﺍً ﻛﺒﻴﺮﺍً ﻣﻦ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻀﻤﻨﻴﺔ‪ .‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺑﻌﻀﻬﺎ ﻟﺘﺨﺰﻳﻦ‬


‫ﻣﻌﺎﻣﻼﺕ‪ ، Perl‬ﻣﺜﻞ ﺍﻟﺸﻜﻞ ﺍﻟﻤﻌﻴﻦ ﻟﺤﺮﻑ ﺍﻟﺴﻄﺮ ﺍﻟﺠﺪﻳﺪ ﺃﻭ ﺍﻷﺣﺮﻑ ﺍﻟﻤﺴﺘﺨﺪﻣﺔ ﻓﻲ‬
‫ﺍﻟﺘﻨﻔﻴﺬ‪.‬ﺗﺴُﺘﺨﺪﻡ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻀﻤﻨﻴﺔ ﺑﺸﻜﻞ ﺷﺎﺉﻊ ﻛﻤﻌﻠﻤﺎﺕ ﺍﻓﺘﺮﺍﺿﻴﺔ ﻟﻠﻮﻇﺎﺉﻒ‬
‫ﺍﻟﻤﻀﻤﻨﺔﻭﺍﻟﻤﻌﺎﻣﻼﺕ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ ﻟﺒﻌﺾ ﺍﻟﻤﺸﻐﻠﻴﻦ‪ .‬ﻟﻠﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻀﻤﻨﻴﺔ ﻣﻤﻴﺰﺓ ‪ -‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ‬
‫ﻣﻦﺍﻷﺳﻤﺎء ﺍﻟﻤﺸﻔﺮﺓ ‪ ،‬ﻣﺜﻞ ‪ !$‬ﻭ @_‪ .‬ﺗﺴﺘﺨﺪﻡ ﺃﺳﻤﺎء ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻀﻤﻨﻴﺔ ‪ ،‬ﻣﺜﻞ ﺃﺳﻤﺎء‬
‫ﺍﻟﻤﺘﻐﻴﺮﺍﺕﺍﻟﻤﻌﺮﻓﺔ ﻣﻦ ﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪ ،‬ﻣﺴﺎﺣﺎﺕ ﺍﻷﺳﻤﺎء ﺍﻟﺜﻼﺛﺔ ‪ ،‬ﻟﺬﺍ ‪ !$‬ﻫﻮ ﻋﺪﺩ‪.‬‬

‫ﺗﺘﻤﺘﻊﻣﺼﻔﻮﻓﺎﺕ ‪ Perl‬ﺑﺨﺎﺻﻴﺘﻴﻦ ﺗﻤﻴﺰﻫﻤﺎ ﻋﻦ ﻣﺼﻔﻮﻓﺎﺕ ﻟﻐﺎﺕ ﺍﻷﻣﺮ ﺍﻟﺸﺎﺉﻌﺔ‪ .‬ﺃﻭﻻ ً‪،‬‬


‫ﻟﻬﺎﻃﻮﻝ ﺩﻳﻨﺎﻣﻴﻜﻲ ‪ ،‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻬﺎ ﻳﻤﻜﻦ ﺃﻥ ﺗﻨﻤﻮ ﻭﺗﺘﻘﻠﺺ ﺣﺴﺐ ﺍﻟﺤﺎﺟﺔ ﺃﺛﻨﺎء ﺍﻟﺘﻨﻔﻴﺬ‪.‬‬
‫ﺛﺎﻧﻴﺎً ‪،‬ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﻣﺘﻔﺮﻗﺔ ‪ ،‬ﻣﻤﺎ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﺃﻥ ﺗﻜﻮﻥ ﻫﻨﺎﻙ ﻓﺠﻮﺍﺕ ﺑﻴﻦ‬
‫ﺍﻟﻌﻨﺎﺻﺮ‪.‬ﻫﺆﻻء‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪96‬‬

‫ﺍﻟﻔﺠﻮﺍﺕﻻ ﺗﺄﺧﺬ ﻣﺴﺎﺣﺔ ﻓﻲ ﺍﻟﺬﺍﻛﺮﺓ ‪ ،‬ﻭﺑﻴﺎﻥ ﺍﻟﺘﻜﺮﺍﺭ ﺍﻟﻤﺴﺘﺨﺪﻡ ﻟﻠﻤﺼﻔﻮﻓﺎﺕ ‪،‬‬


‫‪ ،foreach‬ﻳﺘﻜﺮﺭ ﻋﻠﻰ ﺍﻟﻌﻨﺎﺻﺮ ﺍﻟﻤﻔﻘﻮﺩﺓ‪.‬‬
‫ﺗﺘﻀﻤﻦ‪ Perl‬ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ﺍﻟﺘﺮﺍﺑﻄﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰﺗﺠﺰﺉﺎﺕ‪ .‬ﺗﺘﻢ ﻓﻬﺮﺳﺔ ﻫﻴﺎﻛﻞ‬
‫ﺍﻟﺒﻴﺎﻧﺎﺕﻫﺬﻩ ﺑﻮﺍﺳﻄﺔ ﺳﻼﺳﻞ ﻭﻫﻲ ﺟﺪﺍﻭﻝ ﺗﺠﺰﺉﺔ ﻳﺘﻢ ﺍﻟﺘﺤﻜﻢ ﻓﻴﻬﺎ ﺑﺸﻜﻞ ﺿﻤﻨﻲ‪ .‬ﻳﻮﻓﺮ ﻧﻈﺎﻡ‬
‫‪ Perl‬ﻭﻇﻴﻔﺔ ﺍﻟﺘﺠﺰﺉﺔ ﻭﻳﺰﻳﺪ ﻣﻦ ﺣﺠﻢ ﺍﻟﻬﻴﻜﻞ ﻋﻨﺪ ﺍﻟﻀﺮﻭﺭﺓ‪.‬‬

‫ﻟﻐﺔ‪ Perl‬ﻟﻐﺔ ﻗﻮﻳﺔ ﻭﻟﻜﻨﻬﺎ ﺧﻄﻴﺮﺓ ﺇﻟﻰ ﺣﺪ ﻣﺎ‪ .‬ﻳﺨﺰﻥ ﺍﻟﻨﻮﻉ ﺍﻟﻘﻴﺎﺳﻲ ﺍﻟﺨﺎﺹ ﺑﻪ ﻛﻼ ًﻣﻦ‬
‫ﺍﻟﺴﻼﺳﻞﻭﺍﻷﺭﻗﺎﻡ ‪ ،‬ﻭﺍﻟﺘﻲ ﻳﺘﻢ ﺗﺨﺰﻳﻨﻬﺎ ﻋﺎﺩﺓ ًﻓﻲ ﺷﻜﻞ ﻧﻘﻄﺔ ﻋﺎﺉﻤﺔ ﻣﺰﺩﻭﺟﺔ ﺍﻟﺪﻗﺔ‪ .‬ﺍﻋﺘﻤﺎﺩ ًﺍ‬
‫ﻋﻠﻰﺍﻟﺴﻴﺎﻕ ‪ ،‬ﻗﺪ ﻳﺘﻢ ﺇﺟﺒﺎﺭ ﺍﻷﺭﻗﺎﻡ ﻋﻠﻰ ﺍﻟﺴﻼﺳﻞ ﻭﺍﻟﻌﻜﺲ ﺻﺤﻴﺢ‪ .‬ﺇﺫﺍ ﺗﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺳﻠﺴﻠﺔ‬
‫ﻓﻲﺳﻴﺎﻕ ﺭﻗﻤﻲ ﻭﻻ ﻳﻤﻜﻦ ﺗﺤﻮﻳﻞ ﺍﻟﺴﻠﺴﻠﺔ ﺇﻟﻰ ﺭﻗﻢ ‪ ،‬ﻓﺴﻴﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﺼﻔﺮ ﻭﻻ ﻳﺘﻢ ﺗﻮﻓﻴﺮ‬
‫ﺭﺳﺎﻟﺔﺗﺤﺬﻳﺮ ﺃﻭ ﺧﻄﺄ ﻟﻠﻤﺴﺘﺨﺪﻡ‪ .‬ﻳﻤﻜﻦ ﺃﻥ ﻳﺆﺩﻱ ﻫﺬﺍ ﺍﻟﺘﺄﺛﻴﺮ ﺇﻟﻰ ﺃﺧﻄﺎء ﻟﻢ ﻳﺘﻢ ﺍﻛﺘﺸﺎﻓﻬﺎ‬
‫ﺑﻮﺍﺳﻄﺔﺍﻟﻤﺘﺮﺟﻢ ﺃﻭ ﻧﻈﺎﻡ ﻭﻗﺖ ﺍﻟﺘﺸﻐﻴﻞ‪ .‬ﻻ ﻳﻤﻜﻦ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﻓﻬﺮﺳﺔ ﺍﻟﻤﺼﻔﻮﻓﺔ ‪ ،‬ﻷﻧﻪ ﻻ‬
‫ﻳﻮﺟﺪﻧﻄﺎﻕ ﻣﻨﺨﻔﺾ ﻣﻌﻴﻦ ﻷﻱ ﺻﻔﻴﻒ‪ .‬ﺗﻌﻮﺩ ﺍﻹﺷﺎﺭﺍﺕ ﺇﻟﻰ ﺍﻟﻌﻨﺎﺻﺮ ﻏﻴﺮ ﺍﻟﻤﻮﺟﻮﺩﺓﺃﻭﻧﺪﻳﻒ‪،‬‬
‫ﻭﺍﻟﺬﻱﻳﺘﻢ ﺗﻔﺴﻴﺮﻩ ﻋﻠﻰ ﺃﻧﻪ ﺻﻔﺮ ﻓﻲ ﺳﻴﺎﻕ ﺭﻗﻤﻲ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻻ ﻳﻮﺟﺪ ﺃﻳﻀﺎً ﺍﻛﺘﺸﺎﻑ ﺧﻄﺄ ﻓﻲ‬
‫ﺍﻟﻮﺻﻮﻝﺇﻟﻰ ﻋﻨﺼﺮ ﺍﻟﻤﺼﻔﻮﻓﺔ‪.‬‬

‫ﻛﺎﻥﺍﻻﺳﺘﺨﺪﺍﻡ ﺍﻷﻭﻟﻲ ﻟـ ‪ Perl‬ﺑﻤﺜﺎﺑﺔ ﺃﺩﺍﺓ ﻣﺴﺎﻋﺪﺓ ﻟـ ‪ UNIX‬ﻟﻤﻌﺎﻟﺠﺔ ﺍﻟﻤﻠﻔﺎﺕ ﺍﻟﻨﺼﻴﺔ‪.‬‬


‫ﻛﺎﻥﻭﻻ ﻳﺰﺍﻝ ﻳﺴﺘﺨﺪﻡ ﻋﻠﻰ ﻧﻄﺎﻕ ﻭﺍﺳﻊ ﻛﺄﺩﺍﺓ ﻹﺩﺍﺭﺓ ﻧﻈﺎﻡ ‪ .UNIX‬ﻋﻨﺪﻣﺎ ﻇﻬﺮﺕ ﺷﺒﻜﺔ ﺍﻟﻮﻳﺐ‬
‫ﺍﻟﻌﺎﻟﻤﻴﺔ ‪،‬ﺣﻘﻘﺖ ‪ Perl‬ﺍﺳﺘﺨﺪﺍﻣﺎً ﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻛﻠﻐﺔ ﻭﺍﺟﻬﺔ ﺑﻮﺍﺑﺔ ﻋﺎﻣﺔ ﻟﻼﺳﺘﺨﺪﺍﻡ ﻣﻊ‬
‫ﺍﻟﻮﻳﺐ ‪،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻧﻬﺎ ﻧﺎﺩﺭﺍ ًﻣﺎ ﺗﺴﺘﺨﺪﻡ ﺍﻵﻥ ﻟﻬﺬﺍ ﺍﻟﻐﺮﺽ‪ .‬ﺗﺴُﺘﺨﺪﻡ ﻟﻐﺔ ‪ Perl‬ﻛﻠﻐﺔ‬
‫ﻟﻸﻏﺮﺍﺽﺍﻟﻌﺎﻣﺔ ﻟﻤﺠﻤﻮﻋﺔ ﻣﺘﻨﻮﻋﺔ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ‪ ،‬ﻣﺜﻞ ﻋﻠﻢ ﺍﻷﺣﻴﺎء ﺍﻟﺤﺴﺎﺑﻲ ﻭﺍﻟﺬﻛﺎء‬
‫ﺍﻻﺻﻄﻨﺎﻋﻲ‪.‬‬
‫ﻓﻴﻤﺎﻳﻠﻲ ﻣﺜﺎﻝ ﻋﻠﻰ ﺑﺮﻧﺎﻣﺞ ‪:Perl‬‬

‫‪ #‬ﺑﺮﻧﺎﻣﺞ ﻣﺜﺎﻝ ‪Perl‬‬


‫ﻋﺪﺩﺻﺤﻴﺢ ‪ ، $ listlen ،‬ﺣﻴﺚ ‪ listlen $‬ﺃﻗﻞ ﻣﻦ ‪ ، 100‬ﻣﺘﺒﻮﻉ ﺑﻘﻴﻢ ‪$‬‬ ‫‪ #‬ﻣﺪﺧﻞ‪:‬‬
‫‪-listlen‬ﺻﺤﻴﺤﺔ‪.‬‬ ‫‪#‬‬
‫‪ #‬ﺍﻟﻤﺨﺮﺟﺎﺕ‪ :‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻟﻤﺪﺧﻼﺕ ﺍﻷﻛﺒﺮ ﻣﻦ‬
‫ﻣﺘﻮﺳﻂﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ‪0) = (sum، $ result $) .‬‬ ‫‪#‬‬
‫‪(0،‬؛‬
‫؛<‪listlen $ = >STDIN‬‬
‫ﻟﻮ))‪listlen< 0( && )$ listlen >100(( }$‬‬
‫‪ #‬ﻗﺮﺍءﺓ ﺍﻟﻤﺪﺧﻼﺕ ﻓﻲ ﻣﺼﻔﻮﻓﺔ ﻭﺣﺴﺎﺏ ﺍﻟﻤﺠﻤﻮﻉ‬
‫ﻝ)ﺩﻭﻻﺭﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ ‪listlen $> $‬؛ ﻋﺪﺍﺩ ‪} (++ $‬‬
‫‪ ...‬؛ { ‪ - #‬ﻧﻬﺎﻳﺔ ﻟـ )ﻋﺪﺍﺩ <‪ $[ = >STDIN‬ﻋﺪﺍﺩ‬
‫] ‪$ intlist‬‬
‫‪ #‬ﺣﺴﺎﺏ ﺍﻟﻤﺘﻮﺳﻂ ‪ sum / $ listlen $ = $‬؛‬

‫‪ #‬ﻋﺪ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﻫﻲ< ﻣﺘﻮﺳﻂ ‪num )intlist( }$foreach‬‬

‫ﻟﻮ)ﺩﻭﻻﺭ‪ foreach $ num ...‬ﻧﻬﺎﻳﺔ ‪ {{ # -‬؛ ‪( }$ result ++‬‬


‫‪ $‬ﻣﺘﻮﺳﻂ <‪num‬‬
‫‪ #‬ﻧﺘﻴﺠﺔ ﺍﻟﻄﺒﺎﻋﺔ‬
‫ﻣﻄﺒﻌﺔ"ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ‪" result \ n $ :‬؛{ ‪ - #‬ﻧﻬﺎﻳﺔ ‪... $ if ))listlen‬‬
‫‪97‬‬ ‫‪2.18‬ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬

‫ﺁﺧﺮ}‬
‫ﻣﻄﺒﻌﺔ"ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ \ ‪" n‬؛‬
‫{‬

‫‪2.18.2‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ‪JavaScript‬‬


‫ﺍﻧﺘﺸﺮﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻮﻳﺐ ﻓﻲ ﻣﻨﺘﺼﻒ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ﺑﻌﺪ ﻇﻬﻮﺭ ﺃﻭﻝ ﻣﺘﺼﻔﺤﺎﺕ ﺭﺳﻮﻣﻴﺔ‪.‬‬
‫ﺃﺻﺒﺤﺖﺍﻟﺤﺎﺟﺔ ﺇﻟﻰ ﺍﻟﺤﺴﺎﺏ ﺍﻟﻤﺮﺗﺒﻂ ﺑﻤﺴﺘﻨﺪﺍﺕ ‪ ، HTML‬ﻭﺍﻟﺘﻲ ﺗﻜﻮﻥ ﻓﻲ ﺣﺪ ﺫﺍﺗﻬﺎ ﺛﺎﺑﺘﺔ‬
‫ﺗﻤﺎﻣﺎً ‪،‬ﺃﻣﺮﺍً ﺑﺎﻟﻎ ﺍﻷﻫﻤﻴﺔ‪ .‬ﺃﺻﺒﺢ ﺍﻟﺤﺴﺎﺏ ﻋﻠﻰ ﺟﺎﻧﺐ ﺍﻟﺨﺎﺩﻡ ﻣﻤﻜﻨﺎً ﺑﺎﺳﺘﺨﺪﺍﻡ ﻭﺍﺟﻬﺔ ﺍﻟﺒﻮﺍﺑﺔ‬
‫ﺍﻟﻤﺸﺘﺮﻛﺔ)‪ ، (CGI‬ﻭﺍﻟﺘﻲ ﺳﻤﺤﺖ ﻟﻮﺛﺎﺉﻖ ‪ HTML‬ﺑﻄﻠﺐ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﺍﻣﺞ ﻋﻠﻰ ﺍﻟﺨﺎﺩﻡ ‪ ،‬ﻣﻊ‬
‫ﺇﺭﺟﺎﻉﻧﺘﺎﺉﺞ ﻫﺬﻩ ﺍﻟﺤﺴﺎﺑﺎﺕ ﺇﻟﻰ ﺍﻟﻤﺘﺼﻔﺢ ﻓﻲ ﺷﻜﻞ ﻣﺴﺘﻨﺪﺍﺕ ‪ .HTML‬ﺃﺻﺒﺢ ﺍﻟﺤﺴﺎﺏ ﻓﻲ‬
‫ﻧﻬﺎﻳﺔﺍﻟﻤﺘﺼﻔﺢ ﻣﺘﺎﺣﺎً ﻣﻊ ﻇﻬﻮﺭ ﺗﻄﺒﻴﻘﺎﺕ ‪ Java‬ﺍﻟﺼﻐﻴﺮﺓ‪ .‬ﺗﻢ ﺍﻵﻥ ﺍﺳﺘﺒﺪﺍﻝ ﻛﻞ ﻣﻦ ﻫﺬﻩ‬
‫ﺍﻷﺳﺎﻟﻴﺐﻓﻲ ﻣﻌﻈﻤﻬﺎ ﺑﺎﻟﺘﻘﻨﻴﺎﺕ ﺍﻟﺤﺪﻳﺜﺔ ‪ ،‬ﻭﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﻨﺼﻴﺔ ﻓﻲ ﺍﻟﻤﻘﺎﻡ ﺍﻷﻭﻝ‪.‬‬

‫ﺗﻢﺗﻄﻮﻳﺮ (‪ JavaScript )Flanagan ، 2002‬ﻓﻲ ﺍﻷﺻﻞ ﺑﻮﺍﺳﻄﺔ ‪ Brendan Eich‬ﻓﻲ‬


‫‪ .Netscape‬ﻛﺎﻥ ﺍﺳﻤﻬﺎ ﺍﻷﺻﻠﻲ ﻣﻮﻛﺎ‪ .‬ﺗﻢ ﺗﻐﻴﻴﺮ ﺍﺳﻤﻬﺎ ﻻﺣﻘﺎً ﺇﻟﻰ ‪ .LiveScript‬ﻓﻲ ﺃﻭﺍﺧﺮ ﻋﺎﻡ‬
‫‪، 1995‬ﺃﺻﺒﺢ ‪ LiveScript‬ﻣﺸﺮﻭﻋﺎً ﻣﺸﺘﺮﻛﺎً ﺑﻴﻦ ‪ Netscape‬ﻭ ‪ Sun Microsystems‬ﻭﺗﻢ‬
‫ﺗﻐﻴﻴﺮﺍﺳﻤﻪ ﺇﻟﻰ ‪ .JavaScript‬ﺷﻬﺪﺕ ‪ JavaScript‬ﺗﻄﻮﺭﺍً ﻭﺍﺳﻌﺎً ‪ ،‬ﺣﻴﺚ ﺍﻧﺘﻘﻠﺖ ﻣﻦ ﺍﻹﺻﺪﺍﺭ‬
‫‪1.0‬ﺇﻟﻰ ﺍﻹﺻﺪﺍﺭ ‪ 1.5‬ﻣﻦ ﺧﻼﻝ ﺇﺿﺎﻓﺔ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﻤﻴﺰﺍﺕ ﻭﺍﻹﻣﻜﺎﻧﻴﺎﺕ ﺍﻟﺠﺪﻳﺪﺓ‪ .‬ﺗﻢ ﺗﻄﻮﻳﺮ‬
‫ﻣﻌﻴﺎﺭﻟﻐﻮﻱ ﻟﺠﺎﻓﺎ ﺳﻜﺮﻳﺒﺖ ﻓﻲ ﺃﻭﺍﺧﺮ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ﻣﻦ ﻗﺒﻞ ﺍﻟﺮﺍﺑﻄﺔ ﺍﻷﻭﺭﻭﺑﻴﺔ ﻟﻤﺼﻨﻌﻲ‬
‫ﺍﻟﻜﻤﺒﻴﻮﺗﺮ)‪ (ECMA‬ﺑﺎﺳﻢ ‪ .ECMA-262‬ﺗﻤﺖ ﺍﻟﻤﻮﺍﻓﻘﺔ ﻋﻠﻰ ﻫﺬﺍ ﺍﻟﻤﻌﻴﺎﺭ ﺃﻳﻀﺎً ﻣﻦ ﻗﺒﻞ‬
‫ﻣﻨﻈﻤﺔﺍﻟﻤﻌﺎﻳﻴﺮ ﺍﻟﺪﻭﻟﻴﺔ )‪ (ISO‬ﻛـ ‪ .ISO-16262‬ﻳﻄُﻠﻖ ﻋﻠﻰ ﺇﺻﺪﺍﺭ ‪ Microsoft‬ﻣﻦ‬
‫‪ JavaScript‬ﺍﺳﻢ ‪.JScript .NET‬‬

‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺇﻣﻜﺎﻧﻴﺔ ﺗﻀﻤﻴﻦ ﻣﺘﺮﺟﻢ ﺟﺎﻓﺎ ﺳﻜﺮﻳﺒﺖ ﻓﻲ ﺍﻟﻌﺪﻳﺪ ﻣﻦ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ‬


‫ﺍﻟﻤﺨﺘﻠﻔﺔ ‪،‬ﺇﻻ ﺃﻥ ﺍﺳﺘﺨﺪﺍﻣﻪ ﺍﻷﻛﺜﺮ ﺷﻴﻮﻋﺎً ﻳﻜﻮﻥ ﻣﻀﻤﻨﺎً ﻓﻲ ﻣﺘﺼﻔﺤﺎﺕ ﺍﻟﻮﻳﺐ‪ .‬ﻳﺘﻢ ﺗﻀﻤﻴﻦ‬
‫ﺗﻌﻠﻴﻤﺎﺕ‪ JavaScript‬ﺍﻟﺒﺮﻣﺠﻴﺔ ﻓﻲ ﻣﺴﺘﻨﺪﺍﺕ ‪ HTML‬ﻭﻳﺘﻢ ﺗﻔﺴﻴﺮﻫﺎ ﺑﻮﺍﺳﻄﺔ ﺍﻟﻤﺴﺘﻌﺮﺽ‬
‫ﻋﻨﺪﻋﺮﺽ ﺍﻟﻤﺴﺘﻨﺪﺍﺕ‪ .‬ﺍﻻﺳﺘﺨﺪﺍﻣﺎﺕ ﺍﻷﺳﺎﺳﻴﺔ ﻟﺠﺎﻓﺎ ﺳﻜﺮﻳﺒﺖ ﻓﻲ ﺑﺮﻣﺠﺔ ﺍﻟﻮﻳﺐ ﻫﻲ‬
‫ﺍﻟﺘﺤﻘﻖﻣﻦ ﺻﺤﺔ ﺑﻴﺎﻧﺎﺕ ﺇﺩﺧﺎﻝ ﺍﻟﻨﻤﻮﺫﺝ ﻭﺇﻧﺸﺎء ﻣﺴﺘﻨﺪﺍﺕ ‪ HTML‬ﺩﻳﻨﺎﻣﻴﻜﻴﺔ‪ .‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ‬
‫‪ JavaScript‬ﺃﻳﻀﺎً ﻣﻊ ﺇﻃﺎﺭ ﻋﻤﻞ ﺗﻄﻮﻳﺮ ﺍﻟﻮﻳﺐ ‪.Rails‬‬
‫ﻋﻠﻰﺍﻟﺮﻏﻢ ﻣﻦ ﺍﺳﻤﻬﺎ ‪ ،‬ﻓﺈﻥ ‪ JavaScript‬ﻣﺮﺗﺒﻂ ﺑﺠﺎﻓﺎ ﻓﻘﻂ ﻣﻦ ﺧﻼﻝ ﺍﺳﺘﺨﺪﺍﻡ ﻧﻔﺲ‬
‫ﺍﻟﺼﻴﻐﺔ‪.‬ﻳﺘﻢ ﻛﺘﺎﺑﺔ ‪ Java‬ﺑﺸﻜﻞ ﻗﻮﻱ ‪ ،‬ﻭﻟﻜﻦ ﻳﺘﻢ ﻛﺘﺎﺑﺔ ‪ JavaScript‬ﺩﻳﻨﺎﻣﻴﻜﻴﺎً )ﺍﻧﻈﺮ ﺍﻟﻔﺼﻞ ‪(5‬‬
‫‪.‬ﺳﻼﺳﻞ ﺃﺣﺮﻑ ‪ JavaScript‬ﻭﻣﺼﻔﻮﻓﺎﺗﻬﺎ ﻟﻬﺎ ﻃﻮﻝ ﺩﻳﻨﺎﻣﻴﻜﻲ‪ .‬ﻟﻬﺬﺍ ﺍﻟﺴﺒﺐ ‪ ،‬ﻟﻢ ﻳﺘﻢ ﺍﻟﺘﺤﻘﻖ‬
‫ﻣﻦﺻﺤﺔ ﻓﻬﺎﺭﺱ ﺍﻟﻤﺼﻔﻮﻓﺔ ‪ ،‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ ﻣﻦ ﺃﻥ ﻫﺬﺍ ﻣﻄﻠﻮﺏ ﻓﻲ ‪ .Java‬ﺗﺪﻋﻢ ‪ Java‬ﺗﻤﺎﻣﺎً‬
‫ﺍﻟﺒﺮﻣﺠﺔﺍﻟﻤﻮﺟﻬﺔ ﻟﻠﻜﺎﺉﻨﺎﺕ ‪ ،‬ﻟﻜﻦ ‪ JavaScript‬ﻻ ﻳﺪﻋﻢ ﺍﻟﻮﺭﺍﺛﺔ ﻭﻻ ﺍﻟﺮﺑﻂ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ‬
‫ﻻﺳﺘﺪﻋﺎءﺍﺕﺍﻟﻄﺮﻳﻘﺔ ﺑﺎﻟﻄﺮﻕ‪.‬‬

‫ﺃﺣﺪﺃﻫﻢ ﺍﺳﺘﺨﺪﺍﻣﺎﺕ ‪ JavaScript‬ﻫﻮ ﺇﻧﺸﺎء ﻣﺴﺘﻨﺪﺍﺕ ‪ HTML‬ﻭﺗﻌﺪﻳﻠﻬﺎ ﺑﺸﻜﻞ‬


‫ﺩﻳﻨﺎﻣﻴﻜﻲ‪.‬ﺗﻌﺮﻑ ‪ JavaScript‬ﺍﻟﺘﺴﻠﺴﻞ ﺍﻟﻬﺮﻣﻲ ﻟﻠﻜﺎﺉﻦ ﺍﻟﺬﻱ ﻳﻄﺎﺑﻖ ﻧﻤﻮﺫﺟﺎً ﻫﺮﻣﻴﺎً ﻟﻤﺴﺘﻨﺪ‬
‫‪ ، HTML‬ﻭﺍﻟﺬﻱ ﻳﺘﻢ ﺗﺤﺪﻳﺪﻩ ﺑﻮﺍﺳﻄﺔ ‪ .Document Object Model‬ﻳﺘﻢ ﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ‬
‫ﻋﻨﺎﺻﺮﻣﺴﺘﻨﺪ ‪ HTML‬ﻣﻦ ﺧﻼﻝ ﻫﺬﻩ ﺍﻟﻜﺎﺉﻨﺎﺕ ‪ ،‬ﻣﻤﺎ ﻳﻮﻓﺮ ﺍﻷﺳﺎﺱ ﻟﻠﺘﺤﻜﻢ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻲ ﻓﻲ‬
‫ﻋﻨﺎﺻﺮﺍﻟﻤﺴﺘﻨﺪﺍﺕ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪98‬‬

‫ﻓﻴﻤﺎﻳﻠﻲ ﻧﺺ ‪ JavaScript‬ﻟﻠﻤﺸﻜﻠﺔ ﺍﻟﺘﻲ ﺗﻢ ﺣﻠﻬﺎ ﻣﺴﺒﻘﺎً ﺑﻌﺪﺓ ﻟﻐﺎﺕ ﻓﻲ ﻫﺬﺍ ﺍﻟﻔﺼﻞ‪.‬‬


‫ﻻﺣﻆﺃﻧﻪ ﻣﻦ ﺍﻟﻤﻔﺘﺮﺽ ﺃﻥ ﻳﺘﻢ ﺍﺳﺘﺪﻋﺎء ﻫﺬﺍ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺍﻟﻨﺼﻲ ﻣﻦ ﻣﺴﺘﻨﺪ ‪ HTML‬ﻭﻳﺘﻢ‬
‫ﺗﻔﺴﻴﺮﻩﺑﻮﺍﺳﻄﺔ ﻣﺴﺘﻌﺮﺽ ﻭﻳﺐ‪.‬‬

‫‪// example.js‬‬
‫ﺍﻹﺩﺧﺎﻝ‪:‬ﻋﺪﺩ ﺻﺤﻴﺢ ‪ ، listLen ،‬ﺣﻴﺚ ‪ listLen‬ﺃﻗﻞ‬ ‫‪//‬‬
‫ﻣﻦ‪ ، 100‬ﺗﻠﻴﻬﺎ ‪ :listLen-numeric value Output‬ﻋﺪﺩ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ‬ ‫‪//‬‬
‫ﺍﻷﻛﺒﺮ‬ ‫‪//‬‬
‫ﻣﻦﻣﺘﻮﺳﻂ ﺟﻤﻴﻊ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ‬ ‫‪//‬‬

‫ﻓﺎﺭ= ‪intList‬ﺟﺪﻳﺪﺻﻔﻴﻒ )‪ (99‬؛‬


‫ﻓﺎﺭﺍﻟﻨﺘﻴﺠﺔ = ‪ 0‬؛ ‪listLen ، counter ، sum = 0 ،‬‬

‫) ﻣﻮﺟﻪ = ‪listLen‬‬
‫"ﺍﻟﺮﺟﺎء ﻛﺘﺎﺑﺔ ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ" ‪ ("" ،‬؛ ﻟﻮ))} ((‪0( && )listLen >100‬‬
‫<‪listLen‬‬

‫‪ //‬ﺍﺣﺼﻞ ﻋﻠﻰ ﺍﻟﻤﺪﺧﻼﺕ ﻭﺍﺣﺴﺐ ﻣﺠﻤﻮﻋﻬﺎ‬


‫ﻝ)ﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ >‪ listLen‬؛ ﻋﺪﺍﺩ ‪} (++‬‬
‫) ﻣﻮﺟﻪ = [ﺍﻟﻌﺪﺍﺩ] ‪intList‬‬
‫"ﺍﻟﺮﺟﺎء ﻛﺘﺎﺑﺔ ﺍﻟﺮﻗﻢ ﺍﻟﺘﺎﻟﻲ" ‪ ("" ،‬؛‬
‫؛ ([‪sum + = parseInt )intList ]counter‬‬
‫{‬

‫‪ //‬ﺍﺣﺴﺐ ﺍﻟﻤﺘﻮﺳﻂ‬
‫ﺍﻟﻤﺘﻮﺳﻂ= ‪ sum / listLen‬؛‬

‫‪ //‬ﻋﺪ ﻗﻴﻢ ﺍﻹﺩﺧﺎﻝ ﺍﻟﺘﻲ ﺗﻜﻮﻥ< ﻣﺘﻮﺳﻂ‬


‫ﻝ)ﻋﺪﺍﺩ = ‪ 0‬؛ ﻋﺪﺍﺩ >‪ listLen‬؛ ﻋﺪﺍﺩ ‪(++‬‬
‫ﻟﻮ)ﻣﺘﻮﺳﻂ( ﻧﺘﻴﺠﺔ ‪ ++‬؛ <[ﻋﺪﺍﺩ] ‪intList‬‬

‫‪ //‬ﻋﺮﺽ ﺍﻟﻨﺘﺎﺉﺞ‬
‫‪:"،‬ﻋﺪﺩ ﺍﻟﻘﻴﻢ< ﺍﻟﻤﺘﻮﺳﻂ ﻫﻮ") ‪document.write‬‬
‫ﺍﻟﻨﺘﻴﺠﺔ ‪ ("</ br>"،‬؛‬
‫{ﺁﺧﺮ‬
‫) ‪document.write‬‬
‫"ﺧﻄﺄ ‪ -‬ﻃﻮﻝ ﻗﺎﺉﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻏﻴﺮ ﻗﺎﻧﻮﻧﻲ >‪ ("</ br‬؛‬

‫‪2.18.3‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ‪PHP‬‬


‫ﺗﻢﺗﻄﻮﻳﺮ (‪ PHP )Converse and Park، 2000‬ﺑﻮﺍﺳﻄﺔ ‪ ، Rasmus Lerdorf‬ﻭﻫﻮ ﻋﻀﻮ‬
‫ﻓﻲﻣﺠﻤﻮﻋﺔ ‪ ، Apache‬ﻓﻲ ﻋﺎﻡ ‪ .1994‬ﻛﺎﻥ ﺩﺍﻓﻌﻪ ﺍﻷﻭﻟﻲ ﻫﻮ ﺗﻮﻓﻴﺮ ﺃﺩﺍﺓ ﻟﻠﻤﺴﺎﻋﺪﺓ ﻓﻲ ﺗﺘﺒﻊ‬
‫ﺯﻭﺍﺭﻣﻮﻗﻊ ﺍﻟﻮﻳﺐ ﺍﻟﺸﺨﺼﻲ ﺍﻟﺨﺎﺹ ﺑﻪ‪ .‬ﻓﻲ ﻋﺎﻡ ‪ ، 1995‬ﻃﻮﺭ ﺣﺰﻣﺔ ﺗﺴﻤﻰ ﺃﺩﻭﺍﺕ ﺍﻟﺼﻔﺤﺔ‬
‫ﺍﻟﺮﺉﻴﺴﻴﺔﺍﻟﺸﺨﺼﻴﺔ ‪ ،‬ﻭﺍﻟﺘﻲ ﺃﺻﺒﺤﺖ ﺃﻭﻝ ﺇﺻﺪﺍﺭ ﻳﺘﻢ ﺗﻮﺯﻳﻌﻪ ﻋﻠﻨﺎً ﻣﻦ ‪ .PHP‬ﻓﻲ ﺍﻷﺻﻞ ‪،‬‬
‫ﻛﺎﻧﺖ‪ PHP‬ﺍﺧﺘﺼﺎﺭﺍً ﻟﻠﺼﻔﺤﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ ﺍﻟﺸﺨﺼﻴﺔ‪ .‬ﻓﻲ ﻭﻗﺖ ﻻﺣﻖ ‪ ،‬ﺑﺪﺃ ﻣﺠﺘﻤﻊ‬
‫ﺍﻟﻤﺴﺘﺨﺪﻣﻴﻦﻓﻲ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻻﺳﻢ ﺍﻟﻤﺘﻜﺮﺭ ‪PHP: Hypertext‬‬
‫‪99‬‬ ‫‪2.18‬ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ‬

‫ﺍﻟﻤﻌﺎﻟﺞﺍﻟﻤﺴﺒﻖ ‪ ،‬ﻭﺍﻟﺬﻱ ﺃﺩﻯ ﻻﺣﻘﺎً ﺇﻟﻰ ﻏﻤﻮﺽ ﺍﻻﺳﻢ ﺍﻷﺻﻠﻲ‪ .‬ﺗﻢ ﺗﻄﻮﻳﺮ ‪ PHP‬ﺍﻵﻥ ﻭﺗﻮﺯﻳﻌﻪ‬
‫ﻭﺩﻋﻤﻪﻛﻤﻨﺘﺞ ﻣﻔﺘﻮﺡ ﺍﻟﻤﺼﺪﺭ‪ .‬ﺗﻮﺟﺪ ﻣﻌﺎﻟﺠﺎﺕ ‪ PHP‬ﻓﻲ ﻣﻌﻈﻢ ﺧﻮﺍﺩﻡ ﺍﻟﻮﻳﺐ‪.‬‬

‫‪.‬ﺃﺑﺪﺍً‪ PHP‬ﻟﺬﻟﻚ ‪ ،‬ﻻ ﻳﺮﻯ ﻣﺴﺘﻌﺮﺽ ﺍﻟﻮﻳﺐ ﻛﻮﺩ ‪ HTML.‬ﻓﻲ ﻣﺴﺘﻨﺪ ‪ PHP‬ﻛﻤﺨﺮﺝ ‪،‬‬
‫ﻭﺍﻟﺬﻱﻳﺤﻞ ﻣﺤﻞ ﻛﻮﺩ ‪ HTML‬ﻛﻮﺩ ‪ PHP‬ﺍﻟﺬﻱ ﺗﻢ ﺗﻀﻤﻴﻨﻪ ﻓﻴﻪ‪ .‬ﻋﺎﺩﺓ ًﻣﺎ ﻳﻨﺘﺞ ﻋﻦ ﻛﻮﺩ ‪HTML‬‬
‫ﻋﻠﻰﺧﺎﺩﻡ ﺍﻟﻮﻳﺐ ﻋﻨﺪﻣﺎ ﻳﻄﻠﺐ ﺍﻟﻤﺴﺘﻌﺮﺽ ﻣﺴﺘﻨﺪ ‪ PHP‬ﻭﻣﺼﻤﻤﺔ ﺧﺼﻴﺼﺎً ﻟﺘﻄﺒﻴﻘﺎﺕ‬
‫ﺍﻟﻮﻳﺐ‪.‬ﻳﺘﻢ ﺗﻔﺴﻴﺮ ﻛﻮﺩ ‪ HTML‬ﻫﻲ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻧﺼﻴﺔ ﻣﻦ ﺟﺎﻧﺐ ﺍﻟﺨﺎﺩﻡ ﻣﻀﻤﻨﺔ ﻓﻲ ‪PHP‬‬

‫ﻳﺸﺒﻪ‪ ، PHP JavaScript‬ﻓﻲ ﻣﻈﻬﺮﻩ ﺍﻟﻨﺤﻮﻱ ‪ ،‬ﻭﺍﻟﻄﺒﻴﻌﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ ﻟﺴﻼﺳﻠﻪ‬


‫ﻭﻣﺼﻔﻮﻓﺎﺗﻪ ‪،‬ﻭﺍﺳﺘﺨﺪﺍﻣﻪ ﻟﻠﻜﺘﺎﺑﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ‪ .‬ﻣﺼﻔﻮﻓﺎﺕ ‪ PHP‬ﻫﻲ ﻣﺰﻳﺞ ﻣﻦ ﻣﺼﻔﻮﻓﺎﺕ‬
‫‪ JavaScript‬ﻭﺗﺠﺰﺉﺎﺕ ‪.Perl‬‬
‫ﺍﻟﻨﺴﺨﺔﺍﻷﺻﻠﻴﺔ ﻣﻦ ‪ PHP‬ﻟﻢ ﺗﺪﻋﻢ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ‪ ،‬ﻟﻜﻦ ﻫﺬﺍ ﺍﻟﺪﻋﻢ ﺃﺿُﻴﻒ ﻓﻲ‬
‫ﺍﻹﺻﺪﺍﺭﺍﻟﺜﺎﻧﻲ‪ .‬ﻭﻣﻊ ﺫﻟﻚ ‪ ،‬ﻻ ﺗﺪﻋﻢ ‪ PHP‬ﺍﻟﻔﺉﺎﺕ ﺃﻭ ﺍﻟﻮﺍﺟﻬﺎﺕ ﺍﻟﻤﺠﺮﺩﺓ ﺃﻭ ﺃﺩﻭﺍﺕ ﺍﻟﺘﺪﻣﻴﺮ ﺃﻭ‬
‫ﻋﻨﺎﺻﺮﺍﻟﺘﺤﻜﻢ ﻓﻲ ﺍﻟﻮﺻﻮﻝ ﻷﻋﻀﺎء ﺍﻟﻔﺼﻞ‪.‬‬

‫ﻳﺘﻴﺢ‪ PHP‬ﻭﺻﻮﻻ ًﺑﺴﻴﻄﺎً ﺇﻟﻰ ﺑﻴﺎﻧﺎﺕ ﻧﻤﻮﺫﺝ ‪ ، HTML‬ﻟﺬﺍ ﻓﺈﻥ ﻣﻌﺎﻟﺠﺔ ﺍﻟﻨﻤﺎﺫﺝ ﺳﻬﻠﺔ‬
‫ﺑﺎﺳﺘﺨﺪﺍﻡ‪ .PHP‬ﻳﻮﻓﺮ ‪ PHP‬ﺍﻟﺪﻋﻢ ﻟﻠﻌﺪﻳﺪ ﻣﻦ ﺃﻧﻈﻤﺔ ﺇﺩﺍﺭﺓ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ ﺍﻟﻤﺨﺘﻠﻔﺔ‪ .‬ﻫﺬﺍ‬
‫ﻳﺠﻌﻠﻬﺎﻟﻐﺔ ﻣﻔﻴﺪﺓ ﻟﺒﻨﺎء ﺍﻟﺒﺮﺍﻣﺞ ﺍﻟﺘﻲ ﺗﺤﺘﺎﺝ ﺇﻟﻰ ﻭﺻﻮﻝ ﺍﻟﻮﻳﺐ ﺇﻟﻰ ﻗﻮﺍﻋﺪ ﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬‬

‫‪2.18.4‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ﺑﺎﻳﺜﻮﻥ‬


‫ﻋﻠﻰ‪ Python‬ﻫﻮ ﻧﻈﺎﻡ ﻣﻔﺘﻮﺡ ﺍﻟﻤﺼﺪﺭ ﻭﻣﺘﺎﺡ ﻟﻤﻌﻈﻢ ﻣﻨﺼﺎﺕ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﺸﺎﺉﻌﺔ‪ .‬ﻳﺘﻮﻓﺮ‬
‫ﺗﻄﺒﻴﻖ‪. Python‬ﻭﻣﻬﺎﻡ ﺍﻟﺤﻮﺳﺒﺔ ﺍﻟﺼﻐﻴﺮﺓ ﻧﺴﺒﻴﺎً ﺍﻷﺧﺮﻯ ‪ CGI‬ﺇﺩﺍﺭﺓ ﺍﻟﻨﻈﺎﻡ ﻭﺑﺮﻣﺠﺔ ‪Perl:‬‬
‫ﻟﻨﻔﺲﺃﻧﻮﺍﻉ ﺍﻟﺘﻄﺒﻴﻘﺎﺕ ﻣﺜﻞ ‪ Python‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ‪ Python Software Foundation.‬ﻓﻲ‬
‫ﻫﻮﻟﻨﺪﺍﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ‪ .‬ﻳﺘﻢ ﺗﻄﻮﻳﺮﻩ ﺍﻵﻥ ﺑﻮﺍﺳﻄﺔ ‪Mathematisch Centrum‬‬
‫‪ Stichting‬ﻓﻲ ‪ Guido van Rossum‬ﻫﻲ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻧﺼﻴﺔ ﻣﻔﺴﺮﺓ ﺣﺪﻳﺜﺔ ﻧﺴﺒﻴﺎً ﻣﻮﺟﻬﺔ‬
‫ﻟﻠﻜﺎﺉﻨﺎﺕ‪.‬ﺗﻢ ﺗﺼﻤﻴﻤﻪ ﺍﻷﻭﻟﻲ ﺑﻮﺍﺳﻄﺔ (‪،Python )Lutz and Ascher، 2004‬‬
‫‪www.python.org‬ﺍﻟﺬﻱ ﻳﺤﺘﻮﻱ ﺃﻳﻀﺎً ﻋﻠﻰ ﻣﻌﻠﻮﻣﺎﺕ ﺷﺎﻣﻠﺔ ﺑﺨﺼﻮﺹ ‪.Python‬‬

‫ﻻﻳﻌﺘﻤﺪ ﺑﻨﺎء ﺟﻤﻠﺔ ﺑﺎﻳﺜﻮﻥ ﻣﺒﺎﺷﺮﺓ ﻋﻠﻰ ﺃﻱ ﻟﻐﺔ ﺷﺎﺉﻌﺔ ﺍﻻﺳﺘﺨﺪﺍﻡ‪ .‬ﻳﺘﻢ ﻓﺤﺼﻪ ﻣﻦ‬
‫ﺍﻟﻨﻮﻉ ‪،‬ﻭﻟﻜﻦ ﻳﺘﻢ ﻛﺘﺎﺑﺘﻪ ﺩﻳﻨﺎﻣﻴﻜﻴﺎً‪ .‬ﺑﺪﻻ ًﻣﻦ ﺍﻟﻤﺼﻔﻮﻓﺎﺕ ‪ ،‬ﺗﺘﻀﻤﻦ ‪ Python‬ﺛﻼﺛﺔ ﺃﻧﻮﺍﻉ ﻣﻦ‬
‫ﻫﻴﺎﻛﻞﺍﻟﺒﻴﺎﻧﺎﺕ‪ :‬ﺍﻟﻘﻮﺍﺉﻢ ؛ ﻏﻴﺮ ﻗﺎﺑﻠﺔ ﻟﻠﺘﻐﻴﻴﺮ ‪ ،‬ﻭﺍﻟﺘﻲ ﺗﺴﻤﻰﻣﺠﻤﻮﻋﺎﺕ؛ ﻭﺍﻟﺘﺠﺰﺉﺔ ‪ ،‬ﻭﺍﻟﺘﻲ‬
‫ﻳﺘﻢﺍﺳﺘﺪﻋﺎﺅﻫﺎﻗﻮﺍﻣﻴﺲ‪ .‬ﻫﻨﺎﻙ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﻃﺮﻕ ﺍﻟﻘﺎﺉﻤﺔ ‪ ،‬ﻣﺜﻞﺇﻟﺤﺎﻕ ‪ ،‬ﺇﺩﺭﺍﺝ ‪ ،‬ﺇﺯﺍﻟﺔ ‪،‬ﻭﻧﻮﻉ‪،‬‬
‫ﺑﺎﻹﺿﺎﻓﺔﺇﻟﻰ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺃﺳﺎﻟﻴﺐ ﺍﻟﻘﻮﺍﻣﻴﺲ ‪ ،‬ﻣﺜﻞﻣﻔﺎﺗﻴﺢ ‪ ،‬ﻗﻴﻢ ‪ ،‬ﻧﺴﺦ ‪،‬ﻭ‪has_key.‬ﺗﺪﻋﻢ‬
‫‪ Python‬ﺃﻳﻀﺎً ﻗﻮﺍﺉﻢ ﺍﻟﻔﻬﻢ ‪ ،‬ﺍﻟﺘﻲ ﻧﺸﺄﺕ ﻣﻊ ﻟﻐﺔ ‪ .Haskell‬ﺗﻤﺖ ﻣﻨﺎﻗﺸﺔ ﺍﺳﺘﻴﻌﺎﺏ‬
‫ﺍﻟﻘﺎﺉﻤﺔﻓﻲ ﺍﻟﻘﺴﻢ ‪.15.8‬‬

‫‪.‬ﻭﻟﺪﻳﻬﺎﻣﻌﺎﻟﺠﺔ ﺍﺳﺘﺜﻨﺎﺉﻴﺔ‪ .‬ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺟﻤﻊ ﺍﻟﻘﻤﺎﻣﺔ ﻻﺳﺘﻌﺎﺩﺓ ﺍﻟﻜﺎﺉﻨﺎﺕ ﻋﻨﺪﻣﺎ ﻟﻢ‬
‫ﺗﻌﺪﻫﻨﺎﻙ ﺣﺎﺟﺔ ﺇﻟﻴﻬﺎ ‪ Perl ،‬ﻫﻲ ﻟﻐﺔ ﻛﺎﺉﻨﻴﺔ ﺍﻟﺘﻮﺟﻪ ‪ ،‬ﻭﺗﺘﻀﻤﻦ ﺇﻣﻜﺎﻧﻴﺎﺕ ﻣﻄﺎﺑﻘﺔ ﺍﻷﻧﻤﺎﻁ‬
‫ﻓﻲ‪Python‬‬
‫ﻳﺘﻢﺗﻮﻓﻴﺮ ﺍﻟﺪﻋﻢ ﻟﺒﺮﻣﺠﺔ ‪ ، CGI‬ﻭﻣﻌﺎﻟﺠﺔ ﺍﻟﻨﻤﺎﺫﺝ ﻋﻠﻰ ﻭﺟﻪ ﺍﻟﺨﺼﻮﺹ ‪ ،‬ﺑﻮﺍﺳﻄﺔ‪CGI‬‬
‫ﻭﺣﺪﺓ‪.‬ﺗﺘﻮﻓﺮ ﺃﻳﻀﺎً ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﻣﻠﻔﺎﺕ ﺗﻌﺮﻳﻒ ﺍﻻﺭﺗﺒﺎﻁ ﻭﺍﻟﺸﺒﻜﺎﺕ ﻭﺍﻟﻮﺻﻮﻝ ﺇﻟﻰ‬
‫ﻗﺎﻋﺪﺓﺍﻟﺒﻴﺎﻧﺎﺕ‪.‬‬
‫ﺍﻟﻔﺼﻞ‪ 2‬ﺗﻄﻮﺭ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺮﺉﻴﺴﻴﺔ‬ ‫‪100‬‬

‫ﺗﺘﻀﻤﻦ‪ Python‬ﺩﻋﻤﺎً ﻟﻠﺘﺰﺍﻣﻦ ﻣﻊ ﻣﺆﺷﺮﺍﺕ ﺍﻟﺘﺮﺍﺑﻂ ﺍﻟﺨﺎﺻﺔ ﺑﻬﺎ ‪ ،‬ﻓﻀﻼ ًﻋﻦ ﺩﻋﻢ ﺑﺮﻣﺠﺔ‬
‫ﺍﻟﺸﺒﻜﺔﺑﻤﻘﺎﺑﺴﻬﺎ‪ .‬ﻛﻤﺎ ﺃﻥ ﻟﺪﻳﻬﺎ ﺩﻋﻤﺎً ﺃﻛﺒﺮ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﻮﻇﻴﻔﻴﺔ ﺃﻛﺜﺮ ﻣﻦ ﻟﻐﺎﺕ ﺍﻟﺒﺮﻣﺠﺔ ﻏﻴﺮ‬
‫ﺍﻟﻮﻇﻴﻔﻴﺔﺍﻷﺧﺮﻯ‪.‬‬
‫ﺇﺣﺪﻯﺍﻟﻤﻴﺰﺍﺕ ﺍﻷﻛﺜﺮ ﺇﺛﺎﺭﺓ ﻟﻼﻫﺘﻤﺎﻡ ﻓﻲ ‪ Python‬ﻫﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﺗﻮﺳﻴﻌﻬﺎ ﺑﺴﻬﻮﻟﺔ‬
‫ﺑﻮﺍﺳﻄﺔﺃﻱ ﻣﺴﺘﺨﺪﻡ‪ .‬ﻳﻤﻜﻦ ﻛﺘﺎﺑﺔ ﺍﻟﻮﺣﺪﺍﺕ ﺍﻟﺘﻲ ﺗﺪﻋﻢ ﺍﻻﻣﺘﺪﺍﺩﺍﺕ ﺑﺄﻱ ﻟﻐﺔ ﻣﺘﺮﺟﻤﺔ‪ .‬ﻳﻤﻜﻦ‬
‫ﺃﻥﺗﻀﻴﻒ ﺍﻹﺿﺎﻓﺎﺕ ﻭﻇﺎﺉﻒ ﻭﻣﺘﻐﻴﺮﺍﺕ ﻭﺃﻧﻮﺍﻉ ﻛﺎﺉﻨﺎﺕ‪ .‬ﻳﺘﻢ ﺗﻨﻔﻴﺬ ﻫﺬﻩ ﺍﻻﻣﺘﺪﺍﺩﺍﺕ‬
‫ﻛﺈﺿﺎﻓﺎﺕﻟﻤﺘﺮﺟﻢ ﺑﺎﻳﺜﻮﻥ‪.‬‬

‫‪2.18.5‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ﺍﻟﻴﺎﻗﻮﺕ‬


‫ﺗﻢﺗﺼﻤﻴﻢ (‪ Ruby )Thomas et al. ، 2005‬ﺑﻮﺍﺳﻄﺔ ‪) Yukihiro Matsumoto‬ﺍﻟﻤﻌﺮﻭﻑ‬
‫ﺃﻳﻀﺎًﺑﺎﺳﻢ ‪ (Matz‬ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ﻭﺗﻢ ﺇﺻﺪﺍﺭﻩ ﻓﻲ ﻋﺎﻡ ‪ .1996‬ﻭﻣﻨﺬ ﺫﻟﻚ ﺍﻟﺤﻴﻦ ‪،‬‬
‫ﺗﻄﻮﺭﺕﺑﺎﺳﺘﻤﺮﺍﺭ‪ .‬ﻛﺎﻥ ﺍﻟﺪﺍﻓﻊ ﻭﺭﺍء ﺭﻭﺑﻲ ﻫﻮ ﻋﺪﻡ ﺭﺿﺎ ﻣﺼﻤﻤﻬﺎ ﻋﻦ ﺑﻴﺮﻝ ﻭﺑﺎﻳﺜﻮﻥ‪ .‬ﻋﻠﻰ ﺍﻟﺮﻏﻢ‬
‫ﻣﻦﺃﻥ ﻛﻼ ًﻣﻦ ‪ Perl‬ﻭ ‪ Python‬ﻳﺪﻋﻤﺎﻥ ﺍﻟﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ‪14،‬ﻟﻴﺴﺖ ﺃﻱ ﻣﻨﻬﻤﺎ ﻟﻐﺔ ﻣﻮﺿﻮﻋﻴﺔ‬
‫ﻣﺤﻀﺔ ‪،‬ﻋﻠﻰ ﺍﻷﻗﻞ ﺑﻤﻌﻨﻰ ﺃﻥ ﻟﻜﻞ ﻣﻨﻬﺎ ﺃﻧﻮﺍﻉ ﺑﺪﺍﺉﻴﺔ )ﻏﻴﺮ ﻛﺎﺉﻦ( ﻭﻛﻞ ﻣﻨﻬﺎ ﻳﺪﻋﻢ ﻭﻇﺎﺉﻒ‪.‬‬

‫ﺍﻟﻤﻴﺰﺓﺍﻷﺳﺎﺳﻴﺔ ﺍﻟﻤﻤﻴﺰﺓ ﻟﺮﻭﺑﻲ ﻫﻲ ﺃﻧﻬﺎ ﻟﻐﺔ ﻣﻮﺟﻬﺔ ﺑﺤﺘﺔ ‪ ،‬ﺗﻤﺎﻣﺎً ﻛﻤﺎ ﻫﻮ ﺍﻟﺤﺎﻝ ﻣﻊ‬
‫‪ .Smalltalk‬ﻛﻞ ﻗﻴﻤﺔ ﺑﻴﺎﻧﺎﺕ ﻫﻲ ﻛﺎﺉﻦ ﻭﻛﻞ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺗﺘﻢ ﻋﺒﺮ ﺍﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﻄﺮﻳﻘﺔ‪.‬‬
‫ﺍﻟﻌﻮﺍﻣﻞﻓﻲ ‪ Ruby‬ﻫﻲ ﺁﻟﻴﺎﺕ ﻧﺤﻮﻳﺔ ﻓﻘﻂ ﻟﺘﺤﺪﻳﺪ ﺍﺳﺘﺪﻋﺎءﺍﺕ ﺍﻟﻄﺮﻳﻘﺔ ﻟﻠﻌﻤﻠﻴﺎﺕ ﺍﻟﻤﻘﺎﺑﻠﺔ‪.‬‬
‫ﻷﻧﻬﺎﻃﺮﻕ ‪ ،‬ﻳﻤﻜﻦ ﺇﻋﺎﺩﺓ ﺗﻌﺮﻳﻔﻬﺎ‪ .‬ﻳﻤﻜﻦ ﺗﺼﻨﻴﻒ ﺟﻤﻴﻊ ﺍﻟﻔﺉﺎﺕ ‪ ،‬ﺍﻟﻤﺤﺪﺩﺓ ﻣﺴﺒﻘﺎً ﺃﻭ ﺍﻟﻤﺤﺪﺩﺓ‬
‫ﻣﻦﻗﺒﻞ ﺍﻟﻤﺴﺘﺨﺪﻡ ‪ ،‬ﻋﻠﻰ ﺃﻧﻬﺎ ﻓﺮﻋﻴﺔ‪.‬‬

‫ﺗﻌﺘﺒﺮﻛﻞ ﻣﻦ ﺍﻟﻔﺉﺎﺕ ﻭﺍﻟﻜﺎﺉﻨﺎﺕ ﻓﻲ ‪ Ruby‬ﺩﻳﻨﺎﻣﻴﻜﻴﺔ ﺑﻤﻌﻨﻰ ﺃﻧﻪ ﻳﻤﻜﻦ ﺇﺿﺎﻓﺔ‬


‫ﺍﻷﺳﺎﻟﻴﺐﺩﻳﻨﺎﻣﻴﻜﻴﺎً ﺇﻟﻰ ﺃﻱ ﻣﻨﻬﻤﺎ‪ .‬ﻫﺬﺍ ﻳﻌﻨﻲ ﺃﻧﻪ ﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﻟﻜﻞ ﻣﻦ ﺍﻟﻔﺉﺎﺕ ﻭﺍﻟﻜﺎﺉﻨﺎﺕ‬
‫ﻣﺠﻤﻮﻋﺎﺕﻣﺨﺘﻠﻔﺔ ﻣﻦ ﺍﻷﺳﺎﻟﻴﺐ ﻓﻲ ﺃﻭﻗﺎﺕ ﻣﺨﺘﻠﻔﺔ ﺃﺛﻨﺎء ﺍﻟﺘﻨﻔﻴﺬ‪ .‬ﻟﺬﻟﻚ ‪ ،‬ﻳﻤﻜﻦ ﺃﻥ ﺗﺘﺼﺮﻑ‬
‫ﺃﺷﻜﺎﻝﻣﺨﺘﻠﻔﺔ ﻣﻦ ﻧﻔﺲ ﺍﻟﻔﺉﺔ ﺑﺸﻜﻞ ﻣﺨﺘﻠﻒ‪ .‬ﻳﻤﻜﻦ ﺗﻀﻤﻴﻦ ﻣﺠﻤﻮﻋﺎﺕ ﺍﻷﺳﺎﻟﻴﺐ‬
‫ﻭﺍﻟﺒﻴﺎﻧﺎﺕﻭﺍﻟﺜﻮﺍﺑﺖ ﻓﻲ ﺗﻌﺮﻳﻒ ﺍﻟﻔﺉﺔ‪.‬‬
‫ﻳﺮﺗﺒﻂﺑﻨﺎء ﺟﻤﻠﺔ ﺭﻭﺑﻲ ﺑﺘﻠﻚ ﺍﻟﺨﺎﺻﺔ ﺑﻜﻞ ﻣﻦ ﺇﻳﻔﻞ ﻭﺁﺩﺍ‪ .‬ﻟﻴﺴﺖ ﻫﻨﺎﻙ ﺣﺎﺟﺔ ﻟﻺﻋﻼﻥ ﻋﻦ‬
‫ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ‪،‬ﻷﻧﻪ ﻳﺘﻢ ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻜﺘﺎﺑﺔ ﺍﻟﺪﻳﻨﺎﻣﻴﻜﻴﺔ‪ .‬ﻧﻄﺎﻕ ﺍﻟﻤﺘﻐﻴﺮ ﻣﺤﺪﺩ ﻓﻲ ﺍﺳﻤﻪ‪ :‬ﺍﻟﻤﺘﻐﻴﺮ‬
‫ﺍﻟﺬﻱﻳﺒﺪﺃ ﺍﺳﻤﻪ ﺑﺤﺮﻑ ﻟﻪ ﻧﻄﺎﻕ ﻣﺤﻠﻲ ؛ ﻭﺍﺣﺪ ﻳﺒﺪﺃ ﺑـ @ ﻫﻮ ﻣﺘﻐﻴﺮ ﺣﺎﻟﺔ ؛ ﺍﻟﺬﻱ ﻳﺒﺪﺃ ﺑـ ‪ $‬ﻟﻪ‬
‫ﻧﻄﺎﻕﻋﺎﻟﻤﻲ‪ .‬ﻳﻮﺟﺪ ﻋﺪﺩ ﻣﻦ ﻣﻴﺰﺍﺕ ‪ Perl‬ﻓﻲ ‪ ، Ruby‬ﺑﻤﺎ ﻓﻲ ﺫﻟﻚ ﺍﻟﻤﺘﻐﻴﺮﺍﺕ ﺍﻟﻀﻤﻨﻴﺔ‬
‫ﺑﺄﺳﻤﺎءﺳﺨﻴﻔﺔ ‪ ،‬ﻣﺜﻞ ‪._ $‬‬

‫ﻛﻤﺎﻫﻮ ﺍﻟﺤﺎﻝ ﻣﻊ ‪ ، Python‬ﻳﻤﻜﻦ ﻷﻱ ﻣﺴﺘﺨﺪﻡ ﺗﻤﺪﻳﺪ ﻭ ‪ /‬ﺃﻭ ﺗﻌﺪﻳﻞ ‪ .Ruby‬ﺗﻌﺘﺒﺮ ﻟﻐﺔ‬


‫‪ Ruby‬ﻣﺜﻴﺮﺓ ﻟﻼﻫﺘﻤﺎﻡ ﺛﻘﺎﻓﻴﺎً ﻷﻧﻬﺎ ﺃﻭﻝ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻣﺼﻤﻤﺔ ﻓﻲ ﺍﻟﻴﺎﺑﺎﻥ ﻭﺍﻟﺘﻲ ﺣﻘﻘﺖ‬
‫ﺍﺳﺘﺨﺪﺍﻣﺎًﻭﺍﺳﻊ ﺍﻟﻨﻄﺎﻕ ﻧﺴﺒﻴﺎً ﻓﻲ ﺍﻟﻮﻻﻳﺎﺕ ﺍﻟﻤﺘﺤﺪﺓ‪.‬‬

‫‪2.18.6‬ﺃﺻﻮﻝ ﻭﺧﺼﺎﺉﺺ ﻟﻮﺍ‬


‫ﻟﻮﺍ‪15‬ﺗﻢ ﺗﺼﻤﻴﻤﻪ ﻓﻲ ﺃﻭﺍﺉﻞ ﺍﻟﺘﺴﻌﻴﻨﻴﺎﺕ ﻣﻦ ﻗﺒﻞ ﺭﻭﺑﺮﺗﻮ ﺇﻳﺮﻭﺳﺎﻟﻤﺴﻜﻲ ‪ ،‬ﻭﻭﺍﻟﺪﻳﻤﺎﺭ‬
‫ﺳﻴﻠﻴﺲ ‪،‬ﻭﻟﻮﻳﺲ ﺇﻧﺮﻳﻜﻲ ﺩﻱ ﻓﻴﻐﻴﺮﻳﺪﻭ ﻓﻲ ﺍﻟﺠﺎﻣﻌﺔ ﺍﻟﺒﺎﺑﻮﻳﺔ ﻓﻲ ﺭﻳﻮ ﺩﻱ ﺟﺎﻧﻴﺮﻭ ﻓﻲ ﺍﻟﺒﺮﺍﺯﻳﻞ‪.‬‬
‫ﺇﻧﻬﺎﻟﻐﺔ ﻧﺼﻴﺔ ﺗﺪﻋﻢ ﺍﻹﺟﺮﺍﺉﻴﺔ ﻭ‬

‫‪.14‬ﻓﻲ ﺍﻟﻮﺍﻗﻊ ‪ ،‬ﺩﻋﻢ ﺑﺎﻳﺜﻮﻥ ﻟﻠﺒﺮﻣﺠﺔ ﺍﻟﺸﻴﺉﻴﺔ ﺟﺰﺉﻲ‪.‬‬

‫‪.15‬ﺍﺳﻢ ﻟﻮﺍ ﻣﺸﺘﻖ ﻣﻦ ﺍﻟﻜﻠﻤﺔ ﺍﻟﺒﺮﺗﻐﺎﻟﻴﺔ ﻟﻠﻘﻤﺮ‪.‬‬


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

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

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

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

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

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


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

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


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

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

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


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

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

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


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

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

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

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


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

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


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

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

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


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

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

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

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

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


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

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


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

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

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


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

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

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


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

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

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


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

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

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


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

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

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

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


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

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


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

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

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


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

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

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


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

‫ﻣﻠﺨﺺ‬

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

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

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

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

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


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

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

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

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


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

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

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

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

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


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

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


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

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


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

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

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


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

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


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

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


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

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


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

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


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

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


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

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

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

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


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

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


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

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


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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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


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

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

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

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


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

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

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

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

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

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


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

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


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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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


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

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

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


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

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

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

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

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


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

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

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

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

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

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

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

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

‫<‪>id‬‬ ‫ﺃ‬

‫ﺝ‬

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

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

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

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


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

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


‫ﺃ= ﺏ ‪ +‬ﺝ * ﺃ‬

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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


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

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


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

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


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

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

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

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


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

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

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

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

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

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

‫ﺝ‬ ‫ﺏ‬

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

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

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

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

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

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

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

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

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

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

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

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

‫ﺝ‬ ‫<‪>id‬‬

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

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


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

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

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


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

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

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


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

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

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

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


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

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

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

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


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

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

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

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

‫<‪>if_stmt‬‬

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

‫<‪>if_stmt‬‬

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

‫<‪>if_stmt‬‬

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

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


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

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


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

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


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

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

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

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


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

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

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

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

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

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


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

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

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

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


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

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


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

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

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

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

‫ﻗﺎﻋﺪﺓ‪BNF‬‬

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

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

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

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

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

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

‫ﻭ‬

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

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

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

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

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

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

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


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

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

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


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

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


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

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

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


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

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


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

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


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

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

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

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

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


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

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

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

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

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

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

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


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

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


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

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

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

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


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

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

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

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

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


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

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


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

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

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

‫<‪>expr‬‬

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

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

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


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

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


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

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


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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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


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

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


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

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


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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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


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

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


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

‫‪var ident = un_op var‬‬


‫‪ident = var bin_op‬‬

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


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

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

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

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


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

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


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

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

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

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

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

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

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

‫<‪' 0' →>bin_num‬‬


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

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

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

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

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

‫"‪"1‬‬

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


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

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

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

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

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


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

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

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

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

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

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

‫"‪"1‬‬

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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


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

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

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


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

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


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

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

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


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

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


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

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

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


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

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

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

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

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


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

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

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

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


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

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

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

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

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


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

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


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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

‫}ﺹ{ ﺹ }ﺱ{‬

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

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

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

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

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

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


‫ﺹ< ‪14‬‬

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

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

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

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

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


‫ﺹ< ‪ - 13‬ﺱ‬

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

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

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

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

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

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

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

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

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

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


‫}ﺹ{ ﺹ }ﺱ{‬

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

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

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


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

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

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

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

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


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

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

‫‪x1 = E1‬‬

‫ﻭ‬

‫‪x2 = E2‬‬

‫ﺇﺫﻥﻟﺪﻳﻨﺎ‬

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

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

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


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

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

‫ﺹ >‪7‬‬

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

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


‫ﺱ >‪2‬‬

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

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

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

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

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


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

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

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

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

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


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

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

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

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


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

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

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


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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

‫}ﺹ = ﺱ{‬

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

‫}ﺹ = ﺏ ﻭ ﺱ = ﺃ{‬

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


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

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

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

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

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

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

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

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

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

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

‫ﺃﻧﺎﻭﺏ ﻫﻮ‬

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


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

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

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

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

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

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

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


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

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


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

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

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


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

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


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

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


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

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

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


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

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

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

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

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


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

‫ﺗﻨﺘﺞﻝ ‪P‬‬

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

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


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

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

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

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

‫ﻣﻠﺨﺺ‬

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


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

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

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

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

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

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

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

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

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

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


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

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

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


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

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


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

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

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

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

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


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

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

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

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


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

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


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

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

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


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

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


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

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

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

‫ﺃ‪.‬ﺍ ﺏ ﺕ ﺙ‬

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

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


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

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

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

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


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

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

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


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

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


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

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

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

You might also like