Académique Documents
Professionnel Documents
Culture Documents
*(+,'+, () ,83B %((W 3B b D$/2T7+0/d *(1/+(6'/" 7&& /3<8, /'B'/>'0" #83B ':((W
2(Q6 3B )(/ $ B3+<&' 1B'/" L(1 5$6 +(, B8$/' 3, 3+ $+6 ?$6 1+&'BB 6(1 8$>' ?/3,,'+
Q'/53BB3(+ () ,8' $1,8(/"
INTRODUCTION
;8'+ 6(1 0(+], 2/'$,' ,83+<BZ 6(1 %'2(5' 0')3+'0 %6 6(1/ ,$B,'B /$,8'/ ,8$+
$%3&3,6" L(1/ ,$B,'B (+&6 +$//(? ^ 'G2&10' Q'(Q&'" 4( 2/'$,'"
43+2' ?' $/'+], ,8' )3/B, (+'B ,( 2/'$,' $ Q/(</$553+< &$+<1$<'Z B(5' ?'&&
'B,$%&3B8'0 ,((&B $/' $/(1+0 ,( '$B' 5(B, () ,8' 'G'/23B'" N'>'/,8'&'BBZ 3, 2$+ B,3&&
%' 8$/0 ,( 2/'$,' $ )1&&6 )1+2,3(+$& &$+<1$<' %'2$1B' 3,]B 35Q(BB3%&' ,( Q/'032, $&&
,8' ?$6B 3+ ?8328 B(5'(+' ?3&& 1B' 3," #8$,]B ?86 5$W3+< 6(1/ (?+ &$+<1$<' 3B
B128 $ </'$, 'GQ'/3'+2'" L(1 +'>'/ W+(? ?8$, B(5'(+' '&B' 53<8, 2/'$,' ?3,8 3,_
.]>' ?/3,,'+ ,83B %((W ,( 8'&Q (,8'/ 0'>'&(Q'/B 03B2(>'/ ,8' c(6 () 2/'$,3+< $
Q/(</$553+< &$+<1$<'" *(03+< 56 )3/B, &$+<1$<' ?$B (+' () ,8' 5(B, $5$f3+<
'GQ'/3'+2'B 3+ 56 Q/(</$553+< 2$/''/" . 8(Q' 6(1]&& '+c(6 /'$03+< ,83B %((WZ %1,
5(B,&6Z . 8(Q' 6(1]&& ?/3,' 6(1/ (?+ Q/(</$553+< &$+<1$<'"
.) 6(1 )3+0 $+ '//(/ (/ 8$>' $ 2(55'+, (/ B1<<'B,3(+ ?83&' /'$03+< ,8' )(&&(?3+<
Q$<'BZ Q&'$B' B'+0 5' $+ '5$3& $, 5$2(1/+(6'/g<5$3&"2(5"
SUMMARY
#83B %((W 3B 03>30'0 3+,( B3G B'2,3(+B ,8$, ?3&& ?$&W 6(1 ,8/(1<8 '$28 B,'Q ()
&$+<1$<'T%13&03+<" O$28 B'2,3(+ ?3&& 3+,/(012' $ +'? 2(+2'Q, $+0 ,8'+ $QQ&6 3,B
Q/3+23Q&'B ,( $ &$+<1$<' ,8$, ?']&& %13&0 ,(<',8'/ ,8/(1<8(1, ,8' %((W" 7&& ,'28+32$&
28$Q,'/B '+0 ?3,8 $ ./ 0% 1/(23&4- B'2,3(+ ,8$, B1<<'B, B(5' &$+<1$<'T'G,'+03+<
'G'/23B'B" L(1]&& )3+0 B(&1,3(+B ,( ,8(B' $, ,8' '+0 () ,83B %((W"
=1/ &$+<1$<' ?3&& %' 06+$532 $+0 >'/6 B353&$/ ,( J1%6 $+0 A6,8(+" 7&& () ,8' 2(0'
?3&& %' 3+ J1%6Z %1, .]>' Q1, &(,B () $,,'+,3(+ ,( W''Q ,8' 2(0' $B B35Q&' $B Q(BB3%&'
B( ,8$, 6(1 2$+ 1+0'/B,$+0 ?8$,]B 8$QQ'+3+< '>'+ 3) 6(1 0(+], W+(? J1%6"
#8' )(21B () ,83B %((W 3B +(, (+ 8(? ,( %13&0 $ Q/(012,3(+T/'$06 &$+<1$<'" .+B,'$0Z
3, B8(1&0 B'/>' $B $+ 3+,/(012,3(+ 3+ %13&03+< 6(1/ )3/B, ,(6 &$+<1$<'"
. 2(0'0 ,3+6/%Z ,8' B5$&&'B, J1%6 U3/,1$& D$283+'Z D3+Z $ ,(6 &$+<1$<' /1++3+< (+
,8' aUDZ #83+Z ,8' 83<8 Q'/)(/5$+2' J1%6 ?'% B'/>'/Z $+0 $ %1+28 () (,8'/ B,1))"
L(1 2$+ )3+0 5(B, () 56 Q/(c'2,B (+ P3,[1%"
L(1 2$+ )3+0 5' (+&3+'Z %&(<<3+< (/ ,?'',3+< $+0 ())&3+'Z B+(?%($/03+< $+0
&'$/+3+< <13,$/"
BEFORE WE BEGIN
7&(+< ?3,8 ,83B %((WZ 6(1 B8(1&0 8$>' /'2'3>'0 $ !"#$ 03/'2,(/6 3+2&103+< $&& ,8'
2(0' B$5Q&'B B8(?+ 3+ ,83B %((W" #( /1+ ,8' 'G$5Q&'B 6(1 51B, 8$>' ,8'
)(&&(?3+< 3+B,$&&'0E
43+2' ,8' '$/&6 0$6B () 2(5Q1,3+<Z ,8' ?$6 ?' 0'B3<+ $ &$+<1$<' 8$B '>(&>'0Z %1,
5(B, () ,8' 2(/' Q/3+23Q&'B 8$>'+], 28$+<'0" C$+<1$<'B $/' B,3&& %13&, )/(5 $ &'G'/Z
$ Q$/B'/ $+0 $ 2(5Q3&'/" 4(5' () ,8' %'B, %((WB 3+ ,83B BQ8'/' 8$>' %''+ ?/3,,'+ $
&(+< ,35' $<(E A/3+23Q&'B () *(5Q3&'/ K'B3<+ ?$B Q1%&3B8'0 3+ !XSS $+0
45$&&,$&WTVYE #8' C$+<1$<' $+0 3,B .5Q&'5'+,$,3(+ 3+ !XV9"
D(B, 06+$532 &$+<1$<'B $/' 0'B3<+'0 3+ )(1/ Q$/,B ,8$, ?(/W 3+ B'i1'+2'E ,8'
&'G'/Z ,8' Q$/B'/Z ,8' 3+,'/Q/','/ $+0 ,8' /1+,35'" O$28 (+' ,/$+B)(/5B ,8' 3+Q1, ()
3,B Q/'0'2'BB(/ 1+,3& ,8' 2(0' 3B /1+" @3<1/' ! B8(?B $+ (>'/>3'? () ,83B Q/(2'BB" 7
28$Q,'/ () ,83B %((W 3B 0'032$,'0 ,( '$28 Q$/,"
!"#$%& '
#8' &$+<1$<' ?']&& %' 2(03+< 3+ ,83B %((W 3B 2$&&'0 7?'B(5'Z %'2$1B' 3, 3B_
! "#$%% &'(%)*(+
, -(. /$*(+
0 123* &'(%)*(1
4
5 -(. $'(%)*(/(%%+
6 !77
8
9 $'(%)*( : &'(%)*(;/('
< =>?/@A$'(%)*(;/$*(B
!7 =>?/@A$'(%)*(;$'(%)*(/(%%B
C',B <', B,$/,'0 ?3,8 ,8' )3/B, Q$/, () (1/ &$+<1$<'Z ,8' &'G'/"
LEXER
#8' &'G'/Z (/ B2$++'/Z (/ ,(W'+3f'/ 3B ,8' Q$/, () $ &$+<1$<' ,8$, 2(+>'/,B ,8' 3+Q1,Z
,8' 2(0' 6(1 ?$+, ,( 'G'21,'Z 3+,( ,(W'+B ,8' Q$/B'/ 2$+ 1+0'/B,$+0" .) 6(1 ,83+W ()
6(1/ Q/(</$5 $B $ B'/3'B () B'+,'+2'BZ ,(W'+B ?(1&0 %' ,8' ?(/0B 3+ ,8(B'
B'+,'+2'B" #8' c(% () ,8' &'G'/ 3B ,( 'G,/$2, ,8(B' ?(/0B H,(W'+BI $+0 ,$< ,8'5 ?3,8
$ ,6Q' H3B 3, $ B,/3+<Z +15%'/Z (Q'/$,(/\I"
! =>?/@A
, 12 $@(1C
0 0C
4 =?(%
5 B
=+2' ,83B 2(0' <('B ,8/(1<8 ,8' &'G'/Z 3, ?3&& &((W B(5',83+< &3W' ,83BE
;8$, ,8' &'G'/ 0('B 3B BQ&3, ,8' 2(0' 3+,( $,(532 1+3,B H,(W'+BI $+0 ,$< '$28 (+'
?3,8 ,8' ,6Q' () ,(W'+ 3, 2(+,$3+B" #83B c(% 2$+ %' 0(+' %6 B(5' Q$/B'/BZ $B ?']&&
B'' 3+ ,8' +'G, 28$Q,'/Z %1, B'Q$/$,3+< 3, 3+,( ,?( 03B,3+2, Q/(2'BB'B 5$W'B 3,
B35Q&'/ )(/ 1B 0'>'&(Q'/B $+0 '$B3'/ ,( 1+0'/B,$+0"
C'G'/B 2$+ %' 35Q&'5'+,'0 1B3+< /'<1&$/ 'GQ/'BB3(+BZ %1, 5(/' $QQ/(Q/3$,' ,((&B
'G3B,"
O$28 () ,8'B' ,((&B ,$W' $ </$55$/ ,8$, ?3&& %' 2(5Q3&'0 3+,( ,8' $2,1$& &'G'/" #8'
)(/5$, () ,8'B' </$55$/B $/' $&& $&3W'" J'<1&$/ 'GQ/'BB3(+B (+ ,8' &'), 8$+0 B30' $/'
/'Q'$,'0&6 5$,28'0Z 3+ (/0'/Z $<$3+B, ,8' +'G, Q(/,3(+ () ,8' 3+Q1, 2(0' B,/3+<"
;8'+ $ 5$,28 3B )(1+0Z ,8' $2,3(+ (+ ,8' /3<8, 3B ,$W'+"
LEX (FLEX)
@&'G 3B $ 5(0'/+ >'/B3(+ () C'G H,8$, ?$B 2(0'0 %6 O/32 428530,Z OGT*O= ()
P((<&'Z %6 ,8' ?$6I )(/ <'+'/$,3+< * &'G'/B" 7&(+< ?3,8 L$22Z C'G 3B ,8' 5(B,
2(55(+&6 1B'0 &'G'/ )(/ Q$/B3+<"
C'G $+0 )/3'+0B $/' +(, &'G'/B Q'/ B'" #8'6 $/' &'G'/ 2(5Q3&'/B" L(1 B1QQ&6 3, $
</$55$/ $+0 3, ?3&& (1,Q1, $ &'G'/" ['/']B ?8$, ,8$, </$55$/ &((WB &3W'E
! QQ
, RR ST?@(%=$"(
0 D U@U/KV RW ?X/)>( WR
4
5 RR Y?@(>$#%
6 D7Z<KV [[#\$# : $@)?A[[@(]@B^ >(@_>/ H`GNOPFJ^
8
9 RR a([')>-%
< 1(/-1 [[#\$# : [[@(]@^ >(@_>/ H`FGE^
!7 RR ;;;
=+ ,8' &'), B30' $ /'<1&$/ 'GQ/'BB3(+ 0')3+'B 8(? ,8' ,(W'+ 3B 5$,28'0" =+ ,8'
/3<8, B30'Z ,8' $2,3(+ ,( ,$W'" #8' >$&1' () ,8' ,(W'+ 3B B,(/'0 3+ 99,/+, $+0 ,8'
,6Q' () ,(W'+ 3B /',1/+'0" #8' 99 Q/')3G 3+ ,8' >$/3$%&' +$5'B 3B $+ 8'/3,$<' )/(5
L$22Z $ Q$/B'/ 2(5Q3&'/ ?8328 ?']&& ,$&W $%(1, 3+ ,8' +'G, 28$Q,'/"
D(/' 0',$3&B 3+ ,8' @&'G 5$+1$&"
7 J1%6 'i13>$&'+,Z 1B3+< ,8' /'G32$& <'5 H$ Q(/, () C'G ,( J1%6IZ ?(1&0 %'E
! >_#(
, b ST?@(%=$"(
0 DU U@KV b ?X/)>(
4
5 b Y?@(>$#%
6 D7Z<KV c D+GNOPFJC @(]@;@)`?K d
8
9 b a([')>-%
< (/- c D+FGEC @(]@K d
J'G32$& )(&&(?B $ B353&$/ </$55$/ $B C'G" J'<1&$/ 'GQ/'BB3(+ (+ ,8' &'), $+0 $2,3(+
(+ ,8' /3<8," [(?'>'/Z $+ $//$6 () ,?( 3,'5B 3B 1B'0 ,( /',1/+ ,8' ,6Q' $+0 >$&1' ()
,8' 5$,28'0 ,(W'+"
RAGEL
7 Q(?'/)1& ,((& )(/ 2/'$,3+< $ B2$++'/ 3B J$<'&" ., 3B >'/6 )&'G3%&'Z $+0 2$+ 8$+0&'
</$55$/B () >$/63+< 2(5Q&'G3,3'B $+0 (1,Q1, &'G'/B 3+ B'>'/$& &$+<1$<'B"
! QQc
, *$"T?/( #(](>^
0
4 b O$"T?/(
5 /_*e(> : D7Z<KV^
6 'T?@(%=$"( : 1 1^
8 f([')>- : 1(/-1 g 1-(.1 g 1"#$%%1 g 1?.1 g 1(#%(1 g 1@>_(1 g 1.$#%(1 g 1/?#1^
9
< b &"@?)/%
!7 *$?/ +: gW
!! 'T?@(%=$"(^ b ?X/)>(
!, /_*e(> :h c @)f(/% ii D+GNOPFJC -$@$D@%;;@(K;@)`?K d^
!0 f([')>- :h c @)f(/% ii D-$@$D@%;;;@(K;_="$%(;@)`%[*C -$@$D@%;;;@(KK d^
!4 Wg^
!5
!6 "#$%% Y(](>
!8 -(. ?/?@?$#?j(
!9 QQ '>?@( -$@$^
!< (/-
,7
,! -(. >_/A-$@$B
,, (). : -$@$;%?j(
,0 #?/( : !
,4 @)f(/% : DK
,5 QQ '>?@( ?/?@^
,6 QQ '>?@( (]("^
,8 @)f(/%
,9 (/-
,< (/-
07 dQQ
['/' $/' $ )'? /'$&T?(/&0 'G$5Q&'B () J$<'& </$55$/B 1B'0 $B &$+<1$<' &'G'/BE
.) 6(1 3+,'+0 ,( %13&0 $ )1&&6T)1+2,3(+3+< &$+<1$<'Z 6(1 B8(1&0 1B' (+' () ,8'
Q/'>3(1B&6 5'+,3(+'0 ,((&B" 43+2' 7?'B(5' 3B $ B35Q&3B,32 &$+<1$<' $+0 ?' ?$+,
,( 3&&1B,/$,' ,8' %$B32 2(+2'Q,B () $ B2$++'/Z ?' ?3&& %13&0 ,8' &'G'/ )/(5 B2/$,28
1B3+< /'<1&$/ 'GQ/'BB3(+B"
#( 5$W' ,83+<B 5(/' 3+,'/'B,3+<Z ?']&& 1B' 3+0'+,$,3(+ ,( 0'&353, %&(2WB 3+ (1/ ,(6
&$+<1$<'Z $B 3+ A6,8(+" 7&& () 3+0'+,$,3(+ 5$<32 ,$W'B Q&$2' ?3,83+ ,8' &'G'/"
A$/B3+< %&(2WB () 2(0' 0'&353,'0 ?3,8 : ; < 3B +( 03))'/'+, )/(5 Q$/B3+<
3+0'+,$,3(+ ?8'+ 6(1 W+(? 8(? ,( 0( 3,"
! ?. @$%@[ :: H>_(+
, =>?/@ 1E(#?"?)_%k1
#8' %&(2W 3B ?/$QQ'0 3+ =>?@>A $+0 ?@?@>A ,(W'+B 3+B,'$0 () : $+0 <"
#8' 3+0'+,$,3(+TQ$/B3+< $&<(/3,85 3B B35Q&'" L(1 +''0 ,( ,/$2W ,?( ,83+<BE ,8'
21//'+, 3+0'+,$,3(+ &'>'& $+0 ,8' B,$2W () 3+0'+,$,3(+ &'>'&B" ;8'+ 6(1 '+2(1+,'/ $
&3+' %/'$W )(&&(?'0 %6 BQ$2'BZ 6(1 1Q0$,' ,8' 3+0'+,$,3(+ &'>'&" ['/']B (1/ &'G'/
)(/ ,8' 7?'B(5' &$+<1$<'E
In file !"#$%&$'$()(*
=1/ &'G'/ ?3&& %' 1B'0 &3W' B(E B$C$-2($D2*"E$('F$7G!"#$G8Z $+0 ?3&& /',1/+
$+ $//$6 () ,(W'+B H$ ,(W'+ %'3+< $ ,1Q&' () HAIJ@>KALM@N AIJ@>KOPBQ@RI"
0 "#$%% Y(](>
@3/B, ?' 0')3+' ,8' BQ'23$& W'6?(/0B () (1/ &$+<1$<' 3+ $ 2(+B,$+," ., ?3&& %' 1B'0
&$,'/ (+ 3+ ,8' ,(W'+3f3+< Q/(2'BB ,( 03B$5%3<1$,' $+ 30'+,3)3'/ H5',8(0 +$5'Z
&(2$& >$/3$%&'Z ',2"I )/(5 $ W'6?(/0"
;' +''0 ,( W+(? 8(? 0''Q ?' $/' 3+ ,8' 3+0'+,$,3(+ B( ?' W''Q ,/$2W () ,8'
21//'+, 3+0'+,$,3(+ &'>'& ?' $/' 3+Z $+0 Q/'>3(1B (+'B 3+ ,8' B,$2W B( ,8$, ?8'+ ?'
0'0'+,Z ?' 2$+ 28'2W 3) ?']/' (+ ,8' 2(//'2, &'>'&"
['/' 3B 8(? ,( 35Q&'5'+, $ >'/6 B35Q&' B2$++'/" 70>$+2' (+' 28$/$2,'/ $, ,8'
,35' 1+,3& 6(1 )3+0 B(5',83+< ,( Q$/B'" ;']&& 1B' /'<1&$/ 'GQ/'BB3(+B ,( B2$+ )/(5
,8' 21//'+, Q(B3,3(+ H'I 1Q ,( ,8' '+0 () ,8' 2(0'"
O$28 () ,8' )(&&(?3+< '5S$,)'5B ?3&& ,'B, ,8' 21//'+, 2(0' 281+W ?3,8 $ /'<1&$/
'GQ/'BB3(+" #8' (/0'/ 3B 35Q(/,$+, $B ?' ?$+, ,( 5$,28 '5 $B $ W'6?(/0Z $+0 +(, $
5',8(0 +$5'Z ?']&& +''0 ,( $QQ&6 3, )3/B,"
@3/B,Z ?']&& B2$+ )(/ +$5'BE 5',8(0 +$5'B $+0 >$/3$%&' +$5'BZ ?8328 ?']&& 2$&&
30'+,3)3'/B" 7&B( B2$++3+< )(/ BQ'23$& /'B'/>'0 W'6?(/0B B128 $B '5Z #$5 $+0 *-T$"
04 ?. ?-(/@?.?(> : "T_/fDRU&AD$ZjKU'WBRC !K
05 ?. aFmSnJEL;?/"#_-(pA?-(/@?.?(>B b f([')>-% '?## X(/(>$@( D+2IC 1?.1K
06 @)f(/% ii D?-(/@?.?(>;_="$%(;@)`%[*C ?-(/@?.?(>K
08 (#%(
09 @)f(/% ii D+2EFGH2I2FJC ?-(/@?.?(>K
0< (/-
47 ? V: ?-(/@?.?(>;%?j( b %f?= 'T$@ '( q_%@ =$>%(-
4!
N(? B2$++3+< )(/ 2(+B,$+,BZ +$5'B B,$/,3+< ?3,8 $ 2$Q3,$& &',,'/" ;8328 5'$+BZ
2&$BB +$5'B $/' 2(+B,$+,B 3+ (1/ &$+<1$<'"
N'G,Z 5$,283+< +15%'/B" =1/ &$+<1$<' ?3&& (+&6 B1QQ(/, 3+,'<'/B" :1, ,( $00
B1QQ(/, )(/ )&($,BZ 6(1]0 B35Q&6 +''0 ,( $00 $ B353&$/ /1&' $+0 $0$Q, ,8' /'<1&$/
'GQ/'BB3(+ $22(/03+<&6"
#83B $,)'5 ,$W'B 2$/' () ,8' )3/B, 2$B'" #8' +15%'/ () BQ$2'B ?3&& 0','/53+' ,8'
3+0'+, &'>'&"
▪ *$B' -E ;' B,$6 3+ ,8' B$5' %&(2W 3) ,8' 3+0'+, &'>'& H+15%'/ () BQ$2'BI 3B
,8' B$5' $B !T--$(*K'(#$(*"
▪ *$B' 9E *&(B' ,8' 21//'+, %&(2WZ 3) 3+0'+, &'>'& 3B &(?'/ ,8$+
!T--$(*K'(#$(*"
C(+< (Q'/$,(/B B128 $B [[Z \\Z 00Z ',2" ?3&& %' 5$,28'0 %6 ,8' )(&&(?3+< %&(2W"
=+' 28$/$2,'/ &(+< (Q'/$,(/B $/' 5$,28'0 %6 ,8' 2$,28 $&& $,)$ $, ,8' %(,,(5"
;']/' 3<+(/3+< BQ$2'B" *(+,/$/6 ,( &3+' %/'$WBZ BQ$2'B $/' 5'$+3+<&'BB 3+ (1/
&$+<1$<'" #8$,]B ?86 ?' 0(+], 2/'$,' ,(W'+B )(/ ,8'5" #8'6 $/' (+&6 1B'0 ,(
B'Q$/$,' (,8'/ ,(W'+B"
@3+$&&6Z 2$,28 $&& B3+<&' 28$/$2,'/BZ 5$3+&6 (Q'/$,(/B" ;' ,/'$, $&& (,8'/ B3+<&'
28$/$2,'/B $B $ ,(W'+" O<"E 7 8 N 2 ] ^ . _"
!!, (#%(
!!0 \$#_( : "T_/fD7C!K
!!4 @)f(/% ii D\$#_(C \$#_(K
!!5 ? V: !
!!6
!!8 (/-
!!9
!!< (/-
!,7
*&(B' $&& (Q'+ %&(2WB" .) ,8' 2(0' '+0B ?3,8(1, 0'0'+,3+<Z ,83B ?3&& ,$W' 2$/' ()
%$&$+23+< ,8' =>?@>Aj?@?@>AB"
!,8 @)f(/%
!,9 (/-
!,< (/-
L(1 2$+ ,'B, ,8' &'G'/ 6(1/B'&) %6 /1++3+< ,8' ,'B, )3&' 3+2&10'0 ?3,8 ,8' %((W" J1+
-TX9 .=*$)* *$)*S,$C$-K*$)*2-X )/(5 ,8' !"#$ 03/'2,(/6 $+0 3, B8(1&0
(1,Q1, ` 5+',T-$)N ` $--"-)" ['/']B $+ 'G2'/Q, )/(5 ,8$, ,'B, )3&'"
In file !"#$%+$,+%&$'$(-+$,+)(*
! ")-( : iiZonEF
, ?. !+
0 ?. ,+
4 =>?/@A1;;;1B
5 ?. .$#%(+
6 =$%%
8 =>?/@A1-)/(k1B
9 ,
<
4(5' Q$/B'/B ,$W' 2$/' () %(,8 &'G3+< $+0 Q$/B3+< 3+ ,8'3/ </$55$/" ;']&& B'' 5(/'
$%(1, ,8(B' 3+ ,8' +'G, B'2,3(+"
DO IT YOURSELF I
%" D(03)6 ,8' &'G'/ ,( 0'&353, %&(2WB ?3,8 : ; < 3+B,'$0 () 3+0'+,$,3(+"
:6 ,8'5B'&>'BZ ,8' ,(W'+B (1,Q1,'0 %6 ,8' &'G'/ $/' c1B, %13&03+< %&(2WB" #8' Q$/B'/
2(+,'G,1$&3f'B ,8'5 %6 (/<$+3f3+< ,8'5 3+ $ ,/'' B,/12,1/'" #8' &'G'/ Q/(012'B $+
$//$6 () ,(W'+Bk ,8' Q$/B'/ Q/(012'B $ ,/'' () +(0'B" #83B ,/'' () +(0'B ?3&& %' 8(?
,8' &$+<1$<' /'Q/'B'+,B (1/ Q/(</$5 3+ 5'5(/6" ., ?3&& ?$&W $2/(BB 3, ,( /1+ ,8'
Q/(</$5Z B,(/' B(5' Q$/,B () 3, 3+ 5',8(0BZ B(5' (,8'/ Q$/,B 3+ 2&$BB'B"
#8' 5(B, 2(55(+ Q$/B'/ (1,Q1, 3B $+ 7%B,/$2, 46+,$G #/''Z (/ 74#" .,]B $ ,/'' ()
+(0'B ,8$, /'Q/'B'+,B ?8$, ,8' 2(0' 5'$+B ,( ,8' &$+<1$<'" #8' Q/'>3(1B &'G'/
,(W'+B ?3&& Q/(012' ,8' )(&&(?3+<E
! Dio$## /$*(:=>?/@C
, $>X_*(/@%:DiL@>?/X \$#_(:12 $@(1hC
0 iG_*e(> \$#_(:0hC
4 iY)"$# /$*(:=?(%hK
5 hK
=/ $B $ >3B1$& ,/''E
!"#$%& (
#8' Q$/B'/ )(1+0 ,8$, 6-'(* ?$B $ 5',8(0 2$&& $+0 ,8' )(&&(?3+< ,(W'+B $/' ,8'
$/<15'+,B"
A$/B'/ <'+'/$,(/B $/' 2(55(+&6 1B'0 ,( $22(5Q&3B8 ,8' (,8'/?3B' ,'03(1B ,$BW ()
%13&03+< $ Q$/B'/" 7 Q/(</$553+< &$+<1$<' +''0B $ </$55$/ ,( 0')3+' 3,B /1&'B"
#8' Q$/B'/ <'+'/$,(/ ?3&& 2(+>'/, ,83B </$55$/ 3+,( $ Q$/B'/ ,8$, ?3&& 2(5Q3&' &'G'/
,(W'+B 3+,( 74# +(0'B"
A$/B'/]B </$55$/B $/' B353&$/ ,( C'G'/]B" =+ ,8' &'), 6(1 8$>' ,83+<B ,( 5$,28 $+0
(+ ,8' /3<8, ,8' $2,3(+ ,( ,$W'" :1, ?83&' ,8' &'G'/ 5$,28'B $<$3+B, $ B'i1'+2' ()
28$/$2,'/BZ ,8' Q$/B'/ ?3&& 5$,28 Q$/,321&$/ Q$,,'/+B () ,(W'+B"
BISON (YACC)
:3B(+ 3B $ 5(0'/+ >'/B3(+ () L$22Z ,8' 5(B, ?30'&6 1B'0 Q$/B'/" L$22 B,$+0B )(/ L',
7+(,8'/ *(5Q3&'/ *(5Q3&'/Z %'2$1B' 3, 2(5Q3&'B ,8' </$55$/ ,( $ 2(5Q3&'/ ()
,(W'+B" .,]B 1B'0 3+ B'>'/$& 5$3+B,/'$5 &$+<1$<'BZ &3W' J1%6" D(B, (),'+ 1B'0 ?3,8
C'GZ 3, 8$B %''+ Q(/,'0 ,( B'>'/$& ,$/<', &$+<1$<'B"
=+ ,8' &'), 3B 0')3+'0 8(? ,8' /1&' 2$+ %' 5$,28'0 1B3+< ,(W'+ ,6Q'B $+0 (,8'/
/1&'B" =+ ,8' /3<8, B30'Z %',?''+ %/$2W',B 3B ,8' $2,3(+ ,( 'G'21,' ?8'+ ,8' /1&'
5$,28'B" .+ ,8$, %&(2WZ ?' 2$+ /')'/'+2' ,(W'+ >$&1'B %'3+< 5$,28'0 1B3+< a1Z aYZ
',2" @3+$&&6Z ?' B,(/' ,8' /'B1&, 3+ aa"
LEMON
D$3+&6 3,]B $ B5$&&'/Z )$B,'/ $+0 5(/' 5(0'/+ >'/B3(+ () L$22 ,8$, ?$B 0'>'&(Q'0
$B Q$/, () ,8' 4i&3,' 0$,$%$B' '+<3+'"
@(/ 5(/' 3+)(/5$,3(+Z /')'/ ,( ,8' ,8' 5$+1$& (/ 28'2W /'$& 'G$5Q&'B 3+B30' A(,3(+"
ANTLR
7N#CJ 3B $+(,8'/ Q$/B3+< ,((&" #83B (+' &',]B 6(1 0'2&$/' &'G3+< $+0 Q$/B3+< /1&'B
3+ ,8' B$5' </$55$/" ., 8$B %''+ Q(/,'0 ,( B'>'/$& ,$/<', &$+<1$<'B"
., $&B( ())'/B Q(?'/)1& (Q,353f$,3(+ ,'28+3i1'B %6 $&&(?3+< ,( '$B3&6 /'?/3,' ,8'
74# 1B3+< $ </$55$/"
#8' a$>$ &$+<1$<' %1+0&'0 ?3,8 ,83B %((W 1B'B 7N#CJ )(/ <'+'/$,3+< 3,]B Q$/B'/"
PEGS
#/'',(Q 3B $+ 3+,'/'B,3+< J1%6 ,((& )(/ 2/'$,3+< AOP" AOP"cB 3B $&B( /'2'+, $003,3(+
3+ ,8' ?(/&0 () AOPBZ ,83B ,35' )(/ a$>$B2/3Q,"
OPERATOR PRECEDENCE
['/']B ,8' (Q'/$,(/ Q/'2'0'+2' ,$%&' )(/ (1/ &$+<1$<'Z %$B'0 (+ ,8' * &$+<1$<'
(Q'/$,(/ Q/'2'0'+2'E
! #(.@ 3;3
, >?XT@ 3k3
0 #(.@ 3W3 3R3
4 #(.@ 3V3 3Z3
5 #(.@ 3h3 3h:3 3i3 3i:3
6 #(.@ 3::3 3k:3
8 #(.@ 3uu3
9 #(.@ 3gg3
< >?XT@ 3:3
!7 #(.@ 3C3
#8' 83<8'/ ,8' Q/'2'0'+2' H,(Q 3B 83<8'/IZ ,8' B((+'/ ,8' (Q'/$,(/ ?3&& %' Q$/B'0" .)
,8' &3+' + ^ X b ! 3B %'3+< Q$/B'0Z ,8' Q$/, X b ! ?3&& %' Q$/B'0 )3/B, B3+2' b
8$B 83<8'/ Q/'2'0'+2' ,8$+ ^" N(?Z 3) B'>'/$& (Q'/$,(/B 8$>3+< ,8' B$5'
Q/'2'0'+2' $/' 2(5Q',3+< ,( %' Q$/B'0 $&& ,8' (+2'Z ,8' 2(+)&32, 3B /'B(&>'0 1B3+<
$BB(23$,3>3,6Z 0'2&$/'0 ?3,8 ,8' ,$5* $+0 -'%W* W'6?(/0 %')(/' ,8' ,(W'+" @(/
'G$5Q&'Z ?3,8 ,8' 'GQ/'BB3(+ + 0 X 0 !" 43+2' 0 8$B /3<8,T,(T&'), $BB(23$,3>3,6Z 3,
?3&& B,$/, Q$/B3+< )/(5 ,8' /3<8,Z X 0 !" J'B1&,3+< 3+ + 0 7X 0 !8"
@(/ (,8'/ ,6Q'B () Q$/B'/B H7N#CJ $+0 AOPI $ B35Q&'/ %1, &'BB '))323'+, $&,'/+$,3>'
2$+ %' 1B'0" 435Q&6 0'2&$/3+< ,8' </$55$/ /1&'B 3+ ,8' /3<8, (/0'/ ?3&& Q/(012' ,8'
0'B3/'0 /'B1&,E
! (]=>(%%?)/+ (v_$#?@[
, (v_$#?@[+ $--?@?\( A A 3::3 g 3k:3 B $--?@?\( BW
0 $--?@?\(+ *_#@?=#?"$@?\( A A 3V3 g 3Z3 B *_#@?=#?"$@?\( BW
4 *_#@?=#?"$@?\(+ =>?*$>[ A A 3W3 g 3R3 B =>?*$>[ BW
5 =>?*$>[+ 3A3 (]=>(%%?)/ 3B3 g GNOPFJ g x&J2&PYF g 3Z3 =>?*$>[
#8' Q$/B'/ ?3&& ,/6 ,( 5$,28 /1&'B /'21/B3>'&6Z B,$/,3+< )/(5 $C6-$))'"( $+0
)3+03+< 3,B ?$6 ,( 6-'&+-9" 43+2' &T,*'6,'!+*'/$ 3B ,8' &$B, /1&' 2$&&'0 3+ ,8'
Q$/B3+< Q/(2'BBZ 3, ?3&& 8$>' </'$,'/ Q/'2'0'+2'"
@(/ (1/ 7?'B(5' Q$/B'/ ?']&& 1B' J$22Z ,8' J1%6 >'/B3(+ () L$22" .,]B 5128 8$/0'/
,( %13&0 $ Q$/B'/ )/(5 B2/$,28 ,8$+ 3, 3B ,( 2/'$,' $ &'G'/" [(?'>'/Z B(5' &$+<1$<'B
'+0 1Q ?/3,3+< ,8'3/ (?+ Q$/B'/ %'2$1B' ,8' /'B1&, 3B )$B,'/ $+0 Q/(>30'B %',,'/ '//(/
/'Q(/,3+<"
)*& +,-&.
@3/B,Z ?' +''0 ,( 0')3+' $&& ,6Q'B () +(0' (1/ Q$/B'/ ?3&& Q/(012'"
In file !"#$%."#$,)(*
#8' )3/B, ,6Q' 3B /'BQ(+B3%&' )(/ 8(&03+< $ 2(&&'2,3(+ () +(0'BZ '$28 (+'
/'Q/'B'+,3+< $+ 'GQ/'BB3(+" L(1 2$+ ,83+W () 3, $B ,8' 3+,'/+$& /'Q/'B'+,$,3(+ () $
%&(2W () 2(0'"
['/' ?' 0')3+' +(0'B $B J1%6 2&$BB'B ,8$, 3+8'/3, )/(5 $ d*-T!*" #83B 3B $ B35Q&'
?$6Z 3+ J1%6Z ,( 2/'$,' $ 2&$BB ,8$, 8(&0B B(5' $,,/3%1,'B H>$&1'BI" ., 3B $&5(B,
'i13>$&'+, ,(E
!,+)) >"#$)
#$5 '('*'+,'F$7("#$)8
e("#$) 0 ("#$)
$(#
#$5 ("#$)
e("#$)
$(#
$(#
:1, J1%6]B d*-T!* ,$W'B 2$/' () (>'//303+< ,8' 00 (Q'/$,(/ )(/ 1B $+0 $ %1+28 ()
(,8'/ ,83+<B ,8$, ?3&& 5$W' ,'B,3+< '$B3'/"
C3,'/$&B $/' B,$,32 >$&1'B ,8$, 8$>' $ J1%6 /'Q/'B'+,$,3(+" @(/ 'G$5Q&'Z $ B,/3+<Z $
+15%'/Z *-T$Z 5+,)$Z (',Z ',2" ;' 0')3+' $ +(0' )(/ '$28 (+' () ,8(B' $+0 B,(/'
,8'3/ J1%6 /'Q/'B'+,$,3(+ 3+B30' ,8'3/ /+,T$ $,,/3%1,'"
#8' +(0' )(/ $ 5',8(0 2$&& 8(&0B ,8' -$!$'/$-Z ,8' (%c'2, (+ ?8328 ,8' 5',8(0
3B 2$&&'0Z ,8' &$*W"# +$5' $+0 3,B $/<15'+,BZ ?8328 $/' (,8'/ +(0'B"
7+0 B',,3+< 3,B >$&1' 3B 0(+' %6 ,83B (+'" #8' /+,T$ ?3&& %' $ +(0'" .) ?']/' B,(/3+<
$ +15%'/ 3+B30' $ 2(+B,$+,Z )(/ 'G$5Q&'Z /+,T$ ?(1&0 2(+,$3+ $+ 3+B,$+2' ()
>T&X$->"#$"
4353&$/ ,( ,8' Q/'>3(1B +(0'BZ ,8' +'G, (+'B $/' )(/ 0'$&3+< ?3,8 &(2$& >$/3$%&'B"
O$28 5',8(0 0')3+3,3(+ ?3&& %' B,(/'0 3+,( ,8' )(&&(?3+< +(0'" ., 8(&0B ,8' (+&$ ()
,8' 5',8(0Z ,8' +$5' () 3,B Q$/$5','/B H6+-+&)I $+0 ,8' X"#9 ,( '>$&1$,' ?8'+
,8' 5',8(0 3B 2$&&'0Z ?8328 3B $ ,/'' () +(0'Z ,8' /((, (+' %'3+< $ >"#$) 3+B,$+2'"
*&$BB 0')3+3,3(+B $/' B,(/'0 3+,( ,8' )(&&(?3+< +(0'" =+2' $<$3+Z ,8' (+&$ () ,8'
2&$BB $+0 3,B X"#9Z $ ,/'' () +(0'B"
'5 2(+,/(& B,/12,1/'B $/' B,(/'0 3+ $ +(0' () ,8'3/ (?+" #8' !"(#'*'"( $+0 X"#9
?3&& $&B( %' +(0'B ,8$, +''0 ,( %' '>$&1$,'0 $, B(5' Q(3+," C((W $, ,83B +(0' 3) 6(1
?$+, ,( 35Q&'5'+, (,8'/ 2(+,/(& B,/12,1/'B &3W' DW',$Z 5"-Z ,""6Z ',2"
99 "#$%% 2.G)-( i L@>_"@;/('A+")/-?@?)/C +e)-[B^ (/-
=+2' ?' 8$>' (1/ +(0'B B',1QZ ?']/' /'$06 ,( 0')3+' ,8' /1&'B )(/ Q$/B3+< (1/
&$+<1$<'"
)*& /%0110%
7B 5'+,3(+ '$/&3'/ 3+ ,83B 28$Q,'/Z Q$/B3+< /1&'B $/' 0')3+'0 3+B30' $ </$55$/"
In file !"#$%/(0110()2
! "#$%% y$>%(>
;' +''0 ,( ,'&& ,8' Q$/B'/ ?8$, ,(W'+B ,( 'GQ'2," 4( '$28 ,6Q' () ,(W'+ Q/(012'0
%6 (1/ &'G'/ +''0B ,( %' 0'2&$/'0 8'/'"
5 @)f(/ 2I
6 @)f(/ EFI
8 @)f(/ oY&LL
9 @)f(/ GFSY2GF
< @)f(/ GNOPFJ
!7 @)f(/ LHJ2GM
!! @)f(/ HJNF I&YLF G2Y
!, @)f(/ 2EFGH2I2FJ
!0 @)f(/ onGLH&GH
!4 @)f(/ 2GEFGH EFEFGH
['/' 3B ,8' =Q'/$,(/ A/'2'0'+2' #$%&'" 7B Q/'B'+,'0 %')(/'Z 3, ,'&&B ,8' Q$/B'/ 3+
?8328 (/0'/ ,( Q$/B' 'GQ/'BB3(+B 2(+,$3+3+< (Q'/$,(/B" #83B ,$%&' 3B %$B'0 (+ ,8' *
$+0 *nn =Q'/$,(/ A/'2'0'+2' #$%&'"
!< =>("T?XT
,7 #(.@ 3;3
,! >?XT@ 3k3
,, #(.@ 3W3 3R3
,0 #(.@ 3V3 3Z3
,4 #(.@ 3h3 3h:3 3i3 3i:3
,5 #(.@ 3::3 3k:3
,6 #(.@ 3uu3
,8 #(.@ 3gg3
,9 >?XT@ 3:3
,< #(.@ 3C3
07 =>("#)'
.+ ,8' )(&&(?3+< -T,$ B'2,3(+Z ?' 0')3+' ,8' Q$/B3+< /1&'B" 7&& /1&'B $/' 0'2&$/'0
1B3+< ,8' )(&&(?3+< )(/5$,E
gT,$>+&$U
I*W$-gT,$ AIJ@> P("*W$-gT,$ : -$)T,* 0 >"#$2($D <
[ I*W$-gT,$ : 222 <
h
.+ ,8' $2,3(+ B'2,3(+ H3+B30' ,8' :222< (+ ,8' /3<8,IZ 6(1 2$+ 0( ,8' )(&&(?3+<E
▪ 7BB3<+ ,( -$)T,* ,8' >$&1' /',1/+'0 %6 ,8' /1&'Z 1B1$&&6 $ +(0' )(/ ,8' 74#"
▪ lB' /+,H'(#$C "5 $C6-$))'"(R ,( <', ,8' -$)T,* () $ 5$,28'0
'GQ/'BB3(+B (+ ,8' &'),"
45 >_#(
@3/B,Z Q$/B'/B $/' 015%Z ?' +''0 ,( 'GQ&323,&6 ,'&& 3, 8(? ,( 8$+0&' '5Q,6 Q/(</$5B"
#83B 3B ?8$, ,8' )3/B, /1&' 0('B" N(,' ,8$, '>'/6,83+< %',?''+ Sb 222 bS 3B $
2(55'+,"
4< y>)X>$*+
57 RW /)@T?/X WR c >(%_#@ : G)-(%;/('ADKB d
5! g F]=>(%%?)/% c >(%_#@ : \$#D7K d
5, ^
50
N'G,Z ?' 0')3+' ?8$, $ &3B, () 'GQ/'BB3(+B 3B" 435Q&6 Q1,Z 3,]B B'/3'B () 'GQ/'BB3(+B
B'Q$/$,'0 %6 $ ,'/53+$,(/ H$ +'? &3+' (/ h $B 0')3+'0 &$,'/I" :1, (+2' $<$3+Z ?'
+''0 ,( 'GQ&323,&6 0')3+' 8(? ,( 8$+0&' ,/$3&3+< $+0 (/Q8$+B &3+' %/'$WB H,8' &$B,
,?( &3+'BI"
=+' >'/6 Q(?'/)1& ,/32W ?']&& 1B' ,( 0')3+' >$/3$%&' /1&'B &3W' ,83B (+' H/1&'B ?8328
2$+ 5$,28 $+6 +15%'/ () ,(W'+BI 3B 4&-%!2&)(23,/5" ;8328 5'$+B ?' /')'/'+2' ,8'
/1&' 3,B'&)Z 03/'2,&6 (/ 3+03/'2,&6Z (+ ,8' &'), B30' ,234" #83B 3B ,/1' )(/ ,8' 21//'+,
,6Q' () Q$/B'/ ?']/' 1B3+< HCJI" @(/ (,8'/ ,6Q'B () Q$/B'/B &3W' 7N#CJ HCCIZ 3,]B ,8'
(QQ(B3,'Z 6(1 2$+ (+&6 1B' /3<8,T/'21/B3(+"
68 F]=>(%%?)/%+
69 F]=>(%%?)/ c >(%_#@ : G)-(%;/('A\$#B d
6< g F]=>(%%?)/% H(>*?/$@)> F]=>(%%?)/ c >(%_#@ : \$#D7K ii \$#D,K d
87 g F]=>(%%?)/% H(>*?/$@)> c >(%_#@ : \$#D7K d
8! g H(>*?/$@)> c >(%_#@ : G)-(%;/('ADKB d
8, ^
85 F]=>(%%?)/+
86 Y?@(>$#
88 g o$##
89 g n=(>$@)>
8< g M(@o)/%@$/@
97 g L(@o)/%@$/@
9! g M(@Y)"$#
9, g L(@Y)"$#
90 g E(.
94 g o#$%%
95 g 2.
96 g 3A3 F]=>(%%?)/ 3B3 c >(%_#@ : \$#D!K d
98 ^
N(,32' 8(? ?' 35Q&'5'+, B1QQ(/, )(/ Q$/'+,8'B'B 1B3+< ,8' Q/'>3(1B /1&'" i7i
@C6-$))'"( i8i ?3&& )(/2' ,8' Q$/B3+< () @C6-$))'"( 3+ 3,B '+,3/',6 )3/B,"
A$/'+,8'B'B ?3&& ,8'+ %' 03B2$/0'0 &'$>3+< (+&6 ,8' )1&&6 Q$/B'0 'GQ/'BB3(+"
#'/53+$,(/B $/' ,(W'+B ,8$, 2$+ ,'/53+$,' $+ 'GQ/'BB3(+" ;8'+ 1B3+< ,(W'+B ,(
0')3+' /1&'BZ ?' B35Q&6 /')'/'+2' ,8'5 %6 ,8'3/ ,6Q' ?8328 ?' 0')3+'0 3+ ,8' &'G'/"
<6 H(>*?/$@)>+
<8 GFSY2GF
<9 g 1^1
<< ^
!77
C3,'/$&B $/' ,8' 8$/0T2(0'0 >$&1'B 3+B30' ,8' Q/(</$5" .) 6(1 ?$+, ,( $00 B1QQ(/,
)(/ (,8'/ &3,'/$& ,6Q'BZ B128 $B $//$6B (/ 8$B8'BZ ,83B 3, ?8'/' 6(1]0 0( 3,"
!70 Y?@(>$#+
!74 GNOPFJ c >(%_#@ : G_*e(>G)-(;/('A\$#D7KB d
!75 g LHJ2GM c >(%_#@ : L@>?/XG)-(;/('A\$#D7KB d
!76 g HJNF c >(%_#@ : H>_(G)-(;/(' d
!78 g I&YLF c >(%_#@ : I$#%(G)-(;/(' d
!79 g G2Y c >(%_#@ : G?#G)-(;/(' d
!7< ^
!!7
!!< o$##+
!,7 2EFGH2I2FJ &>X_*(/@% c >(%_#@ : o$##G)-(;/('A/?#C \$#D7KC \$#D!KB d
!,! g F]=>(%%?)/ 1;1 2EFGH2I2FJ
!,, &>X_*(/@% c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D,KC \$#D0KB d
!,0 g F]=>(%%?)/ 1;1 2EFGH2I2FJ c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D,KC DKB d
!,4 ^
!,5
!,6 &>X_*(/@%+
!,8 1A1 1B1 c >(%_#@ : DK d
!,9 g 1A1 &>XY?%@ 1B1 c >(%_#@ : \$#D!K d
!,< ^
!07
!0! &>XY?%@+
!0, F]=>(%%?)/ c >(%_#@ : \$# d
!00 g &>XY?%@ 1C1 F]=>(%%?)/ c >(%_#@ : \$#D7K ii \$#D,K d
!04 ^
!05
!40 n=(>$@)>+
!44 F]=>(%%?)/ 3gg3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D!KC D\$#D,KKB d
!45 g F]=>(%%?)/ 3uu3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D!KC D\$#D,KKB d
!46 g F]=>(%%?)/ 3::3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D!KC D\$#D,KKB d
!48 g F]=>(%%?)/ 3k:3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D!KC D\$#D,KKB d
!49 g F]=>(%%?)/ 3h3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D!KC D\$#D,KKB d
!4< g F]=>(%%?)/ 3h:3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D!KC D\$#D,KKB d
!57 g F]=>(%%?)/ 3i3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D!KC D\$#D,KKB d
!5! g F]=>(%%?)/ 3i:3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D!KC D\$#D,KKB d
!5, g F]=>(%%?)/ 3V3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D!KC D\$#D,KKB d
!50 g F]=>(%%?)/ 3Z3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D!KC D\$#D,KKB d
!54 g F]=>(%%?)/ 3W3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D!KC D\$#D,KKB d
!55 g F]=>(%%?)/ 3R3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D7KC \$#D!KC D\$#D,KKB d
!56 ^
!58
#8'+ ?' 8$>' /1&'B )(/ <',,3+< $+0 B',,3+< >$&1'B () 2(+B,$+,B $+0 &(2$& >$/3$%&'B"
!5< M(@o)/%@$/@+
!67 onGLH&GH c >(%_#@ : M(@o)/%@$/@G)-(;/('A\$#D7KB d
!6! ^
!6,
!60 L(@o)/%@$/@+
!64 onGLH&GH 1:1 F]=>(%%?)/ c >(%_#@ : L(@o)/%@$/@G)-(;/('A\$#D7KC \$#D,KB d
!65 ^
!66
!68 M(@Y)"$#+
!69 2EFGH2I2FJ c >(%_#@ : M(@Y)"$#G)-(;/('A\$#D7KB d
!6< ^
!87
!8! L(@Y)"$#+
!8, 2EFGH2I2FJ 1:1 F]=>(%%?)/ c >(%_#@ : L(@Y)"$#G)-(;/('A\$#D7KC \$#D,KB d
!80 ^
=1/ &$+<1$<' 1B'B 3+0'+,$,3(+ ,( B'Q$/$,' %&(2WB () 2(0'" :1, ,8' &'G'/ ,((W 2$/'
() $&& ,8$, 2(5Q&'G3,6 )(/ 1B $+0 ?/$QQ'0 $&& %&(2WB 3+ =>?@>A 222 ?@?@>A" 7
%&(2W 3B B35Q&6 $+ 3+2/'5'+, 3+ 3+0'+,$,3(+ )(&&(?'0 %6 B(5' 2(0' $+0 2&(B3+<
?3,8 $+ 'i13>$&'+, 0'2/'5'+, 3+ 3+0'+,$,3(+"
.) 6(1]0 &3W' ,( 1B' 21/&6 %/$2W',B (/ $(# ,( 0'&353, %&(2WB 3+B,'$0Z 6(1]0 B35Q&6
+''0 ,( 5(03)6 ,83B (+' /1&'" L(1]&& $&B( +''0 ,( /'5(>' ,8' 3+0'+,$,3(+ &(<32 )/(5
,8' &'G'/"
!90 P#)"f+
!94 2GEFGH F]=>(%%?)/% EFEFGH c >(%_#@ : \$#D!K d
!95 ^
!96
#8' #$5 W'6?(/0 3B 1B'0 )(/ 0')3+3+< 5',8(0B" =+2' $<$3+Z ?']/' 3+,/(0123+< $ %3,
() B6+,$2,32 B1<$/ 8'/' ,( $&&(? BW3QQ3+< ,8' Q$/'+,8'B'B ?8'+ ,8'/' $/' +(
Q$/$5','/B"
!9< E(.+
!<7 EFI 2EFGH2I2FJ P#)"f c >(%_#@ : E(.G)-(;/('A\$#D!KC DKC \$#D,KB d
!<! g EFI 2EFGH2I2FJ
!<, 1A1 y$>$*Y?%@ 1B1 P#)"f c >(%_#@ : E(.G)-(;/('A\$#D!KC \$#D0KC \$#D5KB d
!<0 ^
!<4
!<5 y$>$*Y?%@+
!<6 RW /)@T?/X WR c >(%_#@ : DK d
!<8 g 2EFGH2I2FJ c >(%_#@ : \$# d
!<9 g y$>$*Y?%@ 1C1 2EFGH2I2FJ c >(%_#@ : \$#D7K ii \$#D,K d
!<< ^
,77
*&$BB 0')3+3,3(+ 3B B353&$/ ,( 5',8(0 0')3+3,3(+" *&$BB +$5'B $/' $&B( 2(+B,$+,B
%'2$1B' ,8'6 B,$/, ?3,8 $ 2$Q3,$& &',,'/"
,70 o#$%%+
,74 oY&LL onGLH&GH P#)"f c >(%_#@ : o#$%%G)-(;/('A\$#D!KC \$#D,KB d
,75 ^
,76
,79 2.+
,7< 2I F]=>(%%?)/ P#)"f c >(%_#@ : 2.G)-(;/('A\$#D!KC \$#D,KB d
,!7 ^
,!! (/-
#8' )3+$& 2(0' $, ,8' %(,,(5 () ,83B J$22 )3&' ?3&& %' Q1, $BT3B 3+ ,8' <'+'/$,'0
M+-)$- 2&$BB" L(1 2$+ Q1, B(5' 2(0' $, ,8' ,(Q HW$+#$-I $+0 B(5' 3+B30' ,8'
2&$BB H'(($-I"
,!5 ZZZZ T($-(>
,!6 >(v_?>( 1#(](>1
,!8 >(v_?>( 1/)-(%1
,!9
;']/' +(? /'$06 ,( <'+'/$,' ,8' Q$/B'/ ?3,8 ,8' 2(55$+0E -+!! ."
6+-)$-2-X %-+&&+-29" #83B ?3&& 2/'$,' $ M+-)$- 2&$BB ,8$, ?' 2$+ 1B' ,(
Q$/B' (1/ 2(0'" J1+ -TX9 .=*$)* *$)*S6+-)$-K*$)*2-X )/(5 ,8' !"#$
03/'2,(/6 ,( ,'B, ,8' Q$/B'/" ['/']B $+ 'G2'/Q, )/(5 ,83B )3&'"
In file !"#$%+$,+%30(,$(-+$,+)(*
! ")-( : iiZonEF
, -(. *(@T)-A$C eB+
0 @>_(
4 onEF
5
6 /)-(% : G)-(%;/('AD
8 E(.G)-(;/('A1*(@T)-1C D1$1C 1e1KC
9 G)-(%;/('ADH>_(G)-(;/('KB
< B
!7 KB
!!
N(0'B $/' ,8' 6&76 /'Q/'B'+,$,3(+ () 6(1/ Q/(</$5" @(/ 'G$5Q&'Z ?8'+ Q$/B3+< $
+15%'/Z $ >T&X$->"#$ ?3&& %' 2/'$,'0Z +(, $+ $2,1$& +15%'/ 3+B30' (1/
&$+<1$<'" #8' +'G, B,'Q 3B ,( %/3+< ,8$, +(0' ,( &3)' 3+ (1/ &$+<1$<' /1++3+<
'+>3/(+5'+," #8$, /1++3+< '+>3/(+5'+, 3B 2$&&'0 ,8' /1+,35'" ;']&& ,$W' $ &((W $,
,83B 3+ ,8' +'G, 28$Q,'/"
DO IT YOURSELF II
%" 700 $ </$55$/ /1&' ,( 8$+0&' ,8' ] 1+$/6 (Q'/$,(/BZ '<"E ]C" D$W3+< ,8'
)(&&(?3+< ,'B, Q$BB H*$)*KT(+-9K"6$-+*"-IE
#8' /1+,35' 5(0'& () $ &$+<1$<' 3B 8(? ?' /'Q/'B'+, 3,B (%c'2,BZ 3,B 5',8(0BZ 3,B
,6Q'BZ 3,B B,/12,1/' 3+ 5'5(/6" .) ,8' Q$/B'/ 0','/53+'B 8(? 6(1 %74* ,( ,8'
&$+<1$<'Z ,8' /1+,35' 0')3+'B 8(? ,8' &$+<1$<' 8O&3" #?( &$+<1$<'B 2(1&0
B8$/' ,8' B$5' Q$/B'/ %1, 8$>' 03))'/'+, /1+,35'B $+0 %' >'/6 03))'/'+,"
;8'+ 0'B3<+3+< 6(1/ /1+,35'Z ,8'/' $/' ,8/'' )$2,(/B 6(1 ?3&& ?$+, ,( 2(+B30'/E
▪ 4Q''0E 5(B, () ,8' BQ''0 ?3&& %' 01' ,( ,8' '))323'+26 () ,8' /1+,35'"
▪ @&'G3%3&3,6E ,8' 5(/' 6(1 $&&(? ,8' 1B'/ ,( 5(03)6 ,8' &$+<1$<'Z ,8' 5(/'
Q(?'/)1& 3, 3B"
▪ D'5(/6 )((,Q/3+,E () 2(1/B'Z $&& () ,83B ?83&' 1B3+< $B &3,,&' 5'5(/6 $B
Q(BB3%&'"
7B 6(1 53<8, 8$>' +(,32'0Z ,8'B' ,8/'' 2(+B,/$3+,B $/' 51,1$&&6 2(+)&32,3+<"
K'B3<+3+< $ &$+<1$<' 3B $&?$6B $ <$5' () <3>'T$+0T,$W'"
;3,8 ,8(B' 2(+B30'/$,3(+B 3+ 53+0Z ,8'/' $/' B'>'/$& ?$6B 6(1 2$+ 5(0'& 6(1/
/1+,35'"
PROCEDURAL
=+' () ,8' B35Q&'B, /1+,35' 5(0'&BZ &3W' * $+0 A[A H%')(/' >'/B3(+ FI" O>'/6,83+<
3B 2'+,'/'0 $/(1+0 5',8(0B HQ/(2'01/'BI" #8'/' $/'+], $+6 (%c'2,B $+0 $&& 5',8(0B
(),'+ B8$/' ,8' B$5' +$5'BQ$2'" ., <',B 5'BB6 Q/',,6 i132W&6_
CLASS-BASED
#8' 2&$BBT%$B'0 5(0'& 3B ,8' 5(B, Q(Q1&$/ $, ,8' 5(5'+," #83+W () a$>$Z A6,8(+Z
J1%6Z ',2" D',8(0B $/' B,(/'0 3+,( 2&$BB'B $+0 (%c'2,B $/' 3+B,$+2'B () 2&$BB'B" .,
53<8, %' ,8' '$B3'B, 5(0'& ,( 1+0'/B,$+0 )(/ ,8' 1B'/B () 6(1/ &$+<1$<'" #83B 3B ,8'
5(0'& ?']&& 1B' 3+ (1/ 7?'B(5' &$+<1$<'"
PROTOTYPE-BASED
.$+ A315$/,$ 0'B2/3%'B 8(? ,( 0'B3<+ $+ =Q'+Z OG,'+B3%&' =%c'2, D(0'& ,8$,
$&&(?B ,8' &$+<1$<']B 1B'/B ,( 5(03)6 3,B %'8$>3(/ $, /1+,35'"
C((W $, ,8' 28$Q,'/ D3(Z $ 53+35$&3B, 8(5(32(+32 &$+<1$<' ,(?$/0B ,8' '+0 () ,83B
%((W )(/ $ B$5Q&' Q/(,(,6Q'T%$B'0 &$+<1$<'"
FUNCTIONAL
#8' )1+2,3(+$& 5(0'&Z 1B'0 %6 [$BW'&& $+0 (,8'/ &$+<1$<'BZ ,/'$,B 2(5Q1,$,3(+ $B
,8' '>$&1$,3(+ () 5$,8'5$,32$& )1+2,3(+B $+0 $>(30B B,$,' $+0 51,$%&' 0$,$" #83B
5(0'& 8$B 3,B /((,B 3+ C$5%0$ *$&21&1B $+0 3B 2&(B' ,( ,8' A/(,(,6Q'T%$B'0 5(0'&"
[(?'>'/Z )1+2,3(+B $/' 5$0' 3+,( )3/B,T2&$BB >$&1'B $+0 51,$,3(+ () ,8' 0$,$ 3B
03B2(1/$<'0"
43+2' 5(B, () 1B $/' )$53&3$/ ?3,8 *&$BBT%$B'0 /1+,35'BZ ?']&& 1B' ,8$, )(/ (1/
7?'B(5' &$+<1$<'" #8' )(&&(?3+< 2(0' 0')3+'B 8(? (%c'2,BZ 5',8(0B $+0 2&$BB'B
$/' B,(/'0 $+0 8(? ,8'6 3+,'/$2, ,(<',8'/" ., 3B B,/(+<&6 3+BQ3/'0 %6 ,8' J1%6
/1+,35' 5(0'&"
89:&;<.
#8' PD$)"&$IXj$!* 2&$BB 3B ,8' 2'+,/$& (%c'2, () (1/ /1+,35'" 43+2' '>'/6,83+< 3B
$+ (%c'2, 3+ (1/ &$+<1$<'Z '>'/6,83+< ?' ?3&& Q1, 3+ ,8' /1+,35' +''0B ,( %' $+
(%c'2,Z ,81B $+ 3+B,$+2' () ,83B 2&$BB" PD$)"&$IXj$!*B 8$>' $ 2&$BB $+0 2$+ 8(&0
$ /1%6 >$&1'" #83B ?3&& $&&(? 1B ,( B,(/' 0$,$ B128 $B $ B,/3+< (/ $ +15%'/ 3+ $+
(%c'2, ,( W''Q ,/$2W () 3,B J1%6 /'Q/'B'+,$,3(+"
In file !"#$%(4.+51$%"*6$!+)(*
! "#$%% &'(%)*(neq("@
O$28 (%c'2, 8$B $ 2&$BB H+$5'0 -T(*'&$K!,+)) ,( Q/'>'+, 2(+)&32,B ?3,8 J1%6]B
!,+)) W'6?(/0I" =Q,3(+$&&6 $+ (%c'2, 2$+ 8(&0 $ J1%6 >$&1'" O<"E +15%'/B $+0
B,/3+<B ?3&& B,(/' ,8'3/ +15%'/ (/ B,/3+< J1%6 'i13>$&'+, 3+ ,8$, >$/3$%&'"
C3W' $ ,6Q32$& *&$BBT%$B'0 /1+,35' 5(0'&Z ?' B,(/' 5',8(0B 3+ ,8' 2&$BB () ,8'
(%c'2," ;8'+ 2$&&3+< $ 5',8(0 (+ $+ (%c'2,Z ?' +''0 ,( )3/B, &((W1Q ,8$, 5',8(0
3+ ,8' 2&$BBZ $+0 ,8'+ 2$&& 3,"
In file !"#$%(4.+51$%!&0,,)(*
4 $@@>`>($-(> +>_/@?*(`*(@T)-%
5
6 -(. ?/?@?$#?j(
8 z>_/@?*(`*(@T)-% : cd
9 z>_/@?*(`"#$%% : o)/%@$/@%D1o#$%%1K
< (/-
!7
!! b Y))f_= $ *(@T)-
!, -(. #))f_=A*(@T)-`/$*(B
!0 *(@T)- : z>_/@?*(`*(@T)-%D*(@T)-`/$*(K
!4 >$?%( 1O(@T)- /)@ .)_/-+ bc*(@T)-`/$*(d1 ?. *(@T)-;/?#p
!5 *(@T)-
!6 (/-
!8
,9 b o>($@( $/ ?/%@$/"( ). @T?% &'(%)*( "#$%% @T$@ T)#-% $ J_e[ \$#_(; Y?f( $ L@>?/XC
,< b G_*e(> )> @>_(;
07 -(. /('`'?@T`\$#_(A\$#_(B
0! &'(%)*(neq("@;/('A%(#.C \$#_(B
0, (/-
00 (/-
7+0 8'/']B ,8' 5',8(0 (%c'2, ?8328 ?3&& B,(/' 5',8(0B 0')3+'0 )/(5 ?3,83+ (1/
/1+,35'"
In file !"#$%(4.+51$%1$+7"#)(*
! "#$%% &'(%)*(O(@T)-
, -(. ?/?@?$#?j(A=$>$*%C e)-[B
0 z=$>$*% : =$>$*%
4 ze)-[ : e)-[
5 (/-
6
N(,32' ,8$, ?' 1B' ,8' !+,, 5',8(0 )(/ '>$&1$,3+< $ 5',8(0" #8$, ?3&& $&&(? 1B ,(
0')3+' /1+,35' 5',8(0B )/(5 J1%6 ,(( 1B3+< ,8' PD$)"&$k,+))]B #$5 5',8(0"
5,2<&?< 8@ AB03$0<",2
#8'/' 3B (+' 53BB3+< Q3'2' ?' +''0 ,( 3+,/(012' 3+ (1/ /1+,35'" .,]B ,8' 2(+,'G, ()
'>$&1$,3(+" #8' k"(*$C* (%c'2, '+2$QB1&$,'B ,8' '+>3/(+5'+, () '>$&1$,3(+ () $
BQ'23)32 %&(2W () 2(0'" ., ?3&& W''Q ,/$2W () ,8' )(&&(?3+<E
▪ C(2$& >$/3$%&'B"
▪ #8' 21//'+, >$&1' () )$,5Z ,8' (%c'2, (+ ?8328 5',8(0B ?3,8 +( /'2'3>'/B
$/' 2$&&'0Z '<"E 6-'(* 3B &3W' )$,526-'(*"
▪ #8' 21//'+, 2&$BBZ ,8' 2&$BB (+ ?8328 5',8(0B $/' 0')3+'0 ?3,8 ,8' #$5
W'6?(/0"
In file !"#$%(4.+51$%!".+$'+)(*
! "#$%% o)/@(]@
, $@@>`>($-(> +#)"$#%C +"_>>(/@`%(#.C +"_>>(/@`"#$%%
0
;8'+ $ Q3'2' () 2(0' 'G'21,'B 3+ (1/ /1+,35'Z 3, ?3&& $&?$6B 'G'21,' ?3,83+ $
<3>'+ 2(+,'G,"
#8' &$B, B,'Q 3B ,( %/3+< ,8' /1+,35' ,( &3)' %6 3+3,3$&3f3+< ,8' 2(/' 2&$BB'B $+0
(%c'2,B" #83B Q/(2'BB 3B 2$&&'0 %((,B,/$QQ3+<" 7, )3/B,Z +( (%c'2,B 'G3B, 3+ ,8'
/1+,35'" :')(/' ?' 2$+ 'G'21,' (1/ )3/B, 'GQ/'BB3(+Z ?' +''0 ,( Q(Q1&$,' ,8$,
/1+,35' ?3,8 $ )'? (%c'2,BE k,+))Z IXj$!*Z *-T$Z 5+,)$Z (', $+0 $ )'? 2(/'
5',8(0B"
In file !"#$%(4.+51$%*""+,+(03)(*
@3/B,Z ?' 2/'$,' $ J1%6 [$B8 3+ ?8328 ?']&& B,(/' $&& 2(+B,$+,B $22'BB3%&' )/(5
3+B30' (1/ /1+,35'" #8'+Z ?' Q(Q1&$,' ,83B [$B8 ?3,8 ,8' 2(/' 2&$BB'B () (1/
&$+<1$<'"
4 o)/%@$/@% : cd
5
#8' /((, 2(+,'G, ?3&& %' ,8' B,$/,3+< Q(3+, ?8'/' $&& (1/ Q/(</$5B ?3&& B,$/, ,8'3/
'>$&1$,3(+" #83B ?3&& $&B( B', ,8' >$&1' () )$,5 $, ,8' /((, () (1/ Q/(</$5B"
!5 >))@`%(#. : o)/%@$/@%D1neq("@1K;/('
!6 J))@o)/@(]@ : o)/@(]@;/('A>))@`%(#.B
O>'/6,83+< 3B $+ (%c'2, 3+ (1/ &$+<1$<'Z '>'+ *-T$Z 5+,)$ $+0 ('," 4( ,8'6 +''0
,( 8$>' $ 2&$BB ,(("
,7 o)/%@$/@%D1H>_(o#$%%1K : &'(%)*(o#$%%;/('
,! o)/%@$/@%D1I$#%(o#$%%1K : &'(%)*(o#$%%;/('
,, o)/%@$/@%D1G?#o#$%%1K : &'(%)*(o#$%%;/('
,0
,4 o)/%@$/@%D1@>_(1K : o)/%@$/@%D1H>_(o#$%%1K;/('`'?@T`\$#_(A@>_(B
,5 o)/%@$/@%D1.$#%(1K : o)/%@$/@%D1I$#%(o#$%%1K;/('`'?@T`\$#_(A.$#%(B
,6 o)/%@$/@%D1/?#1K : o)/%@$/@%D1G?#o#$%%1K;/('`'?@T`\$#_(A/?#B
N(? ,8$, ?' 8$>' 3+c'2,'0 $&& ,8' 2(/' 2&$BB'B 3+,( ,8' /1+,35'Z ?' 2$+ 0')3+'
5',8(0B (+ ,8(B' 2&$BB'B"
#8' )3/B, 5',8(0 ?']&& 0')3+' ?3&& $&&(? 1B ,( 0( IXj$!*2($D (/ >T&X$-2($D"
o''Q 3+ 53+0Z IXj$!* (/ >T&X$- $/' 3+B,$+2'B () ,8' k,+)) 2&$BB" :6 0')3+3+<
,8' ($D 5',8(0 (+ k,+))Z 3, ?3&& %' $22'BB3%&' (+ $&& 3,B 3+B,$+2'B"
N'G,Z ?']&& 0')3+' ,8' 6-'(* 5',8(0" 43+2' ?' ?$+, ,( %' $%&' ,( 2$&& 3, )/(5
'>'/6?8'/'Z ?']&& 0')3+' 3, (+ IXj$!*" J'5'5%'/ )/(5 ,8' Q$/B'/]B k+,, /1&'Z
5',8(0B ?3,8(1, $+6 /'2'3>'/ ?3&& %' B'+, ,( )$,5" 4( 6-'(*78 3B ,8' B$5' $B
)$,526-'(*78Z $+0 )$,5 ?3&& $&?$6B %' $+ 3+B,$+2' () IXj$!*"
N(? ,8$, ?' <(, $&& ,8' Q3'2'B ,(<',8'/ ?' 2$+ 2$&& 5',8(0B $+0 2/'$,' (%c'2,B
3+B30' (1/ /1+,35'"
In file !"#$%+$,+%(4.+51$-+$,+)(*
*$+ 6(1 )''& ,8' &$+<1$<' 2(53+< $&3>'\ ;']&& &'$/+ 8(? ,( 5$Q ,8$, /1+,35' ,(
,8' +(0'B ?' 2/'$,'0 )/(5 (1/ Q$/B'/ 3+ ,8' +'G, B'2,3(+"
DO IT YOURSELF III
#8' 3+,'/Q/','/ 3B ,8' 5(01&' ,8$, '>$&1$,'B H3+,'/Q/',BI ,8' +(0'B Q/(012'0 %6 ,8'
Q$/B'/ $+0 5(03)6 ,8' /1+,35'" #83+W () ,8' +(0'B $/' $ &3)'&'BB /'Q/'B'+,$,3(+ ()
6(1/ Q/(</$5Z ,8' /1+,35' $B ,8' ?(/&0 6(1/ Q/(</$5 &3>'B 3+ $+0 ,8' 3+,'/Q/','/ $B
,8' 2(0' ,8$, 2(+,/(&B 3,"
!"#$%& E
#8' &'G'/ 2/'$,'B ,8' ,(W'+Z ,8' Q$/B'/ ,$W'B ,8(B' ,(W'+B $+0 2(+>'/,B 3, 3+,(
+(0'B" @3+$&&6Z ,8' 3+,'/Q/','/ '>$&1$,'B ,8' +(0'B"
7 2(55(+ $QQ/($28 ,( 'G'21,' $+ 74# 3B ,( 35Q&'5'+, $ U3B3,(/ 2&$BB ,8$, >3B3,B $&&
,8' +(0'B (+' %6 (+'Z /1++3+< ,8' $QQ/(Q/3$,' 2(0'" #83B 5$W' ,83+<B '>'+ 5(/'
5(01&$/ $+0 '$B'B ,8' (Q,353f$,3(+ '))(/,B (+ ,8' 74#" :1, )(/ ,8' Q1/Q(B' () ,83B
%((WZ ?']&& W''Q ,83+<B B35Q&' $+0 &', '$28 +(0' 8$+0&' 3,B '>$&1$,3(+"
)*& F2<&%6%&<&%
J'5'5%'/ ,8' +(0'B ?' 2/'$,'0 3+ ,8' Q$/B'/E d*-'(%>"#$ )(/ $ B,/3+<Z
k,+))>"#$ )(/ $ 2&$BB 0')3+3,3(+\ ['/' ?']/' /'(Q'+3+< ,8(B' 2&$BB'B $+0 $00 $
+'? 5',8(0 ,( '$28 (+'E $/+," #83B 5',8(0 ?3&& %' /'BQ(+B3%&' )(/ Q'/)(/53+<
,8' $2,3(+ ,8$, ,8' +(0' /'Q/'B'+,BZ 0(3+< ,8' $003,3(+ )(/ $ ^ +(0'Z 2$&&3+< ,8'
5',8(0 )(/ $ k+,,>"#$Z $+0 B( (+"
In file !"#$%5.+$(3($+$()(*
! >(v_?>( 1=$>%(>1
, >(v_?>( 1>_/@?*(1
@3/B,Z ?' 2/'$,' $+ B35Q&' ?/$QQ'/ 2&$BB ,( '+2$QB1&$,' ,8' 3+,'/Q/',$,3(+ Q/(2'BB"
7&& ,83B 0('B 3B Q$/B' ,8' 2(0' $+0 2$&& $/+, (+ ,8' +(0' $, ,8' ,(Q () ,8' 74#"
6 "#$%% 2/@(>=>(@(>
8 -(. ?/?@?$#?j(
9 z=$>%(> : y$>%(>;/('
< (/-
!7
!! -(. (\$#A")-(B
!, z=$>%(>;=$>%(A")-(B;(\$#AJ))@o)/@(]@B
!0 (/-
!4 (/-
#8' >"#$) 2&$BB ?3&& $&?$6B %' $, ,8' ,(Q () ,8' 74#" .,B (+&6 Q1/Q(B' 3, ,( 2(+,$3+
(,8'/ +(0'B" ., 2(//'BQ(+0 ,( $ %&(2W () 2(0' (/ $ B'/3'B () 'GQ/'BB3(+B"
#8' $/+, 5',8(0 () '>'/6 +(0' 3B ,8' p3+,'/Q/','/q Q$/, () (1/ &$+<1$<'" 7&& +(0'B
W+(? 8(? ,( '>$&1$&,' ,8'5B'&>'B $+0 /',1/+ ,8' /'B1&, () ,8'3/ '>$&1$,3(+" #8'
!"(*$C* >$/3$%&' 3B ,8' k"(*$C* 3+ ?8328 ,8' +(0' 3B '>$&1$,'0 H&(2$& >$/3$%&'BZ
21//'+, B'&) $+0 21//'+, 2&$BBI"
,0 "#$%% G)-(%
,4 -(. (\$#A")/@(]@B
,5 >(@_>/`\$#_( : /?#
,6 /)-(%;($"T -) g/)-(g
,8 >(@_>/`\$#_( : /)-(;(\$#A")/@(]@B
,9 (/-
,< >(@_>/`\$#_( gg o)/%@$/@%D1/?#1K b Y$%@ >(%_#@ ?% >(@_>/ \$#_( A)> /?# ?. /)/(B;
07 (/-
0! (/-
;']/' 1B3+< k"()*+(*) ,8$, ?' 2/'$,'0 %')(/' ?8'+ %((,B,/$QQ3+< ,8' /1+,35' ,(
$22'BB ,8' (%c'2,B $+0 2&$BB'B )/(5 3+B30' ,8' /1+,35'"
N'G,Z ?' 35Q&'5'+, $/+, (+ (,8'/ +(0' ,6Q'B" #83+W () ,8$, $/+, 5',8(0 $B 8(?
,8' +(0' %/3+< 3,B'&) ,( &3)' 3+B30' ,8' /1+,35'"
09 "#$%% G_*e(>G)-(
0< -(. (\$#A")/@(]@B
47 o)/%@$/@%D1G_*e(>1K;/('`'?@T`\$#_(A\$#_(B
4! (/-
4, (/-
40
44 "#$%% L@>?/XG)-(
45 -(. (\$#A")/@(]@B
46 o)/%@$/@%D1L@>?/X1K;/('`'?@T`\$#_(A\$#_(B
48 (/-
49 (/-
4<
57 "#$%% H>_(G)-(
5! -(. (\$#A")/@(]@B
5, o)/%@$/@%D1@>_(1K
50 (/-
54 (/-
55
56 "#$%% I$#%(G)-(
58 -(. (\$#A")/@(]@B
59 o)/%@$/@%D1.$#%(1K
5< (/-
67 (/-
6!
6, "#$%% G?#G)-(
60 -(. (\$#A")/@(]@B
64 o)/%@$/@%D1/?#1K
65 (/-
66 (/-
68
69 "#$%% M(@o)/%@$/@G)-(
6< -(. (\$#A")/@(]@B
87 o)/%@$/@%D/$*(K
8! (/-
8, (/-
80
84 "#$%% M(@Y)"$#G)-(
85 -(. (\$#A")/@(]@B
86 ")/@(]@;#)"$#%D/$*(K
88 (/-
89 (/-
;8'+ B',,3+< ,8' >$&1' () $ 2(+B,$+, (/ $ &(2$& >$/3$%&'Z ,8' /+,T$ $,,/3%1,' 3B $
+(0'Z 2/'$,'0 %6 ,8' Q$/B'/" ;' +''0 ,( '>$&1$,' ,8' +(0' )3/B,Z ,( 2(+>'/, 3, ,( $+
(%c'2,Z %')(/' B,(/3+< 3, 3+,( $ >$/3$%&' (/ 2(+B,$+,"
90 "#$%% L(@o)/%@$/@G)-(
94 -(. (\$#A")/@(]@B
95 o)/%@$/@%D/$*(K : \$#_(;(\$#A")/@(]@B
96 (/-
98 (/-
99
#8' k+,,>"#$ )(/ 2$&&3+< $ 5',8(0 3B $ &3,,&' 5(/' 2(5Q&'G" ., +''0B ,( B', ,8'
/'2'3>'/ )3/B, $+0 ,8'+ '>$&1$,' ,8' $/<15'+,B %')(/' 2$&&3+< ,8' 5',8(0"
<8 "#$%% o$##G)-(
<9 -(. (\$#A")/@(]@B
<< ?. >("(?\(>
!77 \$#_( : >("(?\(>;(\$#A")/@(]@B
!7! (#%(
!7, \$#_( : ")/@(]@;"_>>(/@`%(#. b E(.$_#@ @) t%(#.t ?. /) >("(?\(>;
!70 (/-
!74
K')3+3+< $ 5',8(0Z 1B3+< ,8' #$5 W'6?(/0Z 3B 0(+' %6 $003+< $ 5',8(0 ,( ,8'
21//'+, 2&$BB"
!09 $'(%)*(`"#$%%
!0< (/-
!47 (/-
@3+$&&6Z ,( 35Q&'5'+, '5 3+ (1/ &$+<1$<'Z ?' ,1/+ ,8' 2(+03,3(+ +(0' 3+,( $ J1%6
>$&1' ,( 1B' J1%6]B '5"
#8' 3+,'/Q/','/ Q$/, H,8' $/+, 5',8(0I 3B ,8' 2(++'2,(/ %',?''+ ,8' Q$/B'/ $+0 ,8'
/1+,35' () (1/ &$+<1$<'" =+2' ?' 2$&& $/+, (+ ,8' /((, +(0'Z $&& 283&0/'+ +(0'B
$/' '>$&1$,'0 /'21/B3>'&6" #83B 3B ?86 ?' 2$&& ,8' (1,Q1, () ,8' Q$/B'/ $+ 74#Z )(/
7%B,/$2, 46+,$G #/''" ., 3B $ ,/'' () +(0'B" 7+0 '>$&1$,3+< ,8' ,(Q &'>'& +(0' () ,8$,
,/'' ?3&& 8$>' ,8' 2$B2$03+< '))'2, () '>$&1$,3+< '$28 () 3,B 283&0/'+"
7/' 6(1 /'$06\ C',]B 0( ,83B_ ['/' ?']/' /1++3+< (1/ )3/B, Q/(</$5_
In file !"#$%+$,+%5.+$(3($+$(-+$,+)(*
! ")-( : iiZonEF
, "#$%% &'(%)*(+
0 -(. -)(%`?@`')>f+
4 1[($Tk1
5
6 $'(%)*(`)eq("@ : &'(%)*(;/('
8 ?. $'(%)*(`)eq("@+
9 =>?/@A$'(%)*(`)eq("@;-)(%`?@`')>fB
< onEF
!7
!! $%%(>@`=>?/@%A1[($TkU/1B c 2/@(>=>(@(>;/(';(\$#A")-(B d
)*& DA7G
#( 2(5Q&',' (1/ &$+<1$<' ?' 2$+ 2/'$,' $ B2/3Q, ,( /1+ $ )3&' (/ $+ JOAC H)(/ /'$0T
'>$&TQ/3+,T&((QIZ (/ 3+,'/$2,3>' 3+,'/Q/','/"
In file !"#$%08$,"1$
!7 >(v_?>( 1?/@(>=>(@(>1
!! >(v_?>( 1>($-#?/(1
!,
!0 ?/@(>=>(@(> : 2/@(>=>(@(>;/('
!4
,< (/-
J1+ ,8' 3+,'/$2,3>' 3+,'/Q/','/ %6 /1++3+< 2S+D$)"&$ $+0 ,6Q' $ &3+' () 7?'B(5'
2(0'Z '<"E 6-'(*7l=* D"-E)]m8" ['/']B $ B$5Q&' 7?'B(5' B'BB3(+E
DO IT YOURSELF IV
.+ ,8' Q/'>3(1B B'2,3(+Z ?']>' %13&, ?8$, ?' 2$&& $ ?$&W3+<T,/'' 3+,'/Q/','/" #8'
3+,'/Q/','/ 8$B ,( ?$&W $2/(BB ,8' ,/'' () +(0'B '$28 ,35' ?' 'G'21,' $ Q3'2' ()
2(0'" #83B 3B )3+' 3) Q'/)(/5$+2' 3B +(, 6(1/ </'$,'B, 2(+2'/+ $+0 6(1 0(+], 2$/'
$%(1, 6(1/ 74# 1B3+< $&& ,8' J7D" :1, 5(B, 5$3+B,/'$5 &$+<1$<'B B128 $B J1%6Z
A6,8(+Z A[A $+0 a$>$ 2(5Q3&' ,( $ 5128 5(/' '))323'+, )(/5$, 2$&&'0 %6,'T2(0'"
[(?'>'/Z +(,' ,8$, 35Q&'5'+,3+< $ UD (+&6 5$W' B'+B' ?8'+ 6(1]/' 2(03+< 6(1/
&$+<1$<' 3+ $ &(? &'>'& &$+<1$<' B128 $B *" :'2$1B' U3/,1$& D$283+'B $/' >'/6
B35Q&'Z 6(1 +''0 ,(,$& 2(+,/(& (>'/ ,8' B,/12,1/' () 6(1/ Q/(</$5 3+ 5'5(/6 ,(
5$W' 3, $B )$B, $ Q(BB3%&'" .) 6(1 0( +(, Q&$+ (+ 2(03+< 6(1/ &$+<1$<' 3+ $ &(? &'>'&
&$+<1$<'Z c15Q ,( ,8' +'G, B'2,3(+ $%(1, 2(5Q3&3+< ,( 5$283+' 2(0'"
BYTE-CODE
#8' Q1/Q(B' () $ UD 3B ,( %/3+< ,8' 2(0' $B 2&(B' ,( 5$283+' 2(0' $B Q(BB3%&' %1,
?3,8(1, %'3+< ,(( )$/ )/(5 ,8' (/3<3+$& &$+<1$<' 5$W3+< 3, 8$/0 HB&(?I ,( 2(5Q3&'"
7+ 30'$& %6,'T2(0' 3B )$B, ,( 2(5Q3&' )/(5 ,8' B(1/2' &$+<1$<' $+0 )$B, ,( 'G'21,'
?83&' %'3+< >'/6 2(5Q$2, 3+ 5'5(/6" 7&B(Z %6,'T2(0' 3B Q(/,$%&' $B (QQ(B'0 ,(
5$283+' 2(0'"
#8' %6,'T2(0' () $ Q/(</$5 2(+B3B,B () 3+B,/12,3(+B" O$28 3+B,/12,3(+ B,$/,B ?3,8 $+
(Q2(0'Z BQ'23)63+< ?8$, ,83B 3+B,/12,3(+ 0('BZ )(&&(?'0 %6 (Q'/$+0BZ ?8328 $/' ,8'
$/<15'+,B () ,8' 3+B,/12,3(+B"
!"#$%& I
D(B, UDB B8$/' $ B353&$/ B', () 3+B,/12,3(+B" *(55(+ (+'B 3+2&10'Z %$*,"!+, ,(
<', ,8' >$&1' $ &(2$& >$/3$%&'Z 6T*)*-'(% ,( &($0 $ B,/3+< 3+ 5'5(/6Z !+,, (/
)$(# ,( 2$&& $ 5',8(0Z ',2" L(1 2$+ B'' J1%6 !"X HL7JUI 3+B,/12,3(+ B', $,
&3)'<(("Q&1BW30"(/<" 7+0 ,8' aUD 3+B,/12,3(+ B', $, GBF$&&"+&"
THE STACK
#8' UD 'G'21,3(+ /'>(&>'B $/(1+0 $ B,$2W ,8$, 3B 1B'0 ,( Q$BB >$&1'B %',?''+
3+B,/12,3(+B" .+B,/12,3(+B ?3&& (),'+ Q(Q >$&1'B )/(5 ,8' B,$2WZ 5(03)6 3, (/ 2(+B15'
3,Z $+0 Q1B8 ,8' /'B1&, %$2W ,( ,8' B,$2W B( ,8$, 3, 2$+ %' 1B'0 %6 ,8' +'G,
3+B,/12,3(+"
[(?'>'/Z (+' 35Q(/,$+, 2&$/3)32$,3(+Z ,83B 3B +(, ,8' B$5' B,$2W ,8$, 3B /'BQ(+B3%&'
)(/ ,8' d*+!EI/$-5,"D ,6Q' () '//(/B" #8'/' $/' ,?( B,$2WB 3+ $2,3(+ 8'/'" =+'
)(/ Q$BB3+< >$&1'B $/(1+0 %',?''+ 3+B,/12,3(+B $+0 $+(,8'/ (+'Z ,8' 2$&& B,$2WZ
/'BQ(+B3%&' )(/ W''Q3+< ,/$2W () ?8328 5',8(0 ?']/' 21//'+,&6 3+ $+0 $&B(
/'BQ(+B3%&' )(/ ,8' )$5(1B d*+!EI/$-5,"D '//(/ /$3B'0 ?8'+ ,8' 2$&& B,$2W 3B
)1&&" O$28 ,35' 6(1 2$&& $ 5',8(0Z $ +'? '+,/6 3B Q1B8'0 ,( ,8' 2$&& B,$2W"
PROTOTYPING A VM IN RUBY
@(/ ,8' B$W' () 1+0'/B,$+03+< ,8' 3++'/ ?(/W3+< () $ UDZ ?']&& &((W $, $ Q/(,(,6Q'
?/3,,'+ 3+ J1%6" [(?'>'/Z Q&'$B' +(,' ,8$, +'>'/ 3+ $+6 2$B' B8(1&0 $ /'$& UD
B8(1&0 %' ?/3,,'+ 3+ $ 83<8 &'>'& &$+<1$<'B B128 $B J1%6" ., 0')'$,B ,8' Q1/Q(B' ()
%/3+<3+< ,8' 2(0' 2&(B'/ ,( ,8' 5$283+'" O$28 &3+' () 2(0' 3+ $ U3/,1$& D$283+' 3B
(Q,353f'0 ,( /'i13/' $B &3,,&' 5$283+' 3+B,/12,3(+B $B Q(BB3%&' ,( 'G'21,'" [3<8
&'>'& &$+<1$<'B 0( +(, Q/(>30' ,8$, 2(+,/(&Z %1, * $+0 *nn 0("
#8' UD ?']/' %13&03+< ?3&& 1B' $ B,$2W ,( Q$BB >$&1'B %',?''+ 3+B,/12,3(+B" #8'
)(/5$, () ,8'B' 3+B,/12,3(+B $+0 ?8$, B8(1&0 %' Q$BB'0 (+ ,8' B,$2W 3B 0')3+'0 3+
,8' %6,'T2(0' )(/5$, () ,8' UD" ['/' 3B ,8' (+' ?' ?3&& 1B'"
In file !"#$%*2+$!"#$)(*
! b
, b P[@(")-( .)>*$@
0 b
4 b n=")-( n=(>$/-% L@$"f e(.)>( R $.@(>
5 b ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
6 yNL{`GNOPFJ : 7 b G_*e(> @) =_%T )/ @T( %@$"f DK D/_*e(>K
8 yNL{`LFYI : ! b DK D%(#.K
9 o&YY : , b O(@T)-C G_*e(> ). $>X_*(/@% D>("(?\(>C $>X%K D>(%_#@K
< JFHNJG : 0
K(+], ?(//6 3) ,83B 0('B+], 5$W' ,(,$& B'+B' )(/ +(?" ;']&& <', ,( ,8' 0',$3&B () '$28
3+B,/12,3(+ ?8'+ ?' 35Q&'5'+, ,8' UD" 7, ,8' >'/6 &'$B,Z 6(1 2$+ B'' ,8$, '$28
3+B,/12,3(+ 3B >'/6 BQ'23$&3f'0Z 0('B (+&6 (+' ,83+< $+0 3B 'GQ'2,'0 ,( 0( 3, )$B,"
=,8'/ ,8$+ 8$>3+< $ B,$2WZ ,8' UD ?3&& 1B' $+ 3+B,/12,3(+ Q(3+,'/ H'6I ,( W''Q ,/$2W
() ,8' 21//'+, 3+B,/12,3(+ %'3+< 'G'21,'0" 7+0 )3+$&&6Z '>'/6,83+< ?3&& %' ?/$QQ'0
3+ $ &((Q $+0 $ !+)$.DW$( H)D'*!W.!+)$ 3+ (,8'/ &$+<1$<'BIZ (+' 2$B' )(/ '$28
,6Q' () 3+B,/12,3(+" 7&& UDB B8$/' ,8$, B$5' 'G$2, B,/12,1/'"
In file !"#$%91)(*
! >(v_?>( 1e[@(")-(1
, >(v_?>( 1>_/@?*(1
0
4 "#$%% xO
5 -(. >_/Ae[@(")-(B
@3/B,Z ?' 2/'$,' ,8' B,$2W ,( Q$BB >$&1'B %',?''+ 3+B,/12,3(+B" 7+0 3+3,3$&3f' ,8'
.+B,/12,3(+ A(3+,'/ H'6IZ ,8' 3+0'G () 21//'+, 3+B,/12,3(+ %'3+< 'G'21,'0 3+
X9*$!"#$"
< %@$"f : DK
!7 ?= : 7
!!
N'G,Z ?' '+,'/ 3+,( ,8' UD &((Q" .+B30'Z ?' ?3&& $0>$+2' (+' %6,' $, ,8' ,35' 3+
,8' X9*$!"#$" #8' )3/B, %6,' ?3&& %' $+ (Q2(0'"
!4 'T?#( @>_(
!5 "$%( e[@(")-(D?=K b 2/%=("@ @T( "_>>(/@ e[@(C @T?% '?## e( @T( )=")-(;
O$28 () ,8' )(&&(?3+< DW$( %&(2W 8$+0&'B (+' ,6Q' () 3+B,/12,3(+" #8'6 $/' $&&
B,/12,1/'0 3+ ,8' B$5' ?$6"
,! 'T(/ yNL{`GNOPFJ
,, ?= V: ! b &-\$/"( @) /(]@ e[@(C @T( )=(>$/-;
,0 \$#_( : e[@(")-(D?=K b J($- @T( )=(>$/-;
,4
,5 %@$"f;=_%T o)/%@$/@%D1G_*e(>1K;/('`'?@T`\$#_(A\$#_(B
43+2' 2$&&3+< 5',8(0B (+ )$,5 3B B(5',83+< ?' 0( (),'+ ?' 8$>' $ BQ'23$&
3+B,/12,3(+ )(/ Q1B83+< ,8' >$&1' () )$,5 (+ ,8' B,$2W"
#8' 5(B, 2(5Q&'G 3+B,/12,3(+ () (1/ UD 3B kPBBZ )(/ 2$&&3+< $ 5',8(0" ., 8$B ,?(
(Q'/$+0B $+0 'GQ'2,B B'>'/$& ,83+<B ,( %' (+ ,8' B,$2W"
04 'T(/ o&YY
05 ?= V: ! b G(]@ e[@( ")/@$?/% @T( *(@T)- /$*( @) "$##;
06 *(@T)- : e[@(")-(D?=K
08
7, ,83B Q(3+, ?' $BB15' $/<15'+,B $+0 ,8' /'2'3>'/ () ,8' 5',8(0 2$&& 8$>' %''+
Q1B8'0 ,( ,8' B,$2W %6 (,8'/ 3+B,/12,3(+B" @(/ 'G$5Q&'Z 3) ?' ?'/' ,( 2$&& $ 5',8(0
(+ )$,5 Q$BB3+< $ +15%'/ $B $+ $/<15'+,Z ?' ?(1&0 )3+0 ,8(B' ,?( (+ ,8' B,$2W"
N(? Q(Q $&& () ,8(B'"
45 $>X% : DK
46 $>X";@?*(% -)
48 $>X% ii %@$"f;=)=
49 (/-
4< >("(?\(> : %@$"f;=)=
lB3+< ,8(B' >$&1'BZ ?' 5$W' ,8' 2$&& 'G$2,&6 &3W' ?' 030 3+ ,8' 3+,'/Q/','/
Hk+,,>"#$]B $/+,I"
['/' 3B 8(? ?' 'G3, ,8' UD &((Q" O$28 Q/(</$5 51B, '+0 ?3,8 ,83B 3+B,/12,3(+"
56 'T(/ JFHNJG
58 >(@_>/ %@$"f;=)=
59
5< (/-
67
@3+$&&6Z ?' 5(>' )(/?$/0 (+' 5(/' %6,' ,( ,8' +'G, (Q'/$+0Z ,( Q/'Q$/' )(/ ,8'
+'G, ,1/+ 3+ ,8' &((Q"
60 ?= V: !
64 (/-
65 (/-
66 (/-
;' 2$+ +(? 'G'21,' $ B1%B', () ,8' &$+<1$<' ?' 35Q&'5'+,'0 B( )$/ %6 Q$BB3+<
,8' Q/(Q'/ %6,'T2(0' ,( ,8' UD" C',B 0( ,83B ?3,8 $ >'/6 B35Q&' Q3'2' () 2(0'E 1 ^
Y H'i13>$&'+, ,( 12^7Y8I" #( $283'>' ,83BZ ?' ?3&& 2$&& ,8' ^ 5',8(0 (+ ,8'
+15%'/ 1 Q$BB3+< ,8' $/<15'+, Y" #83B 2$+ %' 0(+' 3+ ,8' UD 1B3+< $ kPBB
3+B,/12,3(+"
#8' kPBB 3+B,/12,3(+ ,$W'B ,?( (Q'/$+0BZ ,8' 5',8(0 ,( 2$&& H^I $+0 ,8' +15%'/ ()
$/<15'+,B ?']/' Q$BB3+< H1I" ., 'GQ'2,B ,?( ,83+<B ,( %' (+ ,8' B,$2W %')(/' %'3+<
2$&&'0E ,8' /'2'3>'/ () ,8' 5',8(0 2$&& H!IZ )(&&(?'0 %6 $&& ,8' $/<15'+,B HYI" .+
B155$/6Z ,( 'G'21,' 1 ^ YZ ?']&& Q1B8 ! $+0 - (+ ,8' B,$2W $+0 'G'21,' kPBB
l^mN 1"
In file !"#$%+$,+%91-+$,+)(*
! e[@(")-( : D
, b )=")-( )=(>$/-% %@$"f $.@(> -(%">?=@?)/
0 b ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
4 yNL{`GNOPFJC !C b %@$"f : D!K =_%T !C @T( >("(?\(> ). 1V1
5 yNL{`GNOPFJC ,C b %@$"f : D!C ,K =_%T ,C @T( $>X_*(/@ .)> 1V1
6 o&YYC 1V1C !C b %@$"f : D0K "$## !;VA,B $/- =_%T @T( >(%_#@
8 JFHNJG b %@$"f : DK
9 K
<
!7 >(%_#@ : xO;/(';>_/Ae[@(")-(B
!!
!, $%%(>@`(v_$# 0C >(%_#@;>_e[`\$#_(
N(? ,8$, ?' 8$>' (1/ UDZ ?' +''0 ,( ,/$+B&$,' (1/ ,/'' () +(0'B ,( %6,'T2(0'"
7&B( W+(?+ $B 2(5Q3&3+<" #81BZ ,8' +'G, B,'Q 3B ,( 2/'$,' $ %6,'T2(0' 2(5Q3&'/"
COMPILATION
#8' $2, () ,/$+B&$,3+< 6(1/ 2(0' )/(5 (+' )(/5$, ,( $+(,8'/ 3B 2$&&'0 2(5Q3&$,3(+"
*(5Q3&3+< $ ,/'' () +(0'B ,( %6,'T2(0'Z %6,'T2(0' ,( 5$283+' 2(0'Z /'?/3,3+<
a$>$42/3Q, (/ '>'+ ,'5Q&$,' '+<3+'B &3W' [7DCZ 4744 (/ CO44 $/' $&& 0(+' %6 $
2(5Q3&'/"
!" *(5Q3&3+< ,( 6(1/ (?+ 3+,'/5'03$,' )(/5$, $+0 %13&0 $+ 3+,'/Q/','/ )(/ 3,"
-" *(5Q3&3+< ,( $+ 'G3B,3+< )(/5$,E
▪ 7+(,8'/ &$+<1$<' H(/ 5$/W1QIE a$>$B2/3Q,Z [#DCZ *44
▪ aUD %6,'T2(0' HB'' 74DI
▪ K3/'2,&6 ,( 5$283+' 2(0'"
@3/B,Z ?']&& &((W $, ,8' )3/B, (Q,3(+" #8' 3+,'/5'03$,' )(/5$, ?3&& %' (1/ (?+ %6,'T
2(0' )(/5$," #8' 3+,'/Q/','/ () ,8$, %6,'T2(0' ?3&& %' ,8' UD ?' %13&, 3+ ,8'
Q/'>3(1B 28$Q,'/"
;']&& ,8'+ 2/'$,' $ 5$283+' 2(0' 2(5Q3&'/ )(/ $ B1%B', () (1/ &$+<1$<' 1B3+<
CCUD"
COMPILING TO BYTE-CODE
In file !"#$%*2+$!"#$-!"135&$()(*
! >(v_?>( 1=$>%(>1
!! "#$%% P[@(")-(o)*=?#(>
!, -(. ?/?@?$#?j(
!0 z=$>%(> : y$>%(>;/('
!4 ze[@(")-( : DK
!5 (/-
!6
!8 -(. ")*=?#(A")-(B
!9 z=$>%(>;=$>%(A")-(B;")*=?#(A%(#.B
!< (*?@ JFHNJG
,7 ze[@(")-(
,! (/-
,,
,0 -(. (*?@A)=")-(C W)=(>$/-%B b N%$X(+ (*?@ nyonEFC )=(>$/-!C )=(>$/-,C ;;;C )=(>$/-|
,4 ze[@(")-( ii )=")-(
,5 ze[@(")-(;")/"$@ )=(>$/-%
,6 (/-
,8 (/-
C3W' 3+ ,8' 3+,'/Q/','/Z ?' /'(Q'+ '$28 +(0' 2&$BB B1QQ(/,'0 %6 (1/ 2(5Q3&'/ $+0
$00 $ !"&6',$ 5',8(0" .+B,'$0 () Q$BB3+< $+ '>$&1$,3(+ 2(+,'G,Z &3W' 3+ ,8'
3+,'/Q/','/Z ?' Q$BB ,8' 3+B,$+2' () o9*$!"#$k"&6',$- B( ,8$, ?' 2$+ 2$&& 3,B
$&'* 5',8(0 ,( <'+'/$,' ,8' %6,'T2(0'"
00 "#$%% G)-(%
04 -(. ")*=?#(A")*=?#(>B
05 /)-(%;($"T -) g/)-(g
06 /)-(;")*=?#(A")*=?#(>B
08 (/-
09 (/-
0< (/-
47
4! "#$%% G_*e(>G)-(
4, -(. ")*=?#(A")*=?#(>B
40 ")*=?#(>;(*?@ yNL{`GNOPFJC \$#_(
44 (/-
45 (/-
J'5'5%'/ 8(? ?' 35Q&'5'+,'0 ,8' kPBB 3+B,/12,3(+ 3+ ,8' UD\ ., 'GQ'2,B ,?(
,83+<B (+ ,8' B,$2W ?8'+ 2$&&'0E ,8' /'2'3>'/ $+0 ,8' $/<15'+,B" *(5Q3&3+< ,8(B'
?3&& '53, ,8' Q/(Q'/ %6,'2(0'Z ?8328 ?3&& 3+ ,1/+ Q1B8 ,8' Q/(Q'/ >$&1'B (+ ,8'
B,$2W"
=+' 35Q(/,$+, ,83+< ,( +(,' $%(1, (1/ 2(5Q3&'/" 7&,8(1<8 3, 3B >'/6 2&(B' ,( 8(? $
/'$& 2(5Q3&'/ ?(/WZ B(5' Q$/,B 8$>' %''+ B35Q&3)3'0" N(/5$&&6Z ?' ?(1&0 +(,
B,(/' ,8' 5',8(0 +$5' 3+ ,8' %6,'T2(0' $B 3BZ %1, 3+B,'$0 3+ $ &3,'/$& ,$%&'" #8'+
?']0 /')'/ ,( ,8$, 5',8(0 1B3+< 3,B 3+0'G 3+ ,8' &3,'/$& ,$%&'"
O<"E
C3,'/$& ,$%&'E : H`R i6-'(*i <
.+B,/12,3(+BE kPBB `N 1 H)3/B, (Q'/$+0 %'3+< ,8' 3+0'G () rQ/3+,]I
6! "#$%% o$##G)-(
6, -(. ")*=?#(A")*=?#(>B
60 ?. >("(?\(>
64 >("(?\(>;")*=?#(A")*=?#(>B
65 (#%(
66 ")*=?#(>;(*?@ yNL{`LFYI b E(.$_#@ @) %(#. ?. /) >("(?\(>
68 (/-
69
In file !"#$%+$,+%*2+$!"#$-!"135&$(-+$,+)(*
! e[@(")-( : P[@(")-(o)*=?#(>;/(';")*=?#(A1=>?/@A!V,B1B
,
0 (]=("@(-`e[@(")-( : D
4 b M(/(>$@(- e[@(")-(
5 b
6 b )=")-( )=(>$/-% %@$"f $.@(> -(%">?=@?)/
8 b ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
9 yNL{`LFYIC b %@$"f : D%(#.K =_%T @T( >("(?\(> ). 1=>?/@1
< yNL{`GNOPFJC !C b %@$"f : D!K
!7 yNL{`GNOPFJC ,C b %@$"f : D%(#.C !C ,K =_%T @T( $>X_*(/@ .)> 1V1
!! o&YYC 1V1C !C b %@$"f : D%(#.C 0K "$## !;VA,B $/- =_%T @T( >(%_#@
!, o&YYC 1=>?/@1C !C b %@$"f : DK "$## %(#.;=>?/@A0B
!0 JFHNJG
!4 K
!5
=1/ &$+<1$<' 1B'B K6+$532 #6Q3+<Z ?8328 5'$+B ,8' ,6Q' () $ >$/3$%&' 3B
0','/53+'0 06+$532$&&6 $, /1+,35' $+0 2$+ 28$+<'" ;3,8 4,$,32 #6Q3+<Z ,8' ,6Q' ()
$ >$/3$%&' 3B 0','/53+'0 $, 2(5Q3&' ,35' H6(1 0'2&$/' 3, 3+ 6(1/ 2(0'I $+0 2$+],
28$+<'"
@(/ 'G$5Q&'Z ?8'+ 0'2&$/3+< $ >$/3$%&' 3+ a$>$Z 6(1 +''0 ,( 0')3+' 3,B ,6Q'E
! ?/@ $ : !^
#8' '(* Q$/, 3B ,'&&3+< ,8' 2(5Q3&'/ ,8$, ,83B >$/3$%&' 2$+ (+&6 8(&0 3+,'<'/ >$&1'B"
#83B 8$B ,?( $0>$+,$<'BE
▪ ., $&&(?B ,8' 2(5Q3&'/ ,( 28'2W ,8$, ,8' >$&1'B 6(1 $BB3<+ ,( ,8$, >$/3$%&' $/'
3+0''0 3+,'<'/B H#6Q' *8'2W3+<I"
▪ ., $&&(?B ,8' 2(5Q3&'/ ,( (Q,353f' 6(1/ 2(0' $ &(, 5(/'"
N(,' ,8$, ,83B $QQ/($28 3B $&B( Q(BB3%&' ?3,8 K6+$532 #6Q3+< %6 <$,8'/3+< 1B$<'
B,$,3B,32B )/(5 (1/ /1+,35' $+0 (Q,353f3+< )(/ ,8' 5(B, 2(55(+ ,6Q'"
#8' 28$&&'+<' ?3,8 5$283+' 2(0' 3B ,8$, 3,B )(/5$, >$/3'B 0'Q'+03+< (+ ?8328 ,6Q'
() Q/(2'BB(/ 6(1/ 5$283+' 3B /1++3+<" :1, ,8$+W)1&&6Z (,8'/ Q'(Q&' 8$>' ,$2W&'0
,83B Q/(%&'5 )(/ 1B $+0 2/'$,'0 &3%/$/3'B ,( <'+'/$,' 5$283+' 2(0' $2/(BB $&& ,6Q'B
() Q/(2'BB(/B ?3,8 (+' B3+<&' 7A."
=+' () ,8' 5(B, $0>$+2'0 &3%/$/6 )(/ 0(3+< ,83B 3B CCUD" ;']&& 1B' 3, >3$ 3,B J1%6
%3+03+<B"
L."2# GGM> @%,1 D$94
;']&& %' 1B3+< CCUD J1%6 %3+03+<B ,( 2(5Q3&' $ B1%B', () 7?'B(5' ,( 5$283+'
2(0' (+ ,8' )&6" [(?'>'/Z 2(5Q3&3+< $ )1&& &$+<1$<' 3B 5128 5(/' 28$&&'+<3+< $B
5(B, Q$/,B () ,8' /1+,35' 8$>' ,( %' /'?/3,,'+ ,( %' $22'BB3%&' )/(5 3+B30' CCUD"
@3/B,Z 6(1]&& +''0 ,( 3+B,$&& CCUD $+0 ,8' J1%6 %3+03+<B" L(1 2$+ )3+0 3+B,/12,3(+B
(+ /1%6T&&>5 Q/(c'2, Q$<'" .+B,$&&3+< CCUD 2$+ ,$W' i13,' B(5' ,35'Z 5$W' B1/'
6(1 <(, 6(1/B'&) $ ,$B,6 %'>'/$<' %')(/' &$1+283+< ,8' 2(5Q3&$,3(+"
#83B 3B ,8' 'i13>$&'+, () ,8' )(&&(?3+< * 2(0'" .+ )$2,Z 3, ?3&& <'+'/$,' B353&$/
5$283+' 2(0'"
In file !"#$%&&91-!"135&$()(*
! >(v_?>( 1>_e[X(*%1
, >(v_?>( 1=$>%(>1
0 >(v_?>( 1/)-(%1
4
5 >(v_?>( 1##\*R")>(1
6 >(v_?>( 1##\*R(]("_@?)/`(/X?/(1
8 >(v_?>( 1##\*R@>$/%.)>*%R%"$#$>1
9
< YYxO;?/?@`]96
!7
!! "#$%% YYxOo)*=?#(>
@3/B, ?' 3+3,3$&3f' B(5' 0$,$ ,6Q'B ?']&& 1B' 01/3+< 2(5Q3&$,3(+" :(,8 2(//'BQ(+0 ,(
2(55(+ * ,6Q'B"
;8'+ B,(/3+< $ >$&1' 3+ $ &(2$& >$/3$%&'Z CCUD ?3&& /',1/+ %$2W $ Q(3+,'/" ;' +''0
,( W''Q ,/$2W () ,8' 5$QQ3+< &(2$& >$/3$%&' +$5' st Q(3+,'/" #83B 3B ?8$, ,8'
)(&&(?3+< [$B8 0('B"
,7 $@@>`>($-(> +#)"$#%
,!
:6 0')$1&, ,8' )1+2,3(+ ?3&& %' ,8' B,$+0$/0 * '+,/6 Q(3+,E /"'# &+'(78"
0, z._/"@?)/ : ._/"@?)/ gg
00 z*)-_#(;._/"@?)/%;/$*(-A1*$?/1B gg b E(.$_#@ @T( ._/"@?)/ @) t*$?/t
04 z*)-_#(;._/"@?)/%;$--A1*$?/1C DKC YYxO;x)?-B
05
:')(/' 2(5Q3&3+< (1/ 2(0'Z ?']&& 0'2&$/' 'G,'/+$& * )1+2,3(+B ?']&& 2$&& )/(5
?3,83+ (1/ Q/(</$5" ['/' 3B ?8'/' (1/ 2(5Q3&'/ ?3&& 28'$, i13,' $ %3," .+B,'$0 ()
/'35Q&'5'+,3+< (1/ /1+,35' 3+B30' ,8' CCUD 5(01&'Z ?' ?(+], B1QQ(/, $+6 () ,8'
==A )'$,1/'B $+0 (+&6 $&&(? 2$&&3+< %$B32 * )1+2,3(+B ?' 0'2&$/' 8'/'Z +$5'&6
'(* 6T*)7!W+-b8"
46 -(. =>($*e#(
48 ._/ : z*)-_#(;._/"@?)/%;$--A1=_@%1C Dyo{&JKC 2GHB
49 ._/;#?/f$X( : +(]@(>/$#
4< (/-
57
7&?$6B )3+3B8 ,8' )1+2,3(+ ?3,8 $ -$*T-("
5, -(. .?/?%T
50 ze_?#-(>;>(@`\)?-
54 (/-
55
;']&& $&B( +''0 ,( &($0 &3,'/$& >$&1'B $+0 %' $%&' ,( 2$&& )1+2,3(+B" CCUD <(, 1B
2(>'/'0 ,8'/'"
58 -(. /('`%@>?/XA\$#_(B
59 ze_?#-(>;X#)e$#`%@>?/X`=)?/@(>A\$#_(B
5< (/-
67
6! -(. /('`/_*e(>A\$#_(B
6, YYxO++2/@A\$#_(B
60 (/-
64
o''Q 3+ 53+0 ?']/' 2(5Q3&3+< ,( 5$283+' 2(0' ,8$, ?3&& /1+ /3<8, 3+B30' ,8'
Q/(2'BB(/" #8'/' 3B +( 'G,/$ &$6'/ () $%B,/$2,3(+ 8'/'" ;8'+ $BB3<+3+< &(2$&
>$/3$%&'BZ ?' )3/B, +''0 ,( $&&(2$,' 5'5(/6 )(/ 3," #83B 3B ?8$, ?' 0( 8'/' 1B3+<
+,,"!+ $+0 ,8'+ B,(/' ,8' >$&1' $, ,8$, $00/'BB 3+ 5'5(/6"
97 -(. #)$-A/$*(B
9! =@> : z#)"$#%D/$*(K
9, ze_?#-(>;#)$-A=@>C /$*(B b Y)$- e$"f @T( \$#_( %@)>(- .)> @T$@ #)"$#;
90 (/-
94
D',8(0B 0')3+'0 3+B30' (1/ /1+,35' $/' 2(5Q3&'0 ,( )1+2,3(+B H&3W' * )1+2,3(+BI"
@1+2,3(+B $/' 2(5Q3&'0 1B3+< ,8'3/ (?+ BBOpk"&6',$- 3+B,$+2' ,( B2(Q' ,8'3/
&(2$& >$/3$%&'B $+0 2(0' %&(2WB"
99 -(. ._/"@?)/A/$*(B
9< ._/" : z*)-_#(;._/"@?)/%;$--A/$*(C DKC YYxO;x)?-B
<7 ")*=?#(> : YYxOo)*=?#(>;/('Az*)-_#(C ._/"B
<! [?(#- ")*=?#(>
<, ")*=?#(>;.?/?%T
<0 (/-
<4
=+' () ,8' %3<<'B, $0>$+,$<' () 1B3+< CCUD $+0 +(, /(&&3+< (1/ (?+3+< 5$283+'
2(0' 2(5Q3&'/ 3B ,8$, ?']/' $%&' ,( ,$W' $0>$+,$<' () $&& ,8' (Q,353f$,3(+B"
*(5Q3&3+< ,( 5$283+' 2(0' 3B ,8' p'$B6q HB1Q'/ <3$+, i1(,'B 8'/'I Q$/," :1, %6
0')$1&, 6(1/ 2(0' ?3&& +(, %' ,8$, )$B,Z 6(1 +''0 ,( (Q,353f' 3," #83B 3B ?8$, ,8' .IY
(Q,3(+ () 6(1/ * 2(5Q3&'/ 0('B" ['/' ?']&& (+&6 1B' (+' (Q,353f$,3(+ $B $+
'G$5Q&'Z %1, CCUD 8$B $ &(, () ,8'5"
['/' 3B ?8'/' ,8' 5$<32 8$QQ'+B_ ;' a.# 2(5Q3&' $+0 /1+ ,8' CCUD 2(0'" a.#Z )(/
c1B,T3+T,35'Z %'2$1B' ?' 2(5Q3&' 3, /3<8, %')(/' ?' 'G'21,' 3, $B (QQ(B'0 ,( 7=#Z
)(/ $8'$0T()T,35' ?8'/' ?' 2(5Q3&' 3, 1Q)/(+,Z &3W' *"
!!7 -(. >_/
!!! z(/X?/(;>_/`._/"@?)/Az._/"@?)/B
!!, (/-
!!0
N(? ,8$, ?' 8$>' (1/ 2(5Q3&'/ /'$06 ?' 1B' ,8' B$5' $QQ/($28 $B %')(/' $+0
/'(Q'+ $&& ,8' B1QQ(/,'0 +(0'B $+0 35Q&'5'+, 8(? '$28 (+' 3B 2(5Q3&'0"
#( W''Q ,83+<B B35Q&'Z (1/ 2(5Q3&'/ (+&6 B1QQ(/,B $ B1%B', () (1/ 7?'B(5'
&$+<1$<'" @(/ 'G$5Q&'Z ?' (+&6 B1QQ(/, 2$&&3+< 5',8(0B (+ )$,5 $+0 +(, (+
<3>'+ /'2'3>'/B" ;' $&B( 0(+], B1QQ(/, 5',8(0 Q$/$5','/B ?8'+ 0')3+3+< 5',8(0B"
#83B 3B ?86 ?' /$3B' $+ '//(/ 3+ ,8' )(&&(?3+< +(0'B" 4'' $, ,8' '+0 () ,83B 28$Q,'/
)(/ 5(/' 0',$3&B (+ ?8$, 3B +(, B1QQ(/,'0 $+0 ?8'/' ,( <( )/(5 8'/'"
;3,8 ,8' 2(5Q3&'/ 3+,'</$,'0 ?3,8 ,8' +(0'BZ ?' 2$+ +(? 2(5Q3&' $ B35Q&'
Q/(</$5"
In file !"#$%+$,+%&&91-!"135&$(-+$,+)(*
! ")-( : iiZonEF
, -(. %$[`?@+
0 ] : 1HT?% ?% ")*=?#(-k1
4 =_@%A]B
5 %$[`?@AB
6 onEF
8
!! b o)*=?#( ?@
!, ")*=?#(> : YYxOo)*=?#(>;/('
!0 ")*=?#(>;=>($*e#(
!4 /)-(;##\*`")*=?#(A")*=?#(>B
!5 ")*=?#(>;.?/?%T
!6
J'5'5%'/ ,8$, ,8' 2(5Q3&'/ (+&6 B1QQ(/,B $ B1%B', () (1/ 7?'B(5' &$+<1$<'" @(/
'G$5Q&'Z (%c'2,T(/3'+,'0 Q/(</$553+< 3B +(, B1QQ(/,'0" #( 35Q&'5'+, ,83BZ ,8'
/1+,35' $+0 B,/12,1/'B 1B'0 ,( B,(/' ,8' 2&$BB'B $+0 (%c'2,B 8$>' ,( %' &($0'0 )/(5
3+B30' ,8' CCUD 5(01&'" L(1 2$+ 0( ,83B %6 2(5Q3&3+< 6(1/ /1+,35' ,( CCUD
%6,'T2(0'Z '3,8'/ ?/3,3+< 3, 3+ * $+0 1B3+< ,8' *T,(TCCUD 2(5Q3&'/ B83QQ'0 ?3,8
CCUD (/ %6 ?/3,3+< 6(1/ /1+,35' 3+ $ B1%B', () 6(1/ &$+<1$<' ,8$, 2$+ %' 2(5Q3&'0
,( CCUD %6,'T2(0'"
MIO, A MINIMALIST HOMOICONIC
LANGUAGE
N(,' ,8$, ,83B 28$Q,'/ 3B $ &3,,&' 5(/' $0>$+2'0 $+0 /'i13/'B $ 0''Q'/
1+0'/B,$+03+< () J1%6" L(1 53<8, +''0 ,( /'$0 3, $+0 Q&$6 ?3,8 ,8' 2(0' $ )'?
,35'B %')(/' )1&&6 1+0'/B,$+03+< 8(? ,83B &$+<1$<' ?(/WB" L(1 2$+ B$)'&6 BW3Q ,83B
28$Q,'/ 3) 6(1]/' (+&6 3+,'/'B,'0 3+ 2/'$,3+< $ pB,$+0$/0q &$+<1$<' &3W' 7?'B(5'"
[(?'>'/ 3) 6(1]0 &3W' ,( '+,'/ ,8' )$B23+$,3+< ?(/&0 () 8(5(32(+323,6Z Q/'Q$/' 6(1/
%/$3+ ,( %' 5'&,'0_
HOMOICOWHAT?
;']&& %13&0 $ ,3+6 &$+<1$<' 2$&&'0 D3( H)(/ 53+3T.(I" ., 3B 0'/3>'0 )/(5 ,8' .(
&$+<1$<'" #8' 2'+,/$& 2(5Q(+'+, () (1/ &$+<1$<' ?3&& %' 5'BB$<'B" D'BB$<'B $/' $
0$,$ ,6Q' 3+ D3( $+0 $&B( 8(? Q/(</$5B $/' /'Q/'B'+,'0 $+0 Q$/B'0Z ,81B 3,B
8(5(32(+323,6" ;']&& $<$3+ 35Q&'5'+, ,8' 2(/' () (1/ &$+<1$<' 3+ J1%6Z %1, ,83B
(+' ?3&& ,$W' &'BB ,8$+ -YY &3+'B () 2(0'"
! )eq("@;*(@T)-!;*(@T)-,A$>X_*(/@B
THE RUNTIME
l+&3W' 7?'B(5' %1, &3W' a$>$B2/3Q,Z D3( 3B Q/(,(,6Q'T%$B'0" #81BZ 3, 0('B+], 8$>'
$+6 2&$BB'B (/ 3+B,$+2'B" ;' 2/'$,' +'? (%c'2,B %6 2&(+3+< 'G3B,3+< (+'B" =%c'2,B
0(+], 8$>' 2&$BB'BZ %1, Q/(,(,6Q'B H6-"*"IZ ,8'3/ Q$/'+, (%c'2,"
D3( (%c'2,B $/' &3W' 032,3(+$/3'B (/ 8$B8'B H$<$3+Z 5128 &3W' a$>$B2/3Q,I" #8'6
2(+,$3+ B&(,B 3+ ?8328 ?' 2$+ B,(/' 5',8(0B $+0 >$&1'B B128 $B B,/3+<BZ +15%'/B
$+0 (,8'/ (%c'2,B"
In file !"#$%15"%"*6$!+)(*
! *)-_#( O?)
, "#$%% neq("@
0 $@@>`$""(%%)> +%#)@%C +=>)@)C +\$#_(
4
04 b HT( )/#[ '$[ @) ">($@( $ /(' )eq("@ ?/ O?) ?% @) "#)/( $/ (]?%@?/X )/(;
05 -(. "#)/(A>_e[`\$#_(:/?#B
06 neq("@;/('A%(#.C >_e[`\$#_(B
08 (/-
09 (/-
0< (/-
D3( Q/(</$5B $/' $ ,/'' () 5'BB$<'B" O$28 5'BB$<' %'3+< $ ,(W'+" #8' )(&&(?3+<
Q3'2' () 2(0'E
! 1T(##)1 =>?/@
, ! VA,B =>?/@
! O(%%$X(;/('A31T(##)13C
, O(%%$X(;/('A1=>?/@1C
0 O(%%$X(;/('A1U/1C
4 O(%%$X(;/('A1!1C
5 O(%%$X(;/('A1V1C D
6 O(%%$X(;/('A1,1B
8 KC
9 O(%%$X(;/('A1=>?/@1BBBBBB
#83B 3B (1/ 74# 5128 &3W' ,8' ,/'' () +(0'B (1/ 7?'B(5' Q$/B'/ Q/(012'0" OG2'Q,
3+ ,83B 2$B' ?' ,/$+B&$,' (+'T,(T(+' ,(W'+B ,( 5'BB$<'B" N(,32' &3+' %/'$WB H$+0
0(,BI $/' $&B( 5'BB$<'B" ;8'+ 'G'21,'0Z ,8'6 B35Q&6 /'B', ,8' /'2'3>'/ () ,8'
5'BB$<'"
#83B /'B1&,B 3+ ,8' B$5' %'8$>3(/ $B 3+ &$+<1$<'B B128 $B 7?'B(5'Z ?8'/' '$28
&3+' 3B $+ 'GQ/'BB3(+"
#8' 1+3)32$,3(+ () $&& ,6Q'B () 'GQ/'BB3(+ 3+,( (+' 0$,$ ,6Q' 5$W'B (1/ &$+<1$<'
'G,/'5'&6 '$B6 ,( Q$/B' HB'' 6+-)$K+,, 5',8(0 3+ ,8' 2(0' %'&&(?I" D'BB$<'B
$/' 5128 &3W' ,(W'+BZ ,81B (1/ Q$/B3+< 2(0' ?3&& %' B353&$/ ,( ,8' (+' () (1/ &'G'/
3+ 7?'B(5'" ;' 0(+], '>'+ +''0 $ </$55$/ ?3,8 Q$/B3+< /1&'B_
In file !"#$%15"%1$,,0/$)(*
! *)-_#( O?)
, b O(%%$X( ?% $ @>(( ). @)f(/% =>)-_"(- 'T(/ =$>%?/X;
0 b ! =>?/@;
4 b ?% =$>%(- @)+
5 b O(%%$X(;/('A1!1C
6 b O(%%$X(;/('A1=>?/@1BB
8 b m)_ "$/ @T(/ V"$##V @T( @)= #(\(# O(%%$X( @) (\$# ?@;
9 "#$%% O(%%$X( i neq("@
< $@@>`$""(%%)> +/(]@C +/$*(C +$>X%C +#?/(C +"$"T(-`\$#_(
!7
,8 %_=(>AY)ee[D1O(%%$X(1KB
,9 (/-
,<
60 -(. @)`%A#(\(#:7B
64 % : 1 1 W #(\(#
65 % ii 1iO(%%$X( z/$*(:bcz/$*(d1
66 % ii 1C z$>X%:1 V z$>X%;?/%=("@ _/#(%% z$>X%;(*=@[p
68 % ii 1C z/(]@:U/1 V z/(]@;@)`%A#(\(# V !B ?. z/(]@
69 % V 1h1
6< (/-
87 $#?$% ?/%=("@ @)`%
8!
88 =>?\$@(
89 -(. %(#.;=$>%(`$##A")-(C #?/(B
8< ")-( : ")-(;%@>?=
97 ? : 7
9! *(%%$X( : /?#
9, *(%%$X(% : DK
90
94 b y$>%?/X ")-(; x(>[ %?*?#$> @) @T( Y(](> '( e_?#@ .)> &'(%)*(;
95 'T?#( ? i ")-(;%?j(
96 "$%( ")-(D?;;Z!K
98 'T(/ RU&A1Ds1KW1BRC b %@>?/X
99 RU&AU-VBRC b /_*e(>
9< RU&AU;BVRC b -)@
<7 RU&AU/BVRC b #?/( e>($f
<! RU&AU'VBR b /$*(
<, * : O(%%$X(;/('Aw!C #?/(B
<0 ?. *(%%$X(%;(*=@[p
<4 *(%%$X(% ii *
<5 (#%(
<6 *(%%$X(;/(]@ : *
<8 (/-
<9 #?/( V: w!;")_/@A1U/1B
<< *(%%$X( : *
!77 ? V: w!;%?j( Z !
!7! 'T(/ RU&AUAU%WBR b $>X_*(/@%
!7, %@$>@ : ? V w!;%?j(
!70 #(\(# : !
!74 'T?#( #(\(# h 7 uu ? i ")-(;%?j(
!75 ? V: !
!76 #(\(# V: ! ?. ")-(D?K :: pUA
!78 #(\(# Z: ! ?. ")-(D?K :: pUB
!79 (/-
!7< #?/( V: w!;")_/@A1U/1B
!!7 ")-(`"T_/f : ")-(D%@$>@;;?Z!K
!!! *(%%$X(;$>X% : =$>%(`$##A")-(`"T_/fC #?/(B
!!, #?/( V: ")-(`"T_/f;")_/@A1U/1B
!!0 'T(/ RU&CAU%WBR
!!4 #?/( V: w!;")_/@A1U/1B
!!5 *(%%$X(%;")/"$@ =$>%(`$##A")-(D?V!;;Z!KC #?/(B
!!6 e>($f
!!8 'T(/ RU&AU%VBRC b ?X/)>( 'T?@(%=$"(
!!9 RU&Ab;WwBR b ?X/)>( ")**(/@%
!!< #?/( V: w!;")_/@A1U/1B
!,7 ? V: w!;%?j( Z !
!,! (#%(
!,, >$?%( 1N/f/)'/ "T$> bc")-(D?K;?/%=("@d $@ #?/( bc#?/(d1
!,0 (/-
!,4 ? V: !
!,5 (/-
!,6 *(%%$X(%
!,8 (/-
!,9 (/-
!,< (/-
#8' (+&6 53BB3+< Q$/, () (1/ &$+<1$<' $, ,83B Q(3+, 3B $ 5',8(0" #83B ?3&& $&&(? 1B
,( B,(/' $ %&(2W () 2(0' $+0 'G'21,' 3, &$,'/ 3+ 3,B (/3<3+$& 2(+,'G, $+0 (+ ,8'
/'2'3>'/"
:1,Z ,8'/' ?3&& %' (+' BQ'23$& ,83+< $%(1, (1/ 5',8(0 $/<15'+,B" #8'6 ?(+], %'
35Q&323,&6 '>$&1$,'0" @(/ 'G$5Q&'Z 2$&&3+< &$*W"#7C8 ?(+], '>$&1$,' C ?8'+
2$&&3+< ,8' 5',8(0Z 3, ?3&& Q$BB 3, $B $ 5'BB$<'" #83B 3B 2$&&'0 &$f6 '>$&1$,3(+" ., ?3&&
$&&(? 1B ,( 35Q&'5'+, 2(+,/(& B,/12,1/' /3<8, )/(5 3+B30' (1/ &$+<1$<'" ;8'+ $+
$/<15'+, +''0B ,( %' '>$&1$,'0Z ?' 0( B( 'GQ&323,&6 %6 2$&&3+< ,8' 5',8(0
$/+,K+-%7+-%K'(#$C8" C$f6 '>$&1$,3(+ $&B( '+$%&'B 35Q&'5'+,3+< 5$2/(B 3+
(1/ &$+<1$<'"
In file !"#$%15"%1$+7"#)(*
! *)-_#( O?)
, "#$%% O(@T)- i neq("@
0 -(. ?/?@?$#?j(A")/@(]@C *(%%$X(B
4 z-(.?/?@?)/`")/@(]@ : ")/@(]@
5 z*(%%$X( : *(%%$X(
6 %_=(>AY)ee[D1O(@T)-1KB
8 (/-
9
N(? ,8$, ?' 8$>' $&& ,8' (%c'2,B 3+ Q&$2' ?']/' /'$06 ,( %((,B,/$Q (1/ /1+,35'"
=1/ 7?'B(5' &$+<1$<' 8$0 $ k"(*$C* (%c'2,Z ?8328 B'/>'0 $B ,8' '+>3/(+5'+,
() 'G'21,3(+" .+ D3(Z ?']&& B35Q&6 1B' $+ (%c'2, $B ,8' 2(+,'G, () '>$&1$,3(+" C(2$&
>$/3$%&'B ?3&& %' B,(/'0 3+ ,8' B&(,B () ,8$, (%c'2," #8' /((, (%c'2, 3B 2$&&'0 ,8'
B"XX9" :'2$1B' j 3,]B ?8'/' $&& ,8' (%c'2,B 5'',Z 3+ ,8' &(%%6" H72,1$&&6Z ,8' ,'/5
3B ,$W'+ )/(5 .("I
In file !"#$%15"%*""+,+(03)(*
! *)-_#( O?)
, b P))@%@>$=
0 )eq("@ : neq("@;/('
4
!6 b 2/@>)-_"?/X @T( Y)ee[k ST(>( $## @T( .$/@$%@?" )eq("@% #?\( $/- $#%) @T( >))@
!8 b ")/@(]@ ). (\$#_$@?)/;
!9 Y)ee[ : )eq("@;"#)/(
!<
,7 Y)ee[D1Y)ee[1K : Y)ee[
,! Y)ee[D1neq("@1K : )eq("@
,, Y)ee[D1/?#1K : )eq("@;"#)/(A/?#B
,0 Y)ee[D1@>_(1K : )eq("@;"#)/(A@>_(B
,4 Y)ee[D1.$#%(1K : )eq("@;"#)/(A.$#%(B
,5 Y)ee[D1G_*e(>1K : )eq("@;"#)/(A7B
,6 Y)ee[D1L@>?/X1K : )eq("@;"#)/(A11B
,8 Y)ee[D1Y?%@1K : )eq("@;"#)/(ADKB
,9 Y)ee[D1O(%%$X(1K : )eq("@;"#)/(
,< Y)ee[D1O(@T)-1K : )eq("@;"#)/(
07
@3/B,Z 8'/']B ?8$, ?']/' $&/'$06 $%&' ,( 0(E 2&(+3+< (%c'2,BZ B',,3+< $+0 <',,3+< B&(,
>$&1'B"
In file !"#$%+$,+%15"%""3)15"
['/']B ?8'/' ,8' &$f6 $/<15'+, '>$&1$,3(+ 2(5'B 3+" ;']/' $%&' ,( 35Q&'5'+, ,8'
+(# $+0 "- (Q'/$,(/B )/(5 3+B30' (1/ &$+<1$<'"
In file !"#$%15"%*""&$0.)15"
In file !"#$%+$,+%15"%*""&$0.)15"
In file !"#$%15"%5:)15"
0 %(@`%#)@A1?.1C *(@T)-A
4 b (\$# ")/-?@?)/
5 %(@`%#)@A1")/-?@?)/1C (\$#`$>XA7BB
6 ")/-?@?)/ $/-A b ?. @>_(
8 (\$#`$>XA!B
9 B
< ")/-?@?)/ )>A b ?. .$#%( A(#%(B
!7 (\$#`$>XA,B
!! B
!, BB
In file !"#$%+$,+%15"%5:)15"
! ?.A@>_(C
, 1")/-?@?)/ ?% @>_(1 =>?/@C
0 b (#%(
4 1/)=(1 =>?/@
5 B
6 b :h ")/-?@?)/ ?% @>_(
8
9 ?.A.$#%(C
< 1/)=(1 =>?/@C
!7 b (#%(
!! 1")/-?@?)/ ?% .$#%(1 =>?/@
!, B
!0 b :h ")/-?@?)/ ?% .$#%(
'5 0')3+'0 )/(5 3+B30' (1/ &$+<1$<'_
7&& /3<8,j 3,]B ?(/W3+<Z %1, ,8' B6+,$G 3B +(, $B +32' $B 7?'B(5'" 7+ $003,3(+
?(1&0 %' ?/3,,'+ $BE 1 ^7Y8 )(/ 'G$5Q&'Z $+0 ?' +''0 ,( 1B' )$*K),"* )(/
$BB3<+5'+,Z +(,83+< ,( 35Q/'BB 6(1/ )/3'+0B $+0 )('B"
#( B(&>' ,83B Q/(%&'5Z ?' 2$+ $<$3+ %(//(? )/(5 .( $+0 35Q&'5'+, (Q'/$,(/
B81))&3+<" #83B B35Q&6 5'$+B /'(/0'/3+< (Q'/$,(/B" K1/3+< ,8' Q$/B3+< Q8$B'Z ?'
?(1&0 ,1/+ 1 ^ Y 3+,( 1 ^7Y8" 4$5' <('B )(/ ,'/+$/6 (Q'/$,(/B B128 $B
$BB3<+5'+," C 0 1 ?(1&0 %' /'?/3,,'+ $B 07CN 18 ?8328 ?(1&0 ,8'+ %'
,/$+B&$,'0 3+,( )$*K),"*7GCGN 18" #83B 3+,/(012'B B6+,$2,32 B1<$/ 3+,( (1/
&$+<1$<' ?3,8(1, 35Q$2,3+< 3,B 8(5(32(+323,6 $+0 $?'B(5'+'BB"
L(1 2$+ )3+0 $&& ,8' B(1/2' 2(0' )(/ D3( 1+0'/ ,8' !"#$S&'" 03/'2,(/6 $+0 /1+ 3,B
1+3, ,'B,B ?3,8 ,8' 2(55$+0E -TX9 .=*$)* *$)*S&'"K*$)*2-X"
GOING FURTHER
:13&03+< 6(1/ )3/B, &$+<1$<' 3B )1+Z %1, 3,]B (+&6 ,8' ,3Q () ,8' 32'%'/<" #8'/']B B(
5128 ,( 03B2(>'/ 3+ ,8$, )3'&0" ['/' $/' $ )'? 30'$B ,( 'GQ&(/' 3) 6(1]/' 3+,'/'B,'0
3+ &'$/+3+< 5(/'"
HOMOICONICITY
#8$,]B ,8' ?(/0 6(1 ?$+, ,( (B,'+,$,3(1B&6 1B' 3+ $ <''W 2(+>'/B$,3(+" ;83&' 3,
B(1+0B (%B21/' $+0 2(5Q&'GZ 3, 5'$+B ,8$, ,8' Q/35$/6 /'Q/'B'+,$,3(+ () 6(1/
Q/(</$5 H,8' 74#I 3B $22'BB3%&' $B $ 0$,$ B,/12,1/' 3+B30' ,8' /1+,35' () ,8'
&$+<1$<'" L(1 2$+ 3+BQ'2, $+0 5(03)6 ,8' Q/(</$5 $B 3,]B /1++3+<" #83B <3>'B 6(1
<(0&3W' Q(?'/B"
C((W 3+ ,8' .+,'/'B,3+< C$+<1$<'B B'2,3(+ () ,8' J')'/'+2'B 28$Q,'/ )(/ ,8' 0/
&$+<1$<' $+0 3+ ,8' Q/'>3(1B 28$Q,'/ D3(Z $ 53+35$&3B, 8(5(32(+32 &$+<1$<' ()
,83B %((W )(/ $ B$5Q&' 8(5(32(+32 &$+<1$<' 35Q&'5'+,3+< '5 $+0 %((&'$+ &(<32 3+
3,B'&)"
SELF-HOSTING
J1%3+31B 3B $ J1%6 35Q&'5'+,$,3(+ ,8$, $35B ,( %' B'&)T8(B,'0 3+ ,8' )1,1/'" 7, ,8'
5(5'+,Z B(5' Q$/,B () ,8' /1+,35' $/' B,3&& +(, ?/3,,'+ 3+ J1%6"
A6A6 3B ,/63+< ,( $283'>' ,83B 3+ $ 5128 B35Q&'/ ?$6E %6 1B3+< $ /'B,/32,3>' B1%B', ()
,8' A6,8(+ &$+<1$<' ,( 35Q&'5'+, A6,8(+ 3,B'&)"
WHAT’S MISSING?
#8' ,?( (%>3(1B 28(32'B $/' a$>$ (+ ,8' aUDZ ?8328 <3>'B 6(1 $ <$/%$<' 2(&&'2,(/
$+0 $ +32' 2(&&'2,3(+ () Q(/,$%&' &3%/$/3'BZ (/ *m*nnZ ?8328 <3>'B 6(1 ,(,$& 2(+,/(&
(>'/ ?8$, 6(1]/' 0(3+<"
N(? <', (1, ,8'/' $+0 5$W' 6(1/ (?+ $?'B(5' &$+<1$<'_
RESOURCES
45$&&,$&WTVYE #8' C$+<1$<' $+0 3,B .5Q&'5'+,$,3(+ %6 70'&' P(&0%'/< $+0 $&"Z
Q1%&3B8'0 %6 7003B(+T;'B&'6Z D$6 !XV9"
EVENTS
C$5%0$ ,8' l&,35$,'Z #8' A/(</$553+< C$+<1$<'B ;'%&(<Z 03B21BB $%(1, +'?
,/'+0BZ /'B'$/28 Q$Q'/B $+0 >$/3(1B Q/(</$553+< &$+<1$<' ,(Q32B"
CLASSES
. ,'$28 $+ (+&3+' 2&$BB %$B'0 (+ ,83B %((W 2$&&'0 #8' A/(</$553+< C$+<1$<'
D$B,'/2&$BB" ;' BQ'+0 ,8' 2&$BB 2/'$,3+< $ &$+<1$<' B353&$/ ,( 7?'B(5' $+0 ,8'+
%13&0 $ /'$& UD 3+ *Z $+0 '>'+ '+0 1Q 2/'$,3+< $ a.# 2(5Q3&'/ )/(5 B2/$,28" lB'
,8' 03B2(1+, :";+<=; ?8'+ %((W3+< ,( <', u!YY ())"
INTERESTING LANGUAGES
.(E
7 )'? ,83+<B ,( +(,' $%(1, .(" ., 0('B+], 8$>' $+6 Q$/B'/Z (+&6 $ &'G'/ ,8$, 2(+>'/,B
,8' 2(0' ,( D'BB$<' (%c'2,B" #83B &$+<1$<' 3B [(5(32(+32"
C1$E
,3+6Q6 $+0 ,3+6/% $/' %(,8 B1%B',B () 5(/' 2(5Q&',' &$+<1$<'B HA6,8(+ $+0 J1%6
/'BQ'2,3>'&6I /1++3+< (+ U3/,1$& D$283+'B 3+BQ3/'0 %6 C1$" #8'3/ 2(0' 3B (+&6 $ )'?
,8(1B$+0 &3+'B &(+<" .) 6(1 ?$+, ,( 3+,/(012' $ UD 3+ 6(1/ &$+<1$<' 0'B3<+Z ,8(B'
$/' <((0 B,$/,3+< Q(3+,B"
N''0 3+BQ3/$,3(+ )(/ 6(1/ $?'B(5' &$+<1$<'\ *8'2W (1, ;3W3Q'03$]B Q/(</$553+<
&3B,BE C3B, () Q/(</$553+< &$+<1$<'BZ OB(,'/32 Q/(</$553+< &$+<1$<'B"
.+ $003,3(+ ,( ,8' &$+<1$<'B ?' W+(? $+0 1B' '>'/6 0$6 H*Z *nnZ A'/&Z a$>$Z ',2"IZ
6(1]&& )3+0 5$+6 &'BB'/TW+(?+ &$+<1$<'BZ 5$+6 () ?8328 $/' >'/6 3+,'/'B,3+<"
L(1]&& '>'+ )3+0 B(5' 'B(,'/32 &$+<1$<'B B128 $B A3',Z $ &$+<1$<' ,8$, 3B
Q/(</$55'0 1B3+< 35$<'B ,8$, &((W &3W' $%B,/$2, $/," L(1]&& $&B( )3+0 B(5'
&$+<1$<'B ,8$, $/' >(&1+,$/3&6 35Q(BB3%&' ,( 1B' &3W' D$&%(&<' $+0 :/$3+@12W $+0
B(5' $51B3+< &$+<1$<'B &3W' C=C*=KOZ ?8(B' B(&' Q1/Q(B' 3B ,( %' )1++6"
;83&' B(5' () ,8'B' &$+<1$<'B $/'+], Q/$2,32$&Z ,8'6 2$+ ?30'+ 6(1/ 8(/3f(+BZ $+0
$&,'/ 6(1/ 2(+2'Q,3(+ () ?8$, 2(+B,3,1,'B $ 2(5Q1,'/ &$+<1$<'" .) 6(1]/' <(3+< ,(
0'B3<+ 6(1/ (?+ &$+<1$<'Z ,8$, 2$+ (+&6 %' $ <((0 ,83+<"
.) 6(1 )3+0 $+ '//(/ (/ 8$>' $ 2(55'+, (/ B1<<'B,3(+Z Q&'$B' B'+0 5' $+ '5$3& $,
5$2(1/+(6'/g<5$3&"2(5"
.) 6(1 '+0 1Q 2/'$,3+< $ Q/(</$553+< &$+<1$<' &', 5' W+(?Z .]0 &(>' ,( B'' 3,_
! =72)
SOLUTIONS TO ;< => ?<@ABCDE
J'5(>' $&& 3+0'+,$,3(+ &(<32 $+0 $00 $+ $,)'5 ,( Q$/B' &3+' %/'$WB"
In file !"#$%*(0!F$+-&$'$()(*
! "#$%% P>$"f(@Y(](>
, aFmSnJEL : D1-(.1C 1"#$%%1C 1?.1C 1@>_(1C 1.$#%(1C 1/?#1K
0
4 -(. @)f(/?j(A")-(B
5 ")-(;"T)*=k
6 ? : 7
8 @)f(/% : DK
9
!, ?. ?-(/@?.?(> : "T_/fDRU&AD$ZjKU'WBRC !K
!0 ?. aFmSnJEL;?/"#_-(pA?-(/@?.?(>B
!4 @)f(/% ii D?-(/@?.?(>;_="$%(;@)`%[*C ?-(/@?.?(>K
!5 (#%(
!6 @)f(/% ii D+2EFGH2I2FJC ?-(/@?.?(>K
!8 (/-
!9 ? V: ?-(/@?.?(>;%?j(
!<
0, bbbbbb
00 b &## ?/-(/@$@?)/ *$X?" ")-( '$% >(*)\(- $/- )/#[ @T?% (#%?. '$% $--(-;
04 (#%?. "T_/f;*$@"TARU&U/VRB
05 @)f(/% ii D+GFSY2GFC 1U/1K
06 ? V: !
08 bbbbbb
09
4, (#%(
40 \$#_( : "T_/fD7C!K
44 @)f(/% ii D\$#_(C \$#_(K
45 ? V: !
46
48 (/-
49
4< (/-
57
5! @)f(/%
5, (/-
50 (/-
4 b ;;;
5
6 F]=>(%%?)/+
8 b ;;;
9 g ST?#(
< ^
!7
!! b ;;;
!,
!0 ST?#(+
!4 S{2YF F]=>(%%?)/ P#)"f c >(%_#@ : ST?#(G)-(;/('A\$#D!KC \$#D,KB d
!5 ^
7+0 3+ ,8' ("#$)2-X )3&'Z 6(1 ?3&& +''0 ,( 2/'$,' ,8' 2&$BBE
! n=(>$@)>+
, b ;;;
0 g 3k3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D!KC \$#D7KC DKB d
4 ^
4 -(. ?/?@?$#?j(A%_=(>"#$%%:/?#B
5 z>_/@?*(`*(@T)-% : cd
6 z>_/@?*(`%_=(>"#$%% : %_=(>"#$%%
8 b ;;;
9 (/-
<
!7 -(. #))f_=A*(@T)-`/$*(B
!! *(@T)- : z>_/@?*(`*(@T)-%D*(@T)-`/$*(K
!, _/#(%% *(@T)-
!0 ?. z>_/@?*(`%_=(>"#$%%
!4 >(@_>/ z>_/@?*(`%_=(>"#$%%;#))f_=A*(@T)-`/$*(B
!5 (#%(
!6 >$?%( 1O(@T)- /)@ .)_/-+ bc*(@T)-`/$*(d1
!8 (/-
!9 (/-
!< *(@T)-
,7 (/-
,! (/-
,,
,0 b ;;;
,4
,5 o)/%@$/@%D1G_*e(>1K : &'(%)*(o#$%%;/('Ao)/%@$/@%D1neq("@1KB
! "#$%% ST?#(G)-(
, -(. (\$#A")/@(]@B
0 'T?#( z")/-?@?)/;(\$#A")/@(]@B;>_e[`\$#_(
4 ze)-[;(\$#A")/@(]@B
5 (/-
6 o)/%@$/@%D1/?#1K
8 (/-
9 (/-