SlideShare a Scribd company logo
1 of 22
Download to read offline
:‫ﺃﻭﻻ: ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻤﻔﺮﺩﺍﺗﻲ‬ 
 
:‫ﺃﻣﻮﺭ ﻣﻤﻴﺰﺓ ﺗﻢ ﻣﻌﺎﻟﺠﺘﻬﺎ ﻓﻲ ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﻣﻔﺮﺩﺍﺕ ﺍﻟﻠﻐﺔ‬ 
●‫ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻷﻧﻤﺎﻁ ﺍﻟﺘﺎﻟﻴﺔ‬ 
octinteger   "0"("o"|"O"){octdigit}+|"0"{octdigit}+ 
octdigit  [0­7] 
hexinteger   "0"("x"|"X"){hexdigit}+ 
hexdigit  {digit}|[a­f]|[A­F] 
digit   [0­9] 
bininteger  "0"("b"|"B"){bindigit}+ 
bindigit  "0"|"1​" 
 
●​multi­line­comment ‫ﺍﻟﺘﻌﺮﻑ ﻋﻠﻰ ﺍﻟﺘﻌﻠﻴﻘﺎﺕ ﺍﻟﻤﺘﻌﺪﺩﺓ ﺍﻷﺳﻄﺮ‬ 
%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 
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 
●‫ﻏﻴﺎﺏ ﺍﻟﻘﻮﺱ ﺍﻟﻐﺎﻟﻖ ﻟﺴﻠﺴﺔ ﺍﻟﻤﻌﺎﻣﻼﺕ ﻓﻲ ﺗﺮﻭﻳﺴﺔ ﺍﻟﺘﺎﺑﻊ‬ 
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 
●​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 
 
:​​Symbol table ‫ﺃﻣﻮﺭ ﻣﻤﻴﺰﺓ ﺗﻢ ﻣﻌﺎﻟﺠﺘﻬﺎ ﺿﻤﻦ ﺍﻟـ‬ 
: ‫​ ﻋﻠﻰ ﺛﻼﺛﺔ ﻣﺴﺘﻮﻳﺎﺕ‬​ST ‫ﺗﻢ ﻣﻌﺎﻟﺠﺔ ﺍﻷﺧﻄﺎء ﻓﻲ‬ 
❖‫ﺍﻟﺼﻔﻮﻑ‬ 
.1‫ﻳﺘﻢ ﺑﻨﺎء ﺑﺎﻧﻲ ﺍﻓﺘﺮﺍﺿﻲ ﻓﻲ ﺣﺎﻝ ﻟﻢ ﻳﺘﻢ ﺇﺷﺎﺅﻩ‬ 
.2‫ ﻣﺮﺓ ﺃﺧﺮﻯ ﻟﻠﻤﻠﻒ‬parser ‫ﺗﻤﺖ ﻣﻌﺎﻟﺠﺔ ﺣﺎﻟﺔ ﺍﻟﻮﺭﺍﺛﺔ ﺍﻟﻼﺣﻘﺔ ﺩﻭﻥ ﺍﻟﺤﺎﺟﺔ ﺇﻟﻰ ﻋﻤﻞ‬ 
.3: ‫ﻣﻌﺎﻟﺠﺔ ﺣﺎﻟﺔ ﺍﻟﻐﻤﻮﺽ ﻓﻲ ﺃﺛﻨﺎء ﺍﻟﻮﺭﺍﺛﺔ ﻣﻦ ﺻﻒ ﺩﺍﺧﻠﻲ ﻛﻤﺎ ﻓﻲ ﺍﻟﻤﺜﺎﻝ‬ 
class a: 
class b:end 
end 
class c: 
class b:end 
5 
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 
.2. ‫ﻳﺘﺤﻘﻖ ﻣﻦ ﺇﻣﻜﺎﻧﻴﺔ ﺍﺳﺘﺪﻋﺎء ﺍﻟﺘﺎﺑﻊ‬ 
‫ﺍﻟﻤﺜﺎﻝ ﺍﻟﺘﺎﻟﻲ ﻳﻨﻔﺬ ﺑﺸﻜﻞ ﺳﻠﻴﻢ‬  
 
❖‫ﺍﻟﺘﻮﺍﺑﻊ‬ 
.1. ‫ﻋﺪﻡ ﺗﻜﺮﺍﺭ ﺍﺳﻢ ﺍﻟﺘﺎﺑﻊ ﻓﻲ ﻧﻔﺲ ﺍﻟﺼﻒ‬ 
.2​static ‫​( ﻓﻲ ﺻﻒ ﺩﺍﺧﻠﻲ ﻟﻴﺲ‬​static) ‫ﻋﺪﻡ ﺇﺿﺎﻓﺔ ﺗﺎﺑﻊ ﺳﺎﻛﻦ‬ 
7 
.3.‫​  ﻣﻊ ﻣﺘﺎﺑﻌﺔ ﺍﻟﻮﺭﺍﺛﺔ ﺇﻟﻰ ﺍﻷﺏ ﺍﻷﻋﻠﻰ‬final ‫​ﻣﻦ ﺗﺎﺑﻊ‬ ​override ‫ﻋﺪﻡ ﺍﻟﺴﻤﺎﺡ ﺑﺎﻟـ‬ 
:‫ﻓﻬﻮ ﻳﻌﻄﻲ ﺧﻄﺄ ﻋﻨﺪ ﺗﻨﻔﻴﺬ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ‬ 
 
