Vous êtes sur la page 1sur 100

TABLE OF CONTENT

!" #$%&' () *(+,'+,


-" .+,/(012,3(+
!" 4155$/6
-" 7%(1, #8' 71,8(/
9" :')(/' ;' :'<3+
9" =>'/>3'?
!" #8' @(1/ A$/,B () $ C$+<1$<'
-" D'', 7?'B(5'E =1/ #(6 C$+<1$<'
F" C'G'/
!" C'G H@&'GI
-" J$<'&
9" A6,8(+ 4,6&' .+0'+,$,3(+ @(/ 7?'B(5'
F" K( ., L(1/B'&) .
M" A$/B'/
!" :3B(+ HL$22I
-" C'5(+
9" 7N#CJ
F" AOPB
M" =Q'/$,(/ A/'2'0'+2'
R" *(++'2,3+< #8' C'G'/ $+0 A$/B'/ 3+ 7?'B(5'
S" K( ., L(1/B'&) ..
R" J1+,35' D(0'&
!" A/(2'01/$&
-" *&$BBT%$B'0
9" A/(,(,6Q'T%$B'0
F" @1+2,3(+$&
M" =1/ 7?'B(5' J1+,35'
R" K( ., L(1/B'&) ...
S" .+,'/Q/','/
!" O>$&1$,3+< #8' N(0'B 3+ 7?'B(5'
-" K( ., L(1/B'&) .U
V" U3/,1$& D$283+'
!" :6,'T2(0'
-" #8' 4,$2W
9" A/(,(,6Q3+< $ UD 3+ J1%6
X" *(5Q3&$,3(+
!" *(5Q3&3+< ,( :6,'T2(0'
-" *(5Q3&3+< ,( D$283+' *(0'
!Y" D3(Z $ 53+35$&3B, 8(5(32(+32 &$+<1$<'
!" [(5(32(?8$,\
-" D'BB$<'B $&& ,8' ?$6 0(?+
9" #8' J1+,35'
F" .5Q&'5'+,3+< D3( 3+ D3(
M" :1, 3,]B 1<&6
!!" P(3+< @1/,8'/
!" [(5(32(+323,6
-" 4'&)T[(B,3+<
9" ;8$,]B D3BB3+<\
!-" J'B(1/2'B
!" :((WB ^ A$Q'/B
-" O>'+,B
9" @(/15B $+0 :&(<B
F" *&$BB'B
M" .+,'/'B,3+< C$+<1$<'B
!9" @$/'?'&&_
!F" 4(&1,3(+B ,( K( ., L(1/B'&)
!" 4(&1,3(+B ,( K( ., L(1/B'&) .
-" 4(&1,3(+B ,( K( ., L(1/B'&) ..
9" 4(&1,3(+B ,( K( ., L(1/B'&) ...
F" 4(&1,3(+B ,( K( ., L(1/B'&) .U

J'>3B3(+ `MZ A1%&3B8'0 a1+' -Y!9"

