Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
amer alhosary
217 views
python compiler project
Read more
0
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 22
2
/ 22
3
/ 22
4
/ 22
5
/ 22
6
/ 22
7
/ 22
8
/ 22
9
/ 22
10
/ 22
11
/ 22
12
/ 22
13
/ 22
14
/ 22
15
/ 22
16
/ 22
17
/ 22
18
/ 22
19
/ 22
20
/ 22
21
/ 22
22
/ 22
More Related Content
PDF
Artificial Intelligence, Data and Competition – SCHREPEL – June 2024 OECD dis...
by
OECD Directorate for Financial and Enterprise Affairs
PDF
How to Leverage AI to Boost Employee Wellness - Lydia Di Francesco - SocialHR...
by
SocialHRCamp
PDF
Storytelling For The Web: Integrate Storytelling in your Design Process
by
Chiara Aliotta
PDF
2024 State of Marketing Report – by Hubspot
by
Marius Sescu
PDF
2024 Trend Updates: What Really Works In SEO & Content Marketing
by
Search Engine Journal
PDF
Everything You Need To Know About ChatGPT
by
Expeed Software
PDF
Drawing using turbo_cpp
by
ahmed hanshy
PPTX
Cytoscape basic features
by
Luay AL-Assadi
Artificial Intelligence, Data and Competition – SCHREPEL – June 2024 OECD dis...
by
OECD Directorate for Financial and Enterprise Affairs
How to Leverage AI to Boost Employee Wellness - Lydia Di Francesco - SocialHR...
by
SocialHRCamp
Storytelling For The Web: Integrate Storytelling in your Design Process
by
Chiara Aliotta
2024 State of Marketing Report – by Hubspot
by
Marius Sescu
2024 Trend Updates: What Really Works In SEO & Content Marketing
by
Search Engine Journal
Everything You Need To Know About ChatGPT
by
Expeed Software
Drawing using turbo_cpp
by
ahmed hanshy
Cytoscape basic features
by
Luay AL-Assadi
Featured
PDF
Product Design Trends in 2024 | Teenage Engineerings
by
Pixeldarts
PDF
How Race, Age and Gender Shape Attitudes Towards Mental Health
by
ThinkNow
PDF
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
by
marketingartwork
PDF
Skeleton Culture Code
by
Skeleton Technologies
PDF
PEPSICO Presentation to CAGNY Conference Feb 2024
by
Neil Kimberley
PDF
Content Methodology: A Best Practices Report (Webinar)
by
contently
PPTX
How to Prepare For a Successful Job Search for 2024
by
Albert Qian
PDF
Social Media Marketing Trends 2024 // The Global Indie Insights
by
Kurio // The Social Media Age(ncy)
PDF
Trends In Paid Search: Navigating The Digital Landscape In 2024
by
Search Engine Journal
PDF
5 Public speaking tips from TED - Visualized summary
by
SpeakerHub
PDF
ChatGPT and the Future of Work - Clark Boyd
by
Clark Boyd
PDF
Getting into the tech field. what next
by
Tessa Mero
PDF
Google's Just Not That Into You: Understanding Core Updates & Search Intent
by
Lily Ray
PDF
How to have difficult conversations
by
Rajiv Jayarajah, MAppComm, ACC
PDF
Introduction to Data Science
by
Christy Abraham Joy
PDF
Time Management & Productivity - Best Practices
by
Vit Horky
PDF
The six step guide to practical project management
by
MindGenius
PDF
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
by
RachelPearson36
PDF
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
by
Applitools
PDF
12 Ways to Increase Your Influence at Work
by
GetSmarter
Product Design Trends in 2024 | Teenage Engineerings
by
Pixeldarts
How Race, Age and Gender Shape Attitudes Towards Mental Health
by
ThinkNow
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
by
marketingartwork
Skeleton Culture Code
by
Skeleton Technologies
PEPSICO Presentation to CAGNY Conference Feb 2024
by
Neil Kimberley
Content Methodology: A Best Practices Report (Webinar)
by
contently
How to Prepare For a Successful Job Search for 2024
by
Albert Qian
Social Media Marketing Trends 2024 // The Global Indie Insights
by
Kurio // The Social Media Age(ncy)
Trends In Paid Search: Navigating The Digital Landscape In 2024
by
Search Engine Journal
5 Public speaking tips from TED - Visualized summary
by
SpeakerHub
ChatGPT and the Future of Work - Clark Boyd
by
Clark Boyd
Getting into the tech field. what next
by
Tessa Mero
Google's Just Not That Into You: Understanding Core Updates & Search Intent
by
Lily Ray
How to have difficult conversations
by
Rajiv Jayarajah, MAppComm, ACC
Introduction to Data Science
by
Christy Abraham Joy
Time Management & Productivity - Best Practices
by
Vit Horky
The six step guide to practical project management
by
MindGenius
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
by
RachelPearson36
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
by
Applitools
12 Ways to Increase Your Influence at Work
by
GetSmarter
python compiler project
1.
:ﺃﻭﻻ: ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻤﻔﺮﺩﺍﺗﻲ :ﺃﻣﻮﺭ ﻣﻤﻴﺰﺓ ﺗﻢ ﻣﻌﺎﻟﺠﺘﻬﺎ ﻓﻲ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﻣﻔﺮﺩﺍﺕ ﺍﻟﻠﻐﺔ ●ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻷﻧﻤﺎﻁ ﺍﻟﺘﺎﻟﻴﺔ octinteger "0"("o"|"O"){octdigit}+|"0"{octdigit}+ octdigit [07] hexinteger
"0"("x"|"X"){hexdigit}+ hexdigit {digit}|[af]|[AF] digit [09] bininteger "0"("b"|"B"){bindigit}+ bindigit "0"|"1" ●multilinecomment ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺍﻟﻤﺘﻌﺪﺩﺓ ﺍﻷﺳﻄﺮ %option c++ %x multilinecomment "/*" {colNum+=2; BEGIN(multilinecomment);} <multilinecomment>"n" {lineNum+=1; BEGIN(multilinecomment);} <multilinecomment>"*"*[^"/"] {colNum+=strlen(yytext); } <multilinecomment>[^"*"]* {colNum+=strlen(yytext); } <multilinecomment>"*"+"/" {colNum+=strlen(yytext); BEGIN(INITIAL);} ●:(EOF Pattern) ﻓﻲ ﺇﻧﻬﺎء ﺍﻟﻤﻠﻒ EOF ﺍﺳﺘﺨﺪﺍﻡ ﺍﻟﻨﻤﻂ <<EOF>> {return END_OF_FILE;} ﻣﻨﻪ ﻭﻣﻠﻒ ﺁﺧﺮ ﻟﻄﺒﺎﻋﺔ ﺍﻟﻘﻮﺍﻋﺪ ﻭﺍﻷﺧﻄﺎء ﺍﻟﺤﺎﺻﻠﺔ ﻋﻠﻴﻪ ﺗﺴﻬﻴﻼcode ﺣﻴﺚ ﻗﻤﻨﺎ ﺑﺎﺳﺘﺨﺪﺍﻡ ﻣﻠﻒ ﻟﻘﺮﺍءﺓ ﺍﻟـ .ﻟﻠﻌﻤﻞ :ﺍﻷﺧﻄﺎء ﺍﻟﻤﻌﺎﻟﺠﺔ ﻓﻲ ﺍﻟﻘﻮﺍﻋﺪ ●: ﻭﺍﻟﺘﻲ ﻫﻲsimple_stmt_list ﻏﻴﺎﺏ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻤﻨﻘﻮﻃﺔ ﻓﻲ ﻧﻬﺎﻳﺔ ﻛﻞ ﺗﻌﻠﻴﻤﺔ ﻣﻦ ﺗﻌﻠﻴﻤﺎﺕ expr_list error assert_stmt error assignment_stmt error PASS error del_stmt error 1
2.
print_stmt error return_stmt error raise_stmt error BREAK error CONTINUE error import_list error global_stmt error ﺑﺎﻹﺿﺎﻓﺔ ﺇﻟﻰ ﻏﻴﺎﺏ ﺍﻟﻔﺎﺻﻠﺔ ﺍﻟﻤﻨﻘﻮﻃﺔ ﻓﻲ ﻧﻬﺎﻳﺔ ﺗﻌﺮﻳﻒ ﻣﺘﺤﻮﻝ ﺍﻟﺼﻒ var_declaration error ●ﺣﺼﻮﻝ ﺗﻜﺮﺍﺭ ﻓﻲ ﻭﺍﺻﻔﺎﺕ ﺍﻟﺘﺨﺰﻳﻦ ﻓﻲ ﻛﻞ ﻣﻦ ﺗﺮﻭﻳﺴﺔ ﺍﻟﺼﻒ ﻭﺗﺮﻭﻳﺴﺔ ﺍﻟﺘﺎﺑﻊ ﻭﺗﻌﺮﻳﻒ ﻣﺘﺤﻮﻝ :ﺻﻒ ﻣﺜﻞ static access_modifier static static static access_modifier access_modifier static static final ﻧﻔﺲ ﺍﻷﻣﺜﻠﺔ ﺍﻟﺴﺎﺑﻘﺔ ﻟﻜﻦ ﻓﻲ ﺣﺎﻟﺔ ●ﻑ ﺑﻌﺪﻫﺎ ِﻭﻋﺪﻡ ﻭﺭﻭﺩ ﻣﻌﺮ class ﻭﺭﻭﺩ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻮﺯﺓ class error ●ﻳﻠﻴﻬﺎ ﻣﻌﺮﻑ ﺃﻱ ﺃﻥ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺃﺧﻄﺄ ﻓﻲ class ﻣﻦ ﻭﺭﻭﺩ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻮﺯًﻓﻴﻦ ﻣﺘﺘﺎﻟﻴﻦ ﺑﺪﻻ ِﻭﺭﻭﺩ ﻣﻌﺮ class ﻛﺘﺎﺑﺔ ﺍﻟﻜﻠﻤﺔ ID error ID ●":" ﺟﺴﻢ ﺍﻟﺼﻒ ﻻ ﻳﺒﺪﺃ ﺑـ error end error dm_list end ●end ﺟﺴﻢ ﺍﻟﺼﻒ ﻻ ﻳﻨﺘﻬﻲ ﺑـ ":" error ":" dm_list error ●ﻏﻴﺎﺏ ﺍﺳﻢ ﺍﻟﺘﺎﺑﻊ ﻣﻦ ﺗﺮﻭﻳﺴﺔ ﺍﻟﺘﺎﺑﻊ error OPEN_S arguments CLOSE_S ●ﻏﻴﺎﺏ ﺍﻟﻘﻮﺱ ﺍﻟﻔﺎﺗﺢ ﻟﺴﻠﺴﺔ ﺍﻟﻤﻌﺎﻣﻼﺕ ﻓﻲ ﺗﺮﻭﻳﺴﺔ ﺍﻟﺘﺎﺑﻊ ID error arguments CLOSE_S 2
3.
●ﻏﻴﺎﺏ ﺍﻟﻘﻮﺱ ﺍﻟﻐﺎﻟﻖ ﻟﺴﻠﺴﺔ ﺍﻟﻤﻌﺎﻣﻼﺕ ﻓﻲ ﺗﺮﻭﻳﺴﺔ ﺍﻟﺘﺎﺑﻊ ID OPEN_S arguments error ●"ﻓﻲ ﻣﻨﺘﺼﻒ ﺳﻠﺴﻠﺔ ﺍﻟﻤﻌﺎﻣﻼﺕ ﻟﻠﺘﺮﻭﻳﺴﺔ ﺍﻟﺘﺎﺑﻊ "ﺃﻱ ﻟﻴﺲ ﻛﺄﻭﻝ ﻣﻌﺎﻣﻞ self ﻭﺭﻭﺩ ﺍﻟﻤﻌﺮﻑ args_list COMMA error SELF ●ﻭﺭﻭﺩ ﺍﻟﻨﺠﻤﺔ ﺃﻭ ﺍﻟﺘﺠﻤﺘﺎﻥ ﺑﻌﺪ ﺍﺳﻢ ﺍﻟﻤﺘﺤﻮﻝ ﻓﻲ ﺳﻠﺴﻠﺔ ﺍﻟﻤﻌﺎﻣﻼﺕ ﻟﺘﺮﻭﻳﺴﺔ ﺍﻟﺘﺎﺑﻊ ID STAR error ID STAR STAR error ID STAR error ASSIGN expr ID STAR error STAR ASSIGN expr ●ﻭﺭﻭﺩ ﻣﺘﺤﻮﻝ ﺑﻘﻴﻤﺔ ﺍﺑﺘﺪﺍﺋﻴﺔ ﻟﻴﺲ ﻓﻲ ﻧﻬﺎﻳﺔ ﺳﻠﺴﻠﺔ ﺍﻟﻤﻌﺎﻣﻼﺕ ﻟﺘﺮﻭﻳﺴﺔ ﺍﻟﺘﺎﺑﻊ default_args_list error COMMA args_list ●":" ﻛﺘﻠﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﻻ ﺗﺒﺪﺃ ﺑـ error stmt_list END ●end ﻛﺘﻠﺔ ﺍﻟﺘﻌﻠﻴﻤﺎﺕ ﺍﻟﺘﻲ ﻻ ﺗﻨﺘﻬﻲ ﺑـ COLON stmt_list error ●if_statement ﺑﻴﻦ ﻛﺘﻠﺘﻲ ﺗﻌﻠﻴﻤﺎﺕ ﻓﻲ else ﻋﺪﻡ ﻭﺭﻭﺩ if_header stmt error stmt ●elif ﻋﺪﻡ ﻭﺭﻭﺩ ﻛﺘﻠﺔ ﺗﻌﻠﻴﻤﺎﺕ ﺑﻌﺪ ﺗﺮﻭﻳﺴﺔ ﺗﻌﻠﻴﻤﺔ elif_header error ●elif ﺧﻄﺄ ﻓﻲ ﻛﺘﺎﺑﺔ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻮﺯﺓ error ID expr ●while ﺧﻄﺄ ﻓﻲ ﻛﺘﺎﺑﺔ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻮﺯﺓ error ID expr ●for ﺧﻄﺄ ﻓﻲ ﻛﺘﺎﺑﺔ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻮﺯﺓ ID error ID IN expr_list ●for_header ﺿﻤﻦ ﺍﻟـin ﻋﺪﻡ ﻭﺭﻭﺩ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻮﺯﺓ FOR ID error expr_list ●print ﺧﻄﺄ ﻓﻲ ﻛﺘﺎﺑﺔ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻮﺯﺓ ID error expr_list ●global ﺑﻌﺪ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻮﺯﺓ id_list ﻋﺪﻡ ﻭﺭﻭﺩ GLOBAL error ●raise_statement " ﺑﻌﺪ ﺍﻟﻔﺎﺻﻠﺔ ﻓﻲ ﺍﻟـexpression" ﻋﺪﻡ ﻭﺭﻭﺩ ﺗﻌﺒﻴﺮ RAISE expr COMMA error 3
4.
●raise ﺧﻄﺄ ﻓﻲ ﻛﺘﺎﺑﺔ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻮﺯ ID error expr COMMA expr ●parenth_form ﻋﺪﻡ ﻭﺭﻭﺩ ﻗﻮﺱ ﻓﺎﺗﺢ ﻓﻲ ﺍﻟـ error expr_list CLOSE_S ●parenth_form ﻋﺪﻡ ﻭﺭﻭﺩ ﻗﻮﺱ ﻏﺎﻟﻖ ﻓﻲ ﺍﻟـ OPEN_S expr_list error ﻣﻼﺣﻈﺔ: ﺗﻢ ﻣﻌﺎﻟﺠﺔ ﺍﻷﺧﻄﺎء ﺍﻟﺨﺎﺻﺔ ﺑﺘﺮﻭﻳﺴﺔ ﺍﻟﺼﻒ ﻓﻘﻂ ﻓﻲ ﺣﺎﻟﺔ ﻋﺪﻡ ﻭﺭﻭﺩ ﻭﺍﺻﻔﺎﺕ ﺗﺨﺰﻳﻦ ﺃﻭ ﻭﺍﺻﻔﺎﺕ ﺣﻴﺚ ﺳﻴﺆﺩﻱ ﻣﻌﺎﻟﺠﺔ ﻫﺬﺍ ﺍﻟﺨﻄﺄ ﻣﻦ ﺃﺟﻞ ﺟﻤﻴﻊ ﺗﺒﺎﺩﻳﻞ ﻭﺍﺻﻔﺎﺕ ﺍﻟﺮﺅﺋﻴﺔ class ﺭﻭﺋﻴﺔ ﻗﺒﻞ ﺍﻟﻜﻠﻤﺔ ﺍﻟﻤﺤﺠﻮﺯ .ﻭﺍﻟﺘﺨﺰﻳﻦ ﺇﻟﻰ ﺗﻀﺨﻢ ﻛﺒﻴﺮ ﻓﻲ ﺍﻟﻘﻮﺍﻋﺪ ﺣﻴﺚ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻣﻪ bison ﺍﻟﻤﻌﺮﻑ ﻣﻦ ﻗﺒﻞ ﺃﺩﺍﺓ token error ﺍﺳﺘﺨﺪﻡ ﻓﻲ ﻣﻌﺎﻟﺠﺔ ﻛﻞ ﻫﺬﻩ ﺍﻷﺧﻄﺎء ﺍﻟـ ﺇﻟﻰ input tokens ﻓﻲ ﺍﻟﻘﻮﺍﻋﺪ ﻟﻴﻌﻮﺽ ﻏﻴﺎﺏ ﺃﺟﺰﺍء ﺍﻟﻘﺎﻋﺪﺓ ﺍﻟﺘﻲ ﺳﺒﺒﺖ ﺣﺪﻭﺙ ﺍﻟﺨﻄﺄ ﺣﻴﺚ ﻳﻘﻮﻡ ﺑﺘﺨﻄﻲ ﺍﻟـ .ﻓﻘﻂ ﻭﺫﻟﻚ ﻟﻤﻨﻊ ﺍﻟﺪﺧﻮﻝ ﺑﺤﻠﻘﺔ ﻻ ﻣﻨﺘﻬﺔ tokens ﻣﻘﺒﻮﻝ ﺣﻴﺚ ﻳﺘﺨﻄﻰ ﺛﻼﺙ token ﺃﻥ ﻳﺼﻞ ﺇﻟﻰ :ﺍﻷﺧﻄﺎء bison ﺍﻟﻄﺮﻳﻘﺔ ﺍﻟﺘﻲ ﻳﻌﺎﻟﺞ ﻓﻴﻬﺎ ﺍﻟـ 1. Discard terminals and nonterminals plus state off the parse stack until it finds a place where the error token is allowed in the current state. 2. The error token is shifted on. 3.
Discard input tokens until an acceptable input token is found based on the parse stack including the error token. 4. To prevent cascades of errors only after 3 new tokens are read will the error messaging be turned back on. yyerrok statement turns on error messaging immediately indicating you have handled the error. In particular the tokens on input are not discarded (See infinite loop) :ﺛﺎﻧﻴﺎ: ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﺪﻻﻟﻲ :Symbol table ﺑﻨﻴﺔ ﺍﻟـ 4
5.
:Symbol table ﺃﻣﻮﺭ ﻣﻤﻴﺰﺓ ﺗﻢ ﻣﻌﺎﻟﺠﺘﻬﺎ ﺿﻤﻦ ﺍﻟـ : ﻋﻠﻰ ﺛﻼﺛﺔ ﻣﺴﺘﻮﻳﺎﺕST ﺗﻢ ﻣﻌﺎﻟﺠﺔ ﺍﻷﺧﻄﺎء ﻓﻲ ❖ﺍﻟﺼﻔﻮﻑ .1ﻳﺘﻢ ﺑﻨﺎء ﺑﺎﻧﻲ ﺍﻓﺘﺮﺍﺿﻲ ﻓﻲ ﺣﺎﻝ ﻟﻢ ﻳﺘﻢ ﺇﺷﺎﺅﻩ .2 ﻣﺮﺓ ﺃﺧﺮﻯ ﻟﻠﻤﻠﻒparser ﺗﻤﺖ ﻣﻌﺎﻟﺠﺔ ﺣﺎﻟﺔ ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻼﺣﻘﺔ ﺩﻭﻥ ﺍﻟﺤﺎﺟﺔ ﺇﻟﻰ ﻋﻤﻞ .3: ﻣﻌﺎﻟﺠﺔ ﺣﺎﻟﺔ ﺍﻟﻐﻤﻮﺽ ﻓﻲ ﺃﺛﻨﺎء ﺍﻟﻮﺭﺍﺛﺔ ﻣﻦ ﺻﻒ ﺩﺍﺧﻠﻲ ﻛﻤﺎ ﻓﻲ ﺍﻟﻤﺜﺎﻝ class a: class b:end end class c: class b:end 5
6.
end class e(a,c): class y(b):end end . c.b ﺃﻭa.b ﻓﻔﻲ ﻫﺬﻩ ﺍﻟﺤﺎﻟﺔ ﺳﻴﻄﻠﺐ ﻣﻦ ﺍﻟﻤﺴﺘﺨﺪﻡ ﺗﺤﺪﻳﺪ ﺍﻟﺼﻒ ﺍﻟﺬﻱ ﻳﺮﻳﺪ ﺍﻟﻮﺭﺍﺛﺔ ﻣﻨﻪ 4. ﻭﻛﻤﺎ ﻳﻤﻜﻦ ﻟﻘﻮﺍﻋﺪﻧﺎ ﺗﺤﻘﻴﻖ ﺃﻥ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﺍﻟﻮﺭﺍﺛﺔ ﻋﻦ ﻃﺮﻳﻖ ﺍﻟﺼﻒ ﺍﻟﺨﺎﺭﺟﻲ ﻟﻪ ﻣﻊ ﻓﺤﺺ ﺗﻮﺍﺟﺪﻩ . ﻟﻠﻘﻮﺍﻋﺪ ﺍﻟﻤﻄﻠﻮﺑﺔ ﻓﻲ ﺗﺤﻘﻴﻖ ﺍﻟﻮﺭﺍﺛﺔ ﻣﻦ ﺍﻟﺼﻔﻮﻑ ﺍﻟﺪﺍﺧﻠﻴﺔً ﺑﺎﻟﻔﻌﻞ ﻭﺫﻟﻚ ﻭﻓﻘﺎ ﺇﻻ ﺍﺫﺍ ﻛﺎﻥstatic 5. ﻣﻌﺎﻟﺠﺔ ﺃﺧﻄﺎء ﺍﻟﺼﻔﻮﻑ ﺍﻟﺪﺍﺧﻠﻴﺔ ﻣﺜﻞ :ﺃﻥ ﺍﻟﺼﻒ ﺍﻟﺪﺍﺧﻠﻲ ﻻﻳﻤﻜﻦ ﺃﻥ ﻳﻜﻮﻥ ﺇﻻ ﺍﺫﺍ ﻛﺎﻥ ﻫﺬﺍ ﺍﻟﺼﻒ ﻓﻲ ﺍﻟﻤﺴﺘﻮﺭ ﺍﻷﻭﻝ ﻣﻦ ﺍﻟﺼﻔﻮﻑ ﺍﻟﺪﺍﺧﻠﻴﺔstatic ﺍﻟﺼﻒ ﺍﻟﺨﺎﺭﺟﻲ ﻟﻪ ً ﺃﺑﺪﺍً ﻓﻴﺴﻤﺢ ﻟﻪ ﺃﻥ ﻳﻜﻮﻥ ﺳﺎﻛﻨﺎ ﻷﻥ ﺍﻟﺼﻒ ﺍﻟﺨﺎﺭﺟﻲ ﻻﻳﻤﻜﻦ ﺍﻥ ﻳﻜﻮﻥ ﺳﺎﻛﻨﺎ ﻭﻳﺘﺒﻌﻬﺎ ﻣﺘﻐﻴﺮ ﻳﺘﻢ ﺍﻋﺘﺒﺎﺭ ﻫﺬﺍ ﺍﻟﻤﺘﻐﻴﺮ ﻣﻦ ﻣﺘﻐﻴﺮﺍﺕself ﺣﻴﺚ ﺃﻥ ﻭﺭﻭﺩ ﺍﻟﻜﻠﻤﺔself 6. ﻣﻌﺎﻟﺠﺔ ﺣﺎﻟﺔ ﺍﻝ . ًﺍﻟﺼﻒ ﻭﻫﻮ ﺃﻳﻀﺎ ﻳﻜﻮﻥ ﺳﺎﻛﻨﺎ ❖. ﺍﻟﻤﺘﺤﻮﻻﺕ .1 ﻓﻴﻬﺎ ﺣﻴﺚ ﺍﻧﻪ ﻻﻳﻤﻜﻦstatic ﻣﻌﺎﻟﺠﺔ ﺟﻤﻴﻊ ﺣﺎﻻﺕ ﺍﻟﻤﺘﺤﻮﻻﺕ ﻭﺷﺮﻭﻁ ﻭﺭﻭﺩ ﺍﻟﺼﻔﺔ ﻣﺎﻟﻢ ﻳﻜﻦ ﻫﺬﺍ ﺍﻟﻤﺘﺤﻮﻝstatic ﻭﺭﻭﺩ ﻫﺬﻩ ﺍﻟﺼﻔﺔ ﻟﻤﺘﺤﻮﻝ ﻣﻮﺟﻮﺩ ﻓﻲ ﺻﻒ ﺩﺍﺧﻠﻲ ﻟﻴﺲ . final ﻳﻤﻠﻚ ﺍﻟﺼﻔﺔ .2 ﻭﺍﻟﺘﺄﻛﺪ ﻣﻦ ﺃﻥ ﺍﻟﻤﺘﺤﻮﻝexpr ﺑﺎﻟﻨﺴﺒﺔ ﻟﻠﻤﺘﺤﻮﻻﺕ ﺿﻤﻦ ﺍﻟﺘﻮﺍﺑﻊ ﻓﻘﺪ ﺗﻢ ﻓﺤﺺ ﺣﺎﻟﺔ ﻣﻮﺟﻮﺩ ﻭﻣﻌﺮﻑ ﻣﺴﺒﻘﺎ .3 ❖ﺍﻻﺳﺘﺪﻋﺎءﺍﺕ .1. ﻳﺘﺤﻘﻖ ﻣﻦ ﻭﺟﻮﺩ ﺍﻟﺘﺎﺑﻊ 6
7.
.2. ﻳﺘﺤﻘﻖ ﻣﻦ ﺇﻣﻜﺎﻧﻴﺔ ﺍﺳﺘﺪﻋﺎء ﺍﻟﺘﺎﺑﻊ ﺍﻟﻤﺜﺎﻝ ﺍﻟﺘﺎﻟﻲ ﻳﻨﻔﺬ ﺑﺸﻜﻞ ﺳﻠﻴﻢ ❖ﺍﻟﺘﻮﺍﺑﻊ .1. ﻋﺪﻡ ﺗﻜﺮﺍﺭ ﺍﺳﻢ ﺍﻟﺘﺎﺑﻊ ﻓﻲ ﻧﻔﺲ ﺍﻟﺼﻒ .2static ( ﻓﻲ ﺻﻒ ﺩﺍﺧﻠﻲ ﻟﻴﺲstatic) ﻋﺪﻡ ﺇﺿﺎﻓﺔ ﺗﺎﺑﻊ ﺳﺎﻛﻦ 7
8.
.3. ﻣﻊ ﻣﺘﺎﺑﻌﺔ ﺍﻟﻮﺭﺍﺛﺔ ﺇﻟﻰ ﺍﻷﺏ ﺍﻷﻋﻠﻰfinal ﻣﻦ ﺗﺎﺑﻊ override ﻋﺪﻡ ﺍﻟﺴﻤﺎﺡ ﺑﺎﻟـ :ﻓﻬﻮ ﻳﻌﻄﻲ ﺧﻄﺄ ﻋﻨﺪ ﺗﻨﻔﻴﺬ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ .4ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺗﻮﺍﻓﻖ ﺑﺼﻤﺔ ﺍﻟﺘﺎﺑﻊ ﻟﺪﻯ ﺍﻻﺑﻦ ﻣﻊ ﺍﻷﺏ ﻣﻦ ﺣﻴﺚ ﺍﻟﻤﺘﺤﻮﻻﺕ ﺍﻟﻮﺳﻴﻄﺔ ، ﺗﺮﺗﻴﺒﺎ ﻭ ﻋﺪﺩﺍ : ﻟﻴﻜﻦ ﻟﺪﻳﻨﺎ ﺍﻟﻤﺜﺎﻝ ﺍﻟﺘﺎﻟﻲ 8
9.
ﻳﻈﻬﺮ ﻟﻨﺎ ﺭﺳﺎﻟﺔ ﺧﻄﺄ ﻟﻌﺪﻡ ﺗﻮﺍﻓﻖ ﺍﻟﻤﺘﺤﻮﻻﺕ .. ﻓﻲ ﺣﻴﻦ ﻻ ﻳﻈﻬﺮ ﺍﻟﺨﻄﺄ ﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ .5self ﻟﻴﺲ final static ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺃﻥ ﺍﻟﻮﺳﻴﻂ ﺍﻷﻭﻝ ﻓﻲ ﺍﻟﺘﺎﺑﻊ .6self ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺃﻥ ﺍﻟﻮﺳﻴﻂ ﺍﻷﻭﻝ ﻓﻲ ﺍﻟﺘﻮﺍﺑﻊ ﺍﻟﻐﻴﺮ ﺳﺎﻛﻨﺔ ﻫﻮ .7 ﺇﻻ ﻛﺄﻭﻝ ﻭﺳﻴﻂself ﻻ ﻳﺴﻤﺢ ﺑﻮﺭﻭﺩ ﺍﻟﻮﺳﻴﻂ .8: ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﻋﺪﻡ ﺗﻜﺮﺍﺭ ﻭﺳﻄﺎء ﺍﻟﺘﺎﺑﻊ (1d ﺗﻜﺮﺍﺭﺍ ﻟﻠﻮﺳﻴﻂ(d,d) ﻳﻌﺘﺒﺮ ﻣﺮﻭﺭ (2d ﺗﻜﺮﺍﺭ ﻟﻠﻮﺳﻴﻂ(d,*d) ﻳﻌﺘﺒﺮ ﻣﺮﻭﺭ (3d ﺗﻜﺮﺍﺭ ﻟﻠﻮﺳﻴﻂ(**d,*d) ﻳﻌﺘﺒﺮ ﻣﺮﻭﺭ (4**d * ﺃﻭd ﻻ ﻳﺴﻤﺢ ﺑﻤﺮﻭﺭ ﺃﻛﺜﺮ ﻣﻦ ﻣﺘﺤﻮﻝ ﻣﻦ ﻧﻤﻂ (5Self ﻻﻳﺴﻤﺢ ﺑﻤﺮﻭﺭ ﺃﻛﺜﺮ ﻣﻦ .9ﻭﺍﻟﺘﺎﺑﻊ public ﻒﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻭ ﺍﻟﺬﻱ ﻳﻮﺟﺪ ﺣﺼﺮﺍ ﻓﻲ ﺻ main ﻊﻻﻳﺴﻤﺢ ﺑﻮﺟﻮﺩ ﺃﻛﺜﺮ ﻣﻦ ﺗﺎﺑ static ﻳﻜﻮﻥ .10function Scop ﻳﺘﻢ ﺗﺨﺰﻳﻦ ﻭﺳﻄﺎء ﺍﻟﺘﺎﺑﻊ ﻛﻤﺘﺤﻮﻻﺕ ﺿﻤﻦ .11ﺍﻟﺘﻌﺮﻳﻒ ﺍﻟﻼﺣﻖ ﻟﻠﺘﻮﺍﺑﻊ ﻓﻲ ﻧﻬﺎﻳﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﻌﺪ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺗﻌﺮﻳﻒ ﺟﻤﻴﻊ ﺍﻟﺼﻔﻮﻑ override ﺣﻴﺚ ﻳﻘﻮﻡ ﺑﺎﻟﺘﺤﻘﻖ ﻣﻦ ﺗﻮﺍﺑﻊ . ﺍﻟﻤﻌﺮﻓﺔ ﻻﺣﻘﺎ 9
10.
:AST ﺛﺎﻟﺜﺎ: ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻨﺤﻮﻱ ﺍﻟﻤﺠﺮﺩﺓ .ﻫﻲ ﺑﻨﻴﺔ ﻳﺘﻢ ﺗﻮﻟﻴﺪﻫﺎ ﺃﺛﻨﺎء ﺍﻟﻤﺴﺢ ﺍﻷﻭﻝ ﻟﺸﺠﺮﺓ ﺍﻟﺘﺼﺮﻳﻒ ﻭﺑﺎﻟﺘﺰﺍﻣﻦ ﻣﻊ ﺑﻨﺎء ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﺍﻟﻬﺪﻑ ﻣﻨﻬﺎ ﺗﺨﺰﻳﻦ ﺍﻟﻘﻴﻢ ﻭﺍﻟﻘﻮﺍﻋﺪ ﺍﻹﺳﺘﺨﺪﺍﻣﻴﺔ, ﻳﻔﻴﺪ ﺫﻟﻚ ﻓﻲ ﻣﻌﺮﻓﺔ ﺍﻷﺧﻄﺎء ﺍﻟﺘﻲ ﻣﻤﻜﻦ ﺃﻥ .ﻳﺮﺗﻜﺒﻬﺎ ﺍﻟﻤﺒﺮﻣﺞ ﻣﺜﻞ ﺍﻷﺧﻄﺎء ﺍﻟﻤﻨﻄﻘﻴﺔ ﺣﺠﺮ ﺍﻷﺳﺎﺱ ﻟﺒﺪء ﻣﺮﺣﻠﺔ ﺗﻮﻟﻴﺪ ﺍﻟﺮﻣﺎﺯ ﺃﻭ ﺍﻟـSymbol table ﻣﻊ ﺍﻟـAST ﺗﻌﺘﺒﺮ ﺷﺠﺮﺓ ﺍﻟـ , ﻫﺬﻩ ﺍﻟﺸﺠﺮﺓ ﻋﺒﺎﺭﺓ ﻋﻦ ﺷﺠﺮﺓ ﺛﻨﺎﺋﻴﺔ )ﺃﻱ ﻳﻜﻮﻥ ﻟﻜﻞ ﻋﻘﺪﺓ ﺍﺑﻨﺎﻥ ﻋﻠﻰCodeGeneration .(ﺍﻷﻛﺜﺮ ﺗﺘﺄﻟﻒ ﺍﻟﺸﺠﺮﺓ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻌﻘﺪ ﺍﻟﻤﺮﺗﺒﻄﺔ ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ ﻋﻦ ﻃﺮﻳﻖ ﻣﺆﺷﺮﺍﺕ, ﻭﺗﺤﻮﻱ ﻛﻞ :ﻋﻘﺪﺓ ﻋﻠﻰ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺤﻘﻮﻝ ﻫﻲ ●.ﻧﻤﻂ ﺍﻟﻌﻘﺪﺓ ●.ﻣﺆﺷﺮ ﺍﻻﺑﻦ ﺍﻟﻴﻤﻴﻨﻲ ●.ﻣﺆﺷﺮ ﺍﻻﺑﻦ ﺍﻟﻴﺴﺎﺭﻱ ●.ﻣﺆﺷﺮ ﻋﻠﻰ ﺍﻟﻘﻴﻤﻴﺔ ﺍﻟﻌﺪﺩﻳﺔ ●.ﻣﺆﺷﺮ ﻟﻠﺮﺑﻂ ﻣﻊ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ :AST 2. ﺃﻧﻮﺍﻉ ﺷﺠﺮﺓ :(Big AST) ﻛﺒﻴﺮﺓAST 1.2. ﺷﺠﺮﺓ .ﻳﺘﻢ ﺗﻮﻟﻴﺪ ﻛﺎﻓﺔ ﺍﻟﻌﻘﺪ ﺍﻟﻤﻤﻜﻨﺔ ﻣﻦ ﺃﺟﻞ ﺗﻌﻠﻴﻤﺔ ﻣﻌﻴﻨﺔ ﻣﺴﺎﻭﺉ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻷﺷﺠﺎﺭ ﻫﻮ ﺍﺛﻘﺎﻝ ﺍﻷﺩﺍء ﺍﻟﻜﻠﻲ ﻟﻠﻤﺸﺮﻭﻉ ﺑﺘﻮﻟﻴﺪ ﻭﺗﺨﺰﻳﻦ ﻋﻘﺪ ﻭﺑﻴﺎﻧﺎﺕ ﻗﺪ .ﺗﻢ ﺗﻮﻟﻴﺪﻫﺎ ﻭﺗﺨﺰﻳﻨﻬﺎ ﺩﺍﺧﻞ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ :(Small AST) ﺻﻐﻴﺮﺓAST 2.2. ﺷﺠﺮﺓ ﻓﻴﺘﻢ ﺗﻮﻟﻴﺪ ﻋﻘﺪﻫﺎ ﺑﺎﻧﺘﻘﺎﺋﻴﺔ ﻋﺎﻟﻴﺔ ﺣﻴﺚ ﻳﺘﻢ ﺗﻮﻟﻴﺪ ﻭﺗﺨﺰﻳﻦ ﺍﻷﺷﻴﺎء ﺍﻟﺘﻲ ﻟﻢ ﻳﺘﻢ ﺗﺨﺰﻳﻨﻬﺎ ﻓﻲ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ ﺑﺎﻟﺘﺎﻟﻲ ﺳﻮﻑ ﻳﻘﻞ ﺣﺠﻢ ﺍﻟﺸﺠﺮﺓ ﻭﻟﻦ ﻳﺘﻢ ﺇﺛﻘﺎﻝ ﻛﺎﻫﻞ ﺍﻷﺩﺍء ﺑﺘﻮﻟﻴﺪ ﻋﻘﺪ ﻟﻦ ﻳﺘﻢ ﺍﻹﺳﺘﻔﺎﺩﺓ .ﻣﻨﻬﺎ :(AST) 3. ﺑﻴﻨﺔ ﺍﻟﺸﺠﺮﺓ .ﻫﻲ ﺷﺠﺮﺓ ﺛﻨﺎﺋﻴﺔ ﺗﺘﺄﻟﻒ ﻣﻦ ﻋﺪﺩ ﻣﻦ ﺍﻟﻌﻘﺪ ﺍﻟﻤﺮﺑﻮﻃﺔ ﻣﻊ ﺑﻌﻀﻬﺎ ﺍﻟﺒﻌﺾ ﻋﻦ ﻃﺮﻳﻖ ﻣﺆﺷﺮﺍﺕ 10
11.
:ﺍﻟﺒﻨﻴﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻨﺎ ﻣﻊ ﺑﻌﺾ ﺍﻟﺘﻌﺪﻳﻼﺕ ﺣﻴﺚBig AST ﻗﻤﻨﺎ ﺑﺈﻧﺸﺎء ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻨﺤﻮﻱ ﺍﻟﻤﺠﺮﺩﺓ ﻋﻠﻰ ﺍﻟﺸﻜﻞ ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻟﻜﻞ ﻋﻘﺪﺓ ﺃﺥ ﻭﺍﺑﻦ، ﺍﻷﺥ ﻫﻮ ﺍﻟﻌﻘﺪﺓ ﺍﻟﺘﻲ ﺗﻘﻊ ﻋﻠﻰ ﻧﻔﺲ ﻣﺴﺘﻮﻯ ﺍﻟﻌﻘﺪﺓ ﺍﻟﺤﺎﻟﻴﺔ ﻓﻲ ﺣﻴﻦ ﺃﻥ ﺍﻻﺑﻦ ﻫﻮ ﺍﻟﻌﻘﺪﺓ ﺍﻟﺘﻲ ﺩﺍﺧﻞ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻟﻨﺎﺗﺞ ﻋﻦ ﺍﻟﻌﻘﺪﺓ ﺍﻟﺤﺎﻟﻴﺔ ﻭﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﺍﻷﻣﺮ ﺗﻔﻴﺪ ﻫﺬﻩ ﺍﻟﺨﺎﺻﻴﺔ ﺑﻤﻌﺮﻓﺔ ﺍﻟﻤﺴﺘﻮﻳﺎﺕ ﻭﺗﺤﺪﻳﺪ ﻣﺴﺘﻮﻯ ﻛﻞ ﻋﻘﺪﺓ ﻭﺃﺛﻨﺎء ﺍﻟﺘﺠﻮﻝ ﻋﻠﻰ ﺍﻟﺸﺠﺮﺓ ﻓﺈﻥ .ﻋﻤﻠﻴﺔ ﺍﻟﺒﺤﺚ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﻛﻞ ﻋﻘﺪﺓ ﻣﻊ ﺃﺑﻨﺎﺋﻬﺎ ﺗﻜﻮﻥ ﻣﺴﺘﻘﻠﺔ :ﺃﻧﻮﺍﻉ ﺍﻟﻌﻘﺪ ﻫﻮint float string char long true false ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻛﻞ ﻗﻴﻤﺔ ﻣﻔﺮﺩﺓ ﻣﻦ ﺍﻷﻧﻤﺎﻁ valueNode ﻋﻘﺪﺓ ﻣﻦ ﺍﻟﻨﻤﻂ IDNode ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ ﺇﻧﺸﺎء ﻣﺘﺤﻮﻝ ﻫﻲ ﻟﻬﺎ ﻃﺮﻓﺎﻥ ﺃﻳﻤﻦ ﻭﺃﻳﺴﺮassignmentNode ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻋﻤﻠﻴﺔ ﺍﻟﻤﺴﺎﻭﺍﺓ ﻫﻲ 11
12.
ﻭﻟﻬﺎ ﻃﺮﻓﺎﻥ expressionNode ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺟﻤﻴﻊ ﺃﻧﻮﺍﻉ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﻫﻲ ﻋﻘﺪﺓ CallVariableNode ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻋﻤﻠﻴﺔ ﺍﺳﺘﺪﻋﺎء ﻣﺘﺤﻮﻝ ﻫﻲ ﻋﻘﺪﺓ CallFanctionNode ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻋﻤﻠﻴﺔ ﺍﺳﺘﺪﻋﺎء ﺗﺎﺑﻊ ﻫﻲ ﻋﻘﺪﺓ CallTypeNode ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻋﻤﻠﻴﺔ ﺍﺳﺘﺪﻋﺎء ﺻﻒ ﻫﻲ ﻋﻘﺪﺓ ArrayElementNode ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻋﻨﺼﺮ ﻣﻦ ﻣﺼﻔﻮﻓﺔ ﻫﻮ ﻋﻘﺪﺓ FlowStmtNode ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺪﻓﻖ ﻫﻲ ﻋﻘﺪﺓ ifNode ﻫﻲ if ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ elseNode ﻫﻲ else ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ elifNode ﻫﻲ elif ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ exceptNode ﻫﻲ except ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ FinallyNode ﻫﻲ Finally ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ inputNode ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻫﻲ : ﻣﺰﺍﻳﺎ ﺷﺠﺮﺓ ﺍﻟﺘﺮﻛﻴﺐ ﺍﻟﻨﺤﻮﻱ.4 ﺍﺳﺘﺨﺪﺍﻡ ﺩﻟﻴﻞ ﻣﻮﺣﺪ ﻋﻠﻰ ﻧﻮﻉ ﺍﻟﻌﻘﺪﺓ ﺍﻟﺤﺎﻟﻴﺔ ﻭﺍﻟﺬﻱ ﻳﻌﺒﺮ ﻋﻦ ﺟﻤﻴﻊ ﺍﻧﻮﺍﻉ ﺍﻟﻌﻘﺪ ﺍﻟﻤﻤﻜﻦ ﻭﺭﻭﺩﻫﺎ .ﺿﻤﻦ ﺍﻟﺸﺠﺮﺓ 12
13.
ﺣﻴﺚ ﺍﻧﻨﺎ ﻗﻤﻨﺎ ﺑﺈﺣﺼﺎء ﻣﺠﻤﻮﻋﺔ ﺃﻧﻮﺍﻉ ﺍﻟﻌﻘﺪ ﺍﻟﻮﺍﺭﺩﺓ ﺿﻤﻦ ﺍﻟﺸﺠﺮﺓ ﺿﻤﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻤﺎ ﻳﺴﻬﻞ .ﻋﻤﻠﻴﺎﺕ ﺍﻟﻤﻘﺎﺭﻧﺔ ﻭﺍﻻﺧﺘﺒﺎﺭ ﻭﺍﻛﺘﺸﺎﻑ ﺍﻷﻧﻤﺎﻁ :: ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻷﻧﻤﺎﻁًﺎﺭﺍﺑﻌ ﺗﻌﺘﺒﺮ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻷﻧﻤﺎﻁ ﻣﻦ ﺍﻷﻣﻮﺭ ﺍﻟﺘﺎﺑﻌﺔ ﻟﻤﺮﺣﻠﺔ ﺍﻟﺘﺤﻘﻖ ﺍﻟﺪﻻﻟﻲ ﺣﻴﺚ ﺗﺘﻢ ﺑﻌﺪ ﻋﻤﻠﻴﺔ ً ﺑﻨﺎء ﺷﺠﺮﺓ ﺍﻟﻤﻔﺮﺩﺍﺕ ﻭﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ، ﺇﻻ ﺃﻥ ﻫﻨﺎﻙ ﺣﺎﻻﺕ ﻳﻜﻮﻥ ﻓﻴﻬﺎ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻷﻧﻤﺎﻁ ﻣﻤﻜﻨﺎ ، ﻭﺫﻟﻚ ﻓﻲcompiletime ﺃﺛﻨﺎء ﺑﻨﺎء ﺍﻟﺸﺠﺮﺓ. ﻭﺗﺘﻢ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻷﻧﻤﺎﻁ ﺃﺛﻨﺎء ﺍﻟﺘﺮﺟﻤﺔ ﻣﺤﺎﻭﻟﺔ ﻟﻜﺸﻒ ﺃﻛﺒﺮ ﻗﺪﺭ ﻣﻤﻜﻦ ﻣﻦ ﺍﻷﺧﻄﺎء ﺍﻟﺘﻲ ﻗﺪ ﺗﺆﺩﻱ ﺇﻟﻰ ﺇﻳﻘﺎﻑ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺴﺒﺐ ﺧﻄﺄ ﻣﺤﺎﻭﻟﺔ ﻭﺿﻊ ﻗﻴﻤﺔ ﻣﺘﺤﻮﻝ ﻣﻦ ﻧﻤﻂ ﻓﺎﺻﻠﺔ ﻋﺎﺋﻤﺔ ﻓﻲً . ﻓﻤﺜﻼruntime error ﺃﺛﻨﺎء ﺍﻟﺘﻨﻔﻴﺬ ﻣﺘﺤﻮﻝ ﻣﻦ ﻧﻤﻂ ﺻﺤﻴﺢ ﺗﺆﺩﻱ ﺇﻟﻰ ﺇﻳﻘﺎﻑ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻋﻨﺪ ﺗﻨﻔﻴﺬﻩ ﻭﺑﺎﻟﺘﺎﻟﻲ ﻓﺈﻥ ﻫﺬﻩ ﺍﻟﻤﺮﺣﻠﺔ ﺍﻟﺠﺰﺋﻴﺔ . ﺍﻷﺧﻄﺎء ﻛﻐﻴﺮﻫﺎ ﻣﻦ ﺍﻟﻤﺮﺍﺣﻞ ﺍﻟﺘﻲ ﻳﺘﻢ ﻓﻴﻬﺎ ﻣﺤﺎﻭﻟﺔ ﻛﺸﻒ ﺃﻛﺒﺮ ﻗﺪﺭ ﻣﻤﻜﻦ ﻣﻦ 13
14.
ﻟﻜﻮﻥ ﻋﻤﻞ ﺍﻟﻠﻐﺔ ﺑﻤﺠﻤﻠﻪ ﻳﺘﻢ ﻓﻲ ﺍﻟﺰﻣﻦ ﺍﻟﺤﻘﻴﻘﻲ ﻟﻠﺒﺮﻧﺎﻣﺞ ﻭﺍﻟﻤﺘﺤﻮﻻﺕ ﻓﻴﻬﺎ ﻓﺎﻗﺪﺓًﺍﻭﻟﻜﻦ ﻧﻈﺮ ﻟﻠﻨﻤﻂ ﻻ ﻳﻮﺟﺪ ﻫﻨﺎﻟﻚ ﺗﺤﻘﻖ ﻣﻦ ﺍﻷﻧﻤﺎﻁ ﻓﻲ ﻣﺮﺣﻠﺔ ﺍﻟﺘﺮﺟﻤﺔ ﻭﺇﻧﻤﺎ ﻓﻲ ﻣﺮﺣﻠﺔ ﺍﻟﺘﻨﻔﻴﺬ ﻣﺎ ﻋﺪﺍ .ﺑﻌﺾ ﺍﻷﻣﻮﺭ ﺍﻟﺒﺴﻴﻄﺔ :(: ﻛﺸﻒ ﺍﻷﺧﻄﺎء )ﻣﻌﺎﻟﺠﺔ ﺍﻷﺧﻄﺎءًﺎﺧﺎﻣﺴ . ﺍﻟﻮﺍﺣﺪinterface ﺑﻨﻔﺲ ﺍﻹﺳﻢ ﺿﻤﻦ ﺍﻝtype ﻻﻳﺠﻮﺯ ﺗﺴﻤﻴﺔ ﺃﻛﺜﺮ ﻣﻦ . ﺑﺸﻜﻞ ﺗﻠﻘﺎﺋﻲ ﺇﺫﺍ ﻟﻢ ﻳﺼﺮﺡ ﺧﻼﻑ ﺫﻟﻚObject ﺇﻥ ﺃﻱ ﻧﻤﻂ ﻳﺮﺙ ﺍﻟﻨﻤﻂ .ﻻﻳﺠﻮﺯ ﺃﻥ ﻳﻜﻮﻥ ﻫﻨﺎﻙ ﺣﻠﻘﺎﺕ ﻭﺭﺍﺛﺔ .ﻌﺮﻑُﻻﻳﺠﻮﺯ ﺍﻟﻮﺭﺍﺛﺔ ﻣﻦ ﻧﻤﻂ ﻏﻴﺮ ﻣ .ﻳﺠﺐ ﺃﻥ ﻻﻳﺤﺘﻮﻱ ﺍﻟﺒﺎﻧﻲ ﻋﻠﻰ ﻧﻤﻂ ﻣﺮﺩﻭﺩ ﺳﻴﻘﻮﻡ ﺍﻟﻤﺘﺮﺟﻢ ﺑﺒﻨﺎء ﺍﻟﺒﺎﻧﻲ ﺍﻻﻓﺘﺮﺍﺿﻲ ﺇﺫﺍ ﻟﻢ ﻳﻜﻦ ﻫﻨﺎﻙ ﺃﻱ ﺑﺎﻧﻲ, ﻭﺇﻥ ﺑﻨﺎء ﺃﻱ ﺑﺎﻧﻲ ﻣﻦ . ﻋﻠﻰ ﻋﺪﻡ ﻭﺟﻮﺩ ﺑﺎﻧﻲ ﺍﻓﺘﺮﺍﺿﻲً ﻭﺍﺿﺤﺎًﻌﺘﺒﺮ ﺗﺼﺮﻳﺤﺎُﻳ ﻗﺒﻞ ﺍﻟﻤﺒﺮﻣﺞ ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺑﺎﻧﻲ ﻣﺤﺪﺩ ﻣﻦ ﺑﻮﺍﻧﻲ ﺍﻷﺏ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﺳﻢ ﺍﻷﺏ .(.... ,ﺴﻤﺢ ﺑﺎﻟﺘﻌﺮﻳﻒ ﺍﻟﻼﺣﻖ ﺿﻤﻦ ﺍﻟﻨﻤﻂ )ﺍﻟﻮﺭﺍﺛﺔ, ﺍﻷﻧﻤﺎﻁُﻳ ﻳﻤﻨﻊ ﺍﺳﺘﺨﺪﺍﻡ ﻣﺘﺤﻮﻝ ﻣﺎ ﺍﺫﺍ ﻟﻢ ﻳﻜﻦ ﻗﺪ ﺍﻋﻄﻲ ﻗﻴﻤﺔ ﺍﺑﺘﺪﺍﺋﻴﺔ ﻳﻤﻨﻊ ﺍﺳﺘﺨﺪﺍﻡ ﻣﺘﺤﻮﻝ ﺍﺫﺍ ﻟﻢ ﻳﻜﻦ ﻣﻌﺮﻓﺎ 14
15.
:(Code Generation) : ﺗﻮﻟﻴﺪ ﺍﻟﺮﻣﺎﺯًﺎﺳﺎﺩﺳ ﺗﻌﺘﺒﺮ ﻣﺮﺣﻠﺔ ﺗﻮﻟﻴﺪ ﺍﻟﺮﻣﺎﺯ ﺍﻟﻤﺮﺣﻠﺔ ﺍﻷﺧﻴﺮﺓ ﻓﻲ ﺑﻨﺎء ﺍﻟﻤﺘﺮﺟﻤﺎﺕ، ﻭﺗﺘﺼﻒ ﺑﺼﻌﻮﺑﺘﻬﺎ ﻛﻮﻧﻨﺎ ﺳﻨﻌﺎﻣﻞ ﻣﻊ ﻟﻐﺔ ﻗﺮﻳﺒﺔ ﻣﻦ ﻟﻐﺔ ﺍﻵﻟﺔ، ﺣﻴﺚ ﻳﻜﻮﻥ ﺧﺮﺝ ﻫﺬﻩ ﺍﻟﻤﺮﺣﻠﺔ ﻣﻠﻒ ﻧﺼﻲ ﻳﺤﻮﻱ ﺗﻌﻠﻴﻤﺎﺕ python ﻟﻠﺮﻣﺎﺯ ﺍﻟﻤﺮﺍﺩ ﺗﻨﻔﻴﺬﻩ ﻭﺍﻟﺬﻱ ﻛﺘﺐ ﺑﻠﻐﺔAssembly ﻣﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ AST ﻭﺗﺘﻢ ﻫﺬﻩ ﺍﻟﻤﺮﺣﻠﺔ ﺑﺎﻟﺘﺠﻮﺍﻝ ﻋﻠﻰ ﺍﻟﺸﺠﺮﺓ (, ﺑﻌﺪ ﺍﻟﺘﺤﻘﻖ ﺃﻥ ﺍﻟﻜﻮﺩ ﺍﻟﻤﺪﺧﻞpython )ﺍﻟﻤﻤﺜﻠﺔ ﻟﻜﻮﺩ ﺍﻟﺒﺮﺑﺎﻣﺞ ﺍﻟﻤﻜﺘﻮﺏ ﺑﻠﻐﺔ (... ﻻ ﻳﺤﻮﻱ ﻋﻠﻰ ﺃﻱ ﺃﺧﻄﺎء )ﻗﻮﺍﻋﺪﻳﺔ, ﺩﻻﻟﻴﺔ Main ﻭﻳﻮﺟﺪ ﻓﻴﻪ ﺗﺎﺑﻊ ﺍﻟﻤﻌﺘﻤﺪﺓ ﻋﻠﻰ ﺍﻟﻮﺭﺍﺛﺔ ﺑﺘﻄﺒﻴﻖ ﺗﺎﺑﻊ ﺗﻮﻟﻴﺪ ﺍﻟﺮﻣﺎﺯ ﺑﺸﻜﻞ ﺩﻳﻨﺎﻣﻴﻜﻲAST ﺗﺴﻤﺢ ﺑﻨﻴﺔ ﺍﻟﺸﺠﺮﺓ ﺣﺘﻰ ﻳﺘﻢ ﻓﻬﻤﻬﺎ ﻣﻦAssembly ﻳﺤﻮﻱ ﺗﻌﻠﻴﻤﺎﺕ ﺑﻠﻐﺔs. ﻭﻳﻜﻮﻥ ﺍﻟﺨﺮﺝ ﻣﻠﻒ ﻣﻦ ﺍﻟﻼﺣﻘﺔ .(MIPS)ﻗﺒﻞ ﺍﻵﻟﺔ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ ﺍﻟﻤﺮﺍﺩ ﺍﻟﺘﻨﻔﻴﺬ ﻋﻠﻴﻬﺎ :: ﺑﻌﺾ ﺍﻟﺘﺠﺎﺭﺏ ﻭﺍﻷﻣﺜﻠﺔًﺎﺳﺎﺑﻌ 15
16.
16
17.
17
18.
18
19.
19
20.
20
21.
21
22.
:ﺍﻟﺨﺎﺗﻤﺔ ،ﺭﺃﻳﻨﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺸﺮﻭﻉ ﻛﻴﻔﻴﺔ ﺑﻨﺎء ﻣﺘﺮﺟﻢ ﻟﻠﻐﺔ ﺑﺮﻣﺠﺔ ﺗﻌﺘﻤﺪ ﻣﺒﺎﺩﺉ ﺍﻟﺒﺮﻣﺠﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﻭﻓﻖ ﺗﺴﻠﺴﻞ ﻣﺮﺍﺣﻞ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻤﻔﺮﺩﺍﺗﻲ ﺛﻢ ﺍﻟﻘﺎﻋﺪﻱ ﻓﺎﻟﺪﻻﻟﻲ ﺇﻟﻰ ﺃﻥ ﻧﺼﻞ ﺇﻟﻰ ﻣﺮﺣﻠﺔ ﺗﻮﻟﻴﺪ .ﺍﻟﺮﻣﺎﺯ ﺍﻟﻤﻜﺎﻓﺊ ﻟﻠﺪﺧﻞ ﺃﺗﺎﺡ ﻟﻨﺎ ﻫﺬﺍ ﺍﻟﻤﺸﺮﻭﻉ ﻓﺮﺻﺔ ﺍﻟﺘﻌﺎﻣﻞ ﺑﻌﻤﻖ ﻣﻊ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﻭﻓﻬﻢ ﺁﻟﻴﺔ ﻋﻤﻠﻬﺎ .ﻭﺗﻔﺎﺻﻴﻠﻬﺎ ﻭﻣﻦ ﺃﻫﻢ ﻣﺎ ﺗﻌﻠﻤﻨﺎﻩ ﺧﻼﻝ ﻫﺬﺍ ﺍﻟﻤﺸﺮﻭﻉ ﻫﻮ ﺃﻥ ﺑﻨﺎء ﺍﻟﻤﺸﺎﺭﻳﻊ ﺍﻟﻜﺒﻴﺮﺓ ﻳﺘﻄﻠﺐ ﻣﻨﺎ ﺑﻨﺎء ﻛﻞ ﻣﺮﺣﻠﺔ ﻣﻨﻪ ﺑﻄﺮﻳﻘﺔ ﺻﺤﻴﺤﺔ ﻣﻤﺎ ﻳﺰﻳﺪ ﻣﻦ ﺍﺳﺘﻘﺮﺍﺭ ﺍﻟﻨﻈﺎﻡ ﻭﻳﺴﻬﻞ ﺍﻻﻧﺘﻘﺎﻝ ﻣﻦ ﻣﺮﺣﻠﺔ ﺇﻟﻰ .ﺃﺧﺮﻯ ﺑﻄﺮﻳﻘﺔ ﺗﺤﺎﻓﻆ ﻋﻠﻰ ﺗﻤﺎﺳﻚ ﻫﺬﺍ ﺍﻟﻨﻈﺎﻡ 22
Download