.4‫ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺗﻮﺍﻓﻖ ﺑﺼﻤﺔ ﺍﻟﺘﺎﺑﻊ ﻟﺪﻯ ﺍﻻﺑﻦ ﻣﻊ ﺍﻷﺏ ﻣﻦ ﺣﻴﺚ ﺍﻟﻤﺘﺤﻮﻻﺕ ﺍﻟﻮﺳﻴﻄﺔ ، ﺗﺮﺗﻴﺒﺎ ﻭ ﻋﺪﺩﺍ‬ 
: ‫ﻟﻴﻜﻦ ﻟﺪﻳﻨﺎ ﺍﻟﻤﺜﺎﻝ ﺍﻟﺘﺎﻟﻲ‬ 
 
 
8 
‫ﻳﻈﻬﺮ ﻟﻨﺎ ﺭﺳﺎﻟﺔ ﺧﻄﺄ ﻟﻌﺪﻡ ﺗﻮﺍﻓﻖ ﺍﻟﻤﺘﺤﻮﻻﺕ .. ﻓﻲ ﺣﻴﻦ ﻻ ﻳﻈﻬﺮ ﺍﻟﺨﻄﺄ ﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺜﺎﻝ‬  
 
.5​self ‫​ﻟﻴﺲ‬ ​final ​­ ​static ‫ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺃﻥ ﺍﻟﻮﺳﻴﻂ ﺍﻷﻭﻝ ﻓﻲ ﺍﻟﺘﺎﺑﻊ‬ 
.6​self ‫ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺃﻥ ﺍﻟﻮﺳﻴﻂ ﺍﻷﻭﻝ ﻓﻲ ﺍﻟﺘﻮﺍﺑﻊ ﺍﻟﻐﻴﺮ ﺳﺎﻛﻨﺔ ﻫﻮ‬ 
.7‫ ﺇﻻ ﻛﺄﻭﻝ ﻭﺳﻴﻂ‬self ‫ﻻ ﻳﺴﻤﺢ ﺑﻮﺭﻭﺩ ﺍﻟﻮﺳﻴﻂ‬ 
.8: ‫ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﻋﺪﻡ ﺗﻜﺮﺍﺭ ﻭﺳﻄﺎء ﺍﻟﺘﺎﺑﻊ‬ 
(1​d ‫​ ﺗﻜﺮﺍﺭﺍ ﻟﻠﻮﺳﻴﻂ‬(d,d)  ‫ﻳﻌﺘﺒﺮ ﻣﺮﻭﺭ‬ 
(2​d ‫​ ﺗﻜﺮﺍﺭ ﻟﻠﻮﺳﻴﻂ‬(d,*d)  ‫ﻳﻌﺘﺒﺮ ﻣﺮﻭﺭ‬ 
(3d ‫​ ﺗﻜﺮﺍﺭ ﻟﻠﻮﺳﻴﻂ‬(**d,*d)  ‫ﻳﻌﺘﺒﺮ ﻣﺮﻭﺭ‬ 
(4**​​d ‫​* ﺃﻭ‬​d ‫ﻻ ﻳﺴﻤﺢ ﺑﻤﺮﻭﺭ ﺃﻛﺜﺮ ﻣﻦ ﻣﺘﺤﻮﻝ ﻣﻦ ﻧﻤﻂ‬  
(5Self ‫ﻻﻳﺴﻤﺢ ﺑﻤﺮﻭﺭ ﺃﻛﺜﺮ ﻣﻦ‬ 
.9‫​ﻭﺍﻟﺘﺎﺑﻊ‬ public  ‫ﻒ‬‫​ﻓﻲ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻭ ﺍﻟﺬﻱ ﻳﻮﺟﺪ ﺣﺼﺮﺍ ﻓﻲ ﺻ‬ main  ‫ﻊ‬‫ﻻﻳﺴﻤﺢ ﺑﻮﺟﻮﺩ ﺃﻛﺜﺮ ﻣﻦ ﺗﺎﺑ‬ 
​static ‫ﻳﻜﻮﻥ‬ 
.10function Scop ‫ ﻳﺘﻢ ﺗﺨﺰﻳﻦ ﻭﺳﻄﺎء ﺍﻟﺘﺎﺑﻊ ﻛﻤﺘﺤﻮﻻﺕ ﺿﻤﻦ‬  
.11‫​ﺍﻟﺘﻌﺮﻳﻒ ﺍﻟﻼﺣﻖ ﻟﻠﺘﻮﺍﺑﻊ‬  
‫​ﻓﻲ ﻧﻬﺎﻳﺔ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﻌﺪ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺗﻌﺮﻳﻒ ﺟﻤﻴﻊ ﺍﻟﺼﻔﻮﻑ‬ ​override ‫ﺣﻴﺚ ﻳﻘﻮﻡ ﺑﺎﻟﺘﺤﻘﻖ ﻣﻦ ﺗﻮﺍﺑﻊ‬ 
. ‫ﺍﻟﻤﻌﺮﻓﺔ ﻻﺣﻘﺎ‬ 
 
 
 
 
 
 
9 
:AST ‫ﺛﺎﻟﺜﺎ: ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻨﺤﻮﻱ ﺍﻟﻤﺠﺮﺩﺓ‬ 
 
.‫ﻫﻲ ﺑﻨﻴﺔ ﻳﺘﻢ ﺗﻮﻟﻴﺪﻫﺎ ﺃﺛﻨﺎء ﺍﻟﻤﺴﺢ ﺍﻷﻭﻝ ﻟﺸﺠﺮﺓ ﺍﻟﺘﺼﺮﻳﻒ ﻭﺑﺎﻟﺘﺰﺍﻣﻦ ﻣﻊ ﺑﻨﺎء ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ‬ 
‫ﺍﻟﻬﺪﻑ ﻣﻨﻬﺎ ﺗﺨﺰﻳﻦ ﺍﻟﻘﻴﻢ ﻭﺍﻟﻘﻮﺍﻋﺪ ﺍﻹﺳﺘﺨﺪﺍﻣﻴﺔ, ﻳﻔﻴﺪ ﺫﻟﻚ ﻓﻲ ﻣﻌﺮﻓﺔ ﺍﻷﺧﻄﺎء ﺍﻟﺘﻲ ﻣﻤﻜﻦ ﺃﻥ‬ 
.‫ﻳﺮﺗﻜﺒﻬﺎ ﺍﻟﻤﺒﺮﻣﺞ ﻣﺜﻞ ﺍﻷﺧﻄﺎء ﺍﻟﻤﻨﻄﻘﻴﺔ‬ 
‫ ﺣﺠﺮ ﺍﻷﺳﺎﺱ ﻟﺒﺪء ﻣﺮﺣﻠﺔ ﺗﻮﻟﻴﺪ ﺍﻟﺮﻣﺎﺯ ﺃﻭ ﺍﻟـ‬Symbol table ‫ ﻣﻊ ﺍﻟـ‬AST ‫ﺗﻌﺘﺒﺮ ﺷﺠﺮﺓ ﺍﻟـ‬ 
‫, ﻫﺬﻩ ﺍﻟﺸﺠﺮﺓ ﻋﺒﺎﺭﺓ ﻋﻦ ﺷﺠﺮﺓ ﺛﻨﺎﺋﻴﺔ )ﺃﻱ ﻳﻜﻮﻥ ﻟﻜﻞ ﻋﻘﺪﺓ ﺍﺑﻨﺎﻥ ﻋﻠﻰ‬CodeGeneration 
.(‫ﺍﻷﻛﺜﺮ‬ 
‫ﺗﺘﺄﻟﻒ ﺍﻟﺸﺠﺮﺓ ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﻌﻘﺪ ﺍﻟﻤﺮﺗﺒﻄﺔ ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ ﻋﻦ ﻃﺮﻳﻖ ﻣﺆﺷﺮﺍﺕ, ﻭﺗﺤﻮﻱ ﻛﻞ‬ 
:‫ﻋﻘﺪﺓ ﻋﻠﻰ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺍﻟﺤﻘﻮﻝ ﻫﻲ‬ 
●.‫ﻧﻤﻂ ﺍﻟﻌﻘﺪﺓ‬ 
●.‫ﻣﺆﺷﺮ ﺍﻻﺑﻦ ﺍﻟﻴﻤﻴﻨﻲ‬ 
●.‫ﻣﺆﺷﺮ ﺍﻻﺑﻦ ﺍﻟﻴﺴﺎﺭﻱ‬ 
●.‫ﻣﺆﺷﺮ ﻋﻠﻰ ﺍﻟﻘﻴﻤﻴﺔ ﺍﻟﻌﺪﺩﻳﺔ‬ 
●.‫ﻣﺆﺷﺮ ﻟﻠﺮﺑﻂ ﻣﻊ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ‬ 
:​​AST ‫2. ﺃﻧﻮﺍﻉ ﺷﺠﺮﺓ‬ 
:(​​Big AST) ‫​ ﻛﺒﻴﺮﺓ‬​AST ‫1.2. ﺷﺠﺮﺓ‬ 
.‫ﻳﺘﻢ ﺗﻮﻟﻴﺪ ﻛﺎﻓﺔ ﺍﻟﻌﻘﺪ ﺍﻟﻤﻤﻜﻨﺔ ﻣﻦ ﺃﺟﻞ ﺗﻌﻠﻴﻤﺔ ﻣﻌﻴﻨﺔ‬ 
‫ﻣﺴﺎﻭﺉ ﻫﺬﺍ ﺍﻟﻨﻮﻉ ﻣﻦ ﺍﻷﺷﺠﺎﺭ ﻫﻮ ﺍﺛﻘﺎﻝ ﺍﻷﺩﺍء ﺍﻟﻜﻠﻲ ﻟﻠﻤﺸﺮﻭﻉ ﺑﺘﻮﻟﻴﺪ ﻭﺗﺨﺰﻳﻦ ﻋﻘﺪ ﻭﺑﻴﺎﻧﺎﺕ ﻗﺪ‬ 
.‫ﺗﻢ ﺗﻮﻟﻴﺪﻫﺎ ﻭﺗﺨﺰﻳﻨﻬﺎ ﺩﺍﺧﻞ ﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ‬ 
:(​​Small AST) ‫​ ﺻﻐﻴﺮﺓ‬​AST ‫2.2. ﺷﺠﺮﺓ‬ 
‫ﻓﻴﺘﻢ ﺗﻮﻟﻴﺪ ﻋﻘﺪﻫﺎ ﺑﺎﻧﺘﻘﺎﺋﻴﺔ ﻋﺎﻟﻴﺔ ﺣﻴﺚ ﻳﺘﻢ ﺗﻮﻟﻴﺪ ﻭﺗﺨﺰﻳﻦ ﺍﻷﺷﻴﺎء ﺍﻟﺘﻲ ﻟﻢ ﻳﺘﻢ ﺗﺨﺰﻳﻨﻬﺎ ﻓﻲ ﺟﺪﻭﻝ‬ 
‫ﺍﻟﺮﻣﻮﺯ ﺑﺎﻟﺘﺎﻟﻲ ﺳﻮﻑ ﻳﻘﻞ ﺣﺠﻢ ﺍﻟﺸﺠﺮﺓ ﻭﻟﻦ ﻳﺘﻢ ﺇﺛﻘﺎﻝ ﻛﺎﻫﻞ ﺍﻷﺩﺍء ﺑﺘﻮﻟﻴﺪ ﻋﻘﺪ ﻟﻦ ﻳﺘﻢ ﺍﻹﺳﺘﻔﺎﺩﺓ‬ 
.‫ﻣﻨﻬﺎ‬ 
:(​​AST) ‫3. ﺑﻴﻨﺔ ﺍﻟﺸﺠﺮﺓ‬ 
.‫ﻫﻲ ﺷﺠﺮﺓ ﺛﻨﺎﺋﻴﺔ ﺗﺘﺄﻟﻒ ﻣﻦ ﻋﺪﺩ ﻣﻦ ﺍﻟﻌﻘﺪ ﺍﻟﻤﺮﺑﻮﻃﺔ ﻣﻊ ﺑﻌﻀﻬﺎ ﺍﻟﺒﻌﺾ ﻋﻦ ﻃﺮﻳﻖ ﻣﺆﺷﺮﺍﺕ‬ 
10 
 
:‫ﺍﻟﺒﻨﻴﺔ ﺍﻟﺨﺎﺻﺔ ﺑﻨﺎ‬ 
 
‫ ﻣﻊ ﺑﻌﺾ ﺍﻟﺘﻌﺪﻳﻼﺕ ﺣﻴﺚ‬Big AST ‫ﻗﻤﻨﺎ ﺑﺈﻧﺸﺎء ﺷﺠﺮﺓ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻨﺤﻮﻱ ﺍﻟﻤﺠﺮﺩﺓ ﻋﻠﻰ ﺍﻟﺸﻜﻞ‬ 
‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻟﻜﻞ ﻋﻘﺪﺓ ﺃﺥ ﻭﺍﺑﻦ، ﺍﻷﺥ ﻫﻮ ﺍﻟﻌﻘﺪﺓ ﺍﻟﺘﻲ ﺗﻘﻊ ﻋﻠﻰ ﻧﻔﺲ ﻣﺴﺘﻮﻯ ﺍﻟﻌﻘﺪﺓ ﺍﻟﺤﺎﻟﻴﺔ ﻓﻲ‬ 
‫ﺣﻴﻦ ﺃﻥ ﺍﻻﺑﻦ ﻫﻮ ﺍﻟﻌﻘﺪﺓ ﺍﻟﺘﻲ ﺩﺍﺧﻞ ﺍﻟﻤﺴﺘﻮﻯ ﺍﻟﻨﺎﺗﺞ ﻋﻦ ﺍﻟﻌﻘﺪﺓ ﺍﻟﺤﺎﻟﻴﺔ ﻭﺍﻟﺸﻜﻞ ﺍﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ‬ 
‫ﺍﻷﻣﺮ‬ 
 
 
 
‫ﺗﻔﻴﺪ ﻫﺬﻩ ﺍﻟﺨﺎﺻﻴﺔ ﺑﻤﻌﺮﻓﺔ ﺍﻟﻤﺴﺘﻮﻳﺎﺕ ﻭﺗﺤﺪﻳﺪ ﻣﺴﺘﻮﻯ ﻛﻞ ﻋﻘﺪﺓ ﻭﺃﺛﻨﺎء ﺍﻟﺘﺠﻮﻝ ﻋﻠﻰ ﺍﻟﺸﺠﺮﺓ ﻓﺈﻥ‬ 
.‫ﻋﻤﻠﻴﺔ ﺍﻟﺒﺤﺚ ﻋﻠﻰ ﻣﺴﺘﻮﻯ ﻛﻞ ﻋﻘﺪﺓ ﻣﻊ ﺃﺑﻨﺎﺋﻬﺎ ﺗﻜﻮﻥ ﻣﺴﺘﻘﻠﺔ‬ 
 
:‫ﺃﻧﻮﺍﻉ ﺍﻟﻌﻘﺪ‬ 
 
‫  ﻫﻮ‬int float string char long true false ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻛﻞ ﻗﻴﻤﺔ ﻣﻔﺮﺩﺓ ﻣﻦ ﺍﻷﻧﻤﺎﻁ‬ 
valueNode ‫ﻋﻘﺪﺓ ﻣﻦ ﺍﻟﻨﻤﻂ‬ 
 
IDNode ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ ﺇﻧﺸﺎء ﻣﺘﺤﻮﻝ ﻫﻲ‬ 
 
‫ ﻟﻬﺎ ﻃﺮﻓﺎﻥ ﺃﻳﻤﻦ ﻭﺃﻳﺴﺮ‬assignmentNode  ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻋﻤﻠﻴﺔ ﺍﻟﻤﺴﺎﻭﺍﺓ ﻫﻲ‬ 
 
11 
‫​ﻭﻟﻬﺎ ﻃﺮﻓﺎﻥ‬ ​expressionNode ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺟﻤﻴﻊ ﺃﻧﻮﺍﻉ ﺍﻟﻌﻤﻠﻴﺎﺕ ﺍﻟﺤﺴﺎﺑﻴﺔ ﻫﻲ ﻋﻘﺪﺓ‬ 
 
​CallVariableNode  ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻋﻤﻠﻴﺔ ﺍﺳﺘﺪﻋﺎء ﻣﺘﺤﻮﻝ ﻫﻲ ﻋﻘﺪﺓ‬  
 
​CallFanctionNode ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻋﻤﻠﻴﺔ ﺍﺳﺘﺪﻋﺎء ﺗﺎﺑﻊ ﻫﻲ ﻋﻘﺪﺓ‬  
 
​CallTypeNode ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻋﻤﻠﻴﺔ ﺍﺳﺘﺪﻋﺎء ﺻﻒ ﻫﻲ ﻋﻘﺪﺓ‬ 
 
​ArrayElementNode ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻋﻨﺼﺮ ﻣﻦ ﻣﺼﻔﻮﻓﺔ ﻫﻮ ﻋﻘﺪﺓ‬  
 
​FlowStmtNode ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﻋﻤﻠﻴﺎﺕ ﺍﻟﺪﻓﻖ ﻫﻲ ﻋﻘﺪﺓ‬ 
 
​ifNode ‫​ﻫﻲ‬ ​if ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ‬ 
 
​elseNode ‫​ﻫﻲ‬ ​else ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ‬ 
 
​elifNode ‫​ﻫﻲ‬ ​elif ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ‬  
 
​exceptNode ‫​ﻫﻲ‬ ​except ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ‬  
 
​FinallyNode ‫​ﻫﻲ‬ ​Finally ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ‬  
 
​inputNode ‫ﺍﻋﺘﺒﺮﻧﺎ ﺃﻥ ﺗﻌﻠﻴﻤﺔ ﺍﻹﺩﺧﺎﻝ ﻫﻲ‬ 
 
:‫ ﻣﺰﺍﻳﺎ ﺷﺠﺮﺓ ﺍﻟﺘﺮﻛﻴﺐ ﺍﻟﻨﺤﻮﻱ‬​.4 
‫ﺍﺳﺘﺨﺪﺍﻡ ﺩﻟﻴﻞ ﻣﻮﺣﺪ ﻋﻠﻰ ﻧﻮﻉ ﺍﻟﻌﻘﺪﺓ ﺍﻟﺤﺎﻟﻴﺔ ﻭﺍﻟﺬﻱ ﻳﻌﺒﺮ ﻋﻦ ﺟﻤﻴﻊ ﺍﻧﻮﺍﻉ ﺍﻟﻌﻘﺪ ﺍﻟﻤﻤﻜﻦ ﻭﺭﻭﺩﻫﺎ‬ 
.‫ﺿﻤﻦ ﺍﻟﺸﺠﺮﺓ‬ 
12 
‫ﺣﻴﺚ ﺍﻧﻨﺎ ﻗﻤﻨﺎ ﺑﺈﺣﺼﺎء ﻣﺠﻤﻮﻋﺔ ﺃﻧﻮﺍﻉ ﺍﻟﻌﻘﺪ ﺍﻟﻮﺍﺭﺩﺓ ﺿﻤﻦ ﺍﻟﺸﺠﺮﺓ ﺿﻤﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻤﺎ ﻳﺴﻬﻞ‬ 
.‫ﻋﻤﻠﻴﺎﺕ ﺍﻟﻤﻘﺎﺭﻧﺔ ﻭﺍﻻﺧﺘﺒﺎﺭ ﻭﺍﻛﺘﺸﺎﻑ ﺍﻷﻧﻤﺎﻁ‬ 
 
 
 
 
:‫: ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻷﻧﻤﺎﻁ‬ً‫ﺎ‬‫ﺭﺍﺑﻌ‬ 
 
‫ﺗﻌﺘﺒﺮ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻷﻧﻤﺎﻁ ﻣﻦ ﺍﻷﻣﻮﺭ ﺍﻟﺘﺎﺑﻌﺔ ﻟﻤﺮﺣﻠﺔ ﺍﻟﺘﺤﻘﻖ ﺍﻟﺪﻻﻟﻲ ﺣﻴﺚ ﺗﺘﻢ ﺑﻌﺪ ﻋﻤﻠﻴﺔ‬ 
 ً ‫ﺑﻨﺎء ﺷﺠﺮﺓ ﺍﻟﻤﻔﺮﺩﺍﺕ ﻭﺟﺪﻭﻝ ﺍﻟﺮﻣﻮﺯ، ﺇﻻ ﺃﻥ ﻫﻨﺎﻙ ﺣﺎﻻﺕ ﻳﻜﻮﻥ ﻓﻴﻬﺎ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻷﻧﻤﺎﻁ ﻣﻤﻜﻨﺎ‬ 
‫، ﻭﺫﻟﻚ ﻓﻲ‬compile­time ‫ﺃﺛﻨﺎء ﺑﻨﺎء ﺍﻟﺸﺠﺮﺓ. ﻭﺗﺘﻢ ﻋﻤﻠﻴﺔ ﺍﻟﺘﺤﻘﻖ ﻣﻦ ﺍﻷﻧﻤﺎﻁ ﺃﺛﻨﺎء ﺍﻟﺘﺮﺟﻤﺔ‬ 
‫ﻣﺤﺎﻭﻟﺔ ﻟﻜﺸﻒ ﺃﻛﺒﺮ ﻗﺪﺭ ﻣﻤﻜﻦ ﻣﻦ ﺍﻷﺧﻄﺎء ﺍﻟﺘﻲ ﻗﺪ ﺗﺆﺩﻱ ﺇﻟﻰ ﺇﻳﻘﺎﻑ ﺗﻨﻔﻴﺬ ﺍﻟﺒﺮﻧﺎﻣﺞ ﺑﺴﺒﺐ ﺧﻄﺄ‬ 
‫  ﻣﺤﺎﻭﻟﺔ ﻭﺿﻊ ﻗﻴﻤﺔ ﻣﺘﺤﻮﻝ ﻣﻦ ﻧﻤﻂ ﻓﺎﺻﻠﺔ ﻋﺎﺋﻤﺔ ﻓﻲ‬ً ‫. ﻓﻤﺜﻼ‬runtime error ‫ﺃﺛﻨﺎء ﺍﻟﺘﻨﻔﻴﺬ‬ 
‫ﻣﺘﺤﻮﻝ ﻣﻦ ﻧﻤﻂ ﺻﺤﻴﺢ ﺗﺆﺩﻱ ﺇﻟﻰ ﺇﻳﻘﺎﻑ ﺍﻟﺒﺮﻧﺎﻣﺞ ﻋﻨﺪ ﺗﻨﻔﻴﺬﻩ ﻭﺑﺎﻟﺘﺎﻟﻲ ﻓﺈﻥ ﻫﺬﻩ ﺍﻟﻤﺮﺣﻠﺔ ﺍﻟﺠﺰﺋﻴﺔ‬ 
.‫ ﺍﻷﺧﻄﺎء‬ ‫ﻛﻐﻴﺮﻫﺎ ﻣﻦ ﺍﻟﻤﺮﺍﺣﻞ ﺍﻟﺘﻲ ﻳﺘﻢ ﻓﻴﻬﺎ ﻣﺤﺎﻭﻟﺔ ﻛﺸﻒ ﺃﻛﺒﺮ ﻗﺪﺭ ﻣﻤﻜﻦ ﻣﻦ‬ 
 
13 
‫ ﻟﻜﻮﻥ ﻋﻤﻞ ﺍﻟﻠﻐﺔ ﺑﻤﺠﻤﻠﻪ ﻳﺘﻢ ﻓﻲ ﺍﻟﺰﻣﻦ ﺍﻟﺤﻘﻴﻘﻲ ﻟﻠﺒﺮﻧﺎﻣﺞ ﻭﺍﻟﻤﺘﺤﻮﻻﺕ ﻓﻴﻬﺎ ﻓﺎﻗﺪﺓ‬ً‫ﺍ‬‫ﻭﻟﻜﻦ ﻧﻈﺮ‬ 
‫ﻟﻠﻨﻤﻂ ﻻ ﻳﻮﺟﺪ ﻫﻨﺎﻟﻚ ﺗﺤﻘﻖ ﻣﻦ ﺍﻷﻧﻤﺎﻁ ﻓﻲ ﻣﺮﺣﻠﺔ ﺍﻟﺘﺮﺟﻤﺔ ﻭﺇﻧﻤﺎ ﻓﻲ ﻣﺮﺣﻠﺔ ﺍﻟﺘﻨﻔﻴﺬ ﻣﺎ ﻋﺪﺍ‬ 
.‫ﺑﻌﺾ ﺍﻷﻣﻮﺭ ﺍﻟﺒﺴﻴﻄﺔ‬ 
 
:(‫: ﻛﺸﻒ ﺍﻷﺧﻄﺎء )ﻣﻌﺎﻟﺠﺔ ﺍﻷﺧﻄﺎء‬ً‫ﺎ‬‫ﺧﺎﻣﺴ‬ 
.‫  ﺍﻟﻮﺍﺣﺪ‬interface ‫ ﺑﻨﻔﺲ ﺍﻹﺳﻢ ﺿﻤﻦ ﺍﻝ‬type ‫ﻻﻳﺠﻮﺯ ﺗﺴﻤﻴﺔ ﺃﻛﺜﺮ ﻣﻦ‬ 
.‫ ﺑﺸﻜﻞ ﺗﻠﻘﺎﺋﻲ ﺇﺫﺍ ﻟﻢ ﻳﺼﺮﺡ ﺧﻼﻑ ﺫﻟﻚ‬Object ‫ﺇﻥ ﺃﻱ ﻧﻤﻂ ﻳﺮﺙ ﺍﻟﻨﻤﻂ‬ 
.‫ﻻﻳﺠﻮﺯ ﺃﻥ ﻳﻜﻮﻥ ﻫﻨﺎﻙ ﺣﻠﻘﺎﺕ ﻭﺭﺍﺛﺔ‬ 
.‫ﻌﺮﻑ‬ُ‫ﻻﻳﺠﻮﺯ ﺍﻟﻮﺭﺍﺛﺔ ﻣﻦ ﻧﻤﻂ ﻏﻴﺮ ﻣ‬ 
 
 
.‫ﻳﺠﺐ ﺃﻥ ﻻﻳﺤﺘﻮﻱ ﺍﻟﺒﺎﻧﻲ ﻋﻠﻰ ﻧﻤﻂ ﻣﺮﺩﻭﺩ‬ 
‫ﺳﻴﻘﻮﻡ ﺍﻟﻤﺘﺮﺟﻢ ﺑﺒﻨﺎء ﺍﻟﺒﺎﻧﻲ ﺍﻻﻓﺘﺮﺍﺿﻲ ﺇﺫﺍ ﻟﻢ ﻳﻜﻦ ﻫﻨﺎﻙ ﺃﻱ ﺑﺎﻧﻲ, ﻭﺇﻥ ﺑﻨﺎء ﺃﻱ ﺑﺎﻧﻲ ﻣﻦ‬ 
.‫ ﻋﻠﻰ ﻋﺪﻡ ﻭﺟﻮﺩ ﺑﺎﻧﻲ ﺍﻓﺘﺮﺍﺿﻲ‬ً‫ ﻭﺍﺿﺤﺎ‬ً‫ﻌﺘﺒﺮ ﺗﺼﺮﻳﺤﺎ‬ُ‫ﻳ‬ ‫ﻗﺒﻞ ﺍﻟﻤﺒﺮﻣﺞ‬ 
 
 
‫ﻳﻤﻜﻦ ﺍﺳﺘﺨﺪﺍﻡ ﺑﺎﻧﻲ ﻣﺤﺪﺩ ﻣﻦ ﺑﻮﺍﻧﻲ ﺍﻷﺏ ﺑﺎﺳﺘﺨﺪﺍﻡ ﺍﺳﻢ ﺍﻷﺏ‬ 
 
.(.... ,‫ﺴﻤﺢ ﺑﺎﻟﺘﻌﺮﻳﻒ ﺍﻟﻼﺣﻖ ﺿﻤﻦ ﺍﻟﻨﻤﻂ )ﺍﻟﻮﺭﺍﺛﺔ, ﺍﻷﻧﻤﺎﻁ‬ُ‫ﻳ‬ 
 
‫ﻳﻤﻨﻊ ﺍﺳﺘﺨﺪﺍﻡ ﻣﺘﺤﻮﻝ ﻣﺎ ﺍﺫﺍ ﻟﻢ ﻳﻜﻦ ﻗﺪ ﺍﻋﻄﻲ ﻗﻴﻤﺔ ﺍﺑﺘﺪﺍﺋﻴﺔ‬ 
 
‫ﻳﻤﻨﻊ ﺍﺳﺘﺨﺪﺍﻡ ﻣﺘﺤﻮﻝ ﺍﺫﺍ ﻟﻢ ﻳﻜﻦ ﻣﻌﺮﻓﺎ‬ 
 
 
 
 
14 
:(​​Code​ ​Generation) ‫ : ﺗﻮﻟﻴﺪ ﺍﻟﺮﻣﺎﺯ‬ً‫ﺎ‬‫ﺳﺎﺩﺳ‬ 
‫ﺗﻌﺘﺒﺮ ﻣﺮﺣﻠﺔ ﺗﻮﻟﻴﺪ ﺍﻟﺮﻣﺎﺯ ﺍﻟﻤﺮﺣﻠﺔ ﺍﻷﺧﻴﺮﺓ ﻓﻲ ﺑﻨﺎء ﺍﻟﻤﺘﺮﺟﻤﺎﺕ، ﻭﺗﺘﺼﻒ ﺑﺼﻌﻮﺑﺘﻬﺎ ﻛﻮﻧﻨﺎ‬ 
‫ﺳﻨﻌﺎﻣﻞ ﻣﻊ ﻟﻐﺔ ﻗﺮﻳﺒﺔ ﻣﻦ ﻟﻐﺔ ﺍﻵﻟﺔ، ﺣﻴﺚ ﻳﻜﻮﻥ ﺧﺮﺝ ﻫﺬﻩ ﺍﻟﻤﺮﺣﻠﺔ ﻣﻠﻒ ﻧﺼﻲ ﻳﺤﻮﻱ ﺗﻌﻠﻴﻤﺎﺕ‬ 
python ‫ ﻟﻠﺮﻣﺎﺯ ﺍﻟﻤﺮﺍﺩ ﺗﻨﻔﻴﺬﻩ ﻭﺍﻟﺬﻱ ﻛﺘﺐ ﺑﻠﻐﺔ‬Assembly ‫ﻣﻜﺘﻮﺑﺔ ﺑﻠﻐﺔ‬ 
AST ‫ﻭﺗﺘﻢ ﻫﺬﻩ ﺍﻟﻤﺮﺣﻠﺔ ﺑﺎﻟﺘﺠﻮﺍﻝ ﻋﻠﻰ ﺍﻟﺸﺠﺮﺓ‬ 
‫(, ﺑﻌﺪ ﺍﻟﺘﺤﻘﻖ ﺃﻥ ﺍﻟﻜﻮﺩ ﺍﻟﻤﺪﺧﻞ‬python ‫ )ﺍﻟﻤﻤﺜﻠﺔ ﻟﻜﻮﺩ ﺍﻟﺒﺮﺑﺎﻣﺞ ﺍﻟﻤﻜﺘﻮﺏ ﺑﻠﻐﺔ‬ 
(... ‫ﻻ ﻳﺤﻮﻱ ﻋﻠﻰ ﺃﻱ ﺃﺧﻄﺎء )ﻗﻮﺍﻋﺪﻳﺔ, ﺩﻻﻟﻴﺔ‬​    
Main ‫ﻭﻳﻮﺟﺪ ﻓﻴﻪ ﺗﺎﺑﻊ‬​    
‫ ﺍﻟﻤﻌﺘﻤﺪﺓ ﻋﻠﻰ ﺍﻟﻮﺭﺍﺛﺔ ﺑﺘﻄﺒﻴﻖ ﺗﺎﺑﻊ ﺗﻮﻟﻴﺪ ﺍﻟﺮﻣﺎﺯ ﺑﺸﻜﻞ ﺩﻳﻨﺎﻣﻴﻜﻲ‬AST ‫ ﺗﺴﻤﺢ ﺑﻨﻴﺔ ﺍﻟﺸﺠﺮﺓ‬ 
‫ ﺣﺘﻰ ﻳﺘﻢ ﻓﻬﻤﻬﺎ ﻣﻦ‬Assembly ‫  ﻳﺤﻮﻱ ﺗﻌﻠﻴﻤﺎﺕ ﺑﻠﻐﺔ‬s. ‫ﻭﻳﻜﻮﻥ ﺍﻟﺨﺮﺝ ﻣﻠﻒ ﻣﻦ ﺍﻟﻼﺣﻘﺔ‬ 
.(MIPS)‫ﻗﺒﻞ ﺍﻵﻟﺔ ﺍﻻﻓﺘﺮﺍﺿﻴﺔ ﺍﻟﻤﺮﺍﺩ ﺍﻟﺘﻨﻔﻴﺬ ﻋﻠﻴﻬﺎ‬ 
:‫: ﺑﻌﺾ ﺍﻟﺘﺠﺎﺭﺏ ﻭﺍﻷﻣﺜﻠﺔ‬ً‫ﺎ‬‫ﺳﺎﺑﻌ‬  
 
 
15 
 
 
16 
17 
 
18 
 
19 
 
20 
 
21 
 
:‫ﺍﻟﺨﺎﺗﻤﺔ‬ 
،‫ﺭﺃﻳﻨﺎ ﻓﻲ ﻫﺬﺍ ﺍﻟﻤﺸﺮﻭﻉ ﻛﻴﻔﻴﺔ ﺑﻨﺎء ﻣﺘﺮﺟﻢ ﻟﻠﻐﺔ ﺑﺮﻣﺠﺔ ﺗﻌﺘﻤﺪ ﻣﺒﺎﺩﺉ ﺍﻟﺒﺮﻣﺠﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ‬ 
‫ﻭﻓﻖ ﺗﺴﻠﺴﻞ ﻣﺮﺍﺣﻞ ﺍﻟﺘﺤﻠﻴﻞ ﺍﻟﻤﻔﺮﺩﺍﺗﻲ ﺛﻢ ﺍﻟﻘﺎﻋﺪﻱ ﻓﺎﻟﺪﻻﻟﻲ ﺇﻟﻰ ﺃﻥ ﻧﺼﻞ ﺇﻟﻰ ﻣﺮﺣﻠﺔ ﺗﻮﻟﻴﺪ‬ 
.‫ﺍﻟﺮﻣﺎﺯ ﺍﻟﻤﻜﺎﻓﺊ ﻟﻠﺪﺧﻞ‬ 
‫ﺃﺗﺎﺡ ﻟﻨﺎ ﻫﺬﺍ ﺍﻟﻤﺸﺮﻭﻉ ﻓﺮﺻﺔ ﺍﻟﺘﻌﺎﻣﻞ ﺑﻌﻤﻖ ﻣﻊ ﻟﻐﺔ ﺑﺮﻣﺠﺔ ﻏﺮﺿﻴﺔ ﺍﻟﺘﻮﺟﻪ ﻭﻓﻬﻢ ﺁﻟﻴﺔ ﻋﻤﻠﻬﺎ‬ 
.‫ﻭﺗﻔﺎﺻﻴﻠﻬﺎ‬ 
‫ﻭﻣﻦ ﺃﻫﻢ ﻣﺎ ﺗﻌﻠﻤﻨﺎﻩ ﺧﻼﻝ ﻫﺬﺍ ﺍﻟﻤﺸﺮﻭﻉ ﻫﻮ ﺃﻥ ﺑﻨﺎء ﺍﻟﻤﺸﺎﺭﻳﻊ ﺍﻟﻜﺒﻴﺮﺓ ﻳﺘﻄﻠﺐ ﻣﻨﺎ ﺑﻨﺎء ﻛﻞ‬ 
‫ﻣﺮﺣﻠﺔ ﻣﻨﻪ ﺑﻄﺮﻳﻘﺔ ﺻﺤﻴﺤﺔ ﻣﻤﺎ ﻳﺰﻳﺪ ﻣﻦ ﺍﺳﺘﻘﺮﺍﺭ ﺍﻟﻨﻈﺎﻡ ﻭﻳﺴﻬﻞ ﺍﻻﻧﺘﻘﺎﻝ ﻣﻦ ﻣﺮﺣﻠﺔ ﺇﻟﻰ‬ 
.‫ﺃﺧﺮﻯ ﺑﻄﺮﻳﻘﺔ ﺗﺤﺎﻓﻆ ﻋﻠﻰ ﺗﻤﺎﺳﻚ ﻫﺬﺍ ﺍﻟﻨﻈﺎﻡ‬ 
22 

More Related Content

Featured

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationErica Santiago
 

Featured (20)

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 

python compiler project