*(>'/ %$2W</(1+0 35$<' b 7Bc$ :(/(B

*(+,'+, () ,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/'$,'"

! "#$ %#& '()*$ +%,--

A/(</$553+< &$+<1$<'B $/' >'/6 3+,'/'B,3+< $/,3)$2,B %'2$1B' () ,8'3/ 3+8'/'+,


+$,1/' () %'3+< ,'G, ,8$,]B 5'$+, )(/ %(,8 Q'(Q&' ,( /'$0Z $+0 )(/ 5$283+'B ,(
'G'21,'" #8'/']B $ )1+0$5'+,$&Z $+0 (),'+ %'$1,3)1&Z %$&$+2' ,( %' B,/12W %',?''+
'+2(03+< 2&'$/ 3+B,/12,3(+B )(/ ,8' 5$283+'Z ,8' B23'+2' Q$/, () 3,Z $+0 2/'$,3+< $
Q3'2' () ?/3,3+< e $+0 3+ ,83B 2$B'Z $ &$+<1$<' e ,8$, /'$0B '$B3&6 $+0 +$,1/$&&6 ,(
,8' Q/(</$55'/Z ,8' $/, Q$/, () 3," ., 3B ,8' Q'/)'2, 53G () $/, $+0 B23'+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$<'"

ABOUT THE AUTHOR

.]5 D$/2T7+0/d *(1/+(6'/Z $ 2(0'/ )/(5 D(+,/d$&Z h1d%'2 Q$BB3(+$,' $%(1,


Q/(</$553+< &$+<1$<'B $+0 ,'i13&$Z %1, 1B1$&&6 +(, $, ,8' B$5' ,35'"

. 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

▪ J1%6 !"X (/ -"Y


▪ J$22 !"F"RZ 3+B,$&& ?3,8E %$& '()*+,, -+!! ./012324 H(Q,3(+$&Z ,(
/'2(5Q3&' ,8' Q$/B'/ 3+ ,8' 'G'/23B'BI"
=,8'/ >'/B3(+B 53<8, ?(/WZ %1, ,8' 2(0' ?$B ,'B,'0 ?3,8 ,8(B'"
OVERVIEW

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"

THE FOUR PARTS OF A LANGUAGE

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$/,"
!"#$%& '

MEET AWESOME: OUR TOY LANGUAGE

#8' &$+<1$<' ?']&& %' 2(03+< 3+ ,83B %((W 3B 2$&&'0 7?'B(5'Z %'2$1B' 3, 3B_

.,]B $ 53G () J1%6 B6+,$G $+0 A6,8(+]B 3+0'+,$,3(+E

! "#$%% &'(%)*(+
, -(. /$*(+
0 123* &'(%)*(1
4

5 -(. $'(%)*(/(%%+
6 !77
8

9 $'(%)*( : &'(%)*(;/('
< =>?/@A$'(%)*(;/$*(B
!7 =>?/@A$'(%)*(;$'(%)*(/(%%B

7 2(1Q&' () /1&'B )(/ (1/ &$+<1$<'E

▪ 7B 3+ A6,8(+Z %&(2WB () 2(0' $/' 0'&353,'0 %6 ,8'3/ 3+0'+,$,3(+"


▪ *&$BB'B $/' 0'2&$/'0 ?3,8 ,8' !,+)) W'6?(/0"
▪ D',8(0B 2$+ %' 0')3+'0 $+6?8'/' 1B3+< ,8' #$5 W'6?(/0"
▪ .0'+,3)3'/B B,$/,3+< ?3,8 $ 2$Q3,$& &',,'/ $/' 2(+B,$+,B ?8328 $/' <&(%$&&6
$22'BB3%&'"
▪ C(?'/T2$B' 30'+,3)3'/B $/' &(2$& >$/3$%&'B (/ 5',8(0 +$5'B"
▪ .) $ 5',8(0 8$B $ /'2'3>'/ $+0 +( $/<15'+,Z Q$/'+,8'B3B 2$+ %' BW3QQ'0Z
5128 &3W' 3+ J1%6" O<"E )$,526-'(* 3B ,8' B$5' $B )$,526-'(*78"
▪ #8' &$B, >$&1' '>$&1$,'0 3+ $ 5',8(0 3B 3,B /',1/+ >$&1'"
▪ O>'/6,83+< 3B $+ (%c'2,"

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"

C',]B B$6 6(1 8$>' ,8' )(&&(?3+< 2(0'E

! =>?/@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

! D2EFGH2I2FJ =>?/@K D1A1K


, DLHJ2GM 12 $@(1K D1C1K
0 DGNOPFJ 0K D1C1K
4 D2EFGH2I2FJ =?(%K
5 D1B1K

;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+<"

., 8$B %''+ Q(/,'0 ,( B'>'/$& ,$/<', &$+<1$<'B"

▪ J'G32$& )(/ J1%6


▪ a@&'G )(/ a$>$

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'+"

D(0' 0',$3&B (+ ,8' /'G32$& Q/(c'2, Q$<'"

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"

['/']B ?8$, $ J$<'& </$55$/ &((WB &3W'E

! 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

D(/' 0',$3&B 3+ ,8' J$<'& 5$+1$& HAK@I"

['/' $/' $ )'? /'$&T?(/&0 'G$5Q&'B () J$<'& </$55$/B 1B'0 $B &$+<1$<' &'G'/BE

▪ D3+]B &'G'/ H3+ a$>$I


▪ A(,3(+]B &'G'/ H3+ *I

PYTHON STYLE INDENTATION FOR AWESOME

.) 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,"

#(W'+3f3+< ,8' )(&&(?3+< A6,8(+ 2(0'E

! ?. @$%@[ :: H>_(+
, =>?/@ 1E(#?"?)_%k1

?3&& 63'&0 ,8'B' ,(W'+BE

! D2IK D2EFGH2I2FJ @$%@[K DFlN&YK D2EFGH2I2FJ H>_(K


, D2GEFGHK D2EFGH2I2FJ =>?/@K DLHJ2GM 1E(#?"?)_%k1K
0 DEFEFGHK

#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"

8 aFmSnJEL : D1-(.1C 1"#$%%1C 1?.1C 1@>_(1C 1.$#%(1C 1/?#1K


9

< -(. @)f(/?j(A")-(B


!7 ")-(;"T)*=k b J(*)\( (]@>$ #?/( e>($f%
!! @)f(/% : DK b HT?% '?## T)#- @T( X(/(>$@(- @)f(/%
!,

;' +''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, &'>'&"

!6 "_>>(/@`?/-(/@ : 7 b /_*e(> ). %=$"(% ?/ @T( #$%@ ?/-(/@


!8 ?/-(/@`%@$"f : DK
!9

['/' 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'"

,0 ? : 7 b o_>>(/@ "T$>$"@(> =)%?@?)/


,4 'T?#( ? i ")-(;%?j(
,5 "T_/f : ")-(D?;;Z!K
,6

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$<'"

44 (#%?. ")/%@$/@ : "T_/fDRU&AD&ZrKU'WBRC !K


45 @)f(/% ii D+onGLH&GHC ")/%@$/@K
46 ? V: ")/%@$/@;%?j(
48

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"

57 (#%?. /_*e(> : "T_/fDRU&AD7Z<KVBRC !K


5! @)f(/% ii D+GNOPFJC /_*e(>;@)`?K
5, ? V: /_*e(>;%?j(
50

=) 2(1/B'Z 5$,283+< B,/3+<B ,((" 7+6,83+< %',?''+ G222G"

55 (#%?. %@>?/X : "T_/fDRU&1ADs1KWB1RC !K


56 @)f(/% ii D+LHJ2GMC %@>?/XK
58 ? V: %@>?/X;%?j( V , b %f?= @') *)>( @) (]"#_-( @T( t1t;
59
7+0 8'/']B ,8' 3+0'+,$,3(+ 5$<32_ ;' 8$>' ,( ,$W' 2$/' () 9 2$B'BE

'5 *-T$U V 18 AW$ X,"!E ') !-$+*$#2


,'($ 1
,'($ Y V Y8 >$D ,'($ '()'#$ + X,"!EN +* *W$ )+&$ ,$/$,2
!"(*'(T$ V Z8 ?$#$(*2

#83B $,)'5 ,$W'B 2$/' () ,8' )3/B, 2$B'" #8' +15%'/ () BQ$2'B ?3&& 0','/53+' ,8'
3+0'+, &'>'&"

69 (#%?. ?/-(/@ : "T_/fDRU&U+U/A VBR*C !K b O$@"T(% 1+ i/('#?/(h i%=$"(%h1


6< ?. ?/-(/@;%?j( i: "_>>(/@`?/-(/@ b ?/-(/@ %T)_#- X) _= 'T(/ ">($@?/X $ e#)"f
87 >$?%( 1P$- ?/-(/@ #(\(#C X)@ bc?/-(/@;%?j(d ?/-(/@%C 1 V
8! 1(]=("@(- h bc"_>>(/@`?/-(/@d1
8, (/-
80 "_>>(/@`?/-(/@ : ?/-(/@;%?j(
84 ?/-(/@`%@$"f;=_%TA"_>>(/@`?/-(/@B
85 @)f(/% ii D+2GEFGHC ?/-(/@;%?j(K
86 ? V: ?/-(/@;%?j( V ,
88

#8' +'G, $,)'5 ,$W'B 2$/' () ,8' ,?( &$B, 2$B'BE

▪ *$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'(#$(*"

90 (#%?. ?/-(/@ : "T_/fDRU&U/A WBR*C !K b O$@"T(% 1i/('#?/(h i%=$"(%h1


94 ?. ?/-(/@;%?j( :: "_>>(/@`?/-(/@ b o$%( ,
95 @)f(/% ii D+GFSY2GFC 1U/1K b G)@T?/X @) -)C '(3>( %@?## ?/ @T( %$*( e#)"f
96 (#%?. ?/-(/@;%?j( i "_>>(/@`?/-(/@ b o$%( 0
98 'T?#( ?/-(/@;%?j( i "_>>(/@`?/-(/@
99 ?/-(/@`%@$"f;=)=
9< "_>>(/@`?/-(/@ : ?/-(/@`%@$"f;#$%@ gg 7
<7 @)f(/% ii D+EFEFGHC ?/-(/@;%?j(K
<! (/-
<, @)f(/% ii D+GFSY2GFC 1U/1K
<0 (#%( b ?/-(/@;%?j( h "_>>(/@`?/-(/@C (>>)>k
<4 >$?%( 1O?%%?/X 3+31 b o$//)@ ?/">($%( ?/-(/@ #(\(# '?@T)_@ _%?/X 1+1
<5 (/-
<6 ? V: ?/-(/@;%?j( V !
<8

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"

!7! (#%?. )=(>$@)> : "T_/fDRU&AUgUgguug::gk:gi:gh:BRC !K


!7, @)f(/% ii D)=(>$@)>C )=(>$@)>K
!70 ? V: )=(>$@)>;%?j(
!74

;']/' 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"

!78 (#%?. "T_/f;*$@"TARU& RB


!79 ? V: !
!7<

@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"

!,0 'T?#( ?/-(/@ : ?/-(/@`%@$"f;=)=


!,4 @)f(/% ii D+EFEFGHC ?/-(/@`%@$"f;.?>%@ gg 7K
!,5 (/-
!,6

!,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 ,
<

!7 =>?/@ 1HT( F/-1


!! onEF
!, @)f(/% : D
!0 D+2IC 1?.1KC D+GNOPFJC !KC b ?. !+
!4 D+2GEFGHC ,KC
!5 D+2IC 1?.1KC D+GNOPFJC ,KC b ?. ,+
!6 D+2GEFGHC 4KC
!8 D+2EFGH2I2FJC 1=>?/@1KC D1A1C 1A1KC b =>?/@A1;;;1B
!9 D+LHJ2GMC 1;;;1KC
!< D1B1C 1B1KC
,7 D+GFSY2GFC 1U/1KC
,! D+2IC 1?.1KC D+I&YLFC 1.$#%(1KC b ?. .$#%(+
,, D+2GEFGHC 6KC
,0 D+2EFGH2I2FJC 1=$%%1KC b =$%%
,4 D+EFEFGHC 4KC D+GFSY2GFC 1U/1KC
,5 D+2EFGH2I2FJC 1=>?/@1KC D1A1C 1A1KC b =>?/@A1-)/(k1B
,6 D+LHJ2GMC 1-)/(k1KC
,8 D1B1C 1B1KC
,9 D+EFEFGHC ,KC D+GFSY2GFC 1U/1KC
,< D+GNOPFJC ,KC b ,
07 D+EFEFGHC 7KC D+GFSY2GFC 1U/1KC
0! D+GFSY2GFC 1U/1KC b
0, D+2EFGH2I2FJC 1=>?/@1KC D+LHJ2GMC 1HT( F/-1K b =>?/@ 1HT( F/-1
00 K
04 $%%(>@`(v_$# @)f(/%C Y(](>;/(';@)f(/?j(A")-(B

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'/ ,( Q$/B'E DW',$ !"(#'*'"(U ; 2(+,/(& B,/12,1/'B"

%" D(03)6 ,8' &'G'/ ,( 0'&353, %&(2WB ?3,8 : ; < 3+B,'$0 () 3+0'+,$,3(+"

4(&1,3(+B ,( K( ., L(1/B'&) ."


PARSER

: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"

C',B ,$W' ,8(B' ,(W'+B )/(5 ,8' Q/'>3(1B B'2,3(+E

! D2EFGH2I2FJ =>?/@K D1A1K


, DLHJ2GM 12 $@(1K D1C1K
0 DGNOPFJ 0K D1C1K
4 D2EFGH2I2FJ =?(%K
5 D1B1K

#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"

▪ J$22 )(/ J1%6


▪ A&6 )(/ A6,8(+
▪ a$>$** )(/ a$>$
C3W' C'GZ )/(5 ,8' Q/'>3(1B 28$Q,'/Z L$22 2(5Q3&'B $ </$55$/ 3+,( $ Q$/B'/" ['/']B
8(? $ L$22 </$55$/ /1&' 3B 0')3+'0E

! o$##+ RW G$*( ). @T( >_#( WR


, F]=>(%%?)/ 3;3 2EFGH2I2FJ c ww : o$##G)-(`/('Aw!C w0C GNYYB^ d
0 g F]=>(%%?)/ 3;3 2EFGH2I2FJ 3A3 &>XY?%@ 3B3 c ww : o$##G)-(`/('Aw!C w0C w5B^ d
4 RW w! w, w0 w4 w5 w6 i: \$#_(% .>)* @T( >_#( $>( %@)>(- ?/
5 @T(%( \$>?$e#(%; WR
6 ^

=+ ,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

C'5(+ 3B i13,' B353&$/ ,( L$22Z ?3,8 $ )'? 03))'/'+2'BE

▪ lB3+< $ 03))'/'+, </$55$/ B6+,$G ?8328 3B &'BB Q/(+' ,( Q/(</$553+< '//(/B"


▪ #8' <'+'/$,'0 Q$/B'/ 3B %(,8 /'T'+,/$+, $+0 ,8/'$0TB$)'"
▪ C'5(+ 5$W'B 3, 5128 '$B3'/ ,( ?/3,' $ Q$/B'/ ,8$, 0(+], &'$W 5'5(/6"

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

A$/B3+< OGQ/'BB3(+ P/$55$/BZ (/ AOPBZ $/' >'/6 Q(?'/)1& $, Q$/B3+< 2(5Q&'G


&$+<1$<'B" .]>' 1B'0 $ AOP <'+'/$,'0 )/(5 Q'<m&'< 3+ ,3+6/% ,( Q$/B' J1%6]B
3+)$5(1B B6+,$G ?3,8 '+2(1/$<3+< /'B1&,B H,3+6/%]B </$55$/I"

#/'',(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

=+' () ,8' 2(55(+ Q3,)$&&B () &$+<1$<' Q$/B3+< 3B (Q'/$,(/ Q/'2'0'+2'" A$/B3+< C


^ 9 b F B8(1&0 +(, Q/(012' ,8' B$5' /'B1&, $B 7C ^ 98 b FZ B$5' )(/ $&& (,8'/
(Q'/$,(/B" O$28 &$+<1$<' 8$B $+ (Q'/$,(/ Q/'2'0'+2' ,$%&'Z (),'+ %$B'0 (+
5$,8'5$,32B (/0'/ () (Q'/$,3(+B" 4'>'/$& ?$6B ,( 8$+0&' ,83B 'G3B," L$22T%$B'0
Q$/B'/B 35Q&'5'+, ,8' 481+,3+< L$/0 $&<(/3,85 3+ ?8328 6(1 <3>' $ Q/'2'0'+2'
&'>'& ,( '$28 W3+0 () (Q'/$,(/" =Q'/$,(/B $/' 0'2&$/'0 3+ :3B(+ $+0 L$22 ?3,8
c,$5* $+0 c-'%W* 5$2/(B" J'$0 5(/' 3+ :3B(+]B 5$+1$&"

['/']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'"

CONNECTING THE LEXER AND PARSER IN


AWESOME

@(/ (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("#$)
$(#
$(#

( 0 >"#$)2($D7G*W') ') )*"-$# e("#$)G8


(2("#$) V 0f G*W') ') )*"-$# e("#$)G

: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'/"

,4 "#$%% G)-(% i L@>_"@;/('A+/)-(%B


,5 -(. iiA/)-(B b N%(._# *(@T)- .)> $--?/X $ /)-( )/ @T( .#[;
,6 /)-(% ii /)-(
,8 %(#.
,9 (/-
,< (/-

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,'"

04 "#$%% Y?@(>$#G)-( i L@>_"@;/('A+\$#_(B^ (/-


05

06 "#$%% G_*e(>G)-( i Y?@(>$#G)-(^ (/-


08

09 "#$%% L@>?/XG)-( i Y?@(>$#G)-(^ (/-


0<

47 "#$%% H>_(G)-( i Y?@(>$#G)-(


4! -(. ?/?@?$#?j(
4, %_=(>A@>_(B
40 (/-
44 (/-
45

46 "#$%% I$#%(G)-( i Y?@(>$#G)-(


48 -(. ?/?@?$#?j(
49 %_=(>A.$#%(B
4< (/-
57 (/-
5!

5, "#$%% G?#G)-( i Y?@(>$#G)-(


50 -(. ?/?@?$#?j(
54 %_=(>A/?#B
55 (/-
56 (/-

#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"

6! "#$%% o$##G)-( i L@>_"@;/('A+>("(?\(>C +*(@T)-C +$>X_*(/@%B^ (/-


J',/3'>3+< ,8' >$&1' () $ 2(+B,$+, %6 3,B (+&$ 3B 0(+' %6 ,8' )(&&(?3+< +(0'"

64 "#$%% M(@o)/%@$/@G)-( i L@>_"@;/('A+/$*(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$->"#$"

6< "#$%% L(@o)/%@$/@G)-( i L@>_"@;/('A+/$*(C +\$#_(B^ (/-

4353&$/ ,( ,8' Q/'>3(1B +(0'BZ ,8' +'G, (+'B $/' )(/ 0'$&3+< ?3,8 &(2$& >$/3$%&'B"

8, "#$%% M(@Y)"$#G)-( i L@>_"@;/('A+/$*(B^ (/-


80

84 "#$%% L(@Y)"$#G)-( i L@>_"@;/('A+/$*(C +\$#_(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'"

8< "#$%% E(.G)-( i L@>_"@;/('A+/$*(C +=$>$*%C +e)-[B^ (/-

*&$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"

90 "#$%% o#$%%G)-( i L@>_"@;/('A+/$*(C +e)-[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(+"

7B 6(1]&& B'' %'&&(?Z ,8' @C6-$))'"() /1&' /')'/'+2'B @C6-$))'"() 3,B'&)" .+


(,8'/ ?(/0BZ $ &3B, () 'GQ/'BB3(+B 2$+ %' $+(,8'/ &3B, () 'GQ/'BB3(+B )(&&(?'0 %6
$+(,8'/ 'GQ/'BB3(+"

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, ^

O>'/6 ,6Q' () 'GQ/'BB3(+ B1QQ(/,'0 %6 (1/ &$+<1$<' 3B 0')3+'0 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

D',8(0 2$&&B 2$+ ,$W' ,8/'' )(/5BE

▪ ;3,8(1, $ /'2'3>'/ H)$,5 3B $BB15'0IE &$*W"#7+-%T&$(*)8"


▪ ;3,8 $ /'2'3>'/E -$!$'/$-2&$*W"#7+-%T&$(*)8"
▪ 7+0 $ 83+, () B6+,$2,32 B1<$/ B( ,8$, ?' 2$+ 0/(Q ,8' 78 3) +( $/<15'+,B $/'
<3>'+E -$!$'/$-2&$*W"#"
O$28 (+' () ,8(B' 3B 8$+0&'0 %6 ,8' )(&&(?3+< /1&'"

!!< 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

.+ (1/ &$+<1$<'Z &3W' 3+ J1%6Z (Q'/$,(/B $/' 2(+>'/,'0 ,( 5',8(0 2$&&B" 4( 1 ^ Y


?3&& %' 2(+>'/,'0 ,( 12^7Y8" 1 3B ,8' /'2'3>'/ () ,8' ^ 5',8(0 2$&&Z Q$BB3+< Y $B
$+ $/<15'+," =Q'/$,(/B +''0 ,( %' 0')3+'0 3+03>301$&&6 )(/ ,8' =Q'/$,(/
A/'2'0'+2' #$%&' ,( ,$W' $2,3(+"

!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

@3+$&&6Z '5 3B B353&$/ ,( !,+)) %1, /'2'3>'B $ )/56,%,/5"

,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

,!< ZZZZ ?//(>


,,7 -(. =$>%(A")-(C %T)'`@)f(/%:.$#%(B
,,! z@)f(/% : Y(](>;/(';@)f(/?j(A")-(B b H)f(/?j( @T( ")-( _%?/X )_> #(](>
,,, =_@% z@)f(/%;?/%=("@ ?. %T)'`@)f(/%
,,0 -)`=$>%( b a?"f).. @T( =$>%?/X =>)"(%%
,,4 (/-
,,5

,,6 -(. /(]@`@)f(/


,,8 z@)f(/%;%T?.@
,,9 (/-

5,16"3"2# )*& /%0110% ), !,%1 )*& 70%.&%

;']/' +(? /'$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
!!

!, $%%(>@`(v_$# /)-(%C y$>%(>;/(';=$>%(A")-(B


A$/B3+< 2(0' ?3&& /',1/+ $ ,/'' () +(0'B" #8' /((, +(0' ?3&& $&?$6B %' () ,6Q'
>"#$) ?8328 2(+,$3+B ,8' 283&0/'+ +(0'B"

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 $ /1&' 3+ ,8' </$55$/ ,( Q$/B' DW',$ %&(2WB"

%" 700 $ </$55$/ /1&' ,( 8$+0&' ,8' ] 1+$/6 (Q'/$,(/BZ '<"E ]C" D$W3+< ,8'
)(&&(?3+< ,'B, Q$BB H*$)*KT(+-9K"6$-+*"-IE

4(&1,3(+B ,( K( ., L(1/B'&) .."


RUNTIME MODEL

#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$<' 8&#79&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

OG2'Q, )(/ a$>$B2/3Q,Z +( A/(,(,6Q'T%$B'0 &$+<1$<'B 8$>' /'$28'0 ?30'BQ/'$0


Q(Q1&$/3,6 6'," #83B 5(0'& 3B ,8' '$B3'B, (+' ,( 35Q&'5'+, $+0 $&B( ,8' 5(B,
)&'G3%&' %'2$1B' '>'/6,83+< 3B $ 2&(+' () $+ (%c'2," .+ Q/$2,32'Z ,83B 5(0'& 3B >'/6
2&(B' ,( ,8' *&$BBT%$B'0 (+'Z ?3,8 ,8' 'G2'Q,3(+ ,8$, ,8'/' $/' +( 2&$BB'B" .+B,'$0Z
5',8(0B $/' B,(/'0 03/'2,&6 3+,( (%c'2,B" 7003,3(+$&&6Z 3+B,'$0 () 8$>3+< 2&$BB'BZ
(%c'2,B 8$>' (+' (/ B'>'/$& Q$/'+, (%c'2,B )/(5 ?8328 ,8'6 3+8'/3, ,8'3/ 5',8(0B (/
$,,/3%1,'B"

.$+ 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"

OUR AWESOME RUNTIME

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$%&'"

6 $@@>`$""(%%)> +>_/@?*(`"#$%%C +>_e[`\$#_(


8

9 -(. ?/?@?$#?j(A>_/@?*(`"#$%%C >_e[`\$#_(:%(#.B


< z>_/@?*(`"#$%% : >_/@?*(`"#$%%
!7 z>_e[`\$#_( : >_e[`\$#_(
!! (/-

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,"

!6 -(. "$##A*(@T)-C $>X_*(/@%:DKB


!8 z>_/@?*(`"#$%%;#))f_=A*(@T)-B;"$##A%(#.C $>X_*(/@%B
!9 (/-
!< (/-

530..&. =2- >&<*,-.

J'5'5%'/ ,8$, 3+ 7?'B(5'Z '>'/6,83+< 3B $+ (%c'2," O>'+ 2&$BB'B $/' 3+B,$+2'B ()


,8' PD$)"&$k,+)) 2&$BB" PD$)"&$k,+))'B 8(&0 ,8' 5',8(0B $+0 2$+ %'
3+B,$+,3$,'0 >3$ ,8'3/ ($D 5',8(0"

In file !"#$%(4.+51$%!&0,,)(*

! "#$%% &'(%)*(o#$%% i &'(%)*(neq("@


, b o#$%%(% $>( )eq("@% ?/ &'(%)*( %) @T([ ?/T(>?@ .>)* &'(%)*(neq("@;
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 {(#=(> *(@T)- @) -(.?/( $ *(@T)- )/ @T?% "#$%% .>)* J_e[;


!< -(. -(.A/$*(C ue#)"fB
,7 z>_/@?*(`*(@T)-%D/$*(;@)`%K : e#)"f
,! (/-
,,

,0 b o>($@( $ /(' ?/%@$/"( ). @T?% "#$%%


,4 -(. /('
,5 &'(%)*(neq("@;/('A%(#.B
,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

8 -(. "$##A>("(?\(>C $>X_*(/@%B


9 b o>($@( $ ")/@(]@ ). (\$#_$@?)/ ?/ 'T?"T @T( *(@T)- '?## (]("_@(;
< ")/@(]@ : o)/@(]@;/('A>("(?\(>B
!7

!! b &%%?X/ =$%%(- $>X_*(/@% @) #)"$# \$>?$e#(%;


!, z=$>$*%;($"T`'?@T`?/-(] -) g=$>$*C ?/-(]g
!0 ")/@(]@;#)"$#%D=$>$*K : $>X_*(/@%D?/-(]K
!4 (/-
!5

!6 b HT( e)-[ ?% $ /)-( A">($@(- ?/ @T( =$>%(>B;


!8 b S(3## @$#f ?/ -(@$?#% $e)_@ @T( t(\$#t *(@T)- ?/ @T( ?/@(>=>(@(> "T$=@(>;
!9 ze)-[;(\$#A")/@(]@B
!< (/-
,7 (/-

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

4 -(. ?/?@?$#?j(A"_>>(/@`%(#.C "_>>(/@`"#$%%:"_>>(/@`%(#.;>_/@?*(`"#$%%B


5 z#)"$#% : cd
6 z"_>>(/@`%(#. : "_>>(/@`%(#.
8 z"_>>(/@`"#$%% : "_>>(/@`"#$%%
9 (/-
< (/-

;8'+ $ Q3'2' () 2(0' 'G'21,'B 3+ (1/ /1+,35'Z 3, ?3&& $&?$6B 'G'21,' ?3,83+ $
<3>'+ 2(+,'G,"

C,,<.<%066"2# )*& D$2<"1&

#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

6 o)/%@$/@%D1o#$%%1K : &'(%)*(o#$%%;/(' b E(.?/?/X @T( to#$%%t "#$%%;


8 o)/%@$/@%D1o#$%%1K;>_/@?*(`"#$%% : o)/%@$/@%D1o#$%%1K b L(@@?/X to#$%%;"#$%% : o#$%%t;
9 o)/%@$/@%D1neq("@1K : &'(%)*(o#$%%;/(' b E(.?/?/X @T( tneq("@t "#$%%
< o)/%@$/@%D1G_*e(>1K : &'(%)*(o#$%%;/(' b E(.?/?/X @T( tG_*e(>t "#$%%
!7 o)/%@$/@%D1L@>?/X1K : &'(%)*(o#$%%;/('

#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"

05 o)/%@$/@%D1o#$%%1K;-(. +/(' -) g>("(?\(>C $>X_*(/@%g


06 >("(?\(>;/('
08 (/-

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$!*"

44 o)/%@$/@%D1neq("@1K;-(. +=>?/@ -) g>("(?\(>C $>X_*(/@%g


45 =_@% $>X_*(/@%;.?>%@;>_e[`\$#_(
46 o)/%@$/@%D1/?#1K b S( $#'$[% '$/@ @) >(@_>/ )eq("@% .>)* )_> >_/@?*(
48 (/-

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$-+$,+)(*

! b O?*?" neq("@;/(' ?/ @T( #$/X_$X(


, )eq("@ : o)/%@$/@%D1neq("@1K;"$##A1/('1B
0

4 $%%(>@`(v_$# o)/%@$/@%D1neq("@1KC )eq("@;>_/@?*(`"#$%% b $%%(>@ )eq("@ ?% $/ neq("@

*$+ 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

$" .5Q&'5'+, 3+8'/3,$+2' %6 $003+< $ B1Q'/2&$BB ,( '$28 7?'B(5' 2&$BB"

%" 700 ,8' 5',8(0 ,( 8$+0&' C ^ Y"

4(&1,3(+B ,( K( ., L(1/B'&) ..."


INTERPRETER

#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,"

@3<1/' 9 /'2$Q3,1&$,'B ,8' Q$,8 () $ B,/3+< 3+ (1/ &$+<1$<'"

!"#$%& 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"

EVALUATING THE NODES IN AWESOME

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

9< "#$%% L(@Y)"$#G)-(


<7 -(. (\$#A")/@(]@B
<! ")/@(]@;#)"$#%D/$*(K : \$#_(;(\$#A")/@(]@B
<, (/-
<0 (/-

#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

!75 (\$#_$@(-`$>X_*(/@% : $>X_*(/@%;*$= c g$>Xg $>X;(\$#A")/@(]@B d


!76 \$#_(;"$##A*(@T)-C (\$#_$@(-`$>X_*(/@%B
!78 (/-
!79 (/-

K')3+3+< $ 5',8(0Z 1B3+< ,8' #$5 W'6?(/0Z 3B 0(+' %6 $003+< $ 5',8(0 ,( ,8'
21//'+, 2&$BB"

!!! "#$%% E(.G)-(


!!, -(. (\$#A")/@(]@B
!!0 *(@T)- : &'(%)*(O(@T)-;/('A=$>$*%C e)-[B
!!4 ")/@(]@;"_>>(/@`"#$%%;>_/@?*(`*(@T)-%D/$*(K : *(@T)-
!!5 (/-
!!6 (/-

K')3+3+< $ 2&$BB 3B 0(+' 3+ ,8/'' B,'QBE

!" J'(Q'+ (/ 0')3+' ,8' 2&$BB"


-" */'$,' $ BQ'23$& 2(+,'G, () '>$&1$,3(+ HB', !T--$(*K)$,5 $+0
!T--$(*K!,+)) ,( ,8' +'? 2&$BBI"
9" O>$&1$,' ,8' %(06 () ,8' 2&$BB 3+B30' ,8$, 2(+,'G,"

*8'2W %$2W 8(? ?$5>"#$ ?$B 35Q&'5'+,'0Z $003+< 5',8(0B ,(


!"(*$C*2!T--$(*K!,+))" ['/' 3B ?8'/' ?' B', ,8' >$&1' () !T--$(*K!,+))"

!,6 "#$%% o#$%%G)-(


!,8 -(. (\$#A")/@(]@B
!,9 $'(%)*(`"#$%% : o)/%@$/@%D/$*(K b oT("f ?. "#$%% ?% $#>($-[ -(.?/(-
!,<

!07 _/#(%% $'(%)*(`"#$%% b o#$%% -)(%/3@ (]?%@ [(@


!0! $'(%)*(`"#$%% : &'(%)*(o#$%%;/('
!0, o)/%@$/@%D/$*(K : $'(%)*(`"#$%% b E(.?/( @T( "#$%% ?/ @T( >_/@?*(
!00 (/-
!04

!05 "#$%%`")/@(]@ : o)/@(]@;/('A$'(%)*(`"#$%%C $'(%)*(`"#$%%B


!06 e)-[;(\$#A"#$%%`")/@(]@B
!08

!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"

!44 "#$%% 2.G)-(


!45 -(. (\$#A")/@(]@B
!46 ?. ")/-?@?)/;(\$#A")/@(]@B;>_e[`\$#_(
!48 e)-[;(\$#A")/@(]@B
!49 (#%( b 2. /) e)-[ ?% (\$#_$@(-C '( >(@_>/ /?#;
!4< o)/%@$/@%D1/?#1K
!57 (/-
!5! (/-
!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/'+"

D$22"2# 8$% !"%.< 7%,#%01

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$

! bkR_%>Re?/R(/\ >_e[ Z2;


, b HT( &'(%)*( #$/X_$X(k
0 b
4 b _%$X(+
5 b ;R$'(%)*( (]$*=#(;$'* b @) (\$# $ .?#(
6 b ;R$'(%)*( b @) %@$>@ @T( JFyY
8 b
9 b )/ S?/-)'% >_/ '?@T+ >_e[ Z2; $'(%)*( D)=@?)/%K
<

!7 >(v_?>( 1?/@(>=>(@(>1
!! >(v_?>( 1>($-#?/(1
!,

!0 ?/@(>=>(@(> : 2/@(>=>(@(>;/('
!4

!5 b 2. $ .?#( ?% X?\(/ '( (\$# ?@;


!6 ?. .?#( : &JMx;.?>%@
!8 ?/@(>=>(@(>;(\$# I?#(;>($-A.?#(B
!9
!< b L@$>@ @T( JFyYC >($-Z(\$#Z=>?/@Z#))=C )> ?/@(>$"@?\( ?/@(>=>(@(>
,7 (#%(
,! =_@% 1&'(%)*( JFyYC oHJYVo @) v_?@1
,, #))= -)
,0 #?/( : J($-#?/(++>($-#?/(A1hh 1B b !; J($-
,4 J($-#?/(++{2LHnJm;=_%TA#?/(B
,5 \$#_( : ?/@(>=>(@(>;(\$#A#?/(B b ,; F\$#
,6 =_@% 1:h bc\$#_(;>_e[`\$#_(;?/%=("@d1 b 0; y>?/@
,8 (/- b 4; Y))=
,9

,< (/-

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

! &'(%)*( JFyYC oHJYVo @) v_?@


, hh * : 1HT?% ?% &'(%)*(k1
0 :h 1HT?% ?% &'(%)*(k1
4 hh =>?/@A*B
5 HT?% ?% &'(%)*(k
6 :h /?#

7&B(Z ,/6 /1++3+< $ )3&'E 2S+D$)"&$ $C+&6,$2+D&"

DO IT YOURSELF IV

$" .5Q&'5'+, ,8' nW',$>"#$ $/+, 5',8(0"

4(&1,3(+B ,( K( ., L(1/B'&) .U"


VIRTUAL MACHINE

.+ ,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'"

:6,'T2(0' 3B B353&$/ ,( ,8' 5$283+' 2(0' /1++3+< (+ 6(1/ Q/(2'BB(/Z %1, 3B


0'B3<+'0 BQ'23)32$&&6 )(/ 6(1/ &$+<1$<'" #8' /'$B(+ %6,'T2(0' 'G'21,3(+ 3B )$B,'/Z
0'BQ3,' $003+< $ )'? 'G,/$ &$6'/B 3+ 6(1/ &$+<1$<'Z 3B %'2$1B' 3, 3B 5128 2&(B'/ ,(
5$283+' 2(0' ,8$+ $+ 74# 3B" :/3+<3+< 6(1/ 'G'21,3(+ 5(0'& 2&(B'/ ,( ,8'
5$283+' ?3&& $&?$6B 63'&0 )$B,'/ /'B1&,B"

[(?'>'/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'"

@3<1/' F B8(?B 8(? ?']&& 3+,/(012' $ UD 3+,( (1/ &$+<1$<' 0'B3<+"


!"#$%& H

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"

#8' )3/B, 3+B,/12,3(+ ?3&& Q1B8 $ +15%'/ (+ ,8' B,$2W"

,! '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"

,< 'T(/ yNL{`LFYI


07 %@$"f;=_%T J))@o)/@(]@;"_>>(/@`%(#.

#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

09 ?= V: ! b G(]@ e[@(C @T( /_*e(> ). $>X_*(/@% )/ @T( %@$"f;


0< $>X" : e[@(")-(D?=K

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"

50 %@$"f;=_%T >("(?\(>;"$##A*(@T)-C $>X%B

['/' 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&'/"

.) 6(1 ?$+, ,( 2(5Q3&' 6(1/ &$+<1$<' 6(1 8$>' ,?( (Q,3(+B"

!" *(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

#8' )(&&(?3+< 2(0' 3B B,/12,1/'0 $&5(B, 'G$2,&6 &3W' '(*$-6-$*$-2-X" #8'


03))'/'+2' %'3+< ,8$, ?' ?(+], '>$&1$,' ,8' 2(0' (+ ,8' BQ(,Z %1, <'+'/$,' %6,'T
2(0' ,8$, ?3&& $283'>' ,8' B$5' /'B1&,B ?8'+ /1+ 3+B30' ,8' >3/,1$& 5$283+' H?8328
3B 3+ )$2, $ %6,'T2(0' 3+,'/Q/','/I"
o9*$!"#$k"&6',$- 8'/' 3B ,8' B$5' $B =(*$-6-$*$-Z $ B35Q&' ?/$QQ'/
$/(1+0 ,8' Q$/B'/ $+0 ,8' +(0'B !"&6',$ 5',8(0Z ?3,8 ,8' $003,3(+ () $+ $&'*
5',8(0 ,( 8'&Q <'+'/$,' ,8' %6,'2(0'"

!! "#$%% 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

6< $>X_*(/@%;($"T -) g$>X_*(/@g b o)*=?#( @T( $>X_*(/@%


87 $>X_*(/@;")*=?#(A")*=?#(>B
8! (/-
8,

80 ")*=?#(>;(*?@ o&YYC *(@T)-C $>X_*(/@%;%?j(


84 (/-
85 (/-
;' 2$+ +(? 2(5Q&',' (1/ +'? UDT%$B'0 &$+<1$<' %6 2(5Q3&3+< ,( %6,'T2(0' $+0
'G'21,3+< ,8$, %6,'T2(0' 3+B30' (1/ UD 3+B,'$0 () 1B3+< ,8' 3+,'/Q/','/"

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

!6 b O$f( %_>( @T( ")*=?#(> X(/(>$@(% @T( =>(\?)_% e[@(")-(;


!8 $%%(>@`(v_$# (]=("@(-`e[@(")-(C e[@(")-(
!9

!< b O$f( %_>( @T( xO "$/ >_/ @T$@ e[@(")-(;


,7 $%%(>@`=>?/@%A10U/1B c xO;/(';>_/Ae[@(")-(B d

= J,%- =9,$< K<0<"; )46"2#

=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(/'"

@(/ 'G$5Q&'Z ,8' 2(5Q3&'/ 2(1&0 <'+'/$,' $ 83<8&6 BQ'23$&3f'0 P??K=>A


3+B,/12,3(+ ?8'+ 6(1 $00 ,?( >$&1'B ,8$, $/' W+(?+ ,( %' '(*B" #8$, 3+B,/12,3(+
2$+ %' (Q,353f'0 )(/ ,83B (+' >'/6 BQ'23)32 2$B' $+0 ,81B Q/(>30' </'$,
Q'/)(/5$+2'"

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'"

COMPILING TO MACHINE CODE

7 UD 3B /3<8, 3+ ,8' 5300&' %',?''+ '$B' () 0'>'&(Q5'+, $+0 Q'/)(/5$+2'" :1, 3)


6(1 +''0 ,( <( ,8' 'G,/$ 53&' 3+ ,'/5B () Q'/)(/5$+2'Z 2(5Q3&3+< ,( 5$283+' 2(0'
3B ,8' 1&,35$,' B,'Q"

#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(+"

['/']B 8(? ,( 1B' CCUD )/(5 J1%6"

! b o>($@(% $ /(' *)-_#( @) T)#- @T( ")-(


, *)- : YYxO++O)-_#(;/('A1$'(%)*(1B
0 b o>($@(% @T( *$?/ ._/"@?)/ @T$@ '?## e( "$##(-
4 *$?/ : *)-;._/"@?)/%;$--A1*$?/1C D2GHC YYxO++H[=(;=)?/@(>Ayo{&JBKC 2GHB
5 b o>($@( $ e#)"f ). ")-( @) e_?#- *$"T?/( ")-( '?@T?/
6 e_?#-(> : YYxO++P_?#-(>;/('
8 e_?#-(>;=)%?@?)/`$@`(/-A*$?/;e$%?"`e#)"f%;$==(/-B
9

< b I?/- @T( ._/"@?)/ '(3>( "$##?/X ?/ @T( *)-_#(


!7 ._/" : *)-;._/"@?)/%;/$*(-A1=_@%1B
!! b o$## @T( ._/"@?)/
!, e_?#-(>;"$##A._/"C e_?#-(>;X#)e$#`%@>?/X`=)?/@(>A1T(##)1BB
!0 b J(@_>/
!4 e_?#-(>;>(@AYYxO++2/@A7BB

#83B 3B ,8' 'i13>$&'+, () ,8' )(&&(?3+< * 2(0'" .+ )$2,Z 3, ?3&& <'+'/$,' B353&$/
5$283+' 2(0'"

! ?/@ *$?/ A?/@ $>X"C "T$> ")/%@ W$>X\DKB c


, =_@%A1T(##)1B^
0 >(@_>/ 7^
4 d
#8' 03))'/'+2' 3B ,8$, ?3,8 CCUD ?' 2$+ 06+$532$&&6 <'+'/$,' ,8' 5$283+' 2(0'
?83&' (1/ Q/(</$5 3B /1++3+<" :'2$1B' () ,8$,Z ?' 2$+ 2/'$,' 5$283+' 2(0' )/(5
7?'B(5' 2(0'"

5,16"3"2# =N&.,1& <, >0;*"2& 5,-&

#( 2(5Q3&' 7?'B(5' ,( 5$283+' 2(0'Z ?']&& 2/'$,' $+ BBOpk"&6',$- 2&$BB ,8$,


?3&& '+2$QB1&$,' ,8' &(<32 () 2$&&3+< CCUD ,( <'+'/$,' ,8' %6,'T2(0'" #8'+Z ?']&&
'G,'+0 ,8' +(0'B 2/'$,'0 %6 ,8' Q$/B'/ ,( 5$W' ,8'5 1B' ,8' 2(5Q3&'/" #8'
B,/12,1/' 3B >'/6 B353&$/ ,( ,8' (+' ?' 1B'0 )(/ (1/ %6,'T2(0' 2(5Q3&'/"

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"

!4 yo{&J : YYxO;y)?/@(>AYYxO++2/@9B b (v_?\$#(/@ @) W"T$> ?/ o


!5 2GH : YYxO++2/@ b (v_?\$#(/@ @) ?/@ ?/ o
!6

;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 $@@>`>($-(> +#)"$#%
,!

7+ 3+B,$+2' () BBOpk"&6',$- 3B /'BQ(+B3%&' )(/ 2(5Q3&3+< $ <3>'+ )1+2,3(+" ;'


Q$BB $+ CCUD 5(01&' H&"#IZ ?8328 3B $ 2(+,$3+'/ 3+ ?8328 ,( B,(/' ,8' 2(0'Z $+0 $
)1+2,3(+ ,( 2(5Q3&' ,8' 2(0' 3+,("

:6 0')$1&, ,8' )1+2,3(+ ?3&& %' ,8' B,$+0$/0 * '+,/6 Q(3+,E /"'# &+'(78"

,8 -(. ?/?@?$#?j(A*)-:/?#C ._/"@?)/:/?#B


,9 z*)-_#( : *)- gg YYxO++O)-_#(;/('A1$'(%)*(1B
,<

07 z#)"$#% : cd b H) @>$"f #)"$# /$*(% -_>?/X ")*=?#$@?)/


0!

0, z._/"@?)/ : ._/"@?)/ gg
00 z*)-_#(;._/"@?)/%;/$*(-A1*$?/1B gg b E(.$_#@ @T( ._/"@?)/ @) t*$?/t
04 z*)-_#(;._/"@?)/%;$--A1*$?/1C DKC YYxO;x)?-B
05

06 ze_?#-(> : YYxO++P_?#-(>;/(' b y>(=$>( $ e_?#-(> @) e_?#- ")-(;


08 ze_?#-(>;=)%?@?)/`$@`(/-Az._/"@?)/;e$%?"`e#)"f%;$==(/-B
09

0< z(/X?/( : YYxO++}2Ho)*=?#(>;/('Az*)-_#(B b HT( *$"T?/( ")-( ")*=?#(>;


47 (/-
4!

:')(/' 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

65 -(. "$##A/$*(C $>X%:DKB


66 ._/"@?)/ : z*)-_#(;._/"@?)/%;/$*(-A/$*(B
68 ze_?#-(>;"$##A._/"@?)/C W$>X%B
69 (/-
6<

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"

84 -(. $%%?X/A/$*(C \$#_(B


85 =@> : ze_?#-(>;$##)"$A\$#_(;@[=(B b &##)"$@( *(*)>[;
86 ze_?#-(>;%@)>(A\$#_(C =@>B b L@)>( @T( \$#_( ?/ @T( $##)"$@(- *(*)>[;
88 z#)"$#%D/$*(K : =@> b a((= @>$"f ). 'T(>( '( %@)>(- @T( #)"$#;
89 (/-
8<

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"

!7! -(. )=@?*?j(


!7, z*)-_#(;\(>?.[k b x(>?.[ @T( ")-( ?% \$#?-;
!70 =$%%`*$/$X(> : YYxO++y$%%O$/$X(>;/('Az(/X?/(B
!74 =$%%`*$/$X(>;*(*,>(Xk b y>)*)@( *(*)>[ @) *$"T?/( >(X?%@(>%;
!75 (/-
!76

['/' 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

CCUD 0('B+], 2(5Q3&' 03/'2,&6 ,( 5$283+' 2(0' %1, ,( $+ 3+,'/5'03$,' )(/5$,


2$&&'0 .JZ ?8328 3B B353&$/ ,( $BB'5%&6" .) 6(1 ?$+, ,( 3+BQ'2, ,8' <'+'/$,'0 .J )(/
,83B 5(01&'Z 2$&& ,8' )(&&(?3+< 5',8(0"

!!8 -(. -_*=


!!9 z*)-_#(;-_*=
!!< (/-
!,7 (/-

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"

!,4 "#$%% G)-(%


!,5 -(. ##\*`")*=?#(A")*=?#(>B
!,6 /)-(%;*$= c g/)-(g /)-(;##\*`")*=?#(A")*=?#(>B d;#$%@
!,8 (/-
!,9 (/-
!,<

!07 "#$%% G_*e(>G)-(


!0! -(. ##\*`")*=?#(A")*=?#(>B
!0, ")*=?#(>;/('`/_*e(>A\$#_(B
!00 (/-
!04 (/-
!05

!06 "#$%% L@>?/XG)-(


!08 -(. ##\*`")*=?#(A")*=?#(>B
!09 ")*=?#(>;/('`%@>?/XA\$#_(B
!0< (/-
!47 (/-

#( 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'/'"

!49 "#$%% o$##G)-(


!4< -(. ##\*`")*=?#(A")*=?#(>B
!57 >$?%( 1J("(?\(> /)@ %_==)>@(- .)> ")*=?#$@?)/1 ?. >("(?\(>
!5!

!5, ")*=?#(-`$>X_*(/@% : $>X_*(/@%;*$= c g$>Xg $>X;##\*`")*=?#(A")*=?#(>B d


!50 ")*=?#(>;"$##A*(@T)-C ")*=?#(-`$>X_*(/@%B
!54 (/-
!55 (/-
!56

!58 "#$%% M(@Y)"$#G)-(


!59 -(. ##\*`")*=?#(A")*=?#(>B
!5< ")*=?#(>;#)$-A/$*(B
!67 (/-
!6! (/-
!6,

!60 "#$%% L(@Y)"$#G)-(


!64 -(. ##\*`")*=?#(A")*=?#(>B
!65 ")*=?#(>;$%%?X/A/$*(C \$#_(;##\*`")*=?#(A")*=?#(>BB
!66 (/-
!68 (/-
!69

!6< "#$%% E(.G)-(


!87 -(. ##\*`")*=?#(A")*=?#(>B
!8! >$?%( 1y$>$*(@(>% /)@ %_==)>@(- .)> ")*=?#$@?)/1 ?. k=$>$*%;(*=@[p
!8, ")*=?#(>;._/"@?)/A/$*(B -) g._/"@?)/g
!80 e)-[;##\*`")*=?#(A._/"@?)/B
!84 (/-
!85 (/-
!86 (/-

;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

9 b y$>%( @T( ")-(


< /)-( : y$>%(>;/(';=$>%(A")-(B
!7

!! b o)*=?#( ?@
!, ")*=?#(> : YYxOo)*=?#(>;/('
!0 ")*=?#(>;=>($*e#(
!4 /)-(;##\*`")*=?#(A")*=?#(>B
!5 ")*=?#(>;.?/?%T
!6

!8 b N/")**(/@ @) )_@=_@ YYxO e[@(Z")-(


!9 b ")*=?#(>;-_*=
!<

,7 b n=@?*?j( @T( YYxO e[@(Z")-(


,! ")*=?#(>;)=@?*?j(
,,

,0 b }2H ")*=?#( u (]("_@(


,4 ")*=?#(>;>_/

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

.+ ,8' 8(Q' () 'GQ$+03+< 6(1/ >3'? (+ Q/(</$553+< &$+<1$<'B $+0 Q'/8$QB


3+BQ3/' 6(1Z ?']&& +(? ,$W' $ &((W $, $+(,8'/ &$+<1$<' ,8$, 3B 0/$B,32$&&6 03))'/'+,
)/(5 ,8' (+' ?']>' c1B, %13&, $+0 )/(5 5(B, 5$3+B,/'$5 &$+<1$<'B"

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?

[(5(32(+323,6 3B $ 8$/0 2(+2'Q, ,( </$BQ" #8' %'B, ?$6 ,( 1+0'/B,$+0 3, )1&&6 3B ,(


35Q&'5'+, 3," #8$, 3B ,8' Q1/Q(B' () ,83B B'2,3(+" ., B8(1&0 $&B( <3>' 6(1 <&35QB' $,
$+ 1+2(+>'+,3(+$& &$+<1$<'"

;']&& %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'"

MESSAGES ALL THE WAY DOWN

C3W' 3+ 7?'B(5'Z '>'/6,83+< 3B $+ (%c'2, 3+ D3(" 7003,3(+$&&6Z $ Q/(</$5 %'3+<


5',8(0 2$&&B $+0 &3,'/$&BZ 3B B35Q&6 $ B'/3'B () 5'BB$<'B" 7+0 5'BB$<'B $/'
B'Q$/$,'0 %6 BQ$2'B +(, 0(,BZ ?8328 5$W'B (1/ &$+<1$<' &((WB $ &(, &3W' Q&$3+
'+<&3B8"

! )eq("@ *(@T)-! *(@T)-,A$>X_*(/@B

.B ,8' B'5$+,32 'i13>$&'+, () ,8' )(&&(?3+< J1%6 2(0'E

! )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

5 -(. ?/?@?$#?j(A=>)@):/?#C \$#_(:/?#B


6 z=>)@) : =>)@) b y>)@)@[=(+ =$>(/@ )eq("@; Y?f( }$\$L">?=@3% ``=>)@)``;
8 z\$#_( : \$#_( b HT( J_e[ (v_?\$#(/@ \$#_(;
9 z%#)@% : cd b L#)@% $>( 'T(>( '( %@)>( *(@T)-% $/- $@@>?e_@(% ). $/ )eq("@;
< (/-
!7

!! b Y))f_= $ %#)@ ?/ @T( "_>>(/@ )eq("@ $/- =>)@);


!, -(. DKA/$*(B
!0 >(@_>/ z%#)@%D/$*(K ?. z%#)@%;f([pA/$*(B
!4 >(@_>/ z=>)@)D/$*(K ?. z=>)@) b oT("f ?. =$>(/@ =>)@)@[=(%
!5 >$?%( O?)++F>>)>C 1O?%%?/X %#)@+ bc/$*(;?/%=("@d1
!6 (/-
!8

!9 b L@)>( $ \$#_( ?/ $ %#)@


!< -(. DK:A/$*(C \$#_(B
,7 z%#)@%D/$*(K : \$#_(
,! (/-
,,

,0 b L@)>( $ *(@T)- ?/@) $ %#)@


,4 -(. -(.A/$*(C ue#)"fB
,5 z%#)@%D/$*(K : e#)"f
,6 (/-
,8

,9 b HT( "$## *(@T)- ?% _%(- @) (\$# $/ )eq("@;


,< b P[ -(.$_#@ )eq("@% (\$# @) @T(*%(#\(%;
07 -(. "$##AW$>X%B
0! %(#.
0, (/-
00

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 =>?/@

3B Q$/B'0 $B ,8' )(&&(?3+< ,/'' () 5'BB$<'BE

! 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$<'"

! %(#. =>?/@ b i: Y?/( e>($f >(%(@% @T( >("(?\(> @) %(#.


, %(#. =>?/@ b L) /)' ?@ #))f% $% ?. '(3>( %@$>@?/X $ /(' (]=>(%%?)/
0 b '?@T @T( %$*( >("(?\(> $% e(.)>(;

#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

!! -(. ?/?@?$#?j(A/$*(C #?/(B


!, z/$*( : /$*(
!0 z$>X% : DK
!4 z#?/( : #?/(
!5

!6 b Y?@(>$#% $>( %@$@?" \$#_(%C '( "$/ (\$# @T(* >?XT@


!8 b $'$[ $/- "$"T( @T( \$#_(;
!9 z"$"T(-`\$#_( : "$%( z/$*(
!< 'T(/ RsU-VR
,7 Y)ee[D1G_*e(>1K;"#)/(Az/$*(;@)`?B
,! 'T(/ Rs1A;WB1wR
,, Y)ee[D1L@>?/X1K;"#)/(Aw!B
,0 (/-
,4

,5 z@(>*?/$@)> : D1;1C 1U/1K;?/"#_-(pAz/$*(B


,6

,8 %_=(>AY)ee[D1O(%%$X(1KB
,9 (/-
,<

07 b o$## A(\$#B @T( *(%%$X( )/ @T( V>("(?\(>V;


0! -(. "$##A>("(?\(>C ")/@(]@:>("(?\(>C W$>X%B
0, ?. z@(>*?/$@)>
00 b >(%(@ >("(?\(> @) )eq("@ $@ e(X?//?/X ). @T( "T$?/;
04 b (X;+
05 b T(##) @T(>(; [)
06 b s s`` 1;1 >(%(@% e$"f @) @T( >("(?\(> T(>(
08 b U````````````````````````````````````````````````R
09 \$#_( : ")/@(]@
0< (#%?. z"$"T(-`\$#_(
47 b S( $#>($-[ X)@ @T( \$#_(
4! \$#_( : z"$"T(-`\$#_(
4, (#%(
40 b Y))f_= @T( %#)@ )/ @T( >("(?\(>
44 %#)@ : >("(?\(>D/$*(K
45

46 b F\$# @T( )eq("@ ?/ @T( %#)@


48 \$#_( : %#)@;"$##A>("(?\(>C ")/@(]@C Wz$>X%B
49 (/-
4<

57 b y$%% @) /(]@ *(%%$X( ?. %)*(


5! ?. z/(]@
5, z/(]@;"$##A\$#_(C ")/@(]@B
50 (#%(
54 \$#_(
55 (/-
56 >(%"_( O?)++F>>)> :h (
58 b a((= @>$"f ). @T( *(%%$X( @T$@ "$_%(- @T( (>>)> @) )_@=_@
59 b #?/( /_*e(> $/- %_"T;
5< (;"_>>(/@`*(%%$X( gg: %(#.
67 >$?%(
6! (/-
6,

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!

8, b y$>%( $ %@>?/X ?/@) $ @>(( ). *(%%$X(%


80 -(. %(#.;=$>%(A")-(B
84 =$>%(`$##A")-(C !B;#$%@
85 (/-
86

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

< -(. "$##A>("(?\(>C "$##?/X`")/@(]@C W$>X%B


!7 b S));;; #)@% ). ")/@(]@% T(>(;;; #(@% "#($> @T$@ _=+
!! b z-(.?/?@?)/`")/@(]@+ 'T(>( @T( *(@T)- '$% -(.?/(-
!, b "$##?/X`")/@(]@+ 'T(>( @T( *(@T)- '$% "$##(-
!0 b *(@T)-`")/@(]@+ 'T(>( @T( *(@T)- e)-[ A*(%%$X(B ?% (]("_@?/X
!4 *(@T)-`")/@(]@ : z-(.?/?@?)/`")/@(]@;"#)/(
!5 *(@T)-`")/@(]@D1%(#.1K : >("(?\(>
!6 *(@T)-`")/@(]@D1$>X_*(/@%1K : Y)ee[D1Y?%@1K;"#)/(A$>X%B
!8 b G)@(+ /) $>X_*(/@ ?% (\$#_$@(- T(>(; n_> #?@@#( #$/X_$X( )/#[ T$% #$j[ $>X_*(/@
!9 b (\$#_$@?)/; 2. [)_ =$%% $>X% @) $ *(@T)-C [)_ T$\( @) (\$# @T(* (]=#?"?@#[C
!< b _%?/X @T( .)##)'?/X *(@T)-;
,7 *(@T)-`")/@(]@D1(\$#`$>X1K : =>)" -) g>("(?\(>C ")/@(]@C $@g
,! A$>X%D$@;"$##A")/@(]@B;\$#_(K gg Y)ee[D1/?#1KB;"$##A"$##?/X`")/@(]@B
,, (/-
,0 z*(%%$X(;"$##A*(@T)-`")/@(]@B
,4 (/-
,5 (/-
,6 (/-

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

5 )eq("@;-(. 1"#)/(1 -) g>("(?\(>C ")/@(]@g


6 >("(?\(>;"#)/(
8 (/-
9 )eq("@;-(. 1%(@`%#)@1 -) g>("(?\(>C ")/@(]@C /$*(C \$#_(g
< >("(?\(>D/$*(;"$##A")/@(]@B;\$#_(K : \$#_(;"$##A")/@(]@B
!7 (/-
!! )eq("@;-(. 1=>?/@1 -) g>("(?\(>C ")/@(]@g
!, =_@% >("(?\(>;\$#_(
!0 Y)ee[D1/?#1K
!4 (/-
!5

!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

0! b HT( *(@T)- '(3## _%( @) -(.?/( *(@T)-%;


0, Y)ee[;-(. 1*(@T)-1 -) g>("(?\(>C ")/@(]@C *(%%$X(g
00 O(@T)-;/('A")/@(]@C *(%%$X(B
04 (/-
05 (/-

IMPLEMENTING MIO IN MIO

#83B 3B $&& ?' +''0 ,( B,$/, 35Q&'5'+,3+< (1/ &$+<1$<' 3+ 3,B'&)"

@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 o>($@( $ /(' )eq("@C e[ "#)/?/X @T( *$%@(> neq("@


, %(@`%#)@A1-_-(1C neq("@ "#)/(B
0 b L(@ $ %#)@ )/ ?@
4 -_-( %(@`%#)@A1/$*(1C 1P)e1B
5 b o$## @T( %#)@ @) >(@>?(\( ?@% \$#_(
6 -_-( /$*( =>?/@
8 b :h P)e
9

< b E(.?/( $ *(@T)-


!7 -_-( %(@`%#)@A1%$[`/$*(1C *(@T)-A
!! b y>?/@ _/(\$#_$@(- $>X_*(/@% A*(%%$X(%B
!, $>X_*(/@% =>?/@
!0 b :h iO(%%$X( z/$*(:1T(##);;;1h
!4

!5 b F\$# @T( .?>%@ $>X_*(/@


!6 (\$#`$>XA7B =>?/@
!8 b :h T(##);;;
!9

!< b &""(%% @T( >("(?\(> \?$ t%(#.t


,7 %(#. /$*( =>?/@
,! b :h P)e
,, BB
,0
,4 b o$## @T$@ *(@T)-
,5 -_-( %$[`/$*(A1T(##);;;1B

['/']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"

! b &/ )eq("@ ?% $#'$[% @>_@T[


,

0 neq("@ %(@`%#)@A1$/-1C *(@T)-A


4 (\$#`$>XA7B
5 BB
6 neq("@ %(@`%#)@A1)>1C *(@T)-A
8 %(#.
9 BB
<

!7 b ;;; (]"(=@ /?# $/- .$#%( 'T?"T $>( .$#%(


!!

!, /?# %(@`%#)@A1$/-1C /?#B


!0 /?# %(@`%#)@A1)>1C *(@T)-A
!4 (\$#`$>XA7B
!5 BB
!6

!8 .$#%( %(@`%#)@A1$/-1C .$#%(B


!9 .$#%( %(@`%#)@A1)>1C *(@T)-A
!< (\$#`$>XA7B
,7 BB

In file !"#$%+$,+%15"%*""&$0.)15"

! 1[)1 )>A1T?1B =>?/@


, b :h [)
0

4 /?# )>A1T?1B =>?/@


5 b :h T?
6

8 1[)1 $/-A1T?1B =>?/@


9 b :h T?
<

!7 ! $/-A, )>A0BB =>?/@


!! b :h ,

lB3+< ,8(B' ,?( (Q'/$,(/BZ ?' 2$+ 35Q&'5'+, '5"

In file !"#$%15"%5:)15"

! b 2*=#(*(/@ ?. _%?/X e))#($/ #)X?"


,

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

7+0 +(?j 8(&6 5$<32$& Q(+6_

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$<'_

BUT IT’S UGLY

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

7 B'&)T8(B,3+< 3+,'/Q/','/ $35B ,( 35Q&'5'+, ,8' 3+,'/Q/','/ 3+ ,8' ,$/<', &$+<1$<'"


#83B 3B >'/6 ,'03(1B B3+2' 6(1 +''0 ,( 35Q&'5'+, $+ 3+,'/Q/','/ )3/B, ,( /1+ ,8'
&$+<1$<'Z ?8328 2$1B'B $ 23/21&$/ 0'Q'+0'+26 %',?''+ ,8' ,?("

*())''42/3Q, 3B $ &3,,&' &$+<1$<' ,8$, 2(5Q3&'B 3+,( a$>$42/3Q," #8' *())''42/3Q,


2(5Q3&'/ 3B 3,B'&) ?/3,,'+ 3+ *())''42/3Q,"

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?

.) 6(1]/' B'/3(1B $%(1, %13&03+< $ /'$& &$+<1$<' H/'$& $B 3+ Q/(012,3(+T/'$06IZ ,8'+


6(1 B8(1&0 2(+B30'/ 35Q&'5'+,3+< 3, 3+ $ )$B,'/ $+0 5(/' /(%1B, '+>3/(+5'+,"
J1%6 3B +32' )(/ i132W Q/(,(,6Q3+< %1, 8(//3%&' )(/ &$+<1$<' 35Q&'5'+,$,3(+"

#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+<"

7&B(Z 2(5Q3&3+< ,( $+(,8'/ &$+<1$<' &3W' a$>$42/3Q, 3B $ </'$, (Q,3(+"

N(? <', (1, ,8'/' $+0 5$W' 6(1/ (?+ $?'B(5' &$+<1$<'_
RESOURCES

BOOKS & PAPERS

C$+<1$<' .5Q&'5'+,$,3(+ A$,,'/+BZ %6 #'/'+2' A$//Z )/(5 #8' A/(</$55$,32


A/(</$55'/B"

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"

7 N(T@/3&&B .+,/(012,3(+ ,( C1$ M"! UD .+B,/12,3(+BZ %6 o'3+T[(+< D$+"

#8' .5Q&'5'+,$,3(+ () C1$ M"YZ %6 J(%'/,( .'/1B$&35B286 ', $&"

EVENTS

==A4C7Z #8' .+,'/+$,3(+$& *(+)'/'+2' (+ =%c'2, =/3'+,'0 A/(</$553+<Z


46B,'5BZ C$+<1$<'B $+0 7QQ&32$,3(+BZ 3B $ <$,8'/3+< () 5$+6 Q/(</$553+<
&$+<1$<' $1,8(/B"

#8' aUD C$+<1$<' 41553, 3B $+ (Q'+ ,'28+32$& 2(&&$%(/$,3(+ $5(+< &$+<1$<'


0'B3<+'/BZ 2(5Q3&'/ ?/3,'/BZ ,((& %13&0'/BZ /1+,35' '+<3+''/BZ $+0 UD $/283,'2,B )(/
B8$/3+< 'GQ'/3'+2'B $B 2/'$,(/B () Q/(</$553+< &$+<1$<'B )(/ ,8' aUD"

FORUMS AND BLOGS

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

.( 3B $ B5$&&Z Q/(,(,6Q'T%$B'0 Q/(</$553+< &$+<1$<'" #8' 30'$B 3+ .( $/'


5(B,&6 3+BQ3/'0 %6 45$&&,$&W H$&& >$&1'B $/' (%c'2,BZ $&& 5'BB$<'B $/'
06+$532IZ 4'&) HQ/(,(,6Q'T%$B'0IZ N'?,(+42/3Q, H03))'/'+,3$& 3+8'/3,$+2'IZ
72,! H$2,(/B $+0 )1,1/'B )(/ 2(+21//'+26IZ C.4A H2(0' 3B $ /1+,35'
3+BQ'2,$%&'m5(03)3$%&' ,/''I $+0 C1$ HB5$&&Z '5%'00$%&'I"

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"

@$2,(/ 3B $ 2(+2$,'+$,3>' Q/(</$553+< &$+<1$<' ?8'/' /')'/'+2'B ,( 06+$532$&&6T


,6Q'0 >$&1'B $/' Q$BB'0 %',?''+ ?(/0B H)1+2,3(+BI (+ $ B,$2W"

C1$E

C1$ 3B $ Q(?'/)1&Z )$B,Z &3<8,?'3<8,Z '5%'00$%&' B2/3Q,3+< &$+<1$<'"

C1$ 2(5%3+'B B35Q&' Q/(2'01/$& B6+,$G ?3,8 Q(?'/)1& 0$,$ 0'B2/3Q,3(+


2(+B,/12,B %$B'0 (+ $BB(23$,3>' $//$6B $+0 'G,'+B3%&' B'5$+,32B" C1$ 3B
06+$532$&&6 ,6Q'0Z /1+B %6 3+,'/Q/',3+< %6,'2(0' )(/ $ /'<3B,'/T%$B'0 >3/,1$&
5$283+'Z $+0 8$B $1,(5$,32 5'5(/6 5$+$<'5'+, ?3,8 3+2/'5'+,$& <$/%$<'
2(&&'2,3(+Z 5$W3+< 3, 30'$& )(/ 2(+)3<1/$,3(+Z B2/3Q,3+<Z $+0 /$Q30 Q/(,(,6Q3+<"
C1$a.# 3B $ </'$, 'G$5Q&' () B,$,'T()T,8'T$/, 06+$532 &$+<1$<' 5$283+' 2(0'
2(5Q3&'/ )(/ $QQ/($283+< +$,3>' Q'/)(/5$+2' ?3,8(1, B$2/3)323+< 06+$53B5"

,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+<"

O$28 Q/(</$553+< &$+<1$<' 3B $ 1+3i1' Q3'2' () $/, ,8$, $&&(?B 1B 815$+B ,(


3+,'/$2, ?3,8 5$283+'B" #8'/' $/' '+0&'BB Q(BB3%3&3,3'B ?8'+ 0'B3<+3+< $ &$+<1$<'Z
3, 2$+ %' (Q,353f'0 )(/ Q'/)(/5$+2'Z 8$QQ3+'BBZ W'6B,/(W'BZ &$1<8B" #8' (+&6 &353,
3B 6(1/ 35$<3+$,3(+"
FAREWELL!

#8$, 3B $&& )(/ +(?" . 8(Q' 6(1 '+c(6'0 56 %((W_

.) 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,_

#8$+WB )(/ /'$03+<"

! =72)
SOLUTIONS TO ;< => ?<@ABCDE

SOLUTIONS TO ;< => ?<@ABCDE =

0O >,-"@4 <*& 3&?&% <, 60%.&P !"#$% &'()#*#'(+ , ;,2<%,3 .<%$;<$%&.O

435Q&6 $00 DW',$ ,( ,8' J@LnIg? $//$6 (+ &3+' -"

! aFmSnJEL : D;;;C 1'T?#(1K

9O >,-"@4 <*& 3&?&% <, -&3"1"< 93,;Q. N"<* - , . "2.<&0- ,@ "2-&2<0<",2O

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?#( ? i ")-(;%?j(


!7 "T_/f : ")-(D?;;Z!K
!!

!, ?. ?-(/@?.?(> : "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(
!<

,7 (#%?. ")/%@$/@ : "T_/fDRU&AD&ZrKU'WBRC !K


,! @)f(/% ii D+onGLH&GHC ")/%@$/@K
,, ? V: ")/%@$/@;%?j(
,0

,4 (#%?. /_*e(> : "T_/fDRU&AD7Z<KVBRC !K


,5 @)f(/% ii D+GNOPFJC /_*e(>;@)`?K
,6 ? V: /_*e(>;%?j(
,8

,9 (#%?. %@>?/X : "T_/fDRU&1A;WpB1RC !K


,< @)f(/% ii D+LHJ2GMC %@>?/XK
07 ? V: %@>?/X;%?j( V ,
0!

0, bbbbbb
00 b &## ?/-(/@$@?)/ *$X?" ")-( '$% >(*)\(- $/- )/#[ @T?% (#%?. '$% $--(-;
04 (#%?. "T_/f;*$@"TARU&U/VRB
05 @)f(/% ii D+GFSY2GFC 1U/1K
06 ? V: !
08 bbbbbb
09

0< (#%?. "T_/f;*$@"TARU& RB


47 ? V: !
4!

4, (#%(
40 \$#_( : "T_/fD7C!K
44 @)f(/% ii D\$#_(C \$#_(K
45 ? V: !
46

48 (/-
49

4< (/-
57

5! @)f(/%
5, (/-
50 (/-

SOLUTIONS TO ;< => ?<@ABCDE ==

0O =-- 0 %$3& "2 <*& #%0110% <, 60%.& !"#$% 93,;Q.O

#83B /1&' 3B >'/6 B353&$/ ,( .)"


! b &@ @T( @)= $--+
, @)f(/ S{2YF
0

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

! "#$%% ST?#(G)-( i L@>_"@;/('A+")/-?@?)/C +e)-[B^ (/-

9O =-- 0 #%0110% %$3& <, *02-3& <*& / $20%4 ,6&%0<,%.O

4353&$/ ,( ,8' %3+$/6 (Q'/$,(/" *$&&3+< ]C 3B &3W' 2$&&3+< C2]"

! n=(>$@)>+
, b ;;;
0 g 3k3 F]=>(%%?)/ c >(%_#@ : o$##G)-(;/('A\$#D!KC \$#D7KC DKB d
4 ^

SOLUTIONS TO ;< => ?<@ABCDE ===

0O F163&1&2< "2*&%"<02;& 94 0--"2# 0 .$6&%;30.. <, &0;* =N&.,1& ;30..O

! "#$%% &'(%)*(o#$%% i &'(%)*(neq("@


, b ;;;
0

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

9O =-- <*& 1&<*,- <, *02-3& 0 1 2O

! o)/%@$/@%D1G_*e(>1K;-(. +V -) g>("(?\(>C $>X_*(/@%g


, >(%_#@ : >("(?\(>;>_e[`\$#_( V $>X_*(/@%;.?>%@;>_e[`\$#_(
0 o)/%@$/@%D1G_*e(>1K;/('`'?@T`\$#_(A>(%_#@B
4 (/-

SOLUTIONS TO ;< => ?<@ABCDE =G

0O F163&1&2< <*& 3"#$%4')%O

DW',$ 3B >'/6 B353&$/ ,( '5"

! "#$%% ST?#(G)-(
, -(. (\$#A")/@(]@B
0 'T?#( z")/-?@?)/;(\$#A")/@(]@B;>_e[`\$#_(
4 ze)-[;(\$#A")/@(]@B
5 (/-
6 o)/%@$/@%D1/?#1K
8 (/-
9 (/-

Vous aimerez peut-être aussi