Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir...

320
Como Construir um Compilador Utilizando Ferramentas Java

Transcript of Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir...

Page 1: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

!#"i

i

i

i

i

i

i

i

Como Construirum Compilador

UtilizandoFerramentas Java

Page 2: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$%& &'( !)i

i

i

i

i

i

i

i

Page 3: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

*%+ %& , -'. !0/i

i

i

i

i

i

i

i

Como Construirum Compilador

UtilizandoFerramentas Java

Márcio Delamaro

Novatec Editora

Page 4: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ $%& -'12 !3i

i

i

i

i

i

i

i

465 78.9: © <;<= 5 1:8>(?@;$.: 5 78<AB:8;C

D 5 ; 5EF5E ;$'7G>H: 5E 78 E +781I; 5E J7 5 :G>K; 5E L>M')AB>BC "N 3;$<"> %"NCPOQ7 5 .';078+7 5 ;$RS+T 5 ;$ E :U 5 78VNW< E W 5 L7UKMXVN 5 7ZY%RMKY%R+7[7 5 E8EG5 V E >W\7G]>1'^R$: 5 7G'_>S+T 5 V 5 7` E 78.: 5 V; 5 R$: 5 7ab;)?@;$.: 5 7UC

?@;$.: 5 7>dc^RL>e E`f 7U:8 Ec`>1% E T 5 ;$J:G+g%: 5 f :87G'_+KihPe4 Lkj'e<j>7Gee;$ E

lm$n =bLoIpqopr %ooIpU"

= 5 1:G>(?@;H: 5 7U)AB:8;Cc`R 465 e E Cds 5 78+'780;$ n 787 5%E Vt"> 3u 465 evCd " "Npw "N m T 5<f RM 5 V m f u n 7U E .MD +MXC.6xJoo#""JopwojgydxJooz""Jo pw?kprWi'Mke 5 1:G>I| e 5 1:8>N;$.: 5 7UC 5 WC 7m .:Gk~`~`~C e 5 1:G>+>;$.: 5 78C 5 WC 7

Page 5: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

NLP LLLyPLL\ LBKL [L ,i

i

i

i

i

i

i

i

Sumário

P+B [¡[¢£ "C'"¥¤YR ¦§_JRW¨ 5 W<'M'; 5 7©CCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC ""Cª ¤ E 5 W< 5 e+e%:G E ;$RW« 5 W<'MK; 5 7¬CJCCJCCC(CCJCCJCCCJCCJCC(CCC /

"Cª$C'" ¤eM. E ; 5 7FM']g$' 5 CCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC /"Cª$Cª ¤eM. E ; 5 7 E .e%:8­:GK 5 CCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC "Cª$C / ¤eM. E ; 5 7 E +Wi®e%:GK 5 CJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC "Cª$C ¤\+7U; 5 7a;$b¯$;$' 5 CJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC

"C / ¤°I1 4`4 5 °% E W<.e C(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC q

²±´³@µ ¡ t¶X++

$C'"¸·^M.¦§t: 5E VM'I17U E M.'eRL>e E CJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC $Cª ¹(7UWi­:8'>3M'.178;$b 5 e:8g: 5 CJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC ""$C / j 5 7GWi<;$ n UºR E pw=»R7C(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC "N$C n =»j¬7U0<M''eR>W

X++CJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC "No

$Cªo ¹(7U¦ 5E`E 'e:U­:8' 5E CCJCC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC¥$C m >W<®e%:GK+<;)M.'eR+W

X++CCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC²//

$C¼q¾½^W¨7 5 7UWi3+WX++

CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC²//

¿ ± [ÀÁ µÂ>³6Ã%ÄBµ§ ¿PÅ/C'"¸·^R:GÆWi: 5EFÇ eH: 5E CCJCC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC²/%q/Cª¾?kg$78 E8EÈ E 7G>RMK78 E CC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC¸/C / ¤eM. E ; 5 7FM']g$' 5 ;)M.'eRL>W

X++CJCCC(CCJCCJCCCJCCJCC(CCC¸q

/C 465 W<>e:U­78 5%E CCCJCCJCC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC¥o/CªoÉc`NRt+7US>T 5 ;$+787 5%E M.]+gK 5%E CJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC¥o/C ·^7UY%R'1 5E pX¦ 5 e%:GJ; 5 5 W).MK; 5 7ÊCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC¥o

1

Page 6: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

NLyË LtyPt Ì't ZtBµÍ i

i

i

i

i

i

i

i

1 Î`ÏaÐÑÏÎ`ÏaÒ ÓÌÔZÕ0ÖØ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

¾± [ÀÁ µÂ>&Þ̵ PNÀ$ µ C'"¸·^eL­M' E E 'e%:8­:GK+);$ E >e;$+e%:87GNR7 E '1QCJCCC(CCJCCJCCCJCCJCC(CCC²"Cª ¤eM. E ; 5 7 E .e%:8­:GK 5 ;)M'.eR+W

X++CC(CCJCCJCCCJCCJCC(CCC²

C / ·^7UY%R'1 5E pX¦ 5 e%:GJ; 5 5 W).MK; 5 7ÊCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC²"

²ß ¶à P>, á II ÂÍÞ̵ P>À µ§  Po$C'"¥¤W)]+: 5 ; 5 ;$78 E8E 'e+7 5 e._NS>T 5 CCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC²oo$Cª l W<M'+W<+e%:8S+T 5 ;078>+Rt+7US+T 5 ;$>7G7 5E CCC(CCJCCJCCCJCCJCC(CCC²o$C / ·^M'RW< E 5%EGEGâ 1+ E W<+M'9 5 78K E CJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"N %qo$C ·^7UY%R'1 5E pX¦ 5 e%:GJ; 5 5 W).MK; 5 7ÊCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ""Iq

Éãä ¢£à å L -Þ̵ P>À µ§ ¿C'"¥¤YR(]b<­7G1 5 78 E .e%:8­:GK+æCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"I/Cª l W<M'+W<+e%:8S+T 5 ;)­7G1 5 78 E .e%:U­:GK+çCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"IoC / ·^7UY%R'1 5E pX¦ 5 e%:GJ; 5 5 W).MK; 5 7ÊCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"N%q

Å á»ÄBµ§[µ ¢£, å L Þ̵ P>À µ§ tqC'"?kg$''S>T 5 ;i­7G1 5 78 E .e%:8­:GK+\CJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"N

qC'"C'" =»RW<+7US+T 5 ; 5E e¯ E CCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"qIqC'"Cª ?kg$'KS+T 5 ; 5%E e¯ E CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"N

qCª ¤ R$:878 Ea5 t+7US È E CCJCC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"N"qC / ·^7UY%R'1 5E pX¦ 5 e%:GJ; 5 5 W).MK; 5 7ÊCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"N

¥ß6@ Á -ÞÌ觶- tÁ§  PC'" f 7U<YR E +781éCJCCJCC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"NoCªÉ·ê:8L>M'i; EGâ W3 5 M 5E 78

X++CJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"N%q

C / l W<M'+W<+e%:8S+T 5 ;3:Ut+MK<;$ Eâ W3 5 M 5E CJCCC(CCJCCJCCCJCCJCC(CCCQ"N"

¥± [ÀÁ µÂ>&Þ̶àë P µ§ì¬í µ§¶àµ -í» I tC'"¸·^eL­M' E E >Wi®e%:GK+0+W E E CJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"NCªÉ·^eL­M' E b;<;$>+M'78S+T 5 ;$b+M' EGE E CJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà C / l W<M'+W<+e%:8S+T 5 CJCCJCC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà /C ¤7 5 7UWi78'e'MïC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà CªoÉ·^7UY%R'1 5E pX¦ 5 e%:GJ; 5 5 W).MK; 5 7ÊCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà

Page 7: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

*%+ %& &1.( !<qi

i

i

i

i

i

i

i

ÓZÖØÐð Õ`×+Ï 1'

± [ÀÁ µÂ>&Þ̶àë P µ§ì2ÞB ¡Ø[ -í I t"> C.",·^eL­M' E b;)9'+7U7UYR');$MK E8E E CJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà "> C 2·^eL­M' E b;<;$>+M'78S+T 5 ;$178K­I1+ E (W<]+: 5 ; 5E CCJCCJCCCJCCJCC(CCCà"N"> C /ñ¤7 5 7UWi78'e'MïC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà">"> C ò·^7UY%R'1 5E pX¦ 5 e%:GJ; 5 5 W).MK; 5 7ÊCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà">

t ± [ÀÁ µÂ>&Þ̶àë P µ§ì¬í» I &ó`µ Á L ""C." 4 9N++Wî;J:G' 5%E CJCC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà$"""C 2·^eL­M' E b; E ;>MK7US È E CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà""C /Q·^eL­M' E b; 5E 5 WieL; 5E C(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà/o""C ò·^eL­M' E b;$Jg$78 E8EÈ E CC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà""C o2·^7UY%R'1 5E pX¦ 5 e%:GJ; 5 5 W).MK; 5 7ÊCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCào

ãä ¢£à -ô0õ µ§ "NC.",·\s­YR.e)ö .7G:GRMB°I1\CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà""NC ò¤· E8E >W3M'+7a78<°%I1I#C(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCào"NC / l W<M'+W<+e%:8S+T 5 CJCCJCC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà%q

"NC /C."¹(>78S+T 5 ;$b¯$;$' 5 78 5E 5 WieL; 5E C(CCJCCJCCCJCCJCC(CCCà%qq"NC /C ¹(>78S+T 5 ;$b¯$;$' 5 78) E +g$7G EGEGÈ E CCJCCJCCCJCCJCC(CCCà/"NC /C /·»M.RWi E 78 E :G78'S È E CCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà

"NC ʤ7GRe%:8.W<X++

CJCCJCC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà"NC o2·^7UY%R'1 5E pX¦ 5 e%:GJ; 5 5 W).MK; 5 7ÊCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà""NC 2?kg$+W<M 5E CJCCCJCCJCC(CCCJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà

±¾á»ÄB èµ Â Å

÷²ø Lô<ô t

ô ø Â>¶¬µ ¿ P

Page 8: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

1.' !3i

i

i

i

i

i

i

i

1.' Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

Page 9: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ $%& -.gQ !0i

i

i

i

i

i

i

i

Lista de Figuras

"C'" f 7 5 E8EG5E ;$#ù§%úa 5 W).MKS>T 5 #ù§LúFM'.eº>;$KS+T 5 CCCJCCJCCCJCCJCC(CCC "Cª¾?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+C%CJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCC o

/C'"ö» E T 5 ;$RW«·»jZû 5 W 5 RW<)Wi­Y%R'eCCJCCC(CCJCCJCCCJCCJCC(CCC²//CªÉû '7UWi0;J:G7Ue E 'S>T 5 ;$J E :8; 5 7U

A1

CÍCC(CCJCCJCCCJCCJCC(CCC¸ /C / û '7UWi0;J:G7Ue E 'S>T 5 ;$J E :8; 5 7U

A2

CÍCC(CCJCCJCCCJCCJCC(CCC¸"/C û '7UWi0;J:G7Ue E 'S>T 5 ;$J E :8; 5 7U

A3

CÍCC(CCJCCJCCCJCCJCC(CCC¸%/CªoÉû '7UWi0;J:G7Ue E 'S>T 5 ;$J E :8; 5 7U

A4

CÍCC(CCJCCJCCCJCCJCC(CCC¸/C û '7UWi0;J:G7Ue E 'S>T 5 ;$J E :8; 5 7U

A5

CÍCC(CCJCCJCCCJCCJCC(CCC¸%o

C'" 4 9W<; E ; 5 · m 7UÍü ý E e.e9; 5%E CþCJCCC(CCJCCJCCCJCCJCC(CCC²

C'"?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+C%CJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"ICª¾?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+) E :G7U:UCÿCJCCC(CCJCCJCCCJCCJCC(CCCQ"IoC /É?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07UHC C(CCJCCJCCCJCCJCC(CCCQ"IC ?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07U ¼ü C0CC(CCJCCJCCCJCCJCC(CCCQ"N/ Cªo¾?k:U E ;< 5 e E :87GRLS+T 5 ;<­781 5 7G E 'e%:8­:GK+CCC(CCJCCJCCCJCCJCC(CCCQ"N/C É?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07UCÊC(CCJCCJCCCJCCJCC(CCCQ"N/C¼q¥?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07U¼C«CC(CCJCCJCCCJCCJCC(CCCQ"N/C É?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07U Ì"!#%$&¼C¨CC(CCCQ"> C É?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07U!"%$'C CCJCCJCCCJCCJCC(CCCQ">%C'"> 2?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07U( ))!"6" )*¼ü XC CCJCCJCC(CCCQ">C'""?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07U,+-/.10&2,ù345Iú C CCJCCJCC(CCCQ">C'"NÑ?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07U

a[j][i + 1] = b − 10ù345Iú CCCJCCC2"Io

C'">/2?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07Ua[i].x = b − 10

ù355IúC CCJCCJCCCQ"No$"

.g

Page 10: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$%& gñ !Í"N i

i

i

i

i

i

i

i

g Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

C'"+Q?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07Ua[i].x(2, k).y = b − 10

ù655Iú C CCCQ"IoC'"NoÑ?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07Uäü ý )C¨CCC(CCJCCJCCCJCCJCC(CCCQ"IoC'">2?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07UJý XC$CCC(CCJCCJCCCJCCJCC(CCCQ"N C'"Iq¬?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07U7!#89: C C(CCJCCJCCCJCCJCC(CCCQ"N/C'">2?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+07U<)g$78 E8E T 5

a + b.x < −3 ∗ c[2]CÍCCC2"No

qC'"?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+0eRW<+7U;CCJCCC(CCJCCJCCCJCCJCC(CCCQ"q"

C'"?kg$+W<M 5 ;$RWi) E :G78R$:8R78<; 5 :8. 5;=<>@?AB:CD CbCCJCCJCCCJCCJCC(CCCQ"NCªFE^781 5 7G E .e%:8­:GK+)78) 5 e E :87GRLS+T 5 ;0:8L>M'<;$ EGâ W3 5 M 5E CCJCCJCC(CCCQ"NC /É?kg$+W<M 5 ;$RWi0:8L>M'<;$ EGâ W3 5 M 5E C#CCJCCC(CCJCCJCCCJCCJCC(CCCQ"NC E^781 5 7G E .e%:8­:GK+)78,!#%$0C0CJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCQ"N Cªo¾?kg$+W<M 5 ;$J:Ut+MK); Eâ W3 5 M 5E 5 W178'­I1+ E M 5 + E C CCCJCCJCC(CCCQ"N"C c`>7G E >e%:8S>T 5 ;).W<M'+W<>e:US>T 5 ;$ ;=<>@?AB:CD CCJCCJCCCJCCJCC(CCCQ"N/C'"?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+C%CJCCJCCJCCJCCC(CCJCCJCCCJCCJCC(CCCà "Cª l e E +7US+T 5 ;$b+M' EGE (e):8L>M'<;$ EGâ W0 5 M 5%E C6CCC(CCJCCJCCCJCCJCC(CCCà

""C."?kg$+W<M 5 ;$bU9N++W;J:G' 5%E 7U0 5 WieL; 5 ü ýUC CCJCCCJCCJCC(CCCà""C m >Re; 5 +g$+W<M 5 ;bU9>>>W;$J:G' 5E 78) 5 Wie; 5 ü ýUCyCJCCJCC(CCCà

"NC."?kg$+W<M 5 ;$bM 5 +S+T 5 ;$b7GRW<+e%: 5%E e 5 1: 5 7`;$178'­I1+ E M 5 + E CËCCCà/"NC f 'M.9L<e)g$>+RS+T 5 ;0'e E :G78RS+T 5 üG&CCCJCCC(CCJCCJCCCJCCJCC(CCCà

Page 11: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& , &g$ !Í""i

i

i

i

i

i

i

i

Prefácio½^WþM.'17 5E5 78ä 5 W<'M'; 5 78 E ;$+1+78'-78 E +e%:U73RW<1 E T 5 +7UM E5 7Gz:G]NeK+ E ;$ 5 W<.MKS>T 5 VB¦ +787UW<+e%:8 E V[M'K+S È E :UC? E :GzM.'17 5 ]#t+W´Wi E W 5 ;$ E : 5 V[1 E : 5 Y%RW 5E :G7Ui 5 W 5 5 e E :G78R'7^RWæ 5 W<.MK; 5 7NVR$:G'M'._N<:G]NeK+ib¦ +7878W)>e%:8 E E LN â.Ç + E 7U:8My.e%:8+e%: 5 C

s E W 5 E8E .WV E +7U­"H$:8.MZiR7 EG5E ;$37U;$RS+T 5 Y%R E b7 5 5 e9Wî:8W3t]+W iRWi 5 7U;+W«7U­:8'>VP#'e>e:8.17G>W 5%E E :8R;e:8 E 0G 5 M 5 +7G>W« E WiT 5E e#Wi E8E Ib 5 e E :G78R â 78+W E +R E 7G¯78 5%E 5 W<'M'; 5 78 E CZû» EGE 0¦ 5 78W<V$ 5 ;$>78­ E +781.7` 5 W 5 RWRK<E +7aR$:G'M'._N; 5 +W¨R7 E5%E ;$ 5 W<'MK; 5 7G E V+Wî7UM'+M 5 <RM' E Y%RJ>e E 'e>Wî0:G 5 7GK);$¦ 5 78Wi)W< E W<M'C

D W3t]+W 5 ;+7U­^R$g$'M.K7ØY%R+M' E YRVI+W0 5 78aeT 5»E +e; 5 ;»­78>Ik;$6 5 W<'M'; 5 78 E VeN E8E H:8+W +WM.RWW 5 W<+e%: 5 ;01';0>;7I>W)K+ 5 Rz7 5ÇLE8E 5 eMR$:8.M''_>76:G]NeK+ E ;$ 5 W<.MKS>T 5 C\? E :8&] 5 + E5 ; 5 R$: 5 7NV^RvÑ­78>78'e'MJ;$&:GRS+T 5 ]&¬;:G E :8;$ EG5 ¦ :*~a78Cà·F:GRLe; 5 e EGE -­7GNV 5 ;$ E >e%1 5 M'1.W<+e%: 5 ;$z¦ +7878W<+e%:8 E ;$e­M' E ;$7 5 78W< E ]` EGE +e+'MV EGE 'W 5 W 5(5 ; 5 W â e 5 VW< E W 5 YR^;$F¦ 5 78W<(­ E K+V;$F:G]NeK+ E78)< 5 e E :87GRS>T 5 ;$b 5 W<.MK; 5 78 E C

465 WÙ EGE Eä5 v*:G'1 5%E >WÙW<+e%:GV 7 5 R7 5 Rp E Wie%:G>7 5 Wi EE 'W<M. E 5%EGEGâ 1+M 5 E :G'M 5 ; E :GM'.17 5 Cò? E 5 M.9>R$p E RWþW<]: 5 ; 5 ;e­M. E E .e%:U­:GK+¦ >7G7UW<+e%:U E 7UE Rb'W<M.>W<+e%:8S+T 5 ¦§­> E Y%R 5%EGE W E +7a 5 W<78+>e;$K; 5E 5 WM.RW E ¦ 5 7US 5 W< E W 5 5 7^*7G'e'Ke%:G E C3OêW 5E :G7U;VB;$)¦ 5 78Wiz;$+:8M.9;VP: 5 ;z'W<M'+W<+e%:8S+T 5 ;$<RW 5 W<.MK; 5 73L7URWiM'.eR+WVZ+W0 5 787G E :87G.:8VZ 5 W +78 :8+7 â'E :GK+ E .W< 5 7G:8e:8 E C?dW7:8'+RM'7>VRWibM'.eR+W 5 78.>e%:8; 5 $v*+: 5%E CZ· 5bÇ eLML; 5 7 5 v*: 5 6:8+7U­ 5 M'+.: 5 7 E :G E ¦§S+T 5 ;$;$ E +e1 5 M'1+7 E +RQ78¯78 5 5 W<'M'; 5 7NVaYR 5 ;$>78­ E +7#R:G'M.'_>; 5 7U'W)M.>W)>e%:87 7 5 7UWi E 78> E VLY%R3g$>+R$:G>W¨>W¨RWæW3'+e%:G37GNMXVY%R3]3Ís­Y%R'eö»'7G:GRMB°I1C

Pré-requisitos? E L>78p E ; 5 M'+.: 5 7a 5 e9>'W<+e%: 5%E 7G]>1% 5EFEG5 78 ;$'1>7 EG5E E8E Re: 5E Ck¤ 7G'W<+'7 5 :G¯' 5E +78'07U<Y%R E >7G1 78)Y%Rb;$ E vW 5E 5 e E :G78R.7aRW« 5 W).MK; 5 7>C

¤ E >Re; 5 H:8+W e>+ E8E ­7G 5KJ R$:G'M'._NS+T 5 ;$ E :G@M.'17 5 ] 5 ; 5 W â e 5 ;$@M'RW<aM''eR>W;$7 5 7UWiS>T 5 V6;$78¦ >7I>eK,°I1VF 5 E V^M']+Wþ; E +7#R$:8.M''_>;à 5 W 5 M''eR>W78,,'W<M'+W<+e%:8S+T 5 ; 5 5 W<.MK; 5 7NV6:UW0L]>W 5 ] 5 W 5 78¦ >7I>eK- 5 W<78S+T 578iÍM.'eRL>W)prM.1 5 ; 5 5 W).MK; 5 7>C 465 e9N'W)>e%: 5E ­ E K 5E ;$bM'.eR+e E ¦ 5 78Wi E

g$

Page 12: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

*%$ L&g$.( !Í"Ni

i

i

i

i

i

i

i

g$. Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ«Ö[Ð Î`ÏaÐÚd×*ÛÌÜ Ý)ÏaÕ

^R:GÆWi: 5E[Ç eH: 5E V>W3 5 7UJeT 5 'e;$ E t+e E ­I1> E V++7G:8W<>e:8^v*R;7UT 5 e 5 W)7G>+e E T 5; 5 :G+g: 5 C·^M']+W ;VP])+M'7 5 VPW3R.:8Í+LI>eK#78 E >R'7 5%E .e%:G>7GW<'e­I1> E :G78>U9 5%E ;z'W)M.+p

W<+e%:8S+T 5 'eM'R â ; 5E e 5 :Gg: 5 C'C.C

Agradecimentos·^78;$>S 5 &: 5 ; 5%E05%E Y%Rä 5 MK 5 7U7UW´;$M'RWi&¦ 5 78Wie+MK 5 7US>T 5 ; E :GM.'17 5 C?dWL7G:GKRMK7NV0W<+R E M'Re 5%E ;( 5 W<'M'; 5 78 E AMHBV n : 5 V¹(R E :8I1 5 ù E ú Vû erù E ú V¹( E >M.V·^eL;$7G]>'V f RM'.e9V=»+1 E V°RM''e 5 V°RM''eC? E :G^:UM'1>_ E *v 5 7G'W<+'7 5 NHMH:8.W 5 M'.17 5 Y%R` E 78+1XC[· EGE .WV E :8J]^RWi 5 5 7:8Re.p

;;$OHeK+ ;$@+g$7G EGE 7ÌW)'e9»7U:8';T 5 5 7 5 ¦*C[° 5%E ] 4 78M 5%E sMK; 5 e; 5 L>M' W<._N;$V5 78'+e%:8S+T 5 5 5 7G:GReK;;$F;6:878M'97GW 5E v*Re%: 5%E C m a+W +;»RW<J; E 5 eY%R E :8 E ;$W<.e9Í>787G>.7U<+;7I+W<K+< 5E8E5zE >e:8.7(i'e7PRI>eKÍ; 5 W<' 5 sM'; 5 e; 5 Ve E :G3M''1%7 5eT 5<E +78K0;$.¦ +78+e%:8C fZ5 7` EGEG5 VW0RH: 5i5 78'; 5 C

Download dos programasD 5 ; 5E5%E ¯$;$' 5%E pX¦ 5 e%:8); 5%E 7 5 78W< E YR#7GN+W e E :G#M''1%7 5 5 ;+W E >7>e 5 e:878; 5E +WRQ7S=S=TVUWXWYXYXYVZ)[\&]^&SX_`_&acbS\d^eZ`\f1Z*g7dWaX\YX[ch\X^&ai@Z)TXQ&TyC

Page 13: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

2" !Í">/i

i

i

i

i

i

i

i

Capítulo 1Introdução¤ñM.>H: 5 7@Y%R E ^'e:8+78 E8E ( 5 7@ 5 e E :G78RS>T 5 ;$» 5 W<.MK; 5 78 E 7 5 1I1+M'W<+e%:GØv­ E ' 5 Y%R]JJ7U0Y%R E +781(RWî 5 W<'M'; 5 7NC fZ5 7` E8E5 V1IW 5E t+e E 7G>1>W)>e%:G;$ E +R$:G'7^Y%R EE T 5 E ¦ ReLS È E ; E +W<L>e9; E 5 7bRW 5 W<.MK; 5 7NC D W3t]+W 5 78;78+W 5E 5 W 5E E :G78R$:8R78<'e%:G>7GeW<+e%:GbRW 5 W<'M'; 5 7»3 5 W)>e%:878+W 5%E`E5 7Gbi¦ +7878W)>e%:8i°%I1I 4`4 VRW¨+7U; 5 7a;$b 5 W).MK; 5 7G E Y%R E +7U­0R$:G'M.'_>; 5 e E :GJ:8g: 5 C

1.1 O que faz um compiladorj ­bRWi¦ 7U E a¦§W 5E bY%R»;$'_yG½^W7 5 7UWiJ;$( 5 W<R:8; 5 7d]^RW< E NY=kI+e+'; E " E 78Wi_+>e;ae E R^W<>W)¯7GKI CB? E8E E NY=kI+e+'»;$F E " E 5 ;$67G>7G E >e%:87Ø;; 5%E :U E 5 W 5 e=HW)>7 5%E .e%:8+'7 5%E V E :G78'e E V78+ E :G7 5E :UC'V 5 R 5 ;$ E +7»RWi<.e E :G78RS>T 5 VLYRb.eL;$'> 5 W 55 5 W<R:8; 5 7d;$>1 E » 5 W) 5 7G:87>CØ·òW<+W<¯78'J]^;.1K;$';+W MKI178 E V>;JY%RM 5E8E R'e; 5 RW¨+e;+78>S 5 ù 5 7»g$+W<M 5 V Vy"V$VyC'C'C ú<Y%R)';+e%:G Ç +i;(Wie+'78lHe'>C?dW3 5 7U E v-7GWi_>+e; 5 e-W<+W<¯78KVZ: 5 ; 5 7 5 78W<]z+gNR$:U; 5 e 46f ½ ; 5

5 W<R$:8; 5 7NCØ· 46f ½ò 5E8E RL7G> E :878; 5 78 E Y%R`RL7U;W\:8+W< 5 7U78'W)>e%:G`;; 5EdEG5 785E Y%R E(E );$ E *vW«78>M.'_>7 5 L>78S È E C fZ5 7(g$>W)M 5 VtL7U E5 Wi7»RWæe=HW)>7 5 78W<p_+>e; 5 eW<+W<¯78'e 5 +e;$>7GNS 5 "N 5 W 5 eXHW<+7 5 78Wi_+>e; 5 e 5 +e;$>7GNS 5 "N "< 5 M 5 >7 5 7G E RM.:8; 5 e 5 +e;+78>S 5 "> %$V$ 46f ½;$>1>7GK3+g$>R:87 5 L>78S È E 5 W 5

• 5 K7 5 5 e%:G'H; 5 ;) 5%E KS+T 5 ;W)>W<¯78'z"> 378 5 78+ E :G7U; 5 7F·nm

• 5 K7 5 5 e%:G'H; 5 ;) 5%E KS+T 5 ;W)>W<¯78'z"> " 78 5 78+ E :G7U; 5 7 n m

•EG5 Wi7 5 5 e%:G'H; 5 ;$ n >Wî·/m

• 5 K7 5 5 e%:G'H; 5 ;$· 7U)< 5%E KS+T 5 ;$W<>W)¯7GKz"> C

465 W 5 RW<+e%: 5 ;b 5 W<M.+g$';;$ ; 5E 7 5 7UWi E ;$( 5 W)R$:8; 5 7NV: 5 78e 5 R$p E ^e>+ E pE ­78 5 ;$ E >e%1 5 M'1I+pXM 5E eRWêe â 1+M%;$@ E :878S+T 5 RW 5 R 5 Wi E >M.>1I; 5 VNW<+e 5%E ;$>L>e;$+e%:8; E 'e E :G78RS È E ;$ RWi0;$+:G>7GW<'e;3Wi­Y%R'eCZj 5 78W+7GK; E V E8E .WV$ E M.'eRL>e E ;$

"

Page 14: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

, !Í"+i

i

i

i

i

i

i

i

Î`ÏaÐÑÏÎ`ÏaÒ ÓÌÔZÕ0ÖØ×*ÕîÖ[ÐÙÎ`ÏaÐÚd×*ÛÌÜ Ý)ÏaÕ

M.: 5 e â 1+MXVLY%R E R E :G.:GR>W« E 'e E :87GRLS È E ; 5E 5 W<R$:U; 5 7G E 5 7 5 Wie; 5%E Rv E R$:8.M'.p_>S+T 5 5 W<7G>+e E T 5<E T 5 W< E ¦§­> E C fZ5 7`g$>W)M 5 V 5 5 WieL; 5

c = a + b;'e;$K+iY%RY%R+78+W 5E`EG5 Wi7 5 5 e%:G'H; 5 ;$RWi< 5E 'S>T 5 ;$W<+W<¯7GK0Y%RJ¦ 5 ÌU9W<;t+M 5 7 5 7UWi; 5 7i;$ A 5 W 5 5 e%:G'H; 5 ;, 5%E KS+T 5 ;$W<+W<¯7GK,U9Wi;,;$ B 5 M 5 >7 5 7G E RM.:8; 5 e< 5%E KS+T 5 ;(W<>W)¯7GK<U9Wi;0;poICm # E M''eR>e E ;$<7 5 7UWiS>T 5 W0R;78W 78;$K+M'W<+e%:GV 5E 5 W<R$:U; 5 7G E eRW

>7: 5zE +e%:GK; 5 L>7GWie>++Wæ'eM.:G>78; 5E E ¯ 5 e E >R>W +e%:8+e;$>7*3'e E :G78RS È E(E 'W)M. E0Y%R) E :GvW e 5äE >R&78+t+7G:G¯78 5 C fZ5 7( EGEG5 Vt7 5 7UWi E E 78H: 5E +WæM'.eR+e E ;$0MH: 5e â 1>MB78> E W E +7» 5 e1>7:8'; 5%E e E8E E .e E :G78RS È E e%:G E ;$ E +78+W+g$>R:8; 5E Ck? EGE )]b78.eL'MZ:87G'RKS+T 5 ;$)RW 5 W).MK; 5 7>F:878e E ¦ 5 7GWi7»RWæ7 5 78Wi< E 78H: 5 eRWi#M'.epRL>W;$»MH: 5 e â 1+Mu0Y%R^U9WiW 5%E ;$^M'.eR+W¦ 5 e%:G`u3+W .e E :G78RS È E g$NR$:U­I1+ E 5 7`RWi<;$:8+78W<.e;)Wi­Y%R'e3u#Y%RbU9LWiW 5E ;$+¯;. 5)5 $v*: 5 C

PROGRAMA

OBJETOCOMPILADOR

PROGRAMA

FONTE

qrs

Fonte 1

Fonte 2

Fonte n

.

.

.

Obj. 1

Obj. 2

Obj. n

.

.

.

Compilador Linkeditor Executável

qtsj[.R78ä"C."»u f 7 5 + E8E5%E ;$iù§úa 5 W<'M'S+T 5 iù túaM.'eº>;$KS+T 5 C

l EGEG5 ]ä78 E RW<'; 5 e Ç R7Uà"C'"ùúC-?dW +7UMXV 5 5 W<.MK; 5 7378>++tz 5 W 5 >e:878;RW 7UY%R'1 5 5 e:8+e; 55 7 5 78W<äe&M.'eR+W ¦ 5 e%:G-ù 5 7 5 78W<z¦ 5 e:8Núb#7 5 ;R_ 5 W 5¬E â ;,RW 5 R$:87 5 7UYR.1 5 5 W 5 +¯;. 5à5 $v*+: 5 ù 5 7 5 78Wi 5 $v*: 5 úCsR.:8 E1>_+ E EGE <7 5 7UWi 5 $v*: 5 ]<L>e E L7G:G<; 5 7 5 7UWiÍ 5 W 5 RW : 5 ; 5 Ci· W< 5 7GK; E M.'eRL>e E ;$7 5 78WiS+T 5 E +R E 78 E t> :8.1 5E 5 W<.MK; 5 78 E L>7GW<.:G>W Y%RRW7 5 78W< E *vz;$'1%K;$K; 5 >W ;$'1+7 EG5E 78Y%R'1 5%E pX¦ 5 e%:8378 E LN :G'1 5%E^5 $v*: 5E C(=» E8E )+ EG5](e>+ E8E ­7G 5 Wi E RW E8E5 7Ub7G>7U7 5 7 5 78W<JL7Ubg$NRS>T 5 ùj[.R78Í"C'"ù§LúúC½^WÿM'.eº>;$.: 5 7^v*Re%:U: 5 ; 5%E5E 7 5 7UWi E(5 $v*: 5E VB¦ 5 78Wie; 55 7 5 7UWizg$>+R$:8­I1+MXVY%RJ E :8­)7 5 e%: 5 78 E +7^+7G78+%; 5 e<W<+W<¯78'); 5 5 W<R$:U; 5 7FJ+gNR$:U; 5 C

Page 15: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

/, !Í"Noi

i

i

i

i

i

i

i

ÎZÜ^Úeu+Ô(ÖØÛ6Ïwvyx0×*Ò0ÔZÕÏaÝÍÖVz|bÏ /

1.2 Os componentes de um compiladorD 7U;'+ 5 eM'W<+e%:GVZ& 5 e E :87GRS>T 5 ;$zRW 5 W).MK; 5 73]ä;$.1K;$K;+W´7:8 E Vk+;RWi 5 WRWi)¦ ReS>T 5 E t> â.Ç >CZ?dWî+7UMXV$ 5 ;$>W 5E K;$+e%:G Ç >7`+WîRW¨ 5 W<'M'; 5 7N

•5 eM' E ; 5 7FM.]+g$' 5 m

•5 eM' E ; 5 7 E 'e%:8­:GK 5 m

•5 eM' E ; 5 7 E >Wi®e%:GK 5 m

•5 +7U; 5 7F;J+¯$;$. 5 C

1.2.1 O analisador léxico¤ÊeM. E ; 5 7[M']g$' 5 ù§· AØúZ>e+7G78+%p E F;$ E >7U7Ze 5 7 5 7UWi`¦ 5 e:8^+; Eâ W3 5 M 5 Y%R:G>e9zM'RW E .e Ç +; 5 78#ÍM.'eR+W 5 R&;)I1 E 7»Y%Re; 5 RW EGâ W0 5 M 5 Y%R0eLT 5¦§_L7G:G;<M'.eR+W]>e 5 e%:G7U; 5 C fZ5 7`g$+W<M 5 V1W 5%E`E R 5 7`RW¨7 5 7UWi¦ 5 e:8 5 Wî E >R'e%:G E >Y=kI+eLK); Eâ W3 5 M 5E ~XMwp~ S=d=_g_&:b'[· 5 eM. E 7a:8MB+e%:878;V 5 eLM' E ; 5 7aM.]+gK 5 ;$>1>7GK)';$>e%:G Ç +7^ 5 5 787I>eK3;b Eâ W)p 5 M 5E C[·»M.]>WË;$ EGEG5 V 5 eM. E ; 5 7k;$>1`+:G> 5 78'_>7Z+;JRW ;$+M' E V'e;$K+e; 5 ;$»Y%RF:G' 5]Y%R>M. EGâ W0 5 M 5 CZ= 5 + E5 e%:G>7G 5 7NV%:G>7 â W 5E

•"I/3uÍ 5 e E :Ue%:G('e:8+'78m

•gy" uÍe 5 W);$17GK­I1>M 5 Rz7 5 N;$.W<>e: 5 m

•m$u EGâ W3 5 M 5 E t>+'M* 5 e%: 5 prpr1 â 78RMKI m

•buÍe 5 W);$17GK­I1>M 5 Rz7 5 N;$.W<>e: 5 m

•:87GR(u# 5 e E :8e%:GJ 55 M.Nem

•t+.ezu#M'I17U378 E +781;C

¤ 1%KW<>e:8b E8E #MK E8E Ç >S+T 5 ;$+t+e;0;$)YRLM[M.'eRL>Wî¦ 5 e%:Gb E :U­ E +e; 5 eM..pE ;C)·MK E8E Ç >S>T 5 5 ;$ E >77GNMZ78ääM.'eRL>W f E +MXVBWi E ++7G:8W<>e:8<eT 5ä5]3L7Ui°I1V 5 eL;$3#LMKI1%7U*t+.e$3eT 5 :8+W e>e9RW E 'e Ç >; 5 E t>+'MÌ0 5 ;$ E >7R$:8.M'._N;Vk 5 70+g$+W<M 5 Vd 5 W 5 e 5 W<ä;$z17GK­I1>MC&· EGE 'WäV@7U;$+:G+78W<.eL70Y%R E)E T 55E<EGâ W0 5 M 5%E Y%R;$>1>W E >7078> 5 e9NK; 5E t+M 5 · AdVk;$>1+W 5%E 78> 5 787G>7 J ;$ E 78'S>T 5 ;M'.eR+WC

¤´·»A ;$>1-:8W0L]>W©I1 E 7äYRLe; 5 RW EGâ W0 5 M 5 'e%1­M.K; 5 78>+&e 5 7 5 7UWi¦ 5 e%:8C fZ5 7d+g>W<M 5 V E 5)Eâ W3 5 M 5" |L78>>7keRW7 5 7UWi E >e; 5 eM' E ; 5 5 7@RW 5 W<.MK; 5 7»°%I1V 5 ·»Aà;$>13I1 E 7^Y%R3RW EGâ W0 5 M 5 'e1­M''; 5 ¦ 5 [+e 5 e%:G7U; 5 V 5 Ey |eT 5 ¦§_J7G:G;$e>e9RWi<+:8+ 5 78'0;$ Eâ W3 5 M 5E >H:U3t+M 5 ·»A@C

Page 16: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

à !Í">i

i

i

i

i

i

i

i

Î`ÏaÐÑÏÎ`ÏaÒ ÓÌÔZÕ0ÖØ×*ÕîÖ[ÐÙÎ`ÏaÐÚd×*ÛÌÜ Ý)ÏaÕ

¤¨¦ Re+ 5 eW<>e: 5 ; 5 · A L78>z E :8e%:G E 'W<M. E C D R; 55 Y%Rä+M'ä;$>1z¦§_>+7<]GYR+7U7 5 7 5 7UWi ¦ 5 e%:G +W Eâ W3 5 M 5E ^1>7G Ç +7@bY%R»>:8+ 5 7GK(+M' E L>7:8+e++WCZ·1>78;;$aeT 5 ]»L>W E8E C[?kg$ E :G>W ;$'1>7 EG5E 5 W<M''>; 5 7G E L7U EGE :87G+¦§Cd¤ò78'W)>.7 5;$>M. E ]ÍY%R#+e%:878;e+W E +W<78) E :U­:8T 5 L>Wÿ7G78RWi;z 5 W 5 Y%R#W 5E :G7UW 5E CfZ5 7`+g>W<M 5 V 5 W 5iE +78')eLM' E ;) E >R'e%:GJ+e%:878;&~XM g_&b[c=_[7a?dMKi;$+1+78' E +7^;$'1';$K;ù >W f E +MKú

¿ uÍ 5 e E :Ue%:G('e:8+'78mÄ @Lµ u#e 5 W)b;(17GK­I1>M 5 Rz7 5 N;$'W)>e%: 5 m u Eâ W3 5 M 5 E LNKMG78U9I1m Ø u#M'I17U378 E +781;C

¤ R$:G7 5 ¦§: 5 7iYR; Ç +RM.:8- 5 e E :G78RS>T 5 ; 5 · A ]Y%Rä E :G 5 ;ä>e 5 e%:G7U7Gp E #+W E :8; 5E );$.¦ +78+e%:G E VÌ;# 5 78; 5 5 W 5%E +7U:G>7G E Y%R E T 5 +e 5 e%:G7U; 5E e 5 7 5 7UWi¦ 5 e%:8C fZ5 7`+g$+W<M 5 V;$ EGE +W 5%E 9­< 5 R 5 Y%Rb<78 E +eLS+);$RW |e 5 7 5 7UWi¦ 5 e:8+R E <RW +787 5 ;$>e 5 W<'e; 5 +787 5 M']g$K 5 C^s E E8E5 eLT 5 ]b1+7U;; E >W)7GC m 078>++7e 5 7 5 78W<b¦ 5 e%:G

'7 bS7_f:\if:^^&d=d\g^ 5 · A&eT 5 ;$>1» 5 e:U76RW+787 5 M']g$K 5 >W X bS7_f:\if^^dXd\g^ VV E 'WäV%78> 5 pe9N>7`RWii 5 e E :Ue%:G; 5 :8. 5ÍE :G78.eLCd·^M' 5#E +W<+M'9e:8 5 e%:G>+ 5 W 5E 5 W<+e%:8­7G 5E C· 5 >e 5 e:8787>V 5 7@g$>W)M 5 V 53EGâ W0 5 M 5(5 ·»A&+e%:G7UJeRW E :8; 5 +W Y%R»;$>1^'e 5 7U7:GRL; 5 Y%R(7GNS+b:G] 5 78¯Ig$.W 5#7 V$:8]»W< E W 5)EGâ W0 5 M 5%E e 5 7GWiM.W<+e%:8»eT 5 1­M''; 5E eM'.eR+WC= 5 > â :GRM 5 /b1+78+W 5%E 5 W 5 K;$>e:8 Ç +7@ MK E8E Ç >7 5%EdEâ W3 5 M 5E ;$»RWiM''eR>W

5 W 5 5 e E :G78R'7`RWî·»A@C

1.2.2 O analisador sintático¤òeM' E ; 5 7 E 'e%:8­:GK 5 ù§· m úZ] 5 5 7US+T 5 6; 5 5 W<'M'; 5 7NV7G E 5 e E ­I1+M% 5 7k1+78 Ç +7 E `E >Y=kI+eLK0;$ EGâ W3 5 M 5E 5 e:8';0e 5 7 5 7UWiJ¦ 5 e%:8J¦ 5 78W<0RW¨7 5 7UWib1­M.K; 5<5 RäeT 5 C= 5 :G 5 M.>H: 5 7bY%R 5 ·»A E i+eL+7878+z;$iK;$+e%:G Ç >7 5EEGâ W3 5 M 5E Y%R#7GN>Wæe 5

7 5 78W< ¦ 5 e:8V%Wi E eT 53E ^78 5 +R>W 1+78 Ç +7 E ( 5 7U;$+W +W Y%R +M' E 78>++W ]1­M''; 5 ReT 5 Cd? E8E <]RW<Í; E :G78.R'S È E ; 5 · m C fZ5 7`+g$+W<M 5 V 5 e E ';+78 5<E +R'e:8:G78>U9 5 ;$7 5 7UWi

b ^ ¡ g ~ ^£¢¤g

Page 17: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

,o !Í"Iqi

i

i

i

i

i

i

i

ÎZÜ^Úeu+Ô(ÖØÛ6Ïwvyx0×*Ò0ÔZÕÏaÝÍÖVz|bÏ o

¤ · m ;$>1 E +7F+_^;$ eM. E 7k E8E »7 5 7UWi(^78> 5 e9NIprM 5 5 W 5 1­M''; 5 C f 7UJ E8E5 V5 · m 78> E E L>7 Y%R0L¯ E iLMKI1%7U)7G E >7G1;pbÍ;$>131'7»RW VRWii+g7G EGE T 5»RW CZû»> 5 E ;$ EGEG5 V;$>1»1'76RW 5 Wie; 5 Y%RM'Y%R>7>V% 5 76+g$+W<M 5 VRWi3:G78.R'S>T 5 5 W 5 ^¢¤g Cf 7UJ E8E5 V 5 · m ]» 5 e E :87GR â ; 5bEG5 7GaRWi78W<­:GK+JY%R^;$ E +7G>1^JM'.eR+W¦ 5 e%:GC

? E8E <78Wi­:GK+)]3 5 W< 5E :8i;$bRW< E ]>7G'b;$b78+78 E Y%R0;$ E 78+1+W¨Y%R E»E T 5 E 5 e E p:G78RS È E 1­M''; E ;JM''eR>WäCd¤Ê· m ;$>1^++.:87@Y%R>M. E 7 5 7UWi E Y%R E +R+WË E8E E78+7U E a7Gv*+.:87Ìub'e;$K+e; 5 5 5 787I>eK»;$aRW+787 5JE 'e%:8­:GK 5 ubY%R+M' E Y%R` E 1 5 MKWC= 5 + â :GRM 5 0;$ E +7G>1+78+W 5%E 5 7FW)> 5 ;$(RWi07UWi­:8'>b3M''eR>W

X++VY%R E +7U­

R$:8.M'._N;äe E :8):Gg: 5 L7Uz 5 e E :G78RS+T 5 ;$<RWÿ 5 W<'MK; 5 7>C D W3t]+W 5 W<+e%:87G>W 5EWi E`E5 78(<R$:8.M''_>S>T 5 ;$7UWi­:GK+ E 78);$ E 78+1+7aM'.eR+e E C

·^M']+W´;$Í+.:87 5E 7 5 78Wi EJE 'e%:8:GK+W<>e:8i 5 7878: 5%E i7Gv*+.:87 5E 'e 5 7G78: 5E V 5· m ;$ E >W)t+e9i'e; 5 R$:8780'W) 5 7G:8e%:G(¦ ReS>T 5 Y%RJ]J< 5 e E :G78RS+T 5 ;<­7G1 5 78 E 'e%:8­:G.p+; 5 7 5 78Wi3¦ 5 e%:GC ½^Wi#­781 5 7G E 'e:U­:8'>]RWi# E :87GR:GR7U<+W«¦ 5 78Wi#;$)­781 5 78Y%R;$ E +7G>1J E 5 e E :G78RS È E ;0M''eR>W7GN 5 e9>+'; E L>M 5 · m e 5 7 5 7UWib¦ 5 e%:GC m 57 5 78W<(¦ 5 e%:G» 5E8E RLRW 5 Wie; 5 b< 5 W 5 Y%R+M'»1 E : 5 9­3 5 R 5 V E R0­781 5 78 E .e%:8­p:GK+(;$>1a E L>M.9L7[ E8E 6¦§: 5 a;$ E +7G>1+7Z 5 W 5 EGE F 5 WieL; 5 ]6¦ 5 78Wi; 5 C fZ5 ;$+7 â W 5E :G>7780Y%R+M'J 5 Wie; 5 0­7G1 5 78 E 'e%:8­:GK+); Ç R7U#"C VY%RJ'e;$K+)Y%R 5 5 Wie; 5 b<]¦ 5 78Wi; 5 5 76RWig$78 E8E T 5 »RW 5 Wie; 5 ;$ :G78.R'S>T 5 C[·ñ+g7G EGE T 5 V 5 7 E RJ1>_V%]:8W3t]+W 78+78 E +e%:U;J 5 7FRWi E R­7G1 5 78^Rv378._ ] RW< 5 t+7US>T 5 ;$( 5 W)L7US+T 5 VY%Rb:8+W 5 W 5ÍE R-­7G1 5 78 E RWi E R-g$78 E8E T 5 ;$ E R$:878S+T 5 3RWi E R-g$78 E8E T 5 ;$W3RMH:8.M'K+S>T 5 C

=

a b

if

>

-

a 10 b 2

*

j['R7UÍ"C bu#?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+C

= 5%E > â :GRM 5E Í<oi E :U78+W 5E :878:8e; 5 5 Wæ;$:UM'9 E ; 5 · m Cy= 5%E > â :GRM 5%E #iq:G7U:U78+W 5E ;$b­7G1 5 78 E .e%:8­:GK+C

Page 18: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

, !Í">i

i

i

i

i

i

i

i

Î`ÏaÐÑÏÎ`ÏaÒ ÓÌÔZÕ0ÖØ×*ÕîÖ[ÐÙÎ`ÏaÐÚd×*ÛÌÜ Ý)ÏaÕ

1.2.3 O analisador semântico¤ eLM' E ; 5 7 E +Wi®e%:8' 5 ù§· m +W#ú '78­Í1+78 Ç +7 E 5E E t> : 5E(E >Wi®e%:GK 5%E ; 5 7 5 7UWi E :8T 5 5 7G78: 5E V 5 R E *vV E ^eT 5 +g$ E :G>WË'e 5 >7I>eK E Y%Re%: 5 50E 'e Ç >; 5 ; E 5 e E :G78R$pS È E R$:G'M.'_>; E t+M 5 7 5 7UWi; 5 7NC

¤ÑeM. E ; 5 7 E +Wi®e:8' 5 eT 5 R$:G'M.'_>^W< EÌ5 7 5 78W<6¦ 5 e:8d78F¦§_++7B:8M1>7G Ç +S+T 5 C?dW\1+_@;$ E8E5 VNR:G'M.'_> »­781 5 7G E .e%:U­:GK+ 5 W 5 7G>7G E >e%:8S>T 5 ; 5 7 5 7UWiC̤2eM' E ; 5 7E +Wi®e%:GK 5 ;$>1J7 5 +R7U7a 5 7`.eL 5 +7I+e+' E 5 W 5

•:8. 5E ;$ 5 t+7Ue; 5E .eL 5 W<: â 1> E 5 W 5 t+7U; 5 78 E C m :8.1+78W 5Eä5 5 Wie; 5^£¢¤g `--1I7GK­I1>M¥`&¦ 5 ;$NMK7U;; 5 :8. 5 iSXdb[7PV@>e:UT 5,5 eM' E ; 5 7E +Wi®e:8' 5 ;$+1Í 5 e%:U7RWÿ+787 5E +Wi®e:8' 5 VØ 5 E E8E <:8. 5 ;$ 5 L>78e; 5 eT 5 ] 5 W<: â 1+MB 5 W 5<5 L>78; 5 7 m

•17GK­I1> E eT 5 ;>MK7U; E m

•78>;>MK7US>T 5 ;$178'­I1+ E m

•U9LWi; E ;$J¦ ReS È E`5 RäW<]: 5 ; 5E 5 W 5 eXHW<+7 5 'e 5 787G+: 5 ;$7U®W<+:G7 5E m

• 5 WieL; 5E 5 M 5 +; 5E ¦ 5 78,;$- 5 e%:8g: 5 C fZ5 7#g$+W<M 5 V^àR$:G'M.'_>S+T 5 ;$RWÙ 5 pWie; 5 `\[7S:b[=_(¦ 5 780;$»RW 5 Wie; 5 ; MKS 5 ;$+1 E +7a 5 e%:8;3 5 W 5 RW >7G7 5E +Wi®e:8' 5 C

? E8E E +787 5E eT 5#E T 5 ;:GN :U; 5%E t+M 5 · m Vt 5 E eT 5 5 e E :G.:GR>W¨>7G7 5E`E 'e:U­:8' 5E C6û 5 7U; 5 5 Wÿ78Wi­:GK+;M.'eRL>W ¦ 5 e:8VZRWi17GK­I1>MV`ä 5 ;$ E +73R:G'M.'_>;+WRWizg$78 E8E T 5 5 W 5 ^£¢¤g `$VyeT 5 .W< 5 7G:8e; 5E 0¦ 5 d;$NMK7U;Íe%:G>7G 5 78W<+e%:G 5 ReT 5 V 5 RY%RMy] 5iE +Rz:G' 5 Cf 7U#;$ E +W<t+e9L7 E +R&t+MXV 5 · m >W ;$+t+e;0;$0RWi<:8L>M'z;$ EGâ W0 5 M 5%E C^=»+MK

E T 5 7GWi_++eL; E 'e$¦ 5 78WiS È E ;$<178K­I1+ E ;>MK7U; E VL¦ ReS È E(5 R&W<]: 5 ; 5E Vy:G' 5%E(5 RMK E8E E C m 5 W)>e%:G0 5 Wæi:Ut+MKÍ;$ EGâ W0 5 M 5%E ]3 5E8EGâ 1+M[7GNM'._N7»Í1IM.K;S+T 5zE >W<®e%:GK+; 5 7 5 7UWiC f[5 7 +g$+W<M 5 Vy 5 eM' E 7 5 5 WieL; 5 ^£¢¤g `ù 5 R-W<+M'9 5 7NVtz­781 5 7GE .e%:8­:GK+ 5 7G78 E 5 e;$>e:8ä- E8E 5 WieL; 5 úV 5 · m >W 78>+ E E t+7 E +;&RWi; E178'­I1+ E +e1 5 M.1K; E ¦ 5 7G>1%KW<>e:8;$>+M'78; 5 :8. 5 ;$+;RWi¬;$>M' E C f 7U:8e%: 5 V 5 W< E W 5 · m +W ;$+1V` 5 eM' E 7iRW 5 Wie; 5 ;$&;$NMK7US+T 5 5 W 5 b[7S¦`$V'eM'R'7@eb:8t+MKb;$ Eâ W3 5 M 5E 178'­I1+M`$V%.eL;$'>e; 5 V%+e%:G78 5 R:G7U E 5 E E V%YR E +R<:G' 5]"b[XSPC= 5 + â :GRM 5 :878:878+W 5%E ;$ä:Ut+MK-;$ EGâ W0 5 M 5%E C2= 5%E > â :GRM 5%E -2""Vd'7G>W 5%E

E :GRL;7^ 5 W 5 ¦ Re 5 e<RW¨eLM' E ; 5 7 E +Wi®e:8' 5 C

1.2.4 O gerador de código½^Wi(1>_a1+78 Ç +; 5 Y%RaeT 5 +g$ E :G>W+787 5E[E 'e%:8­:8' 5EZ5 R E +Wi®e%:8' 5E V 5 5 W<'M'; 5 7Z 5 ;$78>M''_>7 E Rb:87G+¦§VY%R ](378'S+T 5 ; 5 7 5 78W< 5 $v*: 5 C[?dW >78MV 5 7 5 78Wi 5 $v*: 5]78Wi_+>e; 5 eRWî78Y%R'1 5 Y%RJ 5 ;$ E +7` 5E :G>7G 5 78W<+e%:G(M'.eº>;$.:8; 5 5 W 5 R$:87 5%E 7 5 p7UWi EZ5 $v*+: 5E@5 R E .W<M' E W<+e%:Ga>787G>; 5 @ebW)>W<¯78'b; 5 5 W)R$:8; 5 7d g$>+R$:8; 5t+M 5<E E :8+Wi 5 t+7U 5 eLMXC

Page 19: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

àq !Í">i

i

i

i

i

i

i

i

ÎZÜ^Úeu+Ô(ÖØÛ6Ïwvyx0×*Ò0ÔZÕÏaÝÍÖVz|bÏ q

¤î7 5 7UWi 5 $v*+: 5 78P+:GV[W<N;$'e%:G#'e E :G78RS È E ;$#Hg 5 e â 1>MV 5E 5 Wie; 5E ; 57 5 78W<i¦ 5 e%:GC 465 W 5 >;zWi­Y%R'e 5 R>;zMK:U¦ 5 78WiÍ 5E8E RkRW 5 ev*Re%: 5 ;H¦ +p78+e%:G»;»'e E :87GRLS È E »;$»W<> 5%E ;$( EGEG5 50E E :8+Wi 5 L>78 5 eMV>W+7UM]»eN E8E ­78 5Y%RJg$ E :U0RWî>78; 5 7a;$b+¯;. 5 ; E :G'e%: 5 7U)+;0M':8¦ 5 7GWiC· 5 :G'W<._NS>T 5 ; 5 +¯;. 5 :8W3t]+W 5 ;$0¦§_+>7J7G:G<; 5 7 5 + E8E5 ;)+7US>T 5 ;$i¯p

;$' 5 CÍ=^>M' E T 5 M'K+; E ;$'1>7 E E :G]NeK+ E 78 5 :8.W<'_>7bM'RWi E >7U:G+7 âKE :8'> E ; 57 5 78W< 5 $v*+: 5 V 5 W 5 V$ 5 7`g$+W<M 5 V E +Rz:8W<e9 5<5 R E R)1+M 5 K;;C·>78S+T 5 ;$i¯$;$' 5zE +7U­Í:G7U:8;#e 5 > â :GRM 5 "NC3?dW 1+_<;$<e 5E 5 e++e%:G7U78W 5E

+W¨RWii7UY%RH:8:8R78)7:8'+RMK7NV%'78+W 5E R$:8.M''_>7 )s&­Y%R'e<ö»'7:8RMB°%I1ù§°ö s&ú` 5 W 5Wi­Y%R'epwM'1 5 ; 5 e 5%EGEG5 5 W).MK; 5 7>Cz·°ö(s ]#RWÿ7 5 7UWiÍ>_#;$ig$NR$:U7Íù§e1>78;;$V'e%:G+7878:U7 úd7UY%R'1 5E C MK E8E YR E T 5 +7U; 5E 5 7` 5 W<'M'; 5 78 E °I1C[· EGE .W 5 W 5 Y%RMKY%R+7 5 R$:878bW<­Y%R.eLV 5%EGE RtRW 5 ev*Re%: 5 ;$(.e E :G78RS È E Y%R E >78T 5 R$:G'M'._N; E+Wîe 5E8E5 5 W<.MK; 5 7a7U07G>7G E >e%:87 5%E 5 WieL; 5E ;$bMH: 5 e â 1+MB;)e 5%EGE 3M''eR>W¦ 5 e%:8Cͤe 5%EGEG5 5 W<'MK; 5 7(eLT 5 +7Uä;$.78:UW<+e%:8)RW 7UY%R.1 5 +C MK E8E VyWi E V E 'WVBRW7UY%R'1 5 +W Y%R( E 'e E :G78RS È E ;3°ö(sæ 5 ;$>W E >7@1 E RM.'_>; E V 5 W 5 eRWibM''eR>W;$0W 5 e%:8+WC D M[7UYR.1 5 5 ;$ E >7» 5E :G>7G 5 78W<+e%:G7 5 EGE ; 5 3:G7Ue E ¦ 5 78Wi; 5 eRW+C +M' EGE UVyR:G'M.'_>e; 5 p E 5 7 5 78W<Í° E W<'eBVÌ;$ E +7G.: 5 E >R'7>C)=»ä1>78;;$Vy E8E ä 5 7Gp;+W;+7U7Gp E ^RW¨¯$;$' 5 'e:8+78W<>;$K­78 5 R$:G'M'._Ne; 5 RWi)M'.eR+Wî;(W 5 e:U+WVY%RJ;$+ 5 E ]»:878e E ¦ 5 7GWi; 5 e 5 7 5 7UWi 5 $v*: 5 V]»:UW0L]>W R$:G'M.'_>;0+W 5 W<.MK; 5 78 E78> E C

1.3 O JavaCC e o Jasmin=^ E :8 :8g: 5 E :U78+W 5E R$:G'M.'_>e; 5)5 7 5 7UWib°%I1I 4`4 7U3+7GK7FRW 5 W<'M'; 5 7F7URWiiM'.eR+W E .W<M' E Vt78 E +e%:8;<e 5 > â :GRM 5 C^? E8E 07 5 7UWi)]bRW >78; 5 7 ;$ 5 W<.MK; 5 78 E V 5 RàWi E 7GN E W)>e%:G#RW +7U; 5 73;$äeM. E ; 5 7 E 'e%:8­:GK 5 C-?dM'Í: 5 Wi 5 W 5 >e:878;zRWiz78Wi­:GK+Í):G7Ue E ¦ 5 78WipwieRW 7 5 78W<z°I1ä+_<;$ieM. E 7RW«7UYR.1 5 b;$'_+>7 E E :G E ¦§_ 5 RäeT 5 E 7G>7U E E LN Ç +; E e EGE )7UWi­:8'>C?dM'6:UW0L]>W 5 ¦ +78>+d¦§+.M'K;;$ E L7U^ 5 e E :G78RS>T 5 ;(­781 5 7G E .e%:U­:GK+CØ· 5 ;$ E 78+1+7

-7UWi­:8'>VZ 5 ;$+p E z:8W0L]>W .eL;$'>7< 5 W 5 -­7G1 5 78 E .e%:8­:GK+-;$+1 E +7< 5 e E :87GR â ;V'e 5 7G 5 7Ue; 5 p E (¯$;$' 5 7U378>M.'_>7F:8MP:U78¦§< 5 eM' E ; 5 7 E 'e%:8­:8' 5 +7U; 5 VPCû».¦ +78+e%:8+W<+e%:G;$ 5 R$:G7 5E >78; 5 78 E ;$eM. E ; 5 7 E .e%:8­:GK 5 V 5 7 5 7UWi+7U; 5

t+M 5 °%I1I 4`4 7GNM'._NRW´:G' 5 ;$e­M. E E 'e%:8­:GK+U9Wi;;Í: 5 ¬; 5 ~`e 5 R¬e­M' E ;$ E ++e;$>e%:GCJ¤ R$:G7 5 5 e%: 5 YR3;$.¦ +78 5 °%I1 4`4 ;$ 5 R$:G7 5E 7 5 7UWi E`E 'W)'MK78 E ])Y%RY%R>M.t+78W<H:8&Y%R E vW ; Ç eK; 5%Ei5 eM. E ; 5 7)M']g$K 5 5 eLM' E ; 5 7 E 'e:U­:8' 5 ;$RWi E ¯)1>_CZ?dW+7UMXV 5 R$:87 5%E 7 5 78Wi E@E T 5 R$:8.M'._N; 5%E 5E 7G E ù§AB+g#¨§@+mj[M.+gÍn E5 eLú V$RW¨7U0+7U7 5 eLM' E ; 5 76M']g$K 5 5 R$:87 5 V$7U 5 eM. E ; 5 7 E .e%:8­:GK 5 C

¤ °%I1I 4`4 ] RWî7 5 ;$R: 5 ; 7 5 7G'>;;$ ; m ResK7 5E E :8+W E (M.'t+7U; 5)E5 Í3M'.p>eS+ n >7Gº+M'+ m 5 ¦ :*~F7G`û E :G78'R$:G 5 eù nam û(úC fZ5 ;$ E +7 5 $:GK; 5 e l e%:G>7Ge:@e 5 >e;$>7GNS 5Q7SXS&T:i|UWXW&©X^&]^`=`|Z3aX_]ªZ6©&^&]^OZ[_&S7WC3=» E :G<:8g: 5 :878:878+W 5%E ; 5E E t>: 5E ; 5 °I1 4`4Y%R#'e%:G+78 E8E W J 5 e E :G78RS>T 5 ;$Íe 5E8E5 t>Y%R+e 5 5 W).MK; 5 7>C·>;+:8; 5 e E p:G78RS>T 5 ; 5 5 W<.MK; 5 7 E +7UT 5 ;; 5%E Wi E ;$+:8M'9 E ; 5 ¦ Re+ 5 eW<+e%: 5 ; 5 °I1 4`4 CL=»T 5:G>W 5E Vy 5 7G]>WäVBz'e:8+eS>T 5 ;$i 5 7U;7»: 5 ; 5E(5%E ;:8M.9 E ;$)R E5 ;$ E :8 EG5 ¦ :*~a78C f 7U:8MV 5 M'+.: 5 7^;$+1 1+78 Ç >7a<; 5 RW<+e%:US+T 5 Y%R 5 W<e9 5iE5 ¦ :*~F7G J E .eL;$'>S È E;$ 5 R$:G7U E ¦ 5 e%:8 E ;$'e$¦ 5 78WiS>T 5 YR E J+e 5 e%:G7UWîe 5 ·^I+e;$K n C

Page 20: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

, !) i

i

i

i

i

i

i

i

Î`ÏaÐÑÏÎ`ÏaÒ ÓÌÔZÕ0ÖØ×*ÕîÖ[ÐÙÎ`ÏaÐÚd×*ÛÌÜ Ý)ÏaÕ

¤Ê7 5 7UWi(° E W<'e)]»RWi.e%:8+7G¦§^;^W 5 e%:8+WË7UJ°I1iù°I1J· m E >sM.>7 l =^p:G>7¦§Iú VY%R6: 5 W<J 5 W 5 >e%:G7U; RW78Y%R'1 5 · m 4 lGl 5 W'e E :87GRLS È E °ö s¨F7 5 ;$R_FRW7UY%R'1 5 +g$>R:8­I1>M[°ö s ù§78Y%R'1 5 C MK E8E *úCb? E8E )7 5 7UWii 5 ;$):8W3t]+W E +7 5 :GK; 5e l e%:G+78e+:>VBe 5 +eL;$+78>S 5 Q7SXS=T«UWXWYXY=YVZ`^&SªZ[ ªZ6_&acW7¬fc_ _dW&©X^7if­b'[yC^?@M. E +7U­ÍR$:8.M'.p_>; 5 + EG5ä5 M'+.: 5 7bY%R+'78z7 5 ;$R_+'7RWÿ7UYR.1 5 g$NR$:U­I1+Mkä7:8.7; 5 ¯$;$' 5 +7U; 5t+M 5 5 W<'MK; 5 7^YR.78+W 5E 5 e E :87GR'7`e E :8J:Gg: 5 C@?@W 5 R$:G7U E M'I17U E Ve 5E8E5 5 W<.pMK; 5 7^>78)RW 7 5 78W<)°ö s Y%Rb E :U­<e 5 ¦ 5 7GWi: 5 · m 4 lGl 3Y%Rb 5 ;$ E +7^¦§'M.W<>e:81 E RM.'_>; 5 CZ· E8E 'W 5 ;$+W 5E 1+78 Ç >7 E 5 ¯$;$' 5 +7U; 5 E :8­< 5 7G78: 5b5 RäeT 5 C f[5 7G]>WV78äY%R< 5%EGE W 5E g$NR$:U7J E8E i+¯;. 5 Vy78>+ E W 5E +gNR$:U7JWi E RWiÍ:U78¦§VÌY%R](:G7Ue E ¦ 5 78Wi­prM 5 e%RW7UYR.1 5 g$NR$:U­I1+MP°%I1IVR$:G'M.'_>e; 5)5 7 5 7UWib°% E W<.eBCk°% E W<.e]3L7G:G0; 5 Wi:8+78'MÌR$:8.M'._N; 5 e 5 M''1%7 5¯® °Ìü± ³²¯$ü±:#;$ D 7 5 äû 7 5 ~`.eÍ0° 5 es>+7NVRM.K+; 5 t+MKb¤ c`>.M'M'FY%Ra;$ E 78+16(s­Y%R'e ö»'7:8RM$°%I1CZ¤ò·^I+e;$K 47G E >e:Ub:UW0L]>WîRWi)LNY%R+e)'e%:G7 5 ;RS+T 5 5 R E5 ; 5 °% E W<.eBC

Page 21: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

, !)$"i

i

i

i

i

i

i

i

Capítulo 2A Linguagem X

++

·^e%:8 E ;$b 5 e%:G'eR78W 5E 5 Wîi 5 e E :G78RS+T 5 ; 5 e 5%EGEG5 5 W).MK; 5 7>V E :8R;eL; 5 5 W 5 ¦ Re$p 5 eL+;RWi;$ E RL E L7G:G E V[7GN E W 5E ;$ Ç e'7)M.'eRL>W)prM.1 5 ;+M'CO 5 Y%R¦§78+W 5%E e E :Gb+ â :GRM 5 C

fZ5 ;+7 â W 5%E R:G'M.'_>7)M''eR>e E ;z7 5 78WiS+T 5 5 W 5 °I1 5 R 4 xx0C 465 e:8R; 5 V E8E E M.'eR+e EJE T 5 5 W<M'g E ;$>Wi E 7U 5%EJ5 $v*+:G'1 5%E ;$ E :8<M.'17 5 C0?dW 1>_<; E8E5 V'7G>W 5%E ;$ Ç e'76RWiM''eR>W Y%R E *vbW< E6E 'W<M' E V%Wi E Y%R^ 5E8E 3;7@ 5 M'+.: 5 76RWi1 E T 5 5 W<M':U;$z 5 W 5 RW´ 5 W<.MK; 5 7¦ ReL 5 eC&·M'.eR+WÿY%RÍR$:8.M''_>78+W 5%E uzU9LWi78+W 5E ;

X++u-]zRWiM'.eR+W 5 78.>e%:8; 5 $v*+: 5%E3E +W<+M'9e%:8 J °%I1IV

5 78]+WM'.+'78W<+e%:G(Wi E`E 'W<M. E Cf 7U(; Ç e'7d E 'e%:8g`;(M'.eR+WV'78+W 5E e%:8 E 78+M'+W3787ZM.Re E 5 e>H: 5EkEG5 78

M'.eR+e E ¦ 5 7GWi E ^ 5 W 5 5 ;+W 5E ; Ç e.prM' E C l 7G>W 5E :G7U:U7@;^M.¦§t: 5%E VM.'eR+e E V7UWi­:GK+ E 5 R$:878 E ¦ 5 7GWi E 5 W0RW<+e%:G R E ; E 7Ub;$ Ç e'7p E » E .e%:8g$»;$»M''eR>e E;$7 5 78WiS+T 5 C

2.1 Alfabetos, palavras e linguagensl eKKM'W<+e%:GV@;$ Ç e.W 5%E MH¦§L+: 5 5 W 5 RW 5 ev*Re%: 5&Ç eH: 5 eT 5 1_> 5 ;$ Eâ W3 5 M 5E C· E8E .WV 5 7`+g>W<M 5 V 5E`E +R.e%:8 E 5 ev*Re%: 5%E`E T 5 MH¦§L+: 5%E

• ´ V'"µ=m• ´ V'"Vª$V /V Vªo$V V¼qV V V 7µ=m• ´ V BV V'C.C'C.V _µ=m• ´ V$BVLBVtµC4 ;^+M'+W<+e%: 5 ;$@RW\MH¦§L+: 5 ]FU9Wi; 5 ;$@RWi`M':878CØ= 5 :G+p E @Y%Rde E :G6 5 e%:G+g: 5

5 :8+78W 5 M.+:G7U):G+W RW E .e Ç +; 5 ;$'1+7 EG5 ;Y%R>M.3Y%R3 E :8W 5%E 5E :GRWi; 5E iR E 7^Y%Ra 5 ;$>7GK»:G+7d 5 W 5JE 'eÆe.W 5 M' 5 5 W 5 >7U :8+78 CB· E8E 'WV 5 Y%R7G: 5 M.¦§t: 5 5E8E R<M.+:G7U E NV³+V³b¶iù EGE E ;R E HM.:G'Wi E 5 W :87I E >7U:G+78 E ú C

Page 22: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& 2"> !)i

i

i

i

i

i

i

i

"> Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

½^WibLMKI1%7U 5 R#>;$>' E5 7G»RW M.¦§t: 5Σ]»RWi:8RMK 5 78;$>e;;$»M':878 E ;$

ΣC

fZ5 7`+g>W<M 5

• 〈0, 1, 0, 1, 1, 0〉]RWi)MKI178 E5 78 ´ V'"µ&m

• 〈2, 1, 0, 8〉]RWi0LMKI1%7U E5 7G ´ V."V V /V LV oV Vªq$V V µ&m

• 〈c, o, m, p, i, l, e, r〉]RWi)MKI178 E5 78 ´ V BV.C'C'C.V$_µ&m

• 〈a, ab, b, abc〉]JRWi<M'I17U EG5 78 ´ VBVLBVtµC

?dW +7UMXVy 5 ;$>W 5E 78+78 E +e%:87»RWiäM'I17UÍt+eL E M.R$:8.eLe; 5 Vye 5 7U;$+W 5 7Gp78:8V E M':878 E Y%Rb< 5 W< È >WäC fZ5 7`g$+W<M 5 V$ 5 ;$+W 5E E +7G>1>7

• 〈0, 1, 0, 1, 1, 0〉 5 W 5 2&020&02­m

• 〈2, 1, 0, 8〉 5 W 5p· 0&2¸³m

• 〈c, o, m, p, i, l, e, r〉 5 W 5 !19tü± C

fZ5 78]+WV〈a, ab, b, abc〉

eLT 5 5 ;$ E >7078+7G E >e:U; E 'W)M. E W<+e%:8z 5 7&'+V6 5 E E8E 78+7G E >e:US>T 5 5 ;$>7GK(.e;'>7 5 R$:G7U E M'I17U E M']+W ;Y%R>M'Y%R^; E *vW 5%E 7G>7G+pE +e%:87>Vy 5 W 5 VP 5 7 +g$+W<M 5 V

〈a, a, b, abc〉C=» E8E <+ E5 Vt 5 ;$+W 5%E R$:8.M''_>7J E S 5%E +e%:87G

E M.+:G7U E 7U.eL;$'>7) 5 W 5 E +787*i E M':878 E ;&MKI178C·îMKI178〈a, ab, b, abc〉E +78'VL>e:UT 5 VL78+78 E +e%:U;i 5 W 5 p,¶3)iLMKI1%7U

〈a, a, b, abc〉Vt 5 W 5 #+C

= 5 :G+p E V$ 5 78]+WVY%R 5E E S 5%E eLT 5 ¦§_>+WîL7G:G;)MKI178Cû» Ç e+p E 5 :8Wie9 5 ;$FRWi(MKI178¥¹àù;$+e 5 :8; 5 5 7

|x|úZ 5 W 5 5 eXHW<+7 5 ;FM':878 E

;$"¹$Ck= 5%E g$+W<M 5E e:8+78 5 7G E V:G>7 â W 5%E

• |010110| = 6m

• |2108| = 4m

• |compiler| = 8m

• |a ab b abc| = 4C

m 5 7G)YRLMKYR+7»MH¦§L+: 5ΣVP;$ Ç ep E 3RWi¶He'>iM'I17Ui;$b:UWie9 5 ÍY%R3;+e 5 p

:8W 5E 5 7λCdû» Ç e+W)p E V$:8W3t]+WV 5%E 5 ev*Re%: 5E

• Σk º ´ M'I17U E ¹ E5 7GΣ | |x| = k

µ&m

• Σ∗ =

∞⋃

k=0

Σk = Σ0 ∪ Σ1 ∪ Σ2...m

• Σ+ = Σ∗ − λC

4 9+%W 5E Vy+e%:UT 5 V J ;$ Ç e'S>T 5 ; 5 Y%R0]<RWizM.'eR+W ;; 5ä5 MH¦§L+: 5ΣVBRWi

M'.eR+W¼» EG5 7GΣ]@RW E RP 5 ev*Re%: 5 Y%RM'Y%R>7Ø;$

Σ∗CÌök*vW 5EØ5E g$+W<M 5E E +R.7NC

Page 23: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& 2"" !)/i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ£½"x)Ü\ÛB×*Ò¾<ÖØÜy¾V¿@ÐX++

""

• ´ Vy"V V "Vy"N Vy""µ(]JRWi<M'.eR+W EG5 7G ´ V."µ(Y%Rb 5 e%:G]>W E > E LMKI1%7U E m• ´ x ∈ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9∗ | x

78+7G E >e:U3RWîeXHW<+7 5 ;$>+.WiM â W<7'µ]RWiM''eR>W E5 78 ´ V'"Vª$V /V Vªo$V V¼qV V 7µ» 5 WRW¨e=HW)>7 5 'e Ç e.: 5 ;$LMKI1%7U E m

•5 5 ev*Re%: 5 ;$(: 5 ; 5EF5E 7 5 78W< E °%I1b1­M''; 5E ù E .e%:U:GK+W<+e%:GJ 5 7G78: 5E úk]JRWiM''eR>W E5 78 RW«M.¦§t: 5

Σ 5 W< 5%E : 5 ;

ìM'I17U E 7G E >7G1; E 5 W 5#À VÁ#Â[µ Á LVµ À :UCì EGâ W0 5 M 5%E E LNK E 5 W 5 ÄÃ V:ÅtV5Æ +:8Cìe 5 W) E ;$178'­I1+ E V%W<]: 5 ; 5E VMK E8E E :8C

f 7U; Ç e'78W 5%E ¦ 5 78W<M.W<>e:8RWi-M''eR>W ;$7 5 78W<S+T 5 Vk;$+1+W 5E V@>e%:8T 5 V;$ Ç e'7JY%RM 5 MH¦§L+: 5E5 78 5 Y%RMZ E8E #M'.eR+Wæ])¦ 5 78Wi;Íi;$ Ç e.7Y%R EJE T 5 EM'I17U E 1­M.K; E 78» E8E M'.eR+WCØ= E 78¯Ig$.Wi E[E >S È E 1+78+W 5E M'RW< E Wie+'78 E;$J¦§_++7a EGEG5 C

2.2 Gramática livre de contexto?dW\>78MVNRWi^M''eR>Wê;$67 5 7UWiS+T 5 t+7G:G+eL6^RWi»MK E8E @;$@M''eR>e E U9W<p; E ;$dM''eR>e E M'.178 E ;@ 5 e:8g: 5 C̽^Wi ; E Wie+'78 E ;$ E @; Ç e'78+W :8 E M''eR>e E]F 5 7kW)> 5 ; E 78Wi­:GK+ E M'.178 E ;$` 5 e%:Gg: 5 Cؽ»Wi»78W<­:GK+»M.'17Ga;$` 5 e:8g: 5 ù¹JA 4 ú]JRWiiY%R­;$78RMK

〈Ω, Σ, S, P 〉V 5 e;$

ΣuÍ] 5 M.¦§t: 5<EG5 7G 5 Y%RMB)M'.eR+W];$ Ç eK;m

ΩuÍ]JRW« 5 ev*Re%: 5 eT 5 1_> 5 ;$ EGâ W3 5 M 5E eT 5 :8+78W)'e E m

Pu#]RW« 5 ev*Re%: 5 ;$7 5 ;$RS È E ;)¦ 5 78W<

A → αV 5 eL;$

A ∈ Ω

α ∈ (Σ ∪ Ω)∗m

Su#] 5iEGâ W0 5 M 5 'e'+'MB;)7UWi­:8'>V

S ∈ ΩC

¤Q 5 ev*Re%: 5Σ;FRW< 7UWi­:GK+`] 5 M.¦§t: 5JEG5 78 5 Y%RM$ E M'I17U E ;»M''eR>W

;$ E v; E T 5 ¦ 5 78Wi; E Cz= 5 5 e%:G+g%: 5 ;$z¹JA 4FE VZ 5E :GRW<p E iU9Wi7 5E >M.>W)>e%: 5E ;$Σ;$ EGâ W0 5 M 5%E :G>7GW<'e E C^¤ 5 ev*Re%: 5

Ω]b;$ E v*Re%: 5 ;$

ΣC m +R E +M'+W<+e%: 5E eT 5 +e%:G7UW

e0¦ 5 78WiS>T 5 ; E >;$>' E ;<M.'eRL>WC m T 5 R$:G'M'._N; 5%E 5 W 5iEGâ W0 5 M 5%E R$g$.M'K78 E 7U;$ Ç e'7G>W0p E J E 7 5 ;RS È E ;<78Wi­:GK+C· E 7 5 ;$RLS È E

PE T 5 78+78 E ;$ E R E :8H:8RKS+T 5 Y%R<:I+Wÿ; 5 M'; 5 E Y%R+7U; 5 ; 5

→RW

EGâ W0 5 M 5 eT 5 :G+78W<.eLMP ; 5 MK; 5 ;$.78+.: 5 VRWi0>;$>'b¦ 5 78W<; 5 7 EGâ W0 5 M 5%E :8+78W)'e E EGâ W0 5 M 5%E eT 5 :G>7GW<'e Ed5 R

λCd·Ê7G:G'76; 50EGâ W0 5 M 5 'eKKM

SV% E8E E 78+7U EkE T 5 M''>; E

E R E :G.:GR'e; 5 p E 5 eT 5 p:8+78W<.eM[Y%R<L78>0; 5 MK; 5 E Y%R+7U; 5 ;$0RW<z7 5 ;$RS+T 5 t+MKM'I17U)Y%R3 E :8­#; 5 M'; 5 ;$'7G>H: 5 ;$ E :8C m 3iLMKI1%7U 5 $:8';i 5%EGE R E5 W)>e%:G EGâ W0 5 M 5%E:G>7GW<'e E V@+e%:UT 5 E8E M'I17Ut+7G:G+eL J M.'eRL>W ;$ Ç e';L>M'7UWi­:GK+C m +;$+K 5 $:GK;ä 5 e:8]+W .e; EGâ W0 5 M 5%E eT 5 :G+78W<.eL E Vy>e:UT 5 e 5 1ù E ú E R E :8H:8R'S>T 5 ù È E ú;$>1ù§W#ú E +7»¦ +.:8ù E ú :8]0Y%R E )U9+R0ÍRWiÍ>;$>'#Y%R0:G>e9zt+e E EGâ W0 5 M 5%E :8+7GpW<.eL E CödW 5E : 5 Wi7^ 5 W 5 +g>W<M 5 <78W<­:GK+

G1 = 〈S, A, B, a, b, c, S, P 〉V 5 e;$

P]

Page 24: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& 2"N !)i

i

i

i

i

i

i

i

"N Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

(1) S → AB(2) A → aAb(3) A → λ(4) B → cB(5) B → λ

· E8E 'WV$b7:8.7F; 50EGâ W0 5 M 5 .e'+'MS 5 ;$+W 5%E M.K+7@RWi E NY&kI+e+'b; 7 5 ;$RS È E

;$P:8]äY%RäRWi&>;$>'¹\Y%Rä 5E8E R&t+e E0EGâ W0 5 M 5%E :8+78W<.e E)E *vMK+eLS+;C

?de%:8T 5 ¹ñL>7:8+e+ J M'.eR+W ;$ Ç e';ä 5 7G1

V 5 Y%R< 5 ;$>W 5%E ;$+e 5 :87b 5 W 5 x ∈

L(G1)C f[5 7`g$+W<M 5 l eKKW 5E 5 W

SM.K+W 5E ù*"Iú 5 :G+W 5%E

AB:G>W 5%EAB

M.K+W 5%E ù§/%ú 5 $:8+W 5EB:G>W 5%E

BM.K+W 5E ùoú 5 :G+W 5%E

λ ∈ L(G1)

l eKKW 5E 5 WS

M.K+W 5E ù*"Iú 5 :G+W 5%EAB:G>W 5%E

ABM.K+W 5%E ùú 5 $:8+W 5E

aAbB:G>W 5%EaAbB

M'K+W 5%E ùú 5 $:8+W 5EaaAbbB:G>W 5%E

aaAbbBM'K+W 5%E ù§/ú 5 $:8+W 5E

aabbB:G>W 5%EaabbB

M'K+W 5%E ù %ú 5 $:8+W 5EaabbcB:G>W 5%E

aabbcBM'K+W 5%E ù %ú 5 $:8+W 5E

aabbccB:G>W 5%EaabbccB

M''>W 5E ùXoú 5 $:G>W 5Eaabbcc ∈ L(G1)

fZ5 ;p E J¦§'M.W<+e%:8be 5 :U7^Y%R|L(G1)| = ∞

VL 5 E ;$+t+eL;$+e; 5 ; 5 eXHW<+7 5 ;$b1>_+ EY%R E T 5 M.K+; E E 7 5 ;RS È E ùúd<ù ú V$ 5 ;$+W E +7a78K; E M'I17U E ;»:UWie9 5 :8T 57UeL;$(Y%Re%: 5iE ;$ E v*C

4 ;RW<¬; E MKI178 E 'e%:G>7GW<>;'­7GK E +7U; E :G] E U9>7 J MKI178Y%R E ¯ 5 e%:G]+Wÿ:8+78W)'e E ]U9Wi;;$RWi¦ 5 7GWi E +e%:8+e+'MC m äRWi+;+K

β 5 ;$ E >7

5 :GK;ÍiL7G:G'7 ;#¦ 5 78W< E >e:8+e+'MαW<>;$Ke%:80ÍM''>S+T 5 ;$3RW<,HeK+Í7 5 ;$RLS+T 5 V

;$'_+>W 5%E Y%Rα;$+78.1;$'78:8W<+e%:G

βV 5 RY%R

β]Í;$+78'1I;;$'7G+:8W)>e%:G#;$

αV 5 YR

;$>e 5 :UW 5E 5 7α ⇒ β

C m β 5 ;$ E +7 5 $:GK;W<N;$'e%:GÍM''>S+T 5 ;$#RW´eXHW<+7 5

Ç e.: 5 ;(7 5 ;$RS È E V;$._>+W 5E Y%Rα;$+78.1

βb;$+e 5 :8W 5%E

α∗

⇒ βC

465 W 5 iM'.eR+WL(G)

Vt;$ Ç eK;<t+MKi7UWi­:8'>)M.'17Gb;$b 5 e%:G+g: 5G = 〈Ω, Σ, S,

P 〉V(] 5 5 ev*Re%: 5 ;$-: 5 ; E E MKI178 E ¦ 5 78Wi; E L>e E 5 7+M'+W<+e%: 5E ;$

ΣYR

5 ;+W E +7<;$+78.1; E 7:8.7<; 5-EGâ W3 5 M 5 'e'+'MSVk E8E5 >Y%R'1M'z;$'_+>7)Y%R

L(G) =

x ∈ Σ∗ | S∗

⇒ xC

2.3 Forma de Backus-Naur·¬j 5 78W<»;$ n UºR E pr= R7dù n =»jkúy]dRW< 5 R$:878aWie+'78`; E 6;$ Ç e.7ØM.'eRL>e E M'.178 E ;$ 5 e%:Gg: 5 CB?dMK ] E +W<+M'9e:86»RWi»78W<­:GK+`M''1%786;6 5 e%:Gg: 5 VWi E L>7GW<.:GaY%R 5 M'; 5;$'7G>H: 5 ; E 7 5 ;RS È E 5%EGE RM.Re Ek5 L>78; 5 78 E CÌ? E8E Ed5 L>78; 5 78 EkE +7UT 5 7G E >e%:8; 5E E >R'7NC

ÞÌ Á ¢£(α | β)

u½^W ; 5E >M.>W<+e%: 5%E +e%:87Gz7I+e%:G E E ùα5 R

βú 5 ;$ E +70R$:G'M'._N; 5 eL

M''>S+T 5 ;07 5 ;$RS>T 5 C

Page 25: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& 2">/ !)oi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ£½"x)Ü\ÛB×*Ò¾<ÖØÜy¾V¿@ÐX++

">/

fZ5 7`g$>W)M 5 V E J:8.1] E8E >W 5%E 07 5 ;$RS>T 5

S → a(b | c | d)e

5 ;+7 â W 5%E :G+7 E ;$>7G'1S È E

S ⇒ abeS ⇒ aceS ⇒ ade

5 Y%R E 'e Ç >0Y%Rb)M'.eR+W +7U;0]abe, ace, ade

C½^Wi#¹JA 4 >Y%R'1M'+e%:G) E8E n =»j E >7GK

S → abeS → aceS → ade

ök*vW 5%E`5 R:G7 5 +g>W<M 5

S → (c(aSa | bSb)c | λ)

>78)+;$+K E ; 5 :8. 5 S ⇒ caSac ⇒ cacaSacac ⇒ cacacbSbcacac ⇒ cacacbbcacac

=^ EGE b+ E5 Vi¹JA 4 NYR.1M'+e%:8 E +78K

S → λS → caSacS → cbSbc

Ç<6µ t Á[α]

uͤY%R E :8.1+7a+e%:87G 5E 5 M'U9:G E 5 ;$ E +7aR$:G'M'._N; 5)5 RäeT 5 e)M'K+S>T 5 ;7 5 ;$RS>T 5 C

fZ5 7`g$>W)M 5 V E J:8.1] E8E >W 5%E 07 5 ;$RS>T 5

S → a[bcd]e

5 ;+7 â W 5%E :G+7 E ;$>7G'1S È E

S ⇒ aeS ⇒ abcde

5 Y%R E 'e Ç >0Y%Rb)M'.eR+W +7U;0]ae, abcde

Cök*vW 5%E`5 R:G7 5 +g>W<M 5

Page 26: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& 2"+, !)i

i

i

i

i

i

i

i

"+ Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

S → a[(A | B)c]dA → a[a]B → [b]

>78) E >;$>' E

S ⇒ adS ⇒ aAcd ⇒ aacdS ⇒ aAcd ⇒ aaacdS ⇒ aBcd ⇒ abcdS ⇒ aBcd ⇒ acd

5 R E vVP>78#ÍM.'eR+Wad, aacd, aaacd, abcd, acd

C ½»W<ä¹JA 4 NY%R.1M.>e:80Í E8E n =»j E >7GK

S → adS → aAcdS → aBcdA → aaA → aB → bB → λ

= 5 :G».e;YR^RWiJ7 5 ;RS+T 5 ; 5 :G' 5α → β[γ]δ

] E >W<7G»>Y%R'1IM.>e%:G J 7 5 ;$RS+T 5α → β(γ | λ)δ

C

È %@ µ ¢£ t¡ ¶àµÂ3t=ÉÂ(α)∗

u,¤¨YRÍ E :G'1>7b+e%:87G#L7I+e%:G E i 5 ;$ E +70R E ; 5 RW´eXHW<+7 5 Y%RMKY%R+7);$1+_> E eL`M''>S>T 5 ;a7 5 ;$RS>T 5 d 5 ;$d:UW3t]+WêeT 5^E >7ÌR E ; 5 ù§7G>L+:GK; 5 e>e9RWi1+_Iú C

fZ5 7`g$>W)M 5 V E J:8.1] E8E >W 5%E 07 5 ;$RS>T 5

S → a(b)∗c

:G>7 â W 5%E 5 W 5 7G E RMH:U; 5 )M.'eRL>W ´ VtVPVPVBC'C'C4µ%C465 W 5 Y%RMKY%R+7 5 R$:G7U n = jFV 5 ;$>W 5E >e 5 e:8787aRWi#¹JA 4 5 7878 E 5 e;$+e%:8V$ 5 W 5 V

5 7`g$>W)M 5

S → aZcZ → bZZ → λ

465 W 5<5 R$:87 5 +g>W<M 5 V$ 5 ;$>W 5E :G>7» n =»jF

S → a(b | c)∗d

Page 27: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& 2"No !)%qi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ£½"x)Ü\ÛB×*Ò¾<ÖØÜy¾V¿@ÐX++

"No

Y%Rb+7U): 5 ; E E >;$>' E Y%Rb'eKKW 5 WaV:G>7GW<'eW 5 W

db:I+W«+e%:G78b E :G E^5

λ5 RY%RMKY%R+7^>;$>'3¦ 5 78Wi;) 5 7b

cC

È %@ µ ¢£Ñt¡ ¶àµÂ3t=ÉÂ(α)+

uQ¤æY%R E :G'1>7i+e%:G787I+e%:8 E ä 5 ;$ E +7iR E ; 5 RWi 5 RQWi E 1>_+ E eM''>S+T 5 ;07 5 ;$RS>T 5 CZ· 7 5 ;$RS>T 5

α → β(γ)+δ](NY%R.1M.>e:8b

α → βγ(γ)∗δC

· E >R'7>VR$:8.M''_>78+W 5%E n =»j780;$ Ç e.7^3e 5E8E 3M.'eR+WX++

C m >78­3¦ +:GR;RWi;$ E 78KS+T 5 ;$iYRL E(E T 5 E E :87GR$:8R7U E ;zM.'eRL>Wæ7G>78 E +e%:8; E +W >;zRWi; E 7 5 ;$RLS È E C

2.4 BNF para a linguagem X++

= 5%EGE -M.'eRL>W´] 5 e E :G78R â ; E5 7GäRWiM.¦§t: 5 Y%Rä 5%EGE R EGâ W0 5 M 5%E YRz 5 ;$+WE +7 5 e$¦ Re;$K; 5E 5 W 5%E W<:U E8Eâ W3 5 M 5E R$:G'M.'_>; 5E 5 W 5Í5 t+7U; 5 7G E eie 5 :8S+T 5 n = j6V 5 W 5 V$ 5 7`g$>W)M 5 V

[

]C fZ5 7` E8E5 V$1IW 5E ; 5 :87` E +R'e:8 5 e1+eS>T 5

• 〈symbol〉78+7G E >e:U 5 eT 5 pX:G>7GW<'eM

symbolm

•EGâ W3 5 M 5E :G>7GW<'e E`E T 5 7G>7G E >e%:8; 5E 5 WË E W3 5 MHm

•W<+:8 E8EGâ W0 5 M 5%E ;)e 5 :US+T 5 n = j E T 5 7G>7G E >e%:8; 5E 7U¦§; 5E 5 W

[ ]C

l eKK78+W 5E ; Ç eKS+T 5 L>M 50Eâ W3 5 M 5 .e'+'ML; n =»jFVY%R`7G>78 E +e%:8J E :87GR$:8R7U;$RW¨7 5 7UWib E +7G.: 5 +W

X++C

〈program〉 → [ 〈classlist〉 ]

? E8E <eT 5 pX:G+78W<.eLM[.e;'>zY%R)RW 7 5 78Wi<+WX++

]i 5 W< 5%E : 5 ;$)RWiäM. E :8ä;$MK E8E E^5 R E b:G7U:UÍ;$)RWiÍ>;$>'Í1_+KCJ· E8E .WV 5 e 5%EGEG5 5 W<'M'; 5 7NVt 5 :8+e%:87( 5 W)p'M'7`RW7 5 78Wi378Wi_>+e; 5 eRW«7UYR.1 5 Y%RJ E :Gv)1I_+ 5 V$1B>H:U­prM 5 5 W 5 RW7 5 78W<31­M''; 5 V 5 W 5<5 5 7G78 5 W«0Wi 5 7GK0; 5E 5 W<.MK; 5 78 E C

〈classlist〉 → ( 〈classdecl〉 )+

5 R

〈classlist〉 → 〈classdecl〉 [ 〈classlist〉 ]

¤òeLT 5 pX:G>7GW<'eMclasslist

78+78 E +e%:8 RWiJ78+t:GKS+T 5 ;$^;$>+M'78S È E ;$^+M' EGE E V 5 W 5eRW\7 5 78W<a>W\°I1VY%RF E K+W<>e:8d]a 5 W< 5E : 5 ;6RWi E NY=kI+e+'»;$F;>MK7US È E;$b+M' EGE E 5 W 5

`&h=^iXiÊ^¡ËZXZXZXZÌ`&h=^iXig¼ËZXZXZXZÌZXZXZ=Z`&h=^iXi¤`ËZXZXZXZÌ

Page 28: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& 2"> !)i

i

i

i

i

i

i

i

"> Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

j 5 78WR$:8.M'._N; 5%E ; 5 E E :G'M 5%E ;$.¦ +78+e%:G E 7U;$ Ç e'7p E classlist

VWi E W3 5E +7UW E W< E Wi E +;+K E CZ¤ñ7G'W<+'7 5 E :8.M 5 R$:G'M.'_> 5(5 L>78; 5 7k;$»7G>L+:GKS+T 5

( )+ 5bE +Re; 5 V

5 78¯7G 5 eT 5 p:8+78W)'eMclasslist

7GNR7 E .1W<>e:8`7U 5 :G+7Gp E ` EGE J7G>L+:GKS+T 5 CZ·òe 5E8E n =»j,'7U­3R$:8.M''_>7 5 780RW E :8.M 5 V 5 78 5 R$:87 5 V%L7U0Y%R 5 M.>H: 5 7a 5%EGE )I1IM.K7aY%R EaE T 5 E'W)M.K+S È E VY%ReL; 5 ¦ 5 78W 5E 'W<M.>W<+e%:87 5 eM. E ; 5 7 E 'e:U­:8' 5 VL; E bR:G'M.'_>7^RW 5 R5 R:G7 5 E :8.M 5 C

465 e%:G'eReL; 5 5 W¨07G¯Ig$'W<07 5 ;$RS+T 5 V

〈classdecl〉 → “class′′ “ident′′ [ “extends′′ “ident′′ ] 〈classbody〉

? E8E eT 5 pX:G>7GW<'eMclassdecl

7G>7G E >e%:8;>MK7US>T 5 ;$RWiMK E8E C2?@M.'e;$K+Y%R):8Mk E :G78R$:GR7U E <'eKKä 5 W zM'I17U#78 E +781I;=Í

classY%R<1+W E >RK;ä 5 7JRW

K;$+e%:G Ç >; 5 73ù 5 R$:G7 5 :G>7GW<'eM ú^Y%R3.7U­#;7»e 5 W) J MK E8E E >e; 5 ;$NMK7U;CFû + 5 E ; 5e 5 W)b;)+M' EGE V 5 ;$ 5 RäeLT 5 7GN>7a<LMKI1%7U

extends 5 e 5 W)b; E Rt+7UMK E8E (;

Y%RMB<+M' EGE E >e; 5 ;$>+M'78;3; E +eL;$C m >7GKW¨+;+K E ; 5 :G' 5

`&h=^iXiÊ^ÎZ=ZXZ5 R

`&h=^iXiÊ^£_ S_[aigÏZXZ=Z¤\eLT 5 pX:G>7GW<'eM

classbody78+7G E >e:U 5 5 78 5 ;<;$NMK7US+T 5 ;<+M' EGE

〈classbody〉 → “′′ [ 〈classlist〉 ] ( 〈vardecl〉 “;′′ )∗

( 〈constructdecl〉 )∗ ( 〈methoddecl〉 )∗ “′′

?dM' E k.eKK` 5 WÊRW ´ Y%R^ù 5 t+ 5 eM'W<+e%:GIút1>W E +R'; 5 5 7BRW eT 5 pX:G>7GW<'eM classlistV

;$NMK7U; 5 e%:8+78 5 7GW<+e%:8C l E8E5àE 'e Ç +,Y%R&e 5E8E M'.eR+WþL>7GW<.:G&,;>MK7US>T 5;$äMK E8E E e'e9; E Vk 5 W 5 5 e%:G>+ieM''eR>Wÿ°%I1Cû + 5 E V E +R+W)p E Í E ;$+pMK7US È E ;$<1I7GK­I1> E Vy 5 e E :87GR: 5 78 E <W<]: 5 ; 5%E VyW<N;$'e%:Giä7G>L+:GKS+T 5 ù 5E8E .1+M'W)>e%:Ge>e9RWi-1+_Iú3; 5%E eT 5 p:8+78W)'e E

vardeclVconstructdecl

methoddecl

Vd:8+78W<.ee; 5 5 W RWе%C= 5 :8ÍY%R#e 5%EGE M.'eR+W +g$.ÍY%RÍ E ;$>+M'78S È EE *vW ¦ >H:U E +g:8pW<+e%:G3e E8E 5 78;+WC`¤ R E *vVL+M' EGE E e'e9; E V;$+ 5 E 17GK­I1> E ;i+M' EGE Vt;$+ 5 E^5%E 5 e E :G78R$: 5 7G E V Ç eM.W<+e%:8V 5%E W)]+: 5 ; 5%E C½^Wi»;>MK7US>T 5 ;$d17GK­I1> E V+78+78 E +e%:U;Ft+M 5 eT 5 p:8+78W<.eM

vardeclVI] E >W<+M'9e%:G

J ;$>+M'78S+T 5 ;$178K­I1+ E +W¨°%I1C fZ5 7`g$>W)M 5 b[7S£^ 5 RiSXdb[7^ËÑ3g 5 Rf S T_¤^ªÒ ÓËÑgVÒ Ó«Ò Ó D >W 5E +e%:UT 5

〈vardecl〉 → ( “int′′ | “string′′ | “ident′′ ) “ident′′ ( “[′′ “]′′ )∗

( “,′′ “ident′′ ( “[′′ “]′′ )∗ )∗

ÔÕÖ ×GØÙÚ r ÚVÛ±×ÜMÝ)Þ r Ú rß Ü6×*×Ü3××àáÚ t Ö âáÖ ×Ý3Ö ÚKÖclass ã for ã while ä Ü|å r â r3æß*rªß Ü3×Ü ß%æ r ä r ä r âáçáèé Ù r é Ü3Ú¥êë Ö ß*ì Ú ã Ö/âáÜ3ç ØÖ ß ä Ü æ ÜíâáÜ3Ú tßrßeî ÙÜíÝ r ä r ÙÚ ä Ü3×*×Ü3׫×*àáÚ t Ö âáÖ × ì ãï Ö ß Ú r âáÚKÜ3èØÜ ï r â r è ä Ö ã ÙÚ r âáÜ Ø ß*r ä Ör â ï rt Ü Ø*Ö ä ÜËÜ3èØ ß*r ä r ê

Page 29: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& 2"Iq- !)i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ£½"x)Ü\ÛB×*Ò¾<ÖØÜy¾V¿@ÐX++

"Iq

? E8E <7 5 ;$RS>T 5 >78)+;$+K E Y%Rb 5 W<>S>W¨ 5 W 5 :8. 5 ;)178K­I1+MB E +7»;>MK7U;VY%Rb 5 ;$ E +7

intVstring

V 5 RRW K;$+e%:8 Ç >; 5 7»Y%Rb] 5 e 5 W<3;$3RWiÍMK E8E b;$>+M'78;e 5 78¯78 5 7 5 7UWiCØ?dW E +R';V1I+W 5%E e 5 W< E ; E 178K­I1+ EdE +e; 5 ;$NMK7U; E V%Y%R 5 ;+W E +7 E +RK; 5E(5 ReT 5 5 7b 5 MKU9:8 E Y%R<.eL;$'>Wÿä;.W<+e E T 5 ;<>;ä178K­I1+MXC= 5 :G(YR 5 m »e 5Ç eMt;3M. E :8b;$ 178'­I1+ E eT 5 ¦ 5 t.e+M.R â ; 5 e E :837 5 ;$RLS+T 5 VWi E V E 'WVe)7 5 ;$RS+T 5 ; 5 eT 5 p:8+78W)'eM

classbodyV$L¯ E +;)78KS+T 5 ;$RW

vardeclC

û»Wie+'78 E +W<+M'9e:8V:8+W 5E E ;$>+M'78S È E ;$b 5 e E :G78R$: 5 7G E JW<]: 5 ; 5E

〈constructdecl〉 → “constructor′′ 〈methodbody〉〈methoddecl〉 → ( “int′′ | “string′′ | “ident′′ ) ( “[′′ “]′′ )∗

“ident′′ 〈methodbody〉

· ;$NMK7US+T 5 ;$iRW 5 e E :G78R$: 5 7J 5 W<>S> 5 WÿäMKI178constructor

Cä½^Wÿ 5 e E :87GR$: 5 7eT 5 :G>Wþ:8. 5 ;$-7G+: 5 7Ge 5,5 RòRW e 5 W<C· E8E 'WV»;$+ 5 E ;

constructorV»'eKKp E 5

5 7G 5 ; 5 5 e E :G78R$: 5 7>V7G>7G E >e%:8; 5 L>M 5 eT 5 pX:G+78W<.eLMmethodbody

Ck°­30;$NMK7US>T 5 ;$RWÿW<]: 5 ; 5 'eKKp E i 5 W 5 :8. 5 ;$i78: 5 78e 5 ; 5 W<]: 5 ; 5 VZYRi 5 ;$ 5 ReT 5 :G>7b1­78' E;$'W<+e EGÈ E V E >RK; 5 L>M 5 e 5 W<b; 5 W)]+: 5 ; 5 t+M 5<E +R 5 78 5 C

¤« 5 7G 5 ;$ÍRW W<]: 5 ; 5 ]Í;.1K;$'; 5 +W´;$R E 7:8 E Vk 5 e¦ 5 78W)iW 5%E :878 E +R'e:87 5 ;$RS+T 5

〈methodbody〉 → “(′′ 〈paramlist〉 “)′′ 〈statement〉

·78'W)>.7U7:8#]ÍM' E :8&;$#78®W)+:G7 5E ¦ 5 7GWi E ; 5 W)]+: 5 ; 5 V[78+7G E >e:U;ät+M 5eT 5 pX:G+78W<.eLM

paramlistCZ· E +Re;)7:8 E T 5<5%E 5 Wie; 5E Y%R 5 W< È +W 5 W)]+: 5 ; 5 C

〈paramlist〉 → [ ( “int′′ | “string′′ | “ident′′ ) “ident′′ ( “[′′ “]′′ )∗

( “,′′ ( “int′′ | “string′′ | “ident′′ ) “ident′′

( “[′′ “]′′ )∗ ]

? E8E `M' E :U^;$d78®W<:G7 5E V+Y%Rd] 5 P 5 eMVIY%Re; 5 7G E >e%:Gk]k¦ 5 7GWi;a 5 7 E NY=kI+e+' E;$ä;$>+M'78S È E Y%RÍ:I>W 5 :G' 5 ; 5 L7U®W<:87 5 5 e 5 W)ä;17GK­I1>M@ E8E5 +';>M.VE +78; E 5 7<1 â 78RMK E C fZ5 7i+g$+W<M 5 V6 E<E >R'e%:G E >;$>' E 5 ;$+W E >7<+7U; E 5 7paramlist

b[7S£^ 5 Rb[7S£^ËÑiSXdb[7g 5 RiSXdb[7gKÒ ÓªÒ ÓOÑðb[7S£^ËÑpñ Xò= T_£`· E >ReL;»L7G:Ga; 5 5 78 5 ; 5 W<]: 5 ; 5 ]aRW

statementC l EGEG5(E 'e Ç +(Y%Ra E8E »7G:G

]0 5 W< 5E :8Í;0RWÎHe' 5 5 Wie; 5 V 5 Y%R) 5 ;$)78>++7 E :G7Ue9 5 C = Í1+7U;;$Vt 5 W 51>7G>W 5E e<;$ Ç e'S>T 5 ; 5 eT 5 pX:G+78W<.eLM

statement E +R'7>VRWii 5 e E :G78RS+T 5 ; 5 :8. 5

`\f:^[a7\ = `\f:^[a7\ ~Z=ZXZ `\f:^[a7\Ê[ Ì

Page 30: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& 2"> !0/ i

i

i

i

i

i

i

i

"> Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

]JRW¨ 5 WieL; 5 5 W< 5E : 5 J 5 ;$ E +7`+7U; 5 <7G:G'7`; 5 eT 5 pX:G+78W<.eLMstatement

C

〈statement〉 → (〈vardecl〉 “;′′ |〈atribstat〉 “;′′ |〈printstat〉 “;′′ |〈readstat〉 “;′′ |〈returnstat〉 “;′′ |〈superstat〉 “;′′ |〈ifstat〉 |〈forstat〉 |“′′ 〈statlist〉 “′′ |“break′′ “;′′ |“;′′

)

? E8E deLT 5 pX:G>7GW<'eM+7U 5EyE +R.e%:G E :G' 5E ;$6+;+K E V>Y%Rd 5 7G78 E 5 e;$>WÊ` 5 Wie; 5%E;)e 5%EGE 3M''eR>WbY%R E >78T 5 ;$ Ç eK; 5E E +R.7N

•;>MK7US>T 5 ;$178'­I1+ E M 5 + E m

• 5 WieL; 5 ;$b:87G'RKS+T 5 m

• 5 WieL; 5 ;$.W<78 E8E T 5 m

• 5 WieL; 5 ;$M.>H:8R7Um

• 5 WieL; 5 ;$J:G]>7GW<'e 5 ; 5 W)]+: 5 ; 5 78: 5 7Ge 5 ;$1M 5 7'm

• 5 WieL; 5 ;$ E >M.NS+T 5 m

• 5 WieL; 5 ;$7G>L+:GKS+T 5 m

• 5 WieL; 5 ;$.e%:8+787GRPS+T 5 ;(MKS 5 m

• 5 WieL; 5 1I_+ 5 C

¤ eLT 5 pX:G>7GW<'eMvardecl

¦ 5 »; Ç eK; 5 e%:8+78 5 7GW<+e%:8z78;$NMK7US>T 5 ;1I7GK­I1> E ;$MK E8E Cʽ E 7G>W 5%E E8E W< E W 5 :G>7GW<'eM»7U,;$>+M'78S+T 5 ;$17GK­I1> E M 5 > E VF 5 EE .e%:8:GK+W)>e%:Gk E8E E ;$RL E 5 e E :G78RS È EBE T 5 'R E CBök*vW 5Ey5%EB5 R:G7 5E 5 Wie; 5E 1­M'K; 5E

〈atribstat〉 → 〈lvalue〉 “ =′′ ( 〈expression〉 | 〈alocexpression〉 )

? E8E Í])#; Ç eKS+T 5 ;$0RW 5 Wie; 5 ;$0:G78.R'S>T 5 VPY%Rb:8+WæRWiÍ7G+¦ +7I+e+'#ÍRWi 5E 'S>T 5 ;$äW<+W<¯78Kàù 78+78 E +e%:U;t+M 5 eLT 5 pX:G>7GW<'eM

lvalueú V E +R'; 5 7)RW

=V

;$> 5 E VkRWi+g7G EGE T 55 R,RWi78¦ +7I+eLKRW´e 5 1 55 v*: 5 VZR$:G'M.'_>e; 5-5&5 t+7U; 5 7new

C fZ5 7`g$>W)M 5 ^ ¢ 5 R^ªÒ Ó¤¢gó¼`@Z3a^ªÒ ÓªZ)g¢[_Yñ Xò= T_ '

Page 31: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& 2"> !0/"i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ£½"x)Ü\ÛB×*Ò¾<ÖØÜy¾V¿@ÐX++

">

〈printstat〉 → “print′′ 〈expression〉

? E8E beLT 5 pX:G>7GW<'eMy+7Ui E >;$>' E Y%R78+78 E +e%:8W¨ 5 Wie; 5E ;$b'W<78 E8E T 5 C@?@M' E 5 e%:I+W¨0LMKI1%7Ub78 E +781;

printV E >RK;<;$JRWi)g$78 E8E T 5 Y%RMKY%R+7NC fZ5 7ag$+W<M 5

T7d:b'[7S ~XT7d:b'[7S^T7d:b'[7S^ªÒ ÓªZ)g `|Z3a«Ò3_&Ó

〈readstat〉 → “read′′ 〈lvalue〉

? E8E »7 5 ;$RLS+T 5 5 7878 E 5 e;$d 5 5 Wie; 5 ;$6M.>H:8R7Uread

C[?dM'@] E >W)>M.9Le%:GF 5print

VWi E E >Re;i7G:Gb;i7 5 ;RS+T 5 ù

lvalueúF78+7G E >e:U)RWii7G+¦ +7I+e+'iiRW<# 5%E KS+T 5

;$äW<+W<¯78'VZ7UY%R 5 5 Wie; 5 ;$ÍM'+.:GR78¦§S+ E >e%:GK; 5 C,=»T 5 5 ;$+W 5E R$:8.M'._N7 5eT 5 pX:G+78W<.eLM

expressionV 5 E Y%R>7G>W 5%E YRJ EaE >R'e%:G E >;$>' E 5E8E W E +7a>78; E

5 7` E8E 07 5 ;$RS>T 5

d_X^&a£^d_X^g^OZ)gd_X^&a£^OZ)gKÒ`ó ~ ÓWi E eT 5 YR+78+W 5E >787

d_X^&a£^ó¤gd_X^&a ~X

〈returnstat〉 → “return′′ [ 〈expression〉 ]

f 7 5 ;R_&+;$+K E 5 787G E 5 eL;$+e%:G E 5%E 5 Wie; 5E ;$7G+: 5 7Ge 5 ;$&RWiàU9Wi;;$W<]: 5 ; 5 C3·Ëg$78 E8E T 5 Y%R E >R)ÍLMKI1%7U

return] 5 P 5 eLMXVy 5 E Vy+W0 5 78#: 5 ; 5E(5%E

W<]: 5 ; 5E :G+e9W Y%R E >7(;$NMK7U; 5%E 5 W 5 78: 5 7GeLe; 5 M'RW 1M 5 7 5 R 5 $v*: 5 ù§1*v 5eT 5 pX:G+78W<.eLM

methoddeclú V@ E8E5 eT 5E äM.K+ 5%E 5 e E :87GR$: 5 78 E ù 1*v

constructdeclú

Y%RJeT 5 78: 5 78eW e;Ck· EGE .WV 5 WieL; 5E ; 5 :8. 5

d_&S&7d=[ d_&S&7d=[£^ógVZ`E T 5 R E ; 5E ;$+e%:G7 5 ; 5E W)]+: 5 ; 5%E 5 5 Wie; 5 d_S=7d=[ E +WÙ+g7G EGE T 5 ;$78: 5 7Ge 5 ]R$:8.M'._N; 5 e 5%E 5 e E :87GR: 5 78 E C

= 5%E 5 e E :G78R$: 5 78 E 5 ;$ E >7 R$:8.M''_>; 5 :8W3t]+W 5 5 Wie; 5super

L7UÍU9W<;#; 5 5 e E :G78R$: 5 7a; E Rt+7UMK E8E C m R E 'e%:8gJ]

〈superstat〉 → “super′′ “(′′ 〈arglist〉 “)′′

¤ifstat

] 5 eLT 5 pX:G>7GW<'eMyY%R+7U 5%E 5 Wie; 5 ;$ E >M.NS+T 5 C 465 W 5 e)W< 5 7GK); EM'.eR+e E V 5 ;$>W 5E :G>7 5 RäeT 5 )7:8

else; 5 5 Wie; 5 C

Page 32: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& , !0/%i

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

〈ifstat〉 → “if ′′ “(′′ 〈expression〉 “)′′ 〈statement〉[ “else′′ 〈statement〉 ]

465 W 5 5 W<>e:UW 5E e%:G>7G 5 78W<+e%:GV 5 eT 5 pX:G>7GW<'eMstatement

5 ;$6+7U7[ 5 Wie; 5E 5 W< 5%E : 5E ù 5 RäM 5 5%E ;$ 5 W<e; 5%E úC fZ5 7` E8E5 V E T 5 1­M.K; 5E W3 5Ea5%E 5 WieL; 5E

b ^ d_X^&a¤g

5 R

b ^¤óg¢X¢`

d_X^&aa T7d:b'[7Sa d_&S&7d=[ ËÌ_7hi_

d_&S&7d=[ ¤ôHeK 5 5 Wie; 5 78+t:8H:8.1 5 eiM'.eR+W

X++] 5

forV E +W<+M'9e:8b 5 +g E :G+e%:8

e)M'.eR+Wî°%I1C m Ri;$ E +7GKS+T 5 ]

〈forstat〉 → “for′′ “(′′ [ 〈atribstat〉 ] “;′′ [ 〈expression〉 ] “;′′

[ 〈atribstat〉 ] “)′′ 〈statement〉

?dM'@'e'+'» 5 W `M'I17Ufor

V E +R';`;@RWò+ù d 5E :G7I E >M.>W)>e%: 5E yRW\ 5 Wie; 5 ;'e'+'M.'_>S+T 5 VNRWi^g$78 E8E T 5 ;$F 5 e%:87 5 M.d6RW\ 5 W<e; 5 ;@'e78+W<+e%: 5 VN: 5 ; 5%EÌ5 t+ 5 e E E +L7U; 5%E 5 7)m C¤ 78'W)>.7 5 5 HM.:G'W 5 5 7G78 E 5 e;$>Wþ

atribstatsV^>eY%Re%: 5

5E >Re; 5 ]RWiexpression

CQ¤ 5 WieL; 5 :8+78W<.e 5 W RW 8úXä 5 W 5 5 Wie; 5ùstatement

úFYRJ;+1 E +7`+gNR$:U; 5 C m T 5 5 Wie; 5%E 1I­M.K; 5%E

7\&d = 5 R

7\&d ^¢ Ë£ d_X^=agKÒ3^&Ó 5 R

7\&d ^¢ Ë ^£õg ^¢£^ó d_X^&a¦`|Ò3^=Ó T7d:b'[7S¦`ËÒ3^=Ó Ì

Page 33: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& ,$" !0//i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ£½"x)Ü\ÛB×*Ò¾<ÖØÜy¾V¿@ÐX++

$"

¤ 5 WieL; 5break

5 ;$ E >7R E ; 5 e 5 5 7G 5 ; 5for

78z.e%:8+787 5 W)t+7 E Räg$>+R$pS+T 5 Ca?dM'b¦ 5 Ø;$ Ç eK; 5 ;$'7G+:8W)>e%:G3;$>e%:G7 5 ; 5 eT 5 pX:G+78W<.eLM

statementCaAØ­):8W3t]+W«¦ 5

;$ Ç eK; 5<5 5 Wie; 5 e%RM 5 V$7G>7G E >e%:8; 5 5 7`RW¨ 5 e%: 5 prpr1 â 78RM' E5 _+'e9 5 5 W 5 +W

b ^ g _7hi_d_X^&a¤g j[.eM.W<>e:8V 5 5 Wie; 5 5 W< 5%E : 5 V`;$ Ç e'; 5 ;$>e:87 5 ; 5 eT 5 p:8+78W<.eM

statementV

'e'+'p E 0 5 W RWî ´ bY%R)1>W E >RK; 5 ;0RWiÍM. E :Uz;0 5 Wie; 5%E Vt78+78 E +e%:8; 5 t+M 5eT 5 pX:G+78W<.eLM

statlistVJ:G>7GW<'e< 5 WîRW &µ+UC@¤

statlist]

〈statlist〉 → 〈statement〉 [ 〈statlist〉 ]

= 5 :G^Y%RλeT 5 ]a>78; 5 5 7Z:8M$7 5 ;$RS>T 5 C l EGEG5E 'e Ç > Y%RaRWËM 5 5 ;$` 5 Wie; 5

1_> 5 5 W 5

b[7SÊf f:_&S=Q\&a b[7S^ ÌeT 5 ]J1­M'K; 5 C fZ5 78]+W 5 7 5 7UWi; 5 7@ 5 ;$R$:G'M'._N7

b[7SÊf f:_&S=Q\&a b[7S^

Ì5 R

b[7SÊf f:_&S=Q\&a b[7S^ 465 e%:G'eReL; 5 5 W 5E eT 5 pX:G+78W<.eL E Y%R.e;3¦§MH:UW«;$ Ç e.7NV:G>W 5%E

〈lvalue〉 → “ident′′ ( “[′′ 〈expression〉 “]′′ |“.′′ “ident′′ [ “(′′ 〈arglist〉 “)′′ ] )∗

? E8E FeT 5 p:8+78W<.eM78+7G E >e:U`RWi 7G+¦ +7I+e+' ^RWi 5%E KS+T 5 ;$FW<+W<¯78'»@¦ 5 R E ; 5+W

atribstat

readstatC D M6>;$>''eKKp E E +W<78Í 5 W RWÿK;$>e:8 Ç +; 5 73Y%R#] 5

e 5 W)^;^RWiJ178'­I1+M 5 RiRWËW<]: 5 ; 5 CZ? EGE `K;$+e%:G Ç >; 5 7d 5 ;$`1'7 E +R'; 5 1­7GK E 1+_+ E 5 7dRW â e;$K^e 5 + EG5 ;$ E ^ E :U7k78¦ +78'e; 5 RWi17GK­I1>M$.e;g;mRWi78¦ >7I>eKJRW>W< 5 Ve 5 + E5 ;$ E Y%R>7G>7678¦ >7G>eK7@RW+W) 5 ; 5 $v*: 5 m 5 R#RW e 5 W< ;»RWW<]: 5 ; 5E +RK; 5 5 7RWiM. E :U;$#78RW<>e: 5E Vye 5 + E5 +WÿY%R E i E :U­Í¦§_+>e; 5 RWiU9W<;);$RWîW<]+: 5 ; 5 C fZ5 7`+g$+W<M 5

Page 34: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& , !0/i

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

•d_X^=a^ 5 e%:G]+W E5 W)>e%:G)7G+¦ +7I+e+'<)RWi)1I7GK­I1>M E 'W<M. E m

•d_X^=a^ªÒ Ó«Ò Ó)]RWi078¦ >7I>eK)0RW<<17GK­I1>ML'e;$+g$;m

•d_X^=a^eZ)gÍ]JRWi<7G+¦ +7I+e+') 5 +W< 5

b;017GK­I1>M

am

•d_X^=a^eZ)gVÒ Ó«Ò Ó0]RWi< 5 W3'eS>T 5 ; 5E ; 5 E :G' 5%E e%:G>7G 5 78 E m

•d_X^=a^eZ)g ~ Z``]`RWiJ 5 W3'eS+T 5 ; 5%E :G7I E :8. 5E Ck=^ E8E a> EG5 V

a]`RWiJ1I7GK­I1>M

Y%R&7G+¦ +78+e+'RW 5 v*: 5 C 465 W E8E 5 $v*: 5 E :8W 5%E .e1 5 >e; 5,5 W)]+: 5 ; 5bV

L E8E e; 5 "Ii 5 W 5 78RW<+e%: 5 C`? E8E 0W<]: 5 ; 5 ;$+1b78: 5 7GeL7^RW 5 R$:G7 5#5 v*: 5 ; 5Y%RMB E :8W 5E 7G+¦ +78+e+'e; 5)5 +W< 5

cC

= 5 :G»Y%R^R:G'M.'_>e; 5 E :8^eT 5 p:8+78W<.eM$eRW 5 WieL; 5 ;$»:G78.R'S>T 5 5 ;$>7 â W 5%E :G>7^eZ)g ~ ¢ V 5 Y%R»](.M'+%ML 5 E E :87 â W 5E :G>e:Ue; 5 :87G'R'7F1IM 5 763RWi3U9W<;;$JW<]: 5 ; 5 C m 'e%:8:8'>W<+e%:8( E8E5 V% 5 78]+WV E +7U­3t+78W<H:8'; 5 eL0e 5E8E 0M.'eR+WC D My>7G7 5E +7U­0 5 e:U; 5 +W E E 5E :G>7G 5 78 E ;<eL­M' E C=^RW 5 Wie; 5 ;d:G78'RKS+T 5 5 ;$+W 5E :G+7ÌRWi

alocexpressionY%R@]kRWia7G+¦ +7I+e+'

)RWîe 5 1 5)5 $v*+: 5<5 R7878IC m R<;$ Ç e'S>T 5 ]

〈alocexpression〉 → “new′′ ( “ident′′ “(′′ 〈arglist〉 “)′′ |( “int′′ | “string′′ | “ident′′ )( “[′′ 〈expression〉 “]′′ )+ )

? E8E eT 5 pX:G>7GW<'eMP7 5 ;$R_Jg$78 E8EÈ E ; 5 :8. 5

[_Yñ =òX T_ Ñ^ g [_Y¼iS=d:b[7VÒ Ó«ÒbÓ«Ò)ö7Ó[_Yñ =òX T_ ѯbÊö

¤ÊeT 5 p:8+78W)'eMexpression

]^R$:G'M'._N; 5 ;.1+7 E E 1+_> E L7UJ7G>7G E >e%:87d E 5E8Eâ 1> Eg$78 E8EGÈ E Y%R 5 ;$>W E >7F 5 e E :G78R â ; E ebM'.eR+W

X++CZödW 5%E 1+7F 5 W 5)E T 5 E8E E

g$78 E8EGÈ E C

〈expression〉 → 〈numexpr〉[ ( “ <′′ | “ >′′ | “ <=′′ | “ >=′′ | “ ==′′ | “! =′′ )〈numexpr〉 ]

· E +g7G EGEGÈ E e0e 5E8E 07UWi­:GK+ E T 5 ;$ Ç eK; E +W¨;$.1+7 E5%E e â 1> E (;$.¦ +78+e%:G E C@¤e â 1>MØWi E M.: 5 ]0 E :GVPY%R);$ Ç e) 5 W 5 ])RWi#+g7G EGE T 5 Y%R0 5%EGE R 5 t+7U; 5 7G E 7G>M'p 5 eL E C[?dMK0] 5 W< 5%E :U0;(RW< E RL+g$7G EGE T 5 Y%R 5 7878 E 5 e;$» 5 78'W)>.7 5

numexprE +R';0 5 7`RW 5 L>78; 5 7F78+MK 5 eLMPJRWi E +Re; E RL+g$7G EGE T 5 Y%R 5 7878 E 5 e;$J 5E +Re; 5

numexprC 4 ; E Rtg$78 E8E T 5 V 5 W 5 1>7G>W 5%E ;$Ke%:8V 5 ;$3 5 e%:G>7`:8W3t]+W

5 R:G7U EaE RL+g7G EGEGÈ E 5 R$:87 5%EF5 t+7U; 5 7G E V% 5 7^g$>W)M 5+5 R

∗C

· E8E 'WV78)i+;$+Kl^ó¤gôõ¡` atV:G>7 â W 5E E +R.e%:8J;+78.1S>T 5

expression ⇒ numexpr < numexpr∗

⇒ a + b < numexpr∗

⇒ a + b < c ∗ d

Page 35: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& ,/ !0/%oi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ£½"x)Ü\ÛB×*Ò¾<ÖØÜy¾V¿@ÐX++

/

= 5 :GV[ 5 78]+WVØY%R# E +Re;ä7G:G#;z7 5 ;$RS>T 5 ] 5 P 5 eLMXC#½^Wi 5 R$:878ä 5E8Eâ 1>M;$>7G'1S+T 5 )7:8.7^; E :GJeT 5 p:8+78W<.eM E >7GK

expression ⇒ numexpr∗

⇒ a + b

5 Y%R E .e Ç +aY%Rª^óg»:UW3t]+Wê]kRWiag$78 E8E T 5 1I­M.K;V>+7U;aF7G:G'7Ì;$expression

V+W0 5 78aeLT 5 R$:8.M''_+ 5 L>78; 5 78 E 78+MK+ 5 e E CؤÑe â 1+M E >R'e%:Gd] 5 eT 5 p:8+78W<.eM

numexprC

〈numexpr〉 → 〈term〉 ( ( “ +′′ | “ −′′ ) 〈term〉 )∗

? E8E i7 5 ;$RS>T 5 ] E >W)>M.9Le%:G J e%:G+78 5 7NCF·Ë;$H¦ >7G>eS+#]3Y%R3 E +Re;iL7G:GeT 5 ]t+eL E5 t+ 5 eMXVÌWi E 5 ;$ E +737G>L+:GK;RWÿe=HW)>7 5äÇ eH: 5 ;$#1+_+ E CÍ? EGE ;$.¦ +78+eS> E >'p E »e 5 ¦§: 5 ;JY%RJY%R+78+W 5%E +7U7Fg$78 E8EÈ E ; 5 :G' 5 ^óg¡ó¼` aLV$Wi E eLT 5+;$+K E ; 5 :G' 5 ^£õg¼õ¡`$V[ 5 E VØ>W +7UMXVB:UMd+g7G EGE T 5 eT 5 ¦§_iW3RH: 5&E >e%:GK; 5 Cä·;$>7G'1S+T 5 L7Ul^ó¤g¡óô` a E +78'

expression ⇒ numexpr ⇒ term + term + term∗

⇒ a + term + term∗

⇒ a + b +term

⇒ a + b + c ∗ d¤òeLT 5 pX:G>7GW<'eM

termE +R 5 W) E W 5 7U+ 5 â e 5 L7U +g$7G EGEGÈ E 5 W 5%EZ5 t+7U; 5 7G E÷ VL3ø ù 78 E : 5 ;<;$'1% E T 5 úC

〈term〉 → 〈unaryexpr〉 ( ( “ ∗′′ | “/′′ | “%′′ ) 〈unaryexpr〉 )∗

½^Wi)g$78 E8E T 5 Y%R 5 e%:G+e93RW 5 t+7U; 5 7FRe­78 5 5 W 5 ^ó¼ R$:8.M''_>< E +R'e:87 5 ;$RS+T 5

〈unaryexpr〉 → [ ( “ +′′ | “ −′′ ) ] 〈factor〉

·`Y%RVe 5 1W)>e%:GV%1>W 5E Y%Runaryexpr

5 ;$(>787@+;$+K E Y%R E »'eK'+W 5 W 5E5 t+7U; 5 78 E

+5 R

−E >RK; 5E 5 76RW<)+;$+K+7U;t+M 5 eLT 5 pX:G>7GW<'eM

factorV( 5 ;$

>787(:8W0L]>WÿY%R+MK E >;$>' E >78; E 5 7factor

E +W 5E5 L>78; 5 78 E 5 W 5 78 Ç g 5 CfZ5 7`+g>W<M 5 V$7U"^ó¼ :8+7 â W 5E

expression ⇒ numexpr ⇒ term + term∗

⇒ a + term ⇒ a + unaryexpr ⇒a + −factor

⇒ a + −1

¤òeLT 5 pX:G>7GW<'eMfactor

78+7G E >e:UJ EkE RL+g$7G EGEGÈ E Wi EkE .W<M' E Y%R` 5 ;$+W 5%E :G>7>V:8 E 5 W 5 5 e E :Ue%:G EF5 R7G+¦ +7I+e+' E 017GK­I1> E C

〈factor〉 → ( “intpconstant′′ | “string

pconstant′′ | “null′′ | 〈lvalue〉 |

“(′′ 〈expression〉 “)′′ )

· E8E 'WV E8E @eT 5 pX:G+78W<.eLM7 5 ;$R_F 5 e E :Ue%:G E 'e%:G>.7U E V 5 e E :Ue%:G EØE :G78.eV 5 e E :8e%:Gnull

VP78¦ >7I>eK E ä178'­I1+ E #U9W<; E ;$<W<]: 5 ; 5E ù eLT 5 pX:G>7GW<'eMlvalue

ú^VÌ.eL;Vg$78 E8EGÈ E +e%:G78`7I+e%:8 E E CB? E8E KHM.:G'W 5 + E5 ]`eN E8E ­78 5 7UJY%R^(e 5E8E (78W<­:GK+

Page 36: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& ,, !0/i

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

5E8E 0>787a>;$>' E 5 W 5 ^ó g¡ó¦` Ck·\;$+78'1IS+T 5)E +78'

expression ⇒ numexpr ⇒ term + term∗

⇒ a + term ⇒ a + unaryexpr ⇒ a +factor

⇒ a+(expression) ⇒ a+(numexpr) ⇒ a+(term+term)∗

⇒ a+(b+term)∗

⇒a + (b + c)

?^V Ç eM.W<+e%:8V 5 eT 5 pX:G>7GW<'eM[YR0;$>7G'1Í+;$+K E Y%R378+78 E +e%:UWîM' E :U E ;$07GR$pW<+e%: 5%E V$R E ; E +W«U9Wi; E ;$W<]: 5 ; 5E V$]

〈arglist〉 → [ 〈expression〉 ( “,′′ 〈expression〉 )∗ ]

2.5 Grafos sintáticosök+78+W 5E 'e;VRWi 5 R:G7UWie>.7Ub;$(7G>78 E +e%:87dRWibM'.eR+WVU9Wi;b;$ 7U¦ 5E .e%:8­:GK 5 C ? E8E 7G>7G E >e%:8S>T 5 ¦§+.M'H:Uà1 E RM.'_>S+T 5 ; 5 :G' 5 ;&+;$+K E<5 RQ¦ 5 78W< EE +e%:G>eK E YRJ>;)eT 5 pX:G>7GW<'eMP 5 ;(+7U7NC f 780 E8EG5 V$;$ Ç ep E J78)+; Eâ W3 5 M 5eT 5 :G>7GW<'eMkRWæ7U¦ 5 ;.78>+ 5 e; 5 5 W ; 5 E :G' 5%E ;)1]+7G:GK E 5%E YR E T 5 7 5 :GRMK; 5%E 5 W EGâ W0 5 M 5%E :G+78W<.eL E JY%R+M' E Y%R E T 5 7 5 :GRMK; 5E 5 W Eâ W3 5 M 5E eT 5 :G+78W<.eL E C

4 ;äRW ;$ E8E E 7U¦ 5%E 5 787G E 5 e;) 5 MK; 5 ;$'78+.: 5 ;$iRWiä7 5 ;$RLS+T 5 eRWiä7UpWi­:8'>be n = j6C$½»W<078 E :8b;»RW e¯zù 1]>7:8'+Nú@ 5 W78¯:8RM 5

A78bRWe¯0 5 W7G¯:GRM 5

B'e;$K+<Y%R E RP+;$+K

AB]J7G:G;)7 5 ;$RS+T 5 ;$ E8E :G>7GW<'eMXV 5 R E *vV:8MB7G E :U

'e;$K+## 5 e>:8+eS+T 5 ;Í+;+KA 5 W«Í+;+K

Bei7 5 ;$RS>T 5 ;$ EGE beT 5 pX:G+78W<.eLMXC

D 5 ; 5 78¦ 5 5%EGE RPRWùHe' 5 e¯)'e'+'MV EG5 78 5 Y%RMPeT 5 'eK;$(e+e9%RW<)78 E :8V(RWHeK 5 e¯ Ç eMB;$ 5 e;$Je>e9RWi)7G E :U3L7G:GVW3 5E 7 5 :8RM'; 5E 5 Wî<+;$+K

λC

· E8E 'WV E :8.1+78W 5E RWi)7 5 ;RS+T 5

A → abc

:G>7G>W 5Ea5 7U¦ 5 5 7G78 E 5 e;$>e:8 5 eLT 5 pX:G>7GW<'eMA

ú-

-

g

-

-

= 5 :GJYR 5E e¯ E 'eKKMP Ç eLMPeT 50E T 5 78+78 E +e%:8; 5E e 5 ;$K78Wib; 5 78¦ 5 C D 5 ; E E 7G E :U E Y%ReT 5 5E8E R+W¨RWîe¯#; 5 78.+W ù;$ E :G'e 5 úFe 5 ;$'7UWi:I+W 5 e¯i.e'+'Mù Ç eM ú^ 5 W 5#5 78'+Wÿù§;$ E :8.e 5 ú C¤ E e¯ E 5 787G E 5 e;+e%:G E Eâ W3 5 M 5E eT 5 :G+78W<.eL E»E T 578+78 E +e%:8; 5E e 5 ;$K78W<0 5 7`78:8®eRM 5%E C fZ5 7`g$>W)M 5 V$7U0 E 7 5 ;RS È E

A → aBcB → de

:G>W 5E

Page 37: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& ,o !0/qi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ£½"x)Ü\ÛB×*Ò¾<ÖØÜy¾V¿@ÐX++

o

ú-

-n

-

-

û-

a

-

_

-

f 7U E t+78W 5E Y%R EkE T 5 E ¦ 5 78Wi EkE +e%:G>eK E Y%R` 5 ;$>W E +7k+7U; E 5 7kRWËeT 5 p:G>7GW<'eMXVB;$>1+W 5%E t+7U 5 7G78+7»: 5 ; 5%E 5%E +W<'e9 5%E Y%R)1T 5 ; 5 e¯z'eKKMd 5 e¯ Ç eMk; 57U¦ 5 5 7G78 E 5 e;$>e%:G6 5 eT 5 p:8+78W)'eMC m F:G'1+78W 5E[5 t+7U; 5 78 E ;$ E >M.NS+T 5 e(7 5 ;$RS>T 5; 5 eT 5 p:8+78W<.eMt:G+78+W 5%E >W<'e9 5E MH:8+78e:8.1 5E e 5 78¦ 5 V+;3RW E8E e; 5 5 7aRWi; E +;+K E Y%R E :8T 5 ;$>e%:G7 5 ; 5)5 L>78; 5 7`;$ E +M'>S>T 5 C fZ5 7`+g$+W<M 5 V

A → B(a | b | c)BB → (de | λ)

:G>W 5E

ú-

n-

- g

-

-

n-

û

- a

-

_

-

= 5 :G3Y%RRW«e¯#7 5 :8RMK; 5 5 Wλ 5 ;$ E +7 E >W)7GJ+1.:8; 5 e 5 7U¦ 5 V 5 W 50Ç _++W 5%E

e 5 eLT 5 pX:G>7GW<'eMBC^û E8E <¦ 5 7GWiV E t+W 5E :8W0L]>W« 5 W 5 78+78 E +e%:U7`RWii7 5 ;$RS>T 5

Y%RJR$:G'M'._>b+;+K Ea5 P 5 eL E V 5 7`W<+ 5 ; 5<5 t+7U; 5 7[ ]C fZ5 7`+g$+W<M 5 V$78

A → B[abc]BB → (de | λ)

:G>W 5E

ú-

n

-

-

g

-

-

n-

Page 38: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& , !0/i

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

û

- a

-

_

-

? 5%E@5 L>78; 5 78 E ;$(78+t:GKS+T 5 5 ;+W E +7@78+7G E >e:U; 5%E 5 7@W<> 5 ;$ MKS 5E e 5 7U¦ 5 CfZ5 7`+g>W<M 5 V

A → B(a | b | c)∗BB → (de)+

5 ; E >7`7G>7G E >e%:8; 5 5 W 5

ú-

n

-

- g

-

-

n-

û-

a

-

_

-

ök+78+W 5 +e%:8T 5 5 W 5ÍÇ +äÍ78W<­:GK+#;zM''eR>WX++

Y%Ri;$ Ç e.W 5%E eL E >S>T 5e%:8+78 5 7F78+7G E >e:U;3 5 7`W<+ 5 ;RWî78¦ 5)E .e%:U­:GK 5 C

9ü!

- +M' EGE M' E :

-

L ¼ü -

MK E8E ;>M

- MK E8E M. E :

-

Page 39: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& ,q- !0/i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ£½"x)Ü\ÛB×*Ò¾<ÖØÜy¾V¿@ÐX++

q

L-

`&h&^iXi

-

ba7_[7S

- _ S_[7aci

-

ba7_[7S

-

MK E8E 5 ;$-

L'

-

- +M' EGE M. E :

-

17U;$NM-

-

5 e E :G78R :U;$>+M

-

W<:89 5 ;;$NM

-

Ì

-

&-

b[7S

- iSXd:b[X

- ba7_[7S

-

ba7_[7S

-

Ò

-

Ó

Ñ

-

Page 40: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& , !3% i

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

)&-

`\[:iSXd=`S\&d

-W<+:G9 5 ;$ 5 ;$

-

!#%$&-

b[7S

- iSXd:b[X

- ba7_[7S

-

Ò

-

Ó

-

baX_[7S

-W<:89 5 ;$ 5 ;$

-

!#%$

-

-7UW<M' E :

-

-E :U:G>W<+e%:

-

9!¼ü

-

b'[7S

- iSXd:b[7

- ba7_[7S

-

ba7_[7S

-

Ò

-

Ó

Ñ

-

Page 41: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& , !3L"i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ£½"x)Ü\ÛB×*Ò¾<ÖØÜy¾V¿@ÐX++

))!#c-

178;$NM-

- :G78. E :U:-

- 7G'e%: E :8:-

- 78>; E :8:-

- 78:8R78e E :U:-

- E Rt+7 E :U:-

- .¦ E :8:

- ¦ 5 7 E :8:

-

-E :8:GM' E :

-

Ì

- g7d_X^&ö

-

-

-

üG -

M.1M.R-

¢

-

M 5 g$78 E8E 5 e

- g$78 E8E 5 e

-

9 ü±cG

-

T7db[7S

-g$78 E8E 5 e

-

)-

d_=^=a

-

M'1M'R-

Page 42: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& / !3i

i

i

i

i

i

i

i

/ Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

*7 )-

d_S=7d=[

- +g$7G EGE 5 e

-

9 )

-

i=T_&d

-

-

78M' E :-

-

ü ý )

-

b

-

-g$78 E8E 5 e

-

-E :U:G>W<+e%:

- _7hi_

-E :U:8+W<+e%:

-

ý

-

7\d

-

- :87G' E :8:

-

- +g$7G EGE 5 e

-

- :87G' E :8:

-

-

E :U:G>W<+e%:-

)*Hü-

E :U:8+W<+e%:

- E :U:GM' E :

-

Page 43: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& /" !3%/i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ£½"x)Ü\ÛB×*Ò¾<ÖØÜy¾V¿@ÐX++

/"

55-

baX_[7S

-

Ò

-g$78 E8E 5 e

-

Ó

- ·

-

ba7_[7S

-

-

7GM. E :-

-

'8 9: üG

-

[_Y

-

ba7_[XS

-

-

7GM. E :-

-

b[XS

- iS=d:b[7

- baX_[7S

-

Ò

-

g$78 E8E 5 e-

Ó

-

8 9: üG

-

eRW<g$7

- >

- <

- >=

- <=

- ==

- ! =

-

eRW<g$7

-

Page 44: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& / !3i

i

i

i

i

i

i

i

/ Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

7!#8 9:

-

:G>7GW

-

ó

-

-

:G>7GW

-

!-

Re7Gg$7

-

- W

- ý

-

Re7Gg$7

-

7 89:

- ó

-

-

¦§: 5 7-

ý

-

b[7S:=`\[:iS^[7S

- iSXd:b[X:=`\[iS^[7S

- [XchXh

- M'1M'R

-

-+g7G EGE 5 e

-

-

Page 45: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿ= ~X= W7W ~ X ~X U XT^&_ X X i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ£½"x)Ü\ÛB×*Ò¾<ÖØÜy¾V¿@ÐX++

//

ü¼ü

-

g$78 E8E 5 e

Ñ

-

2.6 Semântica da linguagem X++

=»T 5 :8+e%:87G>W 5%E YRL>M' 5 787@RWi3; Ç eKS+T 5 ¦ 5 7GWiMP; E >W<®e%:GK+3;bM'.eR+WX++

5 E :8M E8E Re: 5 eT 5bE `7G E :87G'e 5%Ek5 $v*+:G'1 5%E ;$ E :G`M'.17 5 C fZ5 78]+WV 5 M'+.: 5 7Z¦§W<.M''7G'_>; 5 5 WM'RWi E M''eR>e E ;(7 5 7UWiS>T 5 ++7G:8W<>e:8 E +7U­3>_V 5 7`W<+ 5 ; E 'e:Ug$;$ Ç eK;V[;$#K;$+e%:G Ç >7 E :G78R$:8R78 E 5 e9>+'; E Y%R<:I>WÿW< E Wi E >Wi®e%:GK+äee 5%EGE M'.eR+WC·^M'Re E 5 e%: 5E@EG5 7G( E +Wi®e%:GK+3;bM'.eR+W˦ 5 7UW 5 78;; 5E eb+gM.K+S+T 5 ;

E R7UWi­:GK+e E >S>T 5 C LC¤ R$:G7 5E 5 e: 5E YRÍeT 5 ¦ 5 7UW´ 5 7U;; 5E zY%Rze>+ E pE H:UW ;$i E +M'7GN'W<+e%: 5äE >78T 5 :878:8; 5E +Wÿ+ â :8RM 5%E 5%E :8+78 5 7G E Vy 5 E/J W<>;$K;Y%R7 5 7GN;$.78W 5E eJ'W<M.>W<+e%:8S+T 5 ; 5 e 5E8E5 5 W<.MK; 5 7NVM'RWi E ;$>+ EGÈ E ;$».W<M'+W<+ep:8S+T 5 ;$>1>78T 50E +7a¦ +.:8 E 7U07GP:8.7ag:8W<>e:8 E +Wi®e:8'>0Y%R E ;$ E *v<:87G'R'7 JM'.eR+WC`· E8E 'WVLi7G¯7GK<'W)M.>W)>e%:8S>T 5 ; 5 5 W<'MK; 5 7`.7U­i E t+M'97» E >W<®e%:GK+;)M'.eR+WC

2.7 Um programa em X++

¤î7 5 7UWiä E +R.7b]zRWÿg$+W<M 5 ;$Í 5 W 5&E #R$:8.M'._NM'.eR+WX++

C?dM'Í'W)pM'+W<+e%:URWi&­7G1 5 78<;#R E +.e­7GK+RvU9I1i]#RWi&;:8CödW 5E 7G>1>W)>e%:Gg$M'K+7` 5 W 5 E8E J7 5 78W<b¦ 5 B'W<M'+W<+e%:8; 5 C

·\MK E8E bintree

])MK E8E JY%RJ.W<M'+W<+e%:U)<­7G1 5 78^'e­78'CZ?dM') 5E8E RyRW HeK 5 5 e E :G78R$: 5 70Y%Rä7GN+tz 5 W 5 L7U®W<:87 5 RW 5 $v*+: 5 ; 5 :G' 5

dataC fZ5E8E Ra'e;:G7I E

W<]: 5 ; 5E C¤î78'W)>.7 5 ] 5int start()

C? E8E ÍW)]+: 5 ; 5&E +7U­ 5 70 5 e1>eS+T 55 5 e%: 5 ;$+e%:878;<;$3Y%RMKY%R+7»7 5 7UWi)+W

X++V 5 R E vV 5 W)]+: 5 ; 5 7G'e'MCF?dM' EG5 M''+H:Ui 5

R E R­78 5 ; 5 7 5 7UWiY%R;$'.:G 5 e_>^:87G'MK E ;$(e=HW)>7 5%E 'e%:G>.7 5E Y%R(7G>7G E >e%:8W RW;$KVdRW W"I E zRW e 5 C 465 W E8E E .e%:G>.7 5E 78KW)p E 5 $v*: 5E ; 5 :G' 5

dataY%R E T 5

'e E >7GK; 5%E e)­781 5 7G`.e­7GKb 5 7aW<+ 5 ; 5 W<]+: 5 ; 5insert

;$ E :80MK E8E bintree

Ck= 50Ç eMXV5 W<]: 5 ; 5

treeprint]bU9Wi; 5 L7U3'W)7G'W<.7^i­7G1 5 78 78K;C

· MK E8E data

:8+W :87I E 17GK­I1> E YR 78+78 E +e%:UW RW;$KVRWW"I E (RWîe 5 CZû 5 E 5 e E :G78R$: 5 7G EE T 5ä5%E 78 E 5 e E ­I1+ E L>M'+7GKS>T 5 ; 5%E5 $v*+: 5%E ;$ E8E MK E8E Cz= 5 :G+p E #Y%Re>e9RWi,1>7G Ç +S+T 5 ]¦ +.:8¬Y%Re%: 5J 1M.K;;&;à;:8àY%R& E :8­ E +e; 5 78';C¤W<]: 5 ; 5

compara;$ E8E MK E8E » 5 W<78J; 5 E@5 $v*+: 5E ; 5 :8. 5

data^]^R E ; 5 e 5 W<]+: 5 ; 5

insert;äMK E8E

bintree7UÍ>e 5 e%:G7U7 5 MK; 5 0;­781 5 78b>W Y%R<RW ;$+:G>7GW<'e; 5

+M'+W<>e: 5 ;$+1 E +7`'e E +78'; 5 C

Page 46: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿ= ~X= W7W ~ X ~X U XT^&_ X i

i

i

i

i

i

i

i

/ Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

W X=XXXX=XXXX=XX===X&XX===X&XX===X&XX===X&XX===X iXi_TXd\&Xd^f:^£bfTh=_f:_[XS^f^&d=]\&d_a7_gXiX`^gb[d:b^XX=XXXX=XXXX=XX===X&XX===X&XX===X&XX===X&XX===XX W`&h=^iXigb[7S=d_X_W aX_=b[_¤\[a7^&dX]\d_Êgb[d:b^ W

`&h=^iXia7^&S^WXW¤a7_=b[_Êfù`h=^iXi_¤^[b[XQ^&a7^a7\¤S:bT\¤a7^S^ ab^ËÑ"f_i³Ñ^[\ b[7Sab^ËÑ#f:_i³Ñ^[\ `\[iSXd=:`S\&d ' WXW£`\[:iSXd=XS\&d Ñði_f¦T^df:_&S=d\i

^[\¢ XXË WXW¡b[:b=`7b^7hb7^_f W W X=f:_i¢ ab^¢ Ì`\[iSXd=:`S\&d b'[7SaOÑb'[7SÊfKÑb'[7S£^ W=W`\[:iSXd=XS\&d ~ Êab^ËÑ#fi_£^[\¡`\f:\ WXWÊT^&df:_&SXd\i

ab^¢a f:_i¢Êf ^[\¢£^ Ìb[7S¦`\fT^&d^ a7^&S^ WXW¡`\fT^d^a&^iÊa7^S^i WXWd_&S\&d&[^õ f:_[\&d f^cb\&d b=^7h

b ^[\¡õ Z6^[\ S=Q_[£d7_&S=7d=[¼ b ^[\ Z6^[\ S=Q_[£d7_&S=7d=[ :b f_iõ ZGf_i S=Q_[£d7_&S=7d=[¼ b f_i ZGf_i S=Q_[£d7_&S=7d=[ :b acb^¡õ Z3acb^ S=Q_[£d7_&S=7d=[¼ b acb^ Z3acb^ S=Q_[£d7_&S=7d=[ :d_&S&7d=[ ËÌ

ÌWXWcb[^7h`&h&^iXi_a7^S^

WXW]^&d:b&]_cb=i a7^`&h=^iXi_Êgb[7SXd7_X_a7^&S7^¤ö7_ e WXW`Q^&]_a7_`\fT^&d^X\gb[XSXd_X_¤h&_==SeÑ6db=Q7S WXWd_=7_&d[:`7b^T^&d^\ibhQ\i`\[iSXd=:`S\&d aX^&S^

ö_ ¢ eh=_=&S£¢[XchXh

Page 47: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿ= ~X= W7W ~ X ~X U XT^&_ X i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ£½"x)Ü\ÛB×*Ò¾<ÖØÜy¾V¿@ÐX++

/o

d:b&Q7S¢[XhXh Ìb[7S¼b[i_&dXS a7^&S^ö W=W^=acb=`7b\[^f¼_7h=_f_[7S\Ê[^&d=]\&d_b[7S e

¢ö«Z`\fT^&d7^ ö_ b õ S=Q_[

b h=_==S3¢[XhXh S=Q_[d_&S&7d=[¡h=_=&S«Z b[:i_&dXS ö h=_==S¢¤[_Ygb[7S=d_X_ ö d_&S=Xd=[ Ì

b S=Q_[

b d:b=QXS 3¢[=chXh S=Q_[d_&S&7d=[d:b&Q7S«Z b[i_&dXS ö d:b=QXS£¢¤[_Ygb'[7SXd_X_ ö d_&S=Xd=[ Ì

d_&S&7d=[ ËÌ

b[7SSXd7_X_T7d:b'[7S b[XS WXWbfT7dbf:_^!&dX]\d_b[7S¼b

b h=_=&S" ¢[XhXh S=Q_[ôbÊ¢¦h=_&=S«Z SXd7_X_T7d:b'[7S ó 7\&d bÊ¢ | bõ O bÊ¢ôbÊó T7d:b[XS T7d:b'[7Sö_ Z3acb^=ó W óö_ Z%f:_ió W óö7_ Z6^[\ó # [ b d:b&Q7S 3¢¤[XchXh S=Q_[ôbÊ¢£d:b=Q7S«Z S=d_X_T7db[7S ó Ì

b[7S¦iS7^&dXS 'gb[XSXd_X_ÊS b[7S¼b­ÑaOѶfKÑ^ a7^&S7^Y

T7d:b'[7S %$ b:bS_¤\acb^eU d_X^&aa

Page 48: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& / !3%i

i

i

i

i

i

i

i

/ Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

T7d:b'[7S %$ b:bS_¤\Êf_i|U d_X^&aÊf T7d:b'[7S %$ b:bS_¤\£^[\eU d_X^&a£^ Y¦¢¤[_Y£a7^S^ aOÑ"fVѯ^ S¢¤[_Ygb'[7SXd_X_ Y 7\&d bÊ¢ | bõ Ë b¢¼bó T7d:b[XS &$ b:bS7_\£ab^eU d_X^=aa T7d:b[XS &$ b:bS7_\f:_i|U d_X^=af T7d:b[XS &$ b:bS7_\¡^[\eU d_X^=a^ Y¢[_Y£a7^&S7^ aOÑ"fKÑ^ b S«Z b[i_&dXS Y ¢X¢

S=Q_[T7d:b'[7S h=_f:_[7S\©X^£_ b=iS_ # [ Ìb¢S«Z S=d_X_T7db[7S d_&S&7d=[ ËÌ

Ì

Page 49: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& /%q- !3%i

i

i

i

i

i

i

i

Capítulo 3Análise Léxica=^ E :8+ â :8RM 5 1+78+W 5E 5 W 5 5 e E :G78R.7 5 eLM' E ; 5 73M']g$K 5 ù§· AØú07U-M''eR>WX++

C 465 W 5 1'W 5E VJ:U78¦§; 5 eM' E ; 5 7kM']g$K 5 ]»Y%R>7U7@>e%:G7U; u)Y%RV>WË+7UMXV E :8­<7GWi_>+e;0e%RW«78Y%R'1 5 :G+g%: 5 e 5 78WiMtu#+W Eâ W3 5 M 5E Y%RJ¦§S+W E +e%:GK; 5 7U<;$ Ç eKS+T 5 ;äM'.eR+WæiL7U 5 eLM' E ; 5 7 E 'e%:8­:8' 5 C f 7UÍK;$>e:8 Ç +78W 5E Y%R EE T 5 E8E EJEâ W3 5 M 5E VB E :U 5 M.9L78W 5%E e;$ Ç e'S>T 5 ;äM.'eRL>W u E Rä78W<­:GK+ 5 R7U¦ 5E .e%:8­:GK 5 uà';+e%:G Ç +7GW 5%E Y%R EiE T 55%EiE >R EiEâ W3 5 M 5E :8+78W<.e E Cñ= 5 5 e%:G+g%: 5 ;eL­M' E M']g$K+V 5E :GRW<W 5E U9W<7a E8E EFEGâ W3 5 M 5E ;$J: 5 º>e E C= 5 :G&Y%R 5%EiEâ W3 5 M 5E eT 5 :G+78W<.eL E 5 W) È +W 5 MH¦§L+: 5àEG5 78 5 Y%RM^e 5%EGE

M'.eR+W]0;$ Ç e';C fZ5 7 5 R$:87 5 MK; 5 V E8E bM.¦§t: 5 eL;<Wi E ]bY%RbRW« 5 ev*Re%: 5 ;$EGâ W0 5 M 5%E V 5 7d E8EG5 V 5 ;$ E +7@; Ç eK; 5 5 W 5 RWiJM'.eR+WV EG5 7GaRW 5 R$:87 5 MH¦§L+: 5 C= 5 > EG5 V E8E JM.¦§t: 5iE >78­)Y%RMKY%R+7`+78 :8+78 · m 4 ll YR( 5E8E E +7^7GWi_>+e; 5 eRW7UY%R'1 5 :Gg: 5 C? E8E iM''eR>WäV¦ 5 78W<;)L>M 5%E eT 5 pX:G+78W<.eL E V]V>Wî>78MVL>W¨Wi E^E .W<M' E Y%R

M'.eR+W)pwM'1 5 ; 5 5 W<.MK; 5 7d 5 E eT 5 .eLM'R E :87GR$:8R7U E 5 W<M'g E 5 W 5 5 Wie; 5%Ee.e9L; 5 5 R3L78 E ; EGâ W0 5 M 5%E > E ; 5%E 5 W 5 7I>e%:G E E V 5 M'U9+:G EÌ5 R0U9I1 E C f[5 7Z E8E5 V 5 ;+W 5E R:G'M.'_>7dRW W 5 ;$>M 5 Wi EdE 'W)M. E 78(78+78 E +e%:87[:8 E M'.eR+e E V%U9Wi; E;$äM.'eR+e E 7G>RMK78 E C-=» E :G+ â :8RM 5 '7G>W 5%E 78+1+7 5E 5 eL+.: 5%E0EG5 7GÍR$:GÆWi: 5%EÇ e.: 5%E 6g$78 E8EÈ E 78+RM'7G E VNYR E T 5 ;R E ¦ 5 78Wi E ;@78+78 E +e%:87BM'.eR+e E 7G>RMK78 E C

3.1 Autômatos finitos½^W¨R$:8ÆWi: 53Ç eH: 5 ;$+:G>7GW<'e â'E :GK 5 ù§· jZû(úa](RWW 5 ;$>M 5 7U);$ Ç e'S>T 5 ;(M''eR>e E78+RM'7G E 5 W< 5%E : 5 ;$b'e 5 >M.>W)>e%: 5E

〈Σ, S, s0, δ, F 〉V 5 e;$

Σ] 5 M.¦§t: 5iE5 7G 5 Y%RMB)M'.eR+Wî]J; Ç eK;m

S]RW¨ 5 ev*Re%: 5)Ç eH: 5 eT 5 1_+ 5 ;$ E :8; 5E m

s0

] 5 E :U; 5 'e'+'MVs0 ∈ S

mδ]b0¦ ReS>T 5 ;$J:878e E KS+T 5 ;( E :U; 5%E V

δ : S × Σ → Sm

/%q

Page 50: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& / !)o i

i

i

i

i

i

i

i

/ Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

'('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('(''('('('('('('('('('('('('('('('('('('('('('('('

)()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()())()()()()()()()()()()()()()()()()()()()()()()*(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(**(*(*(*(*(*(*(*(*

+(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(++(+(+(+(+(+(+(+ Aceita

Não Aceita

a b a c d

Estados

Finito deControle

c

b

jØ'R78)/C'" uiö E T 5 ;$RW¨·»jZû 5 W 5 RWi)W<­Y%R.eLC

F] 5 5 ev*Re%: 5 ;$ E :U; 5%E6Ç e E V

F ⊆ SC

½^W ·»jZûÊ 5 ;$ E [email protected]%:G>7G7G+:8; 5 5 W 5 RWi»Wi­Y%R'e;$^78> 5 e9N>7d+;+K E UV 5 W 5iW 5E :G7U;<e Ç R78i/C."C`?dM'b7GN>L3 5 W 5 >e:878;<RWi#>;$>'i0;$._ E 3+MKiL>7:8+e+5 RÍeT 5lJ M'.eR+W ;$ E v;C f 7U¦§_+>76 EGEG5 V% E8E Wi­Y%R'eb 5E8E RtRW 5 e%:87 5 M. Ç eH: 5;$ E :U; 5%E ù 4 j[?6úaRW« 5 ev*Re%: 5 ;$ E :8; 5E

SC6¤ 4 j[?ò 5 M 5 + E >W<7G<Wi­Y%R'e)+W

RW E :U; 5 t+7G:G+eL+e%:8< 5 5 ev*Re: 5SC0·Ë¦ ReS>T 5

δ;$'_i 5 W 5z5 · jZû;$+10W0R;7J;

E :8; 5 V J W<>;$K;bY%R E M':878 E ;b>;$>';^+e%:G7U;J1IT 53E +e; 5 eM. E ; E CÌ· 5Ç eMt;+;$+KV E8E5 ]V;$+ 5 E ;$^eM' E 7ØRWiJ 5 7kRWiV: 5 ; E E M':878 E ;J+e%:G7U;»`78>M.'_>7Z EW3RL;eS> E ;$3 E :U; 5%E ;$:8+78W<.e; E V 5 ·»jZû++.:8##>;$>'<uä++e;$>e; 5#5 .eL;$'>; 5 7E RL>7G 5 7 e 5 'e+MÌu E 5 E :8; 5 >W YR3+M' E 0+e 5 e%:G7Uit+7G:G+eL< 5ÍE RP 5 ev*Re%: 5

FC

4 EG5 5 e%:878­7G 5 V%)>;$>'0]J7Gv*+.:8;u#++e;+e; 5 0M.R_('e$¦ >7G 5 7`; 5 .e>MtutV'e;$K+eL; 5Y%RJeT 5 t+7G:G>e J M'.eR+W;$ Ç eK;<t+M 5 ·»jZû3CödW 5E : 5 Wi7Ì 5 W 5 +g>W<M 5`5 · jZû

A1

YRk7GN 5 e9>+ZaM''eR>W ´ x ∈ 0, 1, 2, 3, 4,5, 6, 7, 8, 9∗ |

g 78+78 E +e%:8FRWêeXHW<+7 5 ;$>+.WiM;$.1 Eâ 1>M 5 7Ì/µCA1 = 〈0, 1, 2, 3, 4, 5, 6,

7, 8, 9, s0, s1, s2, s0, δ, s0〉V 5 eL;$

δ]

Page 51: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& / !)o"i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ-,"x)Ü Ò»ð»ÛÌ×ÓX¿ñÛ/.10»×+ÎZÜ /

δ(s0, 0) = s0

δ(s0, 1) = s1

δ(s0, 2) = s2

δ(s0, 3) = s0

δ(s0, 4) = s1

δ(s0, 5) = s2

δ(s0, 6) = s0

δ(s0, 7) = s1

δ(s0, 8) = s2

δ(s0, 9) = s0

δ(s1, 0) = s1

δ(s1, 1) = s2

δ(s1, 2) = s0

δ(s1, 3) = s1

δ(s1, 4) = s2

δ(s1, 5) = s0

δ(s1, 6) = s1

δ(s1, 7) = s2

δ(s1, 8) = s0

δ(s1, 9) = s1

δ(s2, 0) = s2

δ(s2, 1) = s0

δ(s2, 2) = s1

δ(s2, 3) = s2

δ(s2, 4) = s0

δ(s2, 5) = s1

δ(s2, 6) = s2

δ(s2, 7) = s0

δ(s2, 8) = s1

δ(s2, 9) = s2

· E8E 'WV@ 5 7)g$+W<M 5 V6YRLe; 5 g$NR$:U; 5 5 W 5E :87G'e ">%oV 5 ·»jZûA1

:8+78' 5E +R.e%:G 5 W< 5 7:UW<+e%: 5

? E :8; 5 5 7878+e%:G AÌ:878)M''; f 7G¯Ig$'W 5 E :U; 5s0

ù§ E :8; 5 .eKKM ú s0

s0

"s1

s1

s2

s2

os1

s1

s0 ∈ F

465 W 55 · jZû :G>7GW<'e E R-g$NRS>T 5 e 5 E :8; 5s0

Y%RL>7:8+e+ 5 5 ev*Re: 5 ;$ E :8; 5EbÇ e E Vd+e%:UT 5 EGE >;$>'&L>7:8+e+ J M.'eRL>W ;$ Ç e';- 5 7

A1

Cà°%­L7U+;$+Kiq"NV:8+7 â W 5E

? E :8; 5 5 7878+e%:G AÌ:878)M''; f 7G¯Ig$'W 5 E :U; 5s0

ù§ E :8; 5 .eKKM ú qs1

s1

s1

s1

s1

s1

"s2

s2

s1 /∈ F

5 Y%RJ.e;'>)Y%RJ:UMB>;$>')eT 5 t+7G:G>e J M'.eR+W; Ç eK;< 5 7A1

C½^W ·»jZû\ 5 ;$ E >7`7G>78 E +e%:8; 5 5 7^W<> 5 ;$RWi0:8L>M'i; :878e E 'S>T 5 ;$ E :8; 5E C

=^ EGE -:8L>M'g$ E :8RWiM.'e978>;- E :8; 5 RWi, 5 M'Re78+;M.+:G7U; 5M.¦§t: 5 ; >e:878;CZû(; 5%E65 E :8; 5

sJ0M.+:G7U

a ∈ ΣV$ 5 M 5 +p E ^e0 5E 'S>T 5 ;b:Ut+MK

s × a5 1M 5 7`;$

δ(s, a)C f[5 7`g$+W<M 5 V$L7U

A1

V$:G>7 â W 5%E

δ 0 1 2 3 4 5 6 7 8 9s0 s0 s1 s2 s0 s1 s2 s0 s1 s2 s0

s1 s1 s2 s0 s1 s2 s0 s1 s2 s0 s1

s2 s2 s0 s1 s2 s0 s1 s2 s0 s1 s2

½^Wi; E 1Ie%:8+e E ;$ E `R$:8.M'._N7kRW ·»jZûò78J;$ Ç e'7dY%R EkE T 5J5E : 5 º>e E E >7G>W78> 5 e9NK; 5E L>M 5 · Az]`Y%RF]F¦§­'M$'W)M.>W)>e%:87ZRWË·»Aä E >; 5 e^:Ut+MKJ;$F:G7Ue E 'S>T 5;$^ E :U; 5%E C D MLeM' E ; 5 7k;$+1^t+e E M'+7dRW<bM.+:G7U;J+e%:G7U;JVL E >; 5 e(:8L>M'V¦§_>+7zW3R;eS+ä;$< E :8; 5 C m 5 E :U; 5 +W Y%R 5 ·»jZû E 0>e 5 e:8787»¦ 5 7JRW E :8; 5

Page 52: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& !)oi

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

Ç eMVZ>e:UT 5 &+;+KM.K;-:G]zY%R+M'# 5 e%: 5 ]#RWÿ: 5 º>e,1I­M.K; 5 C&·^e%:G E ;#:G7U:U78W 5E;$bWi E ;:8M.9 E^EG5 78 E8E J:G' 5 ;b·»A,1*vW 5%E RWi 5 R$:878)¦ 5 7GWi<;$b78+7G E >e:U7aRW·»jZûY%R] 5 ;$K78Wi3;$J:878e E KS+T 5 ;( E :U; 5%E C? E8E Í;'7UWiÍ]iRW 78¦ 5 ;$'78> 5 eL; 5 Rv 5E 1]+7G:GK E VB78+78 E +e%:U; 5%E 5 70 â 78+RM 5%E

5 7G78 E 5 e;$>W« 5E E :8; 5E ; 5 · j[û <Rv E 7G E :U E 5 7878 E 5 e;$+W JE :G7Ue E KS È E +e%:G78 E :8; 5E C fZ5 7ag$+W<M 5 VL3:878e E 'S>T 5

δ(s0, 1) = s1

]78+78 E +e%:U;3 5 7>

S 0 S1

1

= 5 + E5 +W Y%R0:G>W 5E ;$'1+7 E E :G7Ue E 'S È E ;$ Ç e'; E +e%:G78<; 5 E E :8; 5E Vt 5 ;$+W 5%E78+78 E +e%:8­pXMK E : 5 ; E 5 WîRW<"He'> E :8V7 5 :GRM';< 5 W¨: 5 ; E E M.+:G7U E E8EG5 +'; EKJE:G7Ue E KS È E C f[5 7`g$+W<M 5 V E J:G>W 5E

δ(s0, 1) = δ(s0, 4) = δ(s0, 7) = s1

V$78+78 E +e%:UW 5E

S 0 S1

1,4,7

j ­RW<b7G>7G E >e%:8S>T 5 E LNKML7U(.e;'>7 5 E :U; 5 'eKKMXCZO,RWi E +:8U9>e; 5 5 E :U; 5 V E +W e+e9RWþ E :8; 5 ; 5 78.+WCʤ E E :8; 5E0Ç e E#E T 5 K;$+e%:G Ç >; 5%E 5 7 â 7URM 5E ;$RM 5%E C6¤;$'7UWi07U 5 · j[û

A1

];; 5 e Ç R7U</Cª

0 S1S

1,4,7

2S

0,3,6,9 0,3,6,9

2,5,8

0,3,6,9

2,5,8

2,5,8

1,4,71,4,7

j['R7U0/C buÍû '7UWi0;J:G7Ue E 'S>T 5 ;$J E :8; 5 7UA1

C

f 7UzR:G'M.'_>7bRW · jZûî 5 W 5 · Aò1W 5E ¦§7G>W 5E M'RW< E LNYR+e E W 5 ; Ç >S È Ee 5 5 W< 5 7:UW<+e%: 5 ;$ EGE E R:GÆWi: 5E CZ· 7G'W<+'780]Y%R1W 5E t+78W).:G'7^Y%R0¦ ReS+T 5;$0:G7Ue E KS+T 5zE vÍRWiͦ ReS>T 5 7UKMXV 5 R E *vVPeT 5 ;$ Ç e';Í78#: 5 ; 5%E»5%E 5 e%: 5E ; 5; 5 W â e 5

S × ΣC fZ5 7^g$+W<M 5 VL1W 5E : 5 Wi7 5 ·»jZû

A2

Y%R3]b.RMØA1

VWi E 7U 5Y%RM 5 1M 5 7»;$

δ(s0, 0)]3'e;$ Ç eK; 5 C D +7 â W 5E V+e%:8T 5 VL7U< E8E 3· jZû 5 ;$K78Wi);

Ç R780/C /C[? E8E JR$:8ÆWi: 5 78> 5 e9N`: 5 ; E E +;$+K E Y%R»78+7G E >e:UWWnHMH:8.M 5E ;$J/

Page 53: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& " !)o/i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ-,"x)Ü Ò»ð»ÛÌ×ÓX¿ñÛ/.10»×+ÎZÜ "

0 S1S

1,4,7

2S

3,6,9 0,3,6,9

2,5,8

0,3,6,9

2,5,8

2,5,8

1,4,71,4,7

j['R7U0/C /3uÍû '7UWi0;J:G7Ue E 'S>T 5 ;$J E :8; 5 7UA2

C

W<+e 5%E M'RW< E Y%R:I+W 5 ;$'.: 5 # 5 W 5 % CF· 5 7 5 E8E 7F:8MØ+;$+KV 5 5 W) 5 7G:8pW<+e%: 5 ;$

A2

E >7GK

? E :8; 5 5 7878+e%:G AÌ:878)M''; f 7G¯Ig$'W 5 E :U; 5s0

ù§ E :8; 5 .eKKM ú s2

s2

s0

s0

l EGEG5E 'e Ç >zY%R 5 ·»jZû­7Uäe%:G E ;$iU9>7( 5ÍÇ eLMk;+;$+KC3= 5 e 5E8E5 ·»A@V

5 ·»jZû 7 5 E8E Íä+;+Kz;$<>e:878;ä:G]<Y%R<eT 5 g$ E :UWæWi E :G7Ue E KS È E 5E8Eâ 1> E V+e%:UT 5 >M.^L­7UC m 5 HMH:8.W 5 E :U; 5 +W Y%R 5 · jZûÊ E :UI1I3YRLe; 5 7 5 R)¦ 5 7FRW E :8; 5Ç eMV$>e%:8T 5 RWî: 5 º+eä1­M''; 5 ¦ 5 BM''; 5 C 4 EG5 5 e%:G7U­78 5 V%RWî>7G7 5 M']g$K 5<5 5 7G78+RBC

D 5 Wi78+W 5E 5 W 5 +g$+W<M 5 RW· AÍY%R6;+167GN 5 e9>++7[t+e E :G7I E :G' 5E ;$@: 5 º+e E eXHW<+7 5E 'e%:G>.7 5E mK;$+e%:8 Ç >; 5 7G E V¦ 5 78W<; 5E 5 7^M.+:G7U E ); â .: 5E V E +W<78'e'+'; 5E 5 7RWiM':G7Um»MKI178-7G E >7G1;btC fZ5 ;$>W 5%E 5 e E :87GR.7 5 · j[û

A3

W 5%E :878; 5 eÇ R78)/C Cök*v#Y%R 5 ·»jZûË; Ç R7U</C # 5 e E5 W<J: 5 ; 5E^5E 7Ue 5E ( 5 W 5 E LS 5 V$:8BV+:8V

e 5 E :U; 5 "C[û + 5 E V%;$+t+eL;$+e; 5 ;$»Y%RM]»JM':G7U E +R.e%:GV>M.^;$ E 1KJ7U 5E E :U; 5%E$VP/ 5 R#78#7GN 5 e9>++7NV78 E LN :G'1W<+e%:8VtRWæeXHW<+7 5 VPiMKI178pb 5 R 5 e 5 W<);$RW K;$+e%:G Ç >; 5 7>C^[email protected]+e%:8T 5 5 e:8.eRVt 5 e E RW<'e; 5 M':878 E :8]0Y%R0e+e9RWi#:G7Ue E 'S>T 5g$ E :UC32 ReL; 5 E8E5ä5 5 7G78VyRW : 5 º+e&¦ 5 dK;$>e:8 Ç +; 5E 5 E :8; 5 >W Y%Ri+M'<7 5 R] Ç eMXC½^Wæ+787 5 M.]+g$' 5 ¦ 5 kU9; 5zE 5 E :8; 5 eLT 5 ] Ç eMC fZ5 7G:8e: 5 VP+;#1+_0Y%R 5·»A]Jg$NR$:U; 5 V%RWe 5 1 5 : 5 º+eä](7GN 5 e9>+'; 5 CZOÑ+g$:8W)>e%:GJ E8E 'WY%R 5 eM' E ; 5 7E .e%:8­:GK 5 R$:8.M'._N 5 ·»AdCL·\+;01+_Y%R 5 · m eN E8E H:U);RW: 5 º>eBV$+M'g$NR$:U 5 · AY%ReM. E 0<>e:878;0(M'9J¦ 5 7GeNJRWî: 5 º+eäe 5 1 5 C½^Wi#; E +78 :G>7 âKE :GK+ E ; 5 · jZû

A3

]0YR+M'.7U­)7GN 5 e9>++7` 5 W 5 : 5 º+e<W< 5 7M'I17U0Y%R>M.RL;$+7`¦ 5 7GWi7^ 5 W« E M':878 E ;<+e%:878;C fZ5 7`g$+W<M 5 V E J:G'1>7GW 5%E e+e%:878;

bÊ ~X

Page 54: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& % !)oi

i

i

i

i

i

i

i

% Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

1

i f

letra - i

2

3 4

5

branco

letra, dígito

letra - f, dígito

dígito

dígito

letra, dígito

j['R7U0/C 0uÍû '7UWi0;J:G7Ue E 'S>T 5 ;$J E :8; 5 7UA3

C

5 ·»jZû'7U­078: 5 78e7Fe E R)78.W<+'7U0+g$>RLS+T 5)5 ';+e%:G Ç +; 5 7ybV$e E +Re;V 5 ';$>e%:G.pÇ >; 5 7V#Ve0:8+7U+'7UV 5 eXHW<+7 5 ~X C m )+e%:878;0¦ 5 7

b ~=)78.W<+'7U)U9LWi;)'78­)78: 5 78e7`)MKI178078 E +781I;(b#V;$> 5 E V 5 eXHW<+7 5 0 ·4&5 C6?E J)>e:878;0¦ 5 7

b ~=:G>7G>W 5E 5 W 5 : 5 º>ez78: 5 78e; 505 K;$+e%:G Ç >; 5 7¨b ~X6 C

½^W 5 R$:G7 5 5 e%: 5 'W< 5 7:Ue%:G»; E8E 'W<M'+W<+e%:8S+T 5 ; 5 · A]»Y%RV>W 1'7:8R;$(;$ E Rg$NRS>T 5 7U7kY%ReL; 5 eT 5 g$ E :8+WËW< E :878e E 'S È E VM.RWi E M'I17U E ;(+e%:G7U; eLT 578>+ E W E +7 E >7U; E 5 7J E S 5%E 78zY%R E *vW 5 7G78:UW<+e%:G07GN 5 e9>+'; E C f[5 7g$>W)M 5 V E (:G'1>7GW 5%E 0>e%:G7U;

~X b ~X'7G>W 5%E^5 $:G>7 eÍ78.W<+'7Uig$>+RS+T 5 ; 5 ·»A 5 .e%:8+'7 5 "N/iVPeRWi E +Re;i+g$>RLS+T 5 V5 ';+e%:G Ç +; 5 7yb ~X6 Cf 7Uä 5 W<M':U78W 5%E»5 e 5%EGEG5 ·»AQ E N; 5 eRW ·»jZû0VÌ78>+ E W 5%E .e;ä EGEG5 K7J

+;e¯-YRLM 5 :G' 5 ;$i: 5 º+e¬ EGEG5 K; 5 >M.C fZ5 70g$+W<M 5 VZe 5 ·»jZûA3

V E L>W 5%EY%R E E Rg$>+RS+T 5 :8+78W<.ee 5 E :U; 5 $V6RW eXHW<>7 5 ¦ 5 `78> 5 e9>K; 5 m E ä:G>7GW<'ee 5%E E :8; 5E / 5 RàoVÌRWÿ';+e%:G Ç +; 5 7J¦ 5 d78> 5 e9NK; 5 mØ E ):8+78W)'ee 5 E :U; 5 LVÌRWü ý¦ 5 k78> 5 e9>K; 5 Cb·^M']+W ;$ E8E5 Vy7GN E W 5E(E L>7 Wi E M'RWi E 'e$¦ 5 7GWiS È E(E5 7G)M'I17UYR^¦ +_J 5 W YR»:UML: 5 º+ei¦ 5%EGE ^78> 5 e9NK; 5 C f 78.eL'M'W<+e%:G(+W : 5 º>e E 5 W 5K;$+e%:G Ç >; 5 7G E <eXHW<+7 5E Vy78>+ E W 5E(E t+7bY%RM[¦ 5 dzLMKI1%7UÍY%R 5 7G''e 5 R 5 : 5 º+eù 5 7J+g>W<M 5 V E )ä+;$+KÍ]ä"> 5 RÑ"> ú CJ?ê78> E W 5E(E L>7(:8W0L]>W Y%RMk]<M 5 >M'._NS>T 5 ; 5 : 5 º+eBV 5 7kg$+W<M 5 V+W YRL E M.'e9J^ 5 M'ReJ; 5 7UY%R'1 5 ;$`+e%:G7U; EGE M'I17U E )+eL 5 e%:878C? EGE z.e$¦ 5 7GWiS+T 5 ]"H$:G'Mk7UÍY%R 5 · m 5%EGE Í'e;$K+7^u+W + EG5;$>7G7 5 V 5 7`g$>W)M 5 u 5 5 e: 5<5 e;$ E :U­<0LMKI1%7UC

Page 55: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& / !)ooi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ-,"x)Ü Ò»ð»ÛÌ×ÓX¿ñÛ/.10»×+ÎZÜ /

· E8E 'WV78^ 5 e E :G78R'7ÌRW· AÍL E >; 5 e 5 ·»jZûA3

V;$+1+7 â W 5%E 5 e E :G78R'7Ø E +R'e:8:8L>M'V 5 eL;$7G>78 E +e%:8W 5%E t+e E E :878e E 'S È E 1­M''; E C6?dW YRLMKYR+7` E :8; 5 V E J¦ 5 7M'';)e)>e:878;bRW<)M':878)78)Y%RMPeT 5 +g E :80:G7Ue E KS+T 5 V% 5 e E K;$+7Up E ( 5 W 5 78¯Ig$.W 5 E :8; 5 RW1M 5 7[eT 5 g$ E :8+e%:GV 5 W 5 V 5 7Z+g>W<M 5 C[·HM.:G'WiJ 5 M'Re ; :8L>M' .eL;$'>5 :G' 5 ; 5 : 5 º+e E8E5 K; 5 5 E :U; 5 C

? E :U; 5 AÌ:G7UZ78¯Ig$.W 5 E :8; 5 D ' 5" 78e 5 ." ;$'.: 5 X / M.+:G7Up ´ *µªo ?@c^c^¤ ;$'.: 5 =87»s?@c^¤/ ¦* M':878 o ;$.H: 5 ªo l û»?@= D M':878 o ;$'.: 5 o l jo M':878 o ;$'.: 5 o l û»?@= D

? 5 7 5 7UWibL7U3+gNR$:U­prM 5<E +78')7GNK; 5 5 W 5 W 5E :G7U; 5 e 5 7 5 7UWib/C'"C

9:;%<:=?>=A@CBEDF G&HI%J = HK ;ML G&NPO := H LQ;ARRSLT=Q:U>=QV G&H =A=XW6Y K6Z >=MY GQK :=AY Z&[ =\ ] Y GZ =ML RR Z < H ;%:= O := H L%;^_ ] ^ G LT``Pa Z > [G Y ZbHN =SRRALQ; HK :;YQ=SY ZbHN = G LQ;Y JQH =cLQ;%:: G&HKG ^d ] ] LQ;QY JH =A`cDe ] ] Y Z?HN =A`SY ZbHN =SfDg ] ^ G&H =;h ] ] LQ;QY JH =A`SLQ;Y JH =AfDi j `D RR G ^ K = [ ; ZbHZ L Z =Yk ^P`mll RRon=YQ=Qp:=MY Z&[ =Frq Y ZbHN =QsA`SY ZbHQN = RRtY ZbHN =M; H[G ^ GSZbHZ L Z =M; K ; jG&HFuF LQ;Y JH =sA`ALQ;QY JH = RRSL%;Y JH =M; H[G ^ GAZbHZ L Z =A; K ; jG&HFr\ J ` j RR Z?HZ L Z =Y Z V=tWY KZ >; G ^ K = [ ;tp Z ^ Z&K = [ ;Fr_ j `Xn:;%v Z >; G ^ K = [ ;wRRUn:x&v Z >; G ^ K = [ ; H = K = O6G YQ=y [G =LQ;%: [ ;MLQ;?>zLF|d G&HI%J = HK ; j sFre ] ^Tf`AL RRSL%; H L%= KG&H =LT~on6=YQ=QpQ:=Frg ] Y GZ =ML RRSYQon:x%v Z >=MY GQK := [ = G&HK := [ =Fh ] ^ G LT``Pa Z > [G Y ZbHN =Fri ] ] LQ;QY JH =A`cDFrk ] ] Y Z?HN =A`SY ZbHN =SfD\uq ] ^ G&H =;\F ] ] LQ;QY JH =A`SLQ;Y JH =AfD\u\ ] J ` j RRoW6Y K6Z >; G ^ K = [ ;Tp Z ^ Z&K = [ ;\u_ ] j `Xn:;&v Z >; G ^ K = [ ;RQRon:x&v Z >; G ^ K = [ ;y [G =LQ;&: [ ;MLQ;?>L\d ^ GtK = OG YQ=/ J B; jG&H ````PQ6 RQR JtH6 ;t G ^ K = [ ;ta Z?H =Y\ue ] :Q:;T G v Z LQ; RR K := K =b> G&HK ; [GtG ::;SY%Qv Z LQ;\ug ^ G&H =;\h ] K B K6Z n;S` K = O6G Y%=/ j Br; j6G&H\ui ] K Bn6=YQ=QpQ:=A`M^\uk ] K BuY ZbHN =A`tY ZbHN =s_uq ] K BLQ;Y JH =A`ALQ;Y JH =s_F : GQK ;%: H6GSK RRT: GQK ;%: H =M; K ; j6GUH ; OK6ZU[ ;=» E M'.e9 E "» V%b:G7Ue E 'S>T 5 Y%R» 5 e EG5 W< 5%E 7UeL 5E .eKK E ]^:G7U:U;;»Wie>.7U

E t>KMXV 5 E 7GN E W 5%E6E t+7F+W¨YR(M''e90JY%RJ 5 M.Re3'eKKp E J0MKI178bY%R 5 7G.p'e 5 R 5 : 5 º+eBC[? E8E E 7Ue 5E 5 ;$+WV%e1+7U;;$V E +7d1 E : 5E 5 W 5 Y%R>M. EdE +78; 5 78 E

Page 56: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& , !)oi

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

;$FMKI178 E »Y%RFe 5%E 78¦ >7G'W 5E e 5 'e â 5 ; 5 + â :8RM 5 V+W\1+_F;$6M':878 E Y%Ra 5 W< È +W EM'I17U E CÌ=»T 5 5 ;$>W 5E V 5 78]+WV'e 5 7U7Z: 5 ; 5%Ek5E 7Ue 5E Y%R»78>++78+Web+e%:G7U;V 5 E M'Re E ;+M' E 5 ;+W¦§_+>7`7G:G;$J: 5 º>e E 5 W 5 eRWi< 5 e E :Ue%:G; 5 :8. 5#E :87G'eLC

· E 178K­I1+ ECA Vªo CcA ¯o¬;$>1>W E >7 'eKKM'._N; E e%:G E ;$ E 0R$:8.M''_>7Jt+MK78.W<>.7U31+_ 5 ·»AdC?dM' E 7G+:I>W E >R E 1M 5 78 E +e%:87GJ;$R E g$>+RS È E ; 5 · AdC= 5 'e â 5 ;$+;)g$>+RS+T 5 V E +R E 1M 5 78 E 5 787G E 5 e;+W J 78¯Ig'Wi3M':878< E +7`R$:8.M'._N;C=»zM.'eR+W

X++VBY%R<]) E :8e:8 E .W<M' E VP:G>W 5E e;ÍW<+e 5E YR</ EGâ W0 5 M 5%E

:G>7GW<'e E YR@:8+78'WYR E +7Z7GN 5 e9>+'; 5E t+M 5 ·»AdC¤ R$:878 E M''eR>e E Wi E 5 W)M.+g$ E 5 ;+W:8+7`RW¨eXHW<+7 5 .e; E Rt+78 5 7>V 5 Y%R;$ Ç RM.:8<L E :8e%:8(< 5 e E :G78RS+T 5 ; 5 · j[û 5 7G78 E 5 e;$>e%:GC ½»W<2; E Wie+'78 E ;$;$'W<.eR'7 E8E Ñ;$ Ç RMK;;-]R$:8.M'._Ne; 5 RWR:GÆWi: 5<Ç e.: 5 eT 5 ;:G>7GW<'e âKE :8' 5 ù§· j[= û(ú Y%Rb]bRW«W 5 ;$>M 5 M''+'7UW<+e%:Gb;H¦ >7G>e:87807G>78 E +e%:87F<M'.eR+W; 5 · AdC½^Wî· jZ=»û\;$.¦ +78 ;$(RWî· jZû >W 7G>M'S+T 5 5 ¦§: 5 ;$ :G+7`;$'1>7 EG5E E :8; 5E .eKK E

Y%R»J¦ ReS+T 5 ;$^:878e E 'S>T 5 ;$» E :U; 5%E ] ; Ç eK;δ : S×Σ →

5 ev*Re%: 5 ;$ E Rt 5 ev*Re: 5EÇ e.: 5%E ;

ρ(S)V 5 R E vV% 5 ;$(g$ E :8.76W< E ;$ RWiJ:G7Ue E KS+T 50E .e; 5 ;$»RW E :U; 5 7U

W< E WiM':878-; 5 M.¦§t: 5 C fZ5 70+g>W<M 5 V 5 · jZ=»ûA4

W 5E :G7U; 5 e Ç R7U&/Cªo 5·»jZ= û

A5

; Ç R780/C 378> 5 e9>>W3W< E Wi0M.'eRL>WY%R 5 · j[ûA3

W 5E :G7U; 5 eÇ R78)/C C

1

i f

2

3 4

5

letra

branco

letra, dígito

dígito

dígito

j['R7U0/C obuÍû '7UWi0;J:G7Ue E 'S>T 5 ;$J E :8; 5 7UA4

C

2 ReL; 5 g$NR$:U; 5 V[RW´· jZ=»û« 5 ;$Í:G>73Wi E ;#RW E :8; 5 5 7G78+e%:8# 5 W< E W 5:G>W< 5 C fZ5 7 +g>W<M 5 Vy 5 7 5 EGE 7( E +;$+Kü ý0 · zü ýe 5 ·»jZ=»û

A4

VB E NY&kI+e+'z;$ E :8; 5E :G'1 5E L7U0>;)RW E +78K

1

i→ 3, 5

f→ 4, 5

1→ 5

2→ 5

1

i→ 3, 5

f→ 4, 5

?òe 5 ·»jZ=»ûA5

V E >7GK

Page 57: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& %o !)o%qi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ-,"x)Ü Ò»ð»ÛÌ×ÓX¿ñÛ/.10»×+ÎZÜ %o

i f

1

letra

2

3 4 5

6 7

letra, dígito

dígitobranco dígito

branco

branco

j['R7U0/C 3uÍû '7UWi0;J:G7Ue E 'S>T 5 ;$J E :8; 5 7UA5

C

1, 3, 6

i→ 4, 7

f→ 5, 7

1→ 7

2→ 7

1, 3, 6

i→ 4, 7

f→ 5, 7

½^W«·»jZ=»û\78> 5 e9> RWi<+;+K E V 5bÇ eMB; E RL3+gNRS>T 5 V%M.RWî; 5%E E :U; 5%E 5 7G78+e%:8 E L>7:8+e+F 5 5 ev*Re%: 5 ;$F E :8; 5EØÇ eL E

FC[?kg$>+R$:8e; 5

A4

5 W ü ý0 · V:8+7 â W 5%E5 E :8; 5 o:G'1 5 e 5Ç eMF;g$NRS>T 5 ; 5 · j[= ûîVZ 5 7:Ue%: 5 V@ü ý0 · ;$>1>7GK E >7b78> 5 pe9NK; 5 5 W 5 K;$>e:8 Ç +; 5 7NC °%­#e 5äE >Re; 5 + E5 Vt 5#Ç eM[;Í+;$+Kü ýUVP:8+7 â W 5E ; 5 E E :8; 5E 5 7G78+e%:8 E VW3 5E t+7G:G+eL+e%:8 E 5 5 ev*Re%: 5

FC m F¦ Æ E8E >W 5%E R:G'M.'_>7k E8E a·»jZ=»û

78Í.W<M'+W<+e%:U7(e 5 · AdVP:8+7 â W 5%E RWæ7 5 M'+WiVP 5 E eLT 5E L>7 â W 5E Y%RM 5 : 5 º+e 5 7G78 E 5 e;$>e%:G J M'I17U#M'';V E E >7GKÍRW K;$+e%:G Ç >; 5 7 5 R-RW ü ýUC D +7 â W 5%E Vy>e%:8T 5 VY%RJ E :8L>M.N+7`7G 5 78';;$ E L7U0;$NK;$'7`+e%:G78; 5 E E :8; 5E Y%R(:G>7GW<'e7UW¨:G'1 5%E C·^t E 7»;J¦§'M'H:U7»<;$ Ç eKS+T 5 ;<M.'eRL>Wî;$ E v;V$RW«· jZ=»ûeLT 5 ]J:8T 5 ¦§'M.p

W<+e%:G<'W<M.>W<+e%:8; 5 Y%Re%: 5 RW ·»jZû0C D >e%:GVy 5 7J+g>W<M 5 VB;$:87 5 M' 5 7G.:GW 5 ; 5·»AÑY%R3t+7U 5 7G783i:Ut+MKÍ;$3:G7Ue E KS È E 7UiRW · j[= û3C fZ5 7 5 R:G7 5 M'; 5 VP E +78 :8p7 â'E :GK+ E ;$ÍeLT 5 pw;$+:G+78W<.e E W 5 eT 5 ;$K 5 eW 5%E · j[= û E e>e9RW * 5 ;$+7#g:G7U+W78+MKS+T 5 5%E · j[û E C l E8EG5ÍE 'e Ç >ÍY%R)ÍMK E8E 3;$)M.'eRL>e E Y%R0 5 ;$>W E >7(; Ç eK; E 5 7`W<+ 5 ;$b·»jZ=»û E ]b)W< E Wi); E Y%R 5 ;+W E +7^; Ç eK; E 5 7`W)> 5 ;$b· jZû E C· E8E 'W E >e; 5 VLYRLMKYR+7^·»jZ= û 5 ;$ E >7`:G7Ue E ¦ 5 7GWi; 5 eRW«·»jZûNY%R.1M.>e:8C fZ5 p

;$>W 5%E V@+e%:8T 5 V@;$ Ç e'7<e 5E8E &M.'eR+W´ 5 7<W)> 5 ;$RW · j[= û3Vd:G7Ue E ¦ 5 78Wi­prM 5 eRW·»jZûËVt+e%:8T 5 VW 5 e:U7():8t+MK#; 5 ·»AdCB¤ RW<+M'9 5 7 'e;VL 5 ;$>W 5E E +7G>1>7`RW 7 5 p7UWi(Y%Ra¦§S>J E8E5 78(e¯ E ù 5 R<R E 7kRWËY%RZv­J+g$ E :8%ú C[O,g:UW<+e%:Ga EGE J Ç M 5%E5Ç ; 5%E 7 5 7UWi E Y%Rb+7UWî· A E W)N;$Ke%:Gbi;$ E +7GKS+T 5 ;<M.'eR+WeRWi<¦ 5 7GWi)Wi EW<'­I1+MXCØ? E8E E 7 5 78W< E +W:878e E ¦ 5 7GWie; 5 E8E );$ E 78KS+T 5 eRW¨· jZû3C=» E EGE T 5 /C ,1+78+W 5%E#5 R:G7U¦ 5 78Wi¬;$;$ E 78+1+7#M'.eR+e E 78+RM'7G E C m T 5 E

g$78 E8EGÈ E 7G>RMK78 E V$Y%RVt 5 W 5E · jZ=»û E V E >78T 5 R E ; E eLi 5 e E :87GRS>T 5 ; 5 · A,7U<M'.eR+W

X++e E >S>T 5 /C /C

Page 58: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& !)oi

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

3.2 Expressões regulares¤ R$:G7UWie>.7U-; E 7G>78 E +e%:87G>WÿM''eR>e E 7G>RMK78 E ] 5 7iW)> 5 ;$+g7G EGEGÈ E78+RM'7G E Cʽ»Wig$78 E8E T 5 78+RMK7ù ?6c»úiR$:8.M''_>M'.eR+e E 7G>RMK78 E 7G'W<H:8.1 E 5 W3'epr E 5 7)W)> 5 ;$M'Re E05 t+7U; 5 78 E C&? E8E -g$78 E8E T 5 ¦ 5 78Wi;-;$ Ç eVd>e%:8T 5 VRWi 5 R$:878)M'.eR+WC@¤ Ea5 t+7U; 5 78 E R$:G'M.'_>; 5E e E8E E +g$7G EGEGÈ EaE T 5)5E`E +R.e%:G E

•½»eKT 5 ù

∪ú ^;; E E M''eR>e E

L1

L2

V E5 78 5 M.¦§t: 5ΣVy;$ Ç ep E

L1 ∪ L2 5 W 5x ∈ Σ∗ | x ∈ L1 ∨ x ∈ L2

m•465 e+:G>eS>T 5 ù

·ú <;; E E M'.eR+e E

L1

L2

V E5 78 5 M.¦§t: 5ΣV[;$ Ç e+p E

L1 · L2

5 W 5x.y ∈ Σ∗ | x ∈ L1 ∧ y ∈ L2

m•j>U9 5 ;$JM'+>e0ù

∗úk;;0M'.eR+W

LEG5 78 5 M.¦§t: 5

ΣV$;$ Ç e+p E

L∗ 5 W 5

E +eL; 5λ ∪ L ∪ (L · L) ∪ (L · L · L) ∪ (L · L · L · L) ∪ ...

C

·^M'Re E g$+W<M 5E ;)M''>S+T 5 ; E8E E65 L>78; 5 78 EaE T 5

a, b ∪ c, d = a, b, c, d

100, 010, 110∪ 00, 01, 11 = 100, 010, 110, 00, 01, 11

101, 110 · 00, 11 = 10100, 10111, 11000, 11011

abc∗ = λ, abc, abcabc, abcabcabc, abcabcabcabc, ...

a, b∗ = λ, a, b, aa, ab, ba, bb, aaa, aab, aba, abb, baa, bab, bba, bbb, ...

?ËL7U&;$ Ç e'7GW 5E)5 Y%Rz]äRWig$78 E8E T 5 78+RM'7>VZ1W 5E 7:8.7<; E M''eR>e EWi E»E .W<M' E Y%R3+g$ E :G>W«0R$:G'M'._N7» EGE E»5 t+7U; 5 7G E C D +W 5%E Vt+e%:8T 5 Vt;; 5z5 M.¦§t: 5Σ = a1, a2, ...an

• a1

Va2

V0C.C'Can

E T 5 ?@c E Y%R- 5 787G E 5 eL;$+W JE M.'eRL>e Ea1, a2, ..., an

V78 E t> :8.1W)>e%:Gm

• ε](RW<<?6cêY%Rb 5 787G E 5 eL;$ J M'.eR+W

λm

• ∅]JRWi<?@c Y%R 5 7G78 E 5 e;$ J M.'eRL>W ´ µ=m

•E

e1

e2

E T 5 ?@c E YR» 5 7G78 E 5 e;$>W JE M.'eRL>e EL1

L2

V>e%:8T 5e1∪ e2

]^RWi+g$7G EGE T 5 78+RM'7aY%R 5 787G E 5 e; J M'.eR+W

L1 ∪ L2

m•E

e1

e2

E T 5 ?@c E YR 5 7G78 E 5 e;$>W JE M.'eRL>e EL1

L2

V+e%:8T 5e1 · e2

](RWi+g$7G EGE T 5 78+RM'7aY%R 5 787G E 5 e; J M'.eR+W

L1 · L2

m•E

e]RWi)?@c\Y%R 5 7G78 E 5 e;$ J M.'eRL>W

LV$>e%:8T 5

e∗]RWi)?@c\Y%R 5 7G78 E p

5 eL;$ J M.'eRL>WL∗C

fZ5 7^+g>W<M 5 V(a ∪ b ∪ c ∪ d)

.e;'>i<ReKT 5 ; E M.'eRL>e Ea

Vb

Vc

Vd

V 5 RE *vV

a, b, c, dC f 7UF+1.:87Ø 5 e¦ R E T 5 YRLe; 5 W< E :8R7UW 5EP5%Ey5 t+7U; 5 7G E ;$+e%:G7 5 ;$dRWi

W< E Wig$78 E8E T 5 78+RM'7>VØ;$+1+W 5E E :Ut+M'>++7RWi78 5 7GK;;$<+e%:G78 5E5 L>78; 5 78 E CD +W 5E V>e%:8T 5 V

∗ 5 W Wi E M.:878 5 78';;$V%;$+ 5 E

·V Ç eM.W<>e:8V

∪C f[5 ;$>W 5E .eL;

R$:8.M'._N7bL7I+e%:G E E 7U;$:8+78W<.e73 5 78;$>W ;$zM''>S>T 5 ; 5E35 t+7U; 5 7G E CÍök*vW 5%EM'Re E g$+W<M 5E

Page 59: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& q- !)oi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ-,"x)Ü Ò»ð»ÛÌ×ÓX¿ñÛ/.10»×+ÎZÜ q

• (a ∪ b) · (a ∪ b ∪ c)∗ · (b ∪ c);$ Ç e#zM''eR>Wæ¦ 5 78Wi;z 5 7: 5 ; E E >;$>' E

EG5 7Ga, b, c

YR E 'e'+'Wî 5 Wî E M':878 Ea5 R

bJ:G+78W<.eLWî 5 W

b5 R

cm

• (a∪b) ·((a∪b) ·(a∪b) ·(a∪b))∗;$ Ç e^JM.'eRL>W

x ∈ a, b∗ | |x| mod 3 = 1C

· E8E 'W 5 W 5ä5E ·»jZ=»û E V[ E ?6c E 5 ;+W E +7W0RH: 5 W< EJE .W<M' E L7UÍ78+78 E +e%:U7-M.'eRL>W E >7)78> 5 e9>K;& 5 7)RWþ·»A ; 5 Y%RRW · j[û0C fZ5 7<+g>W<M 5 V@78-M'.eR+W;$ Ç eK;<t+M 5 ·»jZû

A1

V$ 5 ;+7 â W 5%E R$:G'M'._N7^ E >R'e%:GJ?@c

(digito · digito∗) ∪ (i · f) ∪ (letra · (letra ∪ digito)∗)

¤ RzW<>M.9 5 7`YR EGEG5 V 5 ;$+7 â W 5E ;$ Ç e.7`>;0RWî; 5%E : 5 º+e E E >7G>W 7GN 5 e9>+'; 5E 5 7`W<+ 5 ;$RWi)?@cC fZ5 7`g$+W<M 5

o á È Çdigito · digito∗

m óJ

i · fm

U¡ á ß ó ô0± ¡ Ç È letra · (letra ∪ digito)∗

C

s E :8W3t]+Wæ 5 W 5 5 e%:GN3 5 W 5E ·»jZ=»û E Vy]3Wi E ;H¦ â 'MZ.W<M'+W<+e%:U7»RWæ7 5 p7UWizYRVB;; E E ?@c E VÌ 5 e E '#K;$>e:8 Ç +7>;$>' E Y%R<z+MK E 5 7G78 E 5 e;$>WäC f[5 75 R:G7 5 MK; 5 Vk]ä 5E8EGâ 1+M6:8W0L]>W´:G7Ue E ¦ 5 78Wi70RWi&?@c¨eRW ·»jZû0Vd&+g$+W<M 5 ; 5 Y%R5 5 7G780 5 W 5%E ·»jZ=»û E C<? W<+M'9 5 7b.eL;VB+g$ E :G>W 7 5 7UWi E Y%R(v­z¦§_+>W EGEG5 C<½^W;$>M. E ] 5 °I1 4`4 V%Y%R^R$:8.M'._N78+W 5E E +R.767UJ.W<M'+W<>e:U7 5 ·»A&7UbM''eR>WX++

Ck? E8E »7 5 78W<Jt+78W<H:8(Y%R( E t> Ç Y%R>W 5%E@5%E : 5 º+e E ; 5 e 5E8E5 ·»A- 5 76W<+ 5 ;$?@c E J+7GK)RWî7 5 7UWi3°%I10>_J;(M'+7»(78> 5 e9>>7a E8E E : 5 º+e E C

3.3 O analisador léxico da linguagem X++

=^ E :U E >S>T 5 W 5E :G7U78+W 5%E 5 W 5 .W<M'+W<+e%:U7 5 ·»AÑ78#ÍM.'eR+WX++

R E e; 5#5>78; 5 7[;$` 5 W).MK; 5 7G E °%I1 4`4 C= 5 ·^I+e;'+ n ]@¦ >H:U RW<(;$ E +7GKS+T 5 ;$` 5 W 5 ¦ ReL.p5 eL EGE F7 5 7UWiVI'eM'R'e; 5 M.Re E g$+W<M 5E ; E R(R$:8.M'._NS>T 5 C[· E8E 'WV78> 5 W<+e;p E Y%R 5 M.>H: 5 7` 5 e E RMH:8 E8E cI>e;$Ke%:G E ;$b 5 e%:G'e%RL7`)M.>H:8R78<;$ E :U E NS+T 5 C

¤ 7 5 7UWi°I1 4`4 ++.:8, 5 W 5 +e%:878;RWÙ7UYR.1 5 Y%R:G+W à;$ E +7GKS+T 5 ;M'.eR+W E +7k78> 5 e9NK; `.7U­»+7U7ZRW eM. E ; 5 7 E .e%:U­:GK 5 `RW eM. E ; 5 7ZM']g$K 578 EGE M'.eR+WCZ· E8E 'WV$M']+W ;b78Wi­:GK+3;bM'.eR+W)pwM'1 5 V;$+1p E ;$ E 78+1+7:8W3t]+W©Y%RM(]àM''eR>WäV 5 R 5 5 ev*Re%: 5 ;$-: 5 º+e E E >7G>WÙ7GN 5 e9>+'; 5%E t+M 5·»A@C$? E8E 7UY%R'1 5 5 ;$(:G+7^Y%RM'Y%R>76e 5 W<V$Wi E 5E :GRWip E R$:8.M''_>7aRWi0g:G>e E T 5 ¢ ££ CödW 5%E e 5E 78¦ >7G'7`0 EGE 7UY%R.1 5 5 W 5 78Y%R'1 5 C v vr C

¤ 78Y%R'1 5 E +7(:878:8; 5 t+M 5 °I1 4`4 ]i;$'1';'; 5 >W ;$'1+7 E E(E NS È E C)· 78'W)>.7U;$>M' E ;:G>7GW<'eJM'Re E L7U®W<:87 5%E 78((>78S+T 5 ; 5 ·»A`; 5 · m C? EGE E NS+T 5 'e'+'p E 5 W bM'I17U^ 5 $:G 5 e E V 5 W 5 W 5E :G7U; 5 E >R'7NC 4 ;RW;$ EGE E 7U®W<+:G7 5E 5E8E RRW 1M 5 7pr;78T 5 E ¯Í7GN E W 5%E 'e+M.R'7eze 5E8E Í;$ Ç eKS+T 5 Y%R>M. E 7U®W<:87 5%E +Rv 51M 5 7`;$ E vW 5E MH:8+7U7NC[= 5 > EG5 ;)M.'eRL>W

X++V'78+W 5E R E 7^L>e E 5 PS+T 5

Page 60: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§Q¨X© ss%ªRQ«R ©%¬z§Q¨X© sC­s® §¨ n=Q< G ª® §¨X¯ «si

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

\T7Sb\[:iÊ°&òXXò±² ¢£7^Xhi_ Ì? E8E 5 tS>T 5 ¦ +:8 5 W 5 ; 5 Y%R 5 ·»A 5 · m E T 5 +7U; 5%E CÌ· 5 +7U7 5E eM. E ; 5 78 E V 5

°%I1I 4`4 78'3RWi3MK E8E °%I1Ib7U 5 ·»A-»RWi07U 5 · m C m ( E8E 5 PS+T 5 :G'1>7 5 1IM 5 7true

VLY%R3] 5 1M 5 7GpX;$7UT 5 V%:Ue%: 5 i+M' EGE b 5 7G78 E 5 e;$>e:8 5 · m Y%Re%: 5 5 · A E +7UT 5MK E8E E Rv 5E 5 W< 5 e+e%:8 E ù 17GK­I1> E bW<]: 5 ; 5E ú E T 5o³c?A? oIC 465 W 5 5 e E >Y=kI>eKV E ¯RW\· m @RW\· AÍ 5 ;$+W E +7Z78'; 5E CB½`:8.M'._Ne; 5 5 tS>T 5 °&òXXò±² ¢£7^Xhi_a:8+W)p E 6W< 5 7P+g''M.K;;$V[ 5 E ;$.1+7 E E ¯' E ; 5 · m ù VZ 5 W 5 5 e E NY&kI+e+'VÌ; 5 · AØúJ 5 ;$+W E >778K; E C fZ5 7 5 R$:87 5 MK; 5 V;$^ 5 7U; 5 5 WË(; 5 +RW<+e%:8S+T 5 ; 5 °%I1 4`4 V 5 ;$ E +W<t+e9 5 ;$RWî 5 W<'M'; 5 7a E :U­:GK 5 ] E RL>7G 5 7` 5 ;$JRW¨eT 5 E :8­:GK 5 C[?@W3 5 7U0R:G'M.'_+>W 5%E t+e ERWiÍ+¯Ki; 5 · m e 5 e 5E8EG5 5 W<'MK; 5 7>VL7G+¦ +78.W 5%E RWæeT 5 E :8­:8' 5 t+eL E L7U#Y%R5 M.>H: 5 7` 5E8E )1+7`Y%R E`E T 5 E .W<M'K+S È E ;$ E :U 5 tS>T 5 e)'W)M.>W)>e%:8S>T 5 C

· E >ReL;b7:8J](;$>M.'W<H:U;)t+MK E M'I17U Eµ´¶·;6¸·¹º¸/»¼½ ´¶·;¸·¹¸½¾àE >R.p; E 5 7kRW e 5 W<C[? E8E `e 5 W<^ 5 7G78 E 5 e;$ J MK E8E ^Y%R`'7U­(78.%7 5 · m C fZ5 7kg$>W)M 5 VRW ´¶·;¸·¹º¸C»¼½À¿CAÁÂà '78­ 5 78..e7Ø RWi +M' EGE 6U9LWi; C'AÁ V>Y%R E >78­ +M' EGE ; 5 · m V`RWË78Y%R'1 5ðC'A6ÁÂ1ÄbÅAÆcA Y%R^ 5 e%:G]>W E8E (+M' EGE C D 5 ; 5 +¯;. 5 5 M 5 >; 5 e EGE :G78>U9 5 ; 5 78Y%R'1 5 C v v E +7U­3'e+M.R â ; 5 e EGE )MK E8E C

·^M']+W ; E8E5 V E >78­ä78K;ÍRWiz+M' EGE )Y%R< 5 7G78 E 5 e;$) 5 ·»AQ; 5 5 W).MK; 5 7>C? EGE MK E8E Íù 5 78Y%R'1 5#5 e;$0+MKÍ])78W<_+>e;%úF:G>W 5 e 5 W<0; 5 · m W< EÈÇ É D6ÊAAÁMDË C= 5 e 5E8E5 + E5 V$ 5 7^g$>W)M 5 ViMK E8E ; 5 · A E +78'<U9W<; C'AÁÂÌÇ 6É D6ÊAcAÁMDQË CÌ= 5v78T 5 R$:8.M'._N; 5 t+M 5 °%I1I 4`4 V 5 ·»AÑ]<U9Wi; 5 ;$ D 5 º>e&seL>7>Vt 5 7( E8E5z5 e 5 W<;<MK E8E C= 5 7 5 7UWi/Cª$V 5 +¯;. 5 ;$+e%:87 5 ; E8E E >S>T 5 ; 5 7UY%R.1 5 C v vF;$ Ç e 5 W<]+: 5 ; 5n>MA

;zMK E8E C'AÁÂ CL?dM'3])7G E 5 e E ­I1>MB 5 7(1+78 Ç +7»Y%R E E T 5Í5E 7U®W<:87 5%E ;$0+e%:G7U;V78K7 5-5 $v*+: 5 ; 5 :G' 5ôC'AÁÂ Í+gNR$:U7)&eL­M' E EG5 78#RW 78Y%R'1 5 +Rv 5 e 5 W<#¦ 5 EGE ; 5 5 W 5 L7U®W<:87 5 C m 5 e 5 W<JR$:G'M.'_>; 5 ¦ 5 twpUV$>e%:8T 5 ieL­M' E E >78­3¦ +.:8 EG5 78^>e%:G7U;pX;$7UT 5 ù m E :G>WC 'eLú CZ?dM'a>H:U`:UW3t]+WË 5 PS+T 5 .)$ VYR@W 5 ;$ Ç +( E â ;7 5 ;$R_+K;)t+M 5 5 W<'M'; 5 7NC

9:;%<:=?>=A@CB ©F 9ÍQ6ÎU6Ï&ÐÑÒUÓ/yY%= H <Ô\ n6=L j =Q< G n6=Q:^ G :CÕ_ Z >n;&: KcÖ =Qp=B Z ;B Õdeg n JO Y Z LALQYQ=^Q^tYQ= H <QÔM×h a ZbH =YA^ K = KZ LSÎ K : Z?H <tØ G :^ Z ; H `lEÔffSÙ;>n Z Y G : ¨ Ø G :^ Z ; H DBs ¨X© sQsQªlÕiÚO ;;Y G = HMÛG&H ;^^ N ;&: K `ta=Y^ G ÕÜRRS^%=Ý [ =P: G ^ J > Z&[ =A`ta=Y^Q;kFrqFuF RRTÞ G a ZbH6G ; > K ; [ ;ml>= Z?H l [ =AL%YQ=^^ G Y%= H <Ô/BFr\ n JO Y Z Lw^ K = K6Z LPp; Z&[ >= ZbH yÎ K : ZbH <c=Q:<^ K&N :;&ß^T9=Q:6^ G v6L G n KZ ; HFr_ ×F|d Î K : ZbH <Aa Z Y G&H =?> G `llÕÜRR H ;?> GS[ ;T=Q: I%JZ p;S=A^ G :A= H =Y Z ^%= [ ;Fre Y%= H <ÔPn=Q:6^ G :Õ RRP= H =Y Z ^%= [ ;%:cY%Qv Z LQ;QR^ ZbHKàQK6Z LQ;Frg Z?HKcZ Õ

Page 61: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§Q¨X© ss%ªRQ«R ©%¬z§Q¨X© sC­s® §¨ n=Q< G ª ¬c§¨X¯ «Di

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ-,"x)Ü Ò»ð»ÛÌ×ÓX¿ñÛ/.10»×+ÎZÜ

Fh O ;;Y G = H >^T`ta=Y^ G ÕFriFrk Î&¥6^ KG >áB; JK Bn: ZbHK Y H yØ G :6^ Z ; H Õ\uq RQRSYQS;^on6=Q:â?> GQK :;^Xn6=^^%= [ ;^Xn6=Q:=A;ALQ;?>n Z YQ= [ ;%:\F a;%:ãy Z `PsÕ ZTä =Q:<^åBY G&H < K%N!¨ DÕ Z ff\u\ ×\u_ Z aãyæ=Q:<6^å Z& B K ;&6;&ß G :Ù=^ G yEB GQI&J =Y^çyl ¨ ^ N ;%: K l%\d >^T` K : J6G Õ\ue G Y^ G\ug ×\h Î&¥6^ KG >áB; JK Bn: ZbHK Y H y?léè^%=Q< GZ ^å­ Ö =%p=AYQ= H <Ôê ¨ ^ N ;%: KZ?H n JK a Z Y G l%Õ\ui Î&¥6^ KG >áB G v Z&K ysÕ\uk ë_uq ë_F_u\ Z aãy=Q:<^ Z& B GQI%J =Y^çy?l ¨ l&_u_ × RRtYQ [ = G&HK := [ = ¨ n6= [ : ;_d Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lE G = [6ZbH <aQ:;?>z^ K = H[ =Q: [ZbH n JK BSBtBl&Õ_ue n6=Q:^ G :A` HG ßcYQ= H <ÔCyÎ%¥^ KG >ìB ZbH Õ_ug ë_h G Y^ G_ui × RRtYQ [ ;t=Q: I&JZ p;_uk a Z Y G&H =b> G `P=Q:<6^å=Q:<6^çBY G&H < K%N¨ D Õdq Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lE G = [6ZbH <aQ:;?>a Z Y G lífTa Z Y G&H =b> G fmlBtBSBl&ÕdîF K :¥A×d\ n6=Q:6^ G :A` H6G ßMYQ= H <Ôy H6G ß Ö =%p=CB Z ;åBï Z Y G Ò H n JK Î K : G =?>áyua Z Y G&H =b> G QÕd_ ëdud L%= K L N y Ö =%p=CB Z ;åBï Z Y G Ó6; K ï; JH[ vL G n K6Z ; HG T×de Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lEï Z Y G lífPa Z Y G&H =b> G fml H ; K a; JH[ Bl%Õdg : GQK%J : H Õdh ëdi ëdk n=Q:6^ G :CB ÛG&H ;^^ N ;%: K ` >^çÕeuq n=Q:6^ G :CB|n:;%<Q:=b>áyEÕ RRAL N =?>=A;í> K ; [ ; I&J6G a=QVS=t= H6à Y Z ^ GeFeu\ RQRPp G : Z a Z L%=c^ GoN ; J p GAG ::;SY%Qv Z LQ;eu_ Z aãyðn6=%:6^ G :/B K ; j6G&H Ï^Q; J :L G Ba; JH[ G vQ::;%:yEòñu`SsMed Î%¥6^ KG >ìB; JK B|n: ZbHK Y H yrn6=Q:6^ G :/B K ; j6G&H Ï^Q; J :L G Ba6; JH[ G v%::;%:Cyécfeue ló G v Z L%=YP:Q:;%:6^Ta; JH[ l&Õeug G Y^ Geh Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lE9:;&<:=b>ã^ J LL G ^Q^&a J YY&¥= H =Y Z V GQ[ Bl%Õeui ë RRÈ>= ZbHeukguq ^ K = KZ LXn JO Y Z LtÎ K : ZbH < Z >áy ZbHK vôRRí> K ; [ ;t= J v Z Y Z =Q:gF ×gu\ ZbHKPj Õgu_ Î K : Z?H <^çÕgd ^X` K ; j6GUH Ò>=Q< G rv Õgue j `M^åBYQ=^ K Ò H[G v%aCylbõll%Õgug K :Q¥M×^T`A^åB^ JO ^ K : ZbH <CyDö j Õ ëgh L%= K L N yÎ K : ZbH <Ò H[G v JK %a%Ð6; JH[ ^Uv6L G n K6Z ; H!G gui × ëguk : G%K%J : H ^Õ

Page 62: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& ,o !0%i

i

i

i

i

i

i

i

o Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

hq ëhFh\ ë RRPYQ= H <QÔh_hrd 9ÍQ6ÎU6Ï&ÓQÞ/yYQ= H <Ô ¤¨W<]: 5 ; 5 E :8­:8' 5z> ]#R:G'M.'_>; 5 t+eL E L7U7G>M' 5 e7bRW : 5 º+e,78> 5 e9NK; 5

5 W 50E >R0*e 5 W< C fZ5 7dg$+W<M 5 V%78JRWK;$+e%:8 Ç >; 5 7>V 5 e 5 W< E >78­ ¼¾¸½ÌÇ V7UJRWi 5 e E :8e%:8ä'e%:G>.7UV E +7U­ ?Q¹ o6 ³?A? VZ7UMKI178-78 E +781I;¤ V E >78­£o C'A6³³ C? E8E E e 5 W< E<E T 5 ;$ Ç eK; 5E e 5 7UY%R.1 5 C v vV@e E NS+T 5 Y%Rä; E 78+1 5E : 5 º+e E E >7G>W78> 5 e9NK; 5E C?dW E >RK;V1+WË E NS+T 5 ;$>W<78>; t+MKJMKI178prU9I1æ÷1øúùüûúýþn²Sÿ þ ûtC

? E8E E >S>T 5ñE +781,78QY%Rà 5E8E W 5E 'e%:G7 5 ;$R_+'7&+¯;. 5 °I12eñ+M' EGE à 5 7G78 E 5 e$p;$>e:8- 5 ·»AdCa= 5 e 5E8EG5 ·»AdVF'7G>W 5%E 'e%:G7 5 ;R_+'7ÍRWi,17GK­I1>M^eT 5 HM''>àU9W<;o ? » D ¹ ¸ËË Ë C(? E8E ä178K­I1+M[]<.eL78+W<+e%:8;ää>;z+787 5 M']g$' 5 +e 5 e%:G7U; 5 e 5 7GpY%R'1 5JE >e; 5 eM. E ; 5 CÌ?-'e%:G7 5 ;R_+'W 5E :8W3t]+WRWW)]+: 5 ; 5 Y%R E 'W<M. E W<>e:8678: 5 78e5 1M 5 7 ;$ E8E <17GK­I1>MC6? EGE 3W<]+: 5 ; 5ÍE +7U­)R E ; 5 t+M 5 · m Ve 5iÇ eM[;#eL­M' E 7Ui;$+p:G>7GW<'e7 E 5 5 7878+7UW+787 5%E M.]+gK 5%EF5 ReT 5 C

9:;%<:=?>=A@CBu@F QÓ6Ï Û Ñ%Ï&ÞÙ%Îò­\ ×_ ZbHK L%; JHK G vQ::;%:c`tsÕde n JO Y Z L ZbHK a; JH[ G vQ::;%:CyEg ×h : G%K%J : H L%; JHK G vQ::;%:CÕi ëkFrq ë · E >S>T 5#E +R.e%:G])iWi E 'W) 5 7G:8e%:Gb78iÍ;$ Ç e'S>T 5 ; 5 · AdCP=^>M' E T 5 ; Ç eK; 5%E

Y%R E[5E : 5 º>e E E +78+W\78> 5 e9NK; 5E VY%R E[5E +7U:G>7G E E >7G>W;$ E 78+_N; 5%E 5 R$:87 5%E 5 W< 5 7:UW<+e%: 5%E Y%R 5 ·»A&;$+1(:G>7>C l eKK78+W 5%E W)>e 5 eLe; 5 Y%R E@E T 5(5%E +78 :8+78 EY%R<;$+1+W E >7;$ E 78+_>; 5E e%:G E ; E 0'eKK7 5 78> 5 e9N'W<+e%: 5 ;$0RW : 5 º+eBVB 5 W 5Ç _>+W 5E Y%Re; 5 R$:8.M'._NW 5E RW· j[ûê780;$ Ç e.7 5 · AdC l E8E5 ]»¦ >H: 5 ; E >R'e%:G»¦ 5 78W<

9:;%<:=?>=A@CBªF ÎÒU9 ­\ ×_ ltld ] lbõ K le ] lbõ H lg ] lbõ%:lh ] lbõ%ali ë D 5 ; E E ;$ Ç eKS È E e E :8 E >S>T 5 R$:8.M'._NWæi78+78 E +e%:US+T 5 ;bg$78 E8EÈ E 7G>RMK78 E C

·¨MKI178ù ¨'e;$K+ 5 °%I1 4`4 Y%R;$ E *vW 5%E ; Ç e'7iY%R E0E T 5 E +;$+K E Y%R

Page 63: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& ,o$" !0/i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ-,"x)Ü Ò»ð»ÛÌ×ÓX¿ñÛ/.10»×+ÎZÜ o$"

;$>1+W E +7 .e 5 7U; E C^= 5 > EG5 Vt E :8W 5%E ;$'_+>e; 5 Y%R0RWî78e 5 5 RRW +V 5 RRWÇ eM`;$zM''e9V 5 R¬RW üGü=7 V 5 RÑRW ¼ü±:ýV6;$>1>W E >70'e 5 78; 5E zeLT 5+e%:8787Fe 5 78> 5 e9>'W<+e%: 5 ;$RWî: 5 º+eÌC·^M']+W ; 5 ù FV 5 °%I1 4`4 +W<78+ä:UW0L]>W´MKI178!÷1ø ùüûúý Y%RÍ]#R:G'M.'_>;

78);$ Ç e.7NV$ 5 7`W<+ 5 ;$Jg$78 E8EÈ E 78+RMK78 E V%Y%R E E +;+K E E >7G>W7GN 5 e9>+'; EYRL E05%E :8. 5E ;Í: 5 º>e E Y%Rä-+MK E 5 7G78 E 5 e;$>WC,ök*vW 5%E05 + E5 ; E M'I17U E78 E +781I; E C m R0; Ç eKS+T 5 ]J E :Ue%:G E .W<M' E V 5 E 0g$78 E8E T 5 78+RM'7FY%RJ E ;$ Ç eJ])78¯78'0M'I17UC D >W 5%E

9:;%<:=?>=A@CBF R 9=YQ=Qp:=^P: G ^ G :Qp= [ =^ R\_ QÓê­d ×e ä ÐQÍÌ­íl O : G = j l g ](ä Ù&ÍÎέílbLQYQ=^^6l h ](ä Ù&Ó6Î%Q%è6ÙQ&/­XlbLQ; H ^ K : J L K ;&:l i ](ä Q6Î&Ì­ l G Y^ G l k ](ä ÔQÓÞέíl G v KG&H[ ^l Frq ](ä ï&Ì­ la;%:l FuF ](ä ÒUï/­ l Z al Fr\ ](ä ÒbÓ/­ l Z?HK l Fr_ ](ä ÓQÌ­ l HG ßl F|d ](ä 9QÒUÓ/­ílîn: ZbHK l Fre ](ä QÍQÞÌ­ lE: G = [ l Frg ](ä Q%èÓ/­íl: GQK%J : H l Fh ](ä Î&QÒUÓÑ­ílU^ K : Z?H <l Fri ](ä Îbè9Ì­ílb^ J n G :l Frk ë

? E8E ;$ Ç eKS+T 5 ;$'_iY%R 5E 5E8Eâ 1> E : 5 º>e E E >7G>Wæ7GN 5 e9>+'; 5%EJE >78T 5 E >;$>' EVnLUVn * &+:8Cê· >;RW<,; E8E E +;+K E ] EGEG5 K; 5 RWþ:G' 5 ;$: 5 º>eBV Y%RV e 5 + E5 V»U9W<W 5E ;$ º·¸¶ V'» ¶;X; V ½;ÇU· Ç · +:8Cî? E8E E :G' 5%E;$&: 5 º+e E .7UT 5 5 787G E 5 eL;$+7NVae,'W)M.>W)>e%:8S>T 5 ; 5 · m Va¬ 5 e E :8e%:G E .e%:G>.7U E ;$ Ç peK; E e 5 78Y%R'1 5 C'AÁ ³c?A?³ VdY%R&]- E Rt+7UMK E8E 'W<>;$K:Uà;à+M' EGE C'A6Á C· E8E .WV 5 ;$+W 5E e 5E 78¦ +78+eLK7`< E8E E 5 e E :Ue%:G E 5 W 5ÊC'AÁ ³?A:?³áÄ麷¸¶5 RC'A6Á ³?A?³áÄ » ¶;X; V 5 R C'AÁ ³?A?³áÄ ½;çÇ&· Ç · C· E8E 'W 5 W 5 ;$ E 78H: 5 e 5 'e â 5 ;$ E :Gi+ â :GRM 5 V 5 · AÑ]i 5 e E :G78R â ; 5 ;)W 5 ; 5 Y%Ri

Wi 5 7(+;+K# 5E8Eâ 1>M E *v#78> 5 e9>K;C fZ5 7( EGEG5 eT 5 9­Íe+e9RWæ7 5 M.>WiÍY%Re%: 5 RWi+g7G EGE T 5 78+RM'7b 5 ;+73+7U7 E RP+;$+K E ; 5 R:G7Ug$78 E8E T 5 7G>RMK7NC m +W<78E +7U­3 5 e E ';$>78;30Wi 5 7`+;$+K3;0>e%:G7U;0YR(> E 7a 5 W¨M'RWib+g$7G EGE T 5 7G>RMK7NCl E8E5 5 e%:GNV 5 7ag$>W)M 5 V E +R'7a 5 W 5%E : 5 º+e Eæ»Ç »%¸ C m )+e%:878;b 5E8E R.7aRWE :G78.e

>=V% E :8 E +7U­bK;$>e:8 Ç +; 5 5 W 5 RW »%¸ V%W< EaE 5%EGE R'7FRW

>t+e E V%+e%:UT 5PȂ

E +7U­ 5 + E W<+e%: 5 7GNM'._N; 5 C

Page 64: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§Q¨X© ss%ªRQ«R ©%¬z§Q¨X© sC­s® §¨ n=Q< G ©M§¨X¯ «Qªi

i

i

i

i

i

i

i

o Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

9:;%<:=?>=A@CBu«F R Un G := [ ;&: G ^ R\_ QÓê­d ×e ä ÍÎÎÒ%Ñ%Ó/­íl?`l g ](ä Ñ%/­ l l h ](ä /­ l ä l i ](ä ! ­ l?``l k ](ä QÌ­ l ä `l Frq ](ä Ñ&Ì­ l `l FuF ](ä ÓQ" ­ lñ`l Fr\ ](ä 9QQèέ lfl Fr_ ](äXÛ ÒUÓQèέíl ¨ l F|d ](ä Î&ÍQÌ­ l l Fre ](ä ÎUÍÎ#Ì­íl?Rl Frg ](ä Q Û ­ l%$l Fh ëFriFrk R ÎÝE> O ;Y;^ G ^bn G L Z = Z ^ R\uq\F QÓê­\u\ ×\u_ ä Q9ÍQÓ/­íly?l \d ](ä Q9ÍQÓ/­íl%l \ue ](ä QÐÍÙ%/­ílb×l \ug ](ä QÐÍÙ%/­íl ë l \h ](ä QÐÍÙQ/­ílEl \ui ](ä QÐÍÙQ/­íl l \uk ](ä ÎU Û Ò%ÙU6&ÓÌ­ílÕl _uq ](ä Ù ÛÛ Í/­ílö?l _F ](ä Þ%/­ lBEl _u\ ë

= 5 :GbY%R 5 7UY%R.1 5 C v v` 5 ;$ 5E8E R.7^;.1+7 E EFE >S È E ù & 5 R÷1ø ù û ýC·`Y%RÌ;.1.p;$'W 5E 5 e$¦ 5 78W< e 5%EGE ) 5 e1+eI+e+'V%;J 5 78; 5 5 W E 'W)'MK78';;$»>e%:G78 5%E : 5 º+e E CZ·E +R.7`;$ E +7G>1+78+W 5%E@5%E : 5 º+e E 78+MK+ 5 e; 5E ) 5 e E :8e%:G E e 5 W< E ;$K;$+e%:8 Ç >; 5 7G E C

9:;%<:=?>=A@CB('F R LQ; H ^ K = HKG ^ R\_ QÓê­d ×e äSZ?HK ÏLQ; H ^ K = HK ­Qy RR H W%> G :;^ [G L Z >= Z ^çö3;L K = Z ^çö NG v= [G L Z >= Z ^M; JtOZbHà : Z ;^g yEl?sl ¨ l ¬ l yEl?sl ¨ l ¬ l ]h yEl?sl ¨ l%'l yEl?sl ¨ l%'l élb;löolbl ]i yEl?sl ¨ l ¬ l yEl?sl ¨ l%'lö?lEÍl ¨ lïlö?l?=l ¨ lal El N löíl#l ]k yEl?sl ¨ lQDl yEl?sl ¨ lQDl él O löolEÐl Frq FuF ]Fr\ ä ^ K : ZbH <ÏLQ; H ^ K = HK ­ RRALQ; H ^ K = HKG ^ K : ZbH <LQ;?>;ml= O L [PO L [ =lFr_ lbõlly*)ElbõlQlö?lbõ H lö?lbõ%:l lbõll

Page 65: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& ,o/ !0%oi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ-,"x)Ü Ò»ð»ÛÌ×ÓX¿ñÛ/.10»×+ÎZÜ o/

F|d ]Fre äoHQJ YYÏL%; H ^ K = HK ­ol HJ YQYl RRSLQ; H ^ K = HKGPHJ YYFrg ëFhFri R Ò [G&HK6Z a Z L%= [ ;&: G ^ RFrk\uq QÓê­\F ×\u\ ä ÒbÞÓ/­ ä QQ y ä QQ Ì]rä ÞÒ&ÑÒ& \u_ ]\d äP¯ QQÌ­ElÍl ¨ l%+lö?l?=l ¨ lVl \ue ]\ug äP¯ ÞÒ%ÑÒ&C­El?sl ¨ l ¬ l m\h ë ½^Wi 5 e E :8e:8i.e%:8+'78]iRWÿeXHW<+7 5 ;$>+.WiMV 5 RRWÿeXHW<+7 55 :8M E >RK; 5 t+MK

M':G7Up 5 RmøFV 5 RzRWeXHW<+7 5 9g;$N'WiM E >RK; 5 5 7í$ 5 R-,V 5 RBV'e;VRWîeXHW<+7 5'e­78 5bE >RK; 5 5 7¨ 5 R û V: 5 ; 5E@E >W)7G^'eKK; 5%E 5 7@RW; â H: 5 ù§ 5 e E :8e%:8 E 9g;$+p'Wi E eT 5 5 ;$>W« 5 W<>S>7^ 5 W ú ./. 5 R.¼ýPú C^·`Y%RXVe 5 1IW<+e%:GVLM.K+p E i7G>7U<;$Y%R 5 ·»A2;$+13K;$+e%:8 Ç >7J 5 W 5 : 5 º+eÍWi 5 7J+;+Ki 5%EGEGâ 1+MXCJ· E8E 'WVt 5 7(g$>W)M 5 V1vW 5E M.Re E : 5 º>e E * E :878e9 5%E Y%RJ 5 ;+W E +7`78> 5 e9>K; 5%E 5 7` EGE <;$ Ç e'S>T 5

021"34576 ;$>1 E +7 7GN 5 e9>+'; 5 5 W 5 RW<z 5 e E :Ue%:G3.e%:G>.7U¯0 ·4 ý6$ E +R';i;3RWK;$>e:8 Ç +; 5 7n98&m

:; 1<=3 :8W3t]+Wî]RW<< 5 e E :8e:8J9g;>'WiMm>@? :BACA ]RW<< 5 e E :8e:8 5 :8M E >RK;) 5 7`RWîK;$>e:8 Ç +; 5 7 ønm : åED ; :; ](RW<i 5 e E :8e%:GJ;$>+.WiM«020&0 E +R';0t+M 5 ';+e%:G Ç +; 5 7y 02+C½^Wi< 5 e E :Ue%:G E :87G'eLV E +Re; 5 0; Ç eKS+T 5 ;;V%'eKKp E ( 5 W RWî7G( E E Y%R

1>W E +RK; 5 5 7 Y%RM'Y%R>7»+78 :G>7GVg+: 5 RW Ç W ;3M'.e9Lù\n\rE T 5 5 e E :Ue%:G E

78> 5 e9NK; E t+M 5 °%I1 4`4 ú V 5 RRW¨¦ >U9Í E E VLY%R E +781L7U Ç eM''_>7 # 5 e E :Ue%:GC?¬LMKI1%7Ul7±t:8W3t]+W]^78> 5 e9NK; 5 W 5 RWib 5 e E :8e%:8V%e 5 + E5 VRWi78¦ >7I>eK)RW 5 $v*: 5 C

¤ E K;$+e%:G Ç >; 5 7G E(E T 5 ;$ Ç eK; 5 5 W 5E +e; 5 'eKK; 5%E 5 7RWiM.+:G7UV E >RK;z 5 7M':G7U Ed5 R#; â .: 5%E CZj 5 78WR$:8.M'._N; 5%E ; 5 E : 5 º+e EGF » ¸ÌÇÇ&¸· F¾ç¼ç»¼åÇ 7U;$ Ç e'7 ¼¾¸½ÌÇ C? E8E E : 5 º+e E eT 5äE T 5 R$:G'M'._N; 5%E eÍ7UWi­:8'>#;ÍM.'eRL>W

X++VyW< E E +781>W« 5 W 5

Rg'M''7G E e-;$ Ç e'S>T 5 ; 5 78¯78 5 ·»A@CZ= 5 :8#:8W3t]+W Y%RäMKI178 E 5 W 5 ý V¥LUV:UVP+ E W« 5 W Í;$ Ç eKS+T 5 ;3K;$+e%:G Ç >; 5 7G E C ¤ R E *vVtY%Re; 5 RWiz;$ E8E E M'I17U EL78>Fe(+e%:878;V>M'(+ E »:8e: 5 5 WË(; Ç eKS+T 5 W 5%E :878;»e%:G+78 5 78W)>e%:Ga;$aMKI17878 E +781I;3Y%Re%: 5 5 W¨); Ç eKS+T 5 ;(K;$>e:8 Ç +; 5 7NV$+7UeL; 5 RWi<;$RM')'e:8+7878:8S+T 5 C? E8E a] 5 + E5 +W YRF7GN E W 5%E ; Ç e'7kRWiJ78 5 7GK;;$@`'e;$K+7ZY%RM; EZ5 tS È E ;$+1E +7@ EGE RW<';Cd¤Ê°%I1 4`4 R$:G'M.'_>bRWi7G>7UJ E :8e%:G E .W<M' E [3;$ Ç e'S>T 5 Y%R»78>++778.W<>.7 5 e 5 7UYR.1 5 C v v E +7U­0R$:G'M.'_>;)e 5 + E5 ;$b;$RM')'e%:G+7878:US+T 5 C2 ReL; 5 9­ 5 + E W<+e%: 5 ;3RWiÍ>;$>'z;#>e%:G7U;# 5 W«RW ; 5%E : 5 º>e E ; Ç eK; 5%E

e 5 78Y%R'1 5 C v vV 5 ·»A78> 5 e9>a EGE J+;+K( 5 W 5 RW: 5 º+e<`7 5 ;$R_`RW 5 $v*+: 5 ; 5 :G' 5Ç É D VYR]RWi)+M' EGE J°I1<;$ Ç e';) 5 Wî E`E >R'e%:G E 1I7GK­I1> E

Page 66: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& ,o, !0i

i

i

i

i

i

i

i

o Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

? É Q2H2I\465 e%:G]>W 5 :8. 5 ; 5 : 5 º>eñ78> 5 e9NK; 5 C 4 ;¬RW©; 5E : 5 º+e E ;$ E +7G.: 5%Ee 5 7UYR.1 5 C v vJ 5 W 5A¼!J 5 R ¼¾¸½ÌÇ ]#;$ Ç e'; 5 eLMK E8E C'AÁ ³?A:?³ 5 W 5E +eL; 5 RWiz 5 e E :Ue%:Gb'e%:G>.7UC»· EGE 'WäV E R 5 e; 5 YR C'A6Á ³?A?³áÄb¼¾¸½ÌÇ ¦ 5 ; Ç eK; 5 5 W 5 1M 5 7FV+e%:8T 5 5 78> 5 e9N+76RW K;$+e%:G Ç >; 5 7>V 5 · A&'78­37 5 ;R_+'7RW 5 v*: 5 D 5 º+eRv<178K­I1+MìÉ KH :8+W 5 1M 5 7am

?¤BXD&Á/ » Q:DELÊBXD&Á/ C?>çLD2H » :DELD2H C?>çI ? E8E E 178'­I1+ E 'e;$K+WV>78 E pt>:G'1W<+e%:GV)M.'e9<< 5 M.Re<;$+e%:G7 5 ; 5 7UY%R.1 5 ;$>e%:G7U;V 5 e;$ E .eKK)5 e;$J:8+78W)'e 5 : 5 º+eä78> 5 e9NK; 5 m

;:?ËçÁê>MAQÁMDEI Oêz>;$>'ÍYR3¦ 5 ØM'';Í07GN 5 e9>+';Í 5 W 5 : 5 º+eBC fZ5 7(g$+W<M 5 V E >;$>'0ý702¦ 5 kM.K;zeä+e%:G7U;Í078> 5 e9>K;ä 5 W 5 RW ¼¾¸½/Ç Vt+e%:8T 5 EGE 17GK­I1>MP 5 e%:G]>Wî<+;$+K)M.K;V 5 R E vVý702­m

Ç É Dz:D ¹ ?MI ½^Wiä78¦ +7I+eLKÍ78 5 7G¯Ig$'W 5 : 5 º>e-78> 5 e9NK; 5 L¯ E +M'C m 5 · A.eL;eT 5 M.>Rie+e9RW 5 R:G7 5 : 5 º+e 5 R E ^ E8E `] 5 HM.:G'W 5 : 5 º+ei;J>e%:G7U;V+e%:UT 5E +R1M 5 7a]#c7± m

Ç É D!³NËD o &AMCÇ 6É DI ORW 5 e%:8; 5 7<7U 5 HM.:G'W 5 : 5 º+eQ E LNKM`78> 5 e9NK; 5e%:G E ;$ E :GCÌök*v^W< E ;$Ke%:G 5%E 5 W)>e%:8­78 5EyEG5 78 5 YR E T 5a5E : 5 º>e E E t>+' E C

? E8E E#5 v*: 5%E#E T 5 +e1'; 5E L7U 5 · m VF+;1+_Y%R&+M'e>+ E8E .:8,;RWþe 5 1 5: 5 º>e)L7UeM. E 7 E 'e%:8:8'>W<+e%:8^+e%:G7U;CZ¤ E +W< 5E 5 W 5 M'.e9L» 5 M.ReJ+WY%RL78>>W 5%E : 5 º+e E3E T 5 H$:8+ E 78Y%R E # 5E8E +W<H:8.7)W<+e E +e E e 5 + E5 ;Í+787 5EE .e%:8­:GK 5%E C 465 W>M. E V 5 · m 5 ;$J'e;$K+7F>WY%RJ 5 e: 5 ; 5 78Y%R'1 5 ;$ >e%:G7U;07GN5 : 5 º+eY%RJ1 5 M'< E 78+78 E6E 'e:U­:8'> E ;)M'.eR+WC

3.4 ComentáriosD W3t]+W\]FRWi»; E :G78.R'S È E ; 5 · A#78> 5 e9N+7 5E 5 W)>e%:8­78 5E ; 5 7 5 7UWia6: 5 W<7:8H:8R;$# 5 7G78:UÍ>W 78+MKS>T 5 z>M. E V[Y%R< 5 ;$ E +7NVÌ 5 7+g>W<M 5 V E .W<M' E W<+e%:Gi'e 5 p7U­prM 5%E CF= 5 :83Y%RRWæ 5 W<+e%:8­7G 5 eT 5 ]bRW¨.:G>W¨M']g$K 5 V 5 R E *vVeT 5 ;$+1 E >7^+e1'; 578 5 · m V@RWi1+_Y%R7UWi­:GK+;M.'eRL>W e>W E >Y%R+7<¦§_7G+¦ +7I+e+' 5%E 5 W<+e%:8­7G 5E CÌ?2e+W 5 ;$+78KV 5 E e0Wi 5 78'b; E M.'eR+e E V%:G] W) E W 5 be 5%EGE V%RW 5 W<+e%:8­7G 5 5 ;$#L78>>7 >W Y%RM'Y%R>7 5 e: 5 ; 5 7 5 7UWiVP 5 W 5 VÌ 5 7bg$+W<M 5 VÌe 5W<+ 5 ;$RW¨ 5 WieL; 505 Rg$78 E8E T 5

^¢gVZ%f ñ_&S&Q\=a Ñ(W _i=i_POf-`\f:_[7Sd:b\ W£` ó ~Ë=»JM'.eR+W

X++R:G'M.'_>W 5%E ; 5 E :G' 5E ;$^ 5 W<+e%:U­78 5%E C[¤ò78.W<+'7 5 ] 5 5 W<+e%:8­p

78 5 ;$»RWiyHeK+M''e9bY%R E ^'e'+'3 5 WRQ"Qà»1IL:G] 5Ç eLML;M.'e9CØ? 5bE >Re; 5 ] 5 5 W<+e%:8­7G 5 Y%R( 5 ;$ 5 e%:G>7a;.1+7 E E M'.e9L E JYR E (.eKK< 5 WSQUT0 :G>7GW<'e< 5 WVTWQLC·^W0 5%E@5%E :8. 5EaE T 5 :UW0L]>W +e 5 e%:G7U; 5%E +W°%I1CZ· 5 >e 5 e:8787@ EGE E 5 W<>e:U­78 5%E V 5e 5%EGEG5 · A.7U­ E 'W<M' E W)>e%:GJ.e 5 7U­prM 5E Cf 7Ui.W<M'+W<>e:U7 E8E <¦ Re 5 eM.K;;$be 5 ·»AdVt'7G>W 5%E R$:8.M''_>7 RWi 5 R$:G7U#+78 :8p

7 â'E :GK+0; 5 °I1 4`4 Y%R(] 5 5 e++.: 5 ;$J E :8; 5 CZ· K;$]>'0]YR( 5 >e 5 e:8787@RWi<+;$+KY%R<.e'+'RWÿ 5 W)>e%:8­78 5 Vy 5 7g$>W)M 5 RWXQUTGV 5 ·»AQ EGE ä 5 L>787J+W RW E :8; 5

Page 67: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& ,oo !0qi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ-,"x)Ü Ò»ð»ÛÌ×ÓX¿ñÛ/.10»×+ÎZÜ oo

;$.¦ +78+e%:GC^=^ EGE b E :8; 5 Vt E +;+K E M''; E eLT 5 :I+W 5 W< E W 5zE 'e Ç >; 5 Y%R0e 5 E :8; 5e 5 7GWiMØ; 5 ·»A@C?dMK E eT 5#E T 5 78> 5 e9NK; E 5 W 5 : 5 º>e E VW< E V E 'WV E T 5 M''; E b;$ E >7Gp:8; E VÌ:G]iY%R E iU9>R J +;+KäY%R)¦ NU9 5 5 W<+e%:U­78 5 C 2 Re; 5 E8E5 5 e%:8>V 5·»A-]J 5 M 5 +; 5 ;$(e 5 1 5 e 50E +Rz E :8; 5 e 5 7GWiMXV 5 e;$ 7GN 5 e9>+ 5%E : 5 º>e E E LN Ç +; 5E Cf 7U0>;3 E :8; 5 Y%R(R$:G'M'._N78W 5%E V$;$>1>W 5%E :G78.R.7aRWîe 5 W<C@¤ê E :U; 5 e 5 78WiMH

; 5 ·»Az:8+WRWe 5 W)a78>; Ç eK; 5 Y%Ra] ¾¸MJ¶ » Ç CNödW 5E V>e:UT 5 VM.:G+7U7 5 e 5%EGEG5 · AdVI¦§p_+>e; 5 5 W Y%RVN 5 U97yRWYQZTGV 5 ·»A#W3R;$kL7U6RW E :U; 5 U9W<; 5K>ç@C?:CQ:D o >=>³D? Cl E8E5 ](¦ +.: 5 5 Wî E +R.e%:G;$ Ç eKS+T 5

9:;%<:=?>=A@CBu®F ÎÒU9 ­\ ×_ lbR lz­ > J Y K6Z Y Z?H6G LQ;?>Q> G&HKd ë

= 5 :G&Y%RR$:8.M''_>W 5%E RW[ù e 5 E :8; 5M¾¸MJ¶ » Ç VZ 5 E Y%R+78+W 5E Y%R 5 'e â 5; 5 5 W<+e%:U­78 5,E *v,'e 5 78; 5 &Y%R 5 · A EGE 7U 5 E :8; 5>ç|C?:CD o >X>­D? CfZ5 78]+WV$ E8E 3W0R;eLS+<;$ E :8; 5 5 ;$ E +7a¦ >H:U<+W¨Y%RM'Y%R>7`+ E W<>e: 5 V 5 7`g$>W)M 5 Ve<;$ Ç eKS+T 5 ;$RW: 5 º>eä 5 W 5

òK\"] M^ U

õP_M` ±7a U YXQbh=_ U*_b` ±7a ñ \6$ Ì=^ EGE + EG5 V E 5 ·»Aê E :G'1>7<e 5 E :U; 5M¾¸MJ¶ » Ç >e 5 e:8787)>;$>'dc³$ü±L+VF E :8]78> 5 e9NK;0 5 W 5 RW: 5 º+edef ¼ » ¸ 5 · A E8E 078 5 E :8; 5 ef ¼ » ¸Ê ¾¸ C= 5 > EG5 ; 5 e 5E8EG5 5 W<>e:U­78 5 Vy¦§M.:8 E t>+ Ç +7 5 YR 5 ·»Añ;+1<¦§_+>7e 5 E :8; 5

>ç|C?:CD o >X>­D? CÈ2 R+78+W 5E Y%Ri:GRL; 5 Y%Rͦ 5 73M'K; 5 e EGE # E :8; 5&E *v#v 5 ; 5 ¦ 5 7Ut+M 5 ·»AdVL:G]bY%R E *v)>e 5 e:878; 5 RWgT/QñYRJ:G+78W<.eL 5 5 W<+e%:U­78 5 b 5 M 5 + 5 · A,;$1 5 MH:U3e 5 E :8; 5 ¾¸MJ¶ » Ç C%jL_>+W 5E EGEG5 5 W

9:;%<:=?>=A@CB ¬F ä > J Y K6Z Y ZbHG LQ;?>> G&HK ÎÒU9/­\ ×_ l Rlz­ðÞQïÍ%èd ] ä )å e ë

û» Ç e'W 5E VØe EGE < E :8; 5 V 5 YR<;+1 E +7'e 5 7U; 5 Vy 5 7bW<+ 5 ;$iRWhù FC fZ5 ;$+p7 â W 5%E :UW0L]>W ;$ Ç e.7<RW÷ ø ùüûúý©+W Y%RM'Y%R>70 E :U; 5 V@ 5 W 5 ¦§_>+W 5E e 5 E :8; 5¾¸MJ¶ » Ç C 2 R+78+W 5E Y%R 5 T/Q¦§S+ 5 ·»Añ1 5 M.:873 5 E :U; 5t¾¸MJ¶ » Ç zY%RzY%RM'Y%R>75 R:G7U)>;$>' E *v)'e 5 78;CZ·;$ Ç eKS+T 5 ¬ËÒ,ÓÍ]R$:G'M.'_>;)7U0¦§_>+7 5 + E W)>e%: 5 5 WY%RMKY%R+7(+78 :G>7GbY%R3eT 5 E :G*v#+e%:G78 5%E 5 M'U9:G E C f[5 7»+g>W<M 5 V­¬ËÒ ÓÍ.7U­#> E 7 5 WæYRLMKYR+7 >7U:G+783;Í+e%:G7U;#Y%R0eLT 5ÍE *vÍRW ; â .: 5 ¬ËÒ : Q: Ó = '7U­Í+pE 7J 5 W YRLMKYR+7J+;+KzY%R)eT 5 5E8E Rä; â .: 5%E CbOê'W) 5 7G:8e%:G<e 5 :U7JY%RVBeLÍe 5%EGE

Page 68: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& ,o !0i

i

i

i

i

i

i

i

o Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

;$ Ç eKS+T 5 ; 5 5 W<+e%:U­78 5 V E +;$+K E T<QÑ:UW0L]>Wî¦ 5 7GWiWîRW¨> E W<+e%: 5 5 W 5 p;$7UT 5 ¬ËÒ ÓtC fZ5 78]+WVP1M'0Í7G>7U#;$0Y%R E >W<7G)#Wi 5 7J+;$+Ki 5E8Eâ 1>MØ]0R$:G'M'._N;Íe 5+ E W<+e%: 5 C 465 W 5ä5äE +Re; 5 ;78T 5 :G>W t+eL E RW >7U :8+78VP+e%:UT 5 5 7GN+7(+;$+KiTWQLV 5 + E W<>e: 5 ] E +W<78(¦ +.: 5 e 5 78'W)>.7 5 ;$7UT 5 C·\;$ Ç e'S>T 5 ;$b 5 W<+e%:8­7G 5E ;$RWi)M'.e9L E ¯<](¦ +.:8i;$Wie+'78 E +W<+M'9e%:8

9:;%<:=?>=A@CBEDbsF ÎÒU9 ­\ ×_ lbRRlz­ ^ Z?H <Y G Y ZbH6G LQ;>> G&HKd ëe ä ^ ZbH <Y G Y Z?H6G LQ;?>Q> G&HK ÎÒb9Ì­g ×h ä élbõ H lölbõ%:l ­üÞïÍ&èi ] ä ) k ë

= 5 :G Y%RVe E8E »> EG5 VRW Ç eMt;$»M''e91 5 M.:8 5 · A& 5 E :8; 5澸J¶ » Ç C·`Y%Rt1M'»78+7U3;(7G 5 78';;$(7U 5E ;$7 È E Y%R E T 5 ;$ Ç e'; 5E e%:8 E CZ· EGE 'WäV E +;$+K E

\n5 R

\reLÍ>e:878;z 5 ;$>7GKW > E 7 :8e%: 5 5 W 5 78.W<+'7 5 Y%Re: 5 5 W 5E +Re; 5 L;$7UT 5 V

Wi E V$L>M'<7G 5 78';;$V 5 > E W<+e%: 5 ](¦ +.: 5 5 W 5 78.W<>.7 5 C

3.5 Recuperação de erros léxicos½^W >7G7 5 M.]+gK 5&5 5 787GiY%Re; 5 M'RW<>;$>'&YRÍ7GN<e>e%:G7U;eT 5 5 ;$ E >778> 5 e9NK; 5 W 5 RWÿ: 5 º+e¬1I­M.K; 5 C fZ5 70g$+W<M 5 V E #:8.1+78W 5%E e&+e%:G7U;&&+;$+Kjjjlkmk*jj V1+78+W 5E Y%R 5 · AYR^;$ Ç e.W 5E 7UJJM.'eRL>W

X++'78­ 5 e:U7ZRW

+787 5 CÌ=» E8E a+ E5 V 5 ·»Az>78; 5 t+M 5 °%I1 4`4 : 5 Wi^RWi(:G.:GRL;$67U;'>MXVIY%RF]FM'eS+7ÌRW+787 5 ; 5 :8. 5tÇ É D6ÊÁË6¸ËË Ë C 465 W 5 eLT 5 5 ;$+W 5%E :878:876 E8E +787 5 V 5 Y%R 5 5 787G`]JY%R+M'^]`7 5 L; 5 :8] 5E e â 1+ E Wi E M.: 5%E ; 5 5 W<'M'; 5 7NVY%R`:8+7U­JRW:8]+78W<.e 5 e 5 78WiMXC? E8E ä 5 W) 5 7G:8W<+e%: 5 W0R.:8 E 1>_+ E eT 5 ]ä;$>Y%R; 5 C¹ 5E :87 â W 5E VØ 5 7)g$>W)M 5 Vd;$Y%R 5 ·»A +W<.:G EGE ÍRWi-W<+e E +W´;$z>7G7 5 VZ EGE E8E i 5 7)+.Wi&;->;$>''e1­M'';& 5 e%:G'e%RL E8E J 5 Wî<e­M. E Cf 7U E8EG5 Vk;$+1+W 5E +1.:870YR 5 · AÊU9>Rz';+e%:G Ç +73RW´>7G7 5 Cû +1+W 5E E p

t> Ç >7#+ E W<+e%: 5%E :UW0L]>Wþ78 E +;+K E Y%R E T 5 .e1­M''; E ;$>1+W 5%E ¦§_+>7 5:G7U:UW<+e%: 5 ;$+787 5 ; E *v; 5 78¬ E8E E +;$+K E C ödW 5E V^+e%:UT 5 V^:G+e%:U7';+e%:G Ç +7Y%R E`E T 5)5E + E5%E +W¨Y%RJRWii>;$>'0 5 ;$7 5 1 5 >7FRWî>7G7 5 M.]+gK 5 C·´78.W<+'7UÑ;$>M' E ]Y%Re; 5 :G>e:UW 5E 'eKK7 5 7GN 5 e9>+.W<+e%: 5 ;$RW©: 5 º+eê

;$>7UW 5 pre 5%E 5 WÿRW´+7U:G>7G<Y%R#eT 5 + E 5 W e>e9RWi; E g$78 E8EÈ E ;$Í+pE W<+e%: 5 ;$ Ç e'; E Cû»>1>W 5%E Vk>e%:8T 5 VZ E8E 7 EG5 78 5E +78 :8+78 E ;&+e%:G7U;&:G]äY%R+eL 5 e%:87G>W 5%E RWîY%RJ 5%EGE E >7aR$:G'M.'_>; 5 eRW¨> E W<+e%: 5 C fZ5 7F+g$+W<M 5 V E :8.1+78W 5E +;$+K ~= XX # # 7= ^gc`a eJ>e:878;V 5 ·»A;$>1`78> 5 e9N+7 5 : 5 º>ep0 ·4%5 ^L7U7 5 >e 5 e:8787 5 7G'W<+'7 5nj Cd=»<78¯Ig$.Wi0g$>+RS+T 5 ; 5 · AdV$:8+W 5E RWî+787 5 V 5 Eoj eLT 5'e'+'e+e9RWÿ;$78T 5 ;$z> E W<+e%: 5 Czû +1+W 5E VØ>e%:8T 5 VØRM'7: 5 ;&+;$+K:8]ÍY%RRWæ+78 :8+781I­M.K; 5äE vi+e 5 e%:G7U; 5 Ve 5 + E5 z E C ·78¯Ig$.Wi<g$NRS>T 5 78: 5 78e 5: 5 º>e C

Page 69: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& ,oq- !0i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ-,"x)Ü Ò»ð»ÛÌ×ÓX¿ñÛ/.10»×+ÎZÜ oq

f 7U`';+e%:G Ç +7Ø EGE k:8. 5 ;@+787 5 ¦§78+W 5EÌ5 + E W<+e%: 5 ;d: 5 ; E E >;$>' E ¦ 5 78Wi; E 5 7d+78 :8+78 E Y%R`eLT 5 .eKKWe+e9RWi(g$78 E8E T 5 ;a> E W<+e%: 5 78(+;$+K E 1­M'K; E Cf 7U# EGEG5 V 5 M'9W 5%E E +g$7G EGEGÈ E R E ; E eze 5E8E #;$ Ç e'S>T 5 01+W 5E Y%R 5%E : 5 º+e E m l f@E ; Ç eK; 5%E e%:G>7G 5 78W<+e%:G E 'eKKW E +W<78J 5 7>

•RW<<M':878m

•RW¨; â .: 5 m

•RW<i E Lm

•>7U:G+78 E E t>+' E 5 W 5qpsrtvuw

< >+ m

•RWî E S 5<5 R;$+M''W).:8; 5 7^;M.'e9C

· E8E 'WVd;$ Ç e.78+W 5%E RWi+g$7G EGE T 5 Y%Rä+ E Í 5 W´ E >;$>' E 'e1I­M.K; E C fZ5 ;$+W 5%E;$ Ç e'7>V$>e:UT 5 V 5 : 5 º+eYRbU9WiW 5%E ¼½xE¶ » ¼¾¹ » ¸Âç¼ ¶ »& 5 W 5

9:;%<:=?>=A@CBEDDF ä ÒUÓØÍQÒUÞ6ÏUÔ6Ò%Ù%ÍQÌ­\ yy)El=l ¨ lVlöolÍl ¨ l%+lö_ l?sl ¨ l ¬ löd lbõlQlöe ly?lög l%löh lElöi l lök lb×löFrq l ë löFuF lÕ?löFr\ lö?löFr_ lBlöF|d l?`löFre l löFrg l ä löFh lñlöFri l?flöFrk l ¨ lö\uq l lö\F lbRlö\u\ l%$lö\u_ ltlö\d lbõ K lö\ue lbõ H lö\ug lbõ%:lö\h lbõ%al\ui Uf ¤ 5 t+7U; 5 7zÑR$:8.M''_>; 5 e E8E g$78 E8E T 5 7G>7G E >e%:8J78+t:GKS+T 5 t+M 5 W<+e 5%E RWi1+_C

? R$:G'M'._NW 5E(55 t+7U; 5 7l¬Í7Uz.e;'>7Y%R 5 > E W<+e%: 5 ])¦ +.: 5 Y%Re; 5ä5 +7U:G>7G;3+e%:G7U;3eT 5 E :8­3e 5 5 ev*Re: 5 ;$ Ç eK; 5 +e%:G78 5%E 5 MKU9:8 E C j ­V$'e;VRW 7 5 M'+Wi78 E +7[78 EG5 M'1%K; 5 CBO-Y%R 5 : 5 º>e ¼½xé¶ » ¼¾¹ » ¸Âç¼ ¶ » E >78­»7G+: 5 7Ge; 5 e 5 7GWiM'W<+e%:G67U

Page 70: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§Q¨X© ss%ªRQ«R ©%¬z§Q¨X© sC­s® §¨ n=Q< G Q® §¨X¯ 'si

i

i

i

i

i

i

i

o Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

5 · m Y%R<:8+7U­Y%Ri:G7U:U­prM 5 VB7 5 1I1+M'W<+e%:G)'e;$K+eL; 5 RWÿ+787 5E .e%:8­:GK 5 Vv­Y%Ri EGE : 5 º>e)eLT 5 78>+FeL7UWi­:8'>Ck¤ñY%R»Y%R>7G>W 5E ]»Y%R 5 ·»A:878:G^ EGE `+787 5 +W<H:8.eL; 5RWibW<>e E >W;$>Y%R;(YR(0+;+K.e1­M'K; E *v3.e 5 7U;VeT 5 U9>e; 5 5 · m Cf 7U0 E8E5 V;$ Ç e.78+W 5Eü¼½xE¶ » ¼¾¹ » ¸Âç¼ ¶ »-eT 5 5 W 5 RW ÷1ø ù û ýVWi E V E .WV 5 W 5

RWb1û ú Ìþo÷ ø ùüûúýbCa¤ ·»A+7U; 5 t+M 5 °%I1 4`4 .7U­:G7U:U7# EGE :G' 5 ;$: 5 º+e;$iWie+'78ä E t>KMXCÍ?@M.#eLT 5 ]i E8E ; 5 78 5 · m VÌWi E ]#7GWi_++eL; 5 i.7U­L78p>70eL178'­I1+M ³|NËD o &ACÇ É DQ ; 5 78¯Ig'W 5 : 5 º>eBC f[5 70+g$+W<M 5 Vke 5 + EG5 ;+;$+Kjjjlkmk*jj V 5 ·»AÑ'7GKi78> 5 e9N+7»RW«: 5 º+e E t>+'M jjjvkk*jj YR3eT 5 ] EGE ; 5 5 · m V$;$> 5 E V 5 : 5 º+e & Y%R»:G+WRWi37G+¦ +7I+e+'b 5 : 5 º>e# E LNKMLeE R)1I7GK­I1>M ³NËD o AMCÇ É D C·^M']+W ; E8E5 VP7GN E W 5E ¦§_+>7( 5 W Y%R 5 ·»A2>W).:8zRWi#W<>e E >W ;)>7G7 5 <Y%R

5 e%:G7 5 M' 5 e=HW)>7 5 : 5 :8M;F>7G7 5E M.]+g$' 5E +e 5 e%:G7U; 5E C f 7U^ EGEG5 V 5 °I1 4`4 L>7GW<.:G`Y%RJ+;(g$78 E8E T 5 ;$^> E W<+e%: 5 EGEG5 '+W 5E RWËLN;S 5 ;^¯$;$' 5 °I1(Y%R`]`g$>+R$:8; 5+;a1>_dY%R 5 5 7G78ZRW\+ E W<>e: 5 C D +78+W 5E VN+e%:8T 5 VI E >R'e%:Gd;$ Ç eKS+T 5 VNY%R6 5 W<M':Ue 5%EGEG5 · Ad

9:;%<:=?>=A@CBED ©F R := K =A;^ G ::;^PYQQv Z L%;^ R\ Î&9ÙÒ&ÍQ6Ï%Ó ­_ ×d ä ÒUÓØÍQÒUÞ6ÏUÔ6Ò%Ù%ÍQÌ­e yy)El=l ¨ lVlöolÍl ¨ l%+lög l?sl ¨ l ¬ löh lbõlQlöi ly?lök l%löFrq lElöFuF l löFr\ lb×löFr_ l ë löF|d lÕ?löFre lö?löFrg lBlöFh l?`löFri l löFrk l ä lö\uq lñlö\F l?flö\u\ l ¨ lö\u_ l lö\d lbRlö\ue l%$lö\ug ltlö\h lbõ K lö\ui lbõ H lö\uk lbõ%:lö_uq lbõ%al_FÚ Uf _u\ ×_u_ Î%¥6^ KG >ìB G ::/B|n: ZbHK Y H y?lE ZbHG líf ZbH n JK Ï^ K : G =b>ìB< G%K H[ ZbH6G yEAf

Page 71: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& ,o !<q$"i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ-,"x)Ü Ò»ð»ÛÌ×ÓX¿ñÛ/.10»×+ÎZÜ o

_d l ¨ Ò H p=Y Z&[ ^ K : Z?H <Sa; JQH[ ­íl f Z >=Q< G Õ_ue LQ; JQHK G v%::;%:ffÕ_ug ë_h ]_ui ä ÒbÓØÍQÒbÞ6ÏQÙ&ÓÎ%/­_uk lbõllyy)élbõ H lölbõ%:lölbõll élbõ H lölbõ%:l dq ×dîF Î%¥6^ KG >ìB G ::/B|n: ZbHK Y H y?lE ZbHG líf ZbH n JK Ï^ K : G =b>ìB< G%K H[ ZbH6G yEAfd\ l ¨ Î K : ZbH <cLQ; H ^ K = HKtN =^P=Aõõ H ­ l f Z >=Q< G Õd_ LQ; JQHK G v%::;%:ffÕdud ëdedg ë ¤Ë¯$;$' 5 E8EG5 +'; 5 5 : 5 º>e E LNKMBW 5%E :878iiW<>e E >W¨;$b>7G7 5 b'e78+W<>e:Ui

178'­I1+M³o ? » D ¹ ¸ËË Ë VNYR6¦ 5 ;$ Ç e';JeJMK E8E C'A6ÁÂÌÇ É D6ÊÁË V+ 5 7kW)> 5 ; E >S>T 5÷1ø ù û ý8þn²Aÿs8þ ûtV$W 5E :G7U;)e%:G>7G 5 78W<+e%:GC·ñ;$ Ç eKS+T 5 ; 5 : 5 º+e< E t>KM.e 5 78 5 78»:8W3t]+W 5 :G7U:UW<+e%: 5 ;$`RW E +Re; 5 :G' 5

;$6+787 5 M']g$K 5 VIK;$+e%:8 Ç >; 5 L>M 5 : 5 º+e E t>KM ¼½xé¶ » ¼¾¹ ½;Ç CG?dM' 5 5 7G78dY%Re; 5 RWi 5 e E :8e%:8 E :G78.e0]»'eKK;zù RWi)+;+Kb'e'+';b 5 7a E %ú VWi E eT 5 :G+78W<.eL3e%:8 E ; 5Ç eM@;äM'.e9LCÍ=» E8E #> EG5 Vy:8+W)p E iRW +787 5 M']g$' 5 VB 5 E eT 5 g$ E :G#> E W<+e%: 5 1­M'K; 5 5E8Eâ 1>MCz? EGE Í> E W<+e%: 5 ]Í; Ç eK; 5 VØ>e:UT 5 VÌe 5 : 5 º+e E LNKM@ 5 W 5E +e; 5 Y%RM'Y%R>7+;$+K0.eKK;0 5 7 E 3J:8+78W<.e;0 5 7^RW Ç W«;$M'.e9LC

3.6 Arquivos-fonte do compilador=»`L­'ea;$@; 5 ~`eM 5 ; E ;^>;$.: 5 78Jù±Q7SXS=TVU6WXWYXYXY«Z)[\&]^S7_`_=abS7\d^ËZ`\fNZg7dWa7\Y=[h=\X^aci@ZTXQXTúV 5 M'+.: 5 7d+eL 5 e%:87878­ : 5 ; 5%Ed5%E 7UY%R.1 5E p¦ 5 e%:GF7G>M':G'1 5EeJ .W<M'+W<+e%:US+T 5 ; 5 5 W<.pMK; 5 7`7Um~Jxx0Cd= 5<Ç eMÌ;b+;i+ â :8RM 5 VRWi E NS+T 5 5 W 5 E :8i;$ E +7G>1Y%R E`E T 55E 78Y%R'1 5%E 78+MK:8.1 5EVJ Y%R>M.> â :GRM 5 b 5 W 5 ;$>1+W E >7`R E ; 5E C= 5E Rt;$'78:G¯7G 5 92 4 Q9 VF>e 5 e%:G7Up E 5 7UY%R.1 5 L=üozzG 88 V6Y%R 5 e%:8]+W

;$ Ç eKS+T 5 ; 5 · A E :8R;; 5 e E :8-+ â :GRM 5 C f 7U,>787Íà78'W)>.7U,1+7 E T 5 ; 5 e 5%EGEG5 5 W<.MK; 5 7NV 5 M'+.: 5 7^;$+1(+g$>R:87 5%E`E >R'e%:G E 5 WieL; 5E

`^T X WT^di_&dK©X^&]7^`X`h=^[XM7óXóªZ3©X© ^&]7^ ² \fTbh&_&d ² \fTbh=_&d_&di7b\[ ~ Z ^di_&d7_[_&d^&S7\&d ² \T d:b=QXS ` c ~XXS° X[ñ:b=`d\i iS_f­i³Ñ ± [:`@Z² \T d:b=QXS ` ~XX __gEX^cb[ªÑ ± [:`|Z S T_ ©X^&]7^`X` YbS=Q¤[\^&dX=f_[7SiX\&d¤Q_7hT _X^&ab[7¤&d\f¦bh=_h=^[7M7óXóeZ6©X©RZZ£Z bh&_ ò \&ö_[XñXXd d=d\&d«Z ©X^&]7^ aX\X_i[\&S£_ b&iS«Z_bhXh£`d_X^&S7_¤\[_eZ bh&_ ^&di_ `_TXS:b\[ªZ6©X^]7^ a7\X_i[\S_ b=iS«Z_bhXh£`d_=^&S_¤\[_OZ bh&_ ò \&ö_[«Z6©X^&]^ a7\=_i[\&S£_ b=iS«Z_bh=h¡`d_X^&S_¤\[_eZ bh&_ Q° bfTch&_ ² Q^&d ° SXd_&^f1Z3©=^]^ a7\=_i[\&S¡_ b=iS«Z_bhXh£`d_X^&S7_¤\[_eZ ^&dci_&d¤_[_&d^&S_&a£i:`X`_iXi&hXh Z`^T X ©X^&]7^`T^&di_&dWXh=^[7M«Z6©=^&]^

Page 72: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& !<qi

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

¤¨78.W<+'7 5 7 5 + E8E 5 7UY%R.1 5 5 W´-;$ Ç e'S>T 5 ; 5 e 5%EGEG5 ·»AÊÍ+7U 5E 7UYR.1 5E 5 W 5 ¯$;$' 5 °I1&; 5 · m ; 5 · AdVdM']+Wþ;$M'Re E)5 R$:G7 5E 7UY%R.1 5E R$g$'M.K78 E C2¤E +Re; 5 5 Wie; 5 5 W<'M'&MK E8E C'AÁ #: 5 ; E E +M' EGE E Y%RÍ+MKR$:G'M'._NC 465 W 578 E RMH:U; 5 V 5 $:G]>W)p E 5 7UYR.1 5 L=ü±L-Y%R 5 ;$ E +7#+gNR$:U; 5 R$:8.M''_>eL; 5 RWiWi­Y%R'e)1.7G:GRMB°I1C? E8E 78'W)>.7Uä1>7 E T 5 ; 5 5 W).MK; 5 7 E5 W<+e%:G<MI#+e%:G7U;VBK;$+e%:G Ç > 5%E : 5 º>e E

W 5E :G7Up 5E e E â ;pr;$7UT 5 C¬?dM'++.:8 5 PS+T 5 .)$ VaY%R7GN;$R_Y%Re%:GK;;$;$'e$¦ 5 78WiS+T 5 W 5%E :878;Ck¤òM'+.: 5 7d 5 ;$`+g$L>7G'W<+e%:87 5 7 5 7UWiVR:G'M.'_>e; 55 7 5 7UWi+ü±á8VZ 5 M 5 +; 5 e 5 ;$.78:8¯78 5 !19Lz;L­'e;$Í; 5 ~`eM 5 ; E(5 RBV[.eL;V[ 5 W 57 5 78W<ü±c*.6 . L8üG"á8Y%R 5 e%:G]>WîM'Re E +787 5%E M']g$K 5%E

`^T X ©X^&]7^T^&di_&dªZh=^[7£=iQ\&dXS ZXZ6WiXi^fTch=_7Wg:b[7SXd_&_eZ 7óXó ² \fTbh=_d_di7b\[ Z ~X= _X^&ab[7¤&d\f¦bh=_ ZXZ6WiXi^fTch=_i&Wgb[7S&d_X_OZ ZZZ`&h=^iXi `&h=^iXi gb[XSXd_X_ õ ±$ M^ ò ~ 6`&h=^iXi `&h=^iXi a7^&S7^ õ ±$ ^ ò ~ 6b[7S b'[7S ab^ õ ±$ M^ ò ~Ñ Ñ f:_i õ ±$ M^ ò ~Ñ Ñ ^[\ õ ±$ M^ ò ~Z=ZXZSXd_=_T7d:b[XS õ ±Q$ M^ ò ~ =~ õb[7SE`\[:iS^[7S ~ = ¯d_&S&7d=[ d7_&S=7d=[ ~X õb[7SE`\[:iS^[7S ~ ¯Ì Ì Ì Ì õ \ d\Xd^fôi:`X`_i=i&chXh ^[^Xh 7_=aeZ`^T X ©X^&]7^T^&di_&dªZh=^[7RZXZ6WiXi^fTch=_7Wg:b[7SXdX_X_c_d=d\ch=_ b&`\eZ \XSa b[_ ± [7]^7hba¡iSXd:b'[77\X[7aªUóa b[_ ± [7]^Xhba£iS=d:b[77\X[aªUóa b[_ X ° S=d:b[7`\[:iS^[XSQ^i^ # [VU h=_f_[7S\©=^£_ b=iS_

Page 73: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& " !<q/i

i

i

i

i

i

i

i

Capítulo 4Análise Sintática

=^ E :8<> â :GRM 5 5 W<NS+78+W 5%E # E :8R;7 5 5 7US>T 5 b; 5 5 W<'MK; 5 7>VyY%R3] 5 eM..pE ; 5 7 E 'e:U­:8' 5 CiO\+M'#Y%R+W eM. E 5 7 5 78W<ͦ 5 e%:8i)1+78 Ç + E < E :8iL>7:8+e+ 5 ReT 5¯J M'.eR+W´;$ E v;C-O\:UW0L]>W E #L7U E ;$+Wi E ¦§ E E ; 5 5 W<'M'; 5 7NV 5 W 5 e­M. E E >Wi®e%:GK+-ä->78S+T 5 ;$¯$;$' 5 VkW<N;$'e%:G- 5 e E :G78RS+T 5 ;­781 5 7GE .e%:8­:GK+C[=» E :G»> â :GRM 5 1>7G>W 5EkEG5 W<+e%:G 5%E E t> : 5E 78+MK+ 5 e; 5EËJ eL­M' E E 'e%:8­:GK+7 5 78KW<+e%:G);$.:8C)· 7GNRt+7US>T 5 ;$)+787 5E <ä 5 e E :G78RS+T 5 ;ä­781 5 7G E 'e:U­:8'> E +7UT 5:G7U:U; 5%E e 5E > â :GRM 5E`E +R'e:8 E C?kg$ E :G>W ;$'1+7 E E :8]>e'> E L7U E z.W<M'+W<+e%:U73RW´eM' E ; 5 7 E 'e:U­:8' 5 CödW 5%E

Y%R6e 5E 5 eL+e%:8787e%RW<:G]>+eK+U9Wi;;$ä;$ E >e;$+e%:8#7GNR7 E .1Cz? E8E :8]>+e'>]# E :Ue%:G E 'W<M. E #PLg â 1+MXCO\:8W3t]+Wÿ Ç +.>e:8#e 5&E +e%:8'; 5 ;$ÍY%RÍRWÿeM' E ; 5 7E .e%:8­:GK 5 5 e E :87GR â ; 5 R E e; 5 E8E ^:G]>+eK+»:G+eL;$F E +7[78­'; 5 5 eM. E 7Ì7 5 7UWi E C l e.pKM'W<+e%:G3.78+W 5E E :GR;7J 5 W«Wi E +RK;; 5Í5 Y%R3])ÍeL­M' E 3;$ E ++e;$>e%:Gb78>+R7 E '1ICû + 5 E 1>7G>W 5E 5 W 5 'W<M'+W<+e%:87@RWeLM' E ; 5 7 E 'e%:8­:8' 5 ;$ E >e;$>e:8`7GNR7 E .1 5 R:G.pM'._Ne; 5<5 °%I1I 4`4 C

4.1 Análise sintática descendente recursivaû(;<RWi͹JA 4 VLie­M' E E .e%:8­:GK+< E N;<e E8E #¹JA 4 5 ;$ E +7» E ++e;+e%:G 5 R; E p>e;$>e:8C)½^W eM' E ; 5 7J E +eL;$+e%:G)7GRL 5EJEGâ W0 5 M 5%E ;Í>e%:G7U;z7Ui¦ 5 7GWi7 5%EEGâ W0 5 M 5%E eT 5 :G>7GW<'e E Wi E ;$ E :8e%:G E ; 5-EGâ W3 5 M 5 .e'+'MF;-¹JA 4Ë5 RÑYRÍ E :8T 5 +We â 1> E 'e$¦ >7G 5 78 E e E :87GR:GR7U;M'.eR+WCÍ°%­eeL­M' E i;$ E >e;$+e%:8V[7G:G+p E i; 5EGâ W0 5 M 5 'e'+'Md;¹JA 4 iR E +p E 0K;$+e%:8 Ç >7eä>e:878;ä E 5 e E :G78RS È E Y%Ri 5 7G78 E p 5 e;$>W JE 7 5 ;$RLS È E ;#¹JA 4 C½^W eM. E ; 5 7Z;$ E ++e;$>e%:Ga7GNR7 E .1 5 R$:8.M'._NJ E8E íHM.:G'WiJ E :G7U:G]>KCB?@M.`]`U9W<; 5

;$78>+R7 E '1 5 V 5 E i+; Eâ W3 5 M 5 eT 5 :8+78W)'eMÌ;#¹JA 4 5 7G78 E 5 e;$(RWi)¦ ReS>T 5 ù 5 R7 5 >;.W<+e%: 5 V 5 R0W<]: 5 ; 5 ú[78>+R7 E '1IV7G E 5 e E ­I1+M% 5 7k1+78 Ç +7 E `(+e%:G7U;`G+ E 6 5 W) E :G78R$:GR78<;YR+M'(eLT 5 pX:G>7GW<'eMXCödW 5E : 5 Wi7^ 5 W 5 g$+W<M 5 )7 5 ;$RLS+T 5 1 E :8)e 5 > â :GRM 5 $

"

Page 74: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& !<qi

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

〈classdecl〉 → “class′′ “ident′′ [ “extends′′ “ident′′ ] 〈classbody〉

½^Wii>e:878;iY%R3> E b 5 W« E8E <7 5 ;$RLS+T 5 ;$>1b'eKK7Gp E 5 W«#>;$>'ÄL VPY%R1>W E >RK;Í;3RWæK;$+e%:8 Ç >; 5 7>VP 5 ;$b:8+7JRWÐ8 03RWæK;$+e%:8 Ç >; 5 7 3:G>7GW<'e 5 W 5 5 78 5 ;-+M' EGE Vk78+78 E +e%:U; 5 e-7 5 ;$RS+T 5 t+M 5 eT 5 pX:G>7GW<'eM¥LC¬= 5eLM' E ; 5 7 ;$ E ++e;+e%:G<78>R7 E .1 5 V 5 W)]+: 5 ; 5 5 7G78 E 5 e;$>e%:G0z E8E Í7 5 ;$RS>T 5 ;+1>7GK+e%:UT 5

•1+78 Ç +7 E 5 7G¯Ig$'W 5 : 5 º>e;z>e%:G7U;z]¯ C m )¦ 5 7NVØ;$>1i 5 e%:G'e%RL7 5 W e­M' E C m 0eT 5 ¦ 5 7NVLRWæ>7G7 5#E .e%:8­:GK 5z5 5 787G>RBV 5 E i+e%:G7U;ieT 5 5 7G78 E 5 e;$J 7 5 ;$RS>T 5 E L>78;m

•1+78 Ç +7 E 5 78¯Ig$.W 5 : 5 º+e&]äüGXC m 0¦ 5 7>VB;+1< 5 e%:G'e%RL7J 5 W ze­M' E C m eLT 5 ¦ 5 7>VLRW +787 5#E .e%:U­:GK 5i5 5 787G>RBV 5 E i>e:878;<eT 5 5 7G78 E 5 e;$ J 7 5 ;$RS>T 5 E t+7U;m

•1+78 Ç +7 E 5 7G¯Ig$'W 5 : 5 º>e<]8& : C m »eT 5 ¦ 5 7NV;$>1^ 5 e%:G'eR7@e­M' E V 5 E EGE #L7G:G0;Í7 5 ;$RS>T 5 ] 5 P 5 eMC m 3¦ 5 7NVB;$+131+78 Ç >7 E 5 : 5 º>e E +R.e%:G0]RW üGXC m )¦ 5 7>VB;$>1< 5 e:8.eR7( 5 W eL­M' E C m <eT 5 ¦ 5 7>VyRW +787 5äE 'e%:8­:GK 55 5 787G>RBV 5 E )>e:878;0eT 5 5 7G78 E 5 e;$ J 7 5 ;RS+T 5 E t+7U;m

•1+78 Ç +7 E 5 78 E : 5 ;i+e%:G7U;i 5 7878 E 5 e;$ 5 eT 5 pX:G>7GW<'eMªLC l E8E5 eLT 5] ¦ +.: 5 ;$'7G+:8W)>e%:G»t+M 5 W<]+: 5 ; 5 VWi E V E 'WV.e1 5 >e; 535 W<]: 5 ; 5 5 787G E 5 e;+e%:GJ Y%R+M'JeT 5 p:8+78W)'eMC

·\+;31+_JY%R 5 W<]: 5 ; 5 e>+ E8E .:8);$(RW: 5 º>ez;0+e%:878;V+M'J.e1 5 > 5 ·»A@VY%RM'9J¦ 5 78e>+ 5 : 5 º+eBC D +7 â W 5%E M' 5<E >W)>M.9Le%:G 5 7 5 78WibC'"C

9:;%<:=?>=Sª/BEDF p; Z&[ LQYQ=^^ [G LQYåyé\ ×_ Z a-y3L J :Q; j6G&H B K ¥%n G ``tÙ%ÍÎÎTRR K ; j6G&H LQ;&:: G&HKG mlULQY%=^^ld = H =Y G vCyEÕ RRAL N =?>=tÍQÌB L J :; j6G&H : G L G&O6GPH ;%p; K ; j6GUHe G Y^ Gg Î ZbHK = K6Z Lb::;%:yEÕ RRt;LQ;%:: G&JG ::;S^ ZbHKà%K6Z LQ;h Z a-y3L J :Q; j6G&H B K ¥%n G ``AÒUÞÓTRR K ; j6G&H LQ;&:: G&HKG Z&[GUHK6Z a Z L%= [ ;%:i = H =Y G vCyEÕk G Y^ GFrq Î ZbHK = K6Z Lb::;%:yEÕFuF Z a-y3L J :Q; j6G&H B K ¥%n G ``TÔQÓQÞ6Î6PRR K ; j6G&H LQ;%:: GUHKG l G v KG&H[ ^lFr\ ×Fr_ = H =Y G vCyEÕF|d Z aãy L J :; j6G&H B K ¥%n G ``MÒbÞÓXRR K ; jG&H Z&[G&HK6Z a Z L%= [ ;&:Fre = H =Y G vCyEÕFrg G Y^ GFh Î ZbHK = K6Z LU:Q:;%:CyEÕFri ëFrk L%YQ=^^ O ; [ ¥CyEÕ\uq ë

Page 75: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& / !<qoi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ#x)Ü»Ò ð»ÛÌ×ÓX¿ÊÓ×*Ò0ÔLð^Ô[×+ÎZÜ /

·Ê17GK­I1>MOo ËåÇ É D 5 e:8]+W E +W<78 5 HMH:8.W 5 : 5 º+eÍ;+1 5 M.1K; 5 t+M 5 · AÑù AAMCD ¹[ú C· 5E )'e%1 5 +7 5 W<]: 5 ; 5 o C'A³³EHD o C Vªo ËåÇ É D v­ä 5%EGE R 5 : 5 º>e- 5 7G78 E 5 e;$>e%:G< 578.W<>.7 5»EGâ W0 5 M 5 5 787G E 5 eL;$+e%:G6^ E8E deT 5 p:8+78W<.eMVNe 5 + EG5 V 5 : 5 º+ebY%RF;$+16 5 7G78 E p 5 e;$>7 J MKI178`7L CZ? EGE 5 M â :8'>b]^Wie:8';b 5 U9LWi7Gp E 5 W<]: 5 ; 5 o C'A³³cB H< V 5 E o ËåÇ É D v­ 5%EGE R 5 : 5 º+eàY%RÍ;$>1#> E 73 5 W 5 .e â 5 ;7 5 ;$RLS+T 5 ;Y%R+M'eT 5 :8+78W<.eMCOà'W) 5 7G:8e%:G^e 5 :87@Y%R 5 : 5 º>eiM.K; 5 eL+e%:G7U; E >7G1FL7UJ.e;'>76Y%RM 5 >W<.e9 5

E +7 E >RK; 5 e 5 7GN 5 e9>+.W<+e%: 5 ; 5E 7G¯Ig$'W 5E : 5 º>e E C[½»W<b1+_ YR»RW : 5 º>e0¦ 5 LM'K; 5;Í+e%:G7U;<)+ E ; 5 5 W«M.RW Eâ W3 5 M 5 ;$0RWi#7 5 ;$RS>T 5 VLeT 5 9­# 5 W 5 78:G7 5 N;$+7NV+ E5 M'RW : 5 º+eä 5E :G+78 5 7aeT 5 5 W3'e 5 Wî)7 5 ;RS+T 5 E 5 M'9K;C fZ5 7`g$>W)M 5 V$e7 5 ;$RS+T 5

〈classdecl〉 → “class′′ “ident′′ 〈classbody〉 |“class′′ “ident′′ “extends′′ “ident′′ 〈classbody〉

E 3R$:8.M'._N78W 5E 5 : 5 º>e&;$)+e%:G7U;078i¦§_+>7 5 + E W<+e%: 5 5 Wæ#7G'W<+'78Í7 5 p;$RS>T 5 V+e%:UT 5 :G>7G>W 5E E 5 M'9'; 5bE >R'7d E8E J7 5 ;$RLS+T 5 V^>e%:G7U; E YR^ 5%EGE RW 8 üG`eLT 5 5 ;$>78T 5#E >7`7GN 5 e9>+'; E Cd?ñeM 5 W)>e%:GV E E 5 M.9+78W 5%E E >Re;<7 5 p;$RS>T 5 VeT 53E +7UT 5 ++.:8 E >;$>' E@E +W 8& :^üG&cC fZ5 7G:8e%: 5 V78> E W 5E :G+7FRK;; 5 5 Wî E 7 5 ;$RS È E Y%RJR$:G'M.'_>W 5E e< 5 e E :87GRLS+T 5 ;$JRWîeM' E ; 5 7a;$ E >e;$>e:8J7GNR7GpE .1 5 C· E 7UWi­:GK+ E Y%R0 5 ;$>W E >7»R$:8.M''_>; E eÍ 5 e E :G78RS+T 5 ;$3RW eM. E ; 5 7^; E +ep

;$>e:8378>+R7 E '1 5#E T 5 U9Wi; E ;$0AØA@ù"Nú C¤Ë78.W<+'7 5 A E .e Ç +iM'¦ :(: 5 7G'9%:»0.eL;$'>Y%RJbM'+.:GR7U0;b+e%:878;b] ¦ +.:8);0 E YR+7U;7800;$'78+.:8C@¤ E +Re; 5 A E .e Ç +3M.+¦ :M'.eN7J<.eL;$'>YR E +W<78 5EGâ W3 5 M 5 eT 5 :G+78W<.eLMkY%R< E :G'1+7JWi EyJ E YR+7U; E +7U­78> 5 e9NK; 5 78.W<>.7 5 CJ? 5 eXHW<+7 5 "0.e;'>zY%R 5 eXHW<+7 5 ; EGâ W0 5 M 5%E ;0M 55 º9N;eN E8E ­78 5%E ]i"V 5 R E *vVLY%R E b 5 e9>++e; 5 L>e E RW EGâ W0 5 M 5 ;<>e%:G7U;<] 5E8Eâ 1>M;$NK;$.70YR)7 5 ;$RS>T 5 R$:8.M'._N7NC#=»7 5 ;$RS>T 5 .:8; E >7GKW e> EGE ­78 5E :G7I EbEGâ W0 5 M 5%E78 E ;$NK;$'7»Y%RMy7 5 ;$RS>T 5 R$:G'M.'_>7>Cf 7UÍRg'M''7 eä 5 e E :G78RS+T 5 ;$)RW eLM' E ; 5 7 ;$ E ++e;+e%:G)7GNR7 E .1 5 VP 5E :GRW<p E

5 e E :G78R.76RWiJ:8L>M'378>;$.:G'1CZ? E8E J:Ut+MKb 5E8E RRWibM''e9bL7U+;eT 5 p:8+78W<.eM;3¹JA 4 »RWib 5 M'ReL7U+;J:G>7GW<'eMXC m `:G'1>7GW 5%Ed5 eT 5 pX:G>7GW<'eM ú 5 :8+78W)'eMV»e, 5E 'S>T 5

A × a;+1>W 5E 5 M 5 +7zYRLM»]-,7 5 ;RS+T 5 YR-;$>1+W 5%E R$:G'M'._N7 E V

5 :G>e%:878W 5E 78> 5 e9N+7 ú Vy>e 5 e%:G7U78W 5%E eLÍ>e:878; 5EGâ W3 5 M 5 C fZ5 7(+g$+W<M 5 V E :G'1>7GW 5%E

S → aSAb | bAaA → bAb | c

:G>7G>W 5E E >R'e%:G(:8L>M')78>;H:8.1

D +78W<.eL E= T 5 p:8+78W)'eM

a b cS S → aSAb S → bAaA A → S → bAb S → c

Page 76: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& , !<qi

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

· E 5%E KS È E 1_>' E e,:Ut+MK,'e;$K+W Y%R& EGE :8+78W)'eM»eT 5 5 ;$7GN>7ie 5'e â + 5 ; 5 eT 5 p:8+78W)'eMC m `:G'1>7GW 5%E W< E ; 5 Y%R^RWiJ7 5 ;$RS+T 5 +WM'RWi( 5%E KS+T 5 ;:8L>M'V>e%:8T 5 0¹JA 4 eT 5 5 ;$ E >7@R E ;beb 5 e E :G78RS+T 5 ;$^RW eLM' E ; 5 7d;$ E >e;$>e:878>R7 E .1 5 5 WËRW HeK 5bEGâ W0 5 M 5 ;»M 5%5 º9N;yC[sR.:8 E 1>_+ E V 5 78]+WV 5 ;$>W 5%E MH:8+7U7i¹JA 4 ;$(¦ 5 78Wi))>M.'W<.e7` E8E E 7 5 M'+Wi E V E >W¨MH:8+7U7`)M.'eRL>W >78;C½^W\+ E5 : â ' 5 ;$d7 5 M.>W< E 5 5 e E :G78R'7Ìa:Ut+MK`78>;$.:G'1`]d78+MK:G'1 5KJ ^g$ E :I>eK

;$78>R7 E T 5¯J E Y%R>78;C l E8E5 5 e%:GNzY%Re; 5 V@78-M'RW eLT 5 pX:G>7GW<'eM û VZ:G+W 5%Eû ∗

⇒ BαV»W<N;$'e%:G-ÑM'K+S>T 5 ;$-RWi 5 RñWi E 7 5 ;$RS È E C l EGEG5¬E .e Ç +àY%R

7:8.7(;$ û 5 ;$>W 5E +7U7 RWii¦ 5 78Wi E +e%:G>eKMØ+W Y%R 5 7G¯78 5 û 7GN3 5 W 578.W<>.7 5bEâ W3 5 M 5 C l e%:GR.:G'1W<+e%:8^]`¦§­+.ML1>7G Ç +7dY%R^ EGEG5 +R E J7 5 M'+Wi E CØ· 5 :8+e%:8778> 5 e9N+7 û V 5 · m ;$ E ++e;+e%:Gi78>+R7 E '1 5 .e1 5 > 5 W<]: 5 ; 5 5 7878 E 5 e;$+e%:8< 5 eT 5 p:G>7GW<'eMXC^¤ M.9e; 5 78 5 : 5 º>e;i+e%:878;V$ EGE W<]: 5 ; 5 5 ;$b E 5 M'9+7`RW«>W<.e9 5Y%R)M.>10 5 L78>'W<+e%: 5 ;$ 5 R$:G7 5 û V E >W Y%R3e>e9RWæ: 5 º>e:G>e9 E K; 5 5 e E RW<K; 5u 5 Y%Ri>7U :8+78._N#ä7GNR7 E T 5,J E Y%R+7U;C l E8E5 ¦§_< 5 W Y%R 5 W< E W 5 +W<'e9 5E vE +R'; 5 V 5 Y%RJ1yM'+17Fe 5 1IW<+e%:GJ 5 R$:87 5 û V$ EGE .Wî 5 7a;'e:8C l E8E5 ¦§_ 5 WY%R 5· m t+78WieNS+0e%RW<<78>+R7 E T 5 'e Ç e.:8V E >Wî 5 e E RW<.7`e>e9RW: 5 º+eBC·Q7GNR7 E T 5¥J E Y%R>78; 5 ;$^L78>>7[;.78:U 5 R).e;.78:UW<+e%:GCØ?@M'J]`;$'7G+:8Y%Re; 5

:G>W 5EB ⇒ Bα

VI.eL;$.78:UVY%ReL; 5B ⇒ Aα

⇒ BβCØ·¬+M'.W<'eS>T 5 ;^7GNR7 E T 5 .e;.78:U

5 ; E >7y E :8e%:Gd 5 W<M.K+;akeT 5^E >78­6:G7U:U;aYRC[·,+M'.W<'eS>T 5 ;a78>+R7 E T 5 ;$'7G+:8V 5 7 5 R:G7 5 MK; 5 V] E 'W<M' E 5 ; E >7`7G E5 M.1K;0; E +R'e:8JW<e+'7U

•;.1K;$+W)p E d E 7 5 ;RS È E ; 5 eT 5 p:8+78W<.eM û +Wê; 5 EBE Rt 5 ev*Re: 5EB º α1, ..., αn

V; E 7 5 ;$RS È E Y%R`eT 5 5%EGE R+WË7GNR7 E T 5¥J E YR+7U;( º Bβ1, ..., Bβm

V; E7 5 ;$RS È E 5 W78>R7 E T 5"J E YR+7U;m

•>M.'W<.eLW)p E E 7 5 ;$RS È E ;$m

•;$K 5 eW0p E b E 7 5 ;$RS È E

B → α1B′ | ... | αnB′

V 5 eL;$ û* ]3RW e 5 1 5#Eâ W3 5 M 5eLT 5 :G>7GW<'eMXVY%RJeT 5 t+7G:G>eK J 78Wi­:GK+m

•;$K 5 eW0p E Z EBE +R.e%:G E 7 5 ;RS È E 7U ûC

B′ → β1 | ... | βm | β1B′ | ... | βmB′

C

465 WË E8E a7 5 >;.W<+e%: 5 V:87 5 +W)p E ` E 78>R7 EGÈ E|J E Y%R+7U; 5 7d7GNR7 EGÈ E|J ;.78+.:8VY%R^eT 5bE T 5 7 5 M'+Wi­:8'> E 78e­M' E ^;$ E ++e;$>e%:G^78>+R7 E '1ICؽ»WË+g>W<M 5 +M'­ EGE K 5;$>M.'W<.eS+T 5 ;$78>+R7 E T 5J E Y%R+7U;0]7U0)78W<­:GK+

expression → expression + term |expression − term |term

term → term ∗ factor |term/factor |

factor → ident | constant | (expression)

·^M'K+eL; 5 )+M'.W<'eS>T 5 ;$ E 78H:UV:8+7 â W 5%E

expression → term | term expression′

expression′ → −term | + term | − term expression′ | + term expression′

term → factor | factor term′

term′ → ∗fator | /factor | ∗ factor term′ | /factor term′

factor → ident | constant | (expression)

Page 77: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& o !<qqi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ#x)Ü»Ò ð»ÛÌ×ÓX¿ÊÓ×*Ò0ÔLð^Ô[×+ÎZÜ o

¤ R$:G7 5 W 5 ; 5 ;äW 5 ;$ Ç +7iRWi,¹JA 4 L7U-Y%R 5E8E E +7<R E ;eRW eM' E ; 5 7;$ E ++e;$>e%:GÍ78>+R7 E '1 5 ]z¦§_>+e; 5 &¦§: 5 78S+T 5ÄJ E Y%R+7U;-;Y%R>M' E 7 5 ;$RS È E ;ÍRWW< E W 5 eT 5 p:8+78W)'eM^YR:I>WþRW 78 Ç g 5 +W 5 W3RWC O 5 + E5 ; 5 +g>W<M 5 1 E : 5e%:8+78 5 7GW<+e%:8

〈classdecl〉 → “class′′ “ident′′ 〈classbody〉 |“class′′ “ident′′ “extends′′ “ident′′ 〈classbody〉

m (¦§: 5 7U78W 5%EªJ E Y%R+7U;V:8+78+W 5E )7 5 ;RS+T 5 Y%RJR E W 5E ei¹JA 4 ;0M''eR>WX++

〈classdecl〉 → “class′′ “ident′′ [ “extends′′ “ident′′ ] 〈classbody〉

¤ Rei¹JA 4 ; E +g7G EGEGÈ E V:8+7 â W 5E

expression → term expression′

expression′ → −term [expression′] | + term [expression′] | λterm → factor term′

term′ → ∗factor [term′] | /factor [term′] | λfactor → ident | constant | (expression)

7G'W<+'78»1 E :8V 5 ;$F7GN+7ئ§­+.M$>MKRMK7Z^:Ut+MK(7GN;$.:G'1I(;$FRWi(¹JA 4 C n E :85 M'97JY%R EJE T 5ä5E : 5 º>e E Y%Ri.e'+'W E 7 5 ;$RS È E ; 5 eT 5 p:8+78W)'eM û # 5 M 5 >7(eM'.e9Lz;$ û VyeLÍ 5 M.ReÍ;$ EGE E : 5 º>e E Vy E 7 5 ;$RS È E Y%R0+M' E 'e'+'WC fZ5 7G]>WäVP+g E :G+W;$'1>7 E EaE H:8RS È E YR 5 ;$>W¨ 5 W<M.K+7a E8E 0:87G+¦§CZök*vW 5E M'Re E ;$ E8E E + E5%E

•E `:8+W 5E

B → Aα | CβV+e%:8T 5 ]`7GN E5bE t+76YRL EdE T 55E : 5 º+e E Y%R».eKKW E

7 5 ;$RS È E ; ú 7Ui;$>+';.7JY%RMØ7 5 ;$RLS+T 5 R:G'M.'_>7>C`?ñ EGE E H:8RS>T 5 5 ;$E 7 5 7>V%RWi)1+_Y%R ú \ 5 ;$>W:UW3t]+W E 'eKK7^ 5 WeT 5 pX:G+78W<.eL E m

•E d:8+W 5E

B → A1A2...AnaαV7GN E W 5EBE t+7 E

A1

V.C'C'CAn

5 ;$>W\+7U7Ø»+;$+K1_+KC m ^ EGEG5 5 e%:G>++7NV+e%:UT 55 : 5 º>e:8W3t]+W;$+1 E >7dR$:G'M'._N; 5 78J;$NK;$'7Y%RMB7 5 ;$RS+T 5 ; û R:G'M.'_>7'm

•E k:8+W 5E

A → aBb; B → αα

⇒ λVI+e%:8T 5 3;$+1 E >7Ø 5 e E ';+7U; 5 5 W 5 RWÊ: 5 º+e

Y%R);$+1 E +7»R:G'M.'_>; 5 78#;>K;$'7»t+MKi7 5 ;$RS+T 5B → α

5 :G+e%:U7»78> 5 e9>>7û C

ödW 5E V@>e%:8T 5 V6;$ Ç e'7ig:UW<+e%:8 5 W 5 &:Ut+MK7GN;$.:G'1I;$>1 E >7# 5 e E :87GR â ;Cf 78.W<>.7 5 V%;$K 5 eW 5E RW e 5 1 5bEGâ W3 5 M 5 :G+78W<.eLM J ¹JA 4 C? E8E `:G>7GW<'eM;+e 5 :8; 5 5 7 L78> E +W<78`e 5Ç eM;b+;$+K;$^>e:878;C[· E +R.7NV1W 5%E E8E5 +'7 J ¹JA 4 ;$R E¦ ReS È E V Jç¼·;Ç J »X»@EeIC

m *vαRWiͦ 5 7GWi E +e%:G>eKMd;ä78W<­:GK+C0?de%:UT 5Jç¼·;Ç/¿

αà ]i;$ Ç e'; 5 5 W 5ä5

5 ev*Re%: 5 ;i: 5 ; 5%E5E0Eâ W3 5 M 5E :8+78W)'e E :8M6Y%Rα

⇒ aβV 5 R E vV 5 5 ev*Re%: 5 ;

:G>7GW<'e E Y%RJ.e'+'W¨M'RW<)+;$+K<;$+78'1I;<)7G:G'7`;$αC

f 7U)>MKRMK7 5*Jç¼·;Ç ;$RW E :87G'eLV;$+1+W 5EaE +R.7^ EFE +R'e:8 E 78+78 E

Page 78: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& !<qi

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

•L7U 5 :8+78W)'eMeV Jç¼·;åÇ

(a) = am

•L7U 5 eT 5 pX:G>7GW<'eM û V:8MPY%R

B → A1A2...An

V 5 e;$Ai

E T 53Eâ W3 5 M 5E :G+78W<.eL E5 ReT 5 :G>7GW<'e E V¦§_+>W 5E

ì'e'+'M.W<>e:8 Jç¼·;Ç(B) =

ì78+t:G'W 5E*Jç¼·;åÇ(B) =

Jç¼·;Ç(B) ∪

Jç¼·;åÇ(Ai)

VF7Ui = 1, 2, ...

:8]Y%R+eL 5 e%:87G>W 5%E M'RW

i:8MØYR

Ai

eT 5 ;+78.1λm

•L7UaRW E :87G'e

α = A1A2...An

V 5 eL;$Ai

E T 5^Eâ W3 5 M 5E :G+78W<.eL EB5 ReLT 5 :G>7GW<'e E V¦§_+>W 5%E

ì78+t:G'W 5EJ¼·;Ç(α) =

Jç¼·;Ç(α) ∪

Jç¼·;Ç(Ai)

V^78i = 1, 2, ...

:G]&Y%R+eL 5 e%:87G>W 5%E M'RW

i:8MØYR

Ai

eT 5 ;+78.1λC

=»i¹JA 4 ¦§: 5 78;3Y%R(W 5E :G7UW 5E e%:G>7G 5 78W<+e%:GV:8+7 â W 5E65EaE >R'e%:G E 5 ev*Re%: 5E V78 5E :8+78W)'e E eT 5 pX:G>7GW<'e E

Jç¼·;ÇE! º ´b µJç¼·;ÇE º ´ z1µJç¼·;ÇE&¡ º ´ .)µJç¼·;ÇE¢£ º ´ TXµJç¼·;ÇE(¤@ º ´ QKµJç¼·;ÇEE¦¥@6"§sD/ º ´ üG µJç¼·;ÇE%¨4K§B©!D&1K§sD/ º ´ c µJç¼·;ÇE º ´ p µJç¼·;ÇE 1@¨D42ª º ´ üGXV­ cV p µJç¼·;ÇE&D6ª"«­¬ º ´ TGVEQKµJç¼·;Ç

(term) º ´ üGXV³ cV p µJç¼·;Ç

(expression′) º ´ z`V.)µJç¼·;Ç

(expression) º ´ üGXV­ XV p µm *v û RWÙeT 5 p:8+78W)'eM»;à78Wi­:GK+à® 52E >R EGâ W0 5 M 5 'eKKMXC ¤ÿ 5 ev*Re: 5

J »=»@Ee(B)

]a¦ 5 7GWi; 5 t+M 5E :G+78W<.eL E J:UMLY%RS

⇒ αBaβV 5 R E *vVg$ E :8`RWiJ¦ 5 78Wi

E +e%:G>eKM`;$>7G'1­I1+Ma-7G:G'7i; 5EGâ W3 5 M 5 'eKKMa+W Y%R78>+Í'W)N;$K:8W<+e%:G J;$'7G>H:U<;$ û C·'W< 5 7:U®e+'; 5nJ »X»@Ee¬ 5 ;ÍeT 5&E >7b:UT 5 'e%:GR.:G'1& 5 W 5 ; 5nJç¼·;Ç VÌW< E3E

:G'1>7GW 5%E RW EGâ W0 5 M 5 eLT 5 :8+78W)'eM û Y%R- 5%EGE R RWià7 5 ;$RS+T 5 ; 5 :8. 5B → α

V

α∗

⇒ λV`+e%:8T 5 ].W< 5 7G:8e%:8YR E .LW 5E Y%R E#E T 55%E#Eâ W3 5 M 5E ;$ J »=»@Ee

(B)C

ödW 5%E : 5 Wi7NVP 5 7 +g>W<M 5 V 5 :8+78W)'eMVä E R 5 7Y%Ra ∈

J »X»@Ee(B)

C l E8E5äE 'e Ç >

Page 79: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& %q- !<qi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ#x)Ü»Ò ð»ÛÌ×ÓX¿ÊÓ×*Ò0ÔLð^Ô[×+ÎZÜ %q

Y%RÍe 5 eLM' E ; 5 73;$ E ++e;$>e%:G#78>+R7 E '1 5 VZ 5 g$>+R$:87GW 5E35 W<]: 5 ; 5 5 787G E 5 e;+e%:G û V6.78+W 5%E 5 e E RW<'7iRW ++7G: 5 eXHW<+7 5 ;: 5 º+e E V E E8E E : 5 º>e E + E 7G>W 5 W;$ Ç e'S>T 5 ;$ û V@ 5 ;$>W 5%E :G>7iRW e>e:878;C fZ5 78]+W E

B∗

⇒ λV6 E8E5,E .e Ç +

Y%R#eT 5 5 e E RW)'e; 5 e+e9RW : 5 º+e,;+e%:G7U;V« 5 ;$ä7GN+7Je+e%:G7U;ä E +7U­+ E ; 5 +W M.RW 5 e%: 5 VØL¯ EJ5 78> 5 e9>'W<+e%: 5 ù eRM 5 úJ; û C fZ5 7:Ue%: 5 V E ie 5 'e â 5; 5 7GN 5 e9>+.W<+e%: 5 ;$ û :G'1>7GW 5E RW ze#>e:878;Vt;$+1+W 5E E >R'7 Í7 5 ;RS+T 5 Y%R¦§_ä 5 W´Y%R û ;+78.1z&>;$>'1I_+KC m z:G'1+78W 5E35 R$:878&7 5 ;$RLS+T 5 5 W 5

B → Aαa ∈

Jç¼·;Ç(A)

VÌ>e%:8T 5ä5 5 7G78+7U­iRW 7 5 M.>WiÍe¹JA 4 Vy 5 E 5 W 5 W) E W 5 :G>7GW<'eM:G>W 5E ;$R E 7 5 ;RS È E <M.K+7>Cf 7U)>MKRMK7 5%E 5 ev*Re%: 5EGJ »X»@be78 5E eLT 5 pX:G>7GW<'e E ;#¹JA 4 V;$>1>W 5%E

•;$K 5 e7 5 'e;$K+; 5 7);$ Ç W ;$ä>;$>' 5 5 ev*Re%: 5J »X»@be

(S)V 5 e;$ ] 5

EGâ W3 5 M 5 'eKKMÌ;<¹JA 4 m•;;<)7 5 ;RS+T 5

B → αAβV¦§_>+W 5E

J »X»@Ee(A) =

J »X»¯Ee(A) ∪

Jç¼·;åÇ(β)

E β

⇒ λV+e%:UT 5 ¦§_>+W 5EGJ »X»¯Ee

(A) =J »X»@Ee

(A) ∪J »X»@be

(B)C

4 MKRMKeL; 5<5CJ »X»@be78 5 e 5E8EG5 +g>W<M 5 V:G>7 â W 5E J »=»@Ee

(expression) º ´ VúµJ »=»@Ee

(expression′) º ´ VúµJ »=»@Ee

(term) º ´ x0VpUV Vú µJ »=»@Ee

(term′) º ´ x0VpUV VLú µJ »=»@Ee

(factor) º ´ ÷ VLVLx0VpUV Vúµ½^Wi1+_ä+MKRM'; 5E5%E 5 ev*Re%: 5EmJç¼·;Ç J »X»@beVy 5 ;$+W 5E Vk+e%:UT 5 Vk 5 e E :G78R'73

:8L>M'&78>;$.:G'1&;¹JA 4 C f 78 E8E5 VZ1IW 5E +gW<.eL70 E 7 5 ;$RS È E ;M'.eR+Wÿ:G>e%:87^; E 5 7G'7a+W¨Y%RJ 5E 'S È E 5 M 5 >­prM' E e0:Ut+MKCdû +1>W 5E ¦§_>+7N

•;;7 5 ;$RS>T 5

B → αVØ78ä: 5 ; 5 :G>7GW<'eMí

∈Jç¼·;Ç

(α)Vk;$+1+W 5E 5 M 5 +7

EGE )7 5 ;RS+T 5 e) 5E 'S>T 5(B, a)

;0:8L>M'm•;;7 5 ;$RLS+T 5

B → αV 5 e;

α∗

⇒ λV678: 5 ; 5 :G>7GW<'eMn

∈J »X»@Ee

(B)V

;+1>W 5E 5 M 5 >7a E8E 07 5 ;$RS+T 5 eL< 5%E KS+T 5(B, a)

;0:8L>M'C

m +R'e; 5 EGE E 7G>7U E VL 5 e E :G78R â W 5%E Vt+e%:UT 5 VPi:Ut+MK#78>;H:8.1#L7UÍz¹JA 4 ;$3+gp78 E8EÈ E V;;<e<:Ut+MK<C'"Ca· :8L>M'<7GN;$H:8.1i 5 ;$ E +7^R E ;VM.]>W¨;<1+78 Ç +S>T 5;07UWi­:8'>V780 5 e E :87GR'7 5 · m C f 7Ub'W<M'+W<+e%:87 5 W<]+: 5 ; 5 ;$JRWeT 5 pX:G>7GW<'eMXV 5 ;+W 5EØ5 M'97[^:Ut+MK^F;$:8+78W)'e7Ø78»+;`:G>7GW<'eM%1­M''; 5 Y%R E[E T 5 E[E NY=kI+e+' E;$3S È E <: 5 Wi7NV 5 W 5 V 5 7 g$+W<M 5 VP 5 e E RW)'7^RW«:8+78W)'eM 5 R'e1 5 +7 5E W)]+: 5 ; 5%E;$ 5 R$:G7 5E eT 5 pX:G+78W<.eL E CfZ5 78]+WV E <äM'.eR+Wæ]i 5 W<M'gV 5 +­M'+RM 5 ;z:Ut+MKz7GN;$H:8.1äi 5 e E :87GRS>T 5

; 5 · m ;$<¦ 5 78WiW<eRM E T 5 :87G+¦§ E ­78;R E C#·^'e;Wi EbE i E :G'1>7GW 5%E :878M'9e; 5

Page 80: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& !0 i

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

D t+MK)C'"^u D t+MK)78>;$.:G'10L7U0#¹JA 4 ;$+g7G EGEGÈ E C

D +78W<.e E= T 5 :G>7GW<'e E K;$+e%: 5 e E :Ue%: x0Vp ÷ VL ù ú g$78 E8E 5 e " " "g$78 E8E 5 e­ / /:8+78W :G>7GWp o ¦§ : 5 7 q

(1)expression → term expression′

(2)expression′ → +term expression′

(3)expression′ → λ(4)term → factor term′

(5)term′ → ∗factor term′

(6)term′ → λ(7)factor → ident(8)factor → constant(9)factor → (expression)

5 W RWi78W<­:GK+-e n =»jFV@ 5 E VF 5 W 5 1.W 5E V 5 +­MKRM 5 ; 5%E 5 ev*Re%: 5%E*J¼·;Ç J »=»@Eeò 5 e E K;$+7UW L>e E 7 5 ;$RS È E e 5 78Wi E V E >W 5E<5 L>78; 5 78 E ; n =»jFCd=^ EGE 5 e%: 5 +e%:G7UW 5%E 7 5 7UWi E 5 W 5)5 °%I1 4`4 VY%RV$ E N; 5 e);$ Ç e'S>T 5 ;3M''eR>W+W n = jFV>78»: 5 ; 5%EØ5%E W<]: 5 ; 5%E 5 7G78 E 5 e;$>e:8 E 5%E eLT 5 pX:G>7GW<'e E F1+78 Ç + 5%EGEGâ 1+ E7 5 M'+Wi E V$I1 E eL; 5 5 .W<M'+W<+e%:U; 5 7 5%E 5 e%: 5E ;078Wi­:GK+)Y%R 5Ea5 7G''e7UWC=» E >S>T 5`E +R.e%:Gk 5 78;7G>W 5E a.W<M'+W<>e:US>T 5 ; 5 · m L7UFaM''eR>W

X++R$:8.M'.p

_>e; 5<5 °I1 4`4 C

4.2 O analisador sintático da linguagem X++

ök+78+W 5%E VI E +R.7NVI 5 W 5 'W<M'+W<+e%:87 5 · m V 5 W E @e^78W<­:GK+F1 E :8^e 5 > â :GRM 5 VR$:8.M'._Ne; 5)5 °%I1I 4`4 C l e'+'M.W<>e:8V;$'+ 5 e78+W 5%E RWi)e 5 1 5 PS+T 5 e)78.W<>.7Ub7:8; 5 7UY%R'1 5 C v vC

9:;%<:=?>=Sª/B ©F ;Un K6Z ; H ^S×\ Î%ÍQ6Ò%ÙS`ta=Y^ G Õ_ ÞÐ%è6ÑÏ&6QÍ#ÍQÞ` K : JG Õd ë · 5 PS+T 5 $ °± b aE\M\"]= ` $ ¢SXd=_(9'M'H:U 5 W<>>e E W 5 ;$`;$>R7US>T 5 ; 5 · m Y%R

E +7U­b>78; 5 t+M 5 °%I1 4`4 C l EGEG5 ¦§_J 5 WY%R 5 · m W 5%E :87G(e E â ;pXL;$7UT 5 Y%R EFE T 505%EeT 5 pX:G+78W<.eL E Y%R» E :UT 53E +e; 5 *+g$>R:8; 5E a(YRL E6E T 5b5%E : 5 º>e E Y%R E T 5 5 e E RW<'; 5%E+W>;0RW;$>M. E Ck·»M.]>Wî;$ EGEG5 VW 5E :G7U:UW3t]+W E :G+e%:U:G'1 E ;$J+ E W)>e%: 5E ¦ +.:8 E 5eLM' E 7"L&'$& C= 5äÇ eM@;$ E :G#> â :GRM 5 VBW 5E :G7U78+W 5E RW g$+W<M 5 +W Y%R< EGE :G' 5 ;$ E â ;) E :U­09L'M..:8;C

Page 81: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§Q¨X© ss%ªRQ«R ©%¬z§Q¨X© sC­s® §¨ n=Q< G « ¬c§¨X¯ ®Di

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ#x)Ü»Ò ð»ÛÌ×ÓX¿ÊÓ×*Ò0ÔLð^Ô[×+ÎZÜ

=^>W E +W<78^Y%R+78+W 5E 1+7@Y%R E@E T 5 E S È E : 5 Wi; E L>M 5 · m C?@WË+7UMXV E :8W 5%EWi E 'e%:G+78 E8E ; 5%E +W E L>7 E 3g$ E :G3RW +787 5iE .e%:8­:GK 5 0YRLMÌ]3 E8E >7G7 5 C^¤Ë°I1 4`4t+78W).:G6YR 5 W<>+e E W 5 ;$@;+R7US>T 5 ; 5 · m E *v`;$ E .M'.:8; 5 +W :G+W< 5 ;$d+g$>RLS+T 5 C· E8E .WVPe 5E8EG5 5 W<.MK; 5 7 >H:UÍ 5 W 5 7U®W<+:G7 5 ;$)+e%:G7U;Í 5 PS+T 5 .6&'ü%þ ú LC m E8E 5 tS>T 5 ¦ 5 7Z¦ 5 78e>+';»Y%ReL; 5 5 e 5%EGEG5 5 W<'M'; 5 7[]ag$>+R$:8; 5 V>e%:8T 5 E 'e$¦ 5 78WiS È E;$;$>R7US+T 5&E +7UT 5 W 5%E :878; E C m E8E 5 PS+T 5 eT 5 ]R$:8.M'._N;Vd+e%:UT 55 · m W 5E :G7Ut+eL EZE `+g$ E :Ga`Y%RM$] 5 +787 5JE .e%:8­:GK 5 C f 7U( E8E5 VM.:G>78W 5%E :8W0L]>W 5 W<]: 5 ; 5y>MA; 5 e 5%EGEG5 · m [email protected]+78 Ç > E i 5 PS+T 5 ¦ 5 @;; 5 ReT 5 VÌ+Wÿ+ E5 e+%:8.1 5 VB'e1 5 + 5W<]: 5 ; 5ÄC'A6ÁÂ1ÄH³AB:CDQ¹?ËA o QÁ1¿Ã ; 5 · m 78K; 5 ù§178'­I1+M N@A6˳cDË ; 5 7 5 7UWiaC /úC

9:;%<:=?>=Sª/Bu@F 9ÍQ6ÎU6Ï&ÐÑÒUÓ/yY%= H <Ô\ n6=L j =Q< G n6=Q:^ G :CÕ_ Z >n;&: KcÖ =Qp=B Z ;B Õdeg n JO Y Z LALQYQ=^Q^tYQ= H <QÔM×h a ZbH =YA^ K = KZ LSÎ K : Z?H <tØ G :^ Z ; H `lEÔffSÙ;>n Z Y G : ¨ Ø G :^ Z ; H DBs ¨X© sQsQªlÕi ZbHK L%; HK 9=%:6^ G :Q:;%:c`SsÕ RRtLQ; HK = [ ;%: [GSG ::;^S^ ZbHKàQKZ LQ;^kFrqFuF RRTÞ G a ZbH6G ; > K ; [ ;ml>= Z?H l [ =AL%YQ=^^ G Y%= H <Ô/BFr\ n JO Y Z Lw^ K = K6Z LPp; Z&[ >= ZbH yÎ K : ZbH <c=Q:<^ K&N :;&ß^T9=Q:6^ G v6L G n KZ ; HFr_ ×F|d O ;;QY G = HM[G&OJ <M`Ta=Y^ G ÕFreFrg Î K : ZbH <Aa Z Y G&H =?> G `llÕÜRR H ;?> GS[ ;T=Q: I%JZ p;S=A^ G :A= H =Y Z ^%= [ ;Fh Y%= H <ÔPn=Q:6^ G :Õ RRP= H =Y Z ^%= [ ;%:cY%Qv Z LQ;QR^ ZbHKàQK6Z LQ;Fri Z?HKcZ ÕFrk O ;;Y G = H >^T`ta=Y^ G Õ\uq\F Î&¥6^ KG >áB; JK Bn: ZbHK Y H yØ G :6^ Z ; H Õ\u\ RQRSYQS;^on6=Q:â?> GQK :;^Xn6=^^%= [ ;^Xn6=Q:=A;ALQ;?>n Z YQ= [ ;%:\u_ a;%:ãy Z `PsÕ ZTä =Q:<^åBY G&H < K%N!¨ DÕ Z ff\d ×\ue Z aãy=Q:<^ Z& B GQI%J =Y^çy?l ¨b[G&OJ <Ï&ÍÎl%\ug [G&OJ <S` K : JG Õ\h G Y^ G\ui ×\uk Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lîè^%=Q< GZ ^å­ l f_uq l Ö =Qp=AY%= H <Ôê ¨b[G&OJ <Ï%ÍÎ mZbH n JK a Z Y G l%Õ_F Î%¥6^ KG >ìB G v ZUK ysÕ_u\ ë_u_ ë_d_ue Z aãy=Q:<^ Z& B GQI%J =Y^çy?l ¨ l&_ug × RRtYQ [ = G&HK := [ = ¨ n6= [ : ;_h Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lE G = [6ZbH <aQ:;?>z^ K = H[ =Q: [ZbH n JK BSBtBl&Õ_ui n6=Q:^ G :A` HG ßcYQ= H <ÔCyÎ%¥^ KG >ìB ZbH ÕÈRRSLU: Z =tÍÎ_uk ëdq G Y^ GdîF × RRtYQ [ ;t=Q: I&JZ p;

Page 82: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& àq !0%i

i

i

i

i

i

i

i

q Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

d\ a Z Y G&H =b> G `P=Q:<6^å=Q:<6^çBY G&H < K%N¨ D Õd_ Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lE G = [6ZbH <aQ:;?>a Z Y G lífTa Z Y G&H =b> G fmlBtBSBl&Õdud K :¥A× RRSL&: Z =tÍÎde n6=Q:6^ G :A` H6G ßMYQ= H <Ôy H6G ß Ö =%p=CB Z ;åBï Z Y G Ò H n JK Î K : G =?>áyua Z Y G&H =b> G QÕdg ëdh L&= K L N y Ö =Qp=CB Z ;Bï Z Y G Ó6; K ï; JH[ v6L G n K6Z ; H!G X×di Î%¥^ KG >ìBu; JK B|n: ZbHK Y H y?lï Z Y G l fPa Z Y G&H =b> G fml H ; K a; JH[ BEl%Õdk : GQK&J : H Õeuq ëeF ëeu\eu_ Z aãyñ [G&OJ <ín=Q:6^ G :CB [6Z ^%= O Y G Ï K :=L ZbH <CyEÕ RR [G ^&= OZ Y ZUK =Ap G : O ;^ Gt[ ;PÍÎedeue K :¥M×eug n6=Q:^ G :/B|n:;%<:=?>áyEÕ RRSL N =b>=S;í> K ; [ ; I%J6G a=QVA=P= H6à Y Z ^ Geh ëeui L&= K L N yr9=Q:6^ G v6L G n K6Z ; HG euk ×guq Î&¥6^ KG >áB G ::/Bn: ZbHK Y H y G Br< GQKQÛG ^^%=Q< G yéÕgF n=Q:6^ G :CBLQ; HK 9=Q:6^ G ::;%:m`DÕ RR H ; G v Z ^ KG : G L J n G :=!² ; [GSG ::;^gu\ ëgu_ a ZbH =YY&¥c×gd Î%¥6^ KG >ìB; JK B|n: ZbHK Y H yrn6=Q:6^ G :/B K ; j6G&H Ï^Q; J :L G Ba6; JH[ G v%::;%:Cyécfgue lÈ G v Z L%=YT::;%:6^Pa; JH[ l&Õgug Î%¥6^ KG >ìB; JK B|n: ZbHK Y H yrn6=Q:6^ G :/BLQ; HK 96=Q:6^ G ::;%:fgh loÎ%¥ HK =L K6Z LT::;%:^Ta; JH[ l%Õgui ëgukhq ë RRÈ>= ZbHhFh\ ^ K = KZ LXn JO Y Z LtÎ K : ZbH < Z >áy ZbHK vh_ ×hrd ZbHKPj Õhe Î K : Z?H <^çÕhg ^X` K ; j6GUH Ò>=Q< G rv Õhuh j `M^åBYQ=^ K Ò H[G v%aCylbõll%Õhi K :Q¥M×^T`A^åB^ JO ^ K : ZbH <CyDö j Õ ëhk L%= K L N yÎ K : ZbH <Ò H[G v JK %a%Ð6; JH[ ^Uv6L G n K6Z ; H!G iuq × ëiF : G%K%J : H ^Õiu\ ëiu_id ë RRPYQ= H <QÔiueiug 9ÍQ6ÎU6Ï&ÓQÞ/yYQ= H <Ô

= 5 W)]+: 5 ; 5,>MA V$:G>W 5%E :UW3t]+Wæ#U9LWi;i 5 W<]: 5 ; 5N³A6˳cDËáÄ/N/Ë ÁËA'> C 465 W 51>7G>W 5E E >R'7>V 5 °%I1 4`4 '7U­ä; Ç e'7bRW W<]: 5 ; 5 78>; Eâ W3 5 M 5 eT 5 :8+78W)'eM;78Wi­:GK+CØ·òL7G:G'76; E 7 5 ;RS È E ;$ E 78.:8 E e 5 7UY%R'1 5 C v vV E T 5 +7GK; 5%Ek5E W)]+: 5 ; 5%EY%R0:G+e%:UW ¦§_>+7 5 > E W<+e%: 5 ;#>e%:G7U;z 5 W 5%E 78 E t> :8.1 5E eT 5 p:8+78W<.e E CJ· E8E 'WV3U9LWi;3; 5 W<]+: 5 ; 5N@A6˳cDËìÄ/N/Ë ÁËA'> '7U­:G>e%:87F78> 5 e9N+76eb>e%:G7U;RW<)+;$+K

Page 83: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& àq" !0/i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ#x)Ü»Ò ð»ÛÌ×ÓX¿ÊÓ×*Ò0ÔLð^Ô[×+ÎZÜ q"

Y%R<+ E < 5 W z;$ E 78KS+T 5 ;;z E >R'7(e 5 78Y%R'1 5 C v v(7U 5 eT 5 p:8+78W<.eMM9:ü!0C? E8E i] 5EGâ W0 5 M 5 'eKKMd;78W<­:GK+C)·>e:878;äR$:G'M'._N;ä]#Y%Ri E :8­äe 5 78Y%R'1 5 EGE ; 5 5 W 5 7U®W<+:G7 5 eLà78'S+T 5 ; 5,5 $v*+: 5nN@A6˳cDË V6e 5 .e â 5 ; 5 W)]+: 5 ; 5>MAù M''e9 E /)%oúC½^WiÍ; E 1Ie%:8+e E ; 5 · m >78; 5 t+M 5 °%I1I 4`4 ])Y%R 5 7GN 5 e9>+.W<+e%: 5 eT 5 7G+p

E E >7¦ +.: 5 e> EGE 78KW<+e%:Gi7:8.70;$ÍM'RW eT 5 pX:G>7GW<'eMk E t> âHÇ 5 C½^WiU9pWi;ѬY%RM'Y%R>7ÍW<]: 5 ; 5 Y%R- 5 787G E 5 eL;,àRWÙeLT 5 pX:G>7GW<'eM .7U­:8+e%:87z78> 5 e9+p>7Í EGE &eT 5 pX:G>7GW<'eM^eLà+e%:878;C fZ5 7Íg$>W)M 5 V E :G'1] E8E +W 5E ¦ +.: 5 ÑU9Wi;,N@A6˳cDËìÄD ¹ N/ËD³³ç V 5 e 5%EGEG5 5 W<'M'; 5 7('7GKz 5 e E RW<'7 5%E : 5 º+e E ;Í>e:878;z7 5 +R$p7Ue; 5 78> 5 e9N+7aRWi<+g7G EGE T 5 t+e E V$JeT 5 RWî7 5 78W<C

· U9W<; N³A6˳cDËáÄ/N/Ë ÁËA'> E :U­;+e%:G7 5 ;$RW 5 Wie; 5 SXd 5 78Y%R E Rg$NRS>T 5,5 Rñ¬;$-M.RW 5 R$:G7 5 W<]: 5 ; 5 5 7G78 E 5 e;$>e%:G 5 R$:G7 5 eT 5 pX:G+78W<.eLM^ 5 ;$MKeS>7)RWi-+g>S>T 5 ; 5 :8. 5c´:A˳cD%¸ ¹o D&NO? C l E8E5 5 e%:GNäYRLe; 55 · m ;$:8> :Ue,>e%:G7U;,M.RWþ>7G7 5,E 'e%:8­:GK 5 C fZ5 7#g$+W<M 5 V 5 W)]+: 5 ; 5 5 787G E 5 eL;$+e%:G 5 eT 5 p:G>7GW<'eMVk E t+7U<+eL 5 e%:8787`ei+e%:878; 5 : 5 º>eL C 4 E5 EGE W<]: 5 ; 5ÍE v'e%1 5 +; 5 ieT 5 +e 5 e%:G78):8Md: 5 º+ee+e%:878;VB>e%:8T 5 >M.iMKeS>äRWigNS+T 5 C 465 W 5e>e9RWîW<]: 5 ; 5 5 7878 E 5 e;$+e%:8 5%E eT 5 p:8+78W<.e E :G7U:U) E8E 0gNS+T 5 V+MK E J7 5 :8] 5 W<]: 5 ; 5 Y%R37G'W<+'7 5 U9W 5 RRW ;$ E8E E W<]+: 5 ; 5E Vte 5 + E5i5 W)]+: 5 ; 5,>MA Ca= 5W<]: 5 ; 5ð>MAQ VZRWi-W)>e E >W´7G+¦ +78+e%:GÍ 5 >7G7 5 ]ä+W<H:8';&ä-e­M' E Í; 5 7 5 7UWi;$>1^:8+78W<.e7>CZ=»T 5 9­0 5 W 5 5 e:8.eR760e­M. E V 5 E ] 'W< 5%EGEGâ 1+ML7G E :UR7U7 5 E :8; 5; 5 · m e 5 W 5 W<>e: 5 Y%R 5 +787 5 ¦ 5 Ø;:GN :U; 5 CF· EGE .WVP 5 >e 5 e:8787`RW«+787 5#E .e%:U­:GK 5 V<g$NRS>T 5 ; 5 e 5E8EG5 5 W<'M'; 5 7 E 'W)M. E W<+e%:8J:G+78W<.eLC@= 5 + â :8RM 5 o)1+78+W 5E 5 W 5 5 ;+W 5E .W<M'+W<+e%:U7 5 Y%R E U9W<;»78>RL>78S+T 5 ;^+787 5%E V%Y%R»t+78W<H:8 Y%R 5 · m 5 e%:G'e%R E R)g$NRS>T 5 W) E W 5 Y%RRW¨+787 5<E 'e%:8­:GK 5<E v<+e 5 e%:G7U; 5 Cök*vW 5%E Vy>e%:8T 5 VB 5 W 5 ;$ Ç e'7 5%E W)]+: 5 ; 5%E Y%R)'78T 5 5 W< 5 7 5 e 5%EGEG5 · m CBû»>1>W 5%E

;$ Ç e'7)>;eLT 5 pX:G>7GW<'eM6;e 5%EGE 7UWi­:GK+W<>;$Ke%:8ÍRWi&;>MK7US>T 5 Y%RÍ]zRWiW< E :GR78<;$b+¯;. 5 °%I13b;$J7 5 ;$RS È E e n =»jFC 4 ;0RW<<;$ EGE E ;>MK7US È E :G+W«E +R.e%:G(¦ 5 7GWi

〈nao terminal〉 → 〈tipo〉 “nome′′ “(′′ 〈argumentos〉 “)′′ “ :′′

“′′ 〈decl. locais〉 “′′

“′′ 〈BNF 〉 “′′

? E8E 0;$>+M'78S+T 5 'e'+'p E » 5 W RW :G' 5 VY%R»] 5 :8. 5 78: 5 78e; 5 t+M 5 W<]: 5 ; 5 5 7G78 E p 5 e;$>e%:Ga^ E8E @eT 5 pX:G+78W<.eLMXC fZ5 ; E +7ZYRLMKYR+7Ø:G' 5 + E8Eâ 1>M;$+e%:87 5 ; +M' EGE @; 5 · m Ve 5 e 5E8EG5 + E5 V%)MK E8E C'A6Á Cû + 5 E 1>W 5 e 5 W<(; 5 eT 5 pX:G>7GW<'eM[ù ; 5 W)]+: 5 ; 5 Y%RE +7U­#78'; 5 ú` 5E 78®W)+:G7 5E ¦ 5 7GWi E ;$ E8E 0W<]: 5 ; 5 C ?@W E >RK;Vt1I>W RWî 0RWiE E8E T 5 ;$ͯ$;$' 5 °I1 5 M 5 >;>e:87GzU9I1 E VZY%RÍ 5 7G78 E 5 e;$ JE ;$NMK7US È E M 5 > E;$ EGE iW<]: 5 ; 5 Cä· E 178'­I1+ E â ;>MK7U; E 5 ;+7UT 5E >7bR$:8.M'._N; E ;$>e:87 5 ; 5 W)]+: 5 ; 5 C?ñ;$> 5 E 1I+W« E 7 5 ;$RS È E ;$ EGE eT 5 pX:G+78W<.eLMye n = j6Ct·\78.eL'MB'e+RW3I+e+'Í; 5°%I1I 4`4 ]J:878e E ¦ 5 7GWi7` E8E E 7 5 ;$RLS È E >W¨+¯;. 5 °I1VY%R3.7U­0:G+e%:U7^78> 5 e9N>7`e+e%:878;ÍRW< E >Y=kI>eKz;<: 5 º+e E Y%Ri+ E >W 5 Wæ E8E ;$ E +7GKS+T 5 C0ök*vW 5%E VB>e%:8T 5 V 5EGâ W0 5 M 5 'e'+'MB;)e 5E8E 0M''eR>WäV$Y%R] 5 eT 5 p:8+78W<.eMc9ü!

Page 84: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& àq !0i

i

i

i

i

i

i

i

q Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

9:;%<:=?>=Sª/BªF p; Z&[ n:;%<:=b>áyE­\ ×_ ëd ×e æLQYQ=^Q^QY Z ^ K yE Aä 6&ï g ë

=»;$ E +7GKS+T 5 ; E 7 5 ;$RS È E 5 ;$+W 7GN+7 5E : 5 º>e E ;$ Ç e'; 5%E e E >S>T 5 ; 5 · A; 5 7UY%R.1 5 C v väù 5 û ø. ]äRW<-g+>S+T 5 ú3<GU9W<; E Í 5 R$:87 5%E eT 5 pX:G>7GW<'e E 5 W 5L ¼ü C? E8E JeT 5 pX:G+78W<.eLM79:ü!î](R$:G'M'._N; 5 Y%RP783.e;'>7`Y%Re; 5 RW û ø.ù Ç W¨;$

7UY%R'1 5 ú]z1­M'K; 5 eLe 5%EGE >e:878;C¬¤î: 5 º>eû øU.«eLT 5 ¦ 5 `;$ Ç e'; 5 g$M'K.:8W<>e:8e E ;$NMK7US È E ;$Í: 5 º+e E ; 5 ·»AdC D 78:8p E #;$äRWÿ: 5 º+eà7GN;$ Ç e'; 5 Y%RÍ]ä E8E ; 578 5 · m YRLe; 5-5 78Y%R'1 5 ;$ä+e%:878;¦ 5 ` 5 W<M':8W<+e%:GzM.K; 5 zeT 5 5%EGE RFWi Ee>e9RW: 5 º+e#;$ E 5 e â 1+MXC[?@e:UT 5 V E8E ^eT 5 p:8+78W<.eMX9ü! ;$'_»Y%R RWË7 5 7UWi(ee 5%EGE iM'.eR+W ]0¦ 5 78W<; 5 5 7(RWizM. E :UÍ;$<MK E8E E V E +RK;it+M 5 û øU.@Cy·;$ Ç e'S>T 5;$# ¼ü @](W 5%E :878;e 5 7 5 7UWiJLC oCØ?dMK E 'W<M. E W<>e:8 E +R 0;$ Ç e'S>T 5 ; n =»j1 E :8ze 5 + â :8RM 5 $C l E : 5 1M'0L7UðL¼C m RLÍ7 5 ;$RS>T 5 'eKKp E ) 5 WÐLUVÌ1+WE +R';0 5 7^RW¨';+e%:G Ç +; 5 7NVb E8E 'W 5 7»;$Ke%:8C

9:;%<:=?>=Sª/BF p; Z&[ LQYQ=^^%Y Z ^ K yé­\ ×_ ëd ×e LQY%=^^ [G LQYåyE- L%YQ=^^QY Z ^ K yE g ëhik p; Z&[ LQYQ=^^ [G LQYåyé­Frq ×FuF ëFr\ ×Fr_ ä Ù&ÍÎÎ wä ÒUÞÓ ä ÔQÓÞÎ Aä ÒUÞQÓ t L%YQ=^^ O ; [ ¥CyEF|d ë

O, 5 W 5 E >7G17ZY%RV>W>78MV 5 ¯$;$' 5 °I1 >78; 5 L>M 5 °%I1 4`4 78 5%E W)]+: 5 ; 5%EY%R`'W)M.>W)>e%:8W 5E eLT 5 pX:G>7GW<'e E eT 5 :8+W W3R.:8 E +W<>M.9eS+J 5 WË EkE RL E 7 5 ;$RS È E@ 5 ;$ E >7Ø;$.¦ â +.M$;$ E >7[ 5 W<78+>e;$K; 5 C fZ5 7Ì EGEG5 VIeT 5 ]@RW<» 5 M â :GK+»7GN 5 W)>e;­I1+M+7U75 · m 5 7(W)> 5 ; 5 °%I1 4`4 Vy;$> 5 E Vt¦§_>+7 MH:8+7US È E e 5 ¯$;$' 5 +7U; 5 C»·^M']+W ; E8E5 VE »¦ 5 7Fe> EGE ­78Kb0MH:8+7US>T 5 ; 5 7UY%R'1 5 C v vV$RWe 5 1 5 +¯$;$. 5 °%I13;$>1 E >7F+7U; 5 J EM.:G>78S È E ¦ >H:U E e:8+78 5 7GW<>e:8;$.78:UW<+e%:8(e E8E b+¯;. 5<E T 5 t+7U;$K; E C@·^t+eL E 5 W 5g$>W)M 5 Vd78 E +e%:8W 5E e 5 7 5 78W<LC &RW´:G78>U9 5 ;$ä¯$;$' 5 +7U; 5 L>M 5 °I1 4`478 5 W)]+: 5 ; 5 5 787G E 5 e;+e%:G( 5 eT 5 p:8+78W<.eMOL&¼C

Page 85: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§Q¨X© ss%ªRQ«R ©%¬z§Q¨X© sC­s® §¨ n=Q< G '@ §¨X¯ ®7i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ#x)Ü»Ò ð»ÛÌ×ÓX¿ÊÓ×*Ò0ÔLð^Ô[×+ÎZÜ q/

9:;%<:=?>=Sª/Bu«F a ZbH =YXn JO Y Z LTp; Z&[ LQYQ=^^ [G L%YåyE K%N :;Uß^T9=Q:6^ G v6L G n K6Z ; H ×\ K :=L G ÏL%=YYåylULQYQ=^Q^ [G LQYl%Õ_ K :¥M×d ÖÖ ÏL%; H ^ J > G Ï K ; jG&H yÙ%ÍÎÎ6Õe ÖÖ ÏL%; H ^ J > G Ï K ; jG&H yîÒUÞQÓÕg ^Uß Z&K L N yy ÖÖ Ï HK%j `Q` ¨ DQ³ ÖÖ Ï HK&j yE­ ÖQÖ Ï HK%j ×h L%=^ G ÔQÓÞέi ÖÖ ÏLQ; H ^ J > G Ï K ; j6G&H yÔQÓÞÎ6Õk ÖÖ ÏLQ; H ^ J > G Ï K ; j6G&H yîÒbÞÓÕFrq O : G = j ÕFuF [G a= J Y K ­Fr\ ÖÖ ÏQYQ=DéD ` ÖÖ Ï&< G&H ÕFr_ ÕF|d ëFre LQYQ=^Q^ O ; [ ¥yEÕFrg ë a ZbH =YY%¥c×Fh K :=L G Ï%: GQK&J : H y?lbLQYQ=^^ [G LQYl&ÕFri ëFrk ë

465 e%:G'eReL; 5 5 Wþ-e 5E8E -.W<M'+W<>e:US>T 5 V@:G>W 5%E<5 eT 5 p:8+78W)'eM¥L'CÊû 5 7U; 5 5 W¨0e 5E8E n =»jFV E8E (eLT 5 pX:G>7GW<'eMy;$>1>7GK E +7^; Ç eK; 5 5 W 5

9:;%<:=?>=Sª/B('F p; Z&[ LQYQ=^^ O ; [ ¥Cyé­\ ×_ ëd ×e ä QÐÍÙ% g LQYQ=^^QY Z ^ K yE h yup=Q: [G LQYåyé ä Î& Û Ò%Ù&6&Ó i yîLQ; H ^ K : J L K[G LQYçyE k y> GQK&N ; [[G LQYåyE Frq ä QÐÍÙ% FuF ë

fZ5 78]+WV E :G>e%:878W 5E 7 5 E8E 7 5 e 5%EGEG5 78Y%R'1 5 C v va 5 e:8+e; 5 EGE 0;>MK7US>T 5 V1>7G+pW 5E Y%R 5 °%I1I 4`4 7 5 ;$R_ E >R'e%:G;$1+7G:I>eK=Q: HZbH </­ Ù N ; Z L G LQ; H aY Z L KZbH yBBBé L%; H ^ K : J L K = K Y ZbH6G @QsQªCöóLQ;Y J > H 'CBv%n6= H ^ Z ; HAH6G ^ KGQ[ ß Z&K&NZbH LQ; H ^ K : J L K = H[AG v%n6= H ^ Z ; H a;YQY;&ß ZbH <L%; H ^ K : J L K

N =Qp G LQ;>>; H n: G a Z v G ^çöó; H6G ;&aPß NZ L NmZ ^å­Èl ZbHK lÙ; H ^ Z&[G : J ^ ZbH <A=AY;; j = N6G = [ ;%a © ;&:o>;%: G a;%: HG ^ KGQ[MG v%n6= H ^ Z ; H B? E8E (W<+e E +W'e;$K+JY%Rag$ E :8aRW 5 e7P.: 5 eJ 5 e E :G78RS+T 5*p p´t

<ûª²* 7 øV.

ø ý>t T»;»e 5%EGE 7 5 ;$RLS+T 5 CÌû ._V'e;VY%RF;+e%:G7 5 ; 5 e E :G78RS+T 5 6¦ 5 7U ;+MK»g$ E :8+W

78 Ç g 5%E 5 W0Re E Vy+e%:G78<+M' E(5 :G+78W<.eLM`ü±XC l EGEG5 5 e:8>+0 5 7UY%R 5Jç¼·;åÇ/¿éÆcA6ËEHD o CUÃ'eM'R 5 :G>7GW<'eMFü±XVtY%Rb:8W0L]>W E :8­#e 5µJç¼·;Ç/¿>­D7? HHD o C?à V% 5 W 5 W 5%E :878 5 7 5 p7UWi0C C

Page 86: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& àqI, !0i

i

i

i

i

i

i

i

qI Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

9:;%<:=?>=Sª/Bu®F p; Z&[ p=Q: [G LQYåyE­\ ×_ ëd ×e y ä ÒUÓ ê] ä Î%Q6ÒUÓÑ ò]üä ÒUÞÓ g ä ÒbÞÓ y ä ÐÍÙ Aä ÐÍÙ h y ä Ù ÛÛ Í Aä ÒUÞÓ y ä ÐQÍÙ Aä ÐÍÙ i ëkFrq p; Z&[ LQ; H ^ K : J L K[G LQYåyE­FuF ×Fr\ ëFr_ ×F|d ä Ù&Ó6Î%%Qè6ÙQU > GQK%N ; [%O ; [ ¥yEFreFrg ëFhFriFrk p; Z&[ > GQK%N ; [[G LQYçyE­\uq ×\F ë\u\ ×\u_ y ä ÒUÓ ê] ä Î%Q6ÒUÓÑ ò]üä ÒUÞÓ y ä QÐÍÙQ Aä ÐQÍÙ \d ä ÒbÞÓ > GQK%N ; [&O ; [ ¥Cyé\ue ë · E8E 'WV 5 °%I1 4`4 eT 5 5 ;$(;>K;$'7 E V 5 M'+7 5 : 5 º+e-ü±XV 5 W<]: 5 ; 5 L'#;$+1

7 5E8E >R'7i78> 5 e9N+eL; 5 RW 5 RòRW !# ¼CO 5 W e 5 :87ÍY%R&¼V )&F!"±$'&` 5 ;$>W 5 R,eLT 5 7GN>7e%RW<L&¼V 5 Y%R#+7UÍ EGE 5 e7P.: 5 C<c^ E RW<.e; 5 VB EGE z;$1>7:I+e+'ä; 5 °%I1I 4`4 e 5%E .e$¦ 5 7GWiY%R<e 5E8E Í78W<­:GK+eT 5 ]AØA@ù*"IúFV$ 5 7G:8e: 5 V$eT 5 ]J;$>Y%R;07U) E8E (:G' 5 ;$· m CfZ5 78]+WVL#HMH:8.Wi#M''e9#;<W<>e E >W¨e 5%E ;­iRW<#.e;'>S+T 5 ;$3 5 W 5 78 EG5 M'1+7a EGE

7 5 M'+WiV E +W:8+7^Y%RM.:G>7876e 5E8E 37UWi­:8'>Cd¤ °I1 4`4 eT 5 5 e E >RJ;$NK;$.7`Y%RM+W<.e9 5E +R'7 5 M'9e; 5 L>e E RW EGâ W0 5 M 5 ;>e%:G7U;VB 5 E +M'i 5 ;$ E +7 5 W< E W 578( 5 R !"±$'&¼C@s E :8M'1>_V$R$:8.M''_>eL; 5 W< E M.Re EaEGâ W0 5 M 5%E ;)+e%:G7U;VE *v<+_;$(: 5 Wi7^<;$>+ E T 5 CZödW 5E 1+78 Ç >7a E 5 e E :G78RS È E Y%R E :UT 5 +W« 5 ePH: 5

• ¶ 12ª¥¯6¨· 'eKKp E # 5 W 5 :G' 5 ;17GK­I1>MdYRi 5 ;$ E +7bRWþü±cVØRWÐ ü±=ü 5 RRWK;$>e:8 Ç +; 5 7NC#û»> 5 E :8+WÿRW K;$>e:8 Ç +; 5 7NVÌY%Ri] 5 e 5 W<#;$iRW<ä178K­I1+MXVBV;+ 5 E V6 5 ;$z:G>7)RW 78ä 5 MKU9:8 5 R¬RWi-1 â 78RMKV 5 R¬RW 5 e%: 5 pX+pX1 â 7GRMKVZ;+t+e;$>e; 5 ;$ EGE (:G>78++'7 5<Eâ W3 5 M 5 V$ 5 ;$J:G>7^RWî¦ >U9< 5 M'U9:GV 5 RäRWîK;$>e:8 Ç p>; 5 7>V 5 R 5)Ç W«;)7 5 ;RS+T 5 V$78 E LN :G'1W<+e%:8m

•«6Dy34M¥@¥@6¨· J.e'+'p E @ 5 W 5 :G' 5 ; 5 W<]: 5 ; 5 V;$> 5 E 5 ;$ 5 ReT 5 :G>7ÌRWi E >Y=kI>eK

;F7G@@¦ NU9» 5 MKU9:8 E V;$+ 5 E V>:8+W\RW\K;$>e:8 Ç +; 5 7ØY%RF] 5 e 5 W<F; 5 W<]: 5 ; 5V;$> 5 E V 5 5 7G 5 ; 5 W<]+: 5 ; 5 VLYR E 'e'+'< 5 WRW«78J7I+e%:8 E E C

· E8E 'WVL7U E t+7 E »J>e%:G7U;J 5 7G78 E 5 e;$ 5 R)eLT 5 JRW &¼V%78> E W 5EZ5 M.97:G7I E6Eâ W3 5 M 5E 7U(¦ 78+e%:G +W1>_»;$»L>e E RWC m 5 7G'W<+'7 5bEGâ W0 5 M 5 ¦ 5 7@RW«ü±cV%RW

Page 87: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& àqo !0qi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ#x)Ü»Ò ð»ÛÌ×ÓX¿ÊÓ×*Ò0ÔLð^Ô[×+ÎZÜ qo

* ü±Xü 5 R3RWK;$>e:8 Ç +; 5 7NV Ç +W 5%E +W;7H1K;(+e%:G78 5E ; 5 E eT 5 p:8+78W<.e E +WËYR E :8T 5 C¤ M'9W 5E V$+e%:UT 5 V 5#E +Re; 5 VY%R E J¦ 5 7`RWîK;$>e:8 Ç +; 5 7NV'e;) 5 ; E >7»Y%RMKY%R+7aRW; 5%E ; 5 E ù RW¨W<]: 5 ; 5 Y%R7G+: 5 7Ge)RWî:G' 5zE >W¨;$'W<+e E T 5 :G>W« 5 W 5iE >ReL; 5#Eâ W3 5 M 5RW K;$>e:8 Ç +; 5 7 ú Cbs E(E 5 M'978W 5E^5 :G>78++'7 5äEâ W3 5 M 5 Vy1+78+W 5E Y%R)7U 5 + E5 ;;$NMK7US+T 5 ;$(RWi3178K­I1+MXV>M.(;$+1 E +7FRW7G( 5 M'U9+:GVRWi01 â 78RMK 5 R#RW 5 e%: 5 ppr1 â 78RM'V Y%R^e+e9RW ;$ E :8 E 5 ;$»78>++7@ 5 W 5 :G>78++'7 5bEGâ W0 5 M 5 ;b;$NMK7US+T 5 ;$W<]: 5 ; 5 C f 7Ui E :8¶HMH:8.WiVL 5 ;$+7 â W 5E :8+7(RW«¦ >U9# 5 MKU9:8 5 RRW 787I+e%:G E E; 5 'e â + 5 ; 5 eLT 5 pX:G>7GW<'eM|!#%$C?de%:8T 5 V;$'+ 5 e78+W 5%EªJ e 5%EGE 3'W<M'+W<+e%:8S+T 5)5iE +R.e%:8J 5 WieL; 5

9:;%<:=?>=Sª/B ¬F p; Z&[ LQYQ=^^ O ; [ ¥Cyé­\ ×_ ëd ×e ä QÐÍÙ% g LQYQ=^^QY Z ^ K yE h y6|Í#Í%Þ/y@Tp=Q: [G LQYåyé ä Î& Û Ò%Ù&6&Ó i yîLQ; H ^ K : J L K[G LQYçyE k y> GQK&N ; [[G LQYåyE Frq ä QÐÍÙ% FuF ë ¤ »@M ¶ f ¸¶¾À¿%¸Ã R$:8.M''_>; 5 eL&¦ 78+e%:8; 5 J;$'_ 5 °I1 4`4 YR;+1+7U7

RW W<]: 5 ; 5 Y%R-eM. E -:87I E#Eâ W3 5 M 5E,J ¦ 7G>e:878;$NK;$.7 E ;+1 5 RòeT 5 :8+e%:87+ E 7zÑ+e%:G7U;à 5 WÙRW &¼CO«W3RH: 5 'W) 5 7G:8e%:Ge 5 :U7YR 5 · m 5 M'9,:87I EEGâ W0 5 M 5%E ;'e:8d@1+78 Ç + E d+M' E 5 ;+W E +7Ø> E ; 5%E 5 W 5 Y%R@ E :U­»t¯ EÌ5 »@M ¶ f ¸¶¾ Ve E :8&+ E5 V 5 eT 5 p:8+78W)'eM/¼C m & E8E E :G7I EzEâ W3 5 M 5E > E 78+WVa+M' E +R 5 7 E8E 3+W)'e9 5 E )M'RW ;$>M. E eT 5 + E 7>VRW >W<'e9 5 MH:8+78e:8.1 5 ]b: 5 Wi; 5 C^· E8E 'WV5 »¯M ¶ f ¸¶¾ ;$>1 E >70R:G'M.'_>; 5E +W<78äe%RW 5 e: 5 ;;> E T 5 ; 5 · m Cd·^M']+W ; E8E5 V;$>1+W 5%EØE +7[W3R.: 5 R';; 5EG5E 5 E :G'RMK78W 5EØ5 1M 5 7Z; 5 »@ ¶ f ¸¶¾ V 5 E[E 5 eXHW<+7 5;$ Eâ W3 5 M 5E E :G'RMK; 5%E ¦ 5 7ØW<>e 5 7ZY%R 5 e>+ E8E ­7G 5 VN 5 ;+W 5E :G>7Ø>e:878; E + E ; E 5 W7 5 ;$RS È E .eL;$NYRL; E V^e+e9%RW I1 E5 ; 5 °I1 4`4 V 5 E@5 R E5 ; 5 »@M ¶ f ¸¶¾ ;$ E M'')1>7G Ç +S+T 5 ;$b 5 e7P.: 5%E eY%R>M.J 5 e%: 5 CfZ5 7^+g>W<M 5 V E ei7 5 ;$RS>T 5 e%:G>7G 5 7a:8.1] E8E >W 5E R$:8.M'._N; 5 RWλ@M ¶ f ¸¶¾ ¿y¹Ã&5 R

W< E W 5 RW »@M ¶ f ¸¶¾ ¿ºÃ V(:G'1] E8E +W 5E e<>e:878;) E +R'e:8+;+Kü±Ë8 p»t

:G>7 â W 5%E +7U; 5 RWî· m YR.78'3:G>e%:87`78> 5 e9>>7a E8E )+;$+K0 5 W 5 RW HC l EGEG5 5 7UYR 5 · m '7GK 5 M'97 5E 7G¯Ig$'W 5%E ; 5 E ù 5 RRWV E kR E ­ EGE +W 5E »@M ¶ f ¸¶¾ ¿|ºÃ ú EGâ W0 5 M 5%EY%R 5 W0'eW© 5 W &3 EGEG5ÑE +78' 52E R Ç +.>e%:G7U¬;$NK;$'7Y%R EGE E +78' 5+W<.e9 5 5 7878: 5 78 :G>e%:87@7GN 5 e9>++7kJ+e%:G7U;CÌ?@e:UT 5 VeT 5JE `+ee E `'e%:G7 5 ;R_+'7RW 5 Wie; 5 ;$1»¯M ¶ f ¸¶¾ e 5 78Y%R'1 5 C v v Ç _>+7k 5 WY%R`RWiJ;$1+7G:I>eK» 5 W 5 Y%R+MK1 E :839­0 5 R 5 ;$+.g$(;$ 5 5 7878+7NC l E8E5 eT 5 7Ue%:8»Y%R(0;$>+ E T 5 Y%R 5 .W<M'+W<>e:U; 5 7¦ 5 7US 5 R 5 · m 0: 5 Wi7a E :Gvi 5 7G78:UC

¤ê°I1 4`4 5E8E RLRWi 5 PS+T 5 M 5 MtY%R»]y»¯M ¶ f ¸¶¾½¼c VYR ;$+:G+78W<.eLbY%R ;$Rp7Ue%:G`: 5 ;30e­M. E 5 eXHW<+7 5 ;$»: 5 º+e E 5 e E RM.:8; 5E L7Ub;$>+';.7 E5 78»Y%R»7 5 ;$RS>T 5

Page 88: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§Q¨X© ss%ªRQ«R ©%¬z§Q¨X© sC­s® §¨ n=Q< G '« §¨X¯ ®®i

i

i

i

i

i

i

i

q Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

M.K+7@](.RMP C@¤ê1M 5 7GpXL;$7UT 5 ])"V%(Y%Re: 5 Wi 5 7@¦ 5 7F E8E (1M 5 7NVWi E .e Ç +.>e:8E +7U­ 5 · m CZ· E8E 'WVZ7GN 5 W<>e;p E )R:G'M.'_>7 5 1M 5 7#"z 5 W 5 M 55 º9N;M 5 LMd#R:G'M.'_>7 5 Wie; 5%E »¯M ¶ f ¸¶¾ e 5E 5 e%: 5%E YRJ¦ 5 78+WeN EGE ­78 5%E C

¤ E 78¯Ig$.W 5E eT 5 pX:G>7GW<'e EkE T 5E 'W<M. E W<>e:8`.W<M'+W<>e:US>T 5 ; 5 Y%RZv­J¦ 5 ;$ E 78.: 5e)e 5%EGE 378Wi­:GK+0eT 5 ;$>1>Wî78+78 E +e%:8767 5 M.>Wi378 5 M'+.: 5 7NC

9:;%<:=?>=Sª/BEDbsF p; Z&[ > GQK%N ; [%O ; [ ¥yE­\ ×_ ëd ×e ä 9ÍQQÓ n6=Q:=?>Y Z ^ K yE ä 9ÍQQÓ ^ K = KG > G&HK yEg ëhi p; Z&[ n6=Q:=b>Y Z ^ K yé­k ×Frq ëFuF ×Fr\ Fr_ y ä ÒUÓ ê] ä Î&QÒUÓÑ ò]ðä ÒUÞQÓ ä ÒUÞÓ y ä ÐÍÙ Aä ÐÍÙ F|d y ä Ù ÛQÛ Í y ä ÒUÓ ê] ä Î%Q6ÒUÓÑ ò]üä ÒUÞÓ Fre ä ÒUÞQÓ y ä QÐÍÙQ Aä ÐQÍÙ Frg Fh Fri ë

= 5 eT 5 p:8+78W<.eM­ !#XV>e 5 e:878W 5E e 5 1IW<+e%:G RWî 5 Wie; 5 »¯M ¶ f ¸¶¾ V+W¦ 78+e%:GJ;$l¼C@=^ EGE > EG5 V:&B>e:8780+W 5 e7PLH: 5 5 W üG XV$ 5 E W3 5E 5 p;$>WË'eKK7Gp E ^ 5 WRWK;$+e%:G Ç >; 5 7>C[s E@5 E >W)7G`:8+WV;$+ 5 E ;;>MK7US>T 5; 5 :8. 5 V%RW 5 R$:87 5 K;$+e%:8 Ç >; 5 7>V 5 Y%R`eT 5 5 ;$ 5 5 7G78+7ke 5 5 Wie; 5 78+78 E +e%:8; 5 5 7 üG XCZ· E8E 'WVRWM 55 º9>;0;$`; 5 EkEGâ W0 5 M 5%E ] E R Ç +.>e:8a7U»78 EG5 M'1>7 5 7 5 M.>W<C

9:;%<:=?>=Sª/BEDDF p; Z&[ ^ K = KG > G&HK yé­\ ×_ ëd ×e Í#QÍQÞ/y © g p=Q: [G L%YåyEh ]i = K : ZbO ^ K = K yE ä ÎU Û Ò%ÙU6&Ó k ]Frq n: ZbHK ^ K = K yE ä ÎU Û Ò%ÙU6&Ó FuF ]Fr\ : G = [ ^ K = K yE ä ÎU Û Ò%ÙU6&Ó Fr_ ]F|d : GQK%J : H ^ K = K yé ä Î& Û Ò%Ù&6&Ó Fre ]Frg ^ J n G :6^ K = K yE ä ÎU Û Ò%ÙU6&Ó Fh ]

Page 89: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§Q¨X© ss%ªRQ«R ©%¬z§Q¨X© sC­s® §¨ n=Q< G '' §¨X¯ ® ¬i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ#x)Ü»Ò ð»ÛÌ×ÓX¿ÊÓ×*Ò0ÔLð^Ô[×+ÎZÜ qq

Fri Z a6^ K = K yEFrk ]\uq a;%:6^ K = K yE\F ]\u\ ä ÐÍÙ& ^ K = K Y Z ^ K yé ä ÐÍÙ% \u_ ]\d ä ÐÍ Aä Î& Û Ò&Ù&6&Ó \ue ]\ug ä Î& Û Ò%Ù&6&Ó \h ë ¤ E 5 W<e; 5%E ;)M.'eRL>W E T 5 7GN 5 e9>+'; 5%E L>M 5%E eT 5 p:8+78W)'e EaE +R.e%:G E

9:;%<:=?>=Sª/BED ©F p; Z&[ = K : ZbO ^ K = K yé­\ ×_ ëd ×e Y&p=Y J6G yE ä ÍÎÎÒ%Ñ%Ó yæ=Y;L G v%n: G ^Q^ Z ; H yé ] G v%n: G ^^ Z ; H yEg ëhi p; Z&[ n: ZbHK ^ K = K yé­k ×Frq ëFuF ×Fr\ ä 9ÒUÓ SG v%n: G ^^ Z ; H yEFr_ ëF|dFre p; Z&[ : G = [ ^ K = K yE­Frg ×Fh ëFri ×Frk ä ÍQÞ Y&p=Y J6G yE\uq ë\F\u\\u_ p; Z&[ : GQK%J : H ^ K = K yE­\d ×\ue ë\ug ×\h ä %èQÓ G v%n: G ^^ Z ; H yE \ui ë\uk_uq_F p; Z&[ ^ J n G :^ K = K yé­_u\ ×_u_ ë_d ×_ue ä ÎUè9 Aä 9ÍQQÓ =Q:<Y Z ^ K yé ä 9ÍQQÓ _ug ë_h_ui p; Z&[MZ a6^ K = K yE­

Page 90: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§Q¨X© ss%ªRQ«R ©%¬z§Q¨X© sC­s® §¨ n=Q< G '® §¨X¯¬ si

i

i

i

i

i

i

i

q Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

_uk ×dq ëdîF ×d\ ä Ò&ï Sä Q9ÍQÓ SG v%n: G ^^ Z ; H yE ä 9ÍQQÓ ^ K = KG > G&HK yEd_ 6Í#ÍQÞ/yEDQ ä 6Î& ^ K = KG > G&HK yé dud ëdedgdhdi p; Z&[ a;%:6^ K = K yE­dk ×euq ëeF ×eu\ ä ï& Sä 9ÍQQÓ = K : ZbO ^ K = K yE ä Î& Û Ò%Ù&&Ó eu_ G v%n: G ^^ Z ; H yE mä Î& Û Ò%Ù&&Ó ed = K : ZbO ^ K = K yE ä 9ÍQÓ eue ^ K = KG > G&HK yEeug ëeheui p; Z&[ ^ K = K Y Z ^ K yé­euk ×guq ëgF ×gu\ ^ K = KG > GUHK yE-^ K = K Y Z ^ K yE gu_ ëgdgue p; Z&[ Y%p=Y JG yE­gug ×gh ëgui ×guk ä ÒbÞÓ yhq ä ÐÍÙ SG v&n: G ^^ Z ; H yE ä QÐÍÙQ ò]hF ä Þ6% Sä ÒUÞÓ ä 9Í%Ó =Q:Q<Y Z ^ K yE ä 9Í%Ó %h\ h_ ëhrdhe p; Z&[ =Y;L G v%n: G ^Q^ Z ; H yéã­hg ×huh ëhi ×hk ä Ó yiuq 6Í#ÍQÞCy © ä ÒUÞQÓ Aä 9ÍQÓ =Q:<Y Z ^ K yE ä 9ÍQÓ ò]iF y ä ÒbÓ ò]ðä Î%QÒUÓÑ ò](ä ÒUÞQÓ iu\ y ä ÐQÍÙ AG v%n: G ^^ Z ; H yE ä ÐÍÙ Ufiu_ id ë

¤ eLT 5 pX:G>7GW<'eM1L89 üG2 5%EGE RdRW´ 5 Wie; 5 »@M ¶ f ¸¶¾ +RvR$:8.M'._NS>T 55M'+.: 5 76 5 ;$»¦§+.M'W<+e%:G^K;$>e:8 Ç +7NCZ½^W + E5 ;$.¦ +78+e%:8 5 5 7G78ae 5 eT 5 pX:G+78W<.eLMBü ý XC m eT 5 R$:8.M''_>78W 5E65 5 WieL; 5 »@M ¶ f ¸¶¾ E t> Ç >; 5 eY%R>M.(eT 5 pX:G+78W<.eLMXV 5 $:G>7G>W 5%E E >R'e%:G;1+7G:I>eK) 5 7 5 + E8E 7 5 78Y%R'1 5 C v v

Page 91: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& àq !0"i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ#x)Ü»Ò ð»ÛÌ×ÓX¿ÊÓ×*Ò0ÔLð^Ô[×+ÎZÜ q

=Q: HZbH </­ Ù N ; Z L G LQ; H aY Z L KZbH %BBB L%; H ^ K : J L K = K Y ZbH6G ª © åö3LQ;Y J > H Bv%n6= H ^ Z ; HAH6G ^ KGQ[ ß Z&K&NZbH LQ; H ^ K : J L K = H[AG v%n6= H ^ Z ; H a;YQY;&ß ZbH <L%; H ^ K : J L KN =Qp G LQ;>>; H n: G a Z v G ^çöó; H6G ;&aPß NZ L NmZ ^å­Èl G Y^ G lÙ; H ^ Z&[G : J ^ ZbH <A=AY;; j = N6G = [ ;%a © ;&:o>;%: G a;%: HG ^ KGQ[MG v%n6= H ^ Z ; H B

l EGEG5 5 e%:GN<+W 1'7:8R;$#;$#ä7:8Äáz; 5 5 W<e; 5E +7 5 P 5 eLMXC)?\;$> 5 E ;$RWæ 5 Wie; 5 ü ý E +WæÍ7G:G(á+Vy 5 ;$>W 5%E :8+7(RWÐ5<Y%R0L>7:8+e+0iRW 5 Wie; 5ü ýWi E g:8+78e 5 C fZ5 7`+g>W<M 5 V

b ^¢X¢ b g¢X¢

^¢¡^ó _7h7i_g¢g¡ó

? E8E z+;+Ki 5 ;$Vy;$0 5 7U; 5 5 WæÍ;$ Ç eKS+T 5 ;$Íü ý !#3ù E >W 5 »@ ¶ f ¸¶¾ ú VE +7).e%:G>7G7G+:8;& 5 W 5 RW 5 Wie; 5 ü ýQWi E +g:G+78e 5 YRzeT 5 5E8E Ra-7:8áY%Rb:8+Wæ'e%:G+78e 5 #+M'3RW 5 R$:87 5 5 WieL; 5 ü ýUCJ? E8E ) 5 W<e; 5 .e%:G>7Ge 5 5%EGE RXVPe#7:8=%$ VØRW<&:G78'RKS+T 5 + ¾zR0¬V[e7:8¯á+VZRWi 5 R$:878:G78.R'S>T 5 + z0C¤ R$:G7Uä.e%:8+787G+:8S+T 5 ]iRW´ 5 Wie; 5 g:G>7Ge 5 Y%R<:8+W RW 5 Wie; 5 'e%:G>7Ge 5 ü ýàe 57UW 5 1>78;;$>.7 5 »RWî 5 W<e; 5 ;(:G78.R'S>T 5 +¼mz0ze07:8láC6¤ê 5 Wie; 5 ü ý'e:8+78e 5 5%EGE RBL>e E RWi<:87G'RKS+T 5 ;+e%:G7 5 ;$+M'V E +W:G+7 0L7G:G¶5+Cf 7U^:8+e%:87k7G E5 M.1+7[ E8E a 5 e7P.: 5 V 5 ;$>7 â W 5E :8+e%:87ZRW<+e%:87 5 eXHW<>7 5 ;$a: 5 º>e E

R$:8.M'._N; 5%E 5 W 5 M 55 º9>;yC fZ5 78]+WV E8E5#E W 5E :G7U78')'e=H:G'MC»¤°I1 4`4 eT 5 5 e E +R;$NK;$.7dY%R^>W<'e9 5 : 5 W<7dY%Re; 5(5 78¯Ig$.W 5 : 5 º+e0¦ 5 7@RW áV 5 E eT 5E t E `;$+1 5 e E RW<.7 5bEGâ W3 5 M 5 á ;$+e%:87 5 ; 5 5 WieL; 5 ü ý 5 R)RM'7k: 5 ;JL7G:Gná ; 5 5 Wie; 5Í> E 73>e:878; 5 Wÿ E :G78R$:GR7UY%R# E :U­Wi E g:8+78e 5 ü ý !#cCs& E EGE E :G78R$:8R78J] 78¯78'JL7G:Gná ;^RW 5 R$:87 5 ü ý dWi E +g:G+78e 5 C[· EGE .WV E ^:G+e%:U78W 5%ERW)>e%:87 5 eXHW<>7 5 ;$0M 55 º9>; E Vt.78+W 5%E > E 7» EGE E(EGâ W0 5 M 5%E»E +W<78) 5 Wæ E ;$R E 5 e E :G78RS È E Y%Ra E :8T 5 >WË 5 e7P.: 5 ù e(1+7U;;$V(W) E Wi( 5 e E :87GRLS+T 5 ú 5 R0 5 We>e9RWi;$>M' E C l E8E5<E 'e Ç >3Y%R);$>+ E T 5<E >78­00;(R:G'M.'_>7 E +W<78J07 5 ;$RS>T 5 ; 5 ü ý FWi E'e:8+78e 5 V$ 5 Ea5 »@ ¶ f ¸¶¾ .eL;$R_b) E8EG5 Cj>M.'_+W<+e%:8V$ E8E ^] 5 5 W) 5 7G:8W<+e%: 5 Y%R(;$ E *vW 5E Ck¤ R E vV 5 á( E :87U­ E +W<78

E8EG5 +'; 5 5 W 5 ü ý-e:8+78 5 7^#>M.3Y%R3 E :G'1+7 Wi E 78¯Ig$.W 5 C`= 5 g$+W<M 5 VL:G>7 â W 5%E E H:8RS>T 5 W 5E :G7U;äe Ç R7UC'"Cs E g:G>7GeW<+e%:GVÌ:8+W 5E U9Wi; 5 W<]: 5 ; 5 5 7G78 E 5 e;$>e%:G» 5 !#cV$Y%RV 5 1+78 Ç +7 5 : 5 º+ez 5 787G>e%:G»eL0>;$>');$(+e%:G7U;VU9W< 5 W<]+: 5 ; 5 ü ý !"XC,? E :GV6 5 7 E R-1>_Vd 5 e EG5 W< 5%E : 5 º+e E ü ýQ p V@;+ 5 EU9W<89UüG¬VØ 5 78: 5 78e7;YR+MKäU9LWi;VÌ 5 e EG5 W< t Cz?dW E +RK;V[U9Wi78>R7 E .1W)>e%:G 5 ))!#cV@Y%RVd 5 7 E RL&1+_V6U9Wi;$ze 5 1 5&5 ü ý ))!#cCà? EGE E +Re;U9Wi;- 5 e EG5 W<ü ýò p VFU9Wi89UüGÊ 5 e EG5 W< t C 4 9W<V6>e%:8T 5 V ))!#c<Y%RV 5 M'9eL; 55 M 55 ºI9>;yV`U9Wi* üG )C\· 5 78: 5 7GeL7#; 5 * üG )i; 5 ))!"XV 5 W)]+: 5 ; 5 ü ý ))!"(1>7G Ç > 5 : 5 º+e 5 7878+e%:GVti 5 W 5 ]<RW á+VB+M' 5 e EG5 W<d E8E k: 5 º+ezù 5 R E vV;$>+';.Rb 5 7[eT 5 RMK7[^7:8Ø*>M E @;»7 5 ;RS+T 5 úPFU9Wi ))!#cØ78J E +Re;J:87G'RKS+T 5 CØ? EGE `] 5 5 W< 5 7:UW<+e%: 5 ;$ E v; 5 C[= 5 :8V>e%:8T 5 VY%R 5 5 Wie; 5 »@M ¶ f ¸¶¾ ¿|ºÃÑE >7G1)L7Uͦ 5 78S>7 5 · m 5 e E RW<'7 5 áÍ;$>e%:G7 5 ; 5W<]: 5 ; 5 ü ý !#XC

Page 92: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§Q¨X© ss%ªRQ«R ©%¬z§Q¨X© sC­s® §¨ n=Q< G ®s §¨X¯¬©i

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

statement

consome: if ( expression

consome: )

ifstatementconsome: if (

expressionconsome: b == 0

consome: a == 0

consome: )

statement

atribstatconsome: a = a + 1

consome: ;consome: else

statement

atribstatconsome: b = b + 1

consome: ;

statement

ifstatement

j[.R780C'" u 4 9Wi; E ; 5 · m 78zü ý E e'e9; 5E C

?^VP7U# 5 e+M.R'7NV:G>W 5E E 'W<M'+W<+e%:8S È E ; 5E eT 5 pX:G+78W<.eL E 5 7G78 E 5 e;$>e:8 ENJEg$78 E8EGÈ E ;»e 5E8E aM''eR>WäC[·`Y%R:UW0L]>WêeLT 5 9­»e;^;$@'W< 5 7:Ue%:GF E +7Z 5 W<>e$p:8; 5 VL 5 E E8E E eT 5 pX:G>7GW<'e E^E T 5 t+eL E RW<#7G>7 5 ;$RLS+T 5 ; E 7 5 ;$RS È E W 5E :G7U; Ee 5 + â :GRM 5 )J â 5 W)>e%:8; E C

9:;%<:=?>=Sª/BEDb@F p; Z&[SG v%n: G ^^ Z ; H yE-­\ ×_ ëd ×e HQJ > G v%n:CyE-%y ä ê]üä ÑQ ê]ðä ê]üä Ñ% ](ä " ]ðä Ó! HJ > G v%n:Cyé g ëhi p; Z&[THJ > G v&n:CyE­k ×Frq ëFuF ×Fr\ KG :U>áyE!yQy ä 9Qè6Î ê](ä&Û ÒUÓQèÎ KG :U>áyé Fr_ ëF|dFre p; Z&[tKG :U>áyé­Frg ×Fh ëFri ×Frk JQH =Q:¥ G v%n:CyEyy ä Î%ÍQ ò]ðä Î&ÍÎ# Ì]æä Û6 JH =Q:¥ G v%n:Cyé \uq ë

Page 93: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& " !0/i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ#x)Ü»Ò ð»ÛÌ×ÓX¿ÊÓ×*Ò0ÔLð^Ô[×+ÎZÜ "

\F\u\ p; Z&[TJH =Q:¥ G v%n:Cyé­\u_ ×\d ë\ue ×\ug %y ä 9QèÎ ò]ðä&Û ÒbÓQèÎ a=L K ;&:CyE\h ë\ui\uk_uq p; Z&[ a=L K ;&:CyE­_F ×_u\ ë_u_ ×_d_ue_ug y_h äZbHK ÏLQ; H ^ K = HK ]_ui ä ^ K : ZbH <ÏL%; H ^ K = HK ]_uk äUHJ YQYÏLQ; H ^ K = HK ]dq Y%p=Y J6G yE ]dîF ä 9Í%Ó SG v&n: G ^^ Z ; H yE ä 9ÍQQÓ d\ ëd_dud p; Z&[ =Q:<Y Z ^ K yE­de ×dg ëdh ×di G v%n: G ^^ Z ; H yEy ä Ù ÛQÛ Í SG v%n: G ^^ Z ; H yE dk ëeuq

4.3 Arquivos-fonte do compilador= 5 ;$.78:8¯78 5 92 5 Q9 E b+e 5 e%:G7Ui#e 5 1I<1+7 E T 5 ; 5 e 5%EGEG5 7UY%R'1 5 C v v»YR3'W)M.+pW<+e%:8Í#e­M. E E 'e%:8­:8'>#; 5 e 5E8E5 5 W<'M'; 5 7NC»¤ E 5 Wie; 5%E 78i+7GK7 5 · m E T 5#5%EW< E W 5E W 5E :G7U; 5%E e 5 + â :8RM 5 /

`^T WT^di_&dK©X^&]7^`X`h=^[XM7óXóªZ3©X© ^&]7^ ² \fTbh&_&d ² \fTbh=_&d_&di7b\[ ~ Z ^di_&d7_[_&d^&S7\&d ² \T d:b=QXS ` c ~XXS° X[ñ:b=`d\i iS_f­i³Ñ ± [:`@Z² \T d:b=QXS ` ~XX __gEX^cb[ªÑ ± [:`|Z S T_ ©X^&]7^`X` YbS=Q¤[\^&dX=f_[7SiX\&d¤Q_7hT _X^&ab[7¤&d\f¦bh=_h=^[7M7óXóeZ6©X©RZZ£Z bh&_ ò \&ö_[XñXXd d=d\&d«Z ©X^&]7^ aX\X_i[\&S£_ b&iS«Z_bhXh£`d_X^&S7_¤\[_eZ bh&_ ^&di_ `_TXS:b\[ªZ6©X^]7^ a7\X_i[\S_ b=iS«Z_bhXh£`d_=^&S_¤\[_OZ bh&_ ò \&ö_[«Z6©X^&]^ a7\=_i[\&S£_ b=iS«Z_bh=h¡`d_X^&S_¤\[_eZ bh&_ Q° bfTch&_ ² Q^&d ° SXd_&^f1Z3©=^]^ a7\=_i[\&S¡_ b=iS«Z_bhXh£`d_X^&S7_¤\[_eZ ^&dci_&d¤_[_&d^&S_&a£i:`X`_iXi&hXh Z`^T ©X^&]7^`T^&di_&dWXh=^[7M«Z6©=^&]^

Page 94: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& !0i

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

l eM'R'R$p E V:8W3t]+WVe 5 ;.78:8¯78 5 !19L0RW«7 5 7UWiü±c*.6 .) ü± XüGiY%R 5E8E RaRW 1+7 E T 5 ; 5 +ü± 5 W M.Re E +787 5E3E 'e:U­:8' 5E C¬· 5 +gNR$:U78W 5E05 e 5%EGEG5 5 W<.MK; 5 7a7U)eM. E 7a E8E 7UY%R'1 5 V 5 $:G>W 5%EF5#E >R'e%:G(7G E RM.:8; 5

`^T ©X^&]7^T^&di_&dªZh=^[7RZXZ6WiXi^fTch=_i&Wgb[7S&d_X__dXd\=iXb'[XS^&Scb=`\OZ 7óXó ² \fTbh=_d_di7b\[ Z ~X= _X^&ab[7¤&d\f¦bh=_ ZXZ6WiXi^fTch=_i&Wgb[7S&d_X__dXdX\c=iXb'[XS^&Scb=`\OZ Z£ZZ [:`\X[7S_d_=a f:_i ^&Shb[_ ~ Ñð`\7hf[ Z_^i_ T_`S:b'[7\[_\=eU

Ò Z=ZXZ' Z=ZXZ Z Z=ZXZ c Z=ZXZ õ Z=ZXZ ¢=¢ ZXZXZ õ¢ ZXZXZ ¢ ZXZXZ ¢ ZXZXZ ó Z=ZXZ Z=ZXZ Z=ZXZ W Z=ZXZ ý Z=ZXZ

a _ b=`^7h dXd\di7\X[7ac°& [7S^`S:b=` dXd\&diX\X[a·W<+e E +W W 5E :G7Upre 5%E Y%R EE +78'W 5E 5E8EGâ 1+ E : 5 º+e E E t+7U; 5%E t¯ E :87G.p

RKS+T 5 ab^¤¢£aLC0? E YR>>W 5 pre 5E ;$i 5 M 5 +7 5 5 e%: 5 pX+pX1 â 7GRMK#t¯ E E8E ) 5 Wie; 5 V 5Y%R 5 7G''e 5 R 5 >7G7 5 C(= 5 :8)Y%RVyt E 7J;$0 5 e%:G>7(;$'1>7 EG5E +787 5%E»E .e%:U­:GK 5%E V EG5 W<+e%:G 578.W<>.7 5 ]ÍW 5E :G7U; 5 5 eM' E 78W 5EJ5 78Y%R'1 5 +ü±.6 .)Uü±c)üGC l E : 5 5 7UYR 5e 5%EGEG5 · m eT 5E #78>+Rt+7U; 5 >7G7 5 Í:G+78W<.eL E Rg$NRS>T 5 C-= 5 > â :GRM 5 o1>7G>W 5E 5 W 5 'W<M'+W<+e%:87`7GNRt+7US>T 5 ;$+787 5 e 5 e 5%EGEG5 5 W<'M'; 5 7NCl eM'R'R$p E Vd:8W3t]+WVFe 5 ;$.78:8¯78 5 !N9:L 5 78Y%R'1 5 ü ú á8òY%R 5 e%:8]+W RW

7 5 78W<3g:G78+WiW)>e%:G E 'W<M' E

`&h=^iXi b[7S£^ËÑg b[7SÊf

Ì·`Y%RÌ 5 ;$+78'<9LI1+7`RW« 5 e7P.: 5 V 5 E i;$NMK7US>T 5 ;$b178'­I1+ E YRb.e'+'#i+M' EGE

5 ;+78' E +7<: 5 Wi; 5 W RWi,;$NMK7US+T 5 ;$17GK­I1> E)5 RQ 5 W 5 RW<,;>MK7US>T 5 ;$W<]: 5 ; 5 V E t+eL E<5E ; 5 E 78.W<+'7 5E : 5 º+e E ¦ 5E8E >W 5 e E K;$>78; 5E 7U;$>+';.7#Y%RM7 5 ;$RS+T 5 R$:G'M'._N7NC ·»M. 5¬E +W<+M'9e%:8 5 5 787G 5 W à;$>+M'78S+T 5 ; 5 W<]: 5 ; 5 !0C\s E

Page 95: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿ= ~X= W7W ~ X ~X U XT^&_ X X i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ#x)Ü»Ò ð»ÛÌ×ÓX¿ÊÓ×*Ò0ÔLð^Ô[×+ÎZÜ /

5 · m ¦ 5 ^+7U; 5 5 W RW M 55 º9N;Ñ;$:G7I E : 5 º>e E e E8E z 5 e%: 5 V 5 Y%R E5 M.RL 5 e 5 5 e7P.: 5 CØödW 5%E g$NR$:U7 5 e 5%EGEG5 5 W<'MK; 5 7kR$:G'M.'_>e; 5 5 tS>T 5 .6ü%þ ú 78( EGE 7 5 78W<CØ· E â ; 5 $:8';0] E +R.e%:8

`^T ©X^&]7^T^&di_&dªZh=^[7£aX_gX7K ° ZXZW7iXi^fTh=_i&W&aX_gXX ° Z 7óXó ² \fTbh=_d_di7b\[ Z ~X= _X^&ab[7¤&d\f¦bh=_ ZXZ6WiXi^fTch=_i&Wa7_gX= ° Z ZZZ² ^7h=hOU TXd\&Xd^f² ^7hXhOU `&h=^i=i&hb=iS² ^XhXhOU `h=^iXiaX_`&h² \[:if:_=aS\ö_[VUõ `&h=^iXi ² \[:if:_=aS\ö_[VUõXõ ±$ M^ ò U ' ² ^7hXhËU `&h=^iXig\=a ² \[:if_=aS\&ö_[VUõ ² ^7hXhOU ]^&d7a7_`&h aE\\"]± ^ ` $ ZXZ=Z :b=i7bS_=aS\ö_[VUõ b[7S @ T_`S_=aS\ö_[VUõ b[7S :b=i7bS_=aS\ö_[VUõXõ ±$ M^ ò U ^ | T_`S_=aS\ö_[VUõXõ ±$ M^ ò X :b=i7bS_=aS\ö_[VUõ Ñ | T_`S_&aS\&ö_[VUpõ Ò :b=i7bS_=aS\ö_[VUõ Ñ | T_`S_&aS\&ö_[VUpõ Ñ _&S=7d=[«U¶]^&d7a7_`&h aE\\"]X ` $° ± ²² $ $ ² ^7hXhOU ]^&d7a7_`&h² \[:if:_=aS7\&ö_[VUõ b[7S ² \[:if:_=aS7\&ö_[VUõ=õ ±$ M^ ò U ^ ² \[:if:_=aS7\&ö_[VUõ Ñ ² \[:if:_=aS7\&ö_[VUõ=õ ±$ M^ ò U g

_&S=7d=[«U¶]^&d7a7_`&h² \[:if_=aS\&ö_[VUõ ² ^7hXhOU ]^&d7a7_`&h aE\\"]± ^ ` $ ZXZ=Z :b=i7bS_=aS\ö_[VUõ b[7S @ T_`S_=aS\ö_[VUõ b[7S :b=i7bS_=aS\ö_[VUõXõ ±$ M^ ò U f | T_`S_=aS\ö_[VUõXõ ±$ M^ ò X :b=i7bS_=aS\ö_[VUõ | T_`S_&aS\&ö_[VUpõ Ò :b=i7bS_=aS\ö_[VUõ | T_`S_&aS\&ö_[VUpõ Ñ _&S=7d=[«U¶]^&d7a7_`&h aE\\"]X ` $° ± ²² $ $ b=i7bS_&aS\&ö_[«Uõ @ T_`S_=aS\ö_[VUõ : ² ^7hXhOU f:_&S=Q\&aXa7_`&h² \[:if:_=aS7\&ö_[VUõ b[7S ² \[:if:_=aS7\&ö_[VUõ=õ ±$ M^ ò U f ² ^7hXhËU f:_S=Q\=a&g\=a ² \[:if_=aS\&ö7_[VUõ ² ^7hXhOU T^&d^fhb=iS _&S=7d=[«U"T^&d^fhb=iS² \[:if_=aS\&ö7_[VUõ ² ^7hXhOU iS^&S7_f:_[7S² ^7h=hOU ]^d7a7_`&h aE\M\"]å± ^ ` $ ZXZXZ :b=i7bS7_=aS\&ö_[VUõ | T_`S_=aS7\&ö_[VUõ b[7S :b=i7bS7_=aS\&ö_[VUõ | T_`S_=aS7\&ö_[VUõ iSXd:b'[7 :b=i7bS7_=aS\&ö_[VUõ | T_`S_=aS7\&ö_[VUõ=õ ±$ M^ ò X _&S&7d=[VU¶]^d7a7_`&h aE\M\"]= ` $ ±7a $

Page 96: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& , !0i

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

² \[if:_=aÊS\&ö_[«Uõ _&S=7d=[«UpiS^&S7_f:_[7S

_&S=Xd=[VUnf:_S=Q\=a&g\=a _&S=7d=[«Uf:_&S=Q\&aXa7_`&h² \[:if_=aS\&ö_[VUõ Ì

_&S=Xd=[VU`&h=^iXig\=a _S=7d=[VU`h=^iXiaX_`&h

_&S=7d&[VU`&h=^i=i&hb=iS² \[:if:_=aS\ö_[VUõXõ \ X

_&S&7d=[VU"TXd\&Xd^fa _ b=`^7h dXd\di7\X[7a!°& [7S^`S:b=` dXd\&diX\X[aök*vbY%R E â ;(W 5E :G7UJY%R EdE T 55E W<]+: 5 ; 5E U9Wi; 5E »Y%R EdE T 5J5%E : 5 º+e E 5 e$p

E RW<'; 5%E +W +;JRWË;+M' E CZs 5E :G7UV:UW3t]+WV%YRLe; 5 +g$ E :G`RW 5 W<e; 5 »@M ¶ f ¸¶¾ VY%R EFE T 5b5E : 5 º+e E 1 E .:8; 5E eL31+78 Ç >S>T 5 ; 5E M 5%5 º9N; E CØO 5 > EG5 ; 5 5 WieL; 5 ep:G E ;$,de 5 W<]: 5 ; 5 L¼C»=»#7G'W<+'78):8+e%:8:G'1Vt E8E b 5 Wie; 5 »@ ¶ f ¸¶¾:G>7GW<'e 5 W Ig$.: 5 ;$>+';p E 5 7<:G>e%:87#eM' E 7<>e:878;- 5 7iW)> 5 ;äRW .¼Cd°%­0e 5<E +Re; 5 + E5 V+W3 5 7U3:G7I EaEâ W3 5 M 5E :8+e9W E '; 5 1 E .:8; 5E V 5 :8+7U>.7 5 eLT 5+ E ä 5 W 5 eT 5 pX:G+78W<.eLMK&FVÌ 5 73 E8E5 V 5 + E W)>e%: 5 ]<:G+e%:U; 5 5 W ä78¯Ig$.Wi 5E8E ''M.K;;VY%RJ]#!"%$¼C

Page 97: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& o !0qi

i

i

i

i

i

i

i

Capítulo 5Tratamento de ErrosSintáticos

¤ 5 W<'M'; 5 7bY%R<:8+W 5E :G]# 5 7Uä;$ E +W<t+e9 E 'W)M. E :878¦§;<:G+e%:U778> 5 pe9N>7dRWib+;$+Kb;$ 5 78; 5 5 W RWi7UWi­:GK+(»I1 E 7 5 R E R­7G 5 + E5 E8E5 eT 5bE v 5E8Eâ 1>MC m <Í+;$+KÍ;3+e%:878;#eT 5ÍE 0>eY%R;$7Ui>Wæe+e9RWiÍ7 5 ;$RLS+T 5 ;#78Wi­p:GK+V$e 5E8EG5 · m W 5E :G7U0+W¨Y%RJ 5 e%: 5 ;0+e%:878;3eLT 5 ¦ 5 y 5E8Eâ 1>Mt¦§_+>7 5 > E W<+e%: 5 V+e%:UT 5 V:G>7GW<'e E Rg$NRS>T 5 CØ?dW>78MV E8E J'e;$K+S+T 5bE +781`L7UbY%R 5 R E R­7G 5 5%EGE K;$+e%:G Ç >7 5 +787 5<E .e%:8­:GK 5<5 5 7G78'; 5 V 5 7878..7`)+e%:G7U;3beM' E ­prMKbe 5 1W<>e:8C? E8E )7 5 + E8E5 5 ;$ E +7(+e%:GN;$'e%:G E 5 eXHW<+7 5 ;$)+787 5E»E 'e:U­:8' 5E ]078e;$Vt 5 E

<+;3+g$>RLS+T 5 ; 5 5 W<.MK; 5 7NV 5 R E R­7G 5 ;$+1 N;$H:U7 5 7UY%R'1 5 ;$J+e%:G7U;VM 5 +M.'_>75 +787 5 VP 5 787G'.prM 5 <78+'eKK7 5 7 5 EGEG5 C m +78'z.e%:8+78 E8E e:8 E 0e 5E8E5 5 W<'MK; 5 7 ¦ 5%EGE +_;$W 5%E :8787#: 5 ; 5Eä5 RBV L>M 5 W<+e 5%E V(;$'1+7 EG5E >7G7 5EzE 'e%:8­:GK 5E ;$RWi E ¯¬1+_C· E8E .WV 5 e=HW)>7 5 ;$(H:8+7US È E 5 W<'M'pr 5 787G' E >7GKb78>;$R_+K; 5 C f 7U3Y%RJ EGEG5 5 e%:8>S+V5 5 W<'M'; 5 7(;$+1 E +7J+_3;078>+RL>787p E b; 5 >7G7 5#5 5 7G78'; 5 ) 5 e%:G'eR7 eÍe­M' E E .e%:8­:GK+C l EGEG5 e+W E >W<7Gi]<¦§­'MV[ 5 E +eY%Re%: 5 +e%:G7U;ä> E z 5 Wÿ E 7 5 ;$RS È E;Í7UWi­:8'>V] E 'W<M. E L7U 5 · m ;$>+';.7JY%R E 7 5 ;$RS È E ;$>1>W E +7»: 5 W<; E 7U78> 5 e9N+7b&+;+KC fZ5 78]+WV[Y%Re; 5 RWÿ>7G7 5E 'e%:8­:GK 55 5 7G78VÌ: 5 7Gep E <Wi E ;$.¦ â +.M;$NK;$.7^ 5 W 5 5 e:8.eR7ae 5 7GN 5 e9>+.W<+e%: 5 ; 5 78 E :8e%:GJ;<+e%:G7U;Cl e$¦ +M''_+W<+e%:GV 5 °%I1 4`4 eT 55 ¦ +78>+ä 5 ; E +e1 5 M.1>; 5 70W0RH: 5E 78>+R7 EG5E 78Y%R

E *v'W)M.>W)>e%:8;RWi78>RL>78S+T 5 ;$#>7G7 5E Ç '+e%:8C&¤ W<]+: 5 ; 5 Y%R#R:G'M.'_>7G>W 5%EbY%Rb E :8R;78+W 5%E Y%RB]b 5 e9NK; 5 5 W 5 W)]+: 5 ; 5 ;$37G EGE .eL7 5 e'_>S+T 505 RW<]: 5 ; 5 ; 5®e' 5 C[ök+78+W 5E 'eKKM'W<+e%:G»Y%RM 5 5 e>H: 5 ;$ E8E `W)]+: 5 ; 5 V+e%:UT 5 V%;$ E +R$:G'7G>W 5EkE R'W)M.>W)>e%:8S>T 5 R$:G'M'._Ne; 5i5 °%I1 4`4 C

5.1 O método de ressincronizaçãol eKK78+W 5E(5 E :GR; 5 ; E8E <W<]: 5 ; 5 5 W RW g$>W)M 5 C0ödW 5%E : 5 W<7 E +R'e:8<7UpWi­:8'>

o

Page 98: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§Q¨X© ss%ªRQ«R ©%¬z§Q¨X© sC­s® §¨ n=Q< G ®« §¨X¯¬ ®i

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

S → aAcdA → gh

2 R+78+W 5%E eM' E 7[ +e%:G7U;l'ü&&C D +7 â W 5E e 5 e 5E8EG5 · m ;$ E ++e;$>e%:Ga7GNR7 E .1 5

•RW<iU9LWi;) 5 W<]: 5 ; 5p; Y%R 5 e E5 W) 5 : 5 º>e i;<+e%:G7U;m

•RW<iU9LWi;) 5 W<]: 5 ; 5ó¶ Y%R 5 e E5 W) 5 üm

•5 W<]: 5 ; 5A¶ :G>e%:8U970e&+e%:G7U;RW $2Y%RäeT 5 E :8­ â V6+e%:8T 5 VkRW >7G7 5E 'e:U­:8' 5)5 5 787GC

·¬K;$]>' ; 5 W<]: 5 ; 5 ;$F78 E8E 'e7 5 e._NS+T 5 ]d¦§_>+7[ 5 W\Y%R 5 W<]: 5 ; 5n; eT 5(E v»¦ :8; 5 5 7k E8E F>7G7 5JE 'e%:8­:8' 5 ^YR` 5%EGE 5 e%:G'eR7dJeM' E 7k(+e%:878;C f[5 7G]>WV E 5 W<]: 5 ; 5¶ÊE 'W<M. E W<>e:8b+W<.:G'7 RW<ÍW<+e E +W ;$3>7G7 5 378: 5 78e7^Íg$>+RS+T 5 7U 5 W<]: 5 ; 5Y%R 5 U9LW 5 RBVRW 5 R$:87 5 >7G7 5bE 'e%:8­:GK 5 '78­ 5 5 7G78+7NV 5 Ed5 W<]+: 5 ; 5¶; E L>78Y%R»;+ 5 E;0U9Wi; ¶ g$ E :83e>e:878; 5 : 5 º+e oV 5 Y%R»eLT 5b5 5 7G78V1 E : 5 YR 'e;:G+W 5%Ee)+e%:878;0i>;$>'pCfZ5 7^ EGEG5i5 W<]: 5 ; 5ȶ VL 5 ;$:8>:87»RW¨>7G7 5iE 'e%:8­:GK 5 VL;$+17G EGE .eL7 5 e'_>7F<>e:878;

5 W 5 eT 5 pX:G>7GW<'eM[YR E 3 E t+7U#78> 5 e9N>7>CJ½^WiÍ:G+e%:U:G'1Í;$ E 3¦§_++7( EGEG5 ]< 5 e$pE RW<.e; 5 : 5 º+e E ;Í+e%:G7U;i:G]3Y%R)7GNS+iM.RW«Y%R3 5%EGE ..M'H:80# 5 e%:G'eRK;;$0;eL­M' E C s E YRL E#E >7GKWþ E8E E : 5 º>e E ½»W<à 5 ,';]+K E >7GKR$:G'M'._N7 5 5 ev*Re: 5J »=»@Ee; ¶ Cy· E8E 'WV 5 W<]: 5 ; 5o¶ ;$>1< 5 e E RW)'7 : 5 º+e E ;z+e%:G7U;#:8])Y%R<7GNS+RW Eâ W3 5 M 5 t+7G:G+eL+e%:8» 5bE +R# 5 ev*Re%: 5J »X»@Ee# E ¯b;+ 5 E 78: 5 7GeL7kg$NRS>T 5 7U; C?@W ; V:GR; 50E » EGE 5 W 50E (bg$NRS>T 5 ;$ ¶ :8.1 E8E E K; 5 t+W)p E R+>;$K;(3e­M' E 5 e%:G'e%RLVZ 5 W´>7:8+_N;$zY%RVØt+M 5 W<+e 5%E V 5 7G¯Ig$'W 5 : 5 º>eà;+e%:878;.7U­> E 7 5 WË7 5 ;$RS>T 5E +e; 5 R:G'M.'_>;C 465 W E8E E W 5 ; Ç >S È E V 5 · m ; E +eL;$+e%:G`78>+R7 E '1 5Ç >78')M' 5 5 W 5<5 ¯$;$' 5 W 5E :G7U; 5 e 5 7 5 78Wi0o$C'"

9:;%<:=?>=®BEDF p; Z&[ ÎåyE\ ×_ Z a-yîL J :Q; j6G&H B K ¥%n G ``¿=@¿Ed ×e = H =Y G vCyEÕg ÍCyEÕh Z aãyL J :; j6G&H B K ¥%n G ``À¿L2¿Ei ×k = H =Y G vCyEÕFrq Z ayîL J :; jG&H B K ¥&n G `Q`À¿ [ ¿éFuF = H =Y G vCyéÕFr\ G Y^ GFr_ Î Z?HK = K6Z LU::;&:Cy?lE H LQ; HK := [ ;l fAL J :Q; j6G&H B K ¥%n G yESfF|d l G ^?n G := [ ;­ [ l%ÕFre ëFrg G Y^ GFh Î ZbHK = K6Z LU:Q:;%:Cy?lé H LQ; HK := [ ;!lífAL J :; jG&H B K ¥&n G yEtfFri l G ^bn G := [ ;­3Ll&ÕFrk ë\uq G Y^ G

Page 99: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$& %q- !0i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ­ÁnxÔZÕ^Ü^ÔLܻп@Ò)Ô`ÏêÝ1¿¿@Õ^ÕÏ`ÓÓ×*Ò)Ôð^Ô[×+Î`Ï`Ó %q

\F Î ZbHK = K6Z Lb::;%:y?lE H L%; HK := [ ;-l fSL J :; j6G&H B K ¥%n G yéSf\u\ l G ^bn G := [ ;å­ =l%Õ\u_ ë\d\ue p; Z&[ ÍCyE\ug ×\h K :Q¥M×\ui Z aãyîL J :; jG&H B K ¥&n G ``¿u<¿é\uk ×_uq = H =Y G vyEÕ_F Z aãyîL J :Q; j6G&H B K ¥%n G ``À¿ N ¿E_u\ = H =Y G vCyEÕ_u_ G Y^ G Î Z?HK = K6Z LU::;&:Cy?lE H LQ; HK := [ ;-lÈfML J :; j6G&H B K ¥%n G f_d l G ^bn G := [ ;å­ N l%Õ_ue ë_ug G Y^ G_h Î ZbHK = KZ LU::;%:Cy?lE H LQ; HK = [ ;-lÈfML J :; j6G&H B K ¥%n G yétf_ui l G ^bn G := [ ;å­ <l%Õ_uk ëdq L%= K L N yuÍÎ&v6L G n K6Z ; HmG dîF ×d\ Î%¥6^ KG >ìB G :Q:/B|n: Z?HK Y H y G B< GQK%ÛG ^^Q=Q< G yEÕd_ LQ; H ^ J > G Ï JQHK6Z Yåy¿îL2¿EÕdud ëde ëdgdh p; Z&[ Î ZbHK = K6Z LU:Q:;%:CyÎ K : ZbH <z^di ×dk K%N :;&ß H6G ßAÍÎ&vL G n K6Z ; H yî^Õeuq ëeFeu\ p; Z&[ LQ; H ^ J > G Ï JHK6Z Yåy Z?HKK eu_ ×ed ß NZ Y G yîL J :; jG&H B K ¥&n G ñu` K eue = H =Y G vCyEÕeug ë =^ EGE äe 5E8E ä'W<M.>W<+e%:8S+T 5 V 5 W<]: 5 ; 5 ;å?A? o ¸ËË Ë ]i78 E 5 e E ­I1+M[ 5 7M'eS+7

RWi+g$+>S>T 5 ; 5 :8. 5S¶;6¸ ¹:o D&NO? Cä¤îW<]: 5 ; 5 o ³>³D¹?:C 5 e EG5 W<#>e:878;:8]^Y%R`RWË;:G>7GW<'e; 5 : 5 º+e E v(+e 5 e%:G7U; 5 CÌ? 5 W<]: 5 ; 5æ¶ R$:G'M'._NJRWi 5 e E :87GRS>T 5SXd W`^&S`Q7U&:G+e%:U7<7GN 5 e9>++7<7 5 ;$RLS+T 5 5 7G78 E 5 e;$>e:8ä 5E +RÑeT 5 p:8+78W<.eMVP>W > EG5 ;$0+787 5 V'78­#U9LWi7 5 W<]: 5 ; 5 o ³>³D¹?:C Y%R3¦§_0#7G EGE .eL7 5 e'_>S+T 5;$ E v;Cs E 5 ;+W 5E ¦§_+>7z.e;àRW 5 R 5 W<+M'9 5 7ä; 5 Y%R- E8E5 CödW 5%E : 5 Wi7z 5 W 5

g$>W)M 5 E >R'e%:GJ7UWi­:GK+

S → aAcd | bAefA → gh

=^ EGE 3+ E5 V J »X»¯Ee(A) = c, e

0 5 ;$>W 5E R:G'M.'_>7» E8E E ; 5 E : 5 º+e E 78<+¦ :GRL7#78 E8E .e+7 5 e'_>S>T 5 C fZ5 7G]>WäV E 3 E :G'1>7GW 5%E R$:G'M'._Ne; 5 #78'W)>.7Ui7 5 ;$RS>T 5 ;$ ; VL;$ E +p

Page 100: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦§Q¨T© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G ®® §¨X¯ DbsQsi

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

v78+W 5%E R$:G'M'._N7 5 #L7U¦§_>+707GNRt+7US>T 5 ;$#>7G7 5E V[ÍeT 55 +C&? E # E :8.1+78W 5%ER$:8.M'._Ne; 5 E >ReL;J7 5 ;RS+T 5 ; ; V;$ E *v7G>W 5E R$:8.M'._N7 5 ^78(¦§_+>7@J7GNRt+7US>T 5;$<+787 5E Vy)eLT 5ä5 +C l EGEG5 5 78Y%R E Ç _>+78W 5E ä7G EGE .eL7 5 e'_>S+T 5 5 W 5 : 5 º>e->7G7U; 5 VRWe 5 1 5 >7G7 50E 'e:U­:8' 50E R7G.7U­b>W ; C· E8E 'WV% 5 ;$+W 5%E M.:G+7U7 5 e 5E8E5 · m V$t+78W<H:8.eL; 5Y%RJ)>;)U9W<;3; ¶ÑE *v)'e$¦ 5 78Wi; 5 V% 5 7aW<+ 5 ;$JRW78®W)+:G7 5 VY%RMP] 5 : 5 º+e;$ E .eL7 5 e'_>S+T 5 E >7FR:G'M.'_>; 5 Ck? E8E )MH:8+7US>T 5 ]W 5%E :878;3e 5 7 5 7UWi0oC

9:;%<:=?>=®B ©F p; Z&[ ÎåyE\ ×_ Z a-yîL J :Q; j6G&H B K ¥%n G ``¿=@¿Ed ×e = H =Y G vCyEÕg ÍCy¿L2¿EÕh Z aãyL J :; j6G&H B K ¥%n G ``À¿L2¿Ei ×k = H =Y G vCyEÕFrq Z ayîL J :; jG&H B K ¥&n G `Q`À¿ [ ¿éFuF = H =Y G vCyéÕFr\ G Y^ GFr_ Î Z?HK = K6Z LU::;&:Cy?lE H LQ; HK = [ ;lÈfML J :; j6G&H B K ¥%n G yétfF|d l G ^?n G := [ ;­ [ l%ÕFre ëFrg G Y^ GFh Î ZbHK = K6Z LU:Q:;%:Cy?lé H LQ; HK = [ ;!lífAL J :; j6GUH B K ¥%n G yEtfFri l G ^bn G := [ ;­óLl%ÕFrk ë\uq G Y^ G\F Z a-yîL J :Q; j6G&H B K ¥%n G ``¿ O ¿E\u\ ×\u_ = H =Y G vCyEÕ\d ÍCy¿ G ¿EÕ\ue Z aãyL J :; j6G&H B K ¥%n G ``À¿ G ¿E\ug ×\h = H =Y G vCyEÕ\ui Z ayîL J :; jG&H B K ¥&n G `Q`À¿ua¿é\uk = H =Y G vCyéÕ_uq G Y^ G_F Î Z?HK = K6Z LU::;&:Cy?lE H LQ; HK = [ ;lÈfML J :; j6G&H B K ¥%n G yétf_u\ l G ^?n G := [ ;­ al%Õ_u_ ë_d G Y^ G_ue Î ZbHK = K6Z LU:Q:;%:Cy?lé H LQ; HK = [ ;!lífAL J :; j6GUH B K ¥%n G yEtf_ug l G ^bn G := [ ;­ G l%Õ_h ë_ui G Y^ G_uk Î ZbHK = K6Z LU::;%:CylE H LQ; HK = [ ;!lífAL J :; jG&H B K ¥&n G yEPfdq l G ^bn G := [ ;­ O l&ÕdîF ëd\d_ p; Z&[ ÍCy ZbHKtj dud ×

Page 101: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$%& -, !Í"> "i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ­ÁnxÔZÕ^Ü^ÔLܻп@Ò)Ô`ÏêÝ1¿¿@Õ^ÕÏ`ÓÓ×*Ò)Ôð^Ô[×+Î`Ï`Ó

de K :Q¥M×dg Z aãyîL J :; jG&H B K ¥&n G ``¿u<¿édh ×di = H =Y G vyEÕdk Z aãyîL J :Q; j6G&H B K ¥%n G ``À¿ N ¿Eeuq = H =Y G vCyEÕeF G Y^ G Î Z?HK = K6Z LU::;&:Cy?lE H LQ; HK := [ ;-lÈfML J :; j6G&H B K ¥%n G feu\ l G ^?n G := [ ;­ N l%Õeu_ ëed G Y^ Geue Î ZbHK = KZ LU::;%:Cy?lE H LQ; HK = [ ;-lÈfML J :; j6G&H B K ¥%n G yétfeug l G ^?n G := [ ;­ <l%Õeh ëeui L%= K L N yuÍÎ&v6L G n K6Z ; HmG euk ×guq Î%¥6^ KG >ìB G :Q:/B|n: Z?HK Y H y G B< GQK%ÛG ^^Q=Q< G yEÕgF LQ; H ^ J > G Ï JQHK6Z Yåy j Õgu\ ëgu_ ëgdgue p; Z&[ Î ZbHK = K6Z LU:Q:;%:CyÎ K : ZbH <z^gug ×gh K%N :;&ß H6G ßAÍÎ&vL G n K6Z ; H yî^Õgui ëgukhq p; Z&[ LQ; H ^ J > G Ï JHK6Z Yåy Z?HKK hF ×h\ ß NZ Y G yîL J :; jG&H B K ¥&n G ñu` K h_ = H =Y G vCyEÕhrd ë · >;b7 5 ;$RLS+T 5 +W ; 5 7878 E 5 e;$`RWi)U9Wi;;$ E :G'e%:8);$ ¶ V 5 7F E8EG5 V% 5 ;$+p

W 5E L E8E 7[L7U®W<:87 5%E ;$ E :G'e%: 5%E 7U(7GNRt+7US>T 5 7UJ+;(RWib;$+MK E CZ= 5 :8^Y%RVe1>78;;$V 5 :G>e:U78W 5E ¦§_>+7»)78 E8E 'e+7 5 e._NS>T 5 V%e>W E +W<78(:G+78+W 5%E RWi"HeK+< 5E pE .'M'';;$V 5 R E vV$e>W E +W<78 :8+W 5E RWRHeK 5 : 5 º+eYR E +781J 5 W 5<E 'e7 5 e'_>; 5 7NC=»zWi 5 78'ä; E 1+_> E VtR:G'M.'_>W 5%E RW 5 ev*Re%: 5 ;$ E .eL7 5 e'_>S+T 5 Cb· E8E 'WV 5E 78®W)+p:G7 5E Y%R E T 5 L E8E ; 5E 7U 5E W<]: 5 ; 5%E(¶ o6 ³>­D¹?:C ;$>1>7GKW E +7 5 ev*Re%: 5%E;$J: 5 º>e E V%eLT 5 RW E ¯0: 5 º+eBC? E8E zg$+W<M 5-E .W<M' E 78 E +e%:U 5 5 e>H: 5 ­ E K 5 ;:G]NeK+&;$Í78>+RL>78S+T 5 ;$

+787 5E YR '7G>W 5E R$:G'M'._N7` 5 W 5 °%I1 4`4 C$sR.: 5%E 5 e%: 5E ;$+1+W.e; E +7` 5 7U;; 5E 7 5 R7U78+W 5E ¦§_'IprM 5 E >R'7NVY%Re; 5 ;$ E +R$:G'78+W 5E )'W)M.>W)>e%:8S>T 5 ;)7GNRt+7US>T 5;$>7G7 5EFE 'e%:8­:GK 5E L7U 5 · m ;<M''eR>W

X++C

5.2 Implementação da recuperação de erros·æ¦§'M.K;;&Y%R 5 °%I1I 4`4 e 5Ei5 ¦ +78>&7U-:G7U:87GW 5%E +787 5%E#E 'e%:8­:GK 5E ] E :8e%:GE +W<+M'9e%:8 J 5 7U;+W W 5%E :878;ae 5%E g$+W<M 5E CZ¤Ñ°%I1 4`4 t+78W<H:86Y%R@ E 7 5 ;$RS È Ee n =»j E *vW 5 M 5 >; E >e%:G78F 5 e E :G78RS È E SXd W`^&S`Q ^> EG5 M.RW\+787 5JE .e%:8­:GK 5JE v;$+:G>:8; 5 5 :G>e%:87(+ E 7 #>e%:G7U;# 5 Wæ EGE E 7 5 ;$RLS È E VL 5 ;$+W 5%E :878:87 E8E 0+787 5 C

Page 102: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$%& - , !Í"> %i

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

465 W 5 1.W 5%E e 5 + â :8RM 5 e%:8+78 5 7>VyRW +787 5E .e%:U­:GK 5 ¦§_# 5 W Y%RiRW<ä+g$+>S>T 5 ; 5:G' 5ð´:A6˳cD&¸ ¹:o D&NË? ÍE v»MKeLS+;CØ· EGE 'WäVRWeT 5 pX:G>7GW<'eM 5 W\:G7U:UW<+e%: 5 ;$a+787 5EÇ > E +W<>M.9e%:G

]\cba 'Ì

SXd Q Ì

`^&Sc`Q ^&di_ `_T7S:b\[_

WXWSXd^&S^f:_[7S\a7__&dXd\Ì

Ìm 5 eT 5 pX:G+78W<.eLM» 5E8E RU9Wi;,7U 5 R$:G7 5 eT 5 pX:G>7GW<'eMXV`eT 5 9­ÑW3R;eS+C

fZ5 78]+W ]3'W< 5 7:Ue%:G)e 5 :87(Y%R 5 eT 5 p:8+78W<.eMÌWi E .e%:G>7Ge 5 5 ; 5 ReT 5 :G7U:U7 E +R E78¯78 5E +787 5%E C m eT 5 :878:87>V$RW¨+787 5)5 5 7G78'; 5 eiU9Wi;0.e%:8+78e)](7 5 %; 5 5 7W<+ 5 ;<+g$+>S>T 5 :8] 5 W<]: 5 ; 5 Y%R¦ +_0#U9Wi;VY%R3 5 ;$¦§_+>7 5 :G7U:UW<+e%: 5 5 Wz7G EGE .eL7 5 e'_>S+T 5 C fZ5 7J+g>W<M 5 VB E +R.7(:8+W 5E(5 W)]+: 5 ; 5X¶ YR)U9Wi º VyYR)eLT 5¦§_ 5 :G7U:UW<+e%: 5 ;$>7G7 5E J 5 ;$V 5 7a E8E5 V$M'eS+76RW< ´:A6˳D%¸ ¹:o DNO? VY%RJ]J+e%:UT 5:G7U:U;0+W ¶ C

]\cba 'Ì

SXd ° ' Q Ì

`^&Sc`Q ^&di_ `_T7S:b\[_

WXWSXd^&S^f:_[7S\a7__&dXd\iÊa7_ \¡a7_ °ÌÌök+78 Ç +78+W 5%E V`>e:UT 5 V» 5 W 5 .W<M'+W<>e:U7äà78>RL>78S+T 5 ;$&>7G7 5E +W e 5E8EG5 · m C

l eKKW 5E 5 WJ'eM'R E T 5 ;$»RWie 5 1 5 PS+T 5 YR^ 5 ;$ E >7@R$:8.M'._N;Jt+M 5 R E R­7G 5 7U;$>R7U76b7GNRt+7US>T 5 ;$»>7G7 5E C[? EGE 5 tS>T 5 .6&'ü%þ b¦§_( 5 W Y%R 5 · m +W<H:UW<+e E +e E ;$Í 5 W 5 E :8­ E +eL; 5 7 5 + E8E ;78>RL>78S+T 5 ;$z+787 5%E V[Y%Re; 5 E :8ä¦ 5 7M.K+;C 465 W E8E5 V[ E NS+T 5 'eKKM6; 5 e 5E8EG5 eM' E ; 5 7NVØY%R#'e+M.R 5 W<]: 5 ; 5Ä>A V;$>1 E >7^M.:G>78;0 5 W 5 W 5%E :878; 5 e 5 7 5 7UWi)o$C /C

Page 103: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦§Q¨T© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GS¬ D §¨X¯ DbsQ@i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ­ÁnxÔZÕ^Ü^ÔLܻп@Ò)Ô`ÏêÝ1¿¿@Õ^ÕÏ`ÓÓ×*Ò)Ôð^Ô[×+Î`Ï`Ó "

9:;%<:=?>=®Bu@F 9ÍQ6ÎU6Ï&ÐÑÒUÓ/yY%= H <Ô\ n6=L j =Q< G n6=Q:^ G :CÕ_d Z >n;&: KcÖ =Qp=B Z ;B Õe Z >n;&: K : G LQ;&p G :¥/B Õ RR Z >n;%: K =A=^SLQY%=^^ G ^ [G : G L J n G :=7² ; [GtG ::;^ [ ;XÍÎghi n JO Y Z LALQYQ=^Q^tYQ= H <QÔM×k a ZbH =YA^ K = KZ LSÎ K : Z?H <tØ G :^ Z ; H `lEÔffSÙ;>n Z Y G : ¨ Ø G :^ Z ; H DBs ¨X© sQsQªlÕFrq ZbHK L%; HK 9=%:6^ G :Q:;%:c`SsÕ RRtLQ; HK = [ ;%: [GSG ::;^S^ ZbHKàQKZ LQ;^FuF O ;;Y G = Hc[G&OQJ <Ï%: G LQ;%p G :Q¥CÕ RRSL%; HK :;QYQ=Sp G : O ;^ GS[G : G L J n G :=!² ; [GSG ::;^Fr\Fr_F|d RRTÞ G a ZbH6G ; > K ; [ ;ml>= Z?H l [ =AL%YQ=^^ G Y%= H <Ô/BFre n JO Y Z Lw^ K = K6Z LPp; Z&[ >= ZbH yÎ K : ZbH <c=Q:<^ K&N :;&ß^T9=Q:6^ G v6L G n KZ ; HFrg ×Fh O ;;QY G = HM[G&OJ <Ï%=^t`ta=Y^ G ÕFri O ;;QY G = HM[G&OJ <Ï&: G LQ;%p G :¥`Pa=Y^ G ÕFrk\uq Î K : ZbH <Aa Z Y G&H =?> G `llÕÜRR H ;?> GS[ ;T=Q: I%JZ p;S=A^ G :A= H =Y Z ^%= [ ;\F Y%= H <ÔPn=Q:6^ G :Õ RRP= H =Y Z ^&= [ ;%:YQQv Z LQ;R^ ZbHKàQKZ LQ;\u\ Z?HKcZ Õ\u_ O ;;Y G = H >^T`ta=Y^ G Õ\d\ue Î&¥6^ KG >áB; JK Bn: ZbHK Y H yØ G :6^ Z ; H Õ\ug RQRSYQS;^on6=Q:â?> GQK :;^Xn6=^^%= [ ;^Xn6=Q:=A;ALQ;?>n Z YQ= [ ;%:\h a;%:ãy Z `PsÕ ZTä =Q:<^åBY G&H < K%N!¨ DÕ Z ff\ui ×\uk Z ayu=Q:<6^ Z& B GQI&J =Y^çyl ¨b[G&OQJ <Ï%ÍÎl%z_uq [G&OJ <ÏQ=^t` K : J6G Õ_F G Y^ G_u\ Z ayu=Q:<6^ Z& B GQI&J =Y^çyl ¨b[G&OQJ <Ï%: G LQ;%p G :¥l%z_u_ [G&OJ <Ï%: G LQ;&p G :¥c` K : J6G Õ_d G Y^ G_ue ×_ug Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lîè^%=Q< GZ ^å­ Ö =Qp=AYQ= H <Ôò ¨b[G&OJ <Ï&ÍÎ líf_h l ¨b[G&OJ <Ï&: G LQ;%p G :¥ ZbH n JK a Z Y G l%Õ_ui Î%¥6^ KG >ìB G v ZUK ysÕ_uk ëdq ëdîFd\ Z aãy=Q:<^ Z& B GQI%J =Y^çy?l ¨ l&d_ × RRPYQ [ = G&HK := [ = ¨ n6= [ : ;dud Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lE G = [6ZbH <aQ:;?>z^ K = H[ =Q: [ZbH n JK BSBtBl&Õde n6=Q:^ G :A` HG ßcYQ= H <ÔCyÎ%¥^ KG >ìB ZbH ÕÈRRSLU: Z =tÍÎdg ëdh G Y^ Gdi × RRSY% [ ;t=%: I%JZ p;dk a Z Y G&H =b> G `P=Q:<6^å=Q:<6^çBY G&H < K%N¨ D Õeuq Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lE G = [6ZbH <aQ:;?>a Z Y G lífTa Z Y G&H =b> G fmlBtBSBl&ÕeF K :¥A× RRSL&: Z =tÍÎeu\ n6=Q:6^ G :A` H6G ßMYQ= H <Ôy H6G ß Ö =%p=CB Z ;åBï Z Y G Ò H n JK Î K : G =?>áyua Z Y G&H =b> G QÕ

Page 104: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦§Q¨T© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GS¬©A§¨X¯ Dbs%ªi

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

eu_ ëed L%= K L N y Ö =%p=CB Z ;åBï Z Y G Ó6; K ï; JH[ vL G n K6Z ; HG T×eue Î%¥^ KG >ìBu; JK B|n: ZbHK Y H y?lï Z Y G l fPa Z Y G&H =b> G fml H ; K a; JH[ BEl%Õeug : GQK&J : H Õeh ëeui ëeukguq n=Q:6^ G :CB [G&OJ <Ï%: G L%;%p G :¥m` [GUOJ <Ï%: G LQ;%p G :¥CÕgF Z aãyñ [G&OJ <Ï%=^ín6=Q:^ G :/B [Z ^%= O Y G Ï K :=L ZbH <CyéÕoRR [G ^%= O B(p G : O ;^ GS[ ;PÍÎgu\ K :¥M×gu_ n6=Q:^ G :/B|n:;%<:=?>áyEÕ RRSL N =b>=S;í> K ; [ ; I%J6G a=QVA=P= H6à Y Z ^ Ggd ëgue L&= K L N yr9=Q:6^ G 6%ïQvL G n K6Z ; HzG gug ×gh Î%¥6^ KG >ìB G ::/B|n: ZbHK Y H y G B< G%KQÛG ^^&=Q< G yEÕgui ëguk a ZbH =YY&¥c×hq Î%¥6^ KG >ìB; JK B|n: ZbHK Y H yrn6=Q:6^ G :/B K ; j6G&H Ï^Q; J :L G Ba6; JH[ G v%::;%:CyécfhF lÈ G v Z L%=YT::;%:6^Pa; JH[ l&Õh\ Î%¥6^ KG >ìB; JK B|n: ZbHK Y H yrn6=Q:6^ G :/BLQ; HK 96=Q:6^ G ::;%:fh_ loÎ%¥ HK =L K6Z LT::;%:^Ta; JH[ l%Õhrd ëhehg ë RRÈ>= ZbHhuhhi ^ K = KZ LXn JO Y Z LtÎ K : ZbH < Z >áy ZbHK vhk ×iuq ZbHKPj ÕiF Î K : Z?H <^çÕiu\ ^X` K ; j6GUH Ò>=Q< G rv Õiu_ j `M^åBYQ=^ K Ò H[G v%aCylbõll%Õid K :Q¥M×^T`A^åB^ JO ^ K : ZbH <CyDö j Õ ëiue L%= K L N yÎ K : ZbH <Ò H[G v JK %a%Ð6; JH[ ^Uv6L G n K6Z ; H!G iug × ëih : G%K%J : H ^Õiui ëiukkuqkF O ;;Y G = HG ;%aÕ RRPp=Q: Z%à p G Y I&J6GMZbH[Z L%=M^ G 6%ïSa; Z =YL&= H ²%= [ ;ku\ RRS;È> K ; [ ;S= O = Z v;ALQ; H ^%;?> GSK ; jG&H ^t= KG =YL%= H ²%=Q: J > I%J6G n G : KG&H ²&=ku_ RRt=;tLQ; HÖbJHK ; [G ^ ZbH L&:; HZ V=7² ;kdkue p; Z&[ LQ; H ^ J > G è HKZ Yåy G LQ;%p G :Q¥Î GQK <ökug 9=Q:6^ G v6L G n KZ ; HmG ökh Î K : ZbH <o> GQK K&N :;&ß^T9=Q:6^ G %ïQv6L G n K6Z ; H ökui 9=Q:6^ G v6L G n KZ ; Hkuk ×Frquq ; j6GUHMK ; j ÕFrqFFrqu\ Z a-y [G&OQJ <Ï%: G LQ;%p G :Q¥tRR ZbH a;%:U>=!² ;M^Q; O : G =P: G L J n G :=7² ;Frqu_ ×Frqd Î%¥6^ KG >ìB; JK B|n: Z?HK Y H yéÕFrque Î%¥6^ KG >ìB; JK B|n: Z?HK Y H yl l fo> G%K fml l%Õ

Page 105: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦§Q¨T© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GS¬ @ §¨X¯ Dbsi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ­ÁnxÔZÕ^Ü^ÔLܻп@Ò)Ô`ÏêÝ1¿¿@Õ^ÕÏ`ÓÓ×*Ò)Ôð^Ô[×+Î`Ï`Ó /

Frqg Î%¥6^ KG >ìB; JK B|n: Z?HK Y H yl Î%¥ H LU:; HZ V ZbH <Î GQK ­Èl ft<ÕFrqh ëFrquiFrquk Z a-yu<A`` HJ YY6 K%N :;&ß G ÕÜRRA^ G ;ALQ; HÖUJHK ;S HJ YQYåö(n:;bn6=Q<=A= G v6L G ² ;FuFrqFuFuF K ; j `P< G%K ; j6GUH yDQÕóRRon G <= K ; j6G&H L%;%:: G&HKGFuFr\ ß NZ Y G yAñ G ;%am RRA^ GTH6 ;AL N6G <; J =;Pa Z > [ ;P=Q: I%JZ p;FuFr_ ×FuF|d Z aãy(</BLQ; HK = ZbH ^çy K ; j B jZbH[ SoRRQ=L N ; JAJ > K ; j6G&HSH ;SLQ; HÖUJQHK ;FuFre ×FuFrg Z aãy [G&OJ <Ï%: G LQ;&p G :¥FuFh Î%¥^ KG >ìBu; JK B|n: ZbHK Y H y?l ï; JQH[ ^&¥ H L&:; HZ V ZbH < K ; jG&H ­íl fFuFri Z > y K ; j B jZbH[ QÕFuFrk O : G = j ÕFr\uq ëFr\F Z aãy [G&OJ <Ï%: G LQ;&p G :¥Fr\u\ Î%¥6^ KG >ìB; JK B|n: Z?HK Y H yl Ò&< H ;&: ZbH < K ; j6G&H ­ílÈf Z >áy K ; j B jZ?H[ ÕFr\u_ < GQK Ó G v K ; j6G&H yéÕ RRXn G <=Tn:x%v Z >; K ; j6G&HFr\d K ; j `P< GQK ; j6G&H yDQÕFr\ue Z aãy K ; j B jZbH[ ``X6%ïÃÃãñ(</BL%; HK = Z?H ^çy6&ïoRRPa Z > [ = GUHK := [ =Fr\ug G ;%aA` K : J6G ÕFr\h ëFr\ui Î%¥^ KG >ìBu; JK B|n: ZbHK Y H y G B< GQKQÛG ^Q^%=Q< G yEQÕFr\uk LQ; HK 9=Q:^ G ::;%:ffÕ RR ZbH L&: G > G&HK = H W%> G :; [GSG ::;^Fr_uq Z a-y G ;%a K%N :;&ß H6G ßt9=Q:6^ G 6%ïQvL G n K6Z ; H y?lE%ïma; JH[ n: G >= K%J : G Y%¥/Bl&ÕFr_F ëFr_u\Fr_u_ ë RRPYQ= H <QÔFr_dFr_ue 9ÍQ6ÎU6Ï&ÓQÞ/yYQ= H <Ô ¤ÑM.>H: 5 7[ 5 ;$6e 5 :U7[YRVM']+W\;».eLM'R E T 5 ;»e 5 1 5 PS+T 5 V;$'1+7 E Ey5 R$:G7U E M.:G+7US È E

¦ 5 7UW´'e%:G7 5 ;R_+K; E Cà?dMK E<E +7UT 5 g$M''>; EJ W<>;$K;YRz¦ 5 7GW 5%E E :8R;eL; 5 -e 5 1'W)M.>W)>e%:8S>T 5 ; 5 · m CfZ5 ;+W 5E ¦§_>+70&7GNRt+7US>T 5 ;$z+787 5%E ; 5%E eT 5 pX:G>7GW<'e E ¦§_>+e; 5 5 W YRz+;

RWÿ 5 e9>S>VBä78.e â 5 VÌY%RMk] 5E +R 5 ev*Re%: 5 ;$ E 'e+7 5 e._NS>T 5 ù 5 W 5 e 5 78'W)>.7 5g$>W)M 5 ; E >S>T 5 o$C'"Nú 5 RÍ 5 ;$+W 5E EGE 76 E8E E 5 ev*Re: 5E 5 W 5 78®W)+:G7 5E ù E +Re; 5g$>W)M 5 ú C fZ5 7a 5 e E K;$+7U­prMKJW< E P+g â 1>MV%R$:8.M'._N78+W 5E E +Re;3 5 7U;+W e 5 e 5%EGEG5 5 W<.MK; 5 7NCk¤\7G'W<+'7 5 eT 5 pX:G>7GW<'eMy; 5 e 5%EGEG5 · m ]JW 5%E :878; 5 e 5 7 5 7UWi0oC

9:;%<:=?>=®BªF p; Z&[ n:;%<:=b>áyE K%N :;&ß^T9=%:6^ G 6&ïQv6L G n K6Z ; H ­\ ×_ G LQ;&p G :¥Î GQK <S` H6G ßt G L%;%p G :¥Î GQK y%ïÕd ëe ×g K :¥M×h æLQYQ=^Q^QY Z ^ K yu< Mä 6&ï i ëk L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Frq ×

Page 106: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦§Q¨T© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GS¬ ª §¨X¯ DbsQ«i

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

FuF L%; H ^ J > G è HK6Z Yåyu<Cö G öílîn:;%<:=b>ål%ÕFr\ ëFr_ ë

· E MH:8+7US È E ¦ >H:U EkE T 5 L E :8e%:8 E .e Ç +:G'1I E CØödW 5E E :8R;­prMK E 5 WË+M'WiV'eK.peL; 5 ;»;$+e%:87 5 78(¦ 5 78UC[·ò7 5 ;$RS+T 5 ¦ 5 t 5 M 5 +;J;$+e%:G7 5 ;b 5 e E :G78RS>T 5 SXd W`^&Sc`QVP 5 7G:8e: 5 V E )M'RWii+g$+>S>T 5 ¦ 5 7»7 5 ;<L>M 5 W<]: 5 ; 5 o CA³³³C³?5 R E 3eT 5 :G.p1>7GW 5%E RW û ø.¨L¯ E M. E :8;$Í+M' EGE E V 5 +¯$;$. 5 ;$+e%:87 5 ; 5 `^&S`Q E >78­+gNR$:U; 5 Cl W< 5 7:Ue%:GØ EGE +¯$;$. 5 ]J°I1V%»eLT 5 7 5 ;$RS È E eL n =»jFC$= 5 + E5 V¦§_++W 5%E U9W<; 5 W<]: 5 ; 5 o ³>³DM?:C Y%R(¦ 5 B.eLM'R â ; 5 eL E >S>T 5 .e'+'MB; 5 7UYR.1 5 C v vaV$ 5 7:Ue%: 5 V'eM'R â ; 5 5 W 5 RWËW<]+: 5 ; 5 ;3MK E8E C'AÁ C? E8E ^W<]: 5 ; 5 ]»W 5%E :878; 5 e 5 7 5 78WiJoC /CödW 5E eM' E ­pXM 5 5 7`L7G:G E C l eKKM'W)>e%:G(:G>W 5%E`E >R E 78®W)+:G7 5E V$YR E T 5

]\cba¦`\[:if_ ± [7S:bh _7`\&]7_d ° _&SeÑ ^&di_ `_T7S:b\[_ËÑ° SXd:b'[7f:_&S S=QXd\Y:i ^di_ \ `_T7S:b\[eÑ

^di_ `_T7S:b\[¤Ñ7U®W<+:G7 5 Á ] 5 5 ev*Re: 5 ;$ E 'e7 5 e._NS+T 5 E >7BR$:8.M'._N; 5 CØ·ÑMK E8E ·MD o Æ:DË=<7;cD7?

Y%R0¦ 5 d;$ Ç eK;;$+e%:G7 5 ; 5 L 5 :G ËD o Æ:DË&< Vt]0'W< 5 7:U;ze 5 .e â + 5 ;äMK E8E C'A6Á C? E8E +M' EGE a]`W 5E :G7U;J E +R.7NCØ= T 5 9­JW3RH: 5 5 W<>e:U7dJ78 E L>H: 5 ;$+MKVt+e E Y%R'W)M.>W)>e%:8aRW 5 ev*Re%: 5 >W Y%R@>;F+M'+W<>e: 5 ]kRW 5 $v*+: 5 ; 5 :8. 5(ÅAÆAÌÄ=C'A6Á1Äb¼?&D%ÁDË VY%Ra7G>78 E +e%:8»RW:8. 5 ;$F: 5 º+eäù| ú K 5 R ¦ ûúýÈ÷ÌV+:8>úC@¤ E[E +R E W)]+: 5 ; 5%E 78+7G E >e$p:8W E(5 t+7US È E e 5 78Wi E EG5 780 5 ev*Re: 5E 5 W 5 ReKT 5 VyL>7:8.eI+e+'ä;$<RWæ+M'+W<>e: 5:UC

9:;%<:=?>=®BF n6=L j =Q< G : G L%;%p G :¥Õ\_ Z >n;&: KcÖ =Qp=B JK6Z YåB Õd Z >n;&: K YQ= H <QÔCÕegh n JO Y Z LALQYQ=^Q^X G LQ;&p G :¥Î GQKcG v KG&H[ ^#=^ N Î GQK ×ik n JO Y Z LT G LQ;&p G :¥Î GQK yEtRRtL&: Z =ML%; HÖUJHK ;tp=QV Z ;Frq ×FuF ^ J n G :CyEÕFr\ ëFr_F|d n JO Y Z LT G LQ;&p G :¥Î GQK y ZbHKcK TRRSLU: Z =cLQ; H6ÖUJHK ;SLQ;?> J > K6Z n; [GtK ; j6GUHFre ×Frg K%NZ ^åBu= [Q[ y H6G ßÒ HKG < G :y K ÕFh ëFriFrk n JO Y Z L O ;;Y G = H LQ; HK = ZbH ^çy ZbHKMK XRRPp G : Z a Z L%=A^ GtK ; jG&H n G : KG&H L G =;ALQ; HÖbJHK ;\uq ×\F : G%K%J : H ^ J n G :/BLQ; HK = ZbH ^çy HG ßÒ HKG < G :Cy K Õ\u\ ë

Page 107: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$%& -%o !Í"> qi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ­ÁnxÔZÕ^Ü^ÔLܻп@Ò)Ô`ÏêÝ1¿¿@Õ^ÕÏ`ÓÓ×*Ò)Ôð^Ô[×+Î`Ï`Ó o

\u_\d RRPa=%VA= JHZ% ; [GP[ ; Z ^SL%; HÖUJHK ;^\ue n JO Y Z LT G LQ;&p G :¥Î GQKtJHZ ; H y G L%;%p G :¥Î GQK ^\ug ×\h G LQ;&p G :¥Î GQKMK ` HJ YYåÕ\ui\uk Z a-yî^-ñu` HJ YY6ôRRA^ G ^T`` HQJ YYP: G%K ;%: H = HJ YY_uq ×_F K `yr G LQ;%p G :¥Î G%K K%NZ ^åBLQY; H6G yEÕ_u\ K Bu= [Q[ ÍYYåy^Õ_u_ ë_d : G%K%J : HMK Õ RRT: GQK ;%: H = J > KG :6L GZ :;MLQ; HÖbJHK ;åöÈ^ G > [G ^ K : JZ : HG&HNJ >_ue ë_ug_h n JO Y Z LT G LQ;&p G :¥Î GQK : G >;&p G y ZbHKAH XRRP: GQK6Z := J > G Y G > G&HK ; [ ;ALQ; HÖbJHK ;_ui ×_uk G LQ;%p G :Q¥Î GQKAK `y G L%;%p G :¥Î GQK K%NZ ^åBLQY; H6G yEÕdq K Br: G >;%p G y H6G ßÒ HKG < G :y H ÕdîF : G%K%J : HMK Õ RRP: G%K ;%: H = J > H ;%p;ALQ; HÖbJHK ;åöÈ^ G > J > [ ;^ G Y G > G&HK ;^d\ ëd_dud RRAL&: Z =M^ K : ZbH < [G ^L&: G p G&H[ ;M;^ K ; j6G&H ^ I%J6G n G : KG&H L G >=;ALQ; HÖUJHK ;de n JO Y Z LSÎ K : Z?H < K ;Î K : ZbH <yEdg ×dh Ò KG := K ;%: Z&K ` K%NZ ^åB Z&KG := K ;%:yEÕdi Î K : Z?H <^T`lQlÕdk ZbHKPj ÕeuqeF ß NZ Y G y ZUK B N =^bÓ G v K yéAeu\ ×eu_ j `-yQyîÒ HKG < G : Z&K B H6G v K yéB ZbHK Ø=Y JG yEÕed ^Pf`AY%= H <Ô/B Z >áy j TfmltlÕeue ëeug : G%K%J : H ^Õeh ëeuieuk ë

¤ E +Re; 5 78®W<:G7 5 ; 5 W<]: 5 ; 5 o ³>³DMQ?:C ]&RW 5 $v*: 5 ; 5 :G' 5´:A˳cDKĸ ¹:o D&NO? V@Y%R-;$ E 78+1Y%RM^¦ 5 5 +787 5E 'e:U­:8' 5 YR 5 5 7878+RBC ? EGE 78®W<:G7 5 ]g:878 â ; 5 ; 5 `^&S`Qäe 5 W<]: 5 ; 5 Y%R<U9Wi 5 o ³>³DMQ?:C C`? 5 HMH:8.W 5 7U®W<+:G7 5 ]5 e 5 W<<; 5 eT 5 p:8+78W)'eM[Y%R) E :8­#¦§_+>e; 5 Í78>+Rt+7US+T 5 ;$)+787 5%E C= 5 > EG5 ; 5 eT 5 p:G>7GW<'eM['e'+'M[;#e 5%EGE <7UWi­:8'>V:G+W 5%E»5 5 ev*Re%: 5 ; E .e+7 5 e'_>S>T 5 ¦ 5 78Wi; 5 5 7RW HeK 5 : 5 º>eBVY%R] 5 û øU.@V 5 :G>78++'7 5 78®W<:G7 5 ] 5 1'W)>e%:GJRW E :G78'ei 5 W 5e 5 W); 5 eLT 5 pX:G>7GW<'eM T7d\Xd^f C· E +Re;#7G:G); 5 o ³6>³DM:?:C ;­#M.RWi E 'e$¦ 5 7GWiS È E»EG5 7G3Í7GNRt+7US>T 5

E +e; 5 7 5 EGE ;Cds 5%E :878<Y%RMÌ] 5 eT 5 p:8+78W<.eM 5 e; E :8­ E +e; 5 ¦ >H:U#<7GNRt+7US>T 5&Y%RM 5 5 ev*Re%: 5 ;$ E 'e7 5 e'_>S+T 5 R:G'M.'_>; 5 C\· 17GK­I1>M HD=BÁ¹ËcD o Æ:DË=< ]RWi178'­I1+MP;<MK E8E C'AÁ 'e'+'M.'_>;)e 5 W<]: 5 ; 5#>MA V$;$ 5 7U; 5 5 Wî3+g$ E :I>eK 5 ReT 5 ; 5 tS>T 5 .6üQþ C

Page 108: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$%& -, !Í"> i

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

?dW E +R';V1+78 Ç >p E E 5 5 ev*Re: 5 ;$ E 'e7 5 e._NS+T 5 ] @CXC C m b¦ 5 7>VL E8EG5 .eL;$'>Y%RaYR+WU9W 5 R 5 W<]: 5 ; 5 ;$ EGE 6eLT 5 pX:G>7GW<'eM%eT 5 ;$ E v Y%RF E :GF¦§S>» 7GNRt+7US>T 5;$`>7G7 5E V+e%:8T 5 VJ+g>S>T 5 ] E .W<M' E W<+e%:G`MKeS>; e 5 1W<>e:8Cd¤ M.9Le; 5 EGE .eL:GR78; 5 W<]: 5 ; 5 o ³6>³DM:?:C V 5 M.>H: 5 7Z'78­ 7G>7U7ZY%RVM']+W;$ ´:A6˳cD%¸ ¹:o D&NO? V>M.a 5 ;$:8W3t]+W M'eS+7(RW<+g>S>T 5 ; 5 :G' 5P´:A6˳cD&¸ J¸ ¹o D&NO? C l EGEG5 .7U­ 5 5 787G>7YRLe; 5 V 5 :G>e%:87#U97)RW : 5 º+e2; 5 5 ev*Re%: 5 ;$ E 'e+7 5 e._NS>T 5 V 5 W<]: 5 ; 5 U9+%7i 5-Ç eM;ä+e%:878;C<=^ EGE i+ EG5 Vye+e9RWi78>RL>78S+T 5 Wi E ]) 5E8EGâ 1+Mk< E8E zg+>S+T 5 eLT 5 ]:G7U:U; 5 70e+e9%RW´; 5E W<]+: 5 ; 5E 5 7G78 E 5 e;$>e:8 E 5E eLT 5 pX:G>7GW<'e E ;7UWi­:8'>VE +e; 5 7 5 ; 5 :G] 5 W<]+: 5 ; 5>MA Y%R)¦ 5 dY%R>W 'e'+ 5 RäeL­M' E E 'e:U­:8'>C<= 5 :8Y%RVe 5/>MAQ VeLT 5 :G>W 5%E Wi Ek5 :G7U:UW<+e%: 5 ;`RWi ´A6˳cD%¸ ¹:o D&NO? V> 5 W 5 eJ1>7 E T 5e%:8+78 5 7@; 5 e 5E8E5 5 W<'M'; 5 7NVWi E V E 'WV%;»RWi ´:A6˳cD&¸ J¸ ¹o D&NO? ù f 7 5 78W<boC /VM'.e9L)%oúC·ê7G:G E +R.e%:GJ; 5 W<]: 5 ; 5 ]JY%R+W ¦§_3R E >0;$JRW: 5 º+eze)+e%:G7U;0Y%R+ E

5 WæM'RW¨: 5 º+e&e 5 5 ev*Re%: 5 ;$ E 'e7 5 e._NS+T 5 C 4 ;<: 5 º>e& 5 e E RW<'; 5 ]3W 5E :G7U; 5 V+ E5 E8E 5 PS+T 5 E :8*v09'M'H:U;C f 7U Ç eM''_>7NV3W<+e E +W 5 787G E 5 e;+e%:G( 5 >7G7 5E .e%:8­:GK 5 ]0+W<H:8';i 5 eXHW<>7 5 ;$0+787 5%E V.e+7G>W<+e%:8; 5 C`·17GK­I1>M D Å 5 e%:87 5 M' E 5Ç W«; 5 7UYR.1 5 v­0¦ 5 Ø:G'e'; 5 C 4 EG5 Ç 78W<:G'1 5 b+ EG5)5 : 5 º+e ¸ J eT 5 ¦§S+)7:8; 5 5 ev*Re%: 5 ;$ E 'e7 5 e'_>S+T 5 V%+e%:8T 5 <+g$+>S>T 53´A6˳cD%¸ J¸ ¹:o D&NO? ]MKeS>;Cö 5 M.:8e; 5 5 eT 5 p:8+78W)'eM|9ü!)Vk1>W 5%E Y%R#+g E :GÍ;$NMK7US>T 5 ;178K­I1+M Á

Y%Ra]`R$:G'M'._N;J 5 W 5 5 ev*Re: 5 ;$ E 'e+7 5 e._NS>T 5 L7U» EGE aeT 5 p:8+78W)'eM%F:UW3t]+WË7U<U9Wi;0L ¼ü XCdök+W 5E V'e;VY%Rb)gNS+T 53´:A6˳cD%¸ J¸ ¹:o D&NË? ¦ 5 B'eM'R â ;e3M. E :Ub; E +g$+>S È E Y%R E8E ^W<]+: 5 ; 5 5 ;$(M'eS+7>C[=»T 5 78> E W 5E 'e+M.R'7Fe E8E bM. E :U ´:A6˳D%¸ ¹:o DNO? VN 5 E@5 °%I1 4`4 5 e E K;$>78bY%R^: 5 ; 5E65E W<]: 5 ; 5%E ; 5%E eLT 5 pX:G>7GW<'e E 5 ;+WîMKeLS+7a EGE )gNS+T 5 Fv­i).e+M.RBe)M. E :8C·^e%:G E ;$&7 5E8E +R.78W 5E W 5E :G7U78+W 5E RWÙLNY%R+e 5 g$+W<M 5 ;- 5 W 5 E8E -eT 5 p

:G>7GW<'eM E »78>RL>780;$»RW >7G7 53E .e%:U­:GK 5 C[= 31+7U;;Ve E8E (+ EG5 eT 5 5 ;$+W 5E ;$'_+>7g:8W<>e:8)Y%R<>M. E )78>+Rt+78C 465 W 5äE +R 5 ev*Re%: 5 ;$ E .eL7 5 e'_>S+T 5 ])RW û øU.@V 5Y%RÍ>M.#¦§_Í]Vd 5 >e 5 e%:G7U7RW >7G7 5 VZ 5 e E RW)'7b:8R; 5 :G] 5Ç eM6; 5 7UY%R.1 5 CödW 5%ER$:8.M'._N7 5iE +R.e%:GJ7 5 78Wi

`&h=^iXiS_iS¡ÌS_ SS&Q^&S¼b=i[\&S¡^ `&h=^iXi `&h=^iXiS_iS ~ Ì· 5 eM' E 78W 5E EGE #7 5 78Wiä:G+78+W 5%E 7G'W<+'78+M' EGE Ä b78> 5 e9>K; 5 W 5

RWiðo CA³³EHD o C J 5 W 5 RWiðo C'A³³³CQ³? C fZ5 78]+WV$ 5 +eL 5 e%:8787 5 K;$+e%:G Ç >; 5 7¨ 8XV 5· m ;$>+';$ eT 5 7 5 +R787dWi E 5 76RWio C'A6³³³C³c? »7G+: 5 78e 5 5 e%:87 5 M.`78 NCË ÁËA> VY%R;$+1+78'<U97FRW û ø.@C 465 W 5 E :8eT 5 ]+eL 5 e%:878; 5 V$+78 :8+78._Np E ^RWî+787 5)E .ep:8­:GK 5 378>+RL>78S+T 5 ] 5E :80+W¨S+T 5 C 465 W 5 ;$H: 5 V$ EGE b78>+RL>78S+T 5 ] E 'W<M. E W<>e:8 EGE 7b 5 7)'Wi&;$Í: 5 ; 5E35E ;$+Wi E : 5 º+e E Vk:8] 5Ç W ; 5 7UY%R.1 5 C? E8E ä 5 W) 5 7G:8p

Page 109: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

$%& -q !Í"> i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ­ÁnxÔZÕ^Ü^ÔLܻп@Ò)Ô`ÏêÝ1¿¿@Õ^ÕÏ`ÓÓ×*Ò)Ôð^Ô[×+Î`Ï`Ó %q

W<+e%: 5 ]ÍW 5E :G7U; 5 5 +g$>R:878W 5E e 5E8E5 5 W<'M'; 5 70 5 W´ EGE Í7 5 78Wizä 5 tS>T 5.6ü%þ L©X^&]7^T^&di_&dªZh=^[7£aX_gX7Kd_`\&]7_&d ZXZWi=i^fTch&_i&WT7d7\&Xd7^fNZ XX T7d7\&Xd^f =X

° [:`d\[bb[X ° _S«Upõ \ ± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VUõiS=d:b[7K7`\[:iS7^[7S ± =[\&d:b'[7S\&ö7_[VU`&h=^iXi± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VU± =[\&d:b'[7S\&ö7_[VUÌ \X[a¡i [:`\[bb[7ÊS\&ö_[«Uõ \

[:`\X[7S_d_=a S_ S ^S¦hb'[_ Ñ`\7hf[ Z_^i_ T_`S:b'[7\[_\=eU

õ \ `h=^iXi Z=ZXZa _ b=`^7h dXd\di7\X[7ac°& [7S^`S:b=` dXd\&diX\X[a·L7G:Gb'eKKM[W 5%E :878Í 5 W 5#5 eT 5 p:8+78W<.eM:9ü! :878: 5 R 5 +787 5 C m T 5 7G E >e$p

:8; 5E»5 5 ev*Re%: 5 ;$ E 'e7 5 e._NS+T 5 Vy;$+ 5 E VP>;#RW ; 5E : 5 º+e E 5 e E RW<'; 5%E VP:8] E +eL 5 e%:8787 RWÿY%R<L>7:8+e+' 5 5 ev*Re%: 5 C<?dW E +RK;ä])W 5%E :878;zäW<+e E +W 5 7Gp78 E 5 e;$+e%:8 5 +787 5 >e 5 e%:G7U; 5 C[= b78¯Ig$.Wi E >S>T 5 V%'7G>W 5%E ;$ E R$:8.7`M'Re E 7 5 M.>W< E78+MK 5 eL; 5%E 5E 5 ev*Re%: 5E ;$ E 'e7 5 e'_>S+T 5 CBök>7G>W 5%E 5 W 5 5 ;$>W 5%E :G>e%:87@W)>M.9 5 7U7(7GNRt+7US>T 5 ; 5 e 5E8E5 · m 78 +1.:87Z:G7U:8W<+e%: 5%E eLT 5 W3R.: 5 7 5 78'; 5E V 5 W 5(5 ; 5eT 5 pX:G+78W<.eLM=9ü!)Ck·^e%:G E ;$ E8E5 V1W 5E 7 5%EGE +R.7k`W 5%E :8787d 5 W 5JÇ >W 5E ;$>Wi EeT 5 pX:G+78W<.eL E C

¤\eLT 5 pX:G>7GW<'eMOL ¼ü aeT 5 W0R;)W3R.: 5 >W78+MKS+T 5 5 ; Ç eK; 5 e:8+78 5 7GW<>e:8

9:;%<:=?>=®Bu«F p; Z&[ LQYQ=^^%Y Z ^ K yr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­\ ×_ G LQ;&p G :¥Î GQK aS`tï Z :6^ K BL%YQ=^^QY Z ^ K B JQHZ ; H y<Õd ëe ×g LQY%=^^ [G LQYåyuaæLQYQ=^^%Y Z ^ K y< h ë

?dM'(U9Wi 5 LB E8E e; 5 5 W 5 5 ev*Re%: 5 ;$ E 'e7 5 e'_>S+T 5(5 5 ev*Re%: 5 Á VY%R78>>L>Rb 5 W 5 L7U®W<:87 5 V+@Wi E : 5 ; 5EB5E :8+78W<.e E Y%Rd E :8T 5 e 5Jç¼·;åÇ

(classlist)C l E8E5

Page 110: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦§Q¨T© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GS¬ ® §¨X¯ DD?si

i

i

i

i

i

i

i

Î`ÏaЬÏÎ`ÏaÒ(ÓBÔZÕ)ÖÌ×*Õ«ÖØÐÙÎ`ÏaÐÚd×*ÛØÜ»Ý<ÏaÕ

5 7UYR);$> 5 E ; 5 L&a 5 ;$>W 5E :G>7RW L ¼ü 5 RBVÌ+e%:8T 5 V 5äÇ eMd;M'K+S>T 5;$ EGE 7 5 ;RS+T 5 C=^ EGE ¶HM.:G'W 5 + E5 V 5 5 ev*Re%: 5 ;$ E 'e7 5 e._NS+T 5 ;$+1 E >7 5 W< E W 5; 5 eT 5 p:8+78W)'eM 5 7G78+e%:GC m H:8RS>T 53E +W<+M'9e:8 5 5 7G78`e3U9LWi;b7U,L ¼ü C m +R 5 ev*Re%: 5 ;$ E 'e7 5 e._NS+T 5 ]ä.RMa 5 ; 5 W<]+: 5 ; 5 5 787G>e%:GC l E8E5E 3v*R E :G Ç +Vd 5 E<E 5 5 7G78+7bRW +787 5 ;+e%:G7 5 ;-U9Wi;Wi E 'e%:G>7GeV 5 eT 5 pX:G>7GW<'eM@Y%Rz¦ 5 aU9W<; 5;$>1+7U­i7 5 R7U7»RW :G>7GW<'eM[YR0eT 5 E :8­z;$ Ç e'; 5 eÍ7 5 ;$RLS+T 5 5 7878+e%:GVWi E V E 'WVeRWi)7 5 ;$RLS+T 5 ; 5 eT 5 pX:G>7GW<'eMyY%R(¦ +_b<U9W<;C½`:8.M'._NW 5E e E8E äeT 5 p:8+78W<.eM 5 5 ev*Re%: 5®J/˳?Ä o CA³³³C³? C? E8E 5 ev*Re%: 5 ¦ 5

;$ Ç eK; 5 ;$>e:87 5 ; 5 5 :G ËD o ÆDË=< CÌ·ñ+M' EGE vŠ˳? ]^RWib+M' EGE `Y%R^ 5E8E Rt;$'1+7 E E178'­I1+ E E :8­:GK+ E YRb7G>78 E +e%:8W¨M'Re E ; 5%E 5 ev*Re%: 5J¼·;Ç Y%RbR E 78+W 5%E 7Ui78>RL>78S+T 5 ;$6>7G7 5E CÌ= 5 7 5 78Wi»o$C¼qVW 5E :G7UW 5%E .W<M'+W<+e%:US+T 5 ; E8E MK E8E CÌ?dMKE .W<M' E W<+e%:GF;$ Ç e@ E8E E 5 ev*Re: 5E Y%R@ 5 ;$+WV+e%:UT 5 V E +7[R$:G'M.'_>; 5E L>M 5 · m 5 7ÌW<+ 5; 5 e 5 W<6;»MK E8E d6;^178K­I1+MXV> 5 W 5^5 W<]+: 5 ; 5 L ¼ü ØY%R@R$:G'M.'_> J/˳?Ä o C'A³³³CQ³? C

9:;%<:=?>=®B('F n6=L j =Q< G : G L%;%p G :¥Õ\_ Z >n;&: KcÖ =Qp=B JK6Z YåB Õd Z >n;&: K YQ= H <QÔÙ; H ^ K = HK ^Õeg RR Z >nY G > GUHK =c;^SLQ; HÖUJHK ;^Pa Z :6^ K nRt=Y&< JH ^ H B KG :U> ZbH = Z ^h n JO Y Z LALQYQ=^Q^Ta Z :6^ K ×i ^ K = KZ LXn JO Y Z LTa ZbH =YT G L%;%p G :¥Î GQK > GQK%N ; [[G L%YS` H6G ßS G LQ;%p G :¥Î GQK yEÕk ^ K = KZ LXn JO Y Z LTa ZbH =YT G L%;%p G :¥Î GQK p=Q: [G LQYS` HG ßS G L%;%p G :¥Î GQK yEÕFrq ^ K = KZ LXn JO Y Z LTa ZbH =YT G L%;%p G :¥Î GQK LQYQ=^Q^QY Z ^ K ` H6G ßS G LQ;%p G :Q¥Î GQK yéÕFuF ^ K = KZ LXn JO Y Z LTa ZbH =YT G L%;%p G :¥Î GQK LQ; H ^ K : J L KQ[G LQYA` H6G ßt G L%;%p G :¥Î GQK yEÕFr\ ^ K = KZ LXn JO Y Z LTa ZbH =YT G L%;%p G :¥Î GQK ^ K = K Y Z ^ K ` H6G ßS G LQ;%p G :Q¥Î GQK yéÕFr_ ^ K = KZ LXn JO Y Z LTa ZbH =YT G L%;%p G :¥Î GQK n:;%<Q:=b>`AL%YQ=^^QY Z ^ K ÕF|dFre ^ K = KZ LS×Frg > G%K%N ; [[G LQYBu= [[ y H6G ßÒ HKG < G :yYQ= H <QÔÙ; H ^ K = HK ^çBÒUÓQÕFh > G%K%N ; [[G LQYBu= [[ y H6G ßÒ HKG < G :yYQ= H <QÔÙ; H ^ K = HK ^çBÎ%QÒbÓÑÕFri > G%K%N ; [[G LQYBu= [[ y H6G ßÒ HKG < G :yYQ= H <QÔÙ; H ^ K = HK ^çBÒUÞÓÕFrk\uq p=%: [G LQYåBu= [[ y H6G ßÒ HKG < G :CyY%= H <ÔÙ; H ^ K = HK ^åBÒbÓÕ\F p=%: [G LQYåBu= [[ y H6G ßÒ HKG < G :CyY%= H <ÔÙ; H ^ K = HK ^åBÎ&QÒUÓÑQÕ\u\ p=%: [G LQYåBu= [[ y H6G ßÒ HKG < G :CyY%= H <ÔÙ; H ^ K = HK ^åBÒbÞÓÕ\u_\d LQY%=^^QY Z ^ K Bu= [Q[ y H6G ßzÒ HKG < G :CyYQ= H <ÔÙ; H ^ K = HK ^åBÙ%ÍÎÎÕ\ue\ug LQ; H ^ K : J L K[G L%YBu= [[ y H6G ßÒ HKG < G :CyYQ= H <ÔÙ; H ^ K = HK ^åBuÙUÓ6Î%QQèÙQ6&Õ\h\ui ^ K = K Y Z ^ K Bu= [[ ÍYYåyup=Q: [G L%Y6Õ\uk ^ K = K Y Z ^ K Bu= [[ y H6G ßÒ HKG < G :CyYQ= H <ÔÙ; H ^ K = HK ^åBÒUÞÓQÕ_uq ^ K = K Y Z ^ K Bu= [[ y H6G ßÒ HKG < G :CyYQ= H <ÔÙ; H ^ K = HK ^åB|9ÒUÓQÕ_F ^ K = K Y Z ^ K Bu= [[ y H6G ßÒ HKG < G :CyYQ= H <ÔÙ; H ^ K = HK ^åB|ÍQÞÕ_u\ ^ K = K Y Z ^ K Bu= [[ y H6G ßÒ HKG < G :CyYQ= H <ÔÙ; H ^ K = HK ^åB|%èÓÕ_u_ ^ K = K Y Z ^ K Bu= [[ y H6G ßÒ HKG < G :CyYQ= H <ÔÙ; H ^ K = HK ^åBuÎUè9QÕ_d ^ K = K Y Z ^ K Bu= [[ y H6G ßÒ HKG < G :CyYQ= H <ÔÙ; H ^ K = HK ^åBÒ&ïÕ_ue ^ K = K Y Z ^ K Bu= [[ y H6G ßÒ HKG < G :CyYQ= H <ÔÙ; H ^ K = HK ^åBrï&Õ_ug ^ K = K Y Z ^ K Bu= [[ y H6G ßÒ HKG < G :CyYQ= H <ÔÙ; H ^ K = HK ^åB|ÐÍÙQÕ

Page 111: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦§Q¨T© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GS¬¬M§¨X¯ DDQDi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏ­ÁnxÔZÕ^Ü^ÔLܻп@Ò)Ô`ÏêÝ1¿¿@Õ^ÕÏ`ÓÓ×*Ò)Ôð^Ô[×+Î`Ï`Ó

_h ^ K = K Y Z ^ K Bu= [[ y H6G ßÒ HKG < G :CyYQ= H <ÔÙ; H ^ K = HK ^åB|ÐÍQÕ_ui ^ K = K Y Z ^ K Bu= [[ y H6G ßÒ HKG < G :CyYQ= H <ÔÙ; H ^ K = HK ^åBuÎ& Û Ò%ÙU6&ÓÕ_ukdqdîF ëd\d_ ë

¤ M'+.: 5 7J;$>1b:8+7(e 5 :U; 5 Y%R0e 5 eT 5 pX:G+78W<.eLM«L ¼ü (eT 5 g$ E :8378>RL>78S+T 5 ;$+787 5 C l E8E5 5 e%:8>< 5 7UY%RieT 5 +g$ E :Gi 5E8E ''M.K;;$#;$ 5 5 7G78+7J+787 5E 'e:U­:8' 5 ;$+e%:G7 5;$ EGE ÍeT 5 pX:G>7GW<'eMXC·¨U9Wi;& 5 W<]: 5 ; 5 ; 5 eT 5 p:8+78W)'eM¨L»eT 5 7 5 e>e9RWibg+>S+T 5 ; 5 :G' 5Ü´A6˳cD%¸ ¹:o D&NO? V> 5 E E8E W)]+: 5 ; 5 ¦§_^:878:8W)>e%: 5 ;$(+787 5EE .e%:8­:GK 5%E Vy 5 W 5 1>7G>W 5E E +R.7NCb· 5 78: 5 78e7(;Y%R>M'äU9Wi;V 5 · m '78­z1>7G Ç >7E 5 : 5 º>e 5 787G>e%:Gi E :8­ 5 R,eT 5 e 5nJç¼·;Ç

(classlis)Cz?@W´> EG5 Ç 78Wi:8.1 5 VÌ EGE #eT 5 p

:G>7GW<'eM E +7U­^U9Wi; 5 6eT 5 ;$+1d:8W3t]+W\+7U7Be>e9RWi»+g>S>T 5 CB?dW+ E5 e+%:G'1 5 V5 W<]: 5 ; 5ÍE .W<M' E W<+e%:Gb78: 5 78e 5 5 e%:G7 5 M'7U<Y%R+M'3Y%R 5 U9W 5 RÌC6?dWæW3 5E^5%E+ E5%E V$++7G:8W<>e:8JeT 5<5 5 7G78»>7G7 5)E 'e:U­:8' 5 C°­ 5 eT 5 pX:G>7GW<'eM1LF¦ 5 @MH:8+7U; 5 78z¦§_>+7J:878:8W<>e: 5 ;$i+787 5E .e%:U­:GK 5 V

5 W 5 W 5%E :878 5 7 5 7UWi0oC C

9:;%<:=?>=®Bu®F p; Z&[ LQYQ=^^ [G LQYåyr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­\ ×_ ëd ×e K :¥M×g ä Ù&ÍÎÎ wä ÒUÞÓ ä ÔQÓÞÎ Aä ÒUÞQÓ t L%YQ=^^ O ; [ ¥Cyu<h ëi L%= K L N y9=Q:^ G v6L G n K6Z ; HzG k ×Frq L%; H ^ J > G è HK6Z Yåyu<Cö G öílbLQYQ=^^ [G LQYl&ÕFuF ëFr\ ë

f 7U# E8E 3eT 5 pX:G+78W<.eLMXVeT 5 9­ÍW3R.: 5ä5 Y%R) 5 W<>e:U7NC(= 5 > EG5 ;$)+787 5 V 5 :G7U:8pW<+e%: 5 ]<¦ >H: 5 e 5 78WiM'W)>e%:Gi 5 W 5 v­ä1 E : 5 iU9Wi;äL-R$:G'M.'_> 5 W< E W 5 5 ev*Re%: 5 ;$ E .eL7 5 e'_>S+T 5 V6 5 E V` 5 7z E :U7#e 5¬Ç eM ;,7 5 ;$RS>T 5 V 5E eLT 5 pX:G>7GW<'e E E t+7U; 5%E L¯ E E8E )U9W<; E T 5 +g:8W<+e%:G 5E W< E W 5E ; 5 eLT 5 pX:G>7GW<'eMy 5 787G>e:8C

¤QeT 5 pX:G>7GW<'eM³o CA³³cB H< ]FRW 5 RL 5 W< E >M' 5 78; 5 VI+W:G+78W 5E ;$F7GNRt+7US>T 5;$>7G7 5E CØökvW 5Ea5 7 5 78Wi0o$C C

9:;%<:=?>=®B ¬F p; Z&[ LQYQ=^^ O ; [ ¥Cyr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­\ ×_ G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yQÐÍÙ%öd a © ` HG ßS G L%;%p G :¥Î GQK yÎU Û Ò%ÙU6&Óöe a@t`tï Z :6^ K B > GQK%N ; [[G LQYåB JHZ ; H yuaDQög aªS`tï Z :6^ K BLQ; H ^ K : J L K[G LQYB JQHZ ; H ya@ö

Page 112: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G Dbss §¨X¯ DD ©i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

h a!P`tï Z :6^ K Brp=Q: [G LQYB JHZ ; H yuaQªÕi ëk ×Frq K :¥M×FuF ä QÐÍÙ% Fr\ LQYQ=^^QY Z ^ K yua!6 Fr_ y6|Í#Í%Þ/y@Tp=Q: [G LQYåya © ä Î& Û Ò%Ù&6UÓ F|d yîLQ; H ^ K : J L K[G LQYçyuaª Fre y> GQK&N ; [[G LQYåyua@6 Frg ä QÐÍÙ% Fh ëFri L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Frk ×\uq LQ; H ^ J > G è HK6Z Yçyu<Cö G öílUL%YQ=^^ O ; [ ¥l%Õ\F ë\u\ ë ödW 5E eM' E ­prM 5 .eKKeL; 5 t+M 5àÇ eM;Ñ7 5 ;RS+T 5 C¤ E : 5 º>e E YR- 5 ;$+WÙ1'7

t¯ E U9Wi; >³D7?Q HMHD o C&E T 5-5 ¦ NU9-U9LI1 5 R 5 .e â 5 ;$zRW<-e 5 1;$ Ç e'S>T 5;$W<]: 5 ; 5 V[v­,Y%R E8E U9LWi;- 5 ; E >7i7G>L+:GK;'e=HW)>78 E 1>_+ E C fZ5 7i EGEG5 V E +R 5 ev*Re%: 5 ; E 'e7 5 e._NS+T 5 ]GÅ ¸ V178K­I1+M J Y%RM¦ 5 L:G78.R â ; 5 RW 5 ev*Re%: 5 ¦ 5 7GWi; 5 5 7J/˳?Ä >³DX? HMH7D o C ReK; 5 5 W ´ û ú Ìûµ%C·^M' 5^E +W<+M'9e:8d 5 e%:GNk 5 W `U9W<;ae%:G>7G 5 7NV+ 5 W)]+: 5 ; 5 * )&¼C 465 W 5

E8E iU9Wi;):8W0L]>W¨ 5 ;$ 5 5 787G>7F'eXHW<+7U E 1+_> E V Jç¼·;Ç(construcdecl)

;$>1b E :U7e 5ÍE +R- 5 ev*Re%: 5 ;$ E 'e+7 5 e._NS>T 5 C`·»M.]>W ; E8E5 V 5 ;$+W 5E :G>7 L¯ E E8E #U9Wi;<RWi;$NMK7US+T 5 ;$<W<]: 5 ; 5 VB 5 7:Ue%: 5 V J¼·;Ç

(methoddecl);$>10¦§_>+7J7G:G<; 5 5 ev*Re%: 5

;$ E 'e7 5 e'_>S+T 5 V E8E .W 5 W 5 û ú ÌûFVt 5 E RWi#;$ Ç eKS+T 5 ;$3W<]: 5 ; 5 5 ; 5 ReLT 5L78>>7>CØ· E8E 'WV 5 5 ev*Re: 5 ; E 'e7 5 e'_>S+T 5 ]`»Re'T 5 ;$lÅ ¸ 5 W J/˳?Ä o6 ³?Ë o ?bÄHD o C V$:87G'R â ; 5#J 178'­I1+MÅEÆC°­iÍU9Wi;)Ä[]3e>+ E8E 7GKW<+e%:8 E +RK;< 5 7^RW« 5 e%: 5 prpr1 â 78RM'0VL 5 7

EGEG5 V E +R& 5 ev*Re%: 5 ;$ E .e+7 5 e'_>S>T 5 ]3¦ 5 78W<; 5 5 7( E8E nHeK 5 eT 5 pX:G+78W<.eLMXC ?^V Ç eLM.pW<+e%:GVÌU9Wi;z L ¼ü JR E 5 W 5äE 'e7 5 e'_>; 5 78 E : 5 ; 5%E(5EEGâ W0 5 M 5%E Y%R< E :UT 5+WÇÅEÆàW< E65E Y%R» E :UT 5 >W JC˳?ÄEÆcA6ËKHD o C VIYR E T 5b5%E6EGâ W0 5 M 5%E ;$ Jç¼·;Ç

(vardecl)C

= 5 eLT 5 pX:G>7GW<'eMn¼V^eT 5 9­,e>e9RWiàU9Wi;,W<]: 5 ; 5%E ;$ 5 R$:87 5%E eT 5 p:G>7GW<'e E Vt+e E 078>+Rt+7US+T 5 ;$>7G7 5E e 5 7GWiMVW 5E :G7U;0e 5 7 5 78W<)o$C'">

9:;%<:=?>=®BEDbsF p; Z&[ p=Q: [G LQYåy G LQ;%p G :Q¥Î GQK < K%N :;&ß^T9=%:6^ G 6&ïQv6L G n K6Z ; H ­\ ×_ ëd ×e K :¥M×g y ä ÒUÓ ê] ä Î%Q6ÒUÓÑ ò]üä ÒUÞÓ h ä ÒbÞÓ y ä ÐÍÙ Aä ÐÍÙ i y ä Ù ÛÛ Í Aä ÒUÞÓ y ä QÐÍÙQ Aä ÐQÍÙ k ëFrq L%= K L N y9=Q:^ G v6L G n K6Z ; HzG FuF ×Fr\ LQ; H ^ J > G è HK6Z Yçyu<Cö G öílp=Q: [G L%Yl%Õ

Page 113: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G DbsD §¨X¯ DD?@i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÁxÔZÕ^Ü^ÔÜ Ð¿@Ò)Ô`ÏÊÝí¿¤¿@Õ^ÕÏ`ÓÓ×*Ò0ÔLð^Ô[×+Î`Ï`Ó "N "

Fr_ ëF|d ë

f 7U( )&P!#±$'&HV E HeK+ E U9W<; E E :8T 5 e 50Ç eMP; E 7 5 ;$RS È EVy 5 7G:8e%: 5 V EG5 W<>e:8 5%E 5 ev*Re: 5E ;$ E .e+7 5 e'_>S>T 5 Y%R0¦ 5 7UWæ78>++K; 5%E 5 W 5 78®pW<:87 5%E e E8E E ; 5 E eLT 5 pX:G>7GW<'e E(E T 5 R$:8.M'._N; 5%E e E U9Wi; E CO 'e:8+78 E8E e%:G3e 5 :87Y%R»L7Ub7UWi­:GK+Y%R» E :UW 5E R$:G'M'._Ne; 5 eT 50E >7GKeN E8E ­78 5 Y%R 5 W<]: 5 ; 5 . Ç _+ EGE 078>+Rt+7US+T 5 ;$)+787 5%E C l E8E5 5 e%:G>+3 5 7UY%R3 EGE 3W<]: 5 ; 5 ]<U9W<; 5t+eL E ;$>e:87 5 ;,LVteRW¨ 5 e%: 5 ;3;$>+ E T 5 V 5 R E *vVLYRg$.b 5 e E RMH:U) 5 M 5 p5 º9>;#78);$>+';.7Gp E E ¶ * )&Ì;+1 E +7^U9Wi; 5)5 R E 5 R$:G7 5 +W<'e9 5 ;$+1E +7`: 5 Wi; 5 C`· E8E 'WV E 3<g$>+RS+T 5 MK+eS 5 Rä EGE W<]: 5 ; 5 ]b 5 7UYR 5 : 5 º+e 5 787G>e:8]RWÉ øúýú÷¯*ÊZ8÷1øJCû»>e%:G7 5 ; 5 W<]: 5 ; 5 V EGE a: 5 º>e)] 5 e E RW<K; 5 V%M 5 5 +W E +R';VRWi#U9Wi;)]¦ >H:U#p!"%$'VyYRbeT 5 7 5 %0>7G7 5E`E 'e:U­:8' 5E C6· E8E .WVP;$+e%:G7 5;$ ¼Vye>e9RW +787 5zE .e%:8­:GK 5 7GN E E +7 :G7U:8; 5 C fZ5 7 5 R$:G7 5 MK; 5 VyWie%:G>707GNRt+7US>T 5 ;$(+787 5E eT 5 :878M'9>We;bJL>7GW<.:GY%R 5 eT 5 pX:G>7GW<'eM E v3R:G.pM'._N; 5 ;$<Wie>.7UzW< E PLg â 1+MXVÌ 5 7+g>W<M 5E +e; 5 U9LWi; 5 ;$'7G+:8W)>e%:Gi;$ 5 R$:87 5%E 5 e%: 5%E ; 5 e 5E8E5 7 5 78W<V%Y%ReLT 5iE v 5 eLT 5 pX:G>7GW<'eMOL'C

¤êeT 5 pX:G+78W<.eLM@!"±$'&'i] W 5E :G7U; 5 e 5 7 5 7UWiboC.""C f[5%EGE Ry;$R E U9Wi; E,eT 5 pX:G>7GW<'e E C· 78.W<+'7U,]¦ >H:U¬9!Hüz&R$:8.M''_> 5 ¦ >U9,L7I+e%:G E & 5 W 5E .e+7 5 e'_>; 5 7NCy?- E >Re;VY%R@1+W\e 5»Ç eM$;»7 5 ;RS+T 5 VIR$:G'M'._N 5 7G¯78 5 L7U®W<:87 5Á 5 W 5 5 ev*Re: 5 ;$ E 'e+7 5 e._NS>T 5 C

9:;%<:=?>=®BEDDF p; Z&[ > GQK%N ; [%O ; [ ¥y G LQ;&p G :¥Î GQK < K%N :;&ß6^X9=Q:6^ G 6%ïQv6L G n KZ ; H ­\ ×_ G LQ;&p G :¥Î GQK aS` H6G ßt G L%;%p G :¥Î GQK yQ9ÍQÓÕd ëe ×g K :¥M×h ä 9ÍQQÓ n6=Q:=?>Y Z ^ K yua ä 9Í%Ó ^ K = KG > GUHK yu<i ëk L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Frq ×FuF LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl> GQK%N ; [&O ; [ ¥l&ÕFr\ ëFr_ ë

¤òeLT 5 pX:G>7GW<'eM&9!HükeLT 5 W3R;VJeT 5E >7kL>M'('eM'R E T 5 ; 5 :G7U:UW<+e%: 5 ;$`>7G7 5ù 7 5 7UWi0oC."Iú C

9:;%<:=?>=®BED ©F p; Z&[ n6=Q:=b>Y Z ^ K yr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­\ ×_ ëd ×e K :¥M×g h y ä ÒUÓ ò] ä Î&QÒUÓÑ ò]ðä ÒUÞQÓ ä ÒUÞÓ y ä ÐÍÙ Aä ÐÍÙ

Page 114: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G Dbs ©M§¨X¯ DDªi

i

i

i

i

i

i

i

"> % Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

i y ä Ù ÛÛ Í y ä ÒUÓ ] ä Î%%ÒUÓÑ ò]üä ÒUÞQÓ ä ÒbÞÓ k y ä ÐÍÙ Mä ÐQÍÙ Frq FuF Fr\ ëFr_ L%= K L N y9=Q:^ G v6L G n K6Z ; HzG F|d ×Fre LQ; H ^ J > G è HK6Z Yçyu<Cö G öílén=Q:=b>Y Z ^ K l%ÕFrg ëFh ë

= 5 eT 5 pX:G>7GW<'eMV !#cVB:G+W 5%E VØeWi 5 78'ä; 5E > EG5E V 5 : 5 º>eiûª²* 7 øU ø ý 5 W 5 5 ev*Re%: 5 ;$ E .eL7 5 e'_>S+T 5 CB= 5%E > EG5E >WYR6»U9LWi;`»eT 5 p:8+78W<.e E 7GNEG5 _+'e9zez7 5 ;RS+T 5 VB 5 W 5 +W ü ý XVÌR:G'M.'_>p E 5 78¯78 5 5 ev*Re%: 5 ;$ E .e+7 5 e'_>S>T 5;$ ))!#c» 5 W 5 78RW)>e%: 5 ;zU9LWi;Cb?êe 5 + EG5 ;( ¼ü VÌR$:G'M.'_>p E 5 ¦ NU9U9I1VÌY%Ri] 5 ;$>M.'W<H:U; 5 73; E NY=kI+e+';$# 5 WieL; 5E VÌ 5 W 5E 'e7 5 e._N; 5 7>C D >W 5E V+e%:UT 5 V 5 +¯;. 5 W 5E :G7U; 5 e 5 7 5 7UWi0oC."N/

9:;%<:=?>=®BEDb@F p; Z&[ ^ K = KG > G&HK yr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­\ ×_ G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yÎU Û Ò%ÙU6&ÓÕd G LQ;&p G :¥Î GQK a © ` HG ßS G L%;%p G :¥Î GQK yQÐÍÙ%Õe ëg ×h K :¥M×i Í#QÍQÞ/y © k p=Q: [G L%YåyuaDQ ä ÎU Û Ò%ÙU6&Ó Frq ]FuF = K : ZbO ^ K = K yuaDQ ä Î& Û Ò&Ù&6&Ó Fr\ ]Fr_ n: ZbHK ^ K = K yuaDQ ä Î& Û Ò&Ù&6&Ó F|d ]Fre : G = [ ^ K = K yuaD% ä Î& Û Ò%Ù&6&Ó Frg ]Fh : GQK%J : H ^ K = K yaDQ ä Î& Û Ò%Ù&6UÓ Fri ]Frk ^ J n G :6^ K = K yuaDQ ä Î& Û Ò&Ù&6&Ó \uq ]\F Z a6^ K = K yu<\u\ ]\u_ a;%:6^ K = K yu<\d ]\ue ä ÐÍÙ& ^ K = K Y Z ^ K ya © ä ÐÍÙ% \ug ]\h ä ÐÍ Aä Î& Û Ò&Ù&6&Ó \ui ]\uk ä Î& Û Ò%Ù&6&Ó _uq ë_F L%= K L N y9=Q:^ G v6L G n K6Z ; HzG _u\ ×

Page 115: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G Dbs@ §¨X¯ DD£i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÁxÔZÕ^Ü^ÔÜ Ð¿@Ò)Ô`ÏÊÝí¿¤¿@Õ^ÕÏ`ÓÓ×*Ò0ÔLð^Ô[×+Î`Ï`Ó "N /

_u_ LQ; H ^ J > G è HK6Z Yçyu<Cö G öílU^ K = KG > G&HK l%Õ_d ë_ue ë ¤ E ;$+Wi E eT 5 p:8+78W<.e E VIRv E ; Ç eKS È E[E T 5 78 E +e%:U; E e 5 7 5 7UWi»oC.">»R$:8.M'.p

_>W 5 W) E W 5 7U+ 5 â e 5 7U;$+:G+78W<.eL7 5%E 5 ev*Re%: 5%E ;$ E 'e7 5 e._NS+T 5 ; E U9Wi; E 5 R$:G7 5E eT 5 p:8+78W)'e E C»· E8E .Wæt+eL E 78 E +e%:8W 5%E E8E E eLT 5 pX:G>7GW<'e E V E +W e>+ E pE ';;$;$e>e9RWî 5 W<+e%:8­7G 5 +g:G7UC

9:;%<:=?>=®BED?ªF p; Z&[ = K : ZbO ^ K = K yr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­\ ×_ G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yuÍÎÎÒ%Ñ%ÓÕd ëe ×g K :¥M×h Y&p=Y J6G yuaDQ ä ÍÎÎÒ%Ñ%Ó y =Y;L G v%n: G ^^ Z ; H yu< ]üG v%n: G ^^ Z ; H yu<Qi ëk L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Frq ×FuF LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl?= K : ZbO ^ K = K l%ÕFr\ ëFr_ ëF|dFre p; Z&[ n: ZbHK ^ K = K yr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­Frg ×Fh ëFri ×Frk K :¥M×\uq ä 9ÒUÓ SG v%n: G ^^ Z ; H yu<\F ë\u\ L%= K L N y9=Q:^ G v6L G n K6Z ; HzG \u_ ×\d LQ; H ^ J > G è HK6Z Yçyu<Cö G öílén: ZbHK ^ K = K l%Õ\ue ë\ug ë\h\ui p; Z&[ : G = [ ^ K = K y G LQ;%p G :¥Î GQK < K&N :;&ß^T9=Q:6^ G %ïQv6L G n K6Z ; H ­\uk ×_uq ë_F ×_u\ K :¥M×_u_ ä ÍQÞ Y&p=Y J6G yu<_d ë_ue L%= K L N y9=Q:^ G v6L G n K6Z ; HzG _ug ×_h LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl: G = [ ^ K = K l%Õ_ui ë_uk ëdqdîFd\ p; Z&[ : GQK%J : H ^ K = K y G LQ;&p G :¥Î GQK < K%N :;&ß6^X9=Q:6^ G 6%ïQv6L G n KZ ; H ­

Page 116: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G DbsQª §¨X¯ DD?«i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

d_ ×dud ëde ×dg K :¥M×dh ä %èQÓ G v%n: G ^^ Z ; H yu< di ëdk L%= K L N y9=Q:^ G v6L G n K6Z ; HzG euq ×eF LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl: GQK%J : H ^ K = K l&Õeu\ ëeu_ ëedeueeug p; Z&[ ^ J n G :^ K = K yr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­eh ×eui G LQ;&p G :¥Î GQK aS` H6G ßt G L%;%p G :¥Î GQK yQ9ÍQÓÕeuk ëguq ×gFÚK :¥M×gu\ ä ÎUè9 Aä 9ÍQQÓ =Q:<Y Z ^ K ya ä 9Í%Ó gu_ ëgd L%= K L N y9=Q:^ G v6L G n K6Z ; HzG gue ×gug LQ; H ^ J > G è HK6Z Yçyu<Cö G öílU^ J n G :6^ K = K l%Õgh ëgui ëgukhq p; Z&[MZ a6^ K = K y G L%;%p G :¥Î GQK < K%N :;&ß^T9=Q:^ G 6%ï%v6L G n K6Z ; H ­hF ×h\ G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yQ9ÍQÓöh_ a © ` HG ßS G L%;%p G :¥Î GQK yQ6Î&B JHZ ; H yu<Õhrd ëhe ×hg K :¥M×huh ä Ò&ï Sä Q9ÍQÓ SG v%n: G ^^ Z ; H yuaDQ ä 9ÍQÓ ^ K = KG > G&HK yua © hi 6Í#ÍQÞ/yEDQ ä 6Î& ^ K = KG > G&HK y< hk ëiuq L%= K L N y9=Q:^ G v6L G n K6Z ; HzG iF ×iu\ LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl Z a6^ K = K l%Õiu_ ëid ëiueiugihiui p; Z&[ a;%:6^ K = K y G LQ;%p G :Q¥Î GQK < K%N :;&ß^T9=%:6^ G 6&ïQv6L G n K6Z ; H ­iuk ×kuq G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yÎU Û Ò%ÙU6&ÓökF a © ` HG ßS G L%;%p G :¥Î GQK yQ9ÍQÓÕku\ ëku_ ×kd K :¥M×kue ä ï& Sä 9ÍQQÓ = K : ZbO ^ K = K yuaDQ ä ÎU Û Ò%ÙU6&Ó

Page 117: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N o !Í""Iqi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÁxÔZÕ^Ü^ÔÜ Ð¿@Ò)Ô`ÏÊÝí¿¤¿@Õ^ÕÏ`ÓÓ×*Ò0ÔLð^Ô[×+Î`Ï`Ó "N o

kug G v%n: G ^^ Z ; H yuaD% ä Î& Û Ò%Ù&6&Ó kh = K : ZbO ^ K = K yua © ä Q9ÍQÓ kui ^ K = KG > G&HK yu<kuk ëFrquq L%= K L N y9=Q:^ G v6L G n K6Z ; HzG FrqF ×Frqu\ LQ; H ^ J > G è HK6Z Yçyu<Cö G öíla;%:6^ K = K l%ÕFrqu_ ëFrqd ëFrqueFrqug p; Z&[ ^ K = K Y Z ^ K yr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­Frqh ×Frqui G LQ;&p G :¥Î GQK aS`tï Z :6^ K B^ K = K Y Z ^ K B JHZ ; H yu<ÕFrquk ëFuFrq ×FuFuF ^ K = KG > GUHK yua^ K = K Y Z ^ K yu< FuFr\ ë

°­3e 5 eT 5 p:8+78W)'eM­55+V$7 5 78W<boC."Io$V:G>W 5%E RWibe 5 1K;;$Ck= 5 :8 5 M.>H: 5 7aY%R5E ; 5 E eT 5 pX:G>7GW<'e E Y%R E T 5 U9Wi; 5E ;$+e%:G7 5 ;$p55ieLT 5 R$:G'M.'_>W 5 ev*Re%: 5%E ;$E .e+7 5 e'_>S>T 5 V 5 RW<+M'9 5 7>V 5 1M 5 7BL E8E ; 5 5 W 5 7GRW<+e%: 5 e E8E `U9Wi;a] |CXC C l EGEG5E .e Ç +^Y%R 5E W<]+: 5 ; 5E 8 9: üG0¥*ü¼ü ÌeT 5 ;$>1+Wꦧ_++7Ø7GNRt+7US>T 5 ;$F+787 5 FY%R+ E5<5 5 7G7U0RWî>7G7 5iE 'e%:8­:8' 5 e<g$>+RS+T 5 ;$ E8E E W<]: 5 ; 5%E VL<gNS+T 5 5 787G E 5 e;+e%:G E8E #+787 5 ;$>1 E +7b7 5 %;i7U'W<i:G] 5 45äYR#.7U­ä:G7U:U7 5 >7G7 5 C l EGEG5]0¦ +.: 5 5 78Y%R(55Í7GNVPezWi 5 78'Í; E 1>_+ E Vy;$>e:87 5 ;$)RWiäg$78 E8E T 5#5 R;$RW« 5 Wie; 5 V>Wî+7UMXV 5 787G E 5 eL;$(<RWîeXHW<+7 5 LNYR+e 5 ;$J: 5 º+e E 5 W 5 r ü u05 R"±± r Mz1 u C

9:;%<:=?>=®BED|F p; Z&[ Y%p=Y JG y G L%;%p G :¥Î GQK < K%N :;&ß^T9=Q:^ G 6%ï%v6L G n K6Z ; H ­\ ×_ ëd ×e K :¥M×g ä ÒbÞÓ yh ä ÐÍÙ SG v&n: G ^^ Z ; H y HQJ YY6 ä ÐÍÙ ò]i ä Þ6% Sä ÒUÞÓ ä 9Í%Ó =Q:Q<Y Z ^ K y HJ YY ä 9ÍQQÓ %k Frq ëFuF L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Fr\ ×Fr_ LQ; H ^ J > G è HK6Z Yçyu<Cö G öílbY&p=Y J6G l%ÕF|d ëFre ë

· E8E 'WV 5 ;$+W 5E 5 e E K;$+7U7`Y%R E RW«+787 5)5 5 7G78;$+e%:G7 5 ;iU9Wi;< 5 W<]: 5 ; 58 9: üGÍ;$+e%:87 5 ;$¥55+V: 5 ; 5J5 eT 5 p:8+78W<.eM:55^;+1 E +7k 5 e E K;$>78; 5 'e1I­M.K; 5 07GNRt+7US>T 5 ;$>1 E >7F¦ +.:8)37:8.7`;$ EGE »eLT 5 pX:G>7GW<'eMXV+1.:8eL; 5 RWi)7UeRMK78K;;$W3RH: 50Ç e<e)7GNRt+7US>T 5 C 465 W¦ >H: 5 V E (:G'1+78W 5E E >R'e%:GJ+e%:878;

Page 118: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G Dbs« §¨X¯ DD?®i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

^eZ)g«Z`ËÒ aó _&Ó«ÒbÓ¤¢ Ë:G>7G>W 5E RWi#U9Wi;<p550 5 W 5 5 ev*Re: 5 ;$ E .e+7 5 e'_>S>T 5 .RMØ ´ ú 2M ÿúý µVY%R<¦§_iRW<U9LWi;89UüGC m ¯89: üG Ç _+ EGE i78>RL>78S+T 5 ;$i>7G7 5 VB E :UE +78'ঠ+.:8Q:8] 5 78.W<+'7 5 ¦ >U9LÑ 5 MKU9:8&,Ñe­M' E 5 e%:8.eR7GKC s E E8E5 eT 5 ]eN E8E ­78 5 C#ödW 5E 5 e E K;$+7U7bY%R E #RWÿ+787 5ä5 5 787G>R-e+g$7G EGE T 5 >e:87G# 5 MKU9:8 E V: 5 ; 5-5 MK; 5 E YR+7U; 5 ;-:G78'RKS+T 5 E :8­>7G7U; 5 z78>+Rt+7US+T 5 ]#¦ >H:U-L>e E 5 755+Vk 5 e E RW)'e; 5 :8R; 5 :G] 5 ú Kb ÿ ý Í7G+: 5 78ee; 55 5 e:87 5 M.iL7U * üG )bY%R:G7U:U; 5 7G E : 5 ; 5 5 Wie; 5 C l E8EG5 >1H:UYR#; 5 E +787 5%E 7GNS+WæW0R.: 5 t+7G: 5 RWÿ; 55 R:G7 5 V 5 R E *vV;+e%:G7 5 ;$JRWi<W) E Wi)g$78 E8E T 5 C·^M' 5E +W<+M'9e%:8 E +7U­Í¦ +.: 5 78äY%R>M. E eT 5 p:8+78W)'e E Y%R< E :8T 5 GHg 5 );$Ä8&.

9 üG 5 W 5 7!#89 V ! 6ý& Ck? E8E E eLT 5 pX:G>7GW<'e E eRe>J¦§_>+W 7GNRt+7US>T 5;$>7G7 5iE 'e%:8­:8' 5 V Ç >e; 5 E :8 E +W<78( 5 7 5 e%:U); 5 W)]+: 5 ; 5 89UüGC f[5 7^ EGEG5 V$>M. Ee>W E NY%R+7J 5E8E R>W RW 7U®W<:87 5 ¦ 5 78WiMk 5 W 55%E ;+Wi E eT 5 p:8+78W<.e E CbO 5 Y%RW 5E :G7U 5 7 5 78Wi0o$C'">

9:;%<:=?>=®BEDb«F p; Z&[ =Y;L G v%n: G ^Q^ Z ; H yr G LQ;%p G :¥Î G%K < K%N :;&ß^X9=Q:6^ G %ïQv6L G n K6Z ; H ­\ ×_ G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yQ9ÍQÓöd a © ` HG ßS G L%;%p G :¥Î GQK yQÐÍÙQÕe ëg ×h ä Ó yi 6Í#ÍQÞCy © ä ÒUÞQÓ Aä 9ÍQÓ =Q:<Y Z ^ K yuaD% ä 9ÍQQÓ ò]k y ä ÒbÓ ò]ðä Î%QÒUÓÑ ò](ä ÒUÞQÓ Frq y ä ÐQÍÙ AG v%n: G ^^ Z ; H yua © ä ÐQÍÙ UfFuF Fr\ ëFr_F|dFre p; Z&[SG v%n: G ^^ Z ; H y G LQ;&p G :¥Î GQK < K%N :;&ß6^X9=Q:6^ G 6%ïQv6L G n KZ ; H ­Frg ×Fh ëFri ×Frk K :¥M×\uq HQJ > G v%n:CyE-%y ä ê]üä ÑQ ê]ðä ê]üä Ñ% ](ä " ]ðä Ó! HJ > G v%n:Cyé \F ë\u\ L%= K L N y9=Q:^ G v6L G n K6Z ; HzG \u_ ×\d LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl G v%n: G ^Q^ Z ; H l&Õ\ue ë\ug ë\h\ui\uk p; Z&[THJ > G v&n:CyE K%N :;&ß^T9=%:6^ G 6&ïQv6L G n K6Z ; H ­_uq ×_F ë_u\ ×_u_ KG :U>áyE!yQy ä 9Qè6Î ê](ä&Û ÒUÓQèÎ KG :U>áyé _d ë

Page 119: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N %q- !Í"">i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÁxÔZÕ^Ü^ÔÜ Ð¿@Ò)Ô`ÏÊÝí¿¤¿@Õ^ÕÏ`ÓÓ×*Ò0ÔLð^Ô[×+Î`Ï`Ó "N %q

_ue_ug p; Z&[tKG :U>áyé K%N :;&ß6^X9=Q:6^ G 6%ïQv6L G n KZ ; H ­_h ×_ui ë_uk ×dq JQH =Q:¥ G v%n:CyEyy ä Î%ÍQ ò]ðä Î&ÍÎ# Ì]æä Û6 JH =Q:¥ G v%n:Cyé dîF ëd\d_ p; Z&[TJH =Q:¥ G v%n:Cyé K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­dud ×de ëdg ×dh %y ä 9QèÎ ò]ðä&Û ÒbÓQèÎ a=L K ;&:CyEdi ëdkeuqeF p; Z&[ a=L K ;&:CyE K%N :;&ß^T9=Q:^ G 6%ï%v6L G n K6Z ; H ­eu\ ×eu_ ëed ×eue yeug äZbHK ÏLQ; H ^ K = HK ]eh ä ^ K : ZbH <ÏL%; H ^ K = HK ]eui äUHJ YQYÏLQ; H ^ K = HK ]euk Y%p=Y J6G y HJ YY6 ]guq ä 9Í%Ó SG v&n: G ^^ Z ; H y HQJ YY6 ä 9ÍQÓ gF gu\ ëgu_gd p; Z&[ =Q:<Y Z ^ K y G LQ;%p G :Q¥Î GQK < K%N :;&ß^T9=%:6^ G 6&ïQv6L G n K6Z ; H ­gue ×gug G LQ;&p G :¥Î GQK aS` HG ßS G L%;%p G :¥Î GQK yÙ ÛÛ ÍB JHZ ; H yu<Õgh ëgui ×guk G v%n: G ^^ Z ; H yuay ä Ù ÛÛ Í SG v&n: G ^^ Z ; H yua hq ë

· E8E 'WV$+W 5%E ;$^1+760;$ Ç e'S>T 5 ;^: 5 ; 5%Ed5%E eT 5 pX:G+78W<.eL E V%78 E K; E ;b78>+R$pt+7US+T 5 ;(>7G7 5E CZ=»<78¯Ig$.Wi E NS+T 5 V1+78+W 5%E M.Re E +g>W<M 5%E J:G+e%:U78+W 5E M'RW< E¦ 5 78Wi E ;$W<+M'9 5 787a)78>+RL>78S+T 5 ;$>7G7 5E 7G E >e:U;0Y%RXC

5.3 Algumas possíveis melhoriasö»'W 5E Y%Ra]` E :Ue%:G E 'W<M' E +M'+RMK7 5 5 ev*Re%: 5 ;$ E 'e+7 5 e._NS>T 5 L7U»RWiJU9W<;;$ RW eT 5 p:8+78W<.eM;3e 5E8E b7UWi­:8'>C fZ5 7G]>WäV 5 78 E RM.:8; 5b5 $:8'; 5 e>W E +W<78»] E p:G E ¦§:G¯7G 5 C l 78+W 5E e E :8 E >S>T 5 78 E +e%:87@M'RWi E ¦ 5 78Wi E ;»W<+M'9 5 7U76 E8E »W)]+: 5 ; 5 ;$78>RL>78S+T 5 VeLM' E e; 5 5 WWi E ;$+:8M.9 Ed5 5 ev*Re: 5 ;$ E 'e7 5 e'_>S+T 5 ; M'Re E ; 5%EeT 5 pX:G+78W<.eL E C0O 78>+ EG5 +e%:G>e;$+7NVB 5 78]+WVÌY%Riä E 5 M.9ä; 5%E 5 ev*Re: 5E ;$ E .eL7 5 e.p_>S+T 5 ;$>L>e;$i E :Ue%:Gi;ä78W<­:GK+zYR E <R$:8.M'._NiYRiRWiz E :878:G]>KzY%Ri 5 ;$

Page 120: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N !Í"I i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

7G E >e:U7F 5 e E 78 E RMH:U; 5%E 7U3M.RWi E 7UWi­:8'> E 5 ;$eLT 5 78 E +e%:87 5%E W< E W 5%E78 E RMH:U; 5%E 7U 5 R$:G7U E C

¤ 78.W<>.7 5 7 5 M.>W<ä;z7GNRt+7US>T 5 ;0>7G7 5 ¦ 5 [1 E : 5 eL E >S>T 5 oC CO 5 + E5 ; 57 5 78W<

`&h=^iXiS_iS¡ÌS_ SS&Q^&S¼b=i[\&S¡^ `&h=^iXi `&h=^iXiS_iS ~ Ì5 eL;$#RWÿ+787 5 ]Í 5 e%:8; 5 5 +eL 5 e%:8787bMKI178ð 8&JÍ78>+RL>78S+T 5 ;$Í+787 5%E V[; 5W<]: 5 ; 5 9ü!)V.e 5 7U6: 5 ; 5%EB5E : 5 º+e E :8]d+eL 5 e%:8787yRWêû øU.dCN·à78'W)>.7U 5 E >7G1S>T 5 E +7@¦ +.:8](YR^eT 5 ¦§_^W0RH: 53E +e%:GK; 5 R$:8.M''_>7 5 û øU.ê 5 W 5bEâ W3 5 M 5 ;$ E 'e7 5 e'_>S+T 5 V1 E : 5 Y%R E :87G>W 5E<E >W<7G 5 e E RW<.e; 5 : 5 ; 55 78 E :8e%:G;+e%:G7U;V@Y%ReT 5E +7U­eLM' E ;CödW 5E MH:8+7U7 5 eT 5 pX:G>7GW<'eM9ü!î;(W 5 ; 5 Y%RVL¯ E 78> 5 e9N>76RW LHü

eJ>e:878;V+M'a:G+e%:8^U97 5 û øU.dVWi EkE `eT 5 5 e E +R.7NV;$>1+7U­ ¦§_>+7@J78 E8E 'e+7 5 e._NpS+T 5 »1 5 M.:8763eM' E 7 5 7 5 78WiCÌ?@e:UT 5 V EGE »eT 5 pX:G>7GW<'eM Ç +0 5 W 5b5 78 E +e%:U; 5e 5 7 5 78W<)o$C'"Iq

9:;%<:=?>=®BED£'F p; Z&[ n:;%<:=b>áyE K%N :;&ß^T9=%:6^ G 6&ïQv6L G n K6Z ; H ­\ ×_ G LQ;&p G :¥Î GQK <S`tï Z :6^ K B|n:;%<:=?>áÕd ëe ×g ä 6%ï h ]i L%YQ=^^QY Z ^ K yu<k K :¥M×Frq ä 6%ï FuF ëFr\ L&= K L N yr9=Q:6^ G v6L G n K6Z ; HG Fr_ ×F|d LQ; H ^ J > G è HK6Z Yåyu<ö G öílén:;&<:=b>ål&ÕFre ëFrg n:;%<:=b>áyE Fh ë ·^ 5 7U» EGE 6W<]+: 5 ; 5 U9Wi#L ¼ü V%Y%RV 5 W 5 v­( 5 W<+e%:UW 5E VeRe+(7 5 L»RWi

g+>S+T 5æ´:A˳cD%¸ ¹o D&NO? V 5 7@ EGEG5 VeT 5 7GN E b E :876;$+e%:G7 5 ;$ RW SXd W`^&Sc`QyCy?dWE +R';V:8+e%:8bU97@e+e%:878;RW û øU.@C m ( 5 e E >R'7NV+e%:8T 5b5 W<]: 5 ; 5 :G>7GW<'eV% 5 Eû øU.êeT 5 t+7G:G>eJ 5J¼·;Ç

(program) )U9W<;3 5 78¯7G 5 eT 5 pX:G+78W<.eLMe 53Ç eLM

Page 121: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N !Í"I$"i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÁxÔZÕ^Ü^ÔÜ Ð¿@Ò)Ô`ÏÊÝí¿¤¿@Õ^ÕÏ`ÓÓ×*Ò0ÔLð^Ô[×+Î`Ï`Ó "N

; 5 W)]+: 5 ; 5 eT 5 ]»¦ >H:UC m (eT 5 5 e E >R'7NV EGEG50E .e Ç +0YR(M.RW : 5 º+e# E :878e9 5 E :U­78 E +e%:GeL<+e%:G7U;C@?de%:UT 5 VRWiiW<+e E +W¨;+787 5 ]b>W).:GK;i0<7G EGE .eL7 5 e'_>S+T 5 ]¦ +.:8VPe 5E W< E W 5%E W 5 M';$ E 1 E : 5E e%:G>7G 5 78W<+e%:GC^?dW E +R';V 5 78¯7G 5 eT 5 p:8+78W<.eM9ü!¨].e1 5 >; 5 783:G>7GW<'e7`<e­M. E J;0>e%:G7U;V% E8E5iE J)78 E8E 'e+7 5 e._NS>T 5 ¦ 5 78>M''_>;3 5 W E RL E8EG5 C m (eT 5 ¦ 5 yt+W)p E R+>;$K;V$+e%:8T 5050Ç eMB;3>e%:G7U;3¦ 5 B:G'eK; 5;$R7Ue%:8 5 :G7U:UW<+e%: 5 ;b+787 5 bRW<#gNS+T 5È´:A6˳cD&¸ J¸ ¹o D&NO? ¦ 5 ÌMKeS>;< E +7U­7 5 ;C=^ EGE ,e 5 1 5 :G7U:UW<+e%: 5 Y%R,;$>W 5%E 5 eT 5 pX:G+78W<.eLMí9ü!)VR$:G'M'._NW 5E5 7

SXd W`^&S`Q; 5 °I1 4`4 eLT 5E5 7G)ä7 5 ;$RLS+T 5 : 5 ;ä; 5 eT 5 p:8+78W<.eMVPWi E L>e E +WRWiä7G:G<;$>M'C0½ E eL; 5 EGE i7G:G.¦ â + 5 V 5 'W<M'+W<+e%:8; 5 7J 5 ;$ E L>7Jg:UW<+e%:G)+WY%Rb 5 e%: 5 ; 5 W)]+: 5 ; 5#5 5 787G>R 5 >7G7 5#E 'e%:8­:GK 5 C fZ5 7 5 R$:G7 5 M'; 5 V 5 ;$>W 5%E e 5 :87»Y%Rb;$ Ç eKS+T 5 ; 5 eT 5 p:8+78W)'eM: 5 7GeLp E ^Wi E 5 W)M.K+;b(e+W RW 5 R 5 +M'+%e%:GC 4 LV 5 7G:8e%: 5 V$ 5 .W<M'+W<>e:U; 5 7FI1M.K7 5 YRLT 5 'W< 5 7:Ue%:GJ]J)7GNRt+7US>T 5 ;$J>7G7 5E 7U5iE >Rä 5 W<'M'; 5 7`J>W¨Y%RJ 5 e%: 5E 1M.b)t+e)+W<78+%7a E8E J7:8H¦ â 5 C½^W 5 R$:G7 5 +g$+W<M 5 ;$ä7 5 M'+Wi E Y%Rä 5 ;$>W 7GN>73e-e 5E8E 78>RL>78S+T 5 ;$

+787 5E ]&W 5%E :878;L>M 5%E g$>W)M 5%E E +R.7NC\= 5 78'W)>.7 5 V`,78>+Rt+7US+T 5 ]¦ +.:8Ñ;$Wie>.7U E :G E ¦§:G¯78KVL>M 5 W<]+: 5 ; 5 ))!"XC`&h=^iXiS_iS¡b[7S Ò ÓÊf b'[7S^

b[7S¤gªÑ`ÌÌ`&h=^iXiS_iS ~ Ì·\78.W<>.7Ui;$>+M'78S+T 5 ]78> 5 e9NK;< 5 W 5 RW<pHVLWi E L>M')¦§MH:Ui; 5 5 e%: 5 p

pr1 â 78RM'ÍRW +787 5Í5 5 7G78C3· 78>+RL>78S+T 5 Vy;$+e%:87 5 ;$ ))!"XVy7 5 R7U#RW Eâ W3 5 M 5Y%R( E :G*v0e 5 5 ev*Re%: 5 ;$ E 'e7 5 e'_>S+T 5 V 5 Y%RMt'eM'R 5 ¦ NU9)U9I1VV%>e%:8T 5 V78: 5 78e5 5 e:87 5 M.(78, )*¼ü `Y%R 5 e E5 W< 5 ¦ NU9<U9I1C fZ5 78]+WV E 5 7 5 7UWi¦ 5%EGE `&h=^iXiS_iS¡b[7S Ò ÓÊf b'[7S^

b[7S¤gªÑ`³ÑÌÌ`&h=^iXiS_iS ~ Ì 7GNRt+7US>T 5 eT 5(E +78K`:8T 5 Ç '+e%:8CZ=^ E8E F> EG5 V 5 >7G7 5»5 5 787G>R3;$+e%:87 5 ;$¥L+Rv 5 5 ev*Re%: 5 ;$ E .e+7 5 e'_>S>T 5 ] L>e E RW 5 e: 5 prpr1 â 78RMKCØ· 5 :G>e:U767GNRt+7U7 5 +787 5 V 5W<]: 5 ; 5 ÆA6ËKHD o C 5 e EG5 W<F: 5 ; 5%Ed5%E : 5 º+e E ;J+e%:878;V E +W +eL 5 e%:8787 5 ;$ E *v; 5 C l EGEG5>7:UW<+e%:8beT 5 ]3;$ E *v; 5 C f 78iW<>M.9 5 787^ E8E E .:GRLS+T 5 V 5 ;$+W 5%E MH:8+7U7y !#c

Page 122: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ X X ~X~i

i

i

i

i

i

i

i

""N Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

EGE e; 5 5 W 5 L7U®W<:87 5 78"ÌeT 53E ¯ 5 5 e%: 5 prpr1 â 78RMKVY%R»]» E t+7U; 5 L¯ E;$NMK7US+T 5 ;$i17GK­I1>MVBWi E :8W0L]>W 5 78¯7G 5 5 ev*Re: 5 ;$ E .e+7 5 e'_>S>T 5 E8E ; 5 5 W 5 7U®W<+:G7 5 7U ))!"XC 465 W 5 7G E RM.:8; 5 V³d'7GKi787» E .e+7 5 e'_>S>T 5e 5 ¦ >U9L)U9LI1C D +7 â W 5E

L%=&ns7Ë Ö =%p=Pn6=Q:6^ G :/BYQ= H <Ô ¨b[GUOJ <Ï%: G LQ;%p G :¥ BQBR^^%=?>nY G ^%R^ K = KG > G&HK© BvÔfftÙ;?>n Z Y G : ¨ Ø G :6^ Z ; H DBus ¨o© ssQª G = [6ZbH <Aa:;?>a Z Y G BBR^Q^%=b>nY G ^QR^ K = KG > GUHK© Bv BSBtB p=Q: [G LQY Î%¥ H LU:; HZ V ZbH <Î GQK ­PÕ ë × ä ÒUÞÓ ^ J n G :c^ K : Z?H <A: GQK%J : H : G = [ n: ZbHKZbHKcZ aSa;%: O : G = jï; JH[ ^&¥ H LU:; HZ V ZbH < K ; j6GUH ­ ë H L%; JHKG : GQ[ l ë lÈ= K Y ZbHG åö3LQ;QY J > H DB=^ G v%n G L K6ZbH </­ä ÒUÞÓ BBB

^ K = KG > G&HK QÎ%¥ H LU:; HZ V ZbH <Î GQK ­PÕ ë × ä ÒUÞÓ ^ J n G :c^ K : Z?H <A: GQK%J : H : G = [ n: ZbHKZbHKcZ aSa;%: O : G = jï; JH[ ^&¥ H LU:; HZ V ZbH < K ; j6GUH ­ ë H L%; JHKG : GQ[ l ë lÈ= K Y ZbHG åö3LQ;QY J > H DB=^ G v%n G L K6ZbH </­lÕ?lzBBQB

sT G v Z L%=YP::;%:^Pa; JH[© Î&¥ HK =L K6Z LP::;&:6^Ta; JQH[= 5 :G@Y%RdL E 7B;`78>RL>78S+T 5 ;$k>7G7 5 7GNM'._N;F 5 7O&¼V 5 7G+: 5 78e7 5 5 e%:G7 5 M'

78, ))!"XV$RW 5 R$:87 5 +787 5)5 5 7G78+RBV 5 Ea5 : 5 º+eä E L>78; 5 e E8E JeT 5 pX:G>7GW<'eMP+7URWæ 5 e%: 5 pX+pX1 â 7GRMKVWi E E 'e7 5 e'_>S+T 5 ¦ >H:U#¦ 5 Øe 5 ¦ >U9LÍU9I1C»? EGE E +Re; 5 >7G7 5]0:G7U:8; 5 >W ))!"») E 'e+7 5 e._NS>T 5 ]0¦ +.:8ze 5 W) E W 5 : 5 º+eÌV 5 R E *vVte 5 ¦ NU9U9I1C\?de%:8T 5à5 5 e%:G7 5 M'1 5 MH:U7U ¼ü #YR- 5 e EG5 W< E8E : 5 º+eBC?dWÙ>78M^]78¦ >7 â 1>M[Y%R0:G>e9W 5%E ;$RL E(5 R-W< E W<+e E +e E ;$)+787 5 VtW< E YR) 5 e E .%W 5E RWi78>RL>78S+T 5 ;$>Y%R;C·»M.]>W ;$ E8EG5 VP 5 ;$>W 5E M.:G+7U7 5 e 5E8E5 W<]+: 5 ; 5 o6 ³>­DM?C;$W 5 ; 5 Y%RäeT 5E *vW +W<H:8'; E W<+e E +e E ;$ E :8.e%:U E 7U-RW W< E W 5 >7G7 5 C f 7U EGEG5 V;$+1+W 5E 78+ E :G7U76Y%RMP] 5 : 5 º+ez 5 7878+e%:G(YRLe; 5 RWi3W<>e E >W ](+W<.:GK;0 E ¯+W<.:G'7^RWi)e 5 1)W)>e E >W E JM.RW : 5 º>eͦ 5 7» 5 e E RW<'; 5 C D >7 â W 5E V$+e%:UT 5 VeY%R+M'W<]: 5 ; 5 V 5 :G78>U9 5 ;$b+¯$;$. 5

°& iS_f1Z6\7S«Z)T7db[7Sh[ _OZ)7_&S&ñ_i=i^_ 'X `\[XS ^&di_ dXd\d7óXó WXW¡b[`d_f:_[7S^[MÌf:_&d\a7__&d=d\iE R E :G.:GR â ; 5 5 7

b S7\&ö ¢h=^iS dXd7\&d

° iS_fNZ6\7S«ZT7d:b[7Sh[ _eZ 7_S=ñ_7iXi^7_ '& h&^iS d=d\&d¤¢S\&ö

Page 123: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G DDD §¨X¯ D © @i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÁxÔZÕ^Ü^ÔÜ Ð¿@Ò)Ô`ÏÊÝí¿¤¿@Õ^ÕÏ`ÓÓ×*Ò0ÔLð^Ô[×+Î`Ï`Ó """

`\[7S ^di_ d=d\&d7óXó WXWb[:`d_f:_[7S^[MÌf:_d\¤a7__&dXd\iÌ? E8E (W< E Wi 78+78 ;$`R$:8.M'._N7 5 5 ev*Re%: 5 5 787G>e:86;$ E 'e7 5 e'_>S+T 5 ; 5 eT 5 p:8+78W<.eM

))!#c#e E U9Wi; E ;$>e%:G7 5 ;$ EGE -W<]+: 5 ; 5QE >7G1:8W3t]+W©L7U 5Eä5 R$:G7 5E eT 5 p:G>7GW<'e E V6'7G>W 5E M''>­prM'»+W E +R';CØ·»e%:G E VeM' E 78+W 5%E RW 5 R$:G7 5 > EG5 CB?kg$ E :8+WM'Re E : 5 º+e E Y%R E T 5 5 e E +e;$K;: 5E E 'e+7 5 e._N; 5 7G E 5 W 5 E M'I17U E prU9I1^Y%R'e'+'W« 5 WieL; 5 V 5 e E :G78R$: 5 78 E`5 R+M' EGE E Caû»>1+W 5%E V E >W)7G3Y%R3 5%EGEGâ 1+MB0 5 +78+e%:GVR$:8.M'._N­prM 5%E e 5%E 5 ev*Re%: 5%E ;$ E 'e7 5 e'_>S+T 5 Cê¤ R$:87 5%E 5 78]+WV`eT 5àE T 5 :UT 5 5 e E V` 5 EL78>>W¨>W ;$'1+7 E E^E H:8RS È E ;$H¦ >7G>e%:G E ;$>e:87 5 ; 5 7 5 7UWiV<;$>1+W 5%E +1.:8­pXM 5E CO 5 + EG5 ; 5 ¦ ûúýÈ÷ÌVyY%R3 5 ;$ E +7 R$:G'M'._N; 5 5 W 5 e 5 W<0;0MK E8E VP;$3178K­I1+MXVL 5 W 5:G' 5 ;$J1I7GK­I1>MP:8C fZ5 7`g$>W)M 5 V E (:G'1>7GW 5%E RWî7 5 78Wi3 5 W 5

`&h=^iXiS_iS¡b[7S Ò ÓÊf b'[7S^

b[7S£^¤geÑ` ÌÌ:G>7 â W 5%E RWi,Wi­,78>RL>78S+T 5 V61 E : 5 Y%R9­,RW >7G7 5 ;$+e%:87 5 ; ))!"XVa 5 EÍ5 5 e%: 5 pX+pX1 â 7GRM'ä;$> 5 E ;Ä`eT 5 ¦ 5 @+eL 5 e%:878; 5 Í E 'e+7 5 e._NS>T 5ä5 5 787G>7GKä 5U9L7 5 K;$+e%:G Ç >; 5 7¥+V$(07:8.7a;$ E8E ^: 5 º>e E +78'b¦ +.:8)b:8+e%:8:G'1I);$ E >7a7GN 5 e9>++75 R:G7 5 5 WieL; 5 e 5 eT 5 pX:G+78W<.eLM« )*¼ü XV 5 Y%R# 5 e;R_+'7GK 5 R:G7 5E +787 5E C f[5 7:Ue%: 5 V ¦ ûúý ÷-eT 5 ]@RW\ 5 W : 5 º>eb78 E 'e7 5 e'_>S+T 5 >W ))!"XCÌödW 5E ;+.g$­pXM 5 ;$6¦ 5 7U 5 e Ç 7d>W 5 R$:G7 5E : 5 º+e E V% 5 W 5 5 e%: 5 prpr1 â 78RMKVü±cVtü ýz:8CZ?de%:8T 5 V 5E eLT 5 pX:G>7GW<'e E )*HüF" ))!#c Ç >W¨ 5 W 5 W 5%E :878; 5 e 5 7 5 7UWi3oC."N

9:;%<:=?>=®BEDb®F p; Z&[ ^ K = K Y Z ^ K yr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­\ ×_ G LQ;&p G :¥Î GQK aS`tï Z :6^ K B^ K = K Y Z ^ K B: G >;%p G yÒUÞÓB JHZ ; H yu<Õd ëe ×g ^ K = KG > GUHK yua^ K = K Y Z ^ K yu< h ëikFrq p; Z&[ ^ K = KG > G&HK yr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­FuF ×Fr\ G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yÎU Û Ò%ÙU6&ÓB JHZ ; H yu<Bu: G >;Qp G yîÒbÞÓÕFr_ G LQ;&p G :¥Î GQK a © ` HG ßS G L%;%p G :¥Î GQK yQÐÍÙ%B JHZ ; H yu<B: G >;%p G yéÒUÞÓÕ ëF|d ×Fre K :¥M×Frg Í#QÍQÞ/y © Fh p=Q: [G L%YåyuaDQ ä ÎU Û Ò%ÙU6&Ó Fri ]Frk = K : ZbO ^ K = K yuaDQ ä Î& Û Ò&Ù&6&Ó

Page 124: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬""N !Í"Ii

i

i

i

i

i

i

i

""I Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

\uq ]\F n: ZbHK ^ K = K yuaDQ ä Î& Û Ò&Ù&6&Ó \u\ ]\u_ : G = [ ^ K = K yuaD% ä Î& Û Ò%Ù&6&Ó \d ]\ue : GQK%J : H ^ K = K yaDQ ä Î& Û Ò%Ù&6UÓ \ug ]\h ^ J n G :6^ K = K yuaDQ ä Î& Û Ò&Ù&6&Ó \ui ]\uk Z a6^ K = K yu<_uq ]_F a;%:6^ K = K yu<_u\ ]_u_ ä ÐÍÙ& ^ K = K Y Z ^ K ya © ä ÐÍÙ% _d ]_ue ä ÐÍ Aä Î& Û Ò&Ù&6&Ó _ug ]_h ä Î& Û Ò%Ù&6&Ó _ui ë_uk L%= K L N y9=Q:^ G v6L G n K6Z ; HzG dq ×dîF LQ; H ^ J > G è HK6Z Yçyu<Cö G öílU^ K = KG > G&HK l%Õd\ ëd_ ë

¤ R$:G7 5 > EG5 5 W<M.K+; 5 78»^78>RL>78S+T 5 ;@+787 5E ] 5 eT 5 pX:G>7GW<'eMcLCk½^W; 5%E 7 5 M.>W< E ](3R:G'M.'_>S+T 5 ; 5 »@M ¶ f ¸¶¾ C? EGE J 5 Wie; 5 ¦§_ 5 WY%RJYRLMKYR+7@>7G7 5e;$ Ç eKS+T 5 ;i1I7GK­I1> E VBY%R 5 5 7G7UÍe 5E :87I E 78.W<+'7 5E : 5 º+e E ;$ E8E ; Ç eKS+T 5 VBM'+15 · m E +R.7 5 R$:G7 5 >W<.e9 5 VP:8+e%:8e; 5 7GN 5 e9>++7(RW )& 5 R!#%$&¼C· E8E .WVØ78>+Rt+7US+T 5 ;i+787 5 VBYRi 5 ;$>7GK E >7J¦ +.:8>WÐ&¼VZeT 5E +7U­Í¦ +.:8V[ 5 E E8E (W<]+: 5 ; 5 eT 5 ] E >Y%R>7aU9LWi; 5 CZO 5 > EG5 V 5 7`g$+W<M 5 VL; 5 7 5 7UWi

`&h=^iXiS_iS¡b[7S£^g `\[iSXd=:`S '

̤ +787 5 eLb;$>+M'78S+T 5 ü±ce"`¦§_» 5 WY%R 5 · m V% E N; 5 e 5 M 55 ºI9>;<;$ /J: 5 º+e E V

5 e E ';$>7G YR 5 W<]: 5 ; 5 E +7FU9Wi; 5 ]n!#%$&V$ eT 5 HC 465 W E8EG5 VRW >7G7 55 5 7G78^e EGE 3;$NMK7US>T 5 e0;>MK7US>T 5 5E :G>7G 5 7NV 5 E RWî 5 e E :G78R$: 5 7@eT 5 ]( E L>78; 5t¯ E ;$>+M'78S+T 5 ;$zRW W<]: 5 ; 5 Cà? E8E ä7 5 M'+Wi&eT 5 78 E +e%:U E5 M.RLS+T 5E 'W<M' E :G>7G>W 5E Y%R» 5 e1.1+7@ 5 W E8E ^;¦ +.: 5 e 5 e 5%EGEG5 · m C fZ5 78]+WV%M'RWi Ed5 R$:878 E W<+M'9 5 78' E 5 ;+W E +7a¦ >H:U E e EGE JeT 5 p:8+78W<.eMV$;$b 5 78; 5 5 W 5 Y%RW 5E :G7U 5 7 5 78W<)o$C'">

Page 125: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"">/ !Í"Ioi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÁxÔZÕ^Ü^ÔÜ Ð¿@Ò)Ô`ÏÊÝí¿¤¿@Õ^ÕÏ`ÓÓ×*Ò0ÔLð^Ô[×+Î`Ï`Ó "">/

9:;%<:=?>=®BED ¬F p; Z&[ LQYQ=^^ O ; [ ¥Cyr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­\ ×_ G LQ;&p G :¥Î GQK a © ` HG ßS G L%;%p G :¥Î GQK yÎU Û Ò%ÙU6&ÓB JHZ ; H yu<Bu: G >;Qp G yîÒbÞÓöd a@t`tï Z :6^ K B > GQK%N ; [[G LQYåB JHZ ; H yu<Br: G >;%p G yîÒUÞÓöe aªS`tï Z :6^ K BLQ; H ^ K : J L K[G LQYB JQHZ ; H ya@B: G >;%p G yîÒbÞÓög a!P`tï Z :6^ K Brp=Q: [G LQYB JHZ ; H yuaQªB: G >;%p G yéÒbÞÓÕh ëi ×k K :¥M×Frq ä QÐÍÙ% FuF LQYQ=^^QY Z ^ K yua!6 Fr\ y6|Í#Í%Þ/y@Tp=Q: [G LQYåya © ä Î& Û Ò%Ù&6UÓ Fr_ yîLQ; H ^ K : J L K[G LQYçyuaª F|d y> GQK&N ; [[G LQYåyua@6 Fre ä QÐÍÙ% Frg ëFh L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Fri ×Frk LQ; H ^ J > G è HK6Z Yçyu<Cö G öílUL%YQ=^^ O ; [ ¥l%Õ\uq ë\F ë ·`Y%R78:G'7UW 5E[5 ¦ ûúýÈ÷¬; 5%E 5 ev*Re%: 5E ; E 'e7 5 e'_>S+T 5 R$:8.M'._N; 5%E ;$+e%:87 5 ;$/L .

'Cd·^M']+Wî;$ E8E5 V%78:8.7UW 5%E@5 ¦ >U9)U9I1 ; 5 5 ev*Re%: 5 ;$ E 'e+7 5 e._NS>T 5 ;)U9W<;!"%$¼VZ 5 E ]iW3R.: 5 5 W3RWÿY%RiRW W<]+: 5 ; 5 :G>7GW<'e):8W3t]+W´ 5 W RW ¦ NU9U9I1C m ^ E8EG55 5 787G>7>V E8E a¦ NU9bU9I1Jù; 5 W<]: 5 ; 5 ú E >78­(+eL 5 e%:878; 5 e E .e+7 5 e'_>S>T 5VØW< E W 5 Y%R#;+ 5 E ;;$>+M'78S+T 5 ; 5 W<]+: 5 ; 5 1>e9äRW 5 R$:87 5 W<]: 5 ; 5 V 5 · m 5 e$pE ';$>7878­<Y%R 5 ¦ >U9#U9LI1+eL 5 e%:878; 5 :G+78W<.e 5 R#;$ Ç eKS+T 5 ;#+M' EGE beT 5 U9Wi78­e 5 1W<>e:8 5 W<]: 5 ; 5 !#±$'&HC l EGEG5)5 > E 5 ebRW¨;$ E E :87G e)7GNRt+7US>T 5 ;(>7G7 5E CO 5 g$+W<M 5 ;$

`&h=^iXiS_iS7_£b[7SÊf '

Ìb[7SÊf ~ '

ÌÌ?dM'.W<'ee; 5(5 ¦ >U9(U9I1@; 5 5 ev*Re%: 5 ;$ E 'e7 5 e'_>S+T 5 ;$¥!"±$'&¼V EGE @W<]: 5 ; 5

E `7GNRt+7UJ 5 +e 5 e%:G7U7 5 : 5 º+eäü±ZV%;$+e%:G7 5 ;$nL'VRWiJe 5 1U9Wi;»]`¦ >H:U!"%$¼VLY%RJ'78­) 5 7G78:UW<+e%:8 78> 5 e9N>7 5 W<]: 5 ; 5¶>K¹ C m E 'e+7 5 e._NS>T 5 ¦ 5%EGE ¦ +.:8i 5 W 5 ¦ NU9iU9I1V 5 · m ;$NK;$'7GK<YRbi;$>+M'78S+T 5 ;iMK E8E :8+78W<.e 5 RzJ: 5 ; 5i578 E :8e%:8(;<>e%:G7U; E >7GK0.e 5 7U; 5 C

Page 126: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G DD?ª §¨X¯ D © «i

i

i

i

i

i

i

i

""> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

·^M'K+eL; 5 5 7U6a78+78a;$@R$:G'M.'_>7 5 5 ev*Re%: 5 ;$ E .e+7 5 e'_>S>T 5 ; 5 eT 5 pX:G+78W<.eLMe EU9W<; E ;+e%:G7 5 ;$>M.V Ç >W 5E 5 W E ;$ Ç e'S È E W 5%E :878; E e 5 7 5 7UWio$Cª J78 5%E;$>W< E eT 5 p:8+78W<.e E ù E T 5 W 5E :G7U; 5%E t+e EB5%E eT 5 p:8+78W<.e E YRk¦ 5 7UW W 5 ;$ Ç >; 5%E ú

9:;%<:=?>=®B © sF p; Z&[ > GQK%N ; [%O ; [ ¥y G LQ;&p G :¥Î GQK < K%N :;&ß6^X9=Q:6^ G 6%ïQv6L G n KZ ; H ­\ ×_ G LQ;&p G :¥Î GQK aS` H6G ßt G L%;%p G :¥Î GQK yQ9ÍQÓB JHZ ; H yu<Õd ëe ×g K :¥M×h ä 9ÍQQÓ n6=Q:=?>Y Z ^ K yua ä 9Í%Ó ^ K = KG > GUHK yu<i ëk L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Frq ×FuF LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl> GQK%N ; [&O ; [ ¥l&ÕFr\ ëFr_ ëF|dFre p; Z&[ = K : ZbO ^ K = K yr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­Frg ×Fh G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yuÍÎÎÒ%Ñ%ÓB JHZ ; H yu<ÕFri ëFrk ×\uq K :¥M×\F Y&p=Y J6G yuaDQ ä ÍÎÎÒ%Ñ%Ó y =Y;L G v%n: G ^^ Z ; H yu< ]üG v%n: G ^^ Z ; H yu<Q\u\ ë\u_ L%= K L N y9=Q:^ G v6L G n K6Z ; HzG \d ×\ue LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl?= K : ZbO ^ K = K l%Õ\ug ë\h ë\ui\uk p; Z&[ ^ J n G :^ K = K yr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­_uq ×_F G LQ;&p G :¥Î GQK aS` H6G ßt G L%;%p G :¥Î GQK yQ9ÍQÓB JHZ ; H yu<Õ_u\ ë_u_ ×_d K :¥M×_ue ä ÎUè9 Aä 9ÍQQÓ =Q:<Y Z ^ K ya ä 9Í%Ó _ug ë_h L%= K L N y9=Q:^ G v6L G n K6Z ; HzG _ui ×_uk LQ; H ^ J > G è HK6Z Yçyu<Cö G öílU^ J n G :6^ K = K l%Õdq ëdîF ëd\d_ p; Z&[MZ a6^ K = K y G L%;%p G :¥Î GQK < K%N :;&ß^T9=Q:^ G 6%ï%v6L G n K6Z ; H ­dud ×de G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yQ9ÍQÓB JHZ ; H yu<ödg a © ` HG ßS G L%;%p G :¥Î GQK yQ6Î&B JHZ ; H yu<Õdh ëdi ×

Page 127: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬""No !Í"Iqi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÁxÔZÕ^Ü^ÔÜ Ð¿@Ò)Ô`ÏÊÝí¿¤¿@Õ^ÕÏ`ÓÓ×*Ò0ÔLð^Ô[×+Î`Ï`Ó ""No

dk K :¥M×euq ä Ò&ï Sä Q9ÍQÓ SG v%n: G ^^ Z ; H yuaDQ ä 9ÍQÓ ^ K = KG > G&HK yua © eF 6Í#ÍQÞ/yEDQ ä 6Î& ^ K = KG > G&HK y< eu\ ëeu_ L%= K L N y9=Q:^ G v6L G n K6Z ; HzG ed ×eue LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl Z a6^ K = K l%Õeug ëeh ëeuieukguq p; Z&[ a;%:6^ K = K y G LQ;%p G :Q¥Î GQK < K%N :;&ß^T9=%:6^ G 6&ïQv6L G n K6Z ; H ­gF ×gu\ G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yÎU Û Ò%ÙU6&ÓB JHZ ; H yu<ögu_ a © ` HG ßS G L%;%p G :¥Î GQK yQ9ÍQÓB JHZ ; H yu<Õgd ëgue ×gug K :¥M×gh ä ï& Sä 9ÍQQÓ = K : ZbO ^ K = K yuaDQ ä ÎU Û Ò%ÙU6&Ó gui G v%n: G ^^ Z ; H yuaD% ä Î& Û Ò%Ù&6&Ó guk = K : ZbO ^ K = K yua © ä Q9ÍQÓ hq ^ K = KG > G&HK yu<hF ëh\ L%= K L N y9=Q:^ G v6L G n K6Z ; HzG h_ ×hrd LQ; H ^ J > G è HK6Z Yçyu<Cö G öíla;%:6^ K = K l%Õhe ëhg ëhuhhi p; Z&[ =Y;L G v%n: G ^Q^ Z ; H yr G LQ;%p G :¥Î G%K < K%N :;&ß^X9=Q:6^ G %ïQv6L G n K6Z ; H ­hk ×iuq G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yQ9ÍQÓB JHZ ; H yu<öiF a © ` HG ßS G L%;%p G :¥Î GQK yQÐÍÙQB JQHZ ; H y<Õiu\ ëiu_ ×id ä Ó yiue 6Í#ÍQÞCy © ä ÒUÞQÓ Aä 9ÍQÓ =Q:<Y Z ^ K yuaD% ä 9ÍQQÓ ò]iug y ä ÒbÓ ò]ðä Î%QÒUÓÑ ò](ä ÒUÞQÓ ih y ä ÐQÍÙ AG v%n: G ^^ Z ; H yua © ä ÐQÍÙ iui iuk ë

Oò.W< 5 7G:8e:8 5 E +7817`Y%RbY%R>M. E eT 5 p:8+78W)'e E Y%Rb++.:8Wî 5 W 5 7GRW<+e%: 5)51M 5 7 |CXC ;$+1+Wÿ E8E 778 5%E W<]: 5 ; 5%E Y%R E T 5 U9Wi; 5%E ;$+e%:87 5 ;$>M. E :UW3t]+W E8E ^1M 5 7NV7UY%R» EGE E W)]+: 5 ; 5%E Wi E 'e%:G+78e 5%E eT 5 ¦§S+W:UW3t]+W 78>+Rt+7US+T 5 ;$+787 5E C[=» E8E E eT 5 p:8+78W)'e E V%:G+W 5%E e<;$ Ç e'S>T 5 ;$178'­I1+ E ;>MK7US È E 5 W 5

9:;%<:=?>=®B © DF G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yQ9ÍQÓB JHZ ; H yu<ö\ a © ` HG ßS G L%;%p G :¥Î GQK yQÐÍÙQB JQHZ ; H y<Õ

Page 128: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G DDb« §¨X¯ D © ®i

i

i

i

i

i

i

i

""N Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

=^ EGE &;$NMK7US>T 5 V 5E 1IM 5 7G E ; E 178K­I1+ E Å º µÅ ¹ E T 5 :UW3t]+W |CXC VØ 5 E >M' EE +7UT 5 R:G'M.'_>; E 5 W 5 7GRW<+e%: 5%E 78 5 R$:878 E U9Wi; E C fZ5 7J E8EG5 V E 5 M'+.: 5 7 5 M.97&+M' EGE ·MD o ÆDË=<7;DX? VB1+7U­&Y%R 5 W<]: 5 ; 5c 78: 5 7GeL @CXC,E 5 7GRW<+e%: 5 ;$+e%:878;b:UW0L]>W¨ 5 e%:G'1+7a EGE J1IM 5 7>C?^V$ 5 7VHM.:G'W 5 V$RW7 5 M.>W<37UI1VY%R E R78'Rz 5 W37GNRt+7US>T 5 ;$J>7G7 5E V 5 5 787G

Y%ReL; 5 RWîeT 5 pX:G+78W<.eLMP]U9Wi; 5 78+t:8';W<+e%:GJV 5 :878:87a;(RWî+787 5)E .e%:U­:GK 5 VeT 5 5 e E5 W<#e+e9%RW : 5 º+eBC 465 W´ E8EG5 VkU9W<; 5 e%:G'eR E +73¦ +.:8&.e; Ç eK;pW<+e%:GC,=»-e 5E8E 7UWi­:8'>VZ E8EG5 5 e%:GN#e 5 eT 5 pX:G+78W<.eLMí ¼ü 3Y%RäU9Wi . !#cCÑ? E :GV6 5 7 E RL&1+_V@ 5 ;$7 5 1 5 +73RW +787 5E 'e%:G]+:GK 5 YR E +7U­:878:8; 5E +We>e9RW : 5 º>e E >7b 5 e E RW<K; 5 Cz= 5 78: 5 7Ge 5 VË ¼ü JU9LWip 5z5 R$:G7U1>_VØ 5 7 5 + E8E5E Í78+t:GC f 78 EG5 M'R+ 5 e7b EGE Í7 5 M.>WiV[:G>W 5%E ;.1+7 E Eb5 PS È E C-ödW 5E ; 5 :87)EG5 M'RS+T 5 ;$^¦§_+>7F 5 W Y%R E »t+M 5 W)>e 5E RW: 5 º>eÍ+ E 3 5 W 3+e%:G7U;be0U9LWi;3;$ ))!#cV+e%:UT 5 >M.(]J 5 e E RW<K; 5 V 5 Y%R eLT 5)5 5 787G ;b¦ 5 7GWi0 5 WY%R(+M'(¦ 5 y;$ Ç eK; 5 5 7@>R E ; 5 »@M ¶ f ¸¶¾ CI· E8E 'WVW 5 ;$ Ç +W 5E Wi E RWiJ1+_ 5 eT 5 pX:G>7GW<'eM: !#c 5 $:8+W 5Ea5 7 5 78Wi0o$CªC

9:;%<:=?>=®B ©©F p; Z&[ ^ K = KG > G&HK yr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­\ ×_ G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yÎU Û Ò%ÙU6&ÓB JHZ ; H yu<Bu: G >;Qp G yîÒbÞÓÕd G LQ;&p G :¥Î GQK a © ` HG ßS G L%;%p G :¥Î GQK yQÐÍÙ%B JHZ ; H yu<B: G >;%p G yéÒUÞÓÕe ëg ×h K :¥M×i Í#QÍQÞ/y ä ÒUÞÓ ä ÒbÞÓ k p=Q: [G L%YåyuaDQ ä ÎU Û Ò%ÙU6&Ó Frq ]FuF Í#QÍQÞ/yD%Fr\ = K : ZbO ^ K = K yuaDQ ä Î& Û Ò&Ù&6&Ó Fr_ ]F|d p=Q: [G L%YåyuaDQ ä ÎU Û Ò%ÙU6&Ó Fre ]Frg n: ZbHK ^ K = K yuaDQ ä Î& Û Ò&Ù&6&Ó Fh ]Fri : G = [ ^ K = K yuaD% ä Î& Û Ò%Ù&6&Ó Frk ]\uq : GQK%J : H ^ K = K yaDQ ä Î& Û Ò%Ù&6UÓ \F ]\u\ ^ J n G :6^ K = K yuaDQ ä Î& Û Ò&Ù&6&Ó \u_ ]\d Z a6^ K = K yu<\ue ]\ug a;%:6^ K = K yu<\h ]\ui ä ÐÍÙ& ^ K = K Y Z ^ K ya © ä ÐÍÙ% \uk ]_uq ä ÐÍ Aä Î& Û Ò&Ù&6&Ó _F ]_u\ ä Î& Û Ò%Ù&6&Ó _u_ ë_d L%= K L N y9=Q:^ G v6L G n K6Z ; HzG

Page 129: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬""Iq- !Í"Ii

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÁxÔZÕ^Ü^ÔÜ Ð¿@Ò)Ô`ÏÊÝí¿¤¿@Õ^ÕÏ`ÓÓ×*Ò0ÔLð^Ô[×+Î`Ï`Ó ""Iq

_ue ×_ug LQ; H ^ J > G è HK6Z Yçyu<Cö G öílU^ K = KG > G&HK l%Õ_h ë_ui ë

5.4 Arquivos-fonte do compiladorök+78+W 5E V E >R'7NVM.Re E g$>W)M 5%E ;)7GNRt+7US>T 5 ;(>7G7 5E 78>M''_>;bt+M 5 e 5E8E5 · m C= 5 ;.78:8¯78 5 !19L V 5 M'+.: 5 7@ 5 ;$`>e 5 e:8787 5E 78Y%R'1 5%E 9:ü!oá8V´á8VL .'"á8V:!#%$&»á8V:!#%$"á8V:»á8V=9!l¼ü á8Vc ))!"9á8V !#c · á8V üG 9á8Ä8 9: üG¯á8VÌRv 5E e 5 W) E .eL;$'>W Y%R EJ5%E W<]+: 5 ; 5E Y%R)¦§_>+W ä78>+R$pt+7US+T 5 ; 5E >7G7 5EJE .e%:U­:GK 5%E e>M. E 5 e:8'; 5E Czû E :G E V[.78+W 5E eM. E 7t+e E :G7I E C¤78.W<>.7 5 ]0#7GNRt+7US>T 5 ¦ +.:8ÍL>M 5 W<]: 5 ; 5 9ü!)C¤7 5 78Wii E >7 R:G'M.'_>; 5 Vv­ 5 W<+e%:8; 5 eL E >S>T 5 o$C /V] 5iE +R.e%:G%ù§78Y%R'1 5 9ü!á8tú`&h=^iXiS_iS¡ÌS_ SS&Q^&S¼b=i[\&S¡^ `&h=^iXi `&h=^iXiS_iS ~ Ì?kg$>+R$:8e; 5»5 5 W).MK; 5 7

X++E5 7G@ E8E 67 5 7UWiV 5 $:8+W 5EÌ5 E +R.e%:8@78 E RMH:U; 5

`^T ©X^&]7^T^&di_&dªZh=^[7£aX_gX7Kd_`\&]7_&d ZXZWi=i^fTch&_i&WT7d7\&Xd7^fNZ 7óXó ² \fTbh=_d_di7b\[ Z ~X= _X^&ab[7¤&d\f¦bh=_ ZXZ6WiXi^fTch=_i&WT7d\&&d^fNZ ZZZXX T7d7\&Xd^f =X

° [:`d\[bb[X ° _S«UÄ`&h=^iXi± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VUõiS=d:b[7K7`\[:iS7^[7S \X[a¡i [:`d\[:bb[7ÊS\&ö_[VU`&h=^i=i

[:`\X[7S_d_=a S_ S ^S¦hb'[_ Ñ`\7hf[ Z_^i_ T_`S:b'[7\[_\=eU

õ \ `h=^iXi Z=ZXZ

a _ b=`^7h dXd\di7\X[7ac°& [7S^`S:b=` dXd\&diX\X[a

Page 130: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ X X Xi

i

i

i

i

i

i

i

""N Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

= 5 :G»Y%R» 5 78JJ78>RL>78S+T 5 ]`¦ >H:Ub;$^Wie+'78;$>Y%R;V`: 5 ; 5%E Y%R>M. E : 5 º>e E+e%:87G» E ;$ Ç eKS È E ;$(MK E8E E ¦ 5 7UW;$ E 78+_N; 5%E E ;$R E +M' EGE E ¦ 5 7UWeM. E ; E ;Wie>.7U0 E L>78;C@¤ 7G¯Ig$'W 5 ] 5 7 5 7UWi(* üG )á8V$>W¨Y%R)7GNRt+7US>T 5 ]J¦ >H:U;$>e:87 5 ; 5 W<]: 5 ; 5 üG XC`&h=^iXiS_iS¡b[7S Ò ÓÊf b'[7S^ b[7S¤gªÑ ` b[7Sa

g¦¢=¢¦`ó£a a«Ò ¢ Ëa«Ò ¢=¢¼`ó¡a ÌÌ`&h=^iXiS_iS ~ Ìf 7U0 EGE J7 5 7UWiV 5 · m 7 5 ;$R_ 5iE >R'e%:GJ78 E RMH:U; 5

`^T ©X^&]7^T^&di_&dªZh=^[7£aX_gX7Kd_`\&]7_&d ZXZWi=i^fTch&_i&W=^&S=d:bgiS7^&S«Z 7óXó ² \fTbh=_d_di7b\[ Z ~X= _X^&ab[7¤&d\f¦bh=_ ZXZ6WiXi^fTch=_i&W&^&SXd:bg:iS7^SªZ ZZ£ZXX ^&S=d:bg:iS7^&S XX

° [:`d\[bb[X ° _S«U ̦i=T_&diSXdb[7¤d_&S&7d=[d_X^&a¤TXd:b[7Sb'[7S¼b£X\&d¦`&h=^iXig7d7_X^&ö± =[\&d:b'[7S\&ö7_[VU,¢X¢± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VU,ó± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò \X[a¡i [:`d\[:bb[7ÊS\&ö_[VU

[:`\X[7S_d_=a ¢X¢ ^&S¡hb[_ Ñ`\7hf[eZ_^i_ T_`S:b'[7\[_\=eU

Ò Z=ZXZ Z Z=ZXZ ¢ Z=ZXZõ ±Q$ M^ ò Z=ZXZ

XX h]7^7h_ X=° [:`d\[bb[X ° _S«U(¢ Ì¡¡iXT_diSXd:b[X¤d_&S=7d&[d_X^=aT7d:b'[7Sb'[7S¼b£X\&d¦`&h=^iXig7d7_X^&ö± =[\&d:b'[7S\&ö7_[VU

Page 131: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬""> !Í"N/"i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÁxÔZÕ^Ü^ÔÜ Ð¿@Ò)Ô`ÏÊÝí¿¤¿@Õ^ÕÏ`ÓÓ×*Ò0ÔLð^Ô[×+Î`Ï`Ó "">

\X[a¡i [:`d\[:bb[7ÊS\&ö_[VU,¢ [:`\X[7S_d_=a ^&S¦hb[_ Ñð`\7hf[ Z_^i_ T_`S:b'[7\[_\=eU

Ó Z=ZXZ c Z=ZXZ õ Z=ZXZ ¢=¢ ZXZXZ õ¢ ZXZXZ ¢ ZXZXZ ¢ ZXZXZ ó Z=ZXZ Z=ZXZ Z=ZXZ W Z=ZXZ ý Z=ZXZ

XX h]7^7h_ X=° [:`d\[bb[X ° _S«U(¢ Ì¡¡iXT_diSXd:b[X¤d_&S=7d&[d_X^=aT7d:b'[7Sb'[7S¼b£X\&d¦`&h=^iXig7d7_X^&ö± =[\&d:b'[7S\&ö7_[VU ± =[\&d:b'[7S\&ö7_[VU,¢X¢± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VU,ó± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò \X[a¡i [:`d\[:bb[7ÊS\&ö_[VU

[:`\X[7S_d_=a ^&S¦hb[_ Ñð`\7hf[ Z_^i_ T_`S:b'[7\[_\=eU Ó Z=ZXZ c Z=ZXZ õ Z=ZXZ ¢=¢ ZXZXZ õ¢ ZXZXZ ¢ ZXZXZ ¢ ZXZXZ ó Z=ZXZ Z=ZXZ Z=ZXZ W Z=ZXZ ý Z=ZXZ

XX ^&S=d:bg:iS7^&S XX° [:`d\[bb[X ° _S«U ̦i=T_&diSXdb[7¤d_&S&7d=[d_X^&a¤TXd:b[7Sb'[7S¼b£X\&d¦`&h=^iXig7d7_X^&ö \X[a¡i [:`d\[:bb[7ÊS\&ö_[VU

a _ b=`^7h dXd\di7\X[7a!°& [7S^`S:b=` dXd\&diX\X[a

Page 132: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ ~X X X~i

i

i

i

i

i

i

i

"N Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

=^ EGE z> EG5 V 5 78'W)>.7 5 +787 5 VkY%RÍ]ä E R E :G.:GRKS+T 5 ; 5-E 'eMa;$z:G78.R'S>T 5 +¨t+M 5;$0.RMK;;b7G>M' 5 eM«+¥+ V¦ 5 Z7GNRt+7U; 5 t+M 5 üG XVt'e 5 7Ue; 5i5%E : 5 º+e E :G] 5 5 e%: 5 pX+pX1 â 7GRM'0Y%Rb;$+M''W).:8 5 5 WieL; 5 Ck= 5 :GbY%R E b)7GNRt+7US>T 5 :G'1 E8E (R:G'M.'_>; 5RW­ ¦ ûúýÈ÷& 5 W 5^E 'e7 5 e._N; 5 7>VL7U78'6e 5 K;$+e%:8 Ç >; 5 7Vo0 5 R$:G7 5 +787 5`E +78'a 5 e:U; 5 C¤ E +Re; 5 +787 5 ](+eL 5 e%:878; 5 ;$>e:87 5 ;$l55JJ378>+Rt+7US+T 5 ]»¦ >H:U3 5 7a EGE »W< E W 5eT 5 pX:G+78W<.eLMXV 5 e E RW)'e; 5i5%E : 5 º>e E :8](+ C6? 5 :G+7U>.7 5 +787 5 ]3+e 5 e%:G7U; 5 ;$>e%:G7 5 ;$55+VZWi E 78>+Rt+7US+T 5 :8+W Y%R E +7¦ >H:U;$+e%:87 5 ;$¯55zÍ;$> 5 E +W üG XC·^t E 7^; E8E5 V$RWi"HeK+)W<+e E +W]>W<H:8';<L7U3 EGE J+787 5 V%78S+ E«J MH:8+7US+T 5 ¦ >H:Ue 5 W<]: 5 ; 5 o6 ³>­DM?C C?ò7U 5 7 5 7UWi(89UüG¯á8VY%R]JW 5E :G7U; 5 E >R'7NV

`&h=^iXiS_iS¡b[7S Ò ÓÊf b'[7S^ b[7S¤gªÑ ` b[7Sa

b ^óg¦õ ` `¤¢£^eZ Ñp^¦ gªÑ`¡ a 7\&d ^¢=¢X¢ Ë ^¢£^ó Z Ì

Ì`&h=^iXiS_iS ~ Ì:G>W 5E E >R'e%:GJg$NRS>T 5

`^T ©X^&]7^T^&di_&dªZh=^[7£aX_gX7Kd_`\&]7_&d ZXZWi=i^fTch&_i&W=_ T7d_i=iXb\[ªZ 7óXó ² \fTbh=_d_di7b\[ Z ~X= _X^&ab[7¤&d\f¦bh=_ ZXZ6WiXi^fTch=_i&W&_ T7dX_iXiXb\[VZ ZZ£ZXX _ T7d_iXiXb\[ X=

° [:`d\[bb[X ° _S«U Ì iXT_diSXd:b[X¤d_&S=7d&[d_X^=aT7d:b'[7Sb'[7S¼b£X\&d¦`&h=^iXig7d7_X^&ö± =[\&d:b'[7S\&ö7_[VU ± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò \X[a¡i [:`d\[:bb[7ÊS\&ö_[VU

[:`\X[7S_d_=a ^&S¦hb[_ Ñð`\7hf[ eZ_^i_ T_`S:b'[7\[_\=eU

õb'[7SK`\[:iS^[XS Z=ZXZõiSXd:b[7E`\[:iS^[7S ZXZ=Z [=chXh ZXZ=Z

Page 133: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ ~: X Xi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÁxÔZÕ^Ü^ÔÜ Ð¿@Ò)Ô`ÏÊÝí¿¤¿@Õ^ÕÏ`ÓÓ×*Ò0ÔLð^Ô[×+Î`Ï`Ó "I$"

õ ±Q$ M^ ò Z=ZXZ Z=ZXZ ó Z=ZXZ Z=ZXZ

XX _ T7d_iXiXb\[ X=° [:`d\[bb[X ° _S«U¶[XchXh

XX h]7^7h_ X=° [:`d\[bb[X ° _S«U¶[XchXh

XX _ T7d_iXiXb\[ X=° [:`d\[bb[X ° _S«U ̦i=T_&diSXdb[7¤d_&S&7d=[d_X^&a¤TXd:b[7Sb'[7S¼b£X\&d¦`&h=^iXig7d7_X^&ö± =[\&d:b'[7S\&ö7_[VU ± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VUѱ =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VUı =[\&d:b'[7S\&ö7_[VU ± =[\&d:b'[7S\&ö7_[VUõ ±$ M^ ò ± =[\&d:b'[7S\&ö7_[VU \X[a¡i [:`d\[:bb[7ÊS\&ö_[VU

[:`\X[7S_d_=a ^&S¦hb[_ Ñð`\7hf[ Z_^i_ T_`S:b'[7\[_\=eUõb'[7SK`\[:iS^[XS Z=ZXZõiSXd:b[7E`\[:iS^[7S ZXZ=Z [=chXh ZXZ=Zõ ±Q$ M^ ò Z=ZXZ Z=ZXZ ó Z=ZXZ Z=ZXZ

XX _ T7d_iXiXb\[ X=° [:`d\[bb[X ° _S«U ̦i=T_&diSXdb[7¤d_&S&7d=[d_X^&a¤TXd:b[7Sb'[7S¼b£X\&d¦`&h=^iXig7d7_X^&ö± =[\&d:b'[7S\&ö7_[VU,¢± =[\&d:b'[7S\&ö7_[VUõb[XSK`\[iS^[7S \X[a¡i [:`d\[:bb[7ÊS\&ö_[VU

[:`\X[7S_d_=a ¢ ^&S¦hb[_ Ñð`\7hf[ Z_^i_ T_`S:b'[7\[_\=eUõb'[7SK`\[:iS^[XS Z=ZXZõiSXd:b[7E`\[:iS^[7S ZXZ=Z [=chXh ZXZ=Zõ ±Q$ M^ ò Z=ZXZ Z=ZXZ

Page 134: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"I !Í"N/i

i

i

i

i

i

i

i

"N Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

ó Z=ZXZ Z=ZXZ

a _ b=`^7h dXd\di7\X[7a!°& [7S^`S:b=` dXd\&diX\X[a= 5 78.W<+'7 5 +787 5 Vb78>RL>78S+T 5 ]»¦ >H:U3e 5 7GWiM.W<+e%:8» 5 7y89 üGLV 5 >e 5 e%:G7U7

RW E .eL7 5 e'_>; 5 7NVLY%R)] 5 ¦ >U9z7I>e:8 E E C(°%­ 5äE >ReL; 5 >7G7 5 ]0+e 5 e%:G7U; 5 e 5 W<]+p: 5 ; 5 89 üGVtU9Wi; 5 ;$3;$>e:87 5 ; 5 *ü¼ü VPY%RV 5 7 E R<1+_V E :8­i;$>e%:G7 5 ;bRWiU9W<;#;$(55) 5 R$:878#;p89UüGCJ= 5 :G0Y%R)ÍU9Wi;i;$55+VO*ü¼ü »)U9W<;bWi E 'e:8+78e);$"89 üG E T 5 ¦ +.:8 E 5 W 5 5 ev*Re%: 5 ;$ E 'e+7 5 e._NS>T 5 'RM |CXC V 5 Y%Rb'e;$K+zYRb E8E E W<]: 5 ; 5E eT 5 ;+1>W_+>7 #78>+Rt+7US+T 5 ;$3>7G7 5 VWi EE .W<M' E W<+e%:G 7 5 %7d+g>S>T 5 CØOà E8E5 Y%R W 5E :G7U E â ;; 5 · m C D e: 5 8 9: üGY%Re%: 5 55)78>>L>W« 5 W 5 78®W)+:G7 5i5 1M 5 7/c7±¼VP;$+.ge; 5 L7Ui#U9Wi;<Wi Eg:8+78e ;y89 üGÍ 7GNRt+7US>T 5 VIY%Ra]F¦ +.:8 E .eL7 5 e'_>e; 5 (>e:878;» 5 W 5 5 e%: 5 ppr1 â 78RM'Cá2 RMKY%R+7[+787 5(E .e%:U­:GK 5 ;$>e:87 5 ; M. E :8J;$a78RW<+e%: 5E V 5 W 5 e E :Gag$>W)M 5 VEG5 W<+e%:G E >7GK<:G7U:U; 5 5 7( E8E iU9Wi;iWi E g:8+78eC»= 5 :8+7U+'7 5 +787 5 VLi78>+RL>78pS+T 5 ]»¦ +.:83:8W0L]>W 5 7¥89 üGV 5 e E RW<'e; 535%E : 5 º+e E :8] U9L7 5 5 e%: 5 prpr1 â 78RM';$>e:87 5 ; 5 5 Wie; 5 ý C?^VZ 5 7nHM.:G'W 5 V Ç >& E R E :8T 5 5 M'+.: 5 7<;$äM''>7 5 e 5E8EG5 · m 5 Wÿ7GNRt+7US>T 5

;$#>7G7 5E 5 7 5 78W< +ü±.6 .) ü±cÍüG"á8VkY%Ri:UW3t]+W E #+e 5 e%:G7Ue 5 ;$'78:G¯7G 5!19LbYR ¦ 5 BR$:8.M'._N; 5 e 5 > â :GRM 5 <7U);$+W 5 e E :8787a)R$:8.M''_>S>T 5 ; 5 · m C

Page 135: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"I/ !Í"N/oi

i

i

i

i

i

i

i

Capítulo 6

Geração da ÁrvoreSintática

¤\· m ;$JRW« 5 W).MK; 5 7F;+1VM']+W;$JK;$+e%:8 Ç >7 E J0+e%:878;b¦ 5 7Ge>K;0L>7:8+e+5 R&eT 5J M'.eR+W ;$ E *v;#)78+ 5 7G:87 5E 5%EGEGâ 1+ E >7G7 5E g$ E :G>e%:G E VP7 5 ;R_+'7( 5 W 5E â ;#RWiz7G>78 E +e%:8S+T 5 ; 5 7 5 78W<ÍYR0'78­ E >7G1'7»78zY%R) E ¦§ E E E R+ E8E '1 E ; 5 5 W<.MK; 5 7` 5E8E W E +7»+g$>R:8; E C@? E8E #7G>7G E >e%:8S>T 5 ]3i­781 5 7G E .e%:U­:GK+ 5 R­781 5 7G;$b;$>7G'1S>T 5 C=^ E :8(> â :GRM 5 .78+W 5E E :GR;7F E8E b¦ 5 78W<0;$(7G>7G E >e%:8S>T 5 J 5 W 5 .W<M'+W<>e:U­prM'C

l eKKM'W<+e%:G0W 5%E :8787G>W 5E`5 YR0]0RWiÍ­781 5 7G E 'e:U­:8'>#0 5 W 5 5 ;$ E >7 R E ;i7U78+78 E +e%:87`);+78.1S>T 5 ;$RWii+;$+K<;<M'.eR+WCdû + 5 E 1>7G>W 5%E 5 W 5 i;$ Ç e.pS+T 5 ; 5 · m ;)M.'eRL>W

X++;$+1 E +7`MH:8+7U;07U)YRV 5 eM' E 7 5 7 5 7UWi0;$

+e%:878;V$ 5 e E :G78R<)­7G1 5 78 E .e%:U­:GK+< 5 787G E 5 e;+e%:GC

6.1 O que é a árvore sintáticaû(; E RWià>;$>'¹ Y%Rt+7G:G+eL J M''eR>W »RWi¬¹JA 4 » Y%R&;$ Ç e& EGE M'.eR+WVy78z.eL;$'>7Y%R EE T 5 E 7 5 ;RS È E Y%Ri;$>1+W E >7JM''>; E L7UÍ+7U7 E8E »+;$+KVI 5 ;$+W 5E W 5E :G7U7[ E >Y=kI>eK»;F;$>7G'1S È E ;.78:U E F E ¦ 5 7GWi E[E +e%:G>eK E'e:8+78W<>;$K­78' E R E ; E :8]MK+eLS+78W 5E )>;$>'0+W¨YR E :8T 5 C f[5 7ag$+W<M 5 V$R$:8.M''_>eL; 5)7UWi­:8'>0;0M''eR>W

X++J<>;$>'

`&h=^iXiS_iS¡Ì`&h=^iXiS_iS ~ Ì:G>7 â W 5%E E +R.e%:8 E >Y=kI>eK<;$b;$>7G'1S È E ;.78:U E

"N/

Page 136: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"I, !Í"N/i

i

i

i

i

i

i

i

"N Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

〈program〉 ⇒〈classlist〉 EOF ⇒〈classdecl〉 〈classlist〉 EOF ⇒class test 〈classbody〉 〈classlist〉 EOF ⇒class test 〈classlist〉 EOF ⇒class test 〈classdecl〉 EOF ⇒class test class test2 〈classbody〉 EOF ⇒class test class test2 EOF

465 W E8E5 V E L>W 5%E +g:8W<+e%:G<Y%R E ¦ 5 7UW E 7 5 ;$RS È E M''>; E ez¦ 5 7GWiS>T 5;+;$+KC¬½»Wi¦ 5 7GWiM.:G+78e:G'1I-;$7GNM'._N70 E8E 5 t+7US+T 5 ]ä 5 7<W)> 5 ;­781 5 7GE .e%:8­:GK+Cû(;&¹JA 4 VØRWi­781 5 7G E .e%:U­:GK+]#RWi­781 5 7G<7 5 :8RM';Rv78._<:8+WE +W<78 5 eT 5 pX:G>7GW<'eMP'e'+'MB 5 W 5 78¯:8RM 5 Ck=^RWii;$>7G'1S+T 5

S ⇒ α1α2...αn

5 e¯ ; :G+W© 5 W 5àÇ M.9 5%EX e¯ E 7 5 :8RM'; 5Eα1

:8]αn

C 4 ;àRW ; E8E E e¯ E Y%R-]eT 5 pX:G+78W<.eLMB;$>1+7U­)+1+e%:GRM.W<>e:8 E >7 E R E :G.:GR â ; 5 E +7U­<78._b;RWi E R­781 5 7GJY%R78+78 E +e%:8 5 R:G7Uz;$>7G'1S>T 5 VB:G]iY%R): 5 ; 5%EJ5E e¯ E ¦ 5 M'9 EE *vW 5 W) 5E : 5%E t+e E ;$EGâ W0 5 M 5%E :G>7GW<'e E C = 5 > EG5 ;#M.K+S+T 5 ;$3RWii7 5 ;$RS>T 5 1_>'Vt; 5 :G' 5

A → λVP

;$>7G'1S+T 5 ]78+7G E >e:U;0 5 W ú e<7U'_ 5#EGâ W0 5 M 5λ 5 W 5 7G¯:GRM 5 ; 5 HeK 5 e¯ Ç M'9 5 C

f 7U 5 +g>W<M 5 V$:G>7 â W 5%E <­7G1 5 78 ;$b;$>7G'1S>T 5 ; Ç R7U)C'"C

〈program〉

〈classlist〉 ÎÏÑÐ

〈classdecl〉 〈classlist〉

Ò%ÓÕÔÖ9Ö ×yØ%Ö× 〈classbody〉 〈classdecl〉

Ù Ú Ò%ÓÕÔÖ9Ö ×yØ%Ö×Û 〈classbody〉

Ù Ú

j['R7U0C." u#?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+C

? E8E & E :G78R$:GR7U&;z­781 5 7Git+78W<H:8z78+7G E >e:U73>;+M'+W<+e%: 5 ; 5 7 5 7UWiC m RR$:8.M'._NS>T 5 t+M 5 5 W<.MK; 5 7bt+78W<H:8zY%Rz E ;$>Wi E :87G+¦§ E E >7G>W 78>M.'_>; E V[ 5 W 5eL­M' E E +Wi®e%:GK+¬&+7US+T 5 ;$¯$;$' 5 V E *vW ¦ +.:8 E ;$-¦ 5 78Wi, Ç '+e%:GC½»Wià1>_ 5 e E :G78R â ;ä­7G1 5 78 E .e%:U­:GK+V 5%E ;$+Wi E L E8E5%E ; 5 5 W<'MK; 5 7b 5 e E E :8+W >W 1 E .:87 E8E z­7G1 5 783eRWiz;:G>7GW<'e; 5 78;+WC0? EGE #:U78¦§ä 5 ; E +7(¦ >H:U;$<W<e+'7UÍW0RH: 5

Page 137: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"Io !Í"N/%qi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "Io

Wi E Ç '+e%:Gz; 5 Y%R#W<>;'e:8ÍM'+.:GR7U; 5 7 5 7UWipX¦ 5 e%:8Cz= E >S+T 5 Cª1>7G>W 5E 5 W 5 'W<M'+W<+e%:87^< 5 e E :87GRS>T 5 ;<­781 5 7G E 'e%:8­:8'>)e 5 e 5E8E5 5 W<.MK; 5 7

X++C

·\e 5%EGE <R$:G'M'._NS+T 5 ;#­781 5 7G E .e%:8­:GK+<eT 5 7GNY%R+7^Y%R: 5 ; 5E`5%E +M'+W<>e: 5E ;bRWi7 5 ;$RS+T 50E *vW 5 M 5 +; 5E e<­781 5 78C l EGEG50E 'e Ç +0Y%RJW3R.: 5%E ; 5E e¯ E ù >W>78MV%e¯ E¦ 5 M'9 E úa 5 ;$+W E +7(;$ E 5 e E K;$>78; 5E e 5 W 5 W<+e%: 5 ;$3 5 e E :G78R.7(#­781 5 7GC fZ5 7»g$>W)M 5 VY%ReL; 5 :G'1>7GW 5%E RW´e¯&Y%Rz7G>7G E >e%:8 5 eT 5 pX:G>7GW<'eMíL&¼Vd 5 ;$+W 5%E +M''W)'e75E e¯ EbÇ M'9 5%E 5 787G E 5 e;+e%:G E 5%E eT 5 pX:G>7GW<'e E Lä8 Vd 5 E E8E E e¯ E eLT 5+7G E ++e%:8W¨'e$¦ 5 7GWiS>T 5 78+M'+1e:8b78z E ;$+Wi E ¦§ E E ; 5 5 W<'M'; 5 7NC ? EGE 3:8. 5 ;$­781 5 7G)]ÍU9Wi;;$z­781 5 78 E 'e%:8­:GK+ E :878:8C f 7U 5 g$+W<M 5 e%:8+78 5 7>VÌ:G+7 â W 5E V+e%:UT 5 V<­7G1 5 78 E :878:8); Ç R7U<Cª

〈program〉

〈classlist〉

〈classdecl〉 〈classlist〉

×yØ%Ö× 〈classbody〉 〈classdecl〉

λ×yØ%Ö×Û 〈classbody〉

λ

j['R7U)Cªu#?kg$>W)M 5 ;$b­7G1 5 78 E .e%:U­:GK+) E :878:8C

6.2 Implementação da árvore sintática· 5 e E :G78RS+T 5 ;i­781 5 7G E 'e%:8­:GK+<e 5 e 5E8E5 5 W<.MK; 5 7 5 5 7G78 J W)N;$K;#Y%R3ie­M' E E .e%:8­:GK+ E a7 5 EGE C 4 ; g$>+RS+T 5 ;$aRW ; 5E W<]: 5 ; 5E E8E5 +'; 5E 5%E eLT 5 pX:G>7GW<'e E78K`RW\e¯(; ­7G1 5 78k[L>e;$R7UIde>M. 5E e¯ EBÇ M'9 5%E CØ? EGE E e¯ EBÇ M'9 5%EØE T 5 ¦ 5 7GWi; 5E L>M 5%E: 5 º>e E 78> 5 e9NK; 5E eY%R>M.6W<]: 5 ; 5 6t+M 5EØ5 R:G7 5E e¯ E 78'; 5E L>M' E U9Wi; E 5 R$:G7 5W<]: 5 ; 5E ;$eT 5 pX:G>7GW<'e E C fZ5 7`+g>W<M 5 V$RWiiU9Wi;0 5 eT 5 p:8+78W)'eMËL&Z.7U­78K7[RWe¯JY%R@:8+W 5 W 5 Ç M.9 5E +;^RWË; 5E : 5 º>e E YR6>M.a 5 e E RW)'Rzù 5 W 5 ¦ ûúý ÷aúRW 5 R:G7 5 e¯à78'; 5 t+MK,U9Wi;, 5 eT 5 pX:G+78W<.eLMnL'C· E8E 'WV`+W3 5 7UeL­M' E E 'e%:8­:8'> E v;$ E >e;$>e:8V[ 5 e E :87GRS>T 5 ;­781 5 7G E .e%:8­:GK+]<¦ >H:U;$#Hg 578)'WiV 5 R E *vV; 5E e¯ E Wi E 7 5 ¦ Re; 5%E V$>W¨;$'78>S+T 5lJ 7U'_C

4 ;äe¯;­7G1 5 78 E +7U­z78+7G E >e:U; 5 5 7RW 5 $v*: 5 °I1äYR) 5E8E Rk7G+¦ +7I+e+' E 5 R:G7 5i5 $v*+: 5E VLY%R E T 5#E >R EaÇ M'9 5E C`=^¯ E ;$.¦ +78+e%:G E»E T 5 78+78 E +e%:8; 5E 5 7 5 $v*+: 5E ;$;$.¦ +78+e%:G E +M' EGE E CF· EGE 'WäVL:G>7G>W 5E Y%R3; Ç e'7»RW<zMK E8E L7U<7G>7G E >e%:87`RW¨e¯z; 5

Page 138: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D © « §¨X¯ Db@Q®i

i

i

i

i

i

i

i

"N Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

:G' 5 9ü!)V 5 R$:878ä78RWÿe¯; 5 :G' 5 L ¼ü XV 5 R$:87878L¼Vk# E8E .W 5 7;$Ke%:GCØ? EGE E +M' EGE EkE T 5 ;>MK7U; E ;$+e%:87 5 ; 5 L 5 :G ³&<?A o ? o ÇËDXD C D 5 ; E >M' EdE T 5E Rt+M' EGE E ;$ »XD:DËAMCE½ H7D VW 5%E :878;3e 5 7 5 7UWi3C."C

9:;%<:=?>=A«CBEDF n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde = O ^ K :=L K n JQO Y Z LALQY%=^^PÑ GUH6G :=YUÓ6; [G ×g n JO Y Z LP; j6GUH n;^ ZUK6Z ; H Õhi n JO Y Z LtÑ G&H6G :=Y&Ó6; [G yu; j6G&H vk ×Frq n;^ Z&K6Z ; H `PvCÕFuF ëFr\Fr_ ë

?dMK E .W<M' E W<+e%:G3; Ç e0RWii178'­I1+M N ³ç7? VY%R378Wi_>+eV7Ui+;ie¯z;­781 5 7GVRWê: 5 º>eb;$d78¦ +7I+eLKCB? E8E k: 5 º+e E +7U­aR$:8.M'._N; 5 Y%Re; 5^5 5 W<'MK; 5 7B78> E 7 E8EG5 +'7(M.RWiz 5 e E :G78RS>T 5 ;ä­7G1 5 780 5 W 5 7 5 7UWip¦ 5 e:8C fZ5 7+g$+W<M 5 VÌY%Re; 55 5 7G78+7JRWÿ+787 5E +Wi®e%:GK 5 >W e¯;­781 5 78)]i7GN E5 'e;$K+73 5 7 5 78W<; 5 7 5 eL;$ E8E (>7G7 5)5 5 787G>RBC f 780 EGEG5 ]R$:G'M.'_>;<)1I7GK­I1>M N ³ç7? Cf 7Ui 5 e E :87GR'7^#­7G1 5 78 W 5 ;$ Ç +7G>W 5%E E ;>MK7US È E e 5 78Y%R'1 5 C v v^R$:G'M.'_>e; 5 E

¦§+.M'K;;$ E Y%R 5 °%I1 4`4 e 5Ea5 ¦ +78>C m T 5 :G7I E

•>;-W<]: 5 ; 5 5 787G E 5 e;+e%:Gä 5E eT 5 pX:G+78W<.eL E 5 ;$7G+: 5 78e73RW 1M 5 7>C¬·F:8] 5 78VP; Ç e'W 5E : 5 ; 5%E 5 W 5TÆ H CödW 5E ¦§_++7 5 W Y%R<+;ÍRW ; E8E E W<]+p: 5 ; 5E 78: 5 78e 5 e¯iY%R3 5 e E :G78R.RÌV$L>7GW<.:G'e; 5 Y%R 5 W<]: 5 ; 5 YRJ¦ +_3<U9W<; 5E8E 0R:G'M.'_>7` E8E Je¯cm

•>;F: 5 º+e 5 e E RW)K; 5 t+M 5 · m 5 ; E >7BR$:8.M'._N; 5 t+M 5E W)]+: 5 ; 5%E ; 5E eLT 5 pX:G>7GW<'e EL7UÍ 5 e E :G78R.7 5 e¯z;z­781 5 78C f 7U# EGEG5 Vt E :8):G78.R.7 5 : 5 º+e&Y%R)7GNeLi;$ Ç e'S>T 5 n =»j,78)RWi)178'­I1+MPV;+ 5 E VR:G'M.'_>­pXMK)e< 5 e E :87GRS>T 5 ; 5 e¯m

•(+;`: 5 º+e3a(+;»U9W<;^;$aRW\W<]+: 5 ; 5 ;$6RWeT 5 p:8+78W<.eMY%Ra7GN>WeL E ;$ Ç eKS È E n = jñ]i 5E8Eâ 1>Md E8E5 +'7J+¯$;$. 5 °I1Y%Ri]ig$>+R$:8; 5 VÌ7G E t>:G.p1W)>e%:GVLYRLe; 5i5 : 5 º>e]b 5 e E RW<K; 5 bY%Re; 5)5 78: 5 78e 5 ;$RWiiU9Wi;< 5W<]+: 5 ; 5i5 5 7G78 e 5 78W<M.W<>e:8)ù E >W¨Y%RJRWi<g+>S+T 5)E *v)MKeS>;%ú C

fZ5 7(g$+W<M 5 Vt7U 5 eLT 5 pX:G>7GW<'eMNo C'A³³EH7D o C V$ 5 ;$>W 5E :8+7J#;$ Ç eKS+T 5 W 5%E :878;e 5 7 5 78W<0Cª$C

9:;%<:=?>=A«CB ©F ÙYQ=^Q^UÞ G LQYUÓ6; [G LQYQ=^^ [G L%Yåy G L%;%p G :¥Î GQK < K%N :;Uß^X9=Q:^ G 6%ï%v6L G n K6Z ; H ­\ ×_ ; j6GUHMK Do` HQJ YYåö K© ` HJ YYåö K @t` HJ YQYåÕd ÙYQ=^Q^UÐ6; [ ¥%Ó6; [G L6Do` HJ YYçÕ

Page 139: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"Iq- !Í"N/i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "Iq

e ëg ×h K :¥M×i K D ` ä Ù%ÍÎÎ K© ` ä ÒbÞÓ ä Ô%ÓÞ6Î tK @S` ä ÒbÞÓ t L6Dí`ML%YQ=^^ O ; [ ¥Cyu<k ×X: GQK%J : HAH6G ßMÙY%=^^UÞ G LQY&Ó6; [G y K Dö K© ö K @ö3LDQÕ ëFrq ëFuF L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Fr\ ×Fr_ L%; H ^ J > G è HK6Z Yåyu<Cö G öílbLQYQ=^^ [G LQYl&ÕF|d : GQK%J : HAHG ßAÙY%=^^UÞ G LQY&Ó6; [G y K Dö K© ö K @ö3L6D%ÕFre ëFrg ë

·Ê EGE .eL:GR78; 5 W<]: 5 ; 5 ¦ 5 PM.:G+7U;J 5 7U(+M' ;$>1^78: 5 78e7kRW 5 $v*: 5 ;b+M' EGE C'A6³³¾­D o CE½ HD VY%R E +7U­^W 5E :G7U;»+W E +R';C 465 W 5 EGE »+M' EGE @]a;$ Ç e'; e 5 5 :G³&<:?A o ? o ÇËDXD V<;$NMK7US>T 5

bfT\&dXSi [7S^`Sb=` ò d_=_eZ ;$>1 E +7a;$K 5 eL; 5 'e â + 5 ;3+M' EGE C'A6ÁÂ V 5 R E vVe%:G E ;3;$NMK7US+T 5 ; 5 W<]: 5 ; 5>MAQ e 5 78Y%R'1 5 C v vC·ñ178K­I1+M ?º ;bMK E8E Ç É DQ V; E 78H:UJe 5 + â :GRM 5 /V%78W<_+>e 5 : 5 º+eiY%R»> EG5 R

5 W 5 ú 2 ;7 5 ;$RS>T 5 C? E8E i: 5 º+e E +7U­R$:8.M'._N; 5 5 W 5 78¦ >7I>eK;$ EGE #e¯LC·\178K­I1+M ?¹ 5 e%:G]>W 5 e 5 W<3;iMK E8E E >e; 5 ;$NMK7U;V$.e$¦ 5 7GWiS+T 5 Y%R3++7G:8W)>e%:GE +7U­ R:G'M.'_>;JL>M 5 5 W<'MK; 5 7kV 5 7@ E8E5 V:8+WYR E >7d.eLM'R â ;e 5 e¯ C'A³³¾­D o Cé½ HD C·^M' 5,E +W<+M'9e:8 5 e%:G>+ä 5 W 5 e 5 W<; E Rt+7UMK E8E CQ= 5 :8Y%R 5 W 5 E8E äe 5 W< 5 ; 5 R#eT 5 7GN>7@e0;$>+M'78S+T 5 ;3MK E8E V%] 5E8Eâ 1>MtY%R 5 1M 5 76;$ ?!¸&E *v |CXC CfZ5 7G:8e: 5 VBY%Re; 5 z­7G1 5 78 E .e%:U­:GK+z¦ 5 7(R:G'M.'_>;V 5 1M 5 7 |CXC e E8E <+W< 5 ;$<RWe¯n C'A6³³¾­D o CE½ HD 7G>78 E +e%:8)<R E I+e+');<;$NMK7US+T 5 ; E Rt+7UMK E8E C? i17GK­I1>MVo º 5 7G78 E 5 e;$b#RWÞ C'A³³º H<½ HD VYRb]378: 5 78e; 5 t+M 5 W<]: 5 ; 5

L'C 465 W E8E E +M'+W<>e: 5E VØ 5 e E :G78¯.p E )RW e¯ß C'A³³¾­D o CE½ HD e 5 +¯$;$. 5 °I1Y%R¦ 5 [ EGEG5 K; 5 5 W«ÍU9Wi;i;$L'C 465 W 5 ;$ E8E +W 5E e%:G+78 5 78W)>e%:GVtY%RM.pY%R+7^U9LWi;) 5 R:G7 5 eLT 5 pX:G>7GW<'eM 5 RäY%RM'Y%R>7a: 5 º+eä 5 ;$J:8+7^RW:G78>U9 5 ;b¯$;$' 5 E8EG5 +'; 5 E XC n E :8 5 M 5 >7 5 ¯$;$' 5 +e%:87GäU9I1 E M 5 5 t¯ E Y%RM'Y%R>70RWþ;$ E8E E+M'+W<>e: 5E C= 5 + E5 ;$J+787 5)E 'e%:8­:GK 5 V$M.]>W;$U9Wi7a07 5 :G'e3;$J78>+RL>78S+T 5 V 5 W<]: 5 ; 5 +7GK

RWà CA³³¾­D o CE½ H7D *¦§M E5 UV 5 E^5 W)]+: 5 ; 5 Y%R0U9W 5 RLk E :8­i E t+7UeL; 5 Y%RRW 5 $v*: 5 ;$ E8E b:G' 5äE *vÍ7G+: 5 78e; 5 C»=» E8E )+ E5 VL#'e$¦ 5 7GWiS>T 5 5 e%:GK;ie 5 e¯z E :87U­'e 5 7G78:UC fZ5 7kg$+W<M 5 VJ17GK­I1>M ?¹5 R<(178K­I1+M@o º 5 ;$+W:G+7@1IM 5 7 |CXC3E 5 >7G7 55 5 7G78+7(e%:G E ;$ EGE E 178'­I1+ E 78>>L>7G>W 5 1M 5 7J 5 7G78: 5 V 5 Y%R)eT 5 ¦§_ E >e%:GK; 5 VP 5 E E8E E ; 5 E +W< 5EFE T 50E +W<78»eN EGE ­78 5%E e) 5 e E :G78RS+T 5 ;$(RWá C'A6³³¾­D o CE½ HD C l E8E5 V 5 78]+WVeT 5 :G>W¨'W< 5 7:U®e+'V 5 E RWii1+_3Y%R0M'RW¨+787 5#E .e%:U­:GK 5 :G+e9 5 5 7G78'; 5 VE tp E #Y%Rä+e%:G7U;eM. E ;eT 5 5 7G78 E 5 e;$iRWÿ7 5 7UWiä1I­M.K; 5 z­781 5 7GeT 5 5 ;$+7U­ E >7R$:G'M'._N;äe E ¦§ E EE +R.e%:8 E ; 5 5 W<.MK; 5 7NC m 5 W<+e%:G<RW 7 5 7UWiE .e%:8:GK+W)>e%:Gb 5 7G78: 505 7G''e)RWi#­7G1 5 78 E .e%:U­:GK+<1­M.K;C6?dWæM'Re E + EG5E V>Wî1>_;$ä78'7GW 5E RW e¯¦§M EG5 Vk 5 ;$+W 5E 78: 5 7GeL7 E .W<M' E W<+e%:G 5 1M 5 7 |CXC e 5 + E5 ;$+787 5E 'e%:8­:8' 5 C l E8E5&5 5 787GiY%Re; 55 eLT 5 pX:G>7GW<'eM

β 5 ;$ä;$+78'1I70>;$>'1I_+KV 5

Y%R 5 78.% 5E W<]: 5 ; 5%E YRb¦§_>+WæR EG5 ;+M')Í E :878+W 78+L7U; 5%E 7U#78>++t+7 |CXC V

Page 140: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D © ® §¨X¯ D?ªsi

i

i

i

i

i

i

i

"N Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

'e;$K+eL; 5 Y%R^e;J¦ 5 L78> 5 e9NK; 5 ;$>e:87 5 ; 5 W<]: 5 ; 5 ;$βCkO 5 + E5 ; 5 eT 5 p:8+78W<.eM

9!¼ü XVW 5E :G7U; 5 e 5 7 5 78Wi3C'">C·MK E8E C'A³³¾MD o CE½ HD ]) E :8e:8 E .W<M' E VB 5 W 5 +W +7UM E T 5 : 5 ; E E MK E8E E

; 5 5 :8 ³<?A o ? o ÇËcDXD CPök*vW 5%E`5 7 5 7UWi0C /C9:;%<:=?>=A«CBu@

F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^PÙYQ=^Q^UÞ G LQYUÓ6; [GMG v KG&H[ ^tÑ GUH6G :=YUÓ6; [G ×g n JO Y Z LP; j6GUHSH =b> G Õh n JO Y Z LP; j6GUH ^ J n G : H =b> G Õi n JO Y Z LtÙYQ=^Q^UÐ6; [ ¥%Ó6; [GtO ; [ ¥CÕkFrq n JO Y Z LtÙYQ=^Q^UÞ G LQYUÓ6; [G y; j6G&HmK Döæ; j6G&HAK© ö ; j6G&HMK @åö ÙYQ=^Q^UÐ6; [ ¥%Ó6; [G LFuF ×Fr\ ^ J n G :Cy K DQÕ3RRUn=^^%= K ; j6G&HM[G : G a G : H L Z =Pn=Q:=MLQ; H ^ K : JK ;%: [ =A^ J n G :6L%YQ=^^ GFr_ H =?> G ` K© ÕF|d ^ J n G : H =?> G ` K @åÕFre O ; [ ¥A`ALÕFrg ëFhFri ë ? E8E -MK E8E # 5E8E R6L>e E RW 5 e E :87GR$: 5 7)YRÍ78>>Lz 5 W 5 L7U®W<:87 5%E5E ;; 5%E

EGE ; 5%E t+M 5 W<]: 5 ; 5 o C'A³³EHD o C 3W 5 e%:U 5 e¯ä;z­781 5 7GC»½^W :87GNU9 5 ;$07 5 7UWi 5 W 5

`&h=^iXiÊ^£_ S_[aig¼ZXZXZ

ÌÇ >V>e:UT 5 V7G>78 E +e%:8; 5 eL(­7G1 5 78 E 'e:U­:8'>( 5 W 5 W 5E :G7U Ç R7U C /C[= 5 :G`Y%RVM']+W; 5%E :G7I E(Ç M'9 5E W 5%E :878; 5E e Ç R7UV 5 e¯ C'A6³³¾­D o CE½ HD 5%EGE RZ:UW3t]+W RW : 5 º+e78¦ +78+e%:8 J MKI178¶LJM.K;0e);$>+M'78S+T 5 ;0+M' EGE C[? E8E (] 5 : 5 º>eÍ;$(7G+¦ +7I+e+'0; 5e¯ E ¯ E +781<78z78+MK 5 eL­prM 5 5 7 5 7UWip¦ 5 e:8C fZ5 7 EGEG5 VBeLT 5 1W 5E 78+78 E +e%:U7 E8E i: 5 º+eà 5 W 5 RW´7:8z;&­781 5 78i E :G7U:UVkeT 5&E +73L7UY%R>M. E :G' 5E ;Íe¯ E+WY%R^>M.^78+7G E >e:8`RWi'e$¦ 5 78WiS+T 5 .W< 5 7G:8e:8`7Ub>7U :8+78._NS>T 5 ; 5 7 5 7UWieLM' E ; 5 C 465 W 5 e 5 > EG5 V% 5 76+g$+W<M 5 V$; 5 ¶@HMH½ HD ù f 7 5 7UWibC $qúV%Y%R(7G>78 E +e%:8RWæ+g7G EGE T 5 'e­7GK#;$ E5 Wi 5 R E R:G7US+T 5 C»=» E8E )+ E5 V 5 : 5 º+e& 5 787G E 5 eL;$+e%:G0 55 t+7U; 5 7 E +7813 5 W 5 78¦ >7I>eKV E >e; 5 :UW0L]>W 5 e E K;$+7U; 5 RW«e¯z;z­781 5 78V 5 E ]eN E8E ­78 5 7U)';$>e%:G Ç +7^YRLMy] 5<5 t+7U; 5 7aY%R(¦ 5 B7GN 5 e9>+'; 5 e)>e:878;Cök+78+W 5E +e%:8T 5 Vk 5 W 5Ç +W 5E ;+Wi E W<]: 5 ; 5E ; 5E eT 5 p:8+78W<.e E ;78W<­:GK+

X++ 5 W¨<'eM'R E T 5 ; 5 +¯$;$. 5 7U<i 5 e E :87GRLS+T 5 ;i­7G1 5 78 E 'e:U­:8'>C 465 W<>S+7G>W 5E

t+M 5äEGâ W0 5 M 5 'e'+'M³9ü!)C f 7UÍ EGE 3eT 5 pX:G>7GW<'eMXVPe;z78>+ E E +7 ¦ +.: 5 VÌt+e E78: 5 7GeL7Z 5 7 5 7UWi`78.eL'M M. E :8(;$`MK E8E E 78> 5 e9>K;»L>M 5 · m C D >7G>W 5%E V>e%:8T 5 V5 7 5 7UWi0C C

Page 141: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D ©Q¬c§¨X¯ D?ªDi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "I

â ÓÕÔÖ9Ö9ãÑØ%Ò&ÓÕäZå!æØç åèØ%é2êÔ ç åèØ%é2êë â ÓÕÔÖ9Öyìíå!æ"î"äïå!æ"Ø

j[.R7U0C /3u#?kg$+W<M 5 ;$­781 5 7G E 'e%:8­:8'>)7UL&¼C

9:;%<:=?>=A«CBªF Z ^ K Ó6; [G n:;%<:=b> yE K%N :;Uß^T9=Q:6^ G 6%ïQv6L G n KZ ; H ­\ ×_ G LQ;&p G :¥Î GQK <S`tï Z :6^ K B|n:;%<:=?>áÕde Z ^ K Ó6; [G Yt` HJ YYçö [ ` HQJ YYåÕg ëh ×i ä 6%ï k ]Frq y Yt`ALQY%=^^QY Z ^ K yu<FuF K :¥M×Fr\ ä 6%ï ×%: GQK%J : H YåÕ ëFr_ ëF|d L&= K L N yr9=Q:6^ G v6L G n K6Z ; HG Fre ×Frg LQ; H ^ J > G è HK6Z Yåyu<ö G öílén:;&<:=b>ål&ÕFh ëFri [ `Xn:;%<:=b> yE Frk T×T: GQK%J : H YçÕ ë\uq ë ? E8E eT 5 p:8+78W)'eMV+e%:8T 5 V%7G+: 5 78eJRWi0­781 5 78 E .e%:8­:GK+bY%R»¦ 5 tW 5 e%:8;b;$>e:87 5 ; 5

W<]: 5 ; 5 ¼ü C D e: 5 9ü! Y%Re%: 5 L ¼ü »78: 5 78eW¨RW e¯Í; 5 :8. 5 » ³?&½ HDY%R E >78­R:G'M.'_>; 5)E +W<78 Y%R(78>+ E 78W 5E 78+78 E +e%:U7@RW 78R 5 7G>L+:G.:G'1 5 ;$ e¯ E ;­781 5 7GV 5 W 5 RWiM' E :U;$^MK E8E Ek5 R<RWiJM' E :8;^178'­I1+ E V 5 R)RW<JM' E :Ub;$^ 5 Wie; 5%E:UCd·\;$ Ç eKS+T 5 ; E8E )MK E8E J];;)e 5 7 5 7UWibC oC

9:;%<:=?>=A«CBF n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ n JO Y Z LALQYQ=^Q^X Z ^ K Ó6; [GAG v KG&H[ ^tÑ G&H6G :=Y&Ó6; [G ×d n JO Y Z LtÑ G&H6G :=Y&Ó6; [GPH ; [G Õe n JO Y Z LT Z ^ K Ó6; [GPH6G v K Õghi n JO Y Z LT Z ^ K Ó6; [G yuÑ G&H6G :=Y&Ó6; [GcK© k ×Frq ^ J n G :Cy K© B|n;^ Z&K6Z ; H Õ RRXn6=^Q^%= K ; jG&Hc[G : G a G : H L Z =tn6=Q:=MLQ; H ^ K : JK ;&: [ =FuF RRA^ J n G :6LQYQ=^^ G BmðM; > G ^>; I%J6G ; [ ;A^ G&J a Z Y N ;

Page 142: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N/ !Í">%i

i

i

i

i

i

i

i

">/ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

Fr\ H ; [G ` K© ÕFr_ H6G v K ` HQJ YYåÕ RRXn: Z > GZ :; G Y G > G&HK ; [ =AY Z ^ K =F|d ëFreFrg n JO Y Z LT Z ^ K Ó6; [G yuÑ G&H6G :=Y&Ó6; [GcK© öæ Z ^ K Ó6; [G Y6Fh ×Fri ^ J n G :Cy K© B|n;^ Z&K6Z ; H Õ RRXn6=^Q^%= K ; jG&Hc[G : G a G : H L Z =tn6=Q:=MLQ; H ^ K : JK ;&: [ =Frk RRA^ J n G :6LQYQ=^^ G BmðM; > G ^>; I%J6G ; [ ;A^ G&J a Z Y N ;\uq H ; [G ` K© Õ\F H6G v K `SYçÕ RRXn: Z > GZ :; G Y G > G&HK ; [ =AY Z ^ K =\u\ ë\u_\d n JO Y Z LPp; Z&[ = [[ yÑ G&H6G :=Y&Ó6; [GAK© \ue ×\ug Z a-y H6G v K `` HJ YY6PRRXp G : Z a Z L%=c^ G oWY K6Z >; [ =AY Z ^ K =\h H6G v K ` H6G ßS Z ^ K Ó6; [G y K© ÕóRR ZbH ^ G : GTH ;Ta ZbH =Y\ui G Y^ G\uk H6G v K Bu= [[ y K© ÕóRR Z?H ^ G : G =Unx^t;ín:x%v Z >;_uq ë_F_u\ ë

·^M']+W ; 5 5 e E :G78R$: 5 7bY%RÍW 5 e:URWÿe¯&;­7G1 5 78 E 'e%:8­:8'> 5 M 5 +e; 5 5 W 5Ç M'9 5RW 5 R$:87 5 e¯ E8E ; 5 5 W 5 L7U®W<:87 5 VÌ E8E ä+M' EGE i 5E8E R 5 W<]: 5 ; 5AHMH VØY%Ri'e+M.RRW e 5 1 5 e¯#e 5iÇ eM[;iM' E :8C fZ5 7^+g>W<M 5 V E :8.1+78W 5%E Y%R3 5 e E :G78R'7»RWiiM' E :8Í 5 W:G7I E +M' EGE E V$ 5 7G78 E 5 e;$>e:8( 5 7 5 7UWi`&h=^iXiÊ^£_ S_[aig¼ ZXZXZÌ`&h=^iXig¼ ZXZXZpÌ`&h=^iXi¤` ZXZXZÌ:G>7 â W 5%E 5 W 5 7G E RMH:U; 5 <­781 5 78(W 5%E :878;0e Ç R7U)C

ñ2ò Ö×yäïå!æ"Øâ ÓÕÔÖ9Ö9ãïØ%Ò%Óóäïå!æ"Ø ñKò Ö×yäZå!æØ

â Ó»ÔÖ9Ö9ãÑØ%Ò%ÓóäZå!æØ ñKò Ö×yäïå!æØâ ÓÕÔÖ9Ö9ãÑØ&Ò%Óóäïå!æØ

jØ'R78<C 0u#?kg$+W<M 5 ;$­781 5 78 E 'e:U­:8'>0L7UL ¼ü XC

Page 143: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N/" !Í">/i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "N/"

= 5 :G Y%RV E +W<78»Y%R E :G'1+78W 5E M'K;e; 5 5 WËRWi3M. E :Ub;$(MK E8E E V+W3 5 7U(:G>e9pW 5E ; Ç eK; 55Ç M'9 5 Wi EyJ E YR+7U;Ii;$(» ³?&½ H7D 5 W 5E >e; 5 RW »=D:DËACE½ HD V:G>7G>W 5E V 5 W 5 :G' 5 78>MB;$ E8E Ç M.9 5 V$RWîe¯ C'A³³¾MD o CE½ HD Cf 7U 5 eT 5 pX:G>7GW<'eMOL ¼ü V:G>7G>W 5%E ); Ç eKS+T 5 W 5%E :878;0e 5 7 5 7UWi3C

9:;%<:=?>=A«CBu«F Z ^ K Ó6; [G LQY%=^^QY Z ^ K y G LQ;%p G :Q¥Î GQK < K%N :;&ß^X9=%:6^ G 6&ïQv6L G n K6Z ; H ­\ ×_ ÙYQ=^Q^UÞ G LQYUÓ6; [G LP` HJ YYåÕd Z ^ K Ó6; [G Yt` HJ YYçÕeg G LQ;&p G :¥Î GQK aS`tï Z :6^ K BL%YQ=^^QY Z ^ K B JQHZ ; H y<Õh ëi ×k yFrq LX`MLQYQ=^Q^ [G LQYçyua- YT`MLQYQ=^Q^QY Z ^ K yu< FuF T×T: GQK%J : HAHG ßt Z ^ K Ó6; [G yîLçöóY6Õ ëFr\Fr_ ë ·`Y%RVk 5 e E :G78RS>T 5 ;$#RWiM' E :U;$Í+M' EGE E ]ͦ +.:8;$ÍW<e+'7U E :8e:8 E 'W<M' E C

¤ eT 5 p:8+78W<.eMLb7G+: 5 7GeRW e¯¬; 5 :8. 5 C'A³³¾­D o CE½ HD -RWiàU9W<;78>R7 E .1¤LHü<78: 5 78e&RW<M' E :8;$+M' EGE E C n E :UV@>e%:8T 5 V6+7GK7<RW e 5 1 5 e¯; 5 :8. 5 » ³?&½ HD 78 5 M 5 >7 5 e¯|L¦l ý'&e 5 'e â 5 ;M' E :UC= 5 :GäYRÍ 5 e E :G78RS+T 5 ;äM' E :8ä])¦ +.:8; 5äÇ eLMk78 5 .e â 5 Cͤ 7G'W<+'7 5 e¯¯» ³c?&½ HD ]i78'; 5Y%ReL; 5 : 5 ; E E MK E8E E v­-¦ 5 78W eM. E ; E U9Wi;- 5 W<]: 5 ; 5 ¼ü )eLT 55 5 7G78Í 5 E eT 5 g$ E :8+W Wi E MK E8E E E >7G>W eM. E ; E C¬=» E8E + E5 V@-1I7GK­I1>Mno 5 e%:G]+WÿRW´e¯&Y%Rz 5 7878 E 5 e;$ J ;$ Ç eKS+T 5 ;HM.:G'Wi&+M' EGE #eM. E ;C¤î1M 5 70;178'­I1+M C ] |C=C VZ 5 E 5 W 5 U9W<;78>+R7 E '1I-ÊL ¼ü )eT 5 ¦ 5 ag$>+R$:8;V C 5 e%:G'e%RL3 5 W 5 1M 5 7F 5 W 5 YRLMt¦ 5 P'e'+'M.'_>;be 5 'e â 5 ; 5 W<]: 5 ; 5 Ck?de%:8T 5 V$ 5 78'75 e¯i; 5 :G' 5 » ³?&½ HD V:8+W 5E 5 W 5 RW Ç M'9 5<5 e¯ C'A6³³¾­D o CE½ HD V 5 787G E 5 eL;$+e%:G JHM.:G'WibMK E8E eM. E ;V» 5 W 535 R$:87 5JÇ M'9 5 V%Y%R E +78K 5 7G E :Ue%:G^;bM' E :8V 5 1M 5 7 |CXC C· Ç R7UFC oa78 E +e%:8a E :8 E 7U` 5 e E :87GRLS+T 5 ;YR+M'k:G78>U9 5 ;$6­781 5 78[W 5%E :878; 5

e%:8+78 5 7GW<+e%:8V7U 5 7 5 7UWi

`&h=^iXiÊ^£_ S_[aig¼ ZXZXZÌ`&h=^iXig¼ ZXZXZpÌ`&h=^iXi¤` ZXZXZÌl eKKM'W)>e%:GV 5 e¯ 5 7878 E 5 e;$+e%:8 J +M' EGE 3]).e+M.R â ; 5 ezM. E :8Vy;$> 5 E(5 e¯z 5 7Gp

78 E 5 e;$+e%:8 J JV Ç eM.W<>e:8V 5 e¯#;<+M' EGE "C2 ReL; 5 7G E >e%:8W 5%E ^78Wi­:GK+»;$

X++V 5 W)>e%:8W 5%E Y%RFg$ E :8+W\;$'1+7 E E Wip

e>.7U E 5E8Eâ 1> E 78);$ Ç e.7 E E :G78R$:GR78 E ;0M''eR>WäCZ?dW¨7G:GKRM'7>V$ 5 W<+e%:8W 5%EY%R 5 eT 5 p:8+78W<.eMíL ¼ü 3 5 ;$+78' E >70;$ Ç eK; 5 ;ä;$RL E Wie+'78 E äYRz E 5 M'9;$ÍY%RMF;+MK E R$:8.M''_>70 5 ;$>7GK:8+7< 5 e E NY&kI+e+' E e'W<M.>W<+e%:8S+T 5 ; 5 · m CZ=»Y%R+M' 5 e%: 5 V78 E +e%:8W 5E E`E +R.e%:G E ;$ Ç e'S È E

〈classlist〉 → ( 〈classdecl〉 )+

Page 144: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N/ !Í">i

i

i

i

i

i

i

i

">/% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

ñKò Ö×yäZå!æØâ Ó»ÔÖ9Ö9ãÑØ%Ò%ÓóäZå!æØêÒ

ùú

ñKò Ö×yäïå!æØâ Ó»ÔÖ9Ö9ãÑØ%Ò%ÓóäZå!æØêíë ñ2ò Ö×yäZå!æØ

â ÓÕÔÖ9Ö9ãÑØ%Ò%Óóäïå!æ"ØêíÒ

ù tú

ñ2ò Ö×yäïå!æ"Øâ ÓÕÔÖ9Ö9ãÑØ%Ò%Óóäïå!æ"ØêÔ ñ2ò Ö×yäïå!æ"Ø

â ÓÕÔÖ9Ö9ãÑØ&Ò%Óóäïå!æØêë ñKò Ö×yäZå!æØâ ÓÕÔÖ9Ö9ãÑØ%Ò&ÓÕäZå!æØêÒ

ù§Nú

j['R7U<CªoJuÍ?k:U E ;< 5 e E :87GRLS+T 5 ;<­781 5 7G E 'e%:8­:GK+C

5 R

〈classlist〉 → 〈classdecl〉 [ 〈classlist〉 ]

·à;$.¦ +78+eS>`ea'W<M.>W<+e%:8S+T 5 78>+tv*R E :UW<+e%:8deaWie>.7U`;$d 5 e E :G78R'7Ì`­781 5 7GE .e%:8­:GK+)78) E8E (eLT 5 pX:G>7GW<'eMXC m J:G'1] EGE +W 5%E E 5 M'9K; 5 )7G'W<+'780¦ 5 7GWi<;$b;$ Ç e'7L ¼ü `:G>7 â W 5%E Y%R0+7GK7»#M. E :U#; 5 'e â 5 78 5#Ç WC m +78K#M' 5 5 W 5#5 +¯;. 5 ; 57 5 78W<0C¼qC

Page 145: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G Db@@ §¨X¯ D?ª7i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "N//

9:;%<:=?>=A«CB('F Z ^ K Ó6; [G LQY%=^^QY Z ^ K y G LQ;%p G :Q¥Î GQK < K%N :;&ß^X9=%:6^ G 6&ïQv6L G n K6Z ; H ­\ ×_ ÙYQ=^Q^UÞ G LQYUÓ6; [G LP` HJ YYåÕd Z ^ K Ó6; [G Yt` HJ YYçÕeg G LQ;&p G :¥Î GQK aS`tï Z :6^ K BL%YQ=^^QY Z ^ K B JQHZ ; H y<Õh ëi ×k yFrq LP`AL%YQ=^^ [G LQYåyuaFuF × Z aãyYt`` HJ YYFr\ Yt` H6G ßS Z ^ K Ó6; [G yîLÕFr_ G Y^ GF|d YBu= [[ yîLÕFre ëFrg Uft×P: GQK&J : H YåÕ ëFhFri ë =^ EGE i+ EG5 VB>;+M' EGE 078> 5 e9>K;z+W L&F:G>W Y%R E >7.e E +78K;ÍeLzM' E :U C

5 7W<+ 5 ;äU9LWi;ä 5 W<]: 5 ; 5AMHMH ;MK E8E #» ³?U½ HD C? EGE ä.e E >78S>T 5 ]0¦ >H:Uäe5 7U;$>Wæ+W Y%Ri E MK E8E E 7GN+W ez+e%:878;C3= T 5 5 ;$ E +7;$.¦ +78+e%:GVy 5 E ä+;+ E W<+e%: 5 ¦ +.: 5 ;$>e:87 5 ; 5 e E :G78RS+T 5dp´t z`VBRW e 5 1 5 1M 5 7(]i:G78.R â ; 5 Êoà 5 1IM 5 7e%:8+78 5 7)]&L>78;$K; 5 CÊ?dW 5 R$:87 5%E 5 e%: 5E ;e 5E8E -78Wi­:GK+V6 5 W 5 e 5 eT 5 p:8+78W<.eML'V 5 $: 5 R$p E t+MK 5 R$:878i 5 78;>WäV 5 R E vVt+MK<R$:8.M'._NS>T 5 ; 5%E`5 t+7U; 5 7G E ;$78+t:GKS+T 5 ; n = jFVNL7U^Y%R 5 M.>H: 5 7[ 5%EGE ^ 5 W<7U7[ E ;R E ¦ 5 78Wi E ;6'W<M.>W<+e%:8S+T 5 C?dWÿ>78MVÌR:G'M.'_>S+T 5 ;#U9Wi; E 78>R7 E .1 E 5 W 5 +W ¼ü : 5 7GeäWi E ¦§­'M@ 5 e E :G78RS+T 5 ;3­7G1 5 78 E 'e%:8­:GK+V%Wi E V 5 7 5 R$:G7 5 MK; 5 V: 5 78e337UWi­:8'>W<+e 5%E M'+ â 1+MXC·Ë; Ç eKS+T 5 ; 5 eT 5 p:8+78W<.eM«Lyv­i¦ 5 ZW 5%E :878;C 465 e%:G'eRW 5E Vt+e%:8T 5 VP 5 W

5 78¯Ig'W 5 eLT 5 pX:G>7GW<'eMyY%R]¶L'Ve 5 7 5 78Wi3C C9:;%<:=?>=A«CBu®

F ÙYQ=^Q^UÐ6; [ ¥%Ó6; [G LQYQ=^^ O ; [ ¥Cy G L%;%p G :¥Î GQK < K%N :;Uß^X9=Q:^ G 6%ï%v6L G n K6Z ; H ­\ ×_ Z ^ K Ó6; [G LP` HJ YYçöd pA` HJ YYçöe L K ` HJ YQYåög >m` HJ YYçÕh Ø=Q:QÞ G LQY&Ó6; [G p [ Õi Ù; H ^ K : J L K Þ G LQY&Ó; [G L [ Õk ÛGQK%N ; [ Þ G L%Y&Ó6; [G > [ ÕFrq ; j6GUHMK ` HQJ YYåÕFuFFr\ G LQ;&p G :¥Î GQK a © ` HG ßS G L%;%p G :¥Î GQK yÎU Û Ò%ÙU6&ÓB JHZ ; H yu<Bu: G >;Qp G yîÒbÞÓöFr_ a@t`tï Z :6^ K B > GQK%N ; [[G LQYåB JHZ ; H yu<Br: G >;%p G yîÒUÞÓöF|d aªS`tï Z :6^ K BLQ; H ^ K : J L K[G LQYB JQHZ ; H ya@B: G >;%p G yîÒbÞÓöFre a!P`tï Z :6^ K Brp=Q: [G LQYB JHZ ; H yuaQªB: G >;%p G yéÒbÞÓÕFrg ëFh ×Fri K :¥M×

Page 146: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G Db@Qª §¨X¯ D?ª«i

i

i

i

i

i

i

i

">/ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

Frk K ` ä ÐÍÙ% \uq LP`ML%YQ=^^QY Z ^ K yua76 \F y6|Í#Í%Þ/y@Tp [ `Pp=Q: [G LQYåyua © ä Î& Û Ò&Ù&6&Ó \u\ × Z aãyæpA`Q` HJ YQY6\u_ pA` H6G ßS Z ^ K Ó6; [G yup [ Õ\d G Y^ G\ue p/Bu= [[ yup [ Õ\ug ë\h \ui yîL [ `ALQ; H ^ K : J L K[G LQYåyuaQª\uk × Z aãyÜL K `` HJ YQY6_uq L K ` H6G ßS Z ^ K Ó6; [G yîL [ Õ_F G Y^ G_u\ L K B= [[ yîL [ Õ_u_ ë_d _ue y> [ `í> GQK%N ; [[G LQYçyua@_ug × Z aãy >m`Q` HJ YQY6_h >m` H6G ßS Z ^ K Ó6; [G y> [ Õ_ui G Y^ G_uk >ìBu= [[ y> [ Õdq ëdîF d\ ä QÐÍÙ% d_ ×X: GQK%J : HAH6G ßMÙY%=^^UÐ6; [ ¥QÓ6; [G y K öÈLçö pö3L K ö >Õ ëdud ëde L%= K L N y9=Q:^ G v6L G n K6Z ; HzG dg ×dh LQ; H ^ J > G è HK6Z Yçyu<Cö G öílUL%YQ=^^ O ; [ ¥l%Õdi : G%K%J : HSHG ßMÙYQ=^^UÐ6; [ ¥QÓ6; [G y K ö Lçö pCö L K öü>Õdk ëeuq ë

¤\e¯q C'A³³º H<½ HD 78: 5 7GeL; 5 5 7nÍ 5%EGE RÌY%R:G7 53Ç M'9 5%E V: 5 ; 5E ; 5 :G' 5» ³c?&½ HD CZ¤ 7G'W<+'7 5 78Wi_+>eRW e¯0Y%RJ 5 7878 E 5 e;$ J M. E :U0;(+M' EGE E e'e9; E m5E >Re; 5 V J M. E :U;$017GK­I1> E m 5 :8+7U>.7 5 V J M. E :8ä;$i 5 e E :87GR$: 5 78 E my 5 Y%R7G: 5pJ M. E :U;$W<]: 5 ; 5E ;+M' EGE C f 78M' E :8,;$+M' EGE E V@R:G'M.'_>W 5%E ,U9W<;-7GNR7 E '1 5W<]: 5 ; 5 L ¼ü <;$ E 78H: 5 e:8+78 5 7GW<>e:8VkY%R0v­&78: 5 78e-M. E :U-;i C'A³³¾­D o Cé½ HD³W 5 e%:8;C f 78` E ;$>W< E M. E :8 E VNR$:G'M.'_>W 5EB5`5 L>78; 5 7Ø;$d78+t:GKS+T 5 ; n =»jzVI 5 7Ø E8E5 V78>+ E W 5E W 5 e%:87 zM. E :U J W<>;$K;ÍY%R< E 178'­I1+ E V 5E 5 e E :G78R$: 5 7G E^5 R 5E W)]+: 5 ; 5%EL78>>Wei>e%:G7U;CF·+M' EGE b 5 7G78 E 5 e;$>e%:G< E8E 3e¯ibRW g$>W)M 5 ;$0 5 W 5<Ç >­7G1 5 78iW 5 e%:8; 5 70 EGE #W<]: 5 ; 5-E T 5 W 5%E :878; 5E e 5 7 5 78W<C ze Ç R7UC 78 E LN :G'1W<+e%:8C

9:;%<:=?>=A«CB ¬F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^PÙYQ=^Q^UÐ6; [ ¥%Ó6; [GMG v KG&H[ ^tÑ GUH6G :=YUÓ6; [G ×g n JO Y Z LT Z ^ K Ó6; [G LQY Z ^ K Õ RQRtY Z ^ K = [G L%YQ=^^ G ^t= HZbHN = [ =^

Page 147: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G Db@7 §¨X¯ D?ª'i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "N/o

h n JO Y Z LT Z ^ K Ó6; [G pY Z ^ K Õ RQRSY Z ^ K = [G p=%: Z%à p GZ ^ [ =MLQY%=^^ Gi n JO Y Z LT Z ^ K Ó6; [G L K Y Z ^ K Õ RQRSY Z ^ K = [G LQ; H ^ K : JK ;%: G ^k n JO Y Z LT Z ^ K Ó6; [G >Y Z ^ K Õ RQRSY Z ^ K = [G > K ; [ ;^FrqFuF n JO Y Z LtÙYQ=^Q^UÐ6; [ ¥%Ó6; [G y; j6G&HmK Dö( Z ^ K Ó; [G Lçöð Z ^ K Ó; [G pCöæ Z ^ K Ó6; [G L K öFr\ Z ^ K Ó6; [G >Fr_ ×F|d ^ J n G :Cy K DQÕ3RRUn=^^%= K ; j6G&HM[G : G a G : H L Z =Pn=Q:=MLQ; H ^ K : JK ;%: [ =A^ J n G :6L%YQ=^^ GFre LQY Z ^ K `MLÕFrg pY Z ^ K `tpÕFh L K Y Z ^ K `AL K ÕFri >Y Z ^ K `o> ÕFrk ë\uq\F ë f 7U 5iE +R.e%:8 :87GNU9 5 ;$7 5 7UWiV:8+7 â W 5%E i­781 5 78 E 'e:U­:8'>0; Ç R7U0C C

`&h=^iXiS_iS7_£`&h=^iXiÊ^¡ ZXZXZpÌ`&h=^iXig¼ ZXZXZpÌb[7S¦`³Ña iSXdb[7_ËÑ `\[iSXd=:`S\&d b[7S ZXZXZpÌ

b[7S¤Q ZXZXZpÌÌ= 5 eT 5 pX:G+78W<.eLM1<ù f 7 5 7UWiC'"> %ú9­M'Re E 5 W<>e:U­78 5%E E >7G>W´¦ +.: 5%E

EG5 78(< 5 e E :G78RS+T 5 ;)­7G1 5 78 E 'e:U­:8'>C

9:;%<:=?>=A«CBEDbsF Ø=Q:QÞ G LQY&Ó6; [G p=Q: [G LQYåy G LQ;%p G :Q¥Î GQK < K%N :;&ß^X9=Q:6^ G %ïQv6L G n K6Z ; H ­\ ×_ ; j6GUHMK Do` HQJ YYåö K© Õd ZbHKPj `SsÕe Z ^ K Ó6; [G Yt` HJ YYçÕg ëh ×i K :¥M×k y K Do` ä ÒUÓ ò] K Do` ä Î%QÒbÓÑ ò]üK D ` ä ÒUÞQÓ Frq K© ` ä ÒUÞQÓ y ä ÐÍÙ Aä ÐÍÙ × j ffÕ ë FuF ×SYP` HG ßt Z ^ K Ó6; [G y H6G ßMØ=%:QÓ6; [G y K© ö j Õ ëFr\ y ä Ù ÛÛ Í × j `PsÕ ëôK© ` ä ÒUÞÓ y ä ÐÍÙ Aä ÐÍÙ × j ffÕ ë

Page 148: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N/ !Í">i

i

i

i

i

i

i

i

">/ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

Õâ r ×*×ô@Ü3Ý3âóõ³Ö ä Üö Ö£÷ Ü3èøcØ*Ü3×*Ø*Ü Õ:â r ×*×ù:Ö äú õ­Ö ä Ü

û çá×*Ø(õ³Ö ä Ü û çá×GØõ­Ö ä Üû çá×*Ø(õ³Ö ä Ü ü rß ô@Ü3Ý3âóõ³Ö ä Ü û çá×*Ø(õ³Ö ä Ü Õ:Ö è×GØ ß ÙÝ Ø(ô@Ü3Ý6âóõ­Ö ä Ü û çá×GØõ­Ö ä Ü

Õ:â r ×*×ô@Ü3Ý3âóõ³Ö ä Ü û çá×GØõ­Ö ä Ü ü rß ô@Ü3Ý6âóõ­Ö ä Ü ý¥Ü ØÞÖ ä ô@Ü3Ý3âóõ³Ö ä ÜÕ:â r ××ô³Ü6Ý3âóõ­Ö ä Ü

j[.R7U)C bu#?kg$+W<M 5 ;$b­781 5 7G E 'e%:8­:GK+)7UpLC

Fr_F|d ×SYBu= [[ y H6G ßAØ=Q:QÓ6; [G y K© ö j Õ ëFre Frg ×T: GQK%J : HAHG ßtØ=%:QÞ G LQYUÓ6; [G y K DöÈY6Õ ëFh ëFri L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Frk ×\uq LQ; H ^ J > G è HK6Z Yçyu<Cö G öílp=Q: [G L%Yl%Õ\F : G%K%J : HSHG ßSØ=Q:%Þ G LQY&Ó; [G y K Dö YÕ\u\ ë\u_ ë

½^W e¯ x'A˾­D o Cé½ HD Y%R»] 7G+: 5 78e; 5 5 7F E8E ^W<]+: 5 ; 5 7G>7G E >e%:8JRWi3;>MK7US>T 5;$RWi 5 RäWi E 178'­I1+ E ;(RWîW< E W 5 :8. 5 5 W 5 e 5E 5 Wie; 5%E

b[7S£^ËÑgªÑ` 5 R

iSXdb[7aOÑÄ_ ? E8E -;$>+M'78S+T 5 ]#78+7G E >e:U;äe 5 e¯ x'A6˾MD o CE½ HD Y%Rz 5 e%:G]>W RW Ç M'9 5 Y%Rz]

5 :G' 5 ;178'­I1+Mbù§RWþe¯à; 5 :G' 5êÇ É D ú<RW<M' E :U,;$178'­I1+ E VF 5 W 5,E +W<7878+78 E +e%:8;ä 5 7bRWл ³c?&½ HD Cz·MK E8E iL7U E8E <:8. 5 ;$Íe¯]Í;$ Ç eK; 5 e$¦ 5 7GW<W 5E :G7U 5 7 5 78Wi3C'""C

Page 149: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ X %i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "N/%q

9:;%<:=?>=A«CBEDDF n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^XØ=Q:QÞ G LQY&Ó6; [GMG v KG&H[ ^tÎ K = KG > G&HK Ó6; [G ×g n JO Y Z LT Z ^ K Ó6; [G p=%:6^çÕhi n JO Y Z LTØ=Q:QÞ G LQY&Ó6; [G yu; j6G&HmK ö( Z ^ K Ó6; [G nk ×Frq ^ J n G :Cy K ÕFuF p=%:6^P`Xn/ÕFr\ ëFr_ ë = 5 :G-Y%R 5 e¯¬; 5 :G' 5 Ç É D eT 5 78>+eà;$NMK7US>T 5 ;à+M' EGE C l EGEG5 5 7Gp

Y%Ri 5 ;+W 5E R$:G'M.'_>7378¯78Kz17GK­I1>M N ³ç7? Y%R<¦ 5 F;$>+M'78;äe E RL>78+M' EGE »XDDËAMCE½ HD V 5 R E vV$e EGE J+ EG5 V 5 : 5 º+e;$J78¦ +7I+eLK¦§_J7:8;0­7G1 5 78 E .e%:U­:GK+C4 ;#+M'+W<>e: 5 ;zM' E :8zYR)78>+3 5 W 5ÍÇ M'9z; x'A6˾MD o CE½ HD ]<; 5 :8. 5xA6Ë6½ H7D VY%R(:G>W¨ 5 W 53Ç M'9 5%E RW Ç É DQ JRW¨e=HW)>7 5 'e:8+'7 5 Y%RJ'e;$K+W 5 e 5 W<;)178'­I1+M E RL);.W<+e E T 5 V7G E t>:G'1W<+e%:Giù f 7 5 7UWi)C'"NúC

9:;%<:=?>=A«CBED ©F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^XØ=Q:QÓ; [GAG v KG&H[ ^Xv%n: G Ó; [G ×g n JO Y Z L ZbHKS[Z >áÕhi n JO Y Z LTØ=Q:QÓ; [G yu; j6G&HK k ×Frq ^ J n G :Cy K ÕFuF [6Z >m`tsÕFr\ ëFr_F|d n JO Y Z LTØ=Q:QÓ; [G yu; j6G&HK ö ZbHKPj Fre ×Frg ^ J n G :Cy K ÕFh [6Z >m` j ÕFri ëFrk\uq ë =»< 5 e E :G78RS+T 5 ;)­781 5 78 E .e%:U­:GK+3+W HV0;$'W<+e E T 5 ;0178'­I1+M](78+ E :G7U;

5 e%:8eL; 5 p E 5 eXHW<+7 5 ;$1>_+ E Y%R7GNRW ¦ >U9Ñ 5 MKU9+:Ge E R¬;>MK7US>T 5ù M''e9 E "N ))"I); 5<f 7 5 7UWi3C."N úCZ· 17GK­I1>MáÉ,]'e+7G>W)>e%:8;0>;01>_JY%R 5 5 787GRW«+ E W<>e: 5 5 W 5 ¦ NU9<U9I1 E V$;e; 5 V EGE 'WäV<;$'W<+e E T 5 ;)178K­I1+MXC=» Ç R78C¼q1+W 5%E 5 W 5E >7GK-­7G1 5 78 E 'e%:8­:GK+-7U- E ;$R E ;>MK7US È E ;$

178'­I1+ E eL)+M' EGE ")

Page 150: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G Db@® §¨X¯ D|%si

i

i

i

i

i

i

i

">/ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

`&h=^iXiS_iS¡b[7S¡^ËÑgKÒ Ó iSXdb[7¦`ËÒ Ó«Ò)Ó«Ò Ó Ì

ñ2ò Ö×yäïå!æ"Øþ ÔÿyãïØ%Ò%Óóäïå!æ"Ø ñ2ò Ö×yäïå!æ"Øç åèØ%é2ê ò é7× ñ2ò Ö×yäZå!æØ þ Ô|ÿyãÑØ%Ò%Óóäïå!æ"Ø

þ Ôÿyäïå!æ"Ø ñKò Ö×yäZå!æØ ç åèØ%éKêÖ×9ÿ ò é ñKò Ö×yäïå!æØç åèØ%é2êíÔ þ ÔÿyäZå!æØ þ ÔÿyäZå!æØ

ç åèØ%é2êë ç åèØ%éKêÒ

j[.R78)C¼qu#?kg$+W<M 5 ;$b­781 5 7G E 'e%:8­:8'>3L7U(HC¤ E eT 5 pX:G>7GW<'e E )&FÄ!"%$ E T 5 W 5E :G7U; 5%E +W E +R';C¤î78.p

W<+'7 5 78'Í378: 5 7GeL<RWæe¯zY%R0 5%EGE RZt+e E RW Ç M.9 5 VyYR3]3RW ÊMD7? HQº H<½ HD C°%­ 5E +Re; 5 78> E z78 E +e%:U7J 5 e¯Y%Ri7G+: 5 7Ge 5 R$:878 E .e¦ 5 78W<S È E 5 e 5 W<i; 5W<]: 5 ; 5 V 5 :G' 5 b<;$'W<+e E T 5 ; 5 1M 5 7^;(78: 5 78e 5 C

9:;%<:=?>=A«CBEDb@F Ù; H ^ K : J L K Þ G LQY&Ó; [G LQ; H ^ K : J L K[G LQYåy G LQ;%p G :¥Î GQK < K%N :;&ß^T9=%:6^ G 6&ïQv6L G n K6Z ; H ­\ ×_ ; j6GUHMK ` HQJ YYåÕd ÛGQK%N ; [ Ð6; [ ¥QÓ6; [G >m` HJ YYçÕe ëg ×h K :¥M×i K ` ä ÙUÓ6Î%QQèÙQ& >c`o> GQK%N ; [%O ; [ ¥Cyu<k ×T: G%K%J : HAH6G ßAÙ; H ^ K : J L K Þ G LQYUÓ6; [G y K ö >Õ ëFrq ëFuF L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Fr\ ×Fr_ LQ; H ^ J > G è HK6Z Yçyu<Cö G öílUL%; H ^ K : J L K[G LQYl%ÕF|d : G%K%J : HSHG ßMÙ; H ^ K : J L K Þ G LQYUÓ6; [G y K ö >ÕFre ëFrg ëFhFri ÛGQK%N ; [ Þ G L%Y&Ó6; [G > G%K%N ; [[G LQYåy G LQ;%p G :¥Î GQK < K%N :;&ß^T9=%:6^ G 6&ïQv6L G n K6Z ; H ­Frk ×

Page 151: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G Db@ ¬c§¨X¯ D|6Di

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "N/

\uq ; j6GUHMK Do` HQJ YYåö\F K© ` HQJ YYåÕ\u\ ZbHKPj `SsÕ\u_ ÛGQK%N ; [ Ð6; [ ¥QÓ6; [G >m` HJ YYçÕ\d ë\ue ×\ug K :¥M×\h y K Do` ä ÒUÓ ò] K Do` ä Î%QÒbÓÑ ò]üK D ` ä ÒUÞQÓ \ui y ä ÐÍÙ Aä QÐÍÙQ × j fQfÕ ë \uk K© ` ä ÒUÞQÓ >c`í> GQK&N ; [%O ; [ ¥Cyu<_uq ×P: GQK&J : HSH6G ß ÛGQK%N ; [ Þ G L%Y&Ó6; [G y K Dö j ö K© öü>Õ ë_F ë_u\ L%= K L N y9=Q:^ G v6L G n K6Z ; HzG _u_ ×_d LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl> GQK%N ; [Q[G LQYl&Õ_ue : G%K%J : HSHG ß ÛGQK&N ; [ Þ G LQY&Ó6; [G y K Dö j ö K© öü>Õ_ug ë_h ë

· E8E 'WV[ E MK E8E E o ³?Ë o HD o Cé½ H7D ÊMD7? H%¾­D o CE½ HD W 5E :G7U; E e 5E 7 5 7UpWi E C.">0bC."Iob78P+:G>W E8E E ;$.¦ +78+eS> E C

9:;%<:=?>=A«CBED?ªF n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^PÙ; H ^ K : J L K Þ G LQY&Ó; [GcG v KG&H[ ^tÑ G&H6G :=Y&Ó6; [G ×g n JO Y Z L ÛGQK%N ; [ Ð6; [ ¥QÓ6; [GtO ; [ ¥CÕhi n JO Y Z LtÙ; H ^ K : J L K Þ G LQY&Ó; [G yu; j6G&HK ö ÛGQK&N ; [ Ð6; [ ¥QÓ6; [G >k ×Frq ^ J n G :Cy K ÕFuF O ; [ ¥A`í> ÕFr\ ëFr_ ë

9:;%<:=?>=A«CBED|F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^ ÛGQK%N ; [ Þ G L%Y&Ó6; [GMG v KG&H[ ^tÑ G&H6G :=Y&Ó6; [G ×g n JO Y Z L ZbHKS[Z >áÕh n JO Y Z LP; j6GUHSH =b> G Õi n JO Y Z L ÛGQK%N ; [ Ð6; [ ¥QÓ6; [GtO ; [ ¥CÕkFrq n JO Y Z L ÛGQK%N ; [ Þ G L%Y&Ó6; [G yu; j6GUHK ö ZbHKPj ö(; j6GUHcK© ö ÛG%K%N ; [ Ð; [ ¥QÓ6; [GtO FuF ×Fr\ ^ J n G :Cy K Õ

Page 152: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D?ªs §¨X¯ D| ©i

i

i

i

i

i

i

i

"+% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

Fr_ [6Z >m` j ÕF|d H =?> G ` K© ÕFre O ; [ ¥A` O ÕFrg ëFh ë · Ç R7UC W 5E :G7URW´g$+W<M 5 ;#R$:G'M'._NS+T 5 ;$ EGE E ; 5 E e¯ E 78 5 :G78>U9 5 ;$

7 5 78W<(+g>W<M. Ç >; 5 E >R'7>C[= 5 :G Y%R E ; E 78'S È E ; 5%E 78®W)+:G7 5E ¦ 5 7GWi E ; 5 5 7G 5 ; 5 5 e E :87GR: 5 7 5 RzW<]: 5 ; 5iE T 5 ¦ >H:U E ;$>e%:G7 5 ; 5<E +R Ç M'9 53Ê­D7?Q Hº H<½ H7D C`&h=^iXiS_iS7_£`\[iSXd=:`S\&d ZXZXZpÌb[7S Ò ÓªÒ Óf ' ZXZXZpÌÌ

â ÓÕÔÖ9Öyìíå!æ"î"äïå!æ"ØñKò Ö×yäZå!æØ ñKò Ö×yäZå!æØ

â åéÖ×9ÿÒ&×yãÑØ%Ò%ÓóäZå!æØ mØ&×å!æãÑØ&Ò%Óóäïå!æØmØ&×å!æìå!æ!î"äïå!æØ ç åèØ%éKê ò é!× Û ç åèØ%é2ê mØ&×å!æìå!æ"î"äïå!æ"Ø

jØ'R78)C 3ui?dg>W<M 5 ;b­781 5 78 E 'e:U­:8'>0L7U * )&Øl!#±$'&HCû»>e%:G7 5 ; 5 eT 5 pX:G>7GW<'eMO!#±$'&Vy;$ E +7G.: 5 e 5 7 5 78W<)C'">V]3 5 e E :G78R â ; 5 RW

e¯; 5 :G' 5 ²Ä%$ û '&ýnJY%Ra 5%EGE R; 5 E[Ç M.9 5E VRWË; 5 :8. 5 Zü ýn+VY%R`;$ E +7G>15E 78®W)+:G7 5E ¦ 5 7GWi E ; 5 W)]+: 5 ; 5 Vt 5zE +Re; 5 ; 5 :8. 5 !"XVyYR);$ E +7G>1 5 ù E ú 5 Wie; 5 ù E úF; 5 W)]+: 5 ; 5 C

9:;%<:=?>=A«CBEDb«F ÛGQK%N ; [ Ð6; [ ¥QÓ6; [G > G%K%N ; [%O ; [ ¥Cy G LQ;%p G :¥Î GQK < K%N :;&ß^T9=%:6^ G 6&ïQv6L G n K6Z ; H ­\ ×_ ; j6GUHMK Do` HQJ YYåÕd Z ^ K Ó6; [G Yt` HJ YYçÕe Î K = KG > G&HK Ó6; [G ^P` HJ YYåÕgh G LQ;&p G :¥Î GQK aS` H6G ßt G L%;%p G :¥Î GQK yQ9ÍQÓB JHZ ; H yu<Õi ëk ×

Page 153: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D?ªD §¨X¯ D|%@i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ ">"

Frq K :¥M×FuF K Do` ä Q9ÍQÓ YP`Tn6=%:=b>Y Z ^ K yua ä Q9ÍQÓ ^T`M^ K = KG > GUHK yu<Fr\ ×P: GQK&J : HSH6G ß ÛGQK%N ; [ Ð6; [ ¥QÓ6; [G y K DöÈYåö3^Õ ëFr_ ëF|d L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Fre ×Frg LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl> GQK%N ; [&O ; [ ¥l&ÕFh : G%K%J : HSHG ß ÛGQK&N ; [ Ð6; [ ¥QÓ6; [G y K DöÈYåö3^ÕFri ëFrk ë

·\MK E8E Ê­D7? Hº H<½ HD ].W<M'+W<+e%:U;< 5 W 5 W 5E :G7U 5 7 5 7UWi3C."qC9:;%<:=?>=A«CBED£'

F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^ ÛGQK%N ; [ Ð6; [ ¥QÓ6; [GMG v KG&H[ ^tÑ G&H6G :=Y&Ó6; [G ×g n JO Y Z LT Z ^ K Ó6; [G n6=%:=b>áÕh n JO Y Z LSÎ K = KG > G&HK Ó6; [G ^ K = K Õik n JO Y Z L ÛGQK%N ; [ Ð6; [ ¥QÓ6; [G yu; j6GUHK ö( Z ^ K Ó; [G Yåö Î K = KG > G&HK Ó; [G ^Frq ×FuF ^ J n G :Cy K ÕFr\ n6=%:=b>m`AYçÕFr_ ^ K = K `A^ÕF|d ëFre ë

· Ç R78<C 0W 5%E :878<<­781 5 7G 7U 5#E >R'e%:G(W)]+: 5 ; 5

b[7S«Ò Ó«Ò Óf iSXd:b'[7gKÒ ÓOÑb[XS¼` f +MK Ç R7U`C V> 5 ;$>W 5E 1+7P:8W3t]+W Y%R 5 W<]: 5 ; 5 9!l¼ü Ì 5 e E :87G¯RW» ³?&½ HD

+WËYR^+;»>M.>W)>e%: 5 ]aRWe¯; 5 :8. 5x'A˾­D o Cé½ HD V+Y%R^ 5 7G78 E 5 e;$ J ;>MK7US>T 5 ;$RW ; 5%E 7U®W<+:G7 5E ¦ 5 7GWi E ; 5 W)]+: 5 ; 5 C m Rb;$ Ç eKS+T 5 ](;;e 5 7 5 78Wi C."NCZ= 5 :8Y%R7U&>;-178'­I1+MXV 5 W)]+: 5 ; 5 78K&RW xA6Ë6½ H7D Y%R]ä'e E +78'; 5 eRW » ³?&½ HDù M''e9 E "N/"NúV6Y%RVF 5 7 E R1+_V@]'eM'R â ; 5 5 W 5Ç M'9 5 ;$RW xA6˾­D o CE½ HD ù M'.pe9 E "> %ú C[? EGE NHM.:G'W 5 .e;(¦§_^7:8»; 5 » ³?&½ HD Y%R^]»78: 5 78e; 5 t+M 5 W<]: 5 ; 5ù M''e9#/%ú C

9:;%<:=?>=A«CBEDb®F Z ^ K Ó6; [G n6=%:=b>Y Z ^ K y G LQ;%p G :Q¥Î GQK < K%N :;&ß^X9=%:6^ G 6&ïQv6L G n K6Z ; H ­\ ×_ Z ^ K Ó6; [G nc` HJ YYçö I ` HQJ YYåÕd ZbHKPj `SsÕe ; j6GUHMK Do` HQJ YYåö K© ` HJ YYåÕ

Page 154: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬">% !Í"Ioi

i

i

i

i

i

i

i

"+ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

ý¥Ü Ø*ÞÖ ä ô@Ü3Ý6âóõ­Ö ä Üö Ö£÷ Ü3èøçáèØ ö Ö£÷ Ü3èøcÚ ý¥Ü Ø*ÞÖ ä ù:Ö äú õ³Ö ä Ü

û çá×*Ø(õ³Ö ä Ü Ø r Ø*Ü3ÚKÜ3èØ(õ³Ö ä Üü rß ô@Ü3Ý6âóõ­Ö ä Ü û çá×*Ø(õ³Ö ä Ü

ö Ö£÷ Ü3èøc×*Ø ß çáèé û çá×*Ø(õ³Ö ä Ü ü rß ô@Ü3Ý6âóõ­Ö ä Üü rß õ³Ö ä Ü ö Ö£÷ Ü3èøçáèØ û çá×*Ø(õ³Ö ä Ü

ö Ö£÷ Ü3èø t ü rß õ³Ö ä Üö Ö£÷ Ü3èøcÝ

j['R7U)C bu#?kg$>W)M 5 ;$­7G1 5 78 E .e%:8­:GK+)78(!"%$'C

g ëh ×i K :¥M×k Frq y K Do` ä ÒUÓ ê] K Do` ä Î%QÒbÓÑ ò] K Do` ä ÒbÞÓ K© ` ä ÒUÞÓ FuF y ä ÐÍÙ Mä QÐÍÙQ × j ffÕ ë Fr\ ×Fr_ I ` H6G ßS Z ^ K Ó6; [G y H6G ßcØ=Q:QÓ6; [G y K© ö j ÕF|d nc` H6G ßS Z ^ K Ó6; [G y H6G ßMØ=Q:QÞ G LQY&Ó6; [G y K Dö I ÕFre ëFrg y ä Ù ÛÛ Í × j `SsÕ ë y K Dí` ä ÒUÓ ò] K Do` ä Î&QÒUÓÑ ò]üK Dí` ä ÒUÞÓ Fh K© ` ä ÒUÞÓ y ä QÐÍÙQ Mä ÐÍÙ × j ffÕ ë Fri ×Frk I ` H6G ßS Z ^ K Ó6; [G y H6G ßcØ=Q:QÓ6; [G y K© ö j Õ\uq n B= [[ y HG ßAØ=Q:QÞ G LQY&Ó6; [G y K Dö I QÕ\F ë\u\ \u_ ×P: GQK%J : H nÌÕ ë\d ë\ue L%= K L N y9=Q:^ G v6L G n K6Z ; HzG \ug ×\h LQ; H ^ J > G è HK6Z Yçyu<Cö G öílén=Q:=b>Y Z ^ K l%Õ\ui : G%K%J : HSHQJ YYåÕ\uk ë_uq ë

Page 155: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D?ª@ §¨X¯ D|i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ ">/

? E8E )]0RW W<]: 5 ; 5 Y%RVy>W + EG5 ;0>7G7 5ÍE .e%:8­:GK 5 Vt 5 ;$<7G+: 5 7Ge7 E .W<M' E W<+e%:G 51M 5 7 |CXC V 5 E EGE beT 5 pX:G>7GW<'eMB;$>7G'1ii+;$+K<1_+K<VL 5 7:Ue%: 5 V 5 W<]: 5 ; 5 Y%R 5U9W 5 Rä;+1J E :U7a78+78; 5 L7Ub:878:87aRW Ç M'9 5 .eg$ E :G>e%:GC=» Ç R7UzC VB1>W 5%E 'e;Y%R<g$ E :8iRW He' 5 e¯äL7UÍ78+78 E +e%:U7 5 5 Wie; 5

E8EG5 +'; 5 5 W<]: 5 ; 5 C f[5 7G]>W ]7GN E5 Y%R E *vW 5%E +_> E ;$V` 5 eLM' E 78W 5E ­781 5 7G E 'e%:8­:8'>VP78> 5 e9N+7JY%R< 5 Wie; 5 ]0 EGE C0¤ e¯ä;+1>7GKVy;$0¦§: 5 Vy78+78 E +e%:U75 R-RWiz:G78.R'S>T 5 V 5 R&RW ü ý 5 R&RWý V 5 R-RW 5 W<e; 5 5 W< 5E : 5 :8C fZ5 7( E8EG5 V 5e¯; 5 :8. 5;:?A?&D>³D?U½ HD Y%R<¦ 5 F;$>+M'78; 5 5 W 5Ç M'9 5 ; 5 e¯ ÊMD7? HQº H<½ HD ]Ve1+7U;;$VØRW e¯ E :G7U: 5 V 5 R,W)>M.9 5 7NV[;$ Ç eK; 5 5 7bW<> 5 ;#RWiMK E8E # E :G7U:8Cf 7U,+;:G' 5 ;$- 5 Wie; 5 ;M.'eR+W

X++Va:G>7G>W 5%E RWþ:G' 5 ;$e¯Ñ;$ E :G'e%: 5 V

E Rt+M' EGE b;$ ;?A?=D>­D?&½ HD C m 5 M.>H: 5 7»78+L7U7aeÍ; Ç eKS+T 5 ;$ x'A6˾­D o CE½ H7D W 5E p:G7U;ze 5 7 5 7UWiäC'""VB.7U­e 5 :870YR#Y%R+MKMK E8E 0¦ 5 6;$ Ç eK; 5 W 5E RPMK E8E #;$;:?A?=D>³D:?&½ HD C l E8E5 5 78Y%RaRWiJ;$NMK7US+T 5 ;$a178K­I1+M%]`RW; 5E 5E8Eâ 1> E 5 Wie; 5%EY%R< 5 ;$>Wÿ78>++7(e 5 5 7G 5 ;$iRW W<]+: 5 ; 5 iR$:G'M'._N78+W 5E E8E )W< E W 5 :G' 5 ;ie¯x'A6˾­D o CE½ HD 78)78+78 E +e%:U76:8MB 5 WieL; 5 C¤ÿeT 5 pX:G+78W<.eLM !"XV +Rv2.W<M'+W<+e%:US+T 5 ]W 5E :G7U;¬e 5 7 5 7UWiàC'">V

:G7U:U-;äU9Wi7 5E W<]: 5 ; 5%E 5 7878 E 5 e;$+e%:8 E 5E 5 Wie; 5%E ;&M''eR>WäCÑ· E8E 'WVe¬W< 5 7GKà; E 1+_+ E V»eT 5 7GN E à+7GK7zRWÙe¯2YR&78+78 E +e%:8RW© 5 Wie; 5 V`Wi EE .W<M' E W<+e%:G#78: 5 78e7 5 e¯&+7GK; 5 ;+e%:G7 5 ;Y%R>M. E W<]: 5 ; 5E C-¤:G' 5 ;$#e¯YR#+M'78: 5 7GeLb:8+WV+e%:UT 5 VY%R E +7 ;:?A?&D>³D?U½ HD ù f 7 5 78Wi0C ú C

9:;%<:=?>=A«CBED ¬F Î K = KG > G&HK Ó6; [G ^ K = KG > G&HK y G L%;%p G :¥Î GQK < K%N :;Uß^X9=Q:^ G 6%ï%v6L G n K6Z ; H ­\ ×_ Î K = KG > G&HK Ó6; [G ^P` HJ YYåÕd Z ^ K Ó6; [G YåÕe ; j6GUHMK Do` HQJ YYåÕgh G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yÎU Û Ò%ÙU6&ÓB JHZ ; H yu<Bu: G >;Qp G yîÒbÞÓÕi G LQ;&p G :¥Î GQK a © ` HG ßS G L%;%p G :¥Î GQK yQÐÍÙ%B JHZ ; H yu<B: G >;%p G yéÒUÞÓÕk ëFrq ×FuFÚK :¥M×Fr\Fr_ yF|d Í#QÍQÞ/y © Fre ^X`tp=Q: [G LQYåyaDQ ä Î& Û Ò%Ù&&Ó Frg ]Fh ^X`S= K : ZbO ^ K = K yuaDQ ä ÎU Û Ò%ÙU6&Ó Fri ]Frk ^X`Tn: Z?HK ^ K = K yuaDQ ä ÎU Û Ò%ÙU6&Ó \uq ]\F ^X`t: G = [ ^ K = K yuaDQ ä Î& Û Ò%Ù&&Ó \u\ ]\u_ ^X`t: GQK&J : H ^ K = K yuaD% ä Î& Û Ò%Ù&6&Ó \d ]\ue ^X`M^ J n G :6^ K = K yuaDQ ä ÎU Û Ò%ÙU6&Ó \ug ]\h ^X` Z a6^ K = K yu<\ui ]

Page 156: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D?ªª §¨X¯ D|%«i

i

i

i

i

i

i

i

"+ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

\uk ^X`ta;%:^ K = K y<_uq ]_F K Do` ä QÐÍÙ% YP`M^ K = K Y Z ^ K yua © ä QÐÍÙ% ×S^P` H6G ßSÐ6YQ;L j Ó6; [G y K DöÈYÕ ë_u\ ]_u_ K Do` ä ÐQÍ Aä Î& Û Ò%Ù&6&Ó ×S^T` H6G ßSÐ: G = j Ó6; [G y K DQÕ ë_d ]_ue K Do` ä ÎU Û Ò%ÙU6&Ó ×S^T` H6G ßtÓ6;UnÓ6; [G y K D%Õ ë_ug ×%: GQK%J : H ^Õ ë_h ë_ui L%= K L N y9=Q:^ G v6L G n K6Z ; HzG _uk ×dq LQ; H ^ J > G è HK6Z Yçyu<Cö G öílU^ K = KG > G&HK l%ÕdîF : G%K%J : HSHG ßSÓ6;UnÓ6; [G y K DQÕd\ ëd_ ë

9:;%<:=?>=A«CB © sF n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde = O ^ K :=L K n JQO Y Z LALQY%=^^tÎ K = KG > GUHK Ó6; [GcG v KG&H[ ^tÑ G&H6G :=Y&Ó6; [G ×gh n JO Y Z LSÎ K = KG > G&HK Ó6; [G y; j6G&HmK i ×k ^ J n G :Cy K ÕFrq ëFuF ë

= 5 > EG5 ;<:G+78W 5E RW 5 Wie; 5 5 W< 5%E : 5 V[U9Wi;z 5 W<]+: 5 ; 5 )*HüJeM'.pe9z/"3; 5 W<]: 5 ; 5 ))!#c`7G+: 5 78e<RWiÍM. E :UÍ;$) 5 W<e; 5%E V 5 R E *vVtRW » ³?&½ HDRv 5E 5 W< 5 e>e%:G E ù Ç M'9 5%E ú E T 5 e¯ E ; 5 :8. 5;:?A?=D >³D?&½ HD Cz=» E8E Í> EG5 Vk;$>e:87 5 ; 5W<]: 5 ; 5 5 787G E 5 eL;$+e%:G) 5 eT 5 p:8+78W<.eMe !#XVy]<+7GK; 5 RW e¯ ºOC oÉ ½ HD +Rv 5Ç M'9 5 ] 5 » ³?&½ HD 7G+: 5 7Ge; 5 5 7¥ ¼ü C

¤êW<]: 5 ; 5 )*Hü6 )MK E8E ºËC oÉ ½ HDzE T 5 W 5%E :878; 5E e 5E 7 5 7UWi E Cª$"^JCªC·Q;$ Ç e'S>T 5 ;$¨ )*¼ü [R$:G'M'._N(J 5 78;>W ;aU9LWi; E 78>+R7 E '1 E 7U»W 5 e:U7k M. E :U;$J 5 W<e; 5%E CZ= 5 :GJYR 5E e¯ E Y%RJ 5 W< È +W 0M. E :80 5 ;$>W E >7F;$JY%RMKY%R+7 E Rt+M' EGE ;$ ;:?A?&D>³D?U½ HD V:G]JW 5E W 5<5 R$:87 5%EµºOC oÉ ½ HD³ C

9:;%<:=?>=A«CB © DF Z ^ K Ó6; [G ^ K = K Y Z ^ K y G LQ;%p G :Q¥Î GQK < K%N :;&ß^X9=%:6^ G 6&ïQv6L G n K6Z ; H ­\ ×_ Z ^ K Ó6; [G Yt` HJ YYçÕd Î K = KG > G&HK Ó6; [G ^P` HJ YYåÕeg G LQ;&p G :¥Î GQK aS`tï Z :6^ K B^ K = K Y Z ^ K B: G >;%p G yÒUÞÓB JHZ ; H yu<Õh ëi ×k ^X`M^ K = KG > G&HK yua- YT`M^ K = K Y Z ^ K y<

Page 157: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ % X i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ ">%o

Frq ×X: GQK%J : HAH6G ßS Z ^ K Ó6; [G yî^çö3YÕ ëFuF ë

9:;%<:=?>=A«CB ©©F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^XÐ6Y;L j Ó6; [GAG v KG&H[ ^SÎ K = KG > G&HK Ó; [G ×g n JO Y Z LT Z ^ K Ó6; [G ^ K = K ^çÕhi n JO Y Z LTÐ6Y;L j Ó6; [G yu; j6GUHmK öæ Z ^ K Ó6; [G Y6k ×Frq ^ J n G :Cy K ÕFuF ^ K = K ^P`AYçÕFr\ ëFr_ ë

D W3t]+WË7U 5 5 WieL; 5 0FL7U 5 5 Wie; 5 1_+ 5 VJ 5 e E :G78RS+T 5 ; 5 e¯]a¦ >H:U;$>e:87 5 ; 5 W<]: 5 ; 5 ))!"XV[e E M.'e9 E //ä/oC=» E8E z+ EG5 V[ E8E E e¯ E3E T 5E +W<78¦ 5 M'9 E E ¯, 5%EGE R+W 5 : 5 º>eò;$78¦ +7I+eLKC · E +M' EGE E û %ýntýn9ýn E T 5;$ Ç eK; E ;$b 5 78; 5 5 W 5E 7 5 7UWi E Cª/)CªC

9:;%<:=?>=A«CB © @F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^XÐ: G = j Ó6; [GAG v KG&H[ ^SÎ K = KG > G&HK Ó; [G ×gh n JO Y Z LTÐ: G = j Ó6; [G yu; j6GUHmK i ×k ^ J n G :Cy K ÕFrq ëFuF ë

9:;%<:=?>=A«CB © ªF n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^XÓ6;UnÓ; [GAG v KG&H[ ^tÎ K = KG > G&HK Ó6; [G ×gh n JO Y Z LTÓ6;UnÓ; [G yu; j6G&HK i ×k ^ J n G :Cy K ÕFrq ëFuF ë

Page 158: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D?ª« §¨X¯ D|%®i

i

i

i

i

i

i

i

"+% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

ödW 5E : 5 Wi7 5 +g>W<M 5 1 E : 5 e%:G+78 5 78W)>e%:GVM'.+'78W<+e%:G(W 5 ; Ç >; 5

b[7S«Ò Ó«Ò Óf iSXd:b'[7gKÒ ÓOÑb[XS¼`

`¤¢ ËÌD +7 â W 5%E )­7G1 5 78 E .e%:U­:GK+<; Ç R7U)C."N C

mØ×å!æãïØ%Ò%Óóäïå!æ"Øç åèØ%é2ê ò é7× Û ç åèØ%éKê mØ&×å!æìå!æ"î"äZå!æØ

ñ2ò Ö×yäïå!æ"Ø ìÓóå7Ò¦è"äZå!æØþ Ô|ÿyãÑØ%Ò%ÓóäZå!æØ ñ2ò Ö×yäïå!æ"Ø ñ2ò Ö×yäZå!æØ

ç åèØ%é2êÖ×9ÿ ò é ñ2ò Ö×yäZå!æØ þ ÔÿyãïØ%Ò%Óóäïå!æ"Ø äïåäZå!æØ ñKò Ö×yäïå!æØþ Ôÿyäïå!æ"Ø ç åèØ%é2ê ò é7× ñ2ò Ö×yäZå!æØ B×9ÿ ò ëäZå!æØ

ç åèØ%é2êë þ Ôÿyäïå!æ"Øç åèØ%éKêÒ

j['R7U)C'"> buÍ?kg$+W<M 5 ;b­781 5 78 E 'e:U­:8'>0L7U¶ !#c6l ¼ü C¤òW<]+: 5 ; 5 üG k] 5 78 E 5 e E ­I1+Mt+MK78'S+T 5 ;$»RWe¯b; 5 :G' 5 ¶­?ËåXB&½ HD VN+Rv

MK E8E ( 5 787G E 5 e;+e%:G(]W 5E :G7U;0e 5 7 5 7UWi0Cªo$C

9:;%<:=?>=A«CB © F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^TÍ K : Z?O Ó6; [GAG v KG&H[ ^SÎ K = KG > G&HK Ó; [G ×g n JO Y Z LTv%n: G Ó6; [GAG v%n:Dö G v%n: © Õhi n JO Y Z LPÍ K : Z?O Ó6; [G yu; j6GUHmK öæv%n: G Ó6; [GAG Döæv%n: G Ó6; [GAG© k ×Frq ^ J n G :Cy K Õ

Page 159: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D?ª7' §¨X¯ D| ¬i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ ">q

FuF G v&n:Do` G DÕFr\ G v&n: © ` G© ÕFr_ ëF|d ë ¤: 5 º+e;$b78¦ >7I>eK)] 5ÍE .eLMÌ;$0:G78'RKS+T 5 3 E g$78 E8EGÈ ElD ¹ N/˯º D ¹ N/˹ 5 7Gp

78 E 5 e;$+W 5E MK; 5%E E Y%R>78; 5 i;$'7G>H: 5 ;ä:G78.R'S>T 5 Vy7G E t>:G'1IW<+e%:GC0= 5 W<]: 5 ; 5 üG iù f 7 5 7UWiäCªúV 5 e¯ ¶­?Ëå=B%½ HD ]iW 5 e%:U; 5 5 W U9W<;ä 55ÍeM'.e9L¬"N VdY%Rz;+1 5 M.1Í-7G'W<+'78g$78 E8E T 5 VZä; 89UüG 5 R¡L89 üGVFY%R78: 5 7GeL3 E >ReL;Ck= 5 :GY%RVL E 7F; E +78+W¨; 5 W< E W 5 :G' 5 V)g$78 E8E T 5 78: 5 7GeL; 5 7y553 5E8E RBM.RWi E 78 E :G78'S È EaE 'e%:8­:8'> E VIv­< 5 W<>e:U; E e 5 + â :8RM 5 C

9:;%<:=?>=A«CB © «F Í K : Z?O Ó6; [G = K : ZbO ^ K = K y G LQ;%p G :¥Î GQK < K%N :;&ß^X9=Q:6^ G %ïQv6L G n K6Z ; H ­\ ×_ v%n: G Ó6; [GAG Do` HJ YYåö G© ` HJ YYçÕd ; j6GUHMK Do` HQJ YYåÕeg G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yuÍÎÎÒ%Ñ%ÓB JHZ ; H yu<Õh ëi ×k K :¥M×Frq G Do`SY%p=Y J6G yaDQ K Do` ä ÍÎÎÒ&Ñ%Ó FuF y G© `S=Y;L G v&n: G ^^ Z ; H yu< ]üG© ` G v%n: G ^Q^ Z ; H y<Fr\ ×X: GQK%J : HAH6G ßAÍ K : ZbO Ó; [G y K Dö G Dö G© Õ ëFr_ ëF|d L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Fre ×Frg LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl?= K : ZbO ^ K = K l%ÕFh : G%K%J : HSHG ßAÍ K : ZbO Ó6; [G y K Dö G Dö G© ÕFri ëFrk ë = 5 :GY%R 5%EdÇ M.9 5%E ; 5 e¯ ¶­?ËçXB%½ H7D 5 ;$>W E >7F;H¦ >7G>e:8 E :G' 5E ;$(g$78 E8E T 5 C f[5 7

g$>W)M 5 Vt E >Re;ig$78 E8E T 5 5 ;$ E >7 RW< E5 Wii'e­78' 5 RRWi#W0RM.:G'M.K+S+T 5 V 5 RE .W<M' E W<+e%:GdRW<` 5 e E :8e%:GC f 78`>;aRWê;$ EGE E :G' 5%E ;$@g$78 E8E T 5 V+;$>1>W 5%E :G>7BRW:G' 5 ;$H¦ >7G>eK; 5 ;(e¯i7U0Y%RJ 5E8E W 5E 7GN 5 e9>++7` 5 W 5 :878:87aY%R+MK)g$78 E8E T 5 C· E8E .WÙ 5 W 5,Ç _+>W 5E 5 W ;:?A?=D>³D:?&½ HD V6;$ Ç e.W 5Eí¸ ¹ N/ËD%½ HD 5 W 5 RWi¬+M' EGE E :878:8b;)Y%RM 5%E ;$>Wi E e¯ E YR 78+78 E +e%:UW 5E :G' 5%E +g$ E :G>e:8 E ;$(g$78 E8EÈ E@E T 5E Rt+M' EGE E C@¤ 7 5 78Wi3Cªq37G E >e:U0<;$ Ç eKS+T 5 ; ¸ ¹ N/ËD%½ HD C

9:;%<:=?>=A«CB © 'F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde = O ^ K :=L K n JQO Y Z LALQY%=^^Xv&n: G Ó6; [GAG v KGUH[ ^tÑ G&HG :=Y&Ó; [G ×gh n JO Y Z LTv%n: G Ó6; [G yu; j6GUHmK i ×

Page 160: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"> !Í"N i

i

i

i

i

i

i

i

"+% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

k ^ J n G :Cy K ÕFrq ëFuF ë

¤2eT 5 pX:G+78W<.eLM54a 5 ;$F78: 5 7GeL7ÌY%R:G7 5 :G' 5%E ;$ E :G'e%: 5%E ;$Fe¯ E VN: 5 ; 5%EØE RPMK E8E E;$ D ¹ N/Ë6½ HD Cʤæ78'W)>.7 5 ]RW x'AË6½ HD V6YRLe; 5,5 eLT 5 pX:G>7GW<'eM`78> 5 e9> 5 W 5g$78 E8E T 5 t+eL E 7G+¦ +7I+e+'&RWi178'­I1+M@ 5 W 5 >WÐ^¢¤g- C&·« 5 e E :87GRS>T 5;$ EGE 3e¯ä]0¦ +.:8zeÍM''e9""0; 5 7 5 78W<iC C3¤Ëe 5 W)<;z178'­I1+MÌ])R$:8.M'._N; 5 7U78K7`RW x'AË6½ HD V$+RviMK E8E J¦ 5 BW 5E :G7U;)e 5 7 5 7UWi0C."I$V EGE e¯i]b78: 5 78e; 5 C½^Wi<­781 5 7G E .e%:8­:GK+07U<<:G78'RKS+T 5 ^¢gw ]W 5%E :878;0e Ç R7U<C'""C

9:;%<:=?>=A«CB © ®F v%n: G Ó6; [G Y&p=Y J6G y G LQ;&p G :¥Î GQK < K%N :;Uß^T9=Q:6^ G 6%ïQv6L G n KZ ; H ­\ ×_ v%n: G Ó6; [GAG Do` HJ YYåöd G© ` HJ YYåÕe ; j6GUHMK Do` HQJ YYåög K© ` HQJ YYåÕh Z ^ K Ó6; [G Yt` HJ YYçÕi ëk ×Frq K :¥M×FuF K D ` ä ÒUÞQÓ × G Do` HG ßSØ=Q:%Ó6; [G y K DQÕ ëFr\ yFr_ K Dí` ä ÐÍÙ SG© ` G v&n: G ^^ Z ; H y HQJ YY6 ä ÐÍÙ F|d × G Dí` H6G ßcÒ H[G vQÓ6; [G y K Dö G Dö G© Õ ëFre ]Frg 6Í#ÍQÞCy@Fh K Dí` ä Þ6% TK© ` ä ÒUÞÓ Aä 9ÍQQÓ YP`t=Q:<Y Z ^ K y HJ YY6 ä 9Í%Ó Fri × G Dí` H6G ßAÙ=YQY&Ó6; [G y K Dö G Dö K© öÜY6Õ ëFrk ]\uq K Dí` ä Þ6% TK© ` ä ÒUÞÓ \F × G Dí` H6G ßtÞ6; K Ó6; [G y K Dö G Dö K© Õ ë\u\ \u_ ×X: GQK%J : HG DÕ ë\d ë\ue L%= K L N y9=Q:^ G v6L G n K6Z ; HzG \ug ×\h LQ; H ^ J > G è HK6Z Yçyu<Cö G öílbY&p=Y J6G l%Õ\ui : G%K%J : HSHG ßSØ=Q:%Ó6; [G y K DQÕ\uk ë_uq ë

¤ R$:G7 5 :8. 5 ;$@e¯JY%R@ 5 ;$ E >7Ø78: 5 78e; 5 t+M 5 eT 5 p:8+78W)'eM55F]FRW ¼2HD ¹ ½ HD VRv3MK E8E `]»W 5E :G7U;Je 5 7 5 78W<JC VY%R 7G>78 E +e%:8'e;$+gS+T 5 ;$»RW<3178'­I1+M 5 Wî;$'W<+e E T 5 Wi 5 7`Y%R_+>7 5 CØ? EGE e¯< 5%EGE RÌ;R E +g7G EGEGÈ E 5 W 5)Ç M'9 E C

Page 161: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"> !Í"N"i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ ">

B×9ÿ ò ëäïå!æ"Øþ Ô|ÿyäïå!æ"Ø Î ÿyØ%äZå!æØç åèØ%é2êÔ

j[.R7U)C.""^u#?kg$>W)M 5 ;$­7G1 5 78 E .e%:8­:GK+)78p(+-n.K0&2àù655Iú C

9:;%<:=?>=A«CB ©Q¬F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^SÒ H[G vQÓ6; [GAG v KG&H[ ^Tv%n: G Ó6; [G ×g n JO Y Z LTv%n: G Ó6; [GAG v%n:Dö G v%n: © Õhi n JO Y Z LAÒ H[G vQÓ6; [G yu; j6GUHmK öæv%n: G Ó6; [GAG Döæv%n: G Ó6; [GAG© k ×Frq ^ J n G :Cy K ÕFuF G v&n:Do` G DÕFr\ G v&n: © ` G© ÕFr_ ëF|d ë ·78.W<+'7Uz'e;$K+Y%RMdz17GK­I1>MZY%R< E :U­ E +eL; 5 .e;g;äi E >ReL;YRLMk] 5

â e;$K` E >7[R:G'M.'_>; 5 CZ= 5 :G`Y%R` 7G'W<+'78 g$78 E8E T 5 5 ;$ E >7ZRWe¯; 5 :G' 5xA6Ë6½ H7D V 5 W 5 e 5 > EG5 ^eÒbó Ó¤¢¤gw V%Wi E 5 ;$ E +7@:8W3t]+W;$ 5 R$:G7 5E :8. 5E V% 5 7@g$>W)M 5 V5 R:G7 5S¼2HD ¹ ½ HD Vt 5 W 5 +WÏ^ªÒ3©=ÓªÒbó Ó¢g- C<? E8E <:G' 5 ;$ie¯ä]# 5 e E :G78R â ; 5 eM'.e9L-">ä; 5 7 5 78WiÍCªC)¤e¯z]i78K; 5 R$:G'M'._Ne; 5 5 W 5ÍÇ M.9 5%E z17GK­I1>M Æ@º VBY%R 5 e%:G]+W 5¾x'A6Ë6½ HD Y%R^¦ 5 L+7GK; 5 eLbM'.e9Li""^78+7G E >e:Ue; 5 b1I7GK­I1>M E +76.e;g;Vb<g$78 E8E T 5 7G+: 5 78e;3eLiU9Wi;)89UüGC^¤ e¯#+7GK; 5 ]b:G78.R â ; 5¶J 7G¯7GKÆ@º Cm #:8.1+78W 5E RWi E +Re;'e;$+gS+T 5 VØ+e%:8T 5 RW´e 5 1 5A¼2H7D ¹ ½ H7D ]Í+7GK; 5 :G+eL; 5

5 W 50Ç M.9 5 Æ@º VY%RJ] 5í¼2HD ¹ ½ HD +7GK; 5 e%:8+78 5 7GW<+e%:8V<g$78 E8E T 5 78: 5 7GeL;3 5 7D ¹ NCËD³³ç CP? E8E E >Y=kI>eKJ 5 ;$ E >7d7G>L+:GK;;$'1>7 E E 1+_+ E VRWi7UJ+;(e â 1+Mt;$'e;$gS+T 5 Y%RJ¦ 5 7`7GN 5 e9>+'; 5 e 5 eLT 5 pX:G>7GW<'eMË45CF· Ç R78<C."I3W 5%E :878<<­781 5 7GE .e%:8­:GK+)78)<:G78'RKS+T 5 ^ªÒ3©&Ó«Òbó Ó¢gw C= 5 7 5 78W<¬C / V(W 5E :G7UW 5E 2MK E8E ¾ ?&½ HD Y%R:8W3t]+W© 5 ;$ E >7ä78: 5 7Gp

e; 5 7(55z7G>7G E >e%:8 5 EGEG5 RW<&178'­I1+M ù+W) 5 ú3;$ÍRW 5 $v*+: 5 5 W 5^eZ ¢¤g- C[û(bW< E WibWie+'783YR»e 5 + EG5 ;3.eL;$gS>T 5 V 5 ;+W 5E :G>76WHMH:8.M 5%E+ E8E5%E Í>W< 5E VP 5 W 5 >W ^OZ Z ¢¤g- C fZ5 ;$>W 5%E Vy.e;VP 5 W0'e7 .e;gS>T 5+ E8E5 <RWî>W< 5 V 5 W 5 >W ^ªÒbÓªZ ¢¤g- 5 R^eZ ÒbÓ¤¢gw C@¤7 5 + E8E5;$Í 5 e E :G78RS>T 5 ; 5P¾ ?&½ HD ] E .W<'M'7>C·î>;> E W<+e%: 5 Y%R 5 5 787G<eM''e9&"#;$

Page 162: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"Io !Í"Ni

i

i

i

i

i

i

i

"No Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

B×9ÿ ò ëäZå!æØ éæØ äZå!æØ Î ÿyØ&äïå!æØ

éMæ"Ø äïå!æ"Ø Î ÿyØ%äZå!æØþ ÔÿyäZå!æØ Î ÿyØ%äZå!æØç åèØ&é2êÔ

j['R7U0C."IJuÍ?dg>W<M 5 ;$b­7G1 5 78 E .e%:U­:GK+)78a[j][i + 1] = b − 10

ù655Iú C

55+VRWe¯J]aW 5 e%:8; 5 :8+e; 5 5 W 5 7G'W<+'7 5 Ç M'9 5J5 1M 5 7[>W Æ@º VY%RV 5 W 5 v­ 1'W 5E V 5 ; E >7RW x'A6Ë6½ HD VPRW ¼2HD ¹ ½ HD5 R-RW 5 R:G7 5í¾ ?&½ HD VP# 5 W 5E +Re; 5äÇ M'9 5RW Ç É DQ 5 W 5 e 5 W< ; 5 +W< 5 E +7@R:G'M.'_>; 5 Ck=» Ç R78bC."N/V%W 5E :G7UW 5E 0­781 5 7GE .e%:8­:GK+)78)<:G78'RKS+T 5 ^ªÒbÓªZ ¢¤g C

9:;%<:=?>=A«CBu@sF n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^XÞ6; K Ó; [GAG v KG&H[ ^Xv%n: G Ó; [G ×g n JO Y Z LTv%n: G Ó6; [GAG v%n:CÕh n JO Y Z LP; j6GUH a Z%G Y [ Õik n JO Y Z LTÞ6; K Ó; [G yu; j6G&HK öðv%n: G Ó6; [GMG ö(; j6G&HAK© Frq ×FuF ^ J n G :Cy K ÕFr\ a Z&G Y [ ` K© ÕFr_ G v&n:A` G ÕF|d ëFre ë

?^V 5 7ËHMH:8.W 5 V 5 e¯µ ACXCE½ H7D W 5E :G7U; 5 e 5 7 5 78Wi C /"@:UW3t]+WË 5 ;$ E +7k78: 5 7Gpe; 5 5 7Ë55+V7G>78 E +e%:8e; 5 RWi`U9Wi;F;kW)]+: 5 ; 5 5 W 5 +W¦^eZ b­Ñp© ¢g- CáÍIC

Ô¦õ³ÖØ*Ü î ÙÜ ã ×Ü3Ú r èØ*çáÝ r ÚKÜ3èØ*Ü ã Ü3××*ÜVÝ3Ö Ú r è ä Ö1èÖ ï r ×Ü3èØç ä Ö ã Ú r × r èÖ ×× r é ß*r ÚØçáÝ r åÜ ß ÚKç ØÜ î ÙÜÜ3âáÜMÖ'Ý3Ö ßGßr ×Ü3Ú å ß Ö t âáÜ3Ú r ×ê××*Ü­Ü ßGß Ö ä Ü æ Ü ß O×Ü ßr åÖ èØ r ä ÖªåÜ3âáÖ r è r âáçá× r ä Ö ß ×*Ü6ÚèØ*çáÝ6Ö ã î ÙÜM×Ü ß ËØ ß*r Ø r ä ÖèÖVÝ r åà Ø*ÙâáÖ ê

Page 163: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"Io$" !Í"N/i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "Io$"

B×9ÿ ò ëäZå!æØãÑå×yäZå!æØ Î ÿyØ&äïå!æØ

éMæ"Ø äïå!æØ ç åèØ%é2ê þ ÔÿyäZå!æØ Î ÿyØ%äZå!æØç åèØ&é2êÔ

j[.R7U0C."N/u#?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+)78a[i].x = b − 10

ù354NúC

9:;%<:=?>=A«CBu@DF n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^PÙ=YYUÓ6; [GAG v KG&H[ ^Tv%n: G Ó; [G ×g n JO Y Z LTv%n: G Ó6; [GAG v%n:CÕh n JO Y Z LP; j6GUH > GQK%N Õi n JO Y Z LT Z ^ K Ó6; [G =Q:Q<6^çÕkFrq n JO Y Z LtÙ=YYUÓ6; [G y; j6G&HK ö(v%n: G Ó6; [GAG ö(; j6GUH >áö( Z ^ K Ó6; [G Y6FuF ×Fr\ ^ J n G :Cy K ÕFr_ G v&n:A` G ÕF|d > G%K%N `í> ÕFre =Q:Q<6^P`SYçÕFrg ëFh ë

? E8E 0e¯Í]3+7GK; 5 eiM'.e9"N#; 5 eT 5 pX:G>7GW<'eMO45)3 5E8E RØ 5 W 5 78.W<+'7 5iÇ M'9 5RWig$78 E8E T 5 Y%R'e;$K+,;$Y%RM 5 $v*: 5 ;$ E *vp E zR:G'M.'_>7iRW W<]: 5 ; 5 VF;; 5 t+MK178'­I1+M Ưº Cd¤ E >ReL; 5bÇ M'9 5 ] 5 e 5 W<(; 5 W<]+: 5 ; 5 V$;; 5 5 7FRW Ç É DQ VV 5 7VHMH:8.W 5 VRWÙe¯¤» ³?&½ H7D YR- 5 e%:G]+W RWi¬M. E :UÑ;&g$78 E8EGÈ E Y%R E T 5¬5E 78RW)>e%: 5E ;U9W<;C ? E8E :8. 5 ;$&e¯à 5 ; E >7#R$:8.M'._N; 5 5 W 5E ;+Wi E 1 E : 5E e:8 E V`;$+e%:G7 5;$Ä45C fZ5 7bg$+W<M 5 V[ 5 ;+W 5E :G+7):87G'RKS+T 5 ^eÒbÓªZ ~ Ñ,ö Z ¢gw VZY%R 5E8E R$RW x'AË6½ HD VNRW ¼62HD ¹ ½ HD V+RWX ACXCE½ H7D aRW ¾ ?U½ HD VN 5 e$¦ 5 7GW<FW 5%E :878; 5e Ç R78<C.">C

¤îeT 5 p:8+78W)'eM1*ü¼ü VZR$:8.M''_>; 5 +W 55+V[78> 5 e9><RWiM' E :U;$#g$78 E8EGÈ E 5 e E :G78¯P7U0+MK E RWλ ³?&½ HD C m R<;$ Ç e'S>T 5 ]b;;3e 5 7 5 7UWi3C /%$C

Page 164: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D| ©M§¨X¯ Db«%ªi

i

i

i

i

i

i

i

"No Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

s×9ÿ ò ëäïå!æØãÑå×yäïå!æØ Î "ÿyØ%äïå!æ"Ø

â ÔÓóÓóäïå!æ"Ø ç åèØ%é2êî éMæ"Ø äïå!æØ ç åèØ&é2ê ñKò Ö×yäïå!æØþ Ô|ÿyäïå!æØ Î ÿyØ%äZå!æØ Î ÿyØ%äZå!æØ ñ2ò Ö×yäïå!æ"Øç åèØ%é2êÔ Î ÿyØ&äïå!æØ

j['R7U)C'"+3uÍ?kg$+W<M 5 ;b­781 5 78 E 'e:U­:8'>0L7Ua[i].x(2, k).y = b − 10

ù354NúC

9:;%<:=?>=A«CBu@ ©F Z ^ K Ó6; [G =Q:Q<Y Z ^ K y G LQ;&p G :¥Î GQK < K%N :;Uß^T9=Q:6^ G 6%ïQv6L G n KZ ; H ­\ ×_ Z ^ K Ó6; [G Yt` HJ YYçÕd v%n: G Ó6; [GAG ` HJ YQYåÕeg G LQ;&p G :¥Î GQK aS` HG ßS G L%;%p G :¥Î GQK yÙ ÛÛ ÍB JHZ ; H yu<Õh ëi ×k Frq G ` G v%n: G ^Q^ Z ; H yaFuF ×tYP` H6G ßt Z ^ K Ó6; [G y G Õ ëFr\ y ä Ù ÛÛ Í SG ` G v%n: G ^^ Z ; H yuaFr_ ×tYBu= [[ y G Õ ëF|d Fre Frg ×X: GQK%J : H YåÕ ëFh ë

û 5 MK; 5 ;$'7G>H: 5 ;ä:G78.R'S>T 5 Vt 5 ;$+W 5%E :G+7JRWiäg$78 E8E T 5 e 5 7GWiMVy78+78 E +e%:U;t+MKU9Wi;8 9: üGV 5 R,RW<&g$78 E8E T 5 ;$z+7GKS>T 5 ;$ÍRW 5 $v*: 55 Rà;$zRWi178'­I1+MÌ 5 Wæ;$'W<+e E T 5 C^? E8E 3:G' 5 ;$3+g$7G EGE T 5 ]07GN 5 e9>+';<L>M 5 eT 5 p:8+78W)'eM«.89: üGLVe 5 7 5 78W<0C //C

9:;%<:=?>=A«CBu@@F v%n: G Ó6; [G =Y;L G v&n: G ^^ Z ; H y G LQ;%p G :¥Î GQK < K%N :;&ß^X9=%:6^ G 6&ïQv6L G n K6Z ; H ­\ ×_ v%n: G Ó6; [GAG Do` HJ YYåöd G© ` HJ YYåÕ

Page 165: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"Io/ !Í"Noi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "Io/

e Z ^ K Ó6; [G Yt` HJ YYçÕg ; j6GUHMK Dö K© Õhi G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yQ9ÍQÓB JHZ ; H yu<ök a © ` HG ßS G L%;%p G :¥Î GQK yQÐÍÙQB JQHZ ; H y<ÕFrq ëFuF ×Fr\ K Do` ä ÓQ Fr_ yF|d 6Í#ÍQÞCy © K© ` ä ÒUÞÓ Aä 9Í%Ó YT`S=Q:<Y Z ^ K yuaDQ ä 9ÍQQÓ Fre × G Dí` H6G ßtÓ G ß OÖQG L K Ó6; [G y K Dö K© öÜYÕ ëFrg ]Fh y K© ` ä ÒUÓ ê]üK© ` ä Î%Q6ÒUÓÑ ò] K© ` ä ÒUÞÓ Fri y ä ÐQÍÙ AG© ` G v%n: G ^Q^ Z ; H ya © ä ÐÍÙ Frk ×\uq Z a-yÜYP`Q` HJ YYM\F Yt` HG ßS Z ^ K Ó6; [G y G© Õ\u\ G Y^ G\u_ YBu= [Q[ y G© Õ\d ë\ue Uf\ug × G Dí` HG ßSÓ G ßÍ::=Q¥%Ó6; [G y K Dö K© öÜYÕ ë\h \ui ×X: GQK%J : HG DÕ ë\uk ë

=^>M.VØ 5 ;$+W 5E ';$>e%:G Ç +73;$R E 7G:G EJ5 R,;$R E 7 5 ;$RS È E ;$ E :G'e%:8 E CÍ·7G'W<+'78V;<M'.e9">/i:G]3<M''e9"Io$V78> 5 e9>JRWii+g$7G EGE T 5 Y%Rb+7GK<RW 5 $v*+: 5 t+7G:G>e>e:8zRWiä;:G>7GW<'e;ä+M' EGE C)=^ EGE )> EG5 V 5 eT 5 pX:G+78W<.eLMZ 5 e E :87G¯[<78: 5 78e#RW e¯; 5:G' 5o½MD! BÅcD o ?U½ HD W 5%E :878; 5 e 5 7 5 7UWiiC /VyY%R3 5E8E RZ 5 W 5iÇ M'9 5%E RW Ç É D 5 W 5 e 5 W<(;0+M' EGE ;)Y%RMy;$>1 E >7a+7GK; 53535 $v*: 5 (RWi0M. E :U0;(+g$7G EGEGÈ E ù RWe¯,» ³c?&½ HD ú VY%R E T 5)5E 7GRW<+e%: 5%E ;)U9LWi;) 5 5 e E :G78R$: 5 7`;<MK E8E C

9:;%<:=?>=A«CBu@QªF n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^XÓ G ß6 OÖQG L K Ó6; [GMG v KG&H[ ^Tv&n: G Ó6; [G ×g n JO Y Z LP; j6GUHSH =b> G Õh n JO Y Z LT Z ^ K Ó6; [G =Q:Q<6^çÕik n JO Y Z LTÓ G ß6 OÖQG L K Ó6; [G y; j6G&HmK ö ; j6G&HMK© öæ Z ^ K Ó6; [G YFrq ×FuF ^ J n G :Cy K ÕFr\ H =?> G ` K© ÕFr_ =Q:Q<6^P`SYçÕF|d ëFre ë

Page 166: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D|%ª §¨X¯ Db«Q«i

i

i

i

i

i

i

i

"No Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

¤ E >Re; 5 :8. 5 ;$i+g$7G EGE T 5 78> 5 e9NK;ä+W L89 üG2]Í78KS+T 5 ;#RWie 5 1 1I7GK­I1>M%;.W<+e E 5 e;)ù 1+: 5 7 5 R0Wi:G78._Iú C l EGEG5 ]F¦ >H: 5 eL E M'.e9L E ;$J"Iq»C[=^ EGE + E5 V 5 eT 5 pX:G>7GW<'eM 5 e E :G78¯$RWe¯b; 5 :G' 5 ½D!6¶ËËA<½ H7D VNYR`:8W3t]+W 5%EGE RL 5 W 5Ç M'9 5E RW Ç É D RW » ³?U½ HD C¤ÿ78'W)>.7 5 78+7G E >e:U 5 :G' 5 ; 5%Ez5 $v*: 5E Y%R 5 W< È +W 5 1: 5 7` E +7^78K; 5 5iE >Re; 5 V E +g$7G EGEGÈ E Y%Rb;T 5 E`E RL E ;$'W<+e EGÈ E C·\MK E8E ½MD!6¶ËËA<½ HD ]b;$ Ç eK;< 5 W 5 W 5E :G7U 5 7 5 7UWi3C /%o$C

9:;%<:=?>=A«CBu@7F =L j =%< G ^&¥ HK =L K6Z LU: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^XÓ G ßÍQ::=Q¥QÓ; [GMG v KGUH[ ^Tv%n: G Ó6; [G ×g n JO Y Z LP; j6GUHSH =b> G Õh n JO Y Z LT Z ^ K Ó6; [GS[6Z >^çÕik n JO Y Z LTÓ G ßÍQ::=Q¥QÓ; [G yu; j6G&HmK öæ; j6G&HcK© öæ Z ^ K Ó6; [GS[ Frq ×FuF ^ J n G :Cy K ÕFr\ H =?> G ` K© ÕFr_ [6Z >^P` [ ÕF|d ëFre ë û»> 5 E ; 5 5 Wie; 5 ;$):G78.R'S>T 5 V:8+W 5E 'e;zeT 5 p:8+78W<.e E 9 ü±* )VË& XV

*7 )Øy 9 kY%R^78: 5 78eWËe¯ E ; 5E :8. 5Eµ´Ëç?&½ HD V ·MDAMH½ H7D V ·MD7?%˽ HD ;NËDË6½ HD Vy78 E t> :8.1W)>e%:GC= 5E 7 5 7UWi E Y%R E +R+WV[W 5E :G7UW 5E &;$ Ç e'S>T 5;$ EGE E eT 5 pX:G>7GW<'e E b E +M' EGE E 5 787G E 5 eL;$+e%:G E 5E e¯ E Y%Rb>M. E 78: 5 7GeLWCd=»T 5 9­W3RH: 5 5 W<+e%:87(z7G E t+.: 5 ;$>M. E C)¤ E :87I E 7G'W<+'7 5%E 5E8E R+W 5 W 5ÍÇ M.9 5 RW He' 5e¯ ¸ ¹ N/ËD&½ HD V6Y%RV`e 5 + E5 ;$-RW ·D7?QË6½ HD V@ 5 ;eT 5 g$ E :G'7-ù§.RM( |C=C úY%ReL; 5b5 d_&S&7d=[3] R E ; 5 ;$>e:87 5 ;$^RW 5 e E :G78R$: 5 7>CØ? 5¶;N|DË6½ H7D 5E8E RL 5 W 5Ç M'9 5RW » ³?&½ H7D VB 5 WÿRWiM. E :8;$#+g$7G EGEGÈ E Y%R E T 55%E 78RW)>e%: 5E ;U9Wi; 5 5 e E :G78R$: 5 7a; E Rt+7UMK E8E VJ:8W0L]>Wî 5 ;$ E >7 @CXC C

9:;%<:=?>=A«CBu@«F 9: ZbHK Ó6; [G n: ZbHK ^ K = K y G LQ;%p G :¥Î GQK < K%N :;&ß^X9=Q:6^ G %ïQv6L G n K6Z ; H ­\ ×_ v%n: G Ó6; [GAG Do` HJ YYåÕd ; j6GUHMK ` HQJ YYåÕe ëg ×h K :¥M×i K ` ä 96ÒUÓ SG D ` G v%n: G ^^ Z ; H yu<k ×P: GQK&J : HSH6G ßS9: ZbHK Ó6; [G y K ö G DQÕ ëFrq ëFuF L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Fr\ ×Fr_ LQ; H ^ J > G è HK6Z Yçyu<Cö G öílén: ZbHK ^ K = K l%ÕF|d : G%K%J : HSHG ßS9: Z?HK Ó6; [G y K ö G DQÕFre ëFrg ë

Page 167: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D| §¨X¯ Db«'i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "Ioo

FhFri G = [ Ó6; [G : G = [ ^ K = K y G L%;%p G :¥Î GQK < K%N :;&ß^T9=Q:^ G 6%ï%v6L G n K6Z ; H ­Frk ×\uq v%n: G Ó6; [GAG Do` HJ YYåÕ\F ; j6GUHMK ` HQJ YYåÕ\u\ ë\u_ ×\d K :¥M×\ue K ` ä ÍQÞ tG Dí`SY%p=Y J6G yu<\ug ×P: GQK&J : HSH6G ßS G = [ Ó6; [G y K ö G DQÕ ë\h ë\ui L%= K L N y9=Q:^ G v6L G n K6Z ; HzG \uk ×_uq LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl: G = [ ^ K = K l%Õ_F : G%K%J : HSHG ßS G = [ Ó6; [G y K ö G DQÕ_u\ ë_u_ ë_d_ue_ug GQK%J : H Ó6; [G : GQK%J : H ^ K = K yr G LQ;%p G :¥Î G%K < K%N :;&ß6^T9=Q:6^ G 6%ïQvL G n K6Z ; H ­_h ×_ui v%n: G Ó6; [GAG Do` HJ YYåÕ_uk ; j6GUHMK ` HQJ YYåÕdq ëdîF ×d\ K :¥M×d_ K ` ä %èÓ G Do` G v%n: G ^^ Z ; H yu< dud ×P: GQK&J : HSH6G ßS GQK%J : H Ó6; [G y K ö G DQÕ ëde ëdg L%= K L N y9=Q:^ G v6L G n K6Z ; HzG dh ×di LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl: GQK%J : H ^ K = K l&Õdk : G%K%J : HSHG ßS GQK&J : H Ó6; [G y K ö G D%Õeuq ëeF ëeu\eu_ed Î J n G :QÓ6; [G ^ J n G :6^ K = K y G LQ;%p G :¥Î GQK < K%N :;&ß^X9=Q:6^ G %ïQv6L G n K6Z ; H ­eue ×eug Z ^ K Ó6; [G Yt` HJ YYçÕeh ; j6GUHMK ` HQJ YYåÕeuieuk G LQ;&p G :¥Î GQK aS` H6G ßt G L%;%p G :¥Î GQK yQ9ÍQÓB JHZ ; H yu<Õguq ëgF ×gu\ K :¥M×gu_ K ` ä ÎUè9 Aä Q9ÍQÓ YP`t=%:<Y Z ^ K yua ä 9ÍQÓ gd ×P: GQK&J : HSH6G ßcÎ J n G :QÓ6; [G y K öóY6Õ ëgue ëgug L%= K L N y9=Q:^ G v6L G n K6Z ; HzG gh ×gui LQ; H ^ J > G è HK6Z Yçyu<Cö G öílU^ J n G :6^ K = K l%Õguk : G%K%J : HSHG ßcÎ J n G :QÓ6; [G y K öóY6Õ

Page 168: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D|Q« §¨X¯ Db«Q®i

i

i

i

i

i

i

i

"No Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

hq ëhF ë

9:;%<:=?>=A«CBu@'F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^X9: ZbHK Ó6; [GAG v KG&H[ ^SÎ K = KG > G&HK Ó; [G ×g n JO Y Z LTv%n: G Ó6; [GAG v%n:CÕhi n JO Y Z LT9: ZbHK Ó6; [G yu; j6GUHmK öæv%n: G Ó6; [GAG k ×Frq ^ J n G :Cy K ÕFuF G v&n:A` G ÕFr\ ëFr_ ë

9:;%<:=?>=A«CBu@®F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^X G = [ Ó6; [GAG v KG&H[ ^SÎ K = KG > G&HK Ó6; [G ×g n JO Y Z LTv%n: G Ó6; [GAG v%n:CÕhi n JO Y Z LT G = [ Ó6; [G y; j6G&HK ö(v%n: G Ó6; [GAG k ×Frq ^ J n G :Cy K ÕFuF G v&n:A` G ÕFr\ ëFr_ ë

9:;%<:=?>=A«CBu@ ¬F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^X GQK%J : H Ó6; [GAG v KG&H[ ^SÎ K = KG > G&HK Ó6; [G ×g n JO Y Z LTv%n: G Ó6; [GAG v%n:CÕhi n JO Y Z LT GQK%J : H Ó6; [G yu; jG&HK öæv%n: G Ó6; [GAG k ×Frq ^ J n G :Cy K ÕFuF G v&n:A` G ÕFr\ ëFr_ ë

Page 169: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ X i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "Ioq

9:;%<:=?>=A«CBªsF n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^tÎ J n G :QÓ6; [GAG v KG&H[ ^SÎ K = KG > G&HK Ó; [G ×g n JO Y Z LT Z ^ K Ó6; [G =Q:Q<6^çÕhi n JO Y Z LSÎ J n G :QÓ6; [G yu; j6GUHmK öæ Z ^ K Ó6; [G nk ×Frq ^ J n G :Cy K ÕFuF =Q:Q<6^P`Xn/ÕFr\ ëFr_ ë

¤¬eT 5 p:8+78W)'eM$ü ý Ì7G+: 5 78eFRWêe¯»; 5 :G' 5(¼ Å ½ H7D V+ 5 W 5 W 5E :G7U 5 7 5 78W<FC "C9:;%<:=?>=A«CBªD

F Ò&aQÓ6; [GcZ a6^ K = K y G LQ;%p G :Q¥Î GQK < K&N :;&ß^T9=Q:6^ G %ïQv6L G n K6Z ; H ­\ ×_ v%n: G Ó6; [GAG Do` HJ YYåÕd Î K = KG > G&HK Ó6; [G ^6Do` HJ YYçöe ^ © ` HJ YYçÕg ; j6GUHMK ` HQJ YYåÕhi G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yQ9ÍQÓB JHZ ; H yu<ök a © ` HG ßS G L%;%p G :¥Î GQK yQ6Î&B JHZ ; H yu<ÕFrq ëFuF ×Fr\ K :¥M×Fr_ K ` ä Ò&ï Sä 9Í%Ó SG Dí` G v%n: G ^^ Z ; H yuaD% ä 9ÍQQÓ ^6Do`S^ K = KG > G&HK ya © F|d 6Í#ÍQÞ/yEDQ ä 6Î& ^ © `M^ K = KG > G&HK yu< Fre ×P: GQK%J : HSH6G ßcÒ&aQÓ6; [G y K ö G Dö3^6Dö3^ © Õ ëFrg ëFh L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Fri ×Frk LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl Z a6^ K = K l%Õ\uq : G%K%J : HSHG ßÒ&aQÓ; [G y K ö G Dö3^6Dö3^ © Õ\F ë\u\ ë

? E8E be¯i 5%EGE RÌ 5 W 5)Ç M.9 5E RW ¸ ¹ NCËD%½ H7D VY%R7G>78 E +e%:8<i 5 e;$KS+T 5 ;:G E :8b; 5 5 Wie; 5 V(; 5 Eí;?A?=D>­D?&½ HD³ VYR 5 7G78 E 5 e;$>W 5E 78W 5%E 1+7U;;$>.7 5 »¦§M E5 ; 5 5 Wie; 5 btCd¤ E >Re; 50Ç M.9 5p;:?A?&D>³D?U½ HD 5 ;$JeT 5 +g$ E :G'7^Y%Re; 5 eT 5 9 5 R1+7 57UW 5 ¦§M EG5 C[ök+W 5E Ve 5 7 5 7UWiC %V%)MK E8E ¼ Å ½ HD V$e Ç R7U3C'"NoVRW g$+W<M 5;$b­7G1 5 78»78 5 :G78>U9 5

b ^¢X¢¤g b `õa

^¢ Ë

Page 170: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"Io !Í"q i

i

i

i

i

i

i

i

"No Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

_7hi_g¡¢ |`¢ X~eÌ

#" äïå!æ"Ø

Î ÿyØ&äïå!æØ $" äZå!æØ

Î "ÿyØ%äïå!æ"Ø B×9ÿ ò ëäZå!æØ ìíÓÕå7Ò¦è!äïå!æ"Øñ2ò Ö×yäïå!æ"Ø

B×9ÿ ò ëäZå!æØ ñ2ò Ö×yäïå!æ"ØB×9ÿ ò ëäZå!æØ

j[.R7U)C."IoJu#?kg$>W)M 5 ;$b­7G1 5 78 E .e%:U­:GK+078äü ý )C

9:;%<:=?>=A«CBª ©F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^SÒ&aQÓ6; [GSG v KG&H[ ^SÎ K = KG > GUHK Ó6; [G ×g n JO Y Z LSÎ K = KG > G&HK Ó6; [G ^ K = K Dö3^ K = K© Õh n JO Y Z LTv%n: G Ó6; [GAG v%n:CÕik n JO Y Z LAÒ&aQÓ6; [G yu; j6G&HcK öæv%n: G Ó; [GAG öÜÎ K = KG > G&HK Ó6; [G ^6DöÜÎ K = KG > GUHK Ó6; [G ^ © Frq ×FuF ^ J n G :Cy K ÕFr\ G v&n:A` G ÕFr_ ^ K = K Do`M^DÕF|d ^ K = K© `M^ © ÕFre ëFrg ë

û»@W<e+'7U E 'W)'MK7NV 5 eT 5 pX:G>7GW<'eMý kù f 7 5 7UWiaC /%úL 5 e E :G78¯RW e¯ J Ë6½ HDù f 7 5 7UWibC ú VRv 5%E6Ç M.9 5EaE T 5 ; 5 Eµ¶­?ËçXB%½ H7D VY%RJ 5 7G78 E 5 e;$>W J 'e'+'M.'_>S+T 5 5 'e78+W<+e%: 5 ; 5 7\&dPVRW ¸ ¹ N/ËcD%½ HD VYRb 5 7878 E 5 e;$ J 5 e;$KS+T 5 ;J 5 e%:G7 5 M'VJRW;:?A?=D>³D:?&½ HD VYR(] 5 5 78 5 ; 5 5 Wie; 5 Cd= 5 :GbY%RbYRy 5 ;$>W 5%E ;$ Ç e'7 5EFÇ M'9 5%E

Page 171: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"Io !Í"q"i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "Io

X? o Ë 5 W 5 ¶­?ËåXB&½ HD³ V 5 EaE L>W 5E 5 W ++7G:G+_N3Y%R :G>W 5%E E8E »:G' 5 ;$(e¯78: 5 7GeL; 5 L>M'iU9Wi;) üG ae E M''e9 E "><)"N<; 5 eT 5 p:8+78W)'eMý )C

9:;%<:=?>=A«CBª@F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^Tï;%:QÓ; [GAG v KG&H[ ^tÎ K = KG > G&HK Ó6; [G ×g n JO Y Z LPÍ K : Z?O Ó6; [GcZ?HZ&K ö Z?H L&:CÕh n JO Y Z LSÎ K = KG > G&HK Ó6; [G ^ K = K Õi n JO Y Z LTv%n: G Ó6; [GAG v%n:CÕkFrq n JO Y Z LPï;%:QÓ; [G yu; j6G&HK öðv%n: G Ó6; [GMG ö(Í K : ZbO Ó6; [G ^6Dö Í K : Z?O Ó6; [G ^ © öFuF Î K = KG > GUHK Ó6; [G ^&@Fr\ ×Fr_ ^ J n G :Cy K ÕF|d G v&n:A` G ÕFre ZbHZ&K `A^DÕFrg ZbH L&:A`A^ © ÕFh ^ K = K `A^&@ÕFri ëFrk ë

9:;%<:=?>=A«CBªªF ï;%:QÓ; [G a;%:^ K = K yr G LQ;%p G :¥Î G%K < K%N :;&ß6^X9=Q:6^ G 6%ïQv6L G n KZ ; H ­\ ×_ Í K : Z?O Ó6; [G ^Do` HJ YYåöd ^ © ` HJ YYåÕe Î K = KG > G&HK Ó6; [G ^%@S` HJ YYçÕg v%n: G Ó6; [GAG Do` HJ YYåÕh ; j6GUHMK ` HQJ YYåÕik G LQ;&p G :¥Î GQK aDí` HG ßS G L%;%p G :¥Î GQK yÎU Û Ò%ÙU6&ÓB JHZ ; H yu<öFrq a © ` HG ßS G L%;%p G :¥Î GQK yQ9ÍQÓB JHZ ; H yu<ÕFuF ëFr\ ×Fr_ K :¥M×F|d K ` ä ïU Sä 9ÍQÓ u^6Do`t= K : ZbO ^ K = K yuaDQ mä Î& Û Ò&Ù&6&Ó Fre G Do` G v%n: G ^^ Z ; H yuaDQ ä ÎU Û Ò%ÙU6&Ó Frg ^ © `t= K : ZbO ^ K = K ya © ä 9ÍQÓ Fh ^%@S`A^ K = KG > G&HK y<Fri ×X: GQK%J : HAH6G ßAï;&:QÓ6; [G y K ö G DöÜ^6Dö3^ © ö3^%@Õ ëFrk ë\uq L%= K L N y9=Q:^ G v6L G n K6Z ; HzG \F ×\u\ LQ; H ^ J > G è HK6Z Yçyu<Cö G öíla;%:6^ K = K l%Õ\u_ : G%K%J : HSHG ßAï;%:%Ó6; [G y K ö G DöÜ^Dö3^ © öÜ^%@Õ\d ë\ue ë

Page 172: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G Db«s §¨X¯ D£' ©i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

· Ç R78C'">ä7G E >e:UÍRW g$+W<M 5 ;$#­781 5 7G E 'e%:8­:GK+Y%R<7G>7G E >e%:8 5 :87GNU9 5;$7 5 78Wi

7\&d b¢ bõ^ bÊ¢ôbÊó 7\&d ©¢ôbÊó ©£õg ©¢£©ó g¡¢ |`¢ X~eÌ

Ð åÿyäïå!æ"Øs×9ÿ ò ëäïå!æØ Î "ÿyØ%äïå!æ"Ø B×9ÿ ò ëäïå!æ"Ø Ð åÿyäZå!æØ

B×9ÿ ò ëäïå!æ"Ø Î "ÿyØ%äïå!æ"Ø B×9ÿ ò ëäZå!æØ ìÓóå7Òè!äïå!æ"Øñ2ò Ö×yäïå!æ"Ø

B×9ÿ ò ëäZå!æØ ñ2ò Ö×yäïå!æ"Øs×9ÿ ò ëäïå!æØ

j[.R78<C."Nu#?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+)78(ý XCjMH:UWV% 5 78V 5E eT 5 pX:G+78W<.eL E YR`7GN 5 e9>++W`W 5 e:UW ­781 5 78 E 'e%:8­:8'>J7U

E +g$7G EGEGÈ E ;M''eR>WX++

C 465 W 5 ;$ E8E +W 5E VØ>;z:G' 5 ;$ig$78 E8E T 5 ]i7G>7G+pE +e%:8; 5 5 7#RW e¯¬;$ E :G'e: 5 C D 5 ; 5E EGE E e¯ EÍE T 5,E RPMK E8E E ;à+M' EGE ¸ ¹ N/ËD%½ HDW 5E :G7U;ze 5 7 5 78WizC %qCz¤7G'W<+'7 5 :8. 5 ;$ig$78 E8E T 5 ]i7GN 5 e9>+'; 5 t+M 5 eT 5 p:G>7GW<'eM189 üGV[78 E +e%:U; 5 e 5 7 5 7UWiÍC o#iY%Ri 5 e E :87G¯ZRW e¯78zRWig$78 E8E T 5 78+MK+ 5 eMXC

9:;%<:=?>=A«CBª!F v%n: G Ó6; [GAG v%n: G ^Q^ Z ; H yr G LQ;%p G :¥Î G%K < K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­\ ×_ v%n: G Ó6; [GAG Do` HJ YYåö G© ` HJ YYçÕd ; j6GUHMK ` HQJ YYåÕeg ëh ×i K :¥M×k G Do` HJ > G v%n:yEFrq

Page 173: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N" !Í"q/i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "N"

FuF y K ` ä ê] K ` ä ÑQ ê]üK ` ä ê] K ` ä Ñ% ] K ` ä " ê] K ` ä ÓQ" Fr\ G© ` HQJ > G v%n:CyEFr_ × G Do` H6G ßS G YQ= K6Z ; H =Y&Ó6; [G y K ö G Dö G© Õ ëF|d Fre ×X: GQK%J : HG DÕ ëFrg ëFh L%= K L N y9=Q:^ G v6L G n K6Z ; HzG Fri ×Frk LQ; H ^ J > G è HK6Z Yçyu<Cö G öíl G v%n: G ^Q^ Z ; H l&Õ\uq : G%K%J : HSHG ßS G Y%= K6Z ; H =Y&Ó6; [G y K ö G Dö G© Õ\F ë\u\ ë

=»J 5 e E :G78RS+T 5 ; 5 e¯ 5 7G78 E 5 e;$>e%:G6 RWi(g$78 E8E T 5 78+MK+ 5 eMXVI E8E FeT 5 p:8+78W<.eM¦§_^;R E U9Wi; E "7!#8 9: Y%R^78: 5 78eWË; 5 E ¸ ¹ NCËD%½ H7D³ VIYR^ E :878T 5 >e1 5 M'1'; 5EeJ+g7G EGE T 5 7G>M' 5 eMC f 7U( 5 W<M':U7 5 e¯LVRW Ç É D Y%R`'e;$K+Y%RM] 55 t+7U; 5 7:8W3t]+W ]^'eM'R â ; 5 e 5 e¯ ·D:C'A? cAMCE½ HD C? E8E ^e¯V% 5 7G:8e%: 5 ] ;$ Ç e'; 5 5 W 5 W 5E :G7U5 7 5 7UWi0C C

9:;%<:=?>=A«CBª«F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^X G YQ= K6Z ; H =Y&Ó6; [GMG v KG&H[ ^Tv%n: G Ó; [G ×g n JO Y Z LTv%n: G Ó6; [GAG v%n:Dö G v%n: © Õhi n JO Y Z LT G YQ= K6Z ; H =Y&Ó6; [G yu; j6GUHK ö(v%n: G Ó6; [GAG Döæv%n: G Ó6; [GAG© k ×Frq ^ J n G :Cy K ÕFuF G v&n:Do` G DÕFr\ G v&n: © ` G© ÕFr_ ëF|d ë

= 5 :G@Y%R 5 eT 5 p:8+78W)'eMc89: üG)78: 5 7GeL6RW ¸ ¹ N/ËD&½ HD V deT 5 RW ·MD:C'A? cAC"Ľ H7D C l E8E5 5 78Y%R3e+W E +W<7839­#> E W<+e%: 5 5 W« E >Re;i7G:G); 5 eT 5 pX:G>7GW<'eMXV5 R E vV 5 + E W<>e: 5 5 WæRW 5 L>78; 5 7 7G>M' 5 eMVP< E +Re;zU9Wi;Íð7!#89e>W E >W)7G< 5 e%:GNCb· EGE 'WäVy 5 ;$ E >7(Y%RiÍg$78 E8E T 5 78: 5 7GeL;it+M 5 W)]+: 5 ; 5E vY%R>M'z78: 5 7GeL;zL>M'ä78'W)>.7UU9Wi;¯c7!"89 Ci=^ EGE i+ E5 V 5 :G' 5 ;ä+g7G EGE T 5eT 5 ;+1 E +7 ·MD:C'A? cACE½ HD C?dW E >RK;V:G+W 5%E^5 eT 5 pX:G+78W<.eLMË7!#8 9: VY%R] E :Ue%:G E +W<+M'9e:8bÄ89: .

üGLC[·2;$.¦ +78+eS>» 5 e E E :GF+W 5 ;+7[:G>7Z E >ReL;^7:86; 7 5 ;$RS+T 5 78+t:GK;(;$'1+7 E E1>_+ E C fZ5 7` E8E5 Vi+;)1>_bYRb 5 e%:G>+JRW«> E W<+e%: 5 5 Wî EGE <7:8J;<7 5 ;$RLS+T 5 VRW¨e 5 1 5 eT 5 p:8+78W<.eMy; 5 :G' 5ȶ@HMH½ HD ]b78'; 5 C

Page 174: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N !Í"qIi

i

i

i

i

i

i

i

">% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

9:;%<:=?>=A«CBª7'F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^TÍ [[ Ó; [GAG v KG&H[ ^Xv%n: G Ó; [G ×g n JO Y Z LTv%n: G Ó6; [GAG v%n:Dö G v%n: © Õhi n JO Y Z LPÍ [[ Ó; [G yu; j6G&HK öðv%n: G Ó6; [GMG Döðv%n: G Ó6; [GMG© k ×Frq ^ J n G :Cy K ÕFuF G v&n:Do` G DÕFr\ G v&n: © ` G© ÕFr_ ëF|d ë

fZ5 7Jg$+W<M 5 V E 0:G'1>7GW 5E äg$78 E8E T 5 ^ógó¼`$VP:G+78+W 5%E c7!"89# 5 e E :G78R'e; 5; 5 E e¯ E ; 5 :8. 5 ¶@HMH½ HD [RW e¯ DMº 78JJ78.W<>.7U E5 WiVY%R^ 5E8E R; 5 Eox'A6Ë6½ HD³ 5 W 5zÇ M.9 5%E VØiRW E +Re; 5 Y%R< 5E8E R DMº 5 W 5 78'W)>.7 5äÇ M'9 5 VØiRW x'A6Ë6½ HD 7U`- 5 W 5àE >ReL; 5&Ç M.9 5 Cñ? E8E E .:GRS+T 5 ]7G E >e:U;-e Ç R7U-C."qCòO.W< 5 7G:8e:8e 5 :87FY%R(0­781 5 7G E .e%:U­:GK+bW 5 e%:8;3;$ EGE J¦ 5 78Wib78 E L>H:U3 E >W<®e%:GK+b;$ E v;37Ug$78 E8E T 5 V 5 R E vVK^óg¬]:G7U:U; 5 W 5 RWi E RL+g7G EGE T 5 Y%R¦ 5 78Wi-RWþ; 5%E5 t+7U; 5 78 E 78# E >ReL;#;'S>T 5 5 W `C l EGEG5 ]3W0R.: 5 'W< 5 7:Ue%:GVL 5 E RWi#­781 5 7G 5 e E :G78R â ;(;a¦ 5 78W<J;$'1>7 E .78'JMH:8+7U7 5bE 'e Ç >; 5 ^ ¦ 5 78Wi(;^I1IM.KS>T 5 ;(g$78 E pE T 5 Cd= <1>78;;$V<7G¯7GK)7UWi­:8'>b:8+W«YR E >7» 5 e E :87GR â ;<;$J¦ 5 7GWi<<78 E +7817`78 5 7GK;;$bù 5 7FW<+ 5 ;$ ;.1+7 E5%E e â 1+ E ;»eT 5 pX:G+78W<.eL E 5 W 5ÄD ¹ N/ËD³³ç V >³D ¹ NCË V?=DË> +:8>úFb< EGEG5 K:G'1';;$J; 5Ea5 L>78; 5 78 E C

9:;%<:=?>=A«CBª®F v%n: G Ó6; [GPHQJ > G v%n:CyE K%N :;&ß^T9=Q:^ G 6%ï%v6L G n K6Z ; H ­\ ×_ v%n: G Ó6; [GAG Do` HJ YYåö G© Õd ; j6GUHMK Õe ëg ×h G Do` KG :U>áyEi yk y K ` ä 9QèÎ ê]üK ` ä&Û ÒUÓQè6Î Frq G© ` KG :U>áyéFuF × G Dí` H6G ßSÍ [[ Ó6; [G y K ö G Dö G© Õ ëFr\ Fr_ ×&: GQK%J : HG DÕ ëF|d ë

¤eT 5 p:8+78W)'eMO) !)VLW 5E :G7U; 5 e 5 7 5 78W<<C %V]3e­M 5 5 5 c7!"89 V 5 78]+W:G7U:U ; 5 R$:G7 5E :8. 5E ;$ 5 L>78; 5 78 E 78H:8W<]:GK 5%E ;(M.'eRL>W

X++CZû (W< E Wi ¦ 5 78W<V

5 e¯iY%R+M' 5 e E :87G¯VY%RJ] 53Ê@C?&½ H7D ù f 7 5 7UWi3C o ú V$] E .W<'M'7^ 5ó¶@HMHQ½ HD C

Page 175: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N/ !Í"qoi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "N/

ææäZå!æØææäZå!æØ ç åèØ%é2ê&% þ Ô|ÿyäïå!æØ

þ Ô|ÿyäïå!æØ ç åèØ&é2ê&% þ ÔÿyäZå!æØ ç åèØ%éKêÒç åèØ%é2êÔ ç åèØ%é2êë

j[.R7U)C."q(u#?kg$>W)M 5 ;$­7G1 5 78 E .e%:8­:GK+)78(7!#89: C

9:;%<:=?>=A«CBª ¬F v%n: G Ó6; [GSKG :U>áyE K&N :;&ß^o9=Q:6^ G 6%ïQvL G n K6Z ; H ­\ ×_ v%n: G Ó6; [GAG Do` HJ YYåö G© Õd ; j6GUHMK Õe ëg ×h G Do` JH =Q:¥ G v&n:CyEi yk y K ` ä Î%Í% ê]üK ` ä Î&ÍÎ# Ì]ðK ` ä Û Frq G© ` JH =Q:¥ G v%n:CyéFuF × G Dí` H6G ß ÛQJ Y K Ó6; [G y K ö G Dö G© Õ ëFr\ Fr_ ×X: GQK%J : HG DÕ ëF|d ë

9:;%<:=?>=A«CBQsF n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^ ÛQJ Y K Ó6; [GAG v KG&H[ ^Tv%n: G Ó; [G ×g n JO Y Z LTv%n: G Ó6; [GAG v%n:Dö G v%n: © Õhi n JO Y Z L ÛQJ Y K Ó6; [G y; j6G&HK ö(v%n: G Ó6; [GAG Döæv%n: G Ó6; [GAG© k ×Frq ^ J n G :Cy K ÕFuF G v&n:Do` G DÕFr\ G v&n: © ` G© ÕFr_ ëF|d ë ½^Wi 5 t+7US>T 5 Re­78KÍ]i78> 5 e9NK;ze 5 eT 5 p:8+78W)'eM cA6Ë=<D ¹ N/Ë VLY%RiW 5 e%:8zRW

e¯); 5 :8. 5qQcA6Ë=<½ HD Y%R» 5E8E Ry; 5 EdÇ M.9 5%E [RW Ç É DQ Y%R( 5 e%:G]>W 50EGâ W0 5 M 5 7G>7G+p

Page 176: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G Db«Qª §¨X¯ D£'Q«i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

E +e%:8e:8); 5 L>78S+T 5 E +7J+¦ :GRL;ä 5 R$:87 5 Y%R<]0RW ¸ ¹ N/ËD%½ HD VLY%R)78+78 E +e%:8zg$78 E8E T 5bEG5 78 0YRLM 535 t+7U; 5 7d]JM'K+; 5 Cd¤ eT 5 p:8+78W)'eMJ3MK E8E »; 5 e¯0+7U; 5E T 5 W 5%E :878; 5E e 5%E 7 5 7UWi E C o" bC o$C

9:;%<:=?>=A«CBDF n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^oè H =Q:Q¥QÓ6; [GAG v KG&H[ ^Tv%n: G Ó6; [G ×g n JO Y Z LTv%n: G Ó6; [GAG v%n:CÕhi n JO Y Z LXè H =Q:Q¥QÓ6; [G yu; j6GUHmK öæv%n: G Ó6; [GAG k ×Frq ^ J n G :Cy K ÕFuF G v&n:A` G ÕFr\ ëFr_ ë

9:;%<:=?>=A«CB ©F v%n: G Ó6; [GPJQH =Q:¥ G v%n:CyE K%N :;&ß^X9=Q:6^ G %ïQv6L G n K6Z ; H ­\ ×_ v%n: G Ó6; [GAG Õd ; j6GUHMK ` HQJ YYåÕe ëg ×h %y K ` ä 9QèÎ ò] K ` äUÛ ÒUÓQèÎ MG `Ta=L K ;&:CyEi ×X: GQK%J : H yty K `Q` HJ YQY6q³ G ­ H6G ßtè H =Q:¥QÓ; [G y K ö G Õ ëk ë ?^V Ç eM'W<+e%:GV:G>W 5%Ek5E :8. 5E W< E L­ E ' 5E ;$`g$78 E8EGÈ E YR E T 5 78> 5 e9NK; 5E t+M 5

eT 5 pX:G+78W<.eLM$ý) Ve 5 7 5 78Wi3Cªo/C9:;%<:=?>=A«CBQ@

F v%n: G Ó6; [G a=L K ;%:yE K%N :;Uß^T9=Q:6^ G 6%ïQv6L G n KZ ; H ­\ ×_ v%n: G Ó6; [GAG ` HJ YQYåÕd ; j6GUHMK Õe ëg ×h yi K ` äZbHK ÏL%; H ^ K = HK × G ` H6G ßÒ HK Ù; H ^ K Ó6; [G y K Õ ëk ]Frq K ` ä ^ K : ZbH <ÏLQ; H ^ K = HK × G ` H6G ßcÎ K : Z?H <Ù; H ^ K Ó6; [G y K Õ ëFuF ]Fr\ K ` äbHJ YYÏLQ; H ^ K = HK × G ` H6G ßtÓ J YYQÙ; H ^ K Ó; [G y K Õ ëFr_ ]F|d G `AY&p=Y J6G y HJ YYFre ]Frg ä 9Í%Ó SG ` G v%n: G ^^ Z ; H y HJ YY6 ä 9ÍQQÓ

Page 177: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G Db«7 §¨X¯ D£''i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "No

Fh Fri ×X: GQK%J : HG Õ ëFrk ë

? E8E deLT 5 pX:G>7GW<'eM 5 ;$k78: 5 7GeL7y;$'1+7 EG5E :G' 5E ;$@e¯ E C[¤à7G'W<+'7 5 ] 5ð¼? ³?&½ HD VY%Ri78+78 E +e%:8zRWi 5 e E :Ue%:G<eRW<]+78K+Cz¤ E +Re; 5 ] 5;?ËåÁ ³?U½ HD VY%Ri7G+p78 E +e%:8äRWi 5 e E :8e:8 E :87G'eVØ 5 :G>78++'7 5 ]#RW ½@CXC ³?&½ H7D VPY%Ri7G>78 E +e%:8ä 5 e E :8e%:8/7±¼CZ? E8E E e¯ E 5E8E R+WË: 5 ; 5%E RW He' 5Ç M'9 5 VY%R»] 5 : 5 º+e#Y%R 7G>78 E +e%:8< 5 e E :Ue%:GJ78> 5 e9NK;0L>M 5 · m C·^M']+W;$ EGE E e¯ E V 5 ý& 5 ;$»:UW0L]>W 7G+: 5 78e7 5E e¯ E ; E U9W<; E ¶54(e

M'.e9L"+ 5 Rb/89 üG)eaM.'e9b">CØ= 5 78.W<>.7 5 + E5 V> 5 W 5 v­`1.W 5E VN 5 ;$>W 5%E :G>7BRWx'A6˽ HD V>RW ¾ ?&½ HD VIRW ¼KHD ¹ ½ HD)5 R)RW AMCXCé½ HD V>Ve 5E >ReL; 5 + EG5 VY%RM'Y%R>7:G' 5 7G+: 5 7Ge; 5 5 7«89UüGVY%R E T 5 : 5 ; E EBE Rt+M' EGE E ;$ ¸ ¹ N/ËcD%½ HD CP· Ç R7U`C'">7G E >e:Uz­7G1 5 78 E 'e:U­:8'>ä 5 787G E 5 eL;$+e%:G J g$78 E8E T 5 ^ó¤gVZ õ¼ `ËÒ ~ ÓY%RR$:8.M'._N<;$.1+7 E5%E ; 5E e¯ E ;$ E 78.: 5E C

' Ø%ÓÕÔ× ò åéMÔÓóäZå!æØææäZå!æØ ç åèØ&é2ê

<(Ó ×yäïå!æØ

þ Ô|ÿyäïå!æ"Ø ç åèØ%é2ê&% ãÑå×yäZå!æØ ç åèØ%éKê*) éæØ äZå!æØç åèØ%é2êÔ þ Ô|ÿyäïå!æØ ç åèØ%éKê + éMÔÿ9î"äZå!æØ þ Ôÿyäïå!æ"Ø ò é7× â åéÖ×yäïå!æØ

ç åèØ%éKêë ç åèØ%é2ê, é7× â åéÖ×yäïå!æØ ç åèØ%é2êÒ ç åèØ%éKêíÛç åèØ%éKê

j['R7U0C."NuÍ?dg>W<M 5 ;$b­7G1 5 78 E .e%:U­:GK+)78))g$78 E8E T 5a + b.x < −3 ∗ c[2]

C

fZ5 7"HM.:G'W 5 V61+78+W 5E Y%R E<E T 5 E W 5 ;$ Ç +S È E eN EGE ­78' E e 5 W<]: 5 ; 5 !"ü±ñ; 5e 5%EGEG5 · m 7U0Y%R 5 5 787800W 5 e:U+Wî;<­7G1 5 78 E .e%:8­:GK+C

9:;%<:=?>=A«CB%ªF 9ÍQ6ÎU6Ï&ÐÑÒUÓ/yY%= H <Ô\ n6=L j =Q< G n6=Q:^ G :CÕ_d Z >n;&: KcÖ =Qp=B Z ;B Õe Z >n;&: K : G LQ;&p G :¥/B Õ RR Z >n;%: K =A=^SLQY%=^^ G ^ [G : G L J n G :=7² ; [GtG ::;^ [ ;XÍÎg Z >n;&: K ^&¥ HK =L K6Z LU: GG B ÕóRR Z >n6;%: K =A=^PLQYQ=^Q^ G ^ [ ;^ H x^ [ = à :p;%: G ^ ZbHKàQK6Z L%=hi

Page 178: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G Db«« §¨X¯ D£'Q®i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

k n JO Y Z LALQYQ=^Q^tYQ= H <QÔM×Frq a ZbH =YA^ K = KZ LSÎ K : Z?H <tØ G :^ Z ; H `lEÔffSÙ;>n Z Y G : ¨ Ø G :^ Z ; H DBs ¨X© sQsQªlÕFuF ZbHK L%; HK 9=%:6^ G :Q:;%:c`SsÕ RRtLQ; HK = [ ;%: [GSG ::;^S^ ZbHKàQKZ LQ;^Fr\ÚO ;;Y G = Hc[G&OQJ <Ï%: G LQ;%p G :Q¥CÕ RRSL%; HK :;QYQ=Sp G : O ;^ GS[G : G L J n G :=!² ; [GSG ::;^Fr_ ; j6GUH YQ=^ K ::;%:c` HJ YYåÕF|dFreFrg RRTÞ G a ZbH6G ; > K ; [ ;ml>= Z?H l [ =AL%YQ=^^ G Y%= H <Ô/BFh n JO Y Z Lw^ K = K6Z LPp; Z&[ >= ZbH yÎ K : ZbH <c=Q:<^ K&N :;&ß^T9=Q:6^ G v6L G n KZ ; HFri ×Frk O ;;QY G = HM[G&OJ <Ï%=^t`ta=Y^ G Õ\uq O ;;QY G = HM[G&OJ <Ï&: G LQ;%p G :¥`Pa=Y^ G Õ\F\u\ Î K : ZbH <Aa Z Y G&H =?> G `llÕÜRR H ;?> GS[ ;T=Q: I%JZ p;S=A^ G :A= H =Y Z ^%= [ ;\u_ Y%= H <ÔPn=Q:6^ G :Õ RRP= H =Y Z ^%= [ ;%:cY%Qv Z LQ;QR^ ZbHKàQK6Z LQ;\d Z?HKcZ Õ\ue O ;;Y G = H >^T`ta=Y^ G Õ\ug\h Î&¥6^ KG >áB; JK Bn: ZbHK Y H yØ G :6^ Z ; H Õ\ui RQRSYQS;^on6=Q:â?> GQK :;^Xn6=^^%= [ ;^Xn6=Q:=A;ALQ;?>n Z YQ= [ ;%:\uk a;%:ãy Z `PsÕ ZTä =Q:<^åBY G&H < K%N!¨ DÕ Z ff_uq ×_F Z aãyu=Q:<6^ Z& B GQI&J =Y^çyl ¨b[G&OQJ <Ï%ÍÎl%_u\ [G&OJ <ÏQ=^t` K : J6G Õ_u_ G Y^ G_d Z aãyu=Q:<6^ Z& B GQI&J =Y^çyl ¨b[G&OQJ <Ï%: G LQ;%p G :Q¥lQ_ue [G&OJ <Ï%: G LQ;&p G :¥c` K : J6G Õ_ug G Y^ G_h ×_ui Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lîè^%=Q< GZ ^å­ Ö =Qp=AYQ= H <Ôò ¨b[G&OJ <Ï&ÍÎ líf_uk l ¨b[G&OJ <Ï&: G LQ;%p G :¥ ZbH n JK a Z Y G l%Õdq Î%¥6^ KG >ìB G v ZUK ysÕdîF ëd\ ëd_dud Z aãy=Q:<^ Z& B GQI%J =Y^çy?l ¨ l&de × RRtYQ [ = G&HK := [ = ¨ n6= [ : ;dg Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lE G = [6ZbH <aQ:;?>z^ K = H[ =Q: [ZbH n JK BSBtBl&Õdh n6=Q:^ G :A` HG ßcYQ= H <ÔCyÎ%¥^ KG >ìB ZbH ÕÈRRSLU: Z =tÍÎdi ëdk G Y^ Geuq × RRtYQ [ ;t=Q: I&JZ p;eF a Z Y G&H =b> G `P=Q:<6^å=Q:<6^çBY G&H < K%N¨ D Õeu\ Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lE G = [6ZbH <aQ:;?>a Z Y G lífTa Z Y G&H =b> G fmlBtBSBl&Õeu_ K :¥A× RRSL&: Z =tÍÎed n6=Q:6^ G :A` H6G ßMYQ= H <Ôy H6G ß Ö =%p=CB Z ;åBï Z Y G Ò H n JK Î K : G =?>áyua Z Y G&H =b> G QÕeue ëeug L&= K L N y Ö =Qp=CB Z ;Bï Z Y G Ó6; K ï; JH[ v6L G n K6Z ; H!G X×eh Î%¥^ KG >ìBu; JK B|n: ZbHK Y H y?lï Z Y G l fPa Z Y G&H =b> G fml H ; K a; JH[ BEl%Õeui : GQK&J : H Õeuk ëguq ëgF

Page 179: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N%q- !Í"qi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏÈÜnx(¾V¿6Õ^Ü/z|bÏÊÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "N%q

gu\ Z ^ K Ó6; [G :;; K ` HJ YQYåÕgu_ n=Q:6^ G :CB [G&OJ <Ï%: G L%;%p G :¥m` [GUOJ <Ï%: G LQ;%p G :¥CÕgd Z aãyñ [G&OJ <Ï%=^ín6=Q:^ G :/B [Z ^%= O Y G Ï K :=L ZbH <CyéÕoRR [G ^%= O B(p G : O ;^ GS[ ;PÍÎgue K :¥M×gug :;; K `Xn6=%:6^ G :/Bn:;%<:=b>áyEÕ RRtL N =b>=M; > K ; [ ; I%J6G a=QVS=t= H6à Y Z ^ Ggh ëgui L&= K L N yr9=Q:6^ G 6%ïQvL G n K6Z ; HzG guk ×hq Î&¥6^ KG >áB G ::/Bn: ZbHK Y H y G Br< GQKQÛG ^^%=Q< G yéÕhF ëh\ a ZbH =YY&¥c×h_ Î%¥6^ KG >ìB; JK B|n: ZbHK Y H yrn6=Q:6^ G :/B K ; j6G&H Ï^Q; J :L G Ba6; JH[ G v%::;%:Cyécfhrd lÈ G v Z L%=YT::;%:6^Pa; JH[ l&Õhe Î%¥6^ KG >ìB; JK B|n: ZbHK Y H yrn6=Q:6^ G :/BLQ; HK 96=Q:6^ G ::;%:fhg loÎ%¥ HK =L K6Z LT::;%:^Ta; JH[ l%Õhuh ëhihk ë RRÈ>= ZbH

· E M.:G+7US È E ¦ +:GR; E3E i>e 5 e:878W >WÿL>e E :87I E 5 e%: 5%E ; 5 7 5 78W<äCªoLC¤7G'W<+'7 5 V$e)M.'e9iV+W«Y%R E T 5 .W< 5 7G:8; E E +M' EGE E ; 5 5 :G ³&<?A o ? o ÇËDXD VY%R E T 535E e¯ E YR»¦ 5 7GWiW3­7G1 5 78 E 'e%:8­:GK+Cd¤ E65 R$:87 5%E ; 5 E E :8T 5 e E M.'e9 E %(5 eL;$iz17GK­I1>M Ë ? ]i;$ Ç eK; 5 W 5 RWiä178'­I1+MZ; 5 :G' 5 » ³?&½ HD iU9W<; 5 W)]+: 5 ; 5 9ü!)V$YR( 5 787G E 5 e;^ 5 eLT 5 pX:G>7GW<'eML.e'+'Mt;37UWi­:8'>V] M.:G>78;78Y%R E *v:87G'R â ; J 178K­I1+M Ë ? 78._i;­7G1 5 78 E .e%:U­:GK++7GK;ä;R78e%:GieL­M' E E 'e:U­:8'>C

6.3 Arquivos-fonte do compiladorf 7Ui78'7 5 e 5E8EG5 5 W<'MK; 5 7>V 5 7 5 N;$'W)>e%: 5 t+78W<e>+.eLM.:G+7U; 5 C6û +1+W 5E 7 5 p EGE 7 5 7UYR.1 5ÄC'A6ÁÂ-.-Ä?ÅÅ V;$+ 5 E V 5 W).MK7 5 7UYR.1 5C'AÁÂ1ÄbÅ7AÆcA Cy·2;H¦ >7G>eS+ ]Y%R^ 5 7U(g$ E :G 50E RP;$'7G+:G¯7G 5ܳ<?A o ? o ÇËcDXD V>Y%R 5 7878 E 5 e;$` 5 5 :8^;$^W< E W 5e 5 W)zz 5 e%:G]>Wÿ E MK E8E E 78¦ >7G>e%:G E 5%E e¯ E ;-­781 5 78 E 'e%:8­:GK+C-=»T 5 9­e>e9RWiWie>.7Ui;$ E t+78W 5E V 5 7»>eY%Re%: 5 V E 3i­7G1 5 78 E 'e:U­:8'>i 5 e E :87GR â ;i 5 787G E 5 e;b 5Y%R`;$ E *vW 5EZ5 R<eT 5 C l EGEG5E >78­( 5 7U;; 5 e 5 > â :GRM 5 qV 5 e;$a1+78+W 5E 5 W 5 'W<78.W<'7<­781 5 7G E 'e%:8­:8'>C

Page 180: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N !Í"N i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

Page 181: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N !Í"N"i

i

i

i

i

i

i

i

Capítulo 7

Exibição da ÁrvoreSintática=^ E :83+ â :GRM 5 1+78+W 5E 5 W 5 1 E RM.'_>7»#­781 5 7G E .e%:U­:GK+i 5 e E :G78R â ;it+M 5 e 5%EGEG5 · m C465 W E8E5 V% 5 ;$+W 5%E 1+78 Ç >7 E (e 5%EGE b'W<M.>W<+e%:8S+T 5 ;)­781 5 78 E .e%:8­:GK+0 E :8­) 5 7G78:UC· 7:8.70;$Í 5 7UVØeT 5 R$:8.M''_>78+W 5%E Wi E5 7UY%R'1 5 C v vbL7U䦧_+>7GW 5%E e 5E8E E 'W)M.+pW<+e%:8S È E Cd¤ :G7UM.9 5 ; 5 · m :8+78W<.e) 5 5 e E :87GR.7a3­7G1 5 78 E 'e%:8­:8'>3(3L7G:G'7F;$ E :8W 5 W<+e%: 5 V$'7G>W 5%EaE >W)7G 5 e E :G78R.7`7 5 7UWi E Y%R:GRLWî 5 W E Je>M'C·^M']+W ;$t+78W).:G'7»<1+78 Ç >S>T 5 ;i­781 5 78 E 'e%:8­:8'>V 5 +¯;. 5 W 5%E :878; 5 e E :G3> â p

:GRM 5#E +781J 5 W 5 RWi<'e%:G7 5 ;RS+T 5lJE ;$+Wi E ¦§ E E ; 5 e 5E8E5 5 W<.MK; 5 7NCZ· +g$.KS+T 5 ;­781 5 7G E 'e%:8­:8'>»]F¦ +:GR;( 5 7ZRW 5 ev*Re%: 5 ;$FW<]: 5 ; 5%E YRaeM' E W 5%E e¯ E ;(­781 5 7G ; 5 :UW E S È E eN E8E ­78' E 7U+g'.pXM 5E m%7U+;:8. 5 ;$ e¯V%g$ E :8»RW 5 RiWi EW<]: 5 ; 5E 5 787G E 5 e;+e%:G E Cä·e­M. E E +Wi®e:8'>Í>78S+T 5 ;$z¯$;$' 5E i7 5 + E8E Wg:8W<>e:8z;W< E Wi¦ 5 7GWiC 4 ;-e¯;-­7G1 5 78 E .e%:8­:GK+-;$+1 E +7<1 E .:8; 5 R$:8.M'.p_>e; 5)5E W<]: 5 ; 5E 5 787G E 5 e;+e%:G E 5E :G' 5E ;$e¯ E bYR(78>M.'_>W0:878¦§<;$ E v;VY%R+7 E *ve­M' E E >Wi®e%:GK+Vy+7US>T 5 ;$#¯$;$' 5 VÌY%R+7 E *v E .W<M' E W<+e%:Gi'W)7G EGE T 5;<­781 5 7G E 'e%:8­:GK+Cl 7G>W 5E 'e'+'M.W<>e:8VF E :8L>M.N+7# 5 W 5 YR+78+W 5E 1 E RM.'_>7i­7G1 5 78 E .e%:U­:GK+V

;$> 5 E V3;$ E +7G>1+7 E ;$RL E ¦§ E E eN E8E ­78' E 7UòY%Rà EGEG5 5%EGE E +7¦ >H: 5 Ñ 5 W 5'W)M.>W)>e%:8­prMK E C? EGE E ;$R E ¦§ E E0E T 5 &eRW<>78S+T 5 ; 5E e¯ E ;­781 5 7Gi-g$.'S>T 57 5 78KW<+e%:GJ;$.:8C

7.1 Exibição da árvore sintáticaödW 5%E R$:8.M'._N7(RWii¦ 5 7GWii E :Ue%:G E 'W<M. E ;31 E RM.'_>7»Í­7G1 5 78 E 'e%:8­:8'>V 5 R E *vV'e'+'M.W<>e:83eRW<+7U7 5E(E >R E e¯ E VB;$> 5 E VPg$'HprM 5E eL 5 78;$>W¨>W Y%Rb¦ 5 78W«eRW<+p7U; 5%E V%W 5E :G7Ue; 5)5 :G' 5 ;$+;be¯)Y%R EF5E eXHW<+7 5E ; 5%EFE +R EFÇ M.9 5E CZ·êeRW<+7US>T 5;$>1J.e'+'7p E Jt+MK<78._J E +7a¦ >H:U<7G'W<+'7 5 >Wî7 5 ¦ ReL;$';;$V 5 R E *vV E >R'e; 5 +;7UW 5 ;i­781 5 78 :G] 5)Ç eMC

">

Page 182: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"q !Í"Ni

i

i

i

i

i

i

i

"Iq Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

ödW 5E : 5 Wi7^ 5 W 5 g$+W<M 5<5 7 5 7UWi3 E +R.7N

`&h=^iXiÊ^¡iSXdb[7g `\[iSXd=:`S\&d b'[7S¤`

g¦¢¦`ó X:Ìb[7SÊf

T7d:b'[7S gVU ó¤g ÌÌm +R'e; 5 JeRW<+7US>T 5 ;$ E 78.:8V 5 $:8+W 5E ­7G1 5 78 E 'e:U­:8'>(; Ç R7UbqC'"CZ½^WiJ1>_

¦ +.:8-eRW<+7US>T 5 VØ1W 5%E g$''7)­7G1 5 78iW 5E :G7Ue; 5-E NY&k+e+'M.W<+e%:8Í+;RW ; 5%Ee¯ E C f 7Ub+;e¯LVW 5E :G7UW 5%E YRLMt] 50E +R<:8. 5 (YRL E@E T 5b5%E eXHW<+7 5E ; E +R EdÇ M.9 5E C465 W 5ä5E e¯ E Y%R E T 5cÇ É D³ eT 5zE T 5 e%RW)>78; 5E VPg$'.W 5%E ;.78: 5äE +R 5 e%:8H; 5 +W1>_;$JW 5%E :8787 E >RäeXHW<>7 5 Cf 7U 5 +g>W<M 5 L>e E 1 E : 5 V:G>7 â W 5%E E +R.e%:8 E â ;

U a b=iS ^ \=a7_ ² h=^iXi $ _`&h ^ \=a7_ ¢X¢=¢ ~ [XhXh~ U ² h=^i=i $ _`&h ^ \=a7_¢X¢X¢ ^[XchXh U ² h=^i=i ° \=a ^ \=a7_¢X¢X¢ [XhXh ã~X~ U a b=iS ^ \=a7_ ^&d $ _`&h ^ \=aX_ ¢=¢X¢ z [=chXh U ^&d $ _`&h ^ \&a7_Ê¢X¢=¢ iSXd:b'[7!eU a b=iS ^ \=a7_ ^&d ^ \&a7_ ¢X¢=¢ [XhXh U ^&d ^ \=a7_¢X¢=¢ g U a b=iS ^ \=a7_ ² \[:iS=d=:`S $ _`&h ^ \=a7_ ¢X¢=¢ z [XhXh U ² \[:iSXd=:`S $ _`&h ^ \&a7_¢X¢X¢ ¼ U,ñ_S=Q\=a ° \=a ^ \&a7_¢=¢X¢ ¦XX U a b&iS ^ \=aX_ ^&d $ _`&h ^ \=a7_ ¢X¢X¢ ¦~ [Xch=h~ U*^d $ _`&h ^ \=a7_¢X¢X¢ b[7S U a b&iS ^ \=aX_ ^&d ^ \=a7_ ¢X¢X¢ ¦% [XchXh% U*^d ^ \=a7_¢=¢X¢ ` U ° h&\`ö ^ \&a7_¢X¢X¢ ¼ eU a b&iS ^ \=aX_ ° S^S_f:_[XS ^ \=a7_ ¢X¢=¢ [XchXh U S=d:bg ^ \&a7_¢X¢X¢ ¼Qw U*^d ^ \=a7_¢=¢X¢ g U a=a ^ \=a7_¢=¢X¢ ¤~X ó ~:~X U*^d ^ \=a7_¢=¢X¢ `~: U ° S=d:b[7 ² \[:iS ^ \=a7_¢X¢X¢ ¦X~X~ U a b&iS ^ \=aX_ ñ_&S&Q\=a $ _`&h ^ \=aX_ ¢X¢X¢ ¤~X [XchXh

Page 183: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+

%&

¬"q"

!Í"N/

i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ï0/1xl¿0»×1F×z|bÏñ

Ý»Ü\ð»ÕlÝ6ÏaÕN¿ò

Ó$×*Ò0ÔLð^Ô[×+ÎZÜ"q"

23 45 67 8 9: ;<

2= 4>? @7 7 A <B ? 9: ; <

C: D<EF @ 2G 4 >? @7 7 H : ;I 9: ; <

2J 4 5 67 8 9: ; < 2K 45 67 8 9: ;< 2= = 45 67 8 9: ; <

2L 4M @N A< B ? 9: ; < 2O 4 > : E 7 8 NP B 8 A <B ? 9: ; < 2= G 4Q < 8 R : ; A <B ? 9: ; <

C: D<E F 7 8 N 6E S 2T 4 5 67 8 9: ; < 23U 4 Q < 8 R : ; H : ;I 9: ; < C: D<E F 6E 8 C: D<E F V 2 = J 4Q < 8 R : ; H : ;I 9: ; <

2W 4M @N 9: ; < 2 3 3 45 67 8 9: ;< 2 3 L 4 H? : B D 9: ;< 2= L 4 H? : B D 9: ;<

C: D<EF X 2 3 = 4M @ N A <B ? 9: ;< 23 T 4 5 6 7 8 9: ; < 2= T 45 67 8 9: ; <

C: D<E F 6E 8 2 3 G 45 67 8 9: ;< 2 3 W 4Y 8 N 6 X 9: ; < 2= W 4Z N 6E 8 9: ;<

23 J 4M @ N 9: ;< 23 K 4M @N 9: ; < 2= K 4Y ; ; 9: ; <

C: D<EF B C: D<E F X 2 3 O 4Y ; ; 9: ;< 2= O 4[ 8 N 6E S> : E 7 8 9: ; < C: D<E F \ 2G U 4M @ N 9: ;<

2=U 4M @N 9: ; < C: D<EF \ 2= 3 4 [ 8 N 6E S> : E 7 8 9: ; < C: D<EF ] XF ] C: D<E F X

C: D<E F B C: D<EF ] ]

^_` ab c dfe g h ikj lm n oqp r l sbt p b lu _v w s w _x c v a m lb c r ce

Page 184: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D£' ©M§¨X¯ Db®%ªi

i

i

i

i

i

i

i

"Iq Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

~X U,ñ_S=Q\=a $ _`&h ^ \&a7_¢=¢X¢ b[7SÊf ~~ U,ñ_S=Q\=a ° \=a ^ \&a7_¢=¢X¢ [XchXh ~~ U ° h&\`ö ^ \&a7_¢X¢X¢ ~ ~ eU a b&iS ^ \=aX_ ° S^S_f:_[XS ^ \=a7_ ¢X¢=¢ ~ [XchXh~ U db[7S ^ \&a7_¢X¢X¢ ~~ U a=a ^ \=a7_¢=¢X¢ ¤~ ó X~ U ° S=d:b[7 ² \[:iS ^ \=a7_¢X¢X¢ ¦ g«U X U*^d ^ \=a7_¢=¢X¢ g2 ReL; 5 RW ; 5E Ç M'9 5%E ;0RW ;$:8+78W)'e; 5 e¯zeT 5 +g E :GVÌR$:G'M.'_>p E 7±d78Í7G+p

78 E +e%:87b E8E E .:GRS+T 5 C fZ5 73+g$+W<M 5 V 5 e¯eXHW<>7 5 ]#RW Ê­D7?Q Hº H<½ H7D Y%R;$>1+78K<:G>7 RWÏ» ³?&½ HD 0RW ;:?A?=D>³DQ?&½ H7D 5 W 5#Ç M'9 5E C 465 W 5Í5 W)]+: 5 ; 5 ! ; 57 5 78W<3eM. E ; 5 eLT 5 5%EGE RP7U®W<+:G7 5E V+e%:UT 5)5 78'W)>.7 50Ç M.9 5 eT 5 +g$ E :GJ :G+W 5%E|C=C e 5 e¯iC4 ;¥» ³?&½ H7D +g$.K; 5 W 5%E :878^Y%RM] 5 :G' 5 ;$6e¯FG 5 e%:GK; 5 ke^M' E :UC fZ5 7Ìg$>W)M 5 V

5 e¯zeXHW<>7 5 ">/z]0RW » ³?&½ H7D Rv 5äÇ M'9 5 ]<RW x'A6˽ HD C 465 W 5z5%E : 5 º>e E eT 5E T 5eRW<+7U; 5%E VZL78>>W ;$'78: 5 eg$'KS+T 5 ;$ E +R E E C f[5 73+g>W<M 5 V 5 e¯-]#RW¶@HMHQ½ HD +Rv 5EFÇ M.9 5%E`E T 5<5E e¯ E 0b/ )JRW Ç É DQ Y%Rb 5 787G E 5 e; 5iEGâ W0 5 M 5 z`C?dW3 5 7Ub'W<M'+W<+e%:8S+T 5 ;g$'KS+T 5 ;b­781 5 7G E .e%:8­:GK+JeT 53E *v(¦ +.:83e 5 78Y%R'1 5

C v vV;$+1+W 5E ¦§_>+7FLNYR+e E MH:8+7US È E e 5 W)]+: 5 ; 5 78.e+.LMP; 5 e 5%EGEG5 5 W<'M'; 5 767UY%R) E8E Íg$.'S>T 5zE *v#¦ +.:8Cb·Ë7G'W<+'78z;$+MK E ])z'eM'R E T 5 ;0RWi 5 PS+T 5 9 ü±c þe E M.'e9 E /<ii; 5 7 5 7UWi<qC'"C

9:;%<:=?>=¾'CBEDF RRTÞ G a ZbH6G ; > K ; [ ;ml>= Z?H l [ =AL%YQ=^^ G Y%= H <Ô/B\ n JO Y Z Lw^ K = K6Z LPp; Z&[ >= ZbH yÎ K : ZbH <c=Q:<^ K&N :;&ß^T9=Q:6^ G v6L G n KZ ; H_ ×d O ;;QY G = HM[G&OJ <Ï%=^t`ta=Y^ G Õe O ;;QY G = HM[G&OJ <Ï&: G LQ;%p G :¥`Pa=Y^ G Õg O ;;QY G = H n: ZbHK Ï K : GG `Pa=Y^ G Õhi Î K : ZbH <Aa Z Y G&H =?> G `llÕÜRR H ;?> GS[ ;T=Q: I%JZ p;S=A^ G :A= H =Y Z ^%= [ ;k Y%= H <ÔPn=Q:6^ G :Õ RRP= H =Y Z ^%= [ ;%:cY%Qv Z LQ;QR^ ZbHKàQK6Z LQ;Frq Z?HKcZ ÕFuF O ;;Y G = H >^T`ta=Y^ G ÕFr\Fr_ Î&¥6^ KG >áB; JK Bn: ZbHK Y H yØ G :6^ Z ; H ÕF|d RQRSYQS;^on6=Q:â?> GQK :;^Xn6=^^%= [ ;^Xn6=Q:=A;ALQ;?>n Z YQ= [ ;%:Fre a;%:ãy Z `PsÕ ZTä =Q:<^åBY G&H < K%N!¨ DÕ Z ffFrg ×Fh Z aãyu=Q:<6^ Z& B GQI&J =Y^çyl ¨b[G&OQJ <Ï%ÍÎl%Fri [G&OJ <ÏQ=^t` K : J6G ÕFrk G Y^ G\uq Z aãyu=Q:<6^ Z& B GQI&J =Y^çyl ¨b[G&OQJ <Ï%: G LQ;%p G :Q¥lQ\F [G&OJ <Ï%: G LQ;&p G :¥c` K : J6G Õ\u\ G Y^ G\u_ Z aãyu=Q:<6^ Z& B GQI&J =Y^çyl ¨ n: Z?HK Ï K : GG l%\d n: ZbHK Ï K : GG ` K : J6G Õ\ue G Y^ G\ug ×

Page 185: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"q/ !Í"Noi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ï0/1xl¿ 0»×1F×z|bÏñÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "q/

\h Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lîè^%=Q< GZ ^å­ Ö =Qp=AYQ= H <Ôò ¨b[G&OJ <Ï&ÍÎ líf\ui l ¨b[G&OJ <Ï&: G LQ;%p G :¥ ¨ n: ZbHK Ï K : GGQmZbH n JK a Z Y G l%Õ\uk Î%¥6^ KG >ìB G v Z&K ysÕ_uq ë_F ë_u\_u_ Z aãy=Q:<^ Z& B GQI%J =Y^çy?l ¨ l&_d × RRtYQ [ = G&HK := [ = ¨ n6= [ : ;_ue Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lE G = [6ZbH <aQ:;?>z^ K = H[ =Q: [ZbH n JK BSBtBl&Õ_ug n6=Q:^ G :A` HG ßcYQ= H <ÔCyÎ%¥^ KG >ìB ZbH ÕÈRRSLU: Z =tÍÎ_h ë_ui G Y^ G_uk × RRtYQ [ ;t=Q: I&JZ p;dq a Z Y G&H =b> G `P=Q:<6^å=Q:<6^çBY G&H < K%N¨ D ÕdîF Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y?lE G = [6ZbH <aQ:;?>a Z Y G lífTa Z Y G&H =b> G fmlBtBSBl&Õd\ K :¥A× RRSL&: Z =tÍÎd_ n6=Q:6^ G :A` H6G ßMYQ= H <Ôy H6G ß Ö =%p=CB Z ;åBï Z Y G Ò H n JK Î K : G =?>áyua Z Y G&H =b> G QÕdud ëde L&= K L N y Ö =Qp=CB Z ;Bï Z Y G Ó6; K ï; JH[ v6L G n K6Z ; H!G X×dg Î%¥^ KG >ìBu; JK B|n: ZbHK Y H y?lï Z Y G l fPa Z Y G&H =b> G fml H ; K a; JH[ BEl%Õdh : GQK&J : H Õdi ëdk ëeuqeF Z ^ K Ó6; [G :;; K ` HJ YQYåÕeu\ n=Q:6^ G :CB [G&OJ <Ï%: G L%;%p G :¥m` [GUOJ <Ï%: G LQ;%p G :¥CÕeu_ Z aãyñ [G&OJ <Ï%=^ín6=Q:^ G :/B [Z ^%= O Y G Ï K :=L ZbH <CyéÕoRR [G ^%= O B(p G : O ;^ GS[ ;PÍÎedeue K :¥M×eug :;; K `Xn6=%:6^ G :/Bn:;%<:=b>áyEÕ RRtL N =b>=M; > K ; [ ; I%J6G a=QVS=t= H6à Y Z ^ Geh ëeui L&= K L N yr9=Q:6^ G 6%ïQvL G n K6Z ; HzG euk ×guq Î&¥6^ KG >áB G ::/Bn: ZbHK Y H y G Br< GQKQÛG ^^%=Q< G yéÕgF ëgu\ a ZbH =YY&¥c×gu_ Î%¥6^ KG >ìB; JK B|n: ZbHK Y H yrn6=Q:6^ G :/B K ; j6G&H Ï^Q; J :L G Ba6; JH[ G v%::;%:Cyécfgd lÈ G v Z L%=YT::;%:6^Pa; JH[ l&Õgue Î%¥6^ KG >ìB; JK B|n: ZbHK Y H yrn6=Q:6^ G :/BLQ; HK 96=Q:6^ G ::;%:fgug loÎ%¥ HK =L K6Z LT::;%:^Ta; JH[ l%Õgh ëguiguk RRPp G : Z a Z L%=c^ G n; [GcZ >n: Z > Z :M= à :p;%: G ^ ZbHKà%K6Z L%=hq Z aãyðn6=%:6^ G :/B K ; j6G&H Ï^Q; J :L G Ba; JH[ G vQ::;%:yEhF fTn=Q:6^ G :CBLQ; HK 9=Q:6^ G ::;%:``SsÃÃPn: ZbHK Ï K : GG h\ ×h_ 9: Z?HK : GQG n: K ` H6G ßS9: ZbHK : GG yEÕhrd n: K B|n: ZbHK 6;; K yu:;; K Õ RRAL N =b>=o> K ; [ ;Tn=Q:= Z >n: Z > Z : à :p;%: Ghe ëhghuh ë RRÈ>= ZbH

Page 186: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D£'Qª §¨X¯ Db®Q«i

i

i

i

i

i

i

i

"Iq Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

f 7U.W<M'+W<>e:U7<eRW<+7US>T 5 zg$.'S>T 5 ;­781 5 7G E .e%:U­:GK+Vkg$ E :8+W ;$'1+7 E EM.:G>7GeL:G'1 E C[· E Wi EFE 'W<M' E ;$+MK EFE >7GKW 'eM'R'7>V%7Ub>; 5 t+7US+T 5 5 W 5 e%RW)>7875 R+g''7>VØRW W<]+: 5 ; 5 +Wÿ+;RWi; E +M' EGE E 5 787G E 5 eL;$+e%:G E 5E e¯ E ;­7G1 5 78m78K7(RWi,He'>z+M' EGE 3<;$+e%:87 5 ;$ E :8z.eLM'R.7JW<]: 5 ; 5E Y%R<>H:UWæ 5 W 5 78RW)>e%: 5RW¨e¯<7GNM'._NW Ea5 L>78S È E ;$ E v; EaE5 7GJ EGE e¯C

·ê7G'W<+'780]V E +W¨;7H1';VWi E +M'+e%:GV% 5 E W<e%:G]+W¨ Ç M 5EG5Ç 3;)7 5 78W<S+T 55 78'+e%:8;0 5 $v*: 5E C f[5 7G]>WV+R E 0RW¨++7G: 5 :G7Ue E : 5 78e 5 Y%Re; 5 :G>W 5E Y%RbM.:G>787 5 R 5 7G78''76e 5%EGE 0.W<M'+W<+e%:US+T 5 V 5 E E :8) E :8­0 E M'9;3 5 7^;.1+7 E5%E 78Y%R'1 5%E ;$.¦ +78+ep:G E Cb· E +Re;VPt E 7J;$<;$ E +M'+%e%:GVt;.W<'e%R 5 E ¦ 5 7US 5 7GNYR+78'; 5 7UiWie%:8+78W 5%Ee 5%EGE ä.W<M'+W<+e%:US+T 5 C#· EGE .WV[1W 5E +7GK7RWi+M' EGE ´Ëå?ÇQËDXD ;$+e%:G7 5 ; 5 5 :G³&<:?A o ? o ÇËDXD V>YR`]`7G E 5 e E ­I1>M 5 7kg$..7@J­7G1 5 78 E .e%:U­:GK+CØ= E M'.e9 E q qo(; 57 5 78W<bq$C."`]»+7GK; 5 RW 5 $v*+: 5 ; 5 :8. 5 ´Ëå?ÇËDXD »U9Wi; 55 W<]: 5 ; 5N/Ëç?&· ? EGE e; 5 p E 5 W 5 78RW<>e: 5i5 e¯Í78._3;#­781 5 7G E .e%:U­:GK+V78: 5 78e; 5 t+M 5 · m CP= 5 :8Y%RJ E8E 5 t+7US>T 5)E ¯< 5 ;+7U­ E +7a78>M''_>; E 5 eXHW<+7 5 ;$J+787 5%E >e 5 e%:G7U; 5%E e E e­pM' E E M']g$K+) E 'e%:8­:8'>0¦ 5 7`_+>7 5 C=» E 78¯Ig'Wi EFE NS È E V$W 5E :G7U78+W 5E 5 W 5 <+M' EGE ´Ëå?ÇQËDXD ]J'W<M.>W<+e%:8;C

7.1.1 Numeração dos nós·+M' EGE ´Ëå?ÇQËDXD ]b;$ Ç e';#;$+e%:87 5 ; 5 L 5 :G ³&<?A o ? o ÇËDXD V 5 W« E MK E8E E Y%R 5 7G78 E 5 e;$>W¨ 5E e¯ E ;#­781 5 7G E .e%:8­:GK+C f 78.W<+'7UW<+e%:GVL>M'#]378 E 5 e E ­I1+My 5 7 e%RpW<+7U7ä+;,RWÙ; 5E e¯ E ;Ñ­781 5 78C f 78 EGEG5 V E T 5 ;$ Ç e'; 5E ;+e%:G7 5 ;$>M'àW)]+: 5 ; 5%E E t> â.Ç 5E 78iM''>7^ EGE 5 t+7US>T 5 #+;):G' 5 ;$3e¯Í;i­781 5 7GC fZ5 7 g$+W<M 5 V:G+pW 5E RWW)]+: 5 ; 5 L7UJe%RW)>787dRWÉ C'A6³³¾­D o CE½ HD VNRW 7Uµ C'A6³³º H<½ HD VN EGE 'W 5 7^;$Ke%:GC· E :G78R$:GR78<;<MK E8E ( 5 ;$ E +7a7G>78 E +e%:8;0 5 W 5 W 5E :G7U 5 7 5 78W<<qCª

9:;%<:=?>=¾'CB ©F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde n JO Y Z LALQYQ=^Q^X9: ZbHK : GG ×gh ZbHKPjQj Õik n JO Y Z LT9: ZbHK : GG yEFrq ×FuF jj `mDÕ RR ZbHZ L Z =Y Z V=LQ; HK = [ ;%: [GoH x^Fr\ ëFr_F|dFre n JO Y Z LPp; Z&[ n: ZbHK 6;; K yr Z ^ K Ó; [G vFrg ×Fh Z a-y vS`Q` HJ YYMFri Î&¥6^ KG >áB; JK Bn: ZbHK Y H y?lEU>n K ¥!^U¥ HK = KZ L K : GG B(Ó6; K%NZbH < K ; O6G n: Z?HKGQ[ l&ÕFrk G Y^ G\uq ×

Page 187: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"qo !Í"N%qi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ï0/1xl¿ 0»×1F×z|bÏñÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "qo

\F HJ > OG :ÙYQ=^^UÞ G L%Y& Z ^ K Ó6; [G yvÕ\u\ n: ZbHK ÙYQ=^Q^UÞ G LQYU Z ^ K Ó; [G yuvÕ\u_ ë\d Î%¥^ KG >ìBu; JK B|n: ZbHK Y H yEÕ\ue ë\ug\h yz|~&0z\ui\uk yz|~&0_uq_F ë

· 178'­I1+MÉÉ ] 5 5 e%:U; 5 7); 55 $v*: 5A´Ëå:?ÇËDXD VkY%R;$'_Y%RM`] 5 eXHW<+7 5 ; 578¯Ig$.W 5 e¯) E +7Fe%RW)>78; 5 Cd¤ê 5 e E :G78R$: 5 7@;3+M' EGE E 'W)M. E W<+e%:8»'e'+'M.'_>b E8E 1IM 5 7+W«"C@¤ÊW<]: 5 ; 5N/Ëç?&· ? 78>>L^ 5 W 5 78®W<:G7 5J5 e¯b7U'_^;b­7G1 5 78a^.eLRW0L+p E ;$<U9Wi7 5%E W<]: 5 ; 5E Y%R)1IT 5 eRW<>787 )g$'.7 5%E e¯ E ;z­7G1 5 78 E 'e%:8­:GK+VBY%R E T 5>­BXDË CA³³¾­D o C » ³c?&½ HD N/Ëå? C'A³³¾­D o C » ³c?&½ H7D C-? E8E W<]: 5 ; 5 ]U9W<; 5t+M 5 5 W<'M'; 5 7a78)+gNR$:U7`)g$''S>T 5 ;<­781 5 7GV% 5 W 5 1.W 5E e 5 7 5 7UWi)q$C."C

¤ÑW<]: 5 ; 5 YR@eRW<+7U`RW\;$+:G+78W<.eL; 5 :8. 5 ;de¯»eLT 5 78>+ E `;$ E >W)t+e97ØW3R.:8 E:87G+¦§ E CZ?dM.b;+1L>e E

•:G78.R.7^ 5 e¯iYRM.9(¦ 5 B E8E ; 5 5 W 5 7GRW<+e%: 5)5 1IM 5 7`;)1I7GK­I1>MúÉɪm

•'e+7G>W)>e%:87ðÉÉem

•U9LWi7 5%E W)]+: 5 ; 5%E 7U3eRW<>78S+T 5 V E8E e; 5 5 W 5 7GRW<+e%: 5)5EFÇ M'9 5%E ; 5 e¯Y%RM'9J¦ 5 y E8E ; 5 5 W 5 78RW)>e%: 5 C

f 7U 5 ;+7#:87G'R'7)RW eXHW<+7 5 5 e¯LVd1W 5E W 5 ;$ Ç +7<MK E8E »=D:DËACE½ HD V'eM'R'e; 5 RWiie 5 1)178'­I1+M >³B=DË 78<78Wi_>+e7F EGE <'e$¦ 5 78WiS+T 5 C@· e 5 1Ii+M' EGE ]JW 5E :G7U;0e 5 7 5 78W<<qC /C

9:;%<:=?>=¾'CBu@F n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde = O ^ K :=L K n JQO Y Z LALQY%=^^PÑ GUH6G :=YUÓ6; [G ×g n JO Y Z LP; j6GUH n;^ ZUK6Z ; H Õh n JO Y Z L ZbHKPHQJ > O6G :Õik n JO Y Z LtÑ G&H6G :=Y&Ó6; [G yu; j6G&H vFrq ×FuF n;^ Z&K6Z ; H `PvCÕFr\ HJ > O6G :A`tsÕFr_ ëF|dFre ë

Page 188: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"q !Í"Ni

i

i

i

i

i

i

i

"Iq Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

ödW 5E : 5 Wi7k 5 W 5 g$+W<M 5J5 W<]+: 5 ; 5 Y%Rae%RW)>78(RWe¯; 5 :G' 5 C'A³³º H<6½ HD C½ EG5 Rp E 0 5 W 5 L;$7UT 5 .e+M.R.7 5 78 Ç g 5X>³BXDË Wi E(5 :8. 5 ; 5 e¯z78ä;$>e 5 W<'e7 5W<]: 5 ; 5 V 5 $:G>e; 5 p E Ve E8E b+ EG5 V >³B=DË C'A6³³º H<½ H7D Cy?dM'] E 'W<M' E W)>e%:Gb;$ Ç eK; 5 5 W 5 W 5%E :878 5 7 5 7UWi)q$C LC

9:;%<:=?>=¾'CBªF n JO Y Z LPp; Z&[THJ > O6G :ÙYQ=^Q^UÐ6; [ ¥%Ó6; [G yuÙYQ=^^bÐ6; [ ¥QÓ; [G v\ ×_ Z a-y vS`Q` HJ YYMí: GQK&J : H Õd v/B HJ > O6G :M` jj fQfÕe HJ > O6G :ÙYQ=^^UÞ G LQY& Z ^ K Ó6; [G yuv/BL%Y Z ^ K Õg HJ > O6G :QØ=Q:QÞ G L%Y& Z ^ K Ó6; [G yv/BpY Z ^ K Õh HJ > O6G :Ù; H ^ K : J L K Þ G LQY& Z ^ K Ó6; [G yuv/BL K Y Z ^ K Õi HJ > O6G : ÛGQK%N ; [ Þ G LQY& Z ^ K Ó6; [G yuv/B >Y Z ^ K Õk ë l eKKM'W)>e%:GVÌ1+78 Ç + E 5 1M 5 7 EGE ; 5 5 W 5 7GRW<+e%: 5 eT 5 ] |CXC C l EGEG5 ])e+p

EGE ­78 5 V[ 5 E M'Re E e¯ E 5%EGE R>W Ç M.9 5%E Y%Rz 5 ;$>W 5 R,eT 5 7GN>7>CP2 Re; 5 eLT 5L78>>WV E +Rò1M 5 7#] |C=C C f 7U+1H:U78W 5E 1+78 Ç >S>T 5 7U: 5 ;¬U9Wi;,;$W<]: 5 ; 5 ¦ +.:8L7U 5E e¯ EJÇ M'9 5%E VZe¯ E 'eM'R â W 5%E e 5 .e â 5 ; 5 W)]+: 5 ; 5 VZ EGE 'W U9pWi; E >W)7G ]^¦ +.:837U 5%E e¯ EkÇ M'9 5%E C m +M' E eT 5 +g$ E :G'7G>WV 5 W)]+: 5 ; 5)E 'W<M. E W<>e:878: 5 7GeLV E >We;0¦§_+>7>C?dW E >RK;VÌ+M'#:G78'Rk78ä178'­I1+M >³BXDË ; 55 $v*+: 5 Y%R<¦ 5 dL E8E ; 5 5 W 5

78RW)>e%: 5J5 1M 5 7@;(ÉÉ^'e78+W<>e:UÜÉÉC[?dW E +R';VU9W<JL7U+;JRW ; 5EdE +R EÇ M'9 5Ea5%E W<]: 5 ; 5%E 7G E t>:G'1 5%E Y%RJ¦§_+>Wî)e%RW)>78S+T 5 C

= 5 :GY%R W0R.:8 E 1+_+ EF5E6Ç M'9 5E ;$(RWe¯)eT 5 5E8E R+W eXHW<+7 5E 5 e E NR$:8.1 5E C[= 5+ E5 ; 5 W<]: 5 ; 5A>³BXDË C'A³³º H<½ HD Vt 5 70g$+W<M 5 V 5&Ç M.9 5 ¹ Ä o C³? 5 7G78 E 5 e;$J 7U'_;$RWi E R­7G1 5 78äY%R E +7U­-: 5 ;,eRW<>78;e%:G E Y%R 5Ç M'9 5 ¹ ÄÆ|CQ³?òE veRW<+7U; 5 C m 5 e¯¯¹278>++t 5 e=HW)>7 5

N0 E R­781 5 7Gb;$,¹ Ä o C³? 5%EGE R

Je¯ E

E +78+WîeRW<>78; 5E ù +gM'R.eL; 5 p E 5%E e¯ E ; 5 :G' 5AÇ É D úV+e%:UT 5<5<Ç M'9 5 ¹ ÄEÆ|C³? 78>++t5 eXHW<+7 5

N + J + 1C

=»T 5 1IW 5E W 5E :G7U7YR 5E W<]+: 5 ; 5E 7Uz: 5 ; 5EJ5%E :G' 5E ;$Íe¯ E VÌ 5 EbE T 5 : 5 ; 5%EW3RH: 5E 'W<M. E iW0RH: 5 78>+'; 5E 5 W 5 W<]: 5 ; 5A>­BXDË CA³³º H<6½ H7D Y%R#;$ E +7G+p1>W 5E e%:G>7G 5 78W<+e%:GC ödW 5%E L>e E 5 W<+e%:87 M.Re E + EG5E E t>K E Cb¤7G'W<+'7 5 ]78¦ +78+e%:8J 5E e¯ E ; 5 :G' 5 » ³?U½ HD C

465 W 5 v­ E t+W 5%E VRWλ ³?U½ HD&E >7G1J7Ui7GRL7^;$'1>7 EG5E e¯ E ; 5 W< E W 5 :G' 5e¦ 5 7GWi;ÍRWiM' E :8C&· E8E .WVk 5 1 E .:87GW 5%E RW´e¯&;$ EGE i:8. 5 VdY%R>7G>W 5%E V[e1+7Gp;;$V1 E .:87F+;b>M.>W)>e%: 5 YR 5 W< È JbM' E :8Cd¤ W<]+: 5 ; 5 YR»eRW<+7UbRW » ³?&½ HD;$>1+78KV+e%:8T 5 V EGE +W<+M'97p E ( 5 W 5 7 5 7UWi)q$C oC

9:;%<:=?>=¾'CBF n JO Y Z LPp; Z&[THJ > O6G :Q Z ^ K Ó6; [G yr Z ^ K Ó; [G v\ ×_ Z aãyævA`Q` HJ YQYco: GQK&J : H Õd RQR HJ > G :=tv/B H ; [Ge HQJ > O6G :% Z ^ K Ó; [G yuvCB H6G v K Õg ë

Page 189: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"qq- !Í"Ni

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ï0/1xl¿ 0»×1F×z|bÏñÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "qq

¤M.>H: 5 7^ 5 ;$L>78++t+7 5 7 5 M'+Wi)e<M.'e9#C f 7GN E W 5%E`E L>7»Y%RMÌ] 5 :G' 5 ;$¹ Ä HD 78Y%RÍ 5%EGE W 5E U9Wi7 5 W<]: 5 ; 5 5 7G78: 5 7U E8E i:G' 5 ;$Íe¯C?eLT 5;'e:Uz 5 e E :G78R'7GW 5%E RWiäW<]: 5 ; 5t>³B=DËå»XDDËAMCE½ HD YR)+.:Gi 5 W 5 L7U®W<:87 5RW »XDDËAMCE½ HD V 5 R E vV^Y%RMKY%R+7Í:G' 5 ;$e¯LV^ 5 7UYR&;$+e%:87 5 ; E8E W<]+: 5 ; 5 eLT 5E t+7 â W 5%E 5 W 5 5 e:8.eR7`<e%RW)>787 5E e¯ EFÇ M.9 5E CfZ5 73 E8E5 VØ78>+ E W 5%E :G>73RW´W<]: 5 ; 5 7UeRW<+7U70+;ä:G' 5 ;$#M' E :8-YR# 5%EGE

L78>>7ae)e 5E8E <­7G1 5 78 E .e%:8­:GK+C f[5 7`g$+W<M 5 V 5 e¯)7U'_;i­781 5 7G ]RW » ³?&½ HDRv 5E +M'+W<+e%: 5E(E T 5 C'A6³³¾­D o CE½ HD³ C`· E8E .WVBU9W<W 5E L7U# E8E "» ³c?&½ HD&5 W<]+p: 5 ; 5ð>³BXDË C'A³³¾­D o C » ³?b½ HXD V8W 5E :G7U; 5 E +R.7NV>e 5 7 5 7UWi^qC C 465 W 5^E L>W 5%EY%R E +R E +M'+W<+e%: 5%E^E T 5#E +W<78 C'A³³¾MD o CE½ HD³ V 5 ;$+W 5E U9Wi7 5 W)]+: 5 ; 5 5 787G+: 578-eRW<+7U­prM 5%E V@Y%R] 5m>­BXDË CA³³¾­D o CE½ HD CödM'äe 5 :87#Y%R 5-Ç M.9 5 HD ;MK E8E ¨» ³?&½ H7D ¦ 5 y;$>+M'78; 5 5 W 5X»XDDËAMCE½ HD V 5 7F E8E5 V7GN E W 5E R$:8.M''_>7FRW5 t+7U; 5 7a;$, Ì 5 U9W<7GW 5%E8>³BXDË C'A³³¾­D o Cî½ HXD eL0M''e9iC

9:;%<:=?>=¾'CBu«F n JO Y Z LPp; Z&[THJ > O6G :ÙYQ=^Q^UÞ G LQYU Z ^ K Ó; [G y Z ^ K Ó6; [G v\ ×_d Z ayuvA`` HQJ YY6o: GQK%J : H Õe v/B HJ > O6G :M` jj fQfÕg HJ > O6G :ÙYQ=^^UÞ G LQY&Ó6; [G yyÙYQ=^^UÞ G LQY&Ó; [G Mv/B H ; [G Õh HJ > O6G :ÙYQ=^^UÞ G LQY& Z ^ K Ó6; [G yuv/B HG v K Õi ë

f 7U 5 e 5E8E5 · m V[:G>W 5%E0E :8#:8. 5E ;$ E :8.e%: 5E ;$ÍM' E :8 E Vd 5 7G:8e%: 5 V E +:GzW)]+: 5 ; 5%E78JeRW<+7U7 5E » ³?&½ HD³ >³BXDË C'A³³¾­D o C » ³c?&½ HXD ù M' E :8b;C C'A6³³¾­D o CE½ HD ú V>­BXDËx'A˾­D o C » ³c?U½ HXD ù M' E :8`;$ xA6˾­D o CE½ HD úV >³BXDËx'A6Ë » ³?&½ H7D ù§M. E :U`;$ x'A6˽ HD ú V>­BXDË ³?Ë o ?U¾MD o C » ³?U½ HD ù M' E :8»;$ ³?Ë o ?U¾­D o CE½ HXD ú V >­BXDËÊ­DX? HQ¾MD o C!Ä» ³c?&½ HD ù M' E :8ä;$ Ê­D7? HQ¾­D o Cé½ HD úV >³BXDË=;:?A?=D >³D? » ³?b½ HD ù M' E :Uz;$ ³?A?=DKÄ>³D:?&½ HD úw >­BXDË6¸ ¹ N/ËD » ³?U½ H7D ù M' E :U); ¸ ¹ N/ËD%½ HD ú C½^W 5 R:G7 5 5 e%: 5 5 W 5 Y%RMt;$+1+W 5E :8+7FRK;; 5bE T 5 Y%R+M' E e¯ E Y%R`:I+W 5 W 5JÇ p

M'9 5 M'RW e¯^; 5 :8. 5/;:?A?=D>³D:?&½ HD C f[5 7Bg$>W)M 5 V+78FeRW<+7U7yRW Ê­D7?Q Hº H<½ H7D V:G>W 5Ea5 W<]: 5 ; 5 ; 5 7 5 7UWi)q$Cªq$C

9:;%<:=?>=¾'CB('F n JO Y Z LPp; Z&[THJ > O6G : ÛGQK%N ; [ Ð6; [ ¥QÓ6; [G y ÛGQK%N ; [ Ð6; [ ¥QÓ; [G v\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : H Õd v/B HJ > O6G :M` jj fQfÕe HJ > O6G :QØ=Q:QÞ G L%Y& Z ^ K Ó6; [G yv/B|n6=Q:=b>Õg HJ > O6G :Î K = KG > G&HK Ó6; [G yuv/B^ K = K Õh ë

?dM')U9Wi >³BXDËX;?A?=D>­D?U½ H7D 78#e%RW)>787»#L7G:G3;z­781 5 7G E .e%:8­:GK+# 5 7Gp78 E 5 e;$+e%:8( 5 ù E ú6 5 Wie; 5 ù E ú6; 5 W<]: 5 ; 5 Cks EF5 Y%RJ;$+1 ¦§_+>7F EGE (W)]+: 5 ; 5 465 W 51.W 5%E VÌ;+1<eRW<+7U7 5 e¯Y%R<M.90¦ 5 d EGE ; 5 5 W 5 78®W<:G7 5 VÌ>e:UT 5 VÌU9Wi7 5%EW<]: 5 ; 5E 78JeRW<>787G>W 5E@E >R EZÇ M'9 5E C fZ5 78]+WV 5 e¯0YR^]» 5 e%:U; 5 5 7N¹ Äb³?A? eLT 5

Page 190: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"q !Í"N i

i

i

i

i

i

i

i

"Iq Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

]#78>M.W<+e%:8iRW ;:?A?=D >³D?&½ HD VL 5 E EGE ]#RWi+M' EGE # E :878:8Cz?+;RWi; EE R EkE RPMK E8E E 5%EGE R Ç M'9 5E ;H¦ >7G>e:8 E V 5 Y%Ra¦§_` 5 WËY%R >³B=DËX;:?A?=D>³D:?&½ H7D eLT 5 5E8E 3¦§_>+7^iU9W<;) 5 7878:8078 5EFÇ M'9 5%E ; 5 e¯#Y%R(¦ 5 B EGE ; 5 5 W 5 7GRW<+e%: 5 V)eT 5iE +7^Y%RJ 5E8E <;$ E 5 78.7`Y%RMy] 5 :8. 5 7GNMB;$ EGE Je¯C

¤òY%RF¦§_>+W 5E V>e:UT 5 V]^78'7ØRW >³BXDËX;?A?=D>­D?&½ H7D Y%R E 'W<M. E W<>e:8`U9Wi5 R:G7 5E W<]: 5 ; 5E E t> âHÇ 5E V;$>L>e;$>e; 5 ; 5 :G' 5 ; 5 e¯ÍY%RM'9b]bL E8E ; 5 5 W 5 7GR$pW<+e%: 5 CZO 5 Y%RJ]e 5%E W 5E :G7U 5 7 5 78W<<qC C

9:;%<:=?>=¾'CBu®F n JO Y Z LPp; Z&[THJ > O6G :Î K = KG > G&HK Ó6; [G yÎ K = KG > G&HK Ó; [G v\ ×_ Z a-yuv ZbH ^ K = H L G ;%aSÐ6Y;L j Ó6; [G d HQJ > O6G :%Ð6Y;L j Ó6; [G ycyÐ6YQ;L j Ó6; [G XvÕe G Y^ Gg Z a-yuv ZbH ^ K = H L G ;%aSØ=Q:%Þ G LQY&Ó; [G h HQJ > O6G :%Ø=Q:QÞ G LQY&Ó6; [G yyrØ=Q:QÞ G LQY&Ó6; [G TvÕi G Y^ Gk Z a-yuv ZbH ^ K = H L G ;%aAÍ K : ZbO Ó6; [G Frq HQJ > O6G :QÍ K : ZbO Ó6; [G ycyuÍ K : ZbO Ó6; [G XvÕFuF G Y^ GFr\ Z a-yuv ZbH ^ K = H L G ;%aÒ&aQÓ; [G Fr_ HQJ > O6G :Ò&aQÓ6; [G yMyîÒ&aQÓ6; [G XvÕF|d G Y^ GFre Z a-yuv ZbH ^ K = H L G ;%aAï;%:%Ó6; [G Frg HQJ > O6G :Qï;%:QÓ6; [G yMyuï;%:%Ó6; [G XvÕFh G Y^ GFri Z a-yuv ZbH ^ K = H L G ;%aS9: Z?HK Ó6; [G Frk HQJ > O6G :%9: ZbHK Ó6; [G ycy9: ZbHK Ó6; [G XvÕ\uq G Y^ G\F Z a-yuv ZbH ^ K = H L G ;%aSÓ6;UnÓ6; [G \u\ HQJ > O6G :%Ó6;UnÓ6; [G yMyÓ6;UnÓ6; [G XvÕ\u_ G Y^ G\d Z a-yuv ZbH ^ K = H L G ;%aS G = [ Ó6; [G \ue HQJ > O6G :% G = [ Ó; [G yMy G = [ Ó6; [G TvÕ\ug G Y^ G\h Z a-yuv ZbH ^ K = H L G ;%aS GQK&J : H Ó6; [G \ui HQJ > O6G :% GQK%J : H Ó6; [G yy GQK%J : H Ó6; [G TvÕ\uk G Y^ G_uq Z a-yuv ZbH ^ K = H L G ;%acÎ J n G :QÓ6; [G _F HQJ > O6G :Î J n G :%Ó6; [G ycyÎ J n G :QÓ6; [G XvÕ_u\ G Y^ G_u_ Z a-yuv ZbH ^ K = H L G ;%aSÐ: G = j Ó6; [G _d HQJ > O6G :%Ð: G = j Ó6; [G ycyÐ: G = j Ó6; [G XvÕ_ue ë

?,7U(+;»:8. 5 E t> â.Ç 5 ;^ 5 Wie; 5 V:G+W 5%E RWW<]: 5 ; 5 5 W 5(5 >­BXD˼ Å ½ HD VY%RJeRW<+7U0RWîe¯i; 5 :8. 5o¼ Å ½ HD ù f 7 5 7UWiiqC úC

Page 191: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D£' ¬c§¨X¯ D ¬ Di

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ï0/1xl¿ 0»×1F×z|bÏñÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "q

9:;%<:=?>=¾'CB ¬F n JO Y Z LPp; Z&[THJ > O6G :6Ò&aQÓ6; [G yîÒ&a%Ó6; [G v\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : H Õd v/B HJ > O6G :M` jj fQfÕe HJ > O6G :Qv%n: G Ó; [G yuvCB G v%n:Õg HJ > O6G :Î K = KG > G&HK Ó6; [G yuv/B^ K = K D%Õh HJ > O6G :Î K = KG > G&HK Ó6; [G yuv/B^ K = K© Õi ë ¤´W< E W 5 7 5 M'+WiÑY%R 5 5 787G 5 W 5¡;:?A?=D >³D?&½ HDñ5 5 7G78&:UW0L]>Wï 5 W 5

¸ ¹ NCËD%½ H7D Cà=»¯ E Y%Rä:I>Wþ 5 W 5&Ç M'9 5 RW ¸ ¹ N/ËD%½ HD 5 ;$+WVFe7GNM'';;$Vd:G>7#;$.p1>7 EG5E :8. 5E ;$ Ç M.9 5E V% 5 W 5æ¶@HH½ HD V QcA6Ë=<½ HDi5 R ? o6 ³?A?&½ H7D V> 5 7@g$>W)M 5 C· E8E .WV$:U E e¯ E ¦§_+>WîRWi#U9LWi;) >­BXDË6¸ ¹ N/ËD%½ HD Y%Rb;+11+78 Ç +7`Y%RMB] 5:G' 5 7GNM@; 5 e¯ÍU9Wi7 5 W<]: 5 ; 5 ;$NY%R; 5 C D +W 5E V[+e%:8T 5 V 5 7 5 7UWiqC'"> Y%RW 5E :G7U >³BXDË6¸ ¹ N/ËcD%½ HD C

9:;%<:=?>=¾'CBEDbsF n JO Y Z LPp; Z&[THJ > O6G :Qv%n: G Ó6; [G yv%n: G Ó6; [G v\ ×_ Z a-yuv ZbH ^ K = H L G ;%aSÓ G ß OÖQG L K Ó6; [G d HQJ > O6G :%Ó G ß6 O6ÖQG L K Ó; [G yyÓ G ß6 OÖQG L K Ó6; [G TvÕe G Y^ Gg Z a-yuv ZbH ^ K = H L G ;%aSÓ G ßÍ::=Q¥%Ó6; [G h HQJ > O6G :%Ó G ßÍ:Q:=Q¥QÓ6; [G ycyÓ G ßÍQ::=Q¥QÓ; [G PvÕi G Y^ Gk Z a-yuv ZbH ^ K = H L G ;%aS G Y%= K6Z ; H =Y&Ó6; [G Frq HQJ > O6G :% G YQ= KZ ; H =YUÓ6; [G yy G Y%= K6Z ; H =Y&Ó6; [G TvÕFuF G Y^ GFr\ Z a-yuv ZbH ^ K = H L G ;%aAÍ [[ Ó6; [G Fr_ HQJ > O6G :QÍ [[ Ó6; [G yMyuÍ [[ Ó6; [G XvÕF|d G Y^ GFre Z a-yuv ZbH ^ K = H L G ;%a ÛQJ Y K Ó6; [G Frg HQJ > O6G : ÛQJ Y K Ó; [G yMy ÛQJ Y K Ó6; [G TvÕFh G Y^ GFri Z a-yuv ZbH ^ K = H L G ;%atè H =%:¥QÓ6; [G Frk HQJ > O6G :&è H =Q:¥%Ó6; [G ycyrè H =Q:¥QÓ6; [G XvÕ\uq G Y^ G\F Z a-yuv ZbH ^ K = H L G ;%aMÙ=YQY&Ó6; [G \u\ HQJ > O6G :Ù=YY&Ó; [G yMyÙ=YY&Ó6; [G TvÕ\u_ G Y^ G\d Z a-yuv ZbH ^ K = H L G ;%aÒ HK Ù; H ^ K Ó6; [G \ue HQJ > O6G :Ò HK Ù; H ^ K Ó6; [G ycyîÒ HK Ù; H ^ K Ó; [G PvÕ\ug G Y^ G\h Z a-yuv ZbH ^ K = H L G ;%acÎ K : ZbH <Ù; H ^ K Ó6; [G \ui HQJ > O6G :Î K : ZbH <Ù; H ^ K Ó6; [G ymyÎ K : ZbH <Ù; H ^ K Ó; [G PvÕ\uk G Y^ G_uq Z a-yuv ZbH ^ K = H L G ;%aSÓ J YQYQÙ; H ^ K Ó6; [G _F HQJ > O6G :%Ó J YYQÙ; H ^ K Ó; [G yyÓ J YY%Ù; H ^ K Ó6; [G TvÕ_u\ G Y^ G_u_ Z a-yuv ZbH ^ K = H L G ;%aÒ H[G vQÓ6; [G _d HQJ > O6G :Ò H[G v%Ó6; [G ycyîÒ H[G vQÓ6; [G XvÕ

Page 192: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N !Í"Ni

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

_ue G Y^ G_ug Z a-yuv ZbH ^ K = H L G ;%aSÞ6; K Ó6; [G _h HQJ > O6G :%Þ6; K Ó6; [G yMyÞ6; K Ó6; [G XvÕ_ui G Y^ G_uk Z a-yuv ZbH ^ K = H L G ;%aSØ=Q:%Ó6; [G dq HQJ > O6G :%Ø=Q:QÓ6; [G yMyØ=Q:%Ó6; [G XvÕdîF ë

?:G>W 5%E VF78+;-:G' 5 ;$+g$7G EGE T 5 V 5,E >RÑW<]+: 5 ; 5 78-eRW<+7US+T 5 V@ 5 W 557 5 78W<<qC'""(7U 5ȶ¯HMH½ H7D C

9:;%<:=?>=¾'CBEDDF n JO Y Z LPp; Z&[THJ > O6G :Í [[ Ó; [G yuÍ [[ Ó6; [G v\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : H Õd v/B HJ > O6G :M` jj fQfÕe HJ > O6G :Qv%n: G Ó; [G yuvCB G v%n:DQÕg HJ > O6G :Qv%n: G Ó; [G yuvCB G v%n: © Õh ë

=» E NS+T 5 q$C."C `1+78+W 5%E E +Re;`7:86; 5 7 5 + E8E5 ;$6g$''S>T 5 ;^­781 5 7G E .e%:U­:GK+VY%R E T 5<5E W<]: 5 ; 5E Y%RJW 5E :G7UWî>;)RWî; 5E e¯ E C

7.1.2 Exibição dos nósf 7UJg$''S>T 5 ; 5%E e¯ E ;b­7G1 5 78VM.K+p E ^Y%R E a:GRL; 5 Y%R» 5 W<+e%:8W 5E >WË78+MKS>T 5 E RJeRW<+7US+T 5 C f 78>; :G' 5 ;$^e¯LV:8+W 5E RWäV 5 R<>W M.Re E > EG5E VM'Re E W)]+: 5 ; 5%EY%R):G7U:UW ;$ EGE 0:G' 5 ;$<e¯LCi· ;$H¦ >7G>eS+ä78 E ';0e E S È E YR E T 5 : 5 Wi; E C<=^ EGE + E5 V[Y%R>7G>W 5E W 5E :G7U7bY%RM@] 5 :G' 5 ;$Íe¯&ÍY%R E3E T 55%EbE >R EÇ M.9 5%E CödW 5E 1+7NV 5 W 5 +g$+W<M 5 V$e 5 7 5 78W<<qC'"NV 5 W<]: 5 ; 5 Y%R(:G7U:8<;$RWh C'A6³³º H<½ HD C

9:;%<:=?>=¾'CBED ©F n JO Y Z LPp; Z&[ n: ZbHK ÙYQ=^^bÐ6; [ ¥QÓ; [G yÙYQ=^^UÐ; [ ¥QÓ6; [G v\ ×_ Z a-y vS`Q` HJ YYMí: GQK&J : H Õd Î%¥^ KG >ìBu; JK B|n: ZbHK Y H yEÕe Î%¥^ KG >ìBu; JK B|n: ZbHK yv/B HJ > O6G :fml­ ÙYQ=^^UÐ6; [ ¥QÓ6; [G ``Q` l fg yuv/BLQY Z ^ K `Q` HJ YQY¾³l HJ YYl­ Î K : ZbH <CBp=Y JG %aCyuvCBLQY Z ^ K B HJ > O6G :h fmltl fi yuv/BrpY Z ^ K `Q` HJ YQY¾³l HJ YYl­ Î K : ZbH <CBp=Y JG %aCyuvCBpY Z ^ K B HJ > O6G :k fmltl fFrq yuv/BL K Y Z ^ K `` HJ YQY³l HQJ YYl­æÎ K : ZbH </Bp=Y J6G %aCyv/BL K Y Z ^ K B HQJ > O6G :QFuF fmltl fFr\ yuv/B >Y Z ^ K `Q` HJ YQY¾³l HJ YYl­ Î K : ZbH <CBp=Y JG %aCyuvCB >Y Z ^ K B HJ > O6G :ÕFr_F|d n: ZbHK ÙY%=^^UÞ G LQY& Z ^ K Ó6; [G yuv/BLQY Z ^ K ÕFre n: ZbHK Ø=%:QÞ G LQYU Z ^ K Ó; [G yuvCBpY Z ^ K ÕFrg n: ZbHK Ù; H ^ K : J L K Þ G L%Y& Z ^ K Ó6; [G yv/BL K Y Z ^ K Õ

Page 193: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N" !Í"N/i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ï0/1xl¿ 0»×1F×z|bÏñÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "N"

Fh n: ZbHKQÛG%K%N ; [ Þ G LQY& Z ^ K Ó6; [G yuv/B >Y Z ^ K ÕFri ë ? E8E äW<]: 5 ; 5 g$'Läe E â ;pr;$7UT 5 RW<&W<+e E +W´.eL;$'>e; 5 Y%RM6] 5 :8. 5 ; 5

e¯LV^e 5 + EG5 V"o C'A³³B H<½ HD C ?dW E >RK;V^W 5E :G7U¬Y%RM(] 5 eXHW<+7 5 ;$+;,RW; 5%E(E +R E Y%R:G7 5 e¯ E^Ç M.9 5%E VP: 5 WieL; 5 +RK;; 5 5 W Y%R>M. E Y%R) 5 ;$>W 5 R-eT 5 L78p>7>C m 5 M'978W 5E Í7UWi­:8'>ie 5 7UYR.1 5 C v vVy1+78+W 5E YR0 5 78'7p E RWæe¯z; 5 :G' 5 C'A6³³º H<½ HD V%:8+W 5E : 5 ; 5%E»5%E E +R E»Ç M.9 5%E 5 W 5Í5 t+ 5 e E C fZ5 7 EGEG5 VP78z+;iRW;$>M. E Vt;$+1+W 5E Ve%:G E VL1>7G Ç +7 E b] 5 ReT 5 |CXC C m J¦ 5 7NV>e%:8T 5 V E 78+1+W 5E eRM.MHeE â ;Vt+ EG5 5 e%:G7U­78 5 E +7G>1+W 5%Ea5 eXHW<+7 5 ; 5 e¯ Ç M'9 5 C»û + 5 E ;$b E 78+1+7 5 :G' 5 ; 5e¯z3eXHW<+7 5 ; 5%E`Ç M'9 5E V 5 W<]: 5 ; 5 U9W< 5E 5 R$:87 5%E W<]: 5 ; 5E VL78 E 5 e E ­I1+ E 5 7»:G7U:87; 5%E e¯ EFÇ M'9 5%E C· E8E 'WVeT 5 :8+W 5E W3R.: 5 W< E b+7G E ++e%:87 J ;$ E +7GKS+T 5 ; 5E W)]+: 5 ; 5%E Y%R^+g't+W

­781 5 7G E .e%:U­:GK+C m T 5 1­M''; 5%EB5%E 5 W)>e%:8­78 5EBEG5 78 5E e¯ E ; 5 :8. 5 » ³?U½ HD V ¸ ¹ N/ËD%½ HD ;:?A?=D>³D:?&½ HD Y%R Ç _+>W 5E e E >S>T 5 qC'"C'"C 465 e%:8R; 5 V E +78K0'e%:G>7G EGE e%:G(78 E8E MH:U7 5:G7U:UW<+e%: 5 ;; 5/J YR+M' E e¯ E Y%R` 5E8E R>W Ç M'9 5%E ; 5 :8. 5oÇ 6É D C 465 W 5 EGE E e¯ EZÇ M'9 5%EeT 5 5%EGE R+WþeRW<+7US+T 5 VFg$'.W 5%E ;$'7G+:8W<>e:8 E >Rò 5 e%:8H; 5 V 5 R E vV 5 5 e%:G'H; 5; E RL178'­I1+M >MAÁMD Y%RäW 5E :G7U&Y%RMF¦ 5 5Eâ W3 5 M 5 5 e E RW<K; 5 eL+e%:878;Y%R5 78''e 5 R 5 : 5 º>eBC fZ5 7i+g$+W<M 5 Vd78 5 e¯À C'A³³¾MD o CE½ HD VB:8+7 â W 5E05 W<]: 5 ; 5 ; 57 5 78W<<qC'">/C

9:;%<:=?>=¾'CBEDb@F n JO Y Z LPp; Z&[ n: ZbHK ÙYQ=^^bÞ G LQY&Ó; [G yÙYQ=^^UÞ G LQY&Ó6; [G v\ ×_ Z a-y vS`Q` HJ YYMí: GQK&J : H Õd Î%¥^ KG >ìBu; JK B|n: ZbHK Y H yEÕe Î%¥^ KG >ìBu; JK B|n: ZbHK yv/B HJ > O6G :fml­ ÙYQ=^^UÞ G L%Y&Ó6; [G ``Q` l fg v/B H =b> G B Z >=%< G fmltl fh yv/B^ J n G : H =b> G `` HJ YQY³ml HJ YYl­ v/B^ J n G : H =b> G B Z >=%< G AflSl fi yv/B O ; [ ¥A`` HJ YY³l HJ YYl­ÜÎ K : ZbH </Bp=Y J6G %aCyv/B O ; [ ¥/B HJ > O6G :ÕkFrq n: ZbHK ÙY%=^^UÐ6; [ ¥QÓ6; [G yuv/B O ; [ ¥ÕFuF ë ? E8E bW<]+: 5 ; 5 +g't 5 :G' 5 V 5 e¯VL3M 5 5 >W E >RK;Vg$.t 5 1M 5 7»; 5ÍE +R78'W)>.7 5

Ç M'9 5 VdY%Rä]ÍRW e¯-; 5 :G' 5-Ç É D C? E8E Í1M 5 7NVd;; 5 5 7 Z)[^f_eZ bf:^_äe&M.'e9- 5 7G78 E 5 e;$# 5 e 5 W)ä;&+M' EGE ÍY%Rͦ 5 a;$>+M'78;e 5 7 5 7UWipX¦ 5 e%:GC l E : 5 :UW3t]+WE <M''>z 5äE +Re; 5zÇ M'9 5 VÌ 5 e%:8; 5 t+MKä1I7GK­I1>M ³NËDËcA'>³D iY%Ri 5 7G78 E 5 e;$) 5e 5 W); E Rt+7UMK E8E J;<MK E8E (;$NMK7U;0bY%RJ 5 ;$ 5 RzeLT 5 E :87`7G E >e%:GC

7.2 Outras operações? E :GJ+ â :8RM 5 5 ;$ E >7dR$:G'M'._N; 5 5 W 5 RWi3.e%:G7 5 ;$RS>T 5 b;$'1>7 E EZ5 R$:G7U E@5 t+7US>T 5 Y%R 5 ;+W E +7d¦ >H:U EaEG5 78»3­7G1 5 78 E 'e%:8­:GK+C[?de%:G78(+MK E 9L­33e­M' E E >W<®e%:GK+ +7US>T 5;$ä¯$;$' 5 VkY%R E >78T 5 :G7U:8; E e 5E 78¯Ig'W 5E + â :8RM 5%E C-s E VdM']+W ;$ E :U E V[ 5 ;$+W 5%E.:87dRW 7Ue;FeXHW<>7 5 ;$ 5 L>78S È E Y%R` 5 ;$+W E +7d78>M.'_>; E ^Rv.W<M'+W<>e:US>T 5E +R 5 W< E W 5 W 5 ;$>M 5 1 E : 5 e E :Gb+ â :GRM 5 C fZ5 7`+g>W<M 5

Page 194: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ X~ X i

i

i

i

i

i

i

i

">% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

•7 5 7UWi;$F78:G:*pr78.e%:`Y%R 7 5 ;$R_ 5 W 53E â ; 5 7 5 78W<p¦ 5 e%:GF¦ 5 78Wi:8; 5;b 5 78; 5 5 WîM.RWi E 7G>7U E ;$J'e;$+e%:US+T 5 m

• 5 e E :G78RS>T 5 ; 5 78¦ 5 ;(PLR$g 5 ;$ 5 e%:G7 5 M'ä; 5 7 5 7UWiC,? E8E z:8. 5 ;$7U¦ 5 ]W0R.: 5 H$:8.MF78:G'1%K;;$#;$i:8 E :GVZ78'e'M'W<+e%:G#Y%Re; 5 E :8 E Í E8E5 +''e$¦ 5 7GWiS>T 5<E5 78J)R$:8.M''_>S>T 5 ; E 17GK­I1> E m

•>­MKRM 5 ;< 5 W<M.+g$';;$b; 5 7 5 78W<V$ 5 W 5 eXHW<+7 5 ;$M.'e9 E ;$b+¯;. 5 V 5 W)pM.+gK;;$bKM 5 Wi­:8'>V$ 5 W<M.+g$';;$;$ j M E :GN;z:UC

7.3 Arquivos-fonte do compiladorf 7Ui E :G)+ â :8RM 5 V'eM'R â W 5E e 5 5 :8 ³&<?A o ? o ÇËD=D #+M' EGE ´Ëç?ÇËcDXD V$Y%Rb¦ 5 7G E >e:U;3e EaE >S È E e%:G>7G 5 78 E CØ? EGE 3e 5 1I<+M' EGE YR+MK E LNYR+e E M.:G+7US È E e 57UY%R'1 5 C v v^¦ 5 7UW E HeK+ E W3R;eS> E 78>M.'_>; E e 5 e 5%EGEG5 5 W<.MK; 5 7NC`ödW 5E Vt 5 W 5'M.R E :G7US>T 5 V%W 5%E :8787`RW:87GNU9 5 ; E â ;07 5 ;$R_>';) 5 W«0+g$.KS+T 5 ;i­781 5 7G E 'e%:8­:GK+78 5 7 5 7UWi(+ü±+V78 E +e%:U; 5 e 5 + â :8RM 5 C`^T ©X^&]7^T^&di_&dªZh=^[7£TXd:b[7SKSXd_X_ùZXZWiXi^fTch=_i&Wgb[XS=d_X_ËZ 7óXó ² \fTbh=_d_di7b\[ Z ~X= _X^&ab[7¤&d\f¦bh=_ ZXZ6WiXi^fTch=_i&Wgb[7S&d_X_OZ ZZZa _ b=`^7h dXd\di7\X[7a!°& [7S^`S:b=` dXd\&diX\X[a

U a b=iS ^ \=a7_ ² h=^iXi $ _`&h ^ \=a7_ ¢X¢=¢ ~ [XhXh~ U ² h=^i=i $ _`&h ^ \=a7_¢X¢X¢ gb'[7SXd_X_[XchXh U ² h=^i=i ° \=a ^ \=a7_¢X¢X¢ m-~:: U a b=iS ^ \=a7_ ² h=^iXi $ _`&h ^ \=a7_ ¢X¢=¢ [XhXh U ² h=^i=i $ _`&h ^ \=a7_¢X¢X¢ a7^S^Ê[XchXhzeU ² h=^i=i ° \=a ^ \=a7_¢X¢X¢ [XhXh - U a b=iS ^ \=a7_ ^&d $ _`&h ^ \=aX_ ¢=¢X¢ z [=chXh U ^&d $ _`&h ^ \&a7_Ê¢X¢=¢ b[7S U a b=iS ^ \=a7_ ^&d ^ \&a7_ ¢X¢=¢ ôX U*^d ^ \=a7_¢=¢X¢ ab^X U a b&iS ^ \=aX_ ^&d ^ \=a7_ ¢X¢X¢ ¦~ô~ U*^d ^ \=a7_¢=¢X¢ f:_i U a b&iS ^ \=aX_ ^&d ^ \=a7_ ¢X¢X¢ ¦% [XchXh% U*^d ^ \=a7_¢=¢X¢ ^[\ U a b&iS ^ \=aX_ ² \[iSXd=:`S $ _`&h ^ \=aX_ ¢=¢X¢ ¦ : eU ² \[:iSXd=`S $ _`h ^ \=a=_¢X¢=¢ U,ñ_S=Q\=a ° \=a ^ \&a7_¢=¢X¢ [XchXh U ° h&\`ö ^ \&a7_¢X¢X¢ ¼Q U a b&iS ^ \=aX_ ° S^S_f:_[XS ^ \=a7_ ¢X¢=¢ ~X~X~X U S=d:bg ^ \&a7_¢X¢X¢ ~Ê~X~~: U*^d ^ \=a7_¢=¢X¢ ab^~X~ U ± [XS ² \[:iS ^ \=a7_¢X¢X¢ ¦=X~X U a b&iS ^ \=aX_ ° S^S_f:_[XS ^ \=a7_ ¢X¢=¢ ~¡~

Page 195: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ X X i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ï0/1xl¿ 0»×1F×z|bÏñÝ»Ü\ð»ÕlÝ6ÏaÕN¿òÓ$×*Ò0ÔLð^Ô[×+ÎZÜ "N/

~ U S=d:bg ^ \&a7_¢X¢X¢ ~£~ ~ U*^d ^ \=a7_¢=¢X¢ f:_i~ eU ± [XS ² \[:iS ^ \=a7_¢X¢X¢ ¦~ U a b&iS ^ \=aX_ ° S^S_f:_[XS ^ \=a7_ ¢X¢=¢ ~ [XchXh~ U S=d:bg ^ \&a7_¢X¢X¢ ~£X~ U*^d ^ \=a7_¢=¢X¢ ab^X U ± [XS ² \[:iS ^ \=a7_¢X¢X¢ ¦: U a b&iS ^ \=aX_ ² \[iSXd=:`S $ _`&h ^ \=aX_ ¢=¢X¢ ¤X~ [XchXhX~ U ² \[:iSXd=`S $ _`h ^ \=a=_¢X¢=¢ XX U,ñ_S=Q\=a ° \=a ^ \&a7_¢=¢X¢ ¤ U a b&iS ^ \=aX_ ^&d $ _`&h ^ \=a7_ ¢X¢X¢ ¤ U*^d $ _`&h ^ \=a7_¢X¢X¢ b[7S eU a b&iS ^ \=aX_ ^&d ^ \=a7_ ¢X¢X¢ ¤ [XchXh U*^d ^ \=a7_¢=¢X¢ a U a b&iS ^ \=aX_ ^&d $ _`&h ^ \=a7_ ¢X¢X¢ ¤z~ U*^d $ _`&h ^ \=a7_¢X¢X¢ b[7S U a b&iS ^ \=aX_ ^&d ^ \=a7_ ¢X¢X¢ mM [XchXh

ZXZXZX U 7^&d ^ \=aX_¢X¢X¢ SX OU ^ _Y \ g©=_`S ^ \&a7_¢=¢X¢ gb[7S=d_X_ XX U a b=iS ^ \&a7_ T7d_ ^ \&a7_ ¢=¢X¢ ¤X [Xch=hX U 7^&d ^ \=aX_¢X¢X¢ YX U a b=iS ^ \&a7_ ° S7^&S_f:_[7S ^ \=aX_ ¢X¢X¢ ¤=~ U \&d ^ \=aX_¢X¢X¢ ¤Ê¡6X~M U SXd:bg ^ \=a7_¢X¢=¢ ~~ U 7^&d ^ \=aX_¢X¢X¢ b U ± [7S ² \[iS ^ \=aX_¢X¢=¢ ¤ U _7h=^&S:b\[^7h ^ \=a7_¢X¢X¢ ¤ õ U 7^&d ^ \=aX_¢X¢X¢ b OU ± [7S ² \[iS ^ \=aX_¢X¢=¢ ¦ U SXd:bg ^ \=a7_¢X¢=¢ U 7^&d ^ \=aX_¢X¢X¢ b U aXa ^ \=aX_¢X¢X¢ ¤= ó :X U 7^&d ^ \=aX_¢X¢X¢ b: U ± [7S ² \[iS ^ \=aX_¢X¢=¢ ¦X~ U ° h=\`ö ^ \=a7_¢X¢=¢ XX U a b=iS ^ \&a7_ ° S7^&S_f:_[7S ^ \=aX_ ¢X¢X¢ ¤£ U _X^=a ^ \&a7_¢X¢X¢ U 7^&d ^ \=aX_¢X¢X¢ a OU a b=iS ^ \&a7_ ° S7^&S_f:_[7S ^ \=aX_ ¢X¢X¢ ¤ U _X^=a ^ \&a7_¢X¢X¢ U 7^&d ^ \=aX_¢X¢X¢ f U a b=iS ^ \&a7_ ° S7^&S_f:_[7S ^ \=aX_ ¢X¢X¢ ¤ ~ U _X^=a ^ \&a7_¢X¢X¢ U 7^&d ^ \=aX_¢X¢X¢ ^ ~ U a b=iS ^ \&a7_ ° S7^&S_f:_[7S ^ \=aX_ ¢X¢X¢ ¤ =~ U SXd:bg ^ \=a7_¢X¢=¢ ¡

Page 196: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N, !Í"Ni

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

U 7^&d ^ \=aX_¢X¢X¢ Y U ^ _Y \ g©=_`S ^ \&a7_¢=¢X¢ a7^&S^ OU a b=iS ^ \&a7_ T7d_ ^ \&a7_ ¢=¢X¢ ¤ U 7^&d ^ \=aX_¢X¢X¢ a U a b=iS ^ \&a7_ T7d_ ^ \&a7_ ¢=¢X¢ ¤ X U 7^&d ^ \=aX_¢X¢X¢ fX U a b=iS ^ \&a7_ T7d_ ^ \&a7_ ¢=¢X¢ ¤: [Xch=h: U 7^&d ^ \=aX_¢X¢X¢ ^X~ U a b=iS ^ \&a7_ ° S7^&S_f:_[7S ^ \=aX_ ¢X¢X¢ ¤X [XhXhX U ± ^ \=a7_¢=¢X¢ ¤£X [XhXh U _7h=^&S:b\[^7h ^ \=a7_¢X¢X¢ ¤ ¢X¢ U ² ^7hXh ^ \&a7_¢X¢X¢ b[:i_&d=S OU 7^&d ^ \=aX_¢X¢X¢ S U a b=iS ^ \&a7_ T7d_ ^ \&a7_ ¢=¢X¢ ¤ [Xch=h U 7^&d ^ \=aX_¢X¢X¢ Y U ± [7S ² \[iS ^ \=aX_¢X¢=¢ ¤X U d:b[7S ^ \=a7_¢X¢=¢ :: U ° SXd:b[7 ² \[:iS ^ \=a7_¢X¢X¢ ¼ h=_f:_[7S\©X^_ b=iS_ # [ X~ U a b=iS ^ \&a7_ ° S7^&S_f:_[7S ^ \=aX_ ¢X¢X¢ ¤XX U SXd:bg ^ \=a7_¢X¢=¢ ¡ U 7^&d ^ \=aX_¢X¢X¢ b U ² ^7hXh ^ \&a7_¢X¢X¢ SXd_X_TXd:b[7S OU 7^&d ^ \=aX_¢X¢X¢ S U a b=iS ^ \&a7_ T7d_ ^ \&a7_ ¢=¢X¢ ¤ [Xch=h U ± [7S ² \[iS ^ \=aX_¢X¢=¢ ¤ U a b=iS ^ \&a7_ ° S7^&S_f:_[7S ^ \=aX_ ¢X¢X¢ ¤X [XhXhX U _&S=7d=[ ^ \=a7_¢X¢X¢ ¤:: U ± [7S ² \[iS ^ \=aX_¢X¢=¢ ¤

Page 197: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"No !Í"N%qi

i

i

i

i

i

i

i

Capítulo 8Tabela de Símbolos=^ E :86> â :GRM 5 :878:878+W 5%E ;$@RWi^; E Wi E .W< 5 7G:8e:8 E E :87GR:GR7U E 7U`Y%R E @ 5E8E W78>M''_>7 E 7G¯Ig$'Wi E :U E ; 5 W<'MKS+T 5 C<? E8E ä E :87GR$:8R7Uz]#U9LWi;ä;$<:Ut+MK;$EGâ W0 5 M 5%E VØ1% E : 5 Y%Ri78He 5%E e 5 W) E ; 5%E ;$'1+7 EG5E +M'+W<+e%: 5E R$:8.M''_>; 5E e 5 7 5 7UWip¦ 5 e%:8V 5 W 5 +M' EGE E V178'­I1+ E JW<]: 5 ; 5E Cl eKKM'W)>e%:GV[W 5E :G7U78+W 5E M'Re E g$+W<M 5E ;$# 5 W 5 z:8L>M'; Eâ W3 5 M 5E ]#H$:8.M

ebe­M' E E +Wi®e:8'>^e3>78S+T 5 ;$(¯$;$' 5 V%>W E +RK;V%W 5E :G7U78+W 5E 5 W 5 '7G>W 5%E'W)M.>W)>e%:87^0:Ut+MK); Eâ W3 5 M 5E 78 5 5 W).MK; 5 7

X++C

8.1 Para que serve·ê:8L>M'<;$ EGâ W3 5 M 5E`E +781(7U07GWi_++eL7a.e¦ 5 78W<S+T 5)EG5 78J+;0e 5 W<V 5 RäK;$>e:8 Ç p+; 5 7NVR$:G'M'._N; 5 e 5 7 5 78WipX¦ 5 e%:GCÌ· E8E 'WV 5 eM' E 7FRWii;$NMK7US+T 5 ; 5 :8. 5

`&h=^iXibdiS`&h=^i=i_ S_[acii_`\[ac`h=^iXi

ZXZXZÌ5 5 W<'M'; 5 7Z;$>1 E +7Z+_F;$F7GN 5 e9>++7ØY%R«bdiS`&h&^iXi@ E :U­ E +e; 5 ;$NMK7U;^ 5 W 5RWi<MK E8E Ck· E8E 'WVY%Re; 5 RW< 5 R$:G7U<;$>+M'78S+T 5 5 W 5

bdciS`&h=^iXi eL78>>7>VP>M.< 5 ;+7U­z78> 5 e9>I+pXMKÍ 5 W 5 1­M'';VB 5 E cbdiS`h=^iXi0]<RW :G' 5 ;$#;; 5 5 e9NK; 5 C·^M']+Wæ;$ EGEG5 VL;$+1+W 5E :UW0L]>W 7GWi_++eL7`M'RWi E .e¦ 5 78W<S È E 'W< 5 7:Ue%:G E VL7G>M'p

5 eL; E 5E K;$+e%:G Ç >; 5 7G E C f 7U0>;0:8. 5 ;$';+e%:G Ç +; 5 7NV$ E 'e$¦ 5 78WiS È E E >7G>W78Wi_>+e; E ;$.¦ +78+WC fZ5 7`g$>W)M 5 V:G+W 5%E 7U

">o

Page 198: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ X i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

•+M' EGE E Ìe 5 W<V%YRLM] E Rt+7UMK E8E VY%R EdE T 5 E 178'­I1+ E ;$ E8E (+M' EGE V%Y%R EdE T 5 E MK E8E E e'e9; E V$Y%R E`E T 505%E W<]: 5 ; 5%E b 5 e E :87GR: 5 78 E m

•17GK­I1> E Øe 5 W<V:8. 5 V;.W<+e E T 5 V E E T 5 M 5 + Ea5 RäeT 5 m

•W<]+: 5 ; 5E ke 5 W)V$7U®W<+:G7 5E V%17GK­I1> E M 5 > E V:8. 5 ;$J7G+: 5 7Ge 5 C

465 W« E8EG5 VLi:8t+MK#;$ Eâ W3 5 M 5E R$g$'M.Ki#eL­M' E E >Wi®e%:GK+i0i>78S+T 5 ;$)¯$;$' 5;$b;$'1>7 E E Wie>.7U E C fZ5 7`g$>W)M 5

• 5 ;$>+M'787a<+M' EGE `&h=^iXiÊbdiS`&h&^iXi_ S_[ai¤i_`\[7ac`&h=^i=i-ZXZXZ]FeN E8E ­78 5^E t+7 E «bdiS`&h&^iXi@'e;»eT 5 ¦ 5 ;$>+M'78;V E Ni_`\[ac`&h&^iXidg$ E :8 E J 5 ;$ 5 RzeLT 5iE >7^;$>+M'78;) 5 W 5iE RL>78+M' EGE m

• 5 ;$>+M'787a)178K­I1+MbdiSc`&h=^iXi e]äeN E8E ­78 5&E t+7 E (bdciS`&h=^iXiÍ]zRW :8. 5-5 R¬MK E8E Í1­M''; 5 E 5 ;$ E >7;>MK7U;3e EGE J 5 e%: 5 m

• 5 ;$>+M'787 5 W<]: 5 ; 5b=idXSc`&h=^iXiÄf b[7S¤öOÑ i_`\[ac`h=^iXiÊi ]&e>+ E8E ­7G 5,E L>7 E ¯bdiS`&h&^iXi]&RWþ:G' 5¬5 RñMK E8E 1I­M.K; 5 V E ,fÊ 5 ;$ E >7;>MK7U; 5 e EGE J 5 e%: 5 E E +R E L7U®W<:87 5%EFE T 5 M'+ E m

• 5 R$:G'M.'_>7 5 5 Wie; 5 Òbó Ó¤¢ ZGf Ѷg ]Í7GN E5E t+7 E ]iRWÿ7G7UIV E 5â e;$KÍR$:G'M.'_>; 5 :G>W 5 :8. 5 E t+7U; 5 V E ÍMK E8E b;$ 5E8E R 5 W<]: 5 ; 5 f& 5 W ; 5 E 78®W<:G7 5E VY%RMB] 5 :8. 5 ;$b78: 5 78e 5; 5 W<]: 5 ; 5 f- E 5%E 7GRW<+e%: 5%E R$:8.M'._N; 5%E eL E RÍU9Wi;# 5 W0.eLW 5 W 5%EL7U®W<:87 5%E ;$NMK7U; 5%E E 5E ; 5 E M'; 5E ;ä:G78'RKS+T 5 5%EGE R>W 5 W< E W 5 :G' 55 Rä:G' 5%E 5 W<: â 1> E C

? E8E EE T 5 L>e E M'Re E ; 5E 'eXHW<+7 5E + E5%E >W Y%R)7GN E W 5E ; E 'e$¦ 5 78WiS È E;:8t+MK;$ EGâ W0 5 M 5%E C?dMK-R$g$.M'K:8W3t]+W - 5 e%:87 5 M'7 5 E 5 5 ;$äR$:G'M'._NS+T 5 ; 5%EK;$+e%:G Ç >; 5 7G E C fZ5 7`g$>W)M 5 V$e 5#E >R'e%:GJ7 5 78W<

`&h=^iXi¤`&h=^i=i `&h=^iXi¤`&h=^i=i ° Ìb[7S¼b

Page 199: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N%q- !Í"Ni

i

i

i

i

i

i

i

ÎZÜ^Úeu+Ô(ÖØÛ6ÏlxÔÜ1ª¿6ÛÌÜ\Ýí¿ÊÓXu*Ð 1ÏaÛ6Ï`Ó "N%q

iSXdb[7f `h=^iXi

b ¢X¢[XchXh b[XS¡© Ì

ÌÌ`&h=^iXi¤`&h=^i=i ² Ì1>W 5E Y%Rb+;)';+e%:G Ç +; 5 7a:8+W¨1IM.K;;$+W«+7G: 5%E :G78>U9 5%E ; 5 7 5 78W<VeLT 5 +W5 R:G7 5E C)?@W

X++VZMK E8E `&h=^i=i 5 ;$ E >7R$:G'M'._N;ä+WÿY%RMKY%R+7 5 e%: 5 ;+e%:G7 5 ;$

E 678¯7GKVZ'eM'R'e; 5 >W `h=^iXi ° z;+e%:G7 5 ;$¯`&h&^iXi ² CÌ°­&&MK E8E `&h&^iXi ° eT 5 5 ;$E +7#R$:8.M''_>;,;$+e%:G7 5 ;$`&h=^iXi ² Ck·æ178K­I1+M¥b 5 ;$ E >7iR$:G'M.'_>;à;$>e%:G7 5 ;$ `&h&^iXi ù +gM'R.eL; 5 `h=^iXi ° úVWi E eT 5 ;+e%:G7 5 ;`&h=^iXi ² C%°­))1I7GK­I1>M ]JM 5 +My¥fy©<] M 5 +M 5 5 WieL; 5 btCZ· E8E 'WV(:Ut+MKb;$ EGâ W0 5 M 5%E ;$+1`L>7GW<.:G'76Y%R E ` 5%EGE E t+7@Y%Re; 5RW ;$+:G+78W<.eL; 5 ';$>e%:G Ç +; 5 7d] 1­M''; 5 V 5 R E *vVY%ReL; 5 5 ;$ E +76R E ; 5 (YRLe; 5 eT 5 C=» E >S>T 5 Cª0W 5%E :8787G>W 5E M'Re E E t>: 5%E ;)R$:G'M.'_>S+T 5 ;';$>e%:G Ç +; 5 78 E e<M'.ep

RL>WX++

# 5 W 5 'W)M.>W)>e%:87RW<ä:Ut+MK;$ Eâ W3 5 M 5E 78 E :8 E ¦§_>+7J E8E E 7G+pY%R E .: 5%E C

8.2 A tabela de símbolos para X++

½^Wþ7 5 7UWi-+WX++

] 5 W< 5E : 5 ;$;$'1>7 E E +M' EGE E Cñ· E8E .WVF1IW 5E 5 W<>S>7i;$ Ç e'7`e 5E8E 3:8L>M'<;$ EGâ W0 5 M 5%E`E 'W<M' E W)>e%:G 5 W 5 RWi)M. E :8)+W«YRJ>;0+M'+W<>e: 5]FRWi ;$ EGE E MK E8E E C f 7U 5 7 5 7UWi` E >R'7>VN:8+7 â W 5%E M. 5 5 W 5 »:8L>M'»W 5%E :878;e Ç R78<C."C

`&h=^iXibdiS`&h=^i=iÊÌ`&h=^iXi¤i_`\[ac`&h=^iXiÌ`&h=^iXiS=QbdXac`&h=^i=iÊÌödW 5E U9W<7» EGE i E :G78R$:8R78Í;$ ;=<>@?AB:CD C^=»T 5 .W< 5 7G:8VP 5 7 +eY%Re: 5 Vy 5 W 5 ]

'W)M.>W)>e%:8;V 5 ;$+e; 5ÍE >7`RWiiM' E :8<M'.%;VRW¨1: 5 7^ E :U­:8' 5 VRWi):Ut+MK<9 E 9 5 RY%RMKY%R+7 5 R$:878 E :G78R$:GR7UC l W) 5 7G:8-t+e Eb5 YRz;$>1Í 5 e%:G>70ä 5 W 5 ]ä 5 e E :87GR â ;Cf 7U+e%:8+e;$>7GW 5%E 5 W 5 ] +7GK;V] W)>M.9 5 7 5 E +781I7GW 5%E b78+78 E +e%:8S+T 5 ; 5 7 5 7UWiW 5E :G7U;JeL Ç R783Cª$Ck· E8E 'W 5 W 5 e 5 7 5 78Wi(Y%R(g$'L(3­7G1 5 78 E 'e:U­:8'>V:G+W 5%E

Page 200: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N !) i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

firstclass

thirdclass

secondclass1

2

0

j[.R7U)C." u#?kg$+W<M 5 ;$JRWi< E :G78R$:8R78); 5 :8. 5p;&<>@?ABCD C

RW 7 5 7UWiÍY%RieM' E ää­7G1 5 783<1dW 5 e:Ue; 5 z:8L>M'; EGâ W3 5 M 5E C)? EGE <7 5 p7UWiV 5 eM' E 7 5 e¯<eXHW<+7 5 V;$+1J.e E +78'7FeL3:Ut+MK 5 K;$>e:8 Ç +; 5 7¢¡O LUVL 5eLM' E 7 5 e¯0V$;$+1»'eM'R'71& V 5 eM' E 7 5 e¯z"> V;$>1»'e E +78.7í±$$ü±L C

q# s û çá×GØõ­Ö ä Ü

q s Õ:â r ××(ô@Ü3Ý6âóõ­Ö ä Ü q¤£s û çá×GØõ­Ö ä Ü

q¤¥s ö Ö£÷ Ü3èøf¦ ß ×*Ø*Ý6â r ×*× q¨§s Õâ r ×*×ù:Ö äú õ³Ö ä Ü qª©s Õ:â r ××(ô@Ü3Ý6âóõ­Ö ä Ü q s û çá×*Ø(õ³Ö ä Ü

qª« s ö Ö£÷ Ü3èø×Ü3Ý3Ö è ä Ý3â r ×× qª¬s Õ:â r ××ù:Ö äú õ³Ö ä Ü q# s Õ:â r ××ô³Ü6Ý3âóõ­Ö ä Ü

q# ­ s ö Ö£÷ Ü3èøØ*Þç ß ä Ý3â r ×× q$ s Õâ r ×*×ù:Ö äú õ³Ö ä Ü

jØ'R78<Cªu(E^781 5 78 E 'e:U­:8'>0L7U) 5 e E :G78RS>T 5 ;):8t+MK<;$ Eâ W3 5 M 5E C4 ;#+e%:G7U;ù 5 R&; E 78H: 5 7»;$)MK E8E Iúae ;=<>@?A7B:CD ;$>1b 5E8E R.7 5 R$:878 E .e¦ 5 78W<p

S È E V 5 W 5 V 5 76g$+W<M 5 V 5 e 5 W< ; E Rt+7UMK E8E CZû»>1» 5E8E R.7NV:UW0L]>WäV'e$¦ 5 78WiS È EEG5 78 5 5 e%:G'H; 5 ;-MK E8E V 5 R E vV E R E 17GK­I1> E V[ 5 e E :G78R$: 5 78 E VÌW<]: 5 ; 5E ÍMK E8E Ee.e9L; E C f 7Ui E8EG5 Vy E8E5 +'W 5%E Í>;z;$ E 78.: 5 7(;$<MK E8E bRW< 5 R:G7Ui E :G78R$:GR78z; 5:G' 5;&<>@?ABCD CBödW 5%E`E R 5 7^YR":LJ¦ 5E8E J; Ç eK;i; E +R.e%:8(Wie+'78`&h=^iXi¤i_`\[ac`&h=^iXi

`&h=^iXii_` ~ `&h=^iXi¤i_` Ì

Ìb[7S¼i_`]^&d Ñi_`]^d ~ Ò Ó bdciS`&h=^iXii_`]^&d ËS=Qbd7ac`&h=^iXiùÒ Ó«Ò)Ó¦i_`f:_&S&Q ' Ì

Page 201: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N !) "i

i

i

i

i

i

i

i

ÎZÜ^Úeu+Ô(ÖØÛ6ÏlxÔÜ1ª¿6ÛÌÜ\Ýí¿ÊÓXu*Ð 1ÏaÛ6Ï`Ó "N

D >W 5E ;$+e%:87 5 ;$(:L<RWiz+M' EGE 0e'e9;Ä · VBe'e9;Íz E :8VyRWi5 R:G7U&MK E8E Ä 4 C¬·^'e;-+W &z:8+W 5E RWi-178'­I1+M@'e%:G>.7U02äRW1+: 5 7#;$.e%:8+'7 5%E · V`RWi178'­I1+M`;,+M' EGE (¡e )LRWþW)]+: 5 ; 5 !#±$0Y%R#78: 5 78eäRWiWi:G78'_#;$ 5 v*: 5%E ; 5 :8. 5 %$ü±&z#Y%R#eLT 5 5E8E R67U®W<+:G7 5E¦ 5 78Wi E C f 7U# EGE )7 5 7UWiV:G>7 â W 5E VP+e%:8T 5 VPRWiz E :G78R$:GR7Uä;$3:Ut+MKz; EGâ W0 5 M 5%E 5 W 5 )W 5E :G7U;3e Ç R7U0C /C

Symtablepara

Symtable

para

thirdclass

firstclassfirstclass

thirdclass

secondclass1

2

0

sec2 sec3

secvar1

secvar2

secmeth1

secvar3

Symtablepara

sec3

jØ'R78<C /3u#?kg$+W<M 5 ;RWi3:Ut+MKi;$ Eâ W3 5 M 5E C

465 W 5 ¦ 5 d;$.: 5 VØz:8L>M';$ EGâ W3 5 M 5E ;$+1<L>7GW<.:G'7 5 5 e%:87 5 M.<; 5 E 5 5 ;$#+;EGâ W0 5 M 5 C fZ5 76g$+W<M 5 V%RWib;$NMK7US>T 5 ;$»17GK­I1>M;$+e%:87 5 ;bMK E8E / · 5 ;$»R:G'M.'_>7 E +M' EGE E · VO 4 VË:L V¡O 5 R%$ü±& C)= T 5 5 ;$VÌ 5 7G]>WäVyR:G'M.'_>7RWi)MK E8E J;$>+M'78;3e'e9;3¡O LUV$ EGE .W 5 W 5 :LeT 5 5 ;(R:G'M.'_>7 4 V 5 E E :U<eT 5 E :8­<;$'78:8W<+e%:Ge.e9L;)+W L C¤\ 5 W< 5 7:UW<+e%: 5 ( E 5 5 ;$MK E8E E V%W<]: 5 ; 5%E V 5 e E :G78R$: 5 78 E J178K­I1+ E ;J+M' EGE

E T 5 VP;$<>7:U<¦ 5 78WiVP E :8­:GK 5E CJ½^Wi#1+_0;>MK7U; 5E V E8E E ';$>e%:G Ç +; 5 78 E W<e%:I+W EE R E 7 5 7G'>;;$ E 5 ;$+W E +7`R$:8.M'._N; 5%E ;$b;$'1>7 EG5E 5 e%: 5E ;$.¦ +78+e%:G E ; 5 7 5 78WiC°%­0 E 17GK­I1> E M 5 > E ; 5%E W<]: 5 ; 5%E :I+W¨ 5 W< 5 7G:8W)>e%: 5 Wi E 1 5 MK­:G'MXV% E : 5 ]V E ¯0 5 ;$+WE +7FR E ; E ;$+e%:87 5 ; 5 W<]: 5 ; 5 >WY%R^¦ 5 78W; Ç eK; E65 RBV'e;V$;$>e%:G7 5 ; 5 M 5 535 eL;$¦ 5 7UWê;$ Ç e'; E C f 7UF E8E5 VN 5 .e'+'7Ø`eL­M' E d;$dRW W<]: 5 ; 5`5 RRWêM 5 5 V 5 eM' E ; 5 7;$>1bWi7U+7»Y%R E E 178K­I1+ E Y%R3¦ 5 7UW ;$ Ç e'; E :G]0Y%R+M'b 5 e%: 5 C»· 5 :G>7GW<'e7(eL­M' E 0;$ EGE )M 5 5 V 5 R E vVB; E R­781 5 7GM'.%;z 5 e¯YR0'eKK 5 M 5 5 Vy 5 W 5 RWÊ­D7?Q HQ¾­D o CE½ H7D 5 RJRW ºËC oÉ ½ HD V 5 eM. E ; 5 7B;$+1Z:G'787B;F:8L>M'^Y%R+MK E 178K­I1+ E;$NMK7U; E ;$>e%:G7 5 ; 5 M 5 5 CödW 5E`E R 5 7^Y%R 5 W<]: 5 ; 5í³cD o >³DX?¯ºE v

S=Qbd7ac`&h=^iXiËÒ Ó«Ò)Ói_`f:_&S=Q '

b[7Sôb­Ñ© iSXd:b'[7i Ì

Ì:G>7 â W 5%E i­781 5 78 E 'e%:8­:8'>)W 5%E :878;)e Ç R78<C LC@· 5 .e'+'7»ie­M. E J;"!"%$0V5 eM' E ; 5 7@U9Wi 5 W<]: 5 ; 5 Y%R^:878:8b; 5 ÊMD7? HQº H<½ HD VNY%RV 5 7 E RL1>_VU9Wi

Page 202: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N !) i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

5 W<]: 5 ; 5 7 5 78'; 5 78 5E +R Ç M.9 5XºOC oÉ ½ HD Vt;$'W 5E?ËA?AºOC oÉ ½ HD C=^ EGE 5 e%: 5 V 5 W<]: 5 ; 5?ËA?AQºOC oÉ ½ HD ;$>1 E M'1I7 5 E :8; 5 ;):8L>M'i;$ EGâ W3 5 M 5E VY%R];; 5 t+MK Ç R7U#CªoC f 7 5%EGE +R.eL; 5 Íe­M' E VPU9+p E b 5äE >ReL; 5íºOC oÉ ½ HD 5 WÍ:8t+MK;$ Eâ W3 5 M 5E 5 e%:G+eL; 5 E 1I7GK­I1> E M 5 > E3 Å VB 5 W 5 W 5E :G7Uä Ç R7UzC oBC= 5 1W)>e%:GV 5 W<]: 5 ; 5?ËA?AºOC oÉ ½ HD ;$+1 E M.17 5 E :8; 5 ;:Ut+MKÍ 5 e:8.eR7e­M' E Í; E R E RL­781 5 78V[Y%R#'78­; Ç e'70&178'­I1+M ³ C&· 5 78: 5 78e7b;-e­M. E #;E R­781 5 7GV+F:8L>M'^+e 5 e%:G7Up E Z 5 W 5 W 5%E :878` Ç R7U`CªoC[¤,W<]+: 5 ; 5¶?ËA?AºOC oÉ ½ HD;$>1VØ+e%:8T 5 VØ7G E :UR7U7z:8L>M'V̦§_++eL; 5 pwä1 5 M.:87 5 E :8; 5 ; Ç R78C oBC 2 Re; 55 5 e%:G7 5 M'#78: 5 78e7 J 78.W<+'7UU9Wi;;$ ?ËA?AºOC oÉ ½ HD VP E :Gä;$+1Í78 E :8R7873:8L>M'<;$ EGâ W3 5 M 5E 7U 5 E :8; 5 e%:G+78 5 7NV 5 R E *vV; Ç R78<CªoC

mØ&×å!æ"ãÑØ%Ò%ÓóäZå!æØç åèØ%éKê× ò ÿ¦æÒ&Ó»ÔÖ9Ö Û mØ&×å!æìå!æ!î"äïå!æØ

ìÓóå7Ò¦è!äïå!æØñKò Ö×yäïå!æØ

þ Ô|ÿyãÑØ%Ò%Óóäïå!æ"Ø ìÓóå7Ò¦è"äZå!æØç åèØ%éKê ò é!× ñ2ò Ö×yäïå!æ"Ø ñ2ò Ö×yäZå!æØ

þ Ô|ÿyäïå!æ"Ø ñKò Ö×yäïå!æØ þ ÔÿyãÑØ%Ò&ÓÕäZå!æØç åèØ%éKê ò þ ÔÿyäZå!æØ ç åèØ&é2êÖ×9ÿ ò é ñ2ò Ö×yäïå!æ"Ø

ç åèØ&é2꯮ þ Ô|ÿyäïå!æ"Øç åèØ%éKêÖ

j['R7U<C 0u¶E»7G1 5 78 E 'e:U­:8'>378(!#±$0C¤M'+.: 5 7 5 ;$ie 5 :87JY%Ri>;z+e%:G7U;z; ;=<>@?AB:CD 5 ;$<7G>78 E +e%:87»:8. 5E ;H¦ +p

78+e%:G E ;(K;$>e:8 Ç +; 5 78 E V% 5 W 5 RW¨;$ E +7G.: 5 7F;$JRWi<MK E8E V$;$JRWî 5 e E :G78R$: 5 7>V$;$(RWW<]: 5 ; 5z5 R-;$<RWiz1I7GK­I1>MC f 78z+;ÍRW ;$ E8E E ; E 78H: 5 78 E V 5 :G' 5 ;)'e$¦ 5 7GWiS>T 5Y%R E <78W<_+>e<]);H¦ >7G>e:8C=» E NS+T 5 C /iW 5E :G7U78+W 5%E 5 W 5 ]0'W<M'+W<+e%:8;Í#:8pt+MK#;$ EGâ W0 5 M 5%E 78 5 e 5%EGEG5 5 W<.MK; 5 7

X++VtW 5E :G7Ue; 5 +g$:8W)>e%:GbY%R E»E T 5 E

'e$¦ 5 78WiS È E 7GWi_++eL; E 78)+;0:G' 5 ; E 78H: 5 7NC

Page 203: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D ¬ D §¨X¯© sQ@i

i

i

i

i

i

i

i

ÎZÜ^Úeu+Ô(ÖØÛ6ÏlxÔÜ1ª¿6ÛÌÜ\Ýí¿ÊÓXu*Ð 1ÏaÛ6Ï`Ó "N"

sec2

secvar1

secvar2

secmeth1

secvar3

sec2

secvar1

secvar2

secmeth1

secvar3

sec2

secvar1

secvar2

secmeth1

secvar3(a) (b)

(c)

i

s

i

j

j

j[.R7U0C obu#?kg$+W<M 5 ;$J:8L>M'<;$ EGâ W3 5 M 5E 5 W178'­I1+ E M 5 + E C

8.3 Implementação da tabela de símbolos=^ E :U E NS+T 5 7G>e;$>7G>W 5%E .W<M'+W<>e:U7d(:Ut+MK;$ Eâ W3 5 M 5E L7U 5 5 W<'M'; 5 7

X++V

5 W<>S+e; 5 t+MK ;=<>@?A7B:CD Cy? E 5 M'9>W 5%E 78^+MK^RWi E :G78R$:GR7U` E :Ue%:G E 'W<M' E BRWiM' E :8M'.%;Y%R<¦ Re 5 eeL¦ 5 78Wiä;#RWi'M.9V 5 R E vV[+t>S>;M' E :8 5 e%:878 5¬EGâ W3 5 M 5 YR¦ 5 W< E 7GN>e:8+W<+e%:8.e E +78K; 5 C f 7U E8EG5 V`78'W 5E ;$>e%:G7 5 ; 5 5 W<.MK; 5 7ÌRW\ 5 :GFU9Wi; 5(³&<>³?AB:CD V;$>e%:G7 5 ;$>M.V»MK E8E ;=<>³?AB:CD W 5%E :878;e 5 7 5 78W<0C'"C

9:;%<:=?>=A®CBEDF n6=L j =Q< G ^&¥U> K = O Y G Õ\_ n JO Y Z LALQYQ=^Q^tÎ%¥U> K = O Y G ×d RRt=&n6; HK = [ ;%:tn6=Q:=S; K ;Un6; [ = K = O6G YQ=ãy>= Z ^T: G L G&HKG e n JO Y Z LT HK :Q¥= O Y GSK ;UnÌÕgh RR H W&> G :; I&J6G LQ; HK :;YQ=M; G ^LQ;Un6;-y= HZ?HN =b> GUHK ;6SLQ;%:Q: G&HKGi n JO Y Z L ZbHK ^QLbn K :CÕkFrq RRt=&n6; HK = [ ;%:tn6=Q:=t= G&HK := [ =t HK :¥ÙY%=^^ [GXH Ý&p G YM^ J n BFuF n JO Y Z LT HK :Q¥ÙYQ=^Q^SY G p G Y J nÌÕFr\Fr_ n JO Y Z LSÎ%¥U> K = O Y G yéPRRAL&: Z = J >= K = O6G YQ=Pp=QV Z =F|d ×Fre K ;bnc` HJ YYåÕFrg ^L?n K :A`SsåÕFh Y G p G Y J n` HJ YYçÕ

Page 204: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N !) i

i

i

i

i

i

i

i

">% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

Fri ëFrk\uq RRAL&: Z = K = OG YQ=tp=%V Z =A=&n; HK = H[ ;Tn6=Q:= H Ý&p G YA^ J n B\F n JO Y Z LSÎ%¥U> K = O Y G yr HK :¥ÙYQ=^^ J n\u\ ×\u_ K ;bnc` HJ YYåÕ\d ^L?n K :A`SsåÕ\ue Y G p G Y J n` J nÌÕ\ug ë\h\ui\uk n JO Y Z LPp; Z&[ = [[ y HK :¥= O Y G vTRQRP= [6Z L Z ; H = J >= G&HK := [ =A~ K = O6G Y%=_uq ×_F v/B H6G v K ` K ;UnÌÕ RR ZbH LQY JZoH ;%p= G&HK := [ = H ; K ;bn;_u\ K ;bnc`PvCÕ_u_ v/B^LQ;Un G `S^Lbn K :CÕ RRP= K : ZbOQJZ n6=Q:=S= G&HK := [ =M; H W%> G :; [ ; G ^QLQ;Un;_d v/B >¥ K = O Y G ` K%NZ ^çÕ RRTa=QVS= G&HK := [ =A=&n; HK =Q:Pn6=%:=S=Tn:xUn: Z = K = O6G YQ=_ue ë_ug_h_ui n JO Y Z LPp; Z&[TO6G < ZbH ÎLQ;Un G yE_uk ×dq ^QLbn K :fQfÕ RR ZbHZ L Z = H ;%p;S= HZ?HN =b> GUHK ; [G p=Q: Z%à p GZ ^dîF ëd\d_dud n JO Y Z LPp; Z&[SG&H[ ÎL%;Un G yEde ×dg ß NZ Y G y K ;Unòñu` HQJ YYqÃà K ;Un B^QLQ;Un G ``S^Lbn K :dh K ;Unc` K ;Un B HG v K Õ RRP: GQKZ := K ; [ =^P=^op=Q:6^ [ ;T= HZbHQN =b> G&HK ;cLQ;%:: GUHKGdi ^L?n K : ¨¨ Õ RRPa ZbH =Y Z V=A= HZbHN =?> G&HK ;cLQ;&:: G&HKGdk ëeuqeF ë

? E8E #+M' EGE 5E8E RÌ:G7I E 17GK­I1> E C6·7G'W<+'78<] ? N VY%R3 5 e%:8<78i#>t>S>i;M' E :8CZ· E +Re;V ³ o NO?Ë V]JRW¨e=HW)>7 5 'e:8+'7 5 Y%R 5 e:87 5 M' 5 e'e9W)>e%: 5 ;$M 5 5E Cl eKKM'W<+e%:G E >Rb1M 5 7[]6 ^a»>;^e 5 1 5 M 5 5 E8E 61M 5 7Ì]F'e78+W<+e%:U; 5 C 4 ;»178'­I1+MRL7U; 5 1M 5 7Ø;$ ³ o NO?Ë Y%Re; 5 'e E +78';^e^:8t+MKV EGE 'Wê]6 5%EGEGâ 1+M E t+7Ø Y%RM%M 5 5+MKit+7G:G>eCa·:G>78++'78<178K­I1+My] CDÆ:D:C?N VY%R3 5 e%:8i78)RWiÍ+e%:G7U;)>W 5 R$:G7U;=<>³?AB:CD C@?dM'# 5%EGE ..M'H:UiK;$+e%:G Ç >7»#Y%RMØ+M' EGE E8E ):Ut+MKit+7G:G+eLC`· Ç R7UiC W 5E :G7U3 E Y%R>Wi:GK+W<+e%:GJRWi) E :G78R$:GR78 ;=<>³?AB:CD C[· E +:8<eRW<+7U;äù*"IúF7G>78 E +e%:8)178'­I1+M ? N b)eXHW<+7 5 ùúV)178'­I1+M CDÆ:D:C?N C

¤¨78.W<+'7 5 5 e E :87GR$: 5 73;MK E8E ;=<>@?A7B:CD¬E .W<M' E W<+e%:GÍ+7GKRWi:Ut+MK1_>'C¤ E >Re; 5 :UW0L]>W¨78K0RW<):Ut+MK)1I_+KV 5 78]+Wî7GN+tb 5 W 5 L7U®W<:87 5 RW 5 $v*: 5; 5 :8. 5ȸ:?Ë=< CA³³ Y%R E +7U­<;$ E 78.: 5 ;$Ke%:8Cd? E8E 5 $v*+: 5 ;$ E 78+1iMK E8E J Y%Rb;=<>³?AB:CD t+7G:G+eL E >Rz1M 5 7F]7GWi_>+e; 5 eL017GK­I1>M CDÆ:D:CN CØ= Ç R7U)C V+MK] 5 78.+W; E :U0eXHW<>7 5 ù§/%ú C

Page 205: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N/ !) oi

i

i

i

i

i

i

i

ÎZÜ^Úeu+Ô(ÖØÛ6ÏlxÔÜ1ª¿6ÛÌÜ\Ýí¿ÊÓXu*Ð 1ÏaÛ6Ï`Ó "N/

Symtable

Symtable

(1)

(1)

(2)

(3)

EntryTable

EntryTable EntryTable

EntryTable

EntryTable

jØ'R78)C 3u#c^+78 E +e%:8S+T 5 ;)'W<M.>W<+e%:8S+T 5 ;$ ;=<>@?AB:CD C

¤ÑW<]: 5 ; 5¶AMHMH ;'+ 5 e`RWi e 5 1`+e%:G7U;`e`:Ut+MKV 5 M 5 >e; 5 pwae 5 : 5 5 ;».M'9CD 5 ;3>e:878;e3:8L>M'0]J; 5 :8. 5 E :G7U: 5 ¸?QË=<CÇABCD V+Rv0; Ç eKS+T 5 ]JW 5E :G7U;be 57 5 78W<0Cª$C

9:;%<:=?>=A®CB ©F n6=L j =Q< G ^&¥U> K = O Y G Õ\_ RRALQY%=^^ G < G :=YTn6=%:=S=^ n;^^ÝUp GZ ^ G&HK := [ =^ H = K = OG YQ= [G ^Ý> O ;QY;d = O ^ K :=L K n JQO Y Z LALQY%=^^X HK :¥= O Y G ×e n JO Y Z LSÎ K : Z?H < H =b> G Õ RR H ;?> Gt[ ;A^ÝE> O ;Y;yup=Q:/B%öð> K ; [ ;A; J LQY%=^^ G g n JO Y Z LT HK :Q¥= O Y GPH6G v K Õ RRt=&n; HK = [ ;&:tn6=Q:=Tn:x%v Z >; [G&HK :; [ = K = O6G YQ=h n JO Y Z L ZbHK ^QLQ;Un G Õ RR H W%> G :; [ ;t= HZ?HN =b> GUHK ;MLQ;%:Q: G&HKGi n JO Y Z LSÎ%¥U> K = O Y G >¥ K = O Y G Õ RRt=Un; HK =Xn6=Q:=S= K = O6G Y%= [ = I%J =Y G YQ=tXn6=Q: KGkFrq ë D 5 ; 5Í5 $v*+: 5 ;$ EGE :G' 5 5%EGE RØRW e 5 W<bY%R 5 K;$>e:8 Ç +Vt78Wi_+>e; 5 eLi178'­I1+M

cA'>­D 5 5 e%:8; 5 7^L7U 5 78¯Ig$.W 5 >M.>W)>e%: 5 eLi:8L>M'C fZ5E8E RVP'e;V ³ o NËD VLRWi178'­I1+My'e%:G+'7U)Y%R3R78; 5 eXHW<+7 5 ; 5 E 5 5 5 Y%RMÌ+MK<L>7:8+e+C^¤W<]+: 5 ; 5ðAMHMH;-MK E8E ;=<>@?A7B:CD :8RM''_> 5 1M 5 70;$ EGE 178'­I1+M@Y%Re; 5 +e%:G7U;]Í'e E +78';e:8L>M'C@¤ eXHW<+7 5 ; 5 E 5 5 5 787G>e%:G ;3:Ut+MK)]J:GRM.'_>; 5 <>;01>_(Y%RJRWe 5 1 5W<]: 5 ; 535 RiM 5 5 ]»K;$+e%:8 Ç >; 5 e3­7G1 5 78 E 'e:U­:8'>C f 78b E8E5 V 5 7 5 7UWiJY%R eM' E )­781 5 78»;$>1(U9Wi7 5E W<]: 5 ; 5EBXD%ÁC7; o NËD ùYRLe; 5 RWe 5 1 5 E 5 5 ](.e'+'; 5 ú@D2H; o NËD ùYRLe; 5 RW¨ E 5 5 :G>7GW<'eúC½^Wi(+e%:G7U;»e»:8L>M'( 5E8E R:UW0L]>W(1I7GK­I1>M >c<?ABCD VIYR6'e;$K+J(YR6:Ut+MK

`>e:878;FL>7:8+e+CØ? EGE `'e$¦ 5 78WiS>T 5 ]d'W) 5 7G:8e%:Gd78 5%E W<]: 5 ; 5E ;$6R E +VN 5 e$¦ 5 7GW<1>7G>W 5E 5%E :8+78 5 7GW<>e:8C

Page 206: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D ¬ ª §¨X¯© sQ«i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

· MK E8E ¸:?Ë=<CÇA7B:CD ]J E :G7U:UC[?dMK0]( E :G>e;$K;) 5 7 5 R$:878 E +M' EGE E Y%R 78+7G E >e$p:8W 5E ;$.¦ +78+e%:8 E :G' 5%E ;$a';+e%:G Ç +; 5 78 E Y%Ra 5 ;+Wt+7G:G>e>7Z(RWi ;=<>@?AB:CD C f 7URW K;$+e%:G Ç >; 5 7ÌY%Rd78+78 E +e%:8aRW<»MK E8E @;>MK7U;6e 5 7 5 7UWip¦ 5 e:8V :8+78+W 5E RWi+e%:878;J; 5 :G' 5æ¸?Ë=< C'A³³ e :Ut+MK;$ EGâ W0 5 M 5%E CØ? EGE MK E8E F]^78 E +e%:8;»e 5 7 5 p7UWiC /C[·»M.]>W; E 17GK­I1> E ;$ ¸:?Ë=<CÇA7B:CD VI+MKb 5E8E RXV.eL;V 5 5 e%:U; 5 7 :D³?=DH78i ;&<>@?ABCD VY%R37GWi_>+e 5%E K;$+e%:8 Ç >; 5 7G E ;$ Ç eK; 5E ;$+e%:87 5 ;#MK E8E 0YRb+MK78+78 E +e%:8V0RWæ 5 e%:8; 5 7^L7UiRWi 5 R$:G7U ¸?QË=< C'A6³³ V$Y%R3])#+e%:878;<ei:Ut+MK;$ EGâ W0 5 M 5%E ; E R E Rt+7UMK E8E V E J+MK) 5%EGE R'7`RWi E Rt+7UMK E8E C

9:;%<:=?>=A®CBu@F n6=L j =Q< G ^&¥U> K = O Y G Õ\_ RRALQY%=^^ G L%;%:: G ^?n; H[G = J >= [G LQYQ=Q:=L ; [G L%YQ=^^ GPH = K = O B [G ^ÝE> O ;Y;^d n JO Y Z LALQYQ=^Q^X HK :Q¥ÙYQ=^Q^ G v KG&H[ ^T HK :Q¥= O Y G ×e n JO Y Z LSÎ%¥U> K = O Y GPH6G ^ KGQ[ Õ RR K = O6G YQ=Pn6R [G LQY%=Q:=!² ; [GSG Y G > G&HK ;^t= HZbHN = [ ;^g n JO Y Z LT HK :Q¥ÙYQ=^Q^Xn6=Q: G&HK Õ3RR GUHK := [ =cLQ;%:: G ^bn; H[G&HKG ~M^ J n G :6LQY%=^^ Ghi n JO Y Z LT HK :Q¥ÙYQ=^Q^çyÎ K : ZbH < H ö Î%¥b> K = O Y GSK k ×Frq H =?> G ` H Õ RR H ;> Gt[ =ML%YQ=^^ GP[G LQYQ=%:= [ =FuF H6G ^ KGQ[ ` H6G ßcÎ%¥b> K = O Y G y K%NZ ^ÕóRR K = O6G YQ=A; H[GMZbH ^ G : Z :Ap=Q: Z%à p GZ ^çöFr\ RRí> K ; [ ;^P; J LQYQ=^^ G ^Fr_ n6=%: G&HK ` HJ YYåÕ RRA^ J =M^ J n G :6LQYQ=^Q^ GF|d ëFre ë

¤ E +Re; 5 :8. 5 ;$(+e%:G7U;0Y%R 5 ;$J7GN+76eRWi ;=<>@?AB:CD ]J0Y%R(7G>78 E +e%:8RWià17GK­I1>MC ¸?Ë=<x'A6Ë 5E8E R(RW© 5 e:U; 5 7 ?<NËD 78,RW< 5 R$:878à+e%:G7U;¬;:8L>M'<Y%RJ'e;$K+)YRLM 5 :G' 5 ;)178K­I1+MXC fZ5%EGE RyRWi)178'­I1+Mt.e%:G>.7U H> Y%RJ.eL;$'>b;$'W<+e E T 5 5 WY%R»178K­I1+M¦ 5 L;>MK7U;Cؽ»W1: 5 7dRe';.W<+e E 5 eM:8+W ;$'W)>e E T 5"VRWi0Wi:G78._K;$'W<+e E 5 eMy 5E8E RB1M 5 7»VRWi)1I7GK­I1>M E >W¨;$'W<+e E T 5 5E8E RÌ1IM 5 7 Va E8E .W 5 7k;$Ke%:GCؽ^Wi ¸:?Ë=<Bx'AË 5%EGE RXV'e;VRW< 178'­I1+M.e%:G>.7U C o AMC o ? VY%Rb;$'_bY%RM 5 eXHW<+7 5iE NY=k+e+'MB;$ E8E 017GK­I1>MV$+ E5iE (:G7U:Gb;1I7GK­I1>MPM 5 +MCk? EGE 'e$¦ 5 78WiS+T 5 ]#R$:G'M'._N;e+7US>T 5 ;$#¯$;$' 5 E >78­;$ E +R$:GK; 5 W W< E ;$:UM'9 E e 5+ â :GRM 5 "NCØ? EGE bMK E8E ^]»7G E >e:U;Je 5 7 5 7UWiJC C[?dMKb 5E8E RL; 5 E 5 e E :87GR: 5 78 E VRW R$:8.M'._N; 5 YRLe; 5zE :878:8i;$0RWi#;$NMK7US+T 5 ;$3178K­I1+ E ;$3+M' EGE b 5 R$:G7 5 VL7U<;$>+M'78S+T 5 ;$178K­I1+ E M 5 + E C

9:;%<:=?>=A®CBªF n6=L j =Q< G ^&¥U> K = O Y G Õ\_ RRALQY%=^^ GtI&J6G = O : Z <= J >= [G LQYQ=%:=L ; [G p=Q: Z&à p G Y H = K = O6G YQ= [G ^QÝ> O ;YQ;^d n JO Y Z LALQYQ=^Q^X HK :Q¥QØ=Q: G v KG&H[ ^T HK :¥= O Y G ×e n JO Y Z LT HK :Q¥= O Y GSK ¥%n G Õ RRt=Un; HK = [ ;%:tn6=Q:=A; K6Z n; [ =tp=Q: Z%à p G Yg n JO Y Z L ZbHKS[Z >áÕ RR H W%> G :; [Gt[6Z > G&H ^±° G ^ [ =tp=Q: Z%à p G Yh n JO Y Z L ZbHK YQ;L%=YL%; JHK Õ RR HQJ > G :=7² ;M^ GQI³²6G&H L Z =YTn6=Q:=t=^Tp=Q:^åB Y;L&= Z ^ik RRAL&: Z = J >= G&HK := [ =Tn6=Q:=Sp=Q:/B [G LQYQ=^^ GFrq n JO Y Z LT HK :Q¥QØ=Q:CyÎ K : ZbH < H öæ HK :Q¥= O Y G nÌö ZbHKt[ FuF ×

Page 207: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D ¬ §¨X¯© s'i

i

i

i

i

i

i

i

ÎZÜ^Úeu+Ô(ÖØÛ6ÏlxÔÜ1ª¿6ÛÌÜ\Ýí¿ÊÓXu*Ð 1ÏaÛ6Ï`Ó "No

Fr\ H =?> G ` H Õ RR H ;> Gt[ =tp=Q: Z%à p G YFr_ K ¥&n G `Xn/Õ RRP=&n6; HK = [ ;%:tn6=Q:=t=MLQYQ=^Q^ GF|d [6Z >m` [ Õ RR H W&> G :; [GT[6Z > GUH ^±° G ^Fre Y;L%=YLQ; JHK ` ¨ DÕ RR H W&> G :;M^ G%I²6G&H L Z =YSM^ G >n: G¨ Dzy H6 ;tY;L%=YFrg ëFhFri RRAL&: Z = J >= G&HK := [ =Tn6=Q:=Sp=Q:/BYQ;L%=YFrk n JO Y Z LT HK :Q¥QØ=Q:CyÎ K : ZbH < H öæ HK :Q¥= O Y G nÌö ZbHKt[ ö ZbHKPj \uq ×\F H =?> G ` H Õ RR H ;> Gt[ =tp=Q: Z%à p G Y\u\ K ¥&n G `Xn/Õ RRP=&n6; HK = [ ;%:tn6=Q:=t=MLQYQ=^Q^ G\u_ [6Z >m` [ Õ RR H W&> G :; [GT[6Z > GUH ^±° G ^\d Y;L%=YLQ; JHK ` j Õ RR ZbH LQY JZPK =?> O b>; H W%> G :;A^ GQI²G&H L Z =Y\ue ë\ug ë

D >W 5E V'e;V E +e%:G7U; E Y%R`78+78 E +e%:8W 5E W)]+: 5 ; 5%E C[?dMK EdE T 5 ;+M' EGE ¸:?Ë=<ÄÊ­D7?Q H ù f 7 5 78W<0CªoúC 4 ;)RWi<;$ E8E E +e%:G7U; E 5E8E RyRW¨ 5 e%:8; 5 7 ?'<NËD 7URWi 5 R:G7Ua+e%:G7U;Fe`:8t+MK`;$ EGâ W3 5 M 5E VNY%Rk'e;$K+^Y%RM 5 :G' 5 ;$d78: 5 78e 5 dRWê.e%:G>.7 5H> V6YRz'e;$K+ E R;$'W)>e E T 5 CÑû 5 E)5 R:G7 5E .e%:8+'7 5%E¯? ?ACXC o ACU³ ? ?AMCU³?A oÉ'e;$K+WV^78 E t> :8.1W)>e%:GV 5 eXHW<+7 5 : 5 :8M ;$-1I7GK­I1> E M 5 + E ;$ Ç e'; E e 5 W<]: 5 ; 5&Y%Re%:8';;$;$z>M.>W<+e%: 5%E R$:8.M''_>; 5E e&.M'9;-s&­Y%R'eö .7G:GRM`°I1&;R78e%:Gg$NRS>T 5 ; 5 W<]: 5 ; 5 CÊ? EGE E ; 5 E 1M 5 78 EiE T 5 R E ; 5%E e>78S+T 5 ;$+¯;. 5 C m T 5'e'+'M.'_>; E V`e 5 5 e E :87GR: 5 7ä;¬+M' EGE V 5 W 5 1IM 5 7ä CË? EGE -1M 5 7Í]M.:G+7U; 5 7U78P+:G'7^ E +78 :8+7 â'E :GK+ E ; 5 W<]: 5 ; 5 ;$R7Ue%:G<e­M. E E +Wi®e:8'>CD W3t]+W R:G'M.'_>; E eeL­M' E E +Wi®e%:8'>Í<ez>78S+T 5 ;$i¯$;$' 5E T 5 E 178K­I1+ E

Å A É D A³³NËDË CB·Ê7G'W<+'78J:8+W 1M 5 7ÑÅ AMCb³cD L7U: 5 ; 5%E@5%E W<]: 5 ; 5E ( 5 e E :G78R$: 5 78 E;$NMK7U; 5%E e 5 7 5 7UWip¦ 5 e:8C@s& E +g$ E :GbRW«> EG5 +W YR 5 78¯78 5 5 W<'M'; 5 7a¦§_;$NMK7US+T 5 ;$ÍRWÿ 5 e E :G78R$: 5 7NC#=^ E8E #+ EG5 V 5 1IM 5 7] ?ËD C#· E +Re;ä'e;$K+ E 5 5 7G 5 ;$RW 5 e E :87GR: 5 7` 5E8E RBRWiiU9W<;) 5 5 e E :G78R$: 5 7a; E Rt+7UMK E8E Cdök>7G>W 5%E E8E E + E5%E ;$R7Ue%:GJie­M. E E +Wi®e%:8'>0J+7US+T 5 ;$b+¯$;$. 5 C·ò178'­I1+M N@A6ËA'> ;$ E +7G>1aY%R EdE T 5 ^ 5 W 5E T 5J5E 7U®W<:87 5%E ¦ 5 78W< E ; 5 W)]+: 5 ; 5 C

û +1».e;'>7 5 :8. 5 »;.W<+e E T 5 ;$»>;JRW;$>M. E V% 5 7d EGEG5 VR$:G'M'._Np E `RW 5 $v*: 5 ; 5:G' 5 ¸?QË=<·MD oIVY%R ]»RWiM' E :Ub+W Y%R»>;b+M'+W<+e%: 5 7G>78 E +e%:8JRW ; 5%E 78®W<:G7 5E C

9:;%<:=?>=A®CBF n6=L j =Q< G ^&¥U> K = O Y G Õ\_ RRALQ;&:: G ^bn6; H[G = J >= [G L%YQ=Q:=L ; [G > K ; [ ; H = K = O6G YQ= [G ^QÝ> O ;YQ;^de n JO Y Z LALQYQ=^Q^X HK :Q¥ ÛGQK%N ; [cG v KG&H[ ^X HK :¥= O Y G ×g n JO Y Z LT HK :Q¥= O Y GSK ¥%n G Õ RR K6Z n; [G : GQK ;%: H ; [ ;í> K ; [ ;h n JO Y Z L ZbHK [6Z >áÕ RR H W&> G :; [Gt[6Z > GUH ^±° G ^ [ ;P: GQK ;&: H ;i n JO Y Z LT HK :Q¥Q G LXn6=%:=b>áÕ RR K6Z n; [ ;^ín6=Q:âb> GQK :;^k n JO Y Z L ZbHK K ; K =YY;L%=Y^çÕ RR H W&> G :; [G p=Q: Z&à p GZ ^SYQ;L%= Z ^Frq n JO Y Z L ZbHK K ; K =Y^ K =L j Õ RR K =?>= HN ; [ =Tn Z Y N = H6G L G ^^ à : Z =FuF n JO Y Z L O ;;Y G = H a= j6G Õ RR K : J6G ö3^ G J >a=Y^Q;AL%; H ^ K : JK ;%:Fr\ n JO Y Z L O ;;Y G = HSN =^^ J n G :CÕ RR K : J6G ö3^ G > K ; [ ;Xn;^^ JZ L N =b>= [ =c^ J n G :Fr_

Page 208: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< G D ¬ « §¨X¯© sQ®i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

F|d RRAL&: Z = G Y G > G&HK ;Tn=Q:= ZbH ^ G : Z : H = K = OG YQ=Fre n JO Y Z LT HK :Q¥ ÛGQK%N ; [ yÎ K : ZbH < H ö( HK :¥= O Y G nÌö ZbHKS[ ö( HK :¥% G LP:Frg ×Fh H =?> G ` H ÕFri K ¥&n G `Xn/ÕFrk [6Z >m` [ Õ\uq n6=%:=b>m`t:Õ\F K ; K =YY;L%=Y^t`SsåÕ\u\ K ; K =Y^ K =L j `SsÕ\u_ a= j6G `Pa=Y^ G Õ\d N =^^ J n G :M`Pa=Y^ G Õ\ue ë\ug\h n JO Y Z LT HK :Q¥ ÛGQK%N ; [ yÎ K : ZbH < H ö( HK :¥= O Y G nÌö O ;;Y G = HSO \ui ×\uk H =?> G ` H Õ_uq K ¥&n G `Xn/Õ_F [6Z >m`tsÕ_u\ n6=%:=b>m` HQJ YYåÕ_u_ K ; K =YY;L%=Y^t`SsåÕ_d K ; K =Y^ K =L j `SsÕ_ue a= j6G ` O Õ_ug N =^^ J n G :M`Pa=Y^ G Õ_h ë_ui ë

·MK E8E ¸?Ë=<·D o,ù f 7 5 78Wi)C %úF]R E ;<78)78+78 E +e%:U7aRWi<M. E :8#;$J:8. 5E ;$'W<+e EGÈ E Vt 5 7(g$>W)M 5 VtL7U#;$ E 78+1+7 5E L7U®W<:87 5%E ;$0RWæW<]: 5 ; 5 C 4 ; 5 $v*: 5;$ EGE +M' EGE F 5%EGE RRWi(1I7GK­I1>M ?<NËD VIY%R` 5 e:U»RW<(>e:878; e^:Ut+MKJ;$ Eâ W3 5 M 5E Viä1I7GK­I1>M H> VBY%R<.eL;$'>äRWi;$.W<>e E T 5 C<·178'­I1+M[.e%:G>.7UÊo ? 'e;$K+Y%Re%: 5%E+M'+W<>e: 5E +g$ E :G>W¨e<M' E :Ui;$:G' 5E 0<1I7GK­I1>M :D ¹ ? 5 e:U 5 78¯Ig$.W 5 +M'+W<+e%: 5 ;M' E :8C

9:;%<:=?>=A®CBu«F n6=L j =Q< G ^&¥U> K = O Y G Õ\_d RRSY Z ^ K = [G HK :¥ÙYQ=^^ J ^%= [ =Tn=Q:=S: G n: G ^ G&HK =Q:c;^ KZ n;^ [GTJ >=AY Z ^ K =e RR [G n6=Q:â?> GQK :;^gh n JO Y Z LALQYQ=^Q^X HK :Q¥Q G L G v KG&H[ ^T HK :¥= O Y G ×i n JO Y Z LT HK :Q¥= O Y GSK ¥%n G Õ RQR K6Z n6; [GTJ >m; OÖQGQK ;k n JO Y Z L ZbHKS[Z >áÕ RQR [6Z > GUH ^ ;Frq n JO Y Z LT HK :Q¥Q G L H6G v K Õ RQRt=&n; HK = [ ;%:tn=Q:=A;P: G ^ K ; [ =AY Z ^ K =FuF n JO Y Z L ZbHK L%; HK Õ RR H W%> G :; [GSG Y G > G&HK ;^t=Xn6=%: K6Z : [ = I%J6G Y GAG Y G > G&HK ;Fr\Fr_F|dFre RRAL&: Z = G Y G > G&HK ;Frg n JO Y Z LT HK :Q¥Q G Lçyr HK :¥Q= O Y G nÌö Z?HKS[ ö ZbHK LFh ×

Page 209: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N%q- !) i

i

i

i

i

i

i

i

ÎZÜ^Úeu+Ô(ÖØÛ6ÏlxÔÜ1ª¿6ÛÌÜ\Ýí¿ÊÓXu*Ð 1ÏaÛ6Ï`Ó "N%q

Fri K ¥&n G `Xn/ÕFrk LQ; HK `ALÕ\uq [6Z >m` [ Õ\F H6G v K ` HQJ YYåÕ\u\ ë\u_\d RRAL&: Z = G Y G > G&HK ; G n´° GTH ; ZbH ÝL Z ; [ =AY Z ^ K =\ue n JO Y Z LT HK :Q¥Q G Lçyr HK :¥Q= O Y G nÌö Z?HKS[ ö ZbHK Lçö( HK :¥% G L K \ug ×\h K ¥&n G `Xn/Õ\ui LQ; HK `ALÕ\uk [6Z >m` [ Õ_uq H6G v K ` K Õ_F ë_u\ ë

· E8E 'WV1W 5%EkE R 5 7@Y%Ra:G>W 5%E RW W)]+: 5 ; 5 Y%R` 5E8E R$:G7I E L7U®W<:87 5%E 5 78'W)>.7 5; 5 :G' 5¶A V 5(E +Re; 5 ; 5 :G' 5 a 5 W;$.W<>e E T 5 / 5 :G>78++'7 5 :8W0L]>W; 5 :G' 5 +VWi E 5 W;$'W<+e E T 5 "C f 7U)78'7GW 5E RW ¸?Ë=<·D oY%RJ7G>7G E >e%:8 5E :G' 5E ;$ EGE E 78®W<:G7 5E V¦§7 â W 5E

[7S=d Xò ^gh=_ ¢ C o AMCµAA¡D?ËAHXAPH ?&N AcA¡?ABXD:CA [7S=d Xò ^gh=_ ¢ C o AMCµAA¡D?ËAHXAPH ?&N BcA¡?ABXD:CA [7S=d _`h¤¢¤[_Y [7SXd _` Ñ Ñ W=W_7h&_f:_[7S7\a7\¤S:bT\ÊgKÒ)Óh¢¤[_Y [XSXd _` Ñ Ñ ~ Ñðh W=W_7h&_f:_[7S7\a7\¤S:bT\ÊgKÒ)Ó«Ò Ó«Ò Óh¢¤[_Y [XSXd _` Ñ Ñ Ñðh W=W_7h&_f:_[7S7\a7\¤S:bT\¤^m R 5 e; 5 Y%R E 178K­I1+ E ¹ < 5 e%:8W E +e%:878; E eL:8L>M'b7Ub E MK E8E E 0

+V78 E LN :8.1W<>e:8V E8E `+g>W<M 5 R$:G'M.'_> 5 7G'W<+'7 5 5 e E :G78R$: 5 7d;b+M' EGE a7U78K7kRW5 v*: 5 ; 5 :8. 5æ¸:?Ë=<·MD oVN7U 5 HMH:8.W 5 78®W<:G7 5 ; 5 :G' 5 ` 5 W;.W<+e E T 5 "C[û + 5 E VR$:8.M'._Ne; 5ä5E +Re; 5 5 e E :87GR$: 5 7NVy]i78'; 5 RW ¸:?Ë=<·MD o7U 5E +Re; 5 7U®W<+:G7 5 V 5 W 5 :8. 5 -;$'W<+e E T 5 /V`&Y%R& 5 e:U7U,Y%R>M.>M.>W<+e%: 5 Y%R&7G>7G E >e%:8 5:G>78++'7 5 78®W<:G7 5 C<?^VØ 5 7 Ç WVØ]#+7GK; 5 RW ¸?QË=<·MD o78 5 78'W)>.7 5 7U®W<+:G7 5 V 5 W 5 :8. 5 à&;$'W)>e E T 5 Va&Y%R- 5 e%:878YR+M'+M'+W<+e%: 5 YR7G>7G E >e%:8 5E +Re; 5 7U®W<+:G7 5 Cs E RWi<MK E8E (]R:G'M.'_>;< 5 W 5 +e%:878;)e%RW< ;=<>@?AB:CD CÌ?dMKi;$ E 78+1 RW:G' 5

­ E K 5 ;äM.'eR+WVBe 5 e 5%EGEG5 > EG5 V 5%E :G' 5%E ü±( ü±=üC#û E8E äWie>.7UVy 5 ;$+W 5%E:G7U:U73 E ;$NMK7US>T 5 Y%RÍR$:8.M''_>W´ EGE E :8. 5E ;W< E Wi¦ 5 7GWiY%RÍ:G7U:8W 5E E ;$+pMK7US È E Y%R0R$:G'M.'_>WæMK E8E E ;$ Ç e'; E L>M 5 7 5 7UWi; 5 7NC fZ5 7»g$>W)M 5 VLeRW e¯ä; 5:G' 5ßxA6˾­D o CE½ HD V:G+W 5%E e 5<Ç M'9 5N ³ç7? RW Ç É D Y%R'e;$K+ 5 :G' 5 ;<178'­I1+M;$NMK7U;C@· 5 E 78+1+78W 5%E RW¨W<]: 5 ; 5 Y%RbeLM' E ) E8E e¯LVeT 5 ]7GN E5 1+78 Ç +7 E E8E Ç M'9 5 5 e%:G]+W«RWÿü± 5 R ü±=üäb:G7U:8­pXM 5E ;$¦ 5 78Wi< E LNKMXC f 7U< E8E5 VL;$>1>W 5%E'e E >7G'7@eLJ:8L>M'0;$ EGâ W0 5 M 5%E RWib>e%:G7U;L7U+;RW ;$ E8E E :8. 5E V$ 5 W 50E `¦ 5%EGE +WRWiÍ+M' EGE VtVy EGE .WVP 5 eM. E 7GW 5%Ea5 e¯ xA6˾­D o CE½ HD V$ 5 ;$+W 5%E E .W<M' E W<+e%:G0¦ +p:GRL7`RWi<R E +<eL):8t+MK J 7 5 +R7U); 5 :G' 5 78+78 E +e%:U; 5 e 5#E +R Ç M'9 5mN ³ç7? V% 578 E RMH:U; 5 ;)R E +)e 5%E W 5E :G7U7U­3Y%RMy] 5 :8. 5 ;)178'­I1+MXV E *v)+M'RWi<MK E8E 5 RäRW:G' 5 ­ E ' 5 C

Page 210: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N !)"> i

i

i

i

i

i

i

i

"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

·MK E8E ¸?Ë=<X;å>"NKCD W 5E :G7U;)e 5 7 5 78Wi3C¼q0]R$:8.M'._N;<L7U3 EGE Ç WC f 7U E8E :8. 5 ;$J+e%:878;V$e;)]J.e+M.R â ; 5 e 5 ; E 78H: 5 7NVM.]>Wî; 5 e 5 W<J; 5 K;$>e:8 Ç +; 5 7NC

9:;%<:=?>=A®CB('F n6=L j =Q< G ^&¥U> K = O Y G Õ\_ RR G&HK := [ = JK6Z Y Z V= [ =Pn6=Q:= [G LQY%=Q:=Q:c;^ K6Z n;^ O6à ^ Z L%;^ [ =AY ZbH < J =%< G >de n JO Y Z LALQYQ=^Q^X HK :Q¥Î Z >n6Y GMG v KG&H[ ^X HK :¥= O Y G ×ghi n JO Y Z LT HK :Q¥Î Z >n6Y G yÎ K : ZbH < H k ×Frq H =?> G ` H ÕFuF ëFr\Fr_ ë

= 5%E > â :GRM 5%EFE +R'e:8 E V1+78+W 5E 5 W 5 E8E b E :G78R$:8R780;$ :8t+MK);$ EGâ W3 5 M 5E ] R:G.pM'._N;L7Ub 5 K7Fbe­M. E E +Wi®e%:GK+b +7US+T 5 ;$ +¯$;$. 5 CZ· E MK E8E E 7G E >e%:8; Ee E :8#+ â :8RM 5 u+W 7G:GKRM'7>VÌ+M' EGE ;&<>@?ABCD u 5%EGE R+Wÿ;$'1+7 EG5E W<]: 5 ; 5%E Y%ReT 5 ¦ 5 78W W 5%E :878; 5E Y%RXV$ 5 W 5)5E W<]: 5 ; 5E Y%R(¦§_+>W3R E >0;(K;$>e:8 Ç +; 5 78 E e:8L>M'Ci?dM' EbE +7UT 5 78 E +e%:U; 5%E # 5 W<+e%:8; 5E¥J W<>;$K;Y%R)¦ 5 78+W E >e; 5 R$:G'M'._N; 5%Ee 5%E 7 5 7UWi E Y%RJ7GNM'._NW<eL­M' E E >W<®e%:GK+ 5 R)+7US>T 5 ;$b¯$;$' 5 C

Page 211: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ¬"N !)""i

i

i

i

i

i

i

i

Capítulo 9Análise Semântica –Primeira Parte

·Êe­M' E E >Wi®e%:GK+J]^78 E 5 e E ­I1>M% 5 761>7G Ç +7d E LN : 5E ; 5 7 5 7UWi»78+MK+ 5 e; 5E 5 E 'e Ç >; 5 b;<>;ä 5 Wie; 5 C3½^W 7 5 7UWii 5 ;$< E :87 5 787G+: 5 ;) 5 7U; 5 5 W E 7G>7U E ;$ E 'e%:8gz;$ Ç e'; E t+MK78W<­:GK+VØWi E 78 E +e%:U7b7 5 M.>W< E 78+MK 5 eLp; 5%E 5 W E +Wi®e%:GK+&;M'.eR+WC&O 5 + E5 VZ 5 73g$>W)M 5 Vd; 5&E +R.e%:GÍ:G78>U9 5 ;$7 5 78W<b[7S£^ËÑgKÒ Ó ° SXdb[7`

^¢¤gKÒ`Ó û»^ 5 78; 5 5 W E 78+78 EØE 'e:U­:8'> E ;(7UWi­:8'> ;

X++V 5 :G78>U9 5 ]`t+7G¦ +.:8W<>e:8

++.:8­I1+MXC fZ5 78]+WV%g$ E :8 RWî+787 53E +Wi®e:8' 5 V% 5 E V$t+M 5 W<+e 5E +WX++

V 5 1M 5 7FR E ; 578J'e;$+g$7@RW 7G7UI3;$>1 E +7dRW eXHW<>7 5 'e%:G>.7 5 CZ=»T 5 5 ;$ E >7dRWib+g$7G EGE T 5 +Rv 578 E RMH:U; 5 ]b; 5 :G' 5X³c?ËåÁ C·eL­M' E E +Wi®e:8'>ä]<¦ +.:8;$iWie+'78 E +W<+M'9e%:8 J 1 E RLM'._NS+T 5 ;­7G1 5 78 E .ep

:8­:GK+&W 5%E :878;e 5 + â :8RM 5 qV 5 R E *vVkW<N;$'e%:GÍRW E8E > 5 L>M'­781 5 7G E .e%:U­:GK+C· e­M. E E +Wi®e%:GK+;$>1 E >7);$'1';';>W´¦§ E E C¬=^ E :8> â :GRM 5 Vd.e'+'M.W<+e%:8V E +7U­;$ E +R$:GK; 5<5 5 78Y%RI;$ EGE );$.1 E T 5 V$+W E >RK;V%W 5%E :8787G>W 5%E )78'W)>.7U);$ E8E E ¦§ E E V+W«Y%R E MK E8E E ; 5 7 5 7UWip¦ 5 e:8 E T 5 eM. E ; E C

9.1 Análise semântica em fases·ÿe­M. E E >W<®e%:GK+à]78>M''_>;+W©;$'1>7 E E ¦§ E E V»+;àRWiÑ;$+MK Ez5 $v*+:G'1e; 5 eL­M' E ^;$ E t>: 5%E E LN â.Ç 5%E ; E >W<®e%:GK+;M''eR>WäCZ½^W 5 e%: 5 E >7@;$ E :U+; 5] Y%R +;RWib;$ EGE E ¦§ E E ]»¦ +.:83 5 7@W<+ 5 ;$ RW E8E > 5 t+MK3­7G1 5 78 E 'e%:8­:8'>C l E : 5E .e Ç +#Y%R)Í+;<¦§ E )Í­781 5 7G E 'e:U­:8'>i]3t+7U 5 7G78';i0;; 5E E T 5 M'+1e%:8; 5E 7UE +78+WR$:8.M''_>; 5E e0¦§ E E >R'e%:GC

">

Page 212: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !)"Ni

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

m +78KÍWi E .e%:8+78 E8E e:8 E 0RL;$] E8E >W 5E 7GNM'._N7»: 5 ;äze­M' E E +Wi®e:8'>Í>WæRWiHeK+a E8E ;Idt+MKJ­781 5 78 E .e%:U­:GK+VRWi»1+_aY%R`+;^¦§ E F7G>78 E +e%:8^:G7UM.9 5 g:G7Ui+7G] E +.W 5 e 5 :8+W< 5 ;$i 5 W<'MKS+T 5 C l E : 5 VB 5 78]+WVBeT 5 ]< 5E8Eâ 1>M 5 R]VBe 5 W â e.W 5 V;$>W< E K; 5 5 W)M.K+; 5 C f 7Uà+e%:8+e;$>7GW 5%EÍ5 5 78Y%RI;àeN EGE ';;$;$ E8E Ñ;$'1% E T 51W 5E R:G'M.'_>7 5 +g$+W<M 5 ; 5<E +R'e:8J7 5 7UWi

`&h=^iXi ° ]^&d °

Ì`&h=^iXi ° Ì· ­781 5 78 E .e%:U­:GK+ 5 7G78 E 5 e;$>e%:G#]W 5E :G7U;e Ç R7U-C."Cà½^Wi&:G+e%:U:G'1;$

eLM' E 7a E :GJ7 5 78Wi E +78'0 5 7`W<+ 5 ;$JRWi<1% E H:U) 5E e¯ E e E >R'e%:G 5 7U;$>Wä

"CF1 E .:8i 5 e¯ä"&mCF1 E .:8i 5 e¯iV'e E >7G'e; 5 iMK E8E ¶ eL3:Ut+MK<;$ Eâ W3 5 M 5E m/CF1 E .:8i 5 e¯</mLCF1 E .:8i 5 e¯)cmoCF1 E .:8i 5 e¯io)J1+78 Ç > E b;$NMK7US+T 5 ;$J178K­I1+MP]J1­M'';mCF1 E .:8i 5 e¯<mq$CF1 E .:8i 5 e¯<<J'e E +78J+M' EGE º e0:8L>M'i;$ EGâ W0 5 M 5%E mCF1 E .:8i 5 e¯ä"N C

¤\7 5 M.>Wi3]bY%RJe 5 .:G+W o$V1+78 Ç +7 E Ji;>MK7US>T 5 ;)1I7GK­I1>ML]M'+%MXV 5 e E E :G+Wæ1+78 Ç +7^u>e%:G78 5 R$:G7U E 5 E E u E 5 :G' 5 ;z178'­I1+MØg$ E :GC fZ5 78]+WVye 5 :8p E )Y%Ri1 E .:8z 5 e¯äoi]b¦ >H:UÍe:8 E YR 5 e¯äi:8+e9 E K; 5 1 E .:8; 5 )#MK E8E º 'e E +78';#e:8L>M'<;$ EGâ W3 5 M 5E C

f 7U E5 M.R+ 5 e7i EGE 7 5 M.>W<Va¦ :8R78+W 5%E àeL­M' E E >Wi®e%:GK+>W ;$RL E ¦§ E E;$ E :8.e%:U E VÌ+;ÍRW<ä;$>M' E 5 WæRW 5 $v*+:G'1 5 ;$.¦ +78+e%:GC)· 78.W<>.7UÍL7Uz 5 M'9+7J'e$¦ 5 7GpWiS È E^EG5 783 E MK E8E E ;$>+M'78; E 3 E +Re;i78<78>M.'_>7^i1>7G Ç >S+T 5iE >W<®e%:GK+7 5 78KW<+e%:GJ;$.:8Ck?de%:8T 5 V 5 7U;$+Wî; 5 L E8E > 5iE +78'j E <"

"CF1 E .:8i 5 e¯ä"&mCF1 E .:8i 5 e¯iV'e E >7G'e; 5 iMK E8E ¶ eL3:Ut+MK<;$ Eâ W3 5 M 5E m/CF1 E .:8i 5 e¯</m

Page 213: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& " !)">/i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ï·¶/x)Ü Ò»ð»ÛÌ×ÓX¿ÊÓX¿@и»Ò0Ô[×+ÎZÜwx3Ú6Õ`×*пd×*Õ^ÜÚPÜ Õ`Ô@¿ "

¹ »º ñKò Ö×yäZå!æع Ûº â ÓÕÔÖ9Ö9ãÑØ%Ò&ÓÕäZå!æØ ¹½¼ º ñKò Ö×yäZå!æØ

ç åèØ%éKê ¹ ±º â ÓÕÔÖ9Öyìå!æ!îäZå!æØ ¹½¾ º â Ó»ÔÖ9Ö9ãÑØ%Ò%ÓóäZå!æعÀ¿ º ñKò Ö×yäïå!æØ ç åèØ%é2êì ¹ ­±º â ÓÕÔÖ9Öyìå!æ!îäZå!æØ

¹$Á º þ ÔÿyãÑØ&Ò%Óóäïå!æØ

ç åèØ%éKêì ¹½Â º ñKò Ö×yäïå!æع$à º þ ÔÿyäZå!æØç åèØ%éKêÄÔ|ÿ¦ì

j['R7U0C." u#?kg$+W<M 5 ;$b­7G1 5 78 E .e%:8­:GK+C

LCF1 E .:8i 5 e¯)cmoCF1 E .:8i 5 e¯iomCF1 E .:8i 5 e¯<mq$CF1 E .:8i 5 e¯<<J'e E +78J+M' EGE º e0:8L>M'i;$ EGâ W0 5 M 5%E mCF1 E .:8i 5 e¯ä"N C

j E b$"CF1 E .:8i 5 e¯ä"&mCF1 E .:8i 5 e¯im/CF1 E .:8i 5 e¯</mLCF1 E .:8i 5 e¯)cmoCF1 E .:8i 5 e¯io)J1+78 Ç > E b;$NMK7US+T 5 ;$J178K­I1+MP]J1M'';mCF1 E .:8i 5 e¯<mq$CF1 E .:8i 5 e¯<mCF1 E .:8i 5 e¯ä"N C

Page 214: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !)"+i

i

i

i

i

i

i

i

% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

465 Wÿ E8E 5 78;>WäV[ 5 1>7G Ç >7Gp E )1M.K;;#;;$NMK7US+T 5 ;1I7GK­I1>M ÆA6Ë6º V:G>W)p E 3: 5 ;zÍ.e¦ 5 78W<S+T 5 eN E8E ­78' EG5 7G)z+M' EGE º Y%R v­#¦ 5 ZeM' E ;#).e E >7GK;e0:8L>M'<;$ EGâ W3 5 M 5E C· E8E 'WVa:G>e 5 ep E 䦧_>+7Í 5 WþY%R>;L E8E > 5 e,­7G1 5 78 E .e%:U­:GK+, 5 M'9'e$¦ 5 7Gp

WiS È E E t> âHÇ > E »1+78 Ç Y%R E LN : 5%E 7:8'+RMK78 E ; E +Wi®e%:GK+C[·»M.]>W;$ EGEG5 V;$+t+ep;$>e; 5 ;$^Y%R EkE T 5 E8E E E LN : 5E VeT 5 ]`eN EGE ­78 5 1 E .:87dJ­7G1 5 78@: 5 ;VL>e E 7:8;$>M'CF= 5 g$+W<M 5 Y%Rb+LW 5E ;$31+7NVL<7G'W<+'78)¦§ E 3;ie­M. E 5 ;$+78K E >7»'e:8+7Gp7 5 W<K;7URW ;$+:G+78W<.eL; 5 7UW 5 ;­7G1 5 78VØRWi1>_#1>7G Ç +; 5 Y%RÍ EGE +i7UW 5eT 5 5E8E R 5 R$:878 E ;$>+M'78S È E ;$MK E8E E CZ· EGE 'WäV 5 ;$>7 â W 5E 7G>1'7F)¦§ E <"J7U

"CF1 E .:8i 5 e¯ä"&mCF1 E .:8i 5 e¯iV'e E >7G'e; 5 iMK E8E ¶ eL3:Ut+MK<;$ Eâ W3 5 M 5E m/CF1 E .:8i 5 e¯</mLCF1 E .:8i 5 e¯)cmoCF1 E .:8i 5 e¯<mCF1 E .:8i 5 e¯<<J'e E +78J+M' EGE º e0:8L>M'i;$ EGâ W0 5 M 5%E mq$CF1 E .:8i 5 e¯ä"N C

¤ R E vVaRWi1>_Y%R 5 e¯,eLT 5 5E8E R`e+e9RW Ç M'9 5 e 5 Y%RM^ 5E8E W +g E :G'7;$NMK7US È E ;^MK E8E E e'e9; E VeT 5 9­(eN EGE ';;$`;$^ 5 e%:G'eR7dJeL­M' E E >W<®e%:GK+L.g 5 ;$ EGE Je¯C=» E 7G¯Ig$'Wi E[E NS È EZE +7U­»;$ E +7G.:8(»7G'W<+'78»¦§ E `; e­M' E E >Wi®e%:GK+ 7U 5 5 W)p

'M'; 5 7X++

V'e;$K+e; 5 p E ^YRL EdE T 5 E 'e$¦ 5 78WiS È E 5 M.+:8; E » E RJ'W<M.>W<+e%:8S+T 5 C

9.2 Análise da declaração de classes? E :8-7G'W<+'78¦§ E Í;&e­M' E E +Wi®e:8'>]Í E :Ue%:G E 'W<M. E C m +R 5 $v*+:G'1 5 ]ä78'73:8L>M'i; Eâ W3 5 M 5E beM' E 7^i­7G1 5 78 E .e%:U­:GK+ J 7 5 R7U<; E ;$>+M'78S È E ;$b+M' EGE E C4 ;)+M' EGE (+e 5 e%:G7U;0]J.e E >7GK;)e0:8L>M'i;$ EGâ W0 5 M 5%E C·à­781 5 7G E .e%:U­:GK+aeLT 5 78>+ E E >7Ì 5 W)M.+:8W<>e:8kL>78 5 787GK;V EG5 W<+e%:G 5%EBE +R E e â 1+ E

Wi E M.: 5%E Cͤ eM' E ; 5 7 E +Wi®e%:GK 5 'e'+'e­M' E )e78._<;­7G1 5 78 E .e%:8­:GK+VÌY%RE +W<78`]»RW » ³?&½ H7D CB? EGE ^e¯b 5 ;$» 5 e%:G>7dRW Ç M'9 5 C'A6³³¾­D o CE½ HD Y%R»;$+:G>7GW<'eJ;$>+M'78S+T 5 ;$aRWiMK E8E CØ· 5 >e 5 e:8787Ì:UM$e¯LV 5 eLM' E ; 5 7 E +Wi®e:8' 5 ;+1a'eM'R'7dMK E8E d 5 7878 E 5 e;$+e%:8kea:8L>M'»;$ EGâ W0 5 M 5%E ù e 5 e â 1+M%Wi E MH: 5 ú V 5 W< E W 5 5 e%:GN>e; 5 5 W 5E ;+Wi E e¯ E C'A³³¾­D o CE½ HD Y%RJ78+78 E +e%:8W E +M' EGE E ;$Wi E M.: 5 e â 1>MC·òe­M. E E +Wi®e:8'>V 5 78]+WVeLT 5 ;$+1a7U7Z 5 7d â CZ½^We¯ C'A³³¾MD o CE½ HD 5E8E R

5 W 5aÇ M.9 5 RW e¯ CA³³º H<½ H7D VUY%RVN 5 7 E Ra1>_VN 5 ;$k:8+7ØRW 5 R$:G7 5 CA³³¾­D o CE½ H7D 5 7G78 E 5 e;$>e%:G0zRWiMK E8E <e.e9L;C0· E8E .WVÌ> EG5 EGE 0e¯ä+g$ E :8V 5 eM' E ; 5 7 E +pWi®e%:GK 5 ;$>1(7 5%EGE +R'76)e­M. E (78 5E e â 1+ E .e¦ +78 5 7G E V:8](Y%RJeT 5 +eL 5 e%:87G(RWiMK E8E ^e'e9;CZû»>1»:8W0L]>W :G+7 5 R';; 5 ;$ .e E >7G'76 E MK E8E E e.e9; E e3 E :G78R$p:GR78 ;=<>³?AB:CD ;$>Y%R;V`eLT 5 e;$`e â 1>M$Wi E M.: 5 C 465 W 5 1 E : 5 e 5 + â :8RM 5 V+;

Page 215: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© s@ §¨X¯© D£i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ï·¶/x)Ü Ò»ð»ÛÌ×ÓX¿ÊÓX¿@и»Ò0Ô[×+ÎZÜwx3Ú6Õ`×*пd×*Õ^ÜÚPÜ Õ`Ô@¿ /

MK E8E (eL3:Ut+MKi;$ EGâ W0 5 M 5%E 5%EGE R E R)78¯78' ;=<>@?AB:CD V 5 eL;$b E +M' EGE E e.e9; E;$>1+W E >7`.e E +78K; E C=^ EGE ¦§ E &;¬e­M. E E +Wi®e:8'>V EG5 W<+e%:G&RW :8. 5 ;+787 5àE +Wi®e:8' 5 5 ;$ E >7

;$+:G>:8; 5 BY%Re; 5 RWi`MK E8E dYRPv­a¦ 5 ; Ç eK;`eRWê;$:8+78W<.e; 5 E 5 5 ]k78>; Ç eK;C· E8E .WV 5iE +R.e%:G(:87GNU9 5 ;7 5 7UWib]JM'+%M

`&h=^iXi¤`&h=^i=i `&h=^iXi^[b[XQ^=a7^¤Ì

Ì`&h=^iXi¤`&h=^i=i ~

`&h=^iXi^[b[XQ^=a7^¤Ì

ÌfZ5 78]+WV 5 E +R.e%:G@:G78>U9 5 ]@'e%1­M.K; 5 VI 5 E »MK E8E yo C'A³³Kº e'e9;` E :U­`7GN;$ Ç e.eL; 5

RWi<MK E8E o C'A³³2º v­i;$ Ç e';0eLY%R+M'J E 5 5 C`&h=^iXi¤`&h=^i=i

`&h=^iXi`&h=^iXi Ì

Ì

9.3 Implementação·îe­M' E E +Wi®e%:8'>e E :G#e â 1+M@]Í.W<M'+W<+e%:U;t+MK+M' EGE CA³³ cD oÉ2e 5 5 :G³cD>AcAMC<³ç³ Ck·^e%:G E ;$b'eKK7»<1 E .:8<t+M 5E e¯ E ;#­781 5 7GV 5 5 W).MK; 5 7

X++;$+1

78K7BRW 5 v*: 5 ;$ E8E `+M' EGE kVI>e:UT 5 V>R$:8.M''_>­prM 5 e`eL­M' E VI 5 W 5 ¦ 5 ¦ >H: 5 5 Wê^g$.'S>T 5;<­781 5 7G E 'e%:8­:GK+)e 5 + â :8RM 5 q$C= 5 7 5 7UWibC."V1+W 5%E E ;$NMK7US È E 5 5 e E :G78R$: 5 7a;3+M' EGE C@¤ê 5 e E :G78R$: 5 76] 5

78 E 5 e E ­I1+MPt+MKi78'S+T 5 ;):Ut+MKi;$ EGâ W0 5 M 5%E 78'e; 5 RW 5 $v*: 5 ;$J:G' 5Ä;=<>@?AB:CD C·^M']+W ;$ EGEG5 V>+M'd'e'+'M.'_> 5 5 e%:8; 5 7B;$k>7G7 5EyE +Wi®e:8' 5E k'e E +78VNeF:8L>M'`;$ Eâ W3 5 M 5E V; 5 E Eâ W3 5 M 5E YR378+78 E +e%:8W 5%E :G' 5E ­ E ' 5E ;#M'.eR+WV 5 R E vV 5E :G' 5%E ü±c^ * ü±XüC

9:;%<:=?>= ¬ BEDF n6=L j =Q< G ^ G >= H =Y%¥^ Z ^çÕ\_ Z >n;&: K ^&¥U> K = O Y G B Õd Z >n;&: K ^&¥ HK =L K6Z LU: GG B Õeg n JO Y Z LALQYQ=^Q^PÙYQ=^Q^%Ù N6G L j ×

Page 216: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& , !)">i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

h Î%¥U> K = O Y GtÛ = ZbHK = O Y G Õ RR K = O6G Y%= [G >= Z ^P=Y K ; H Ý&p G Yi n:; KG L KGQ[ Î&¥U> K = O Y G Ù J : K = O Y G Õ RRt=&n; HK = [ ;&:tn6=Q:=S= K = O6G YQ=cLQ;%:: G&HKGk ZbHK a; JH[ Î G >= HKZ LU::;%:CÕFrqFuF n JO Y Z LtÙYQ=^Q^%Ù N6G L j yEFr\ ×Fr_ HK :Q¥Î Z >n6Y Gtj ÕF|dFre a; JH[ Î G >= HK6Z LU::;&:m`PsÕFrg Û = ZbHK = O Y G ` H6G ßcÎ%¥U> K = O Y G yéÕ RRAL&: Z = K = OG YQ=Tn: ZbH L Z n=YFh j ` H6G ßS HK :¥Î Z >nY G y?l ZbHK l%Õ RR ZbH ^ G : GtKZ n;^ O6à ^ Z LQ;^ [ =AY ZbH < J =Q< G >Fri Û = ZbHK = O Y G Bu= [Q[ y j ÕFrk j ` H6G ßS HK :¥Î Z >nY G y?lU^ K : ZbH <l%Õ\uq Û = ZbHK = O Y G Bu= [Q[ y j Õ\F ë

¤ 5 W<'M'; 5 7`R:G'M.'_> 5 W<]: 5 ; 5 CA³³ cD oÉ · ? VW 5E :G7U; 5 e 5 7 5 7UWi3C VY%R'e'+'zi1 E .:8ÍU9LWie; 5 C'A³³ D oÉ2 C'A³³¾MD o C » ³c?U½ HXD 78iÍ78._3;Í­781 5 7G E .ep:8­:GK+i31+78 Ç + E 3M'RWî+787 5#E >W<®e%:GK 5 ¦ 5 [+eL 5 e%:878; 5 Ca·^M']+W ;$ E :GVtÍMK E8E 5E8E RRW W)]+: 5 ; 5 78+;Í:G' 5 ;$ie¯ E +7beM' E ; 5 C#¤ 7 5 78WiÍCªÍW 5%E :878z:UW3t]+W5 W<]+: 5 ; 5 YRz+¦ :GRL 5 :G7U:8W<+e%: 5 7 5 78'W)>e%:GÍ;$.: 5 ;-78._ä;&­7G1 5 78VkY%Rä]ÍRW» ³c?&½ HDä5 e;$+;)+M'+W<+e%: 5 ;)M' E :8)78+78 E +e%:U3RWi<MK E8E C

9:;%<:=?>= ¬ B ©F n JO Y Z LPp; Z&[ ÙYQ=^^&Ù N6G L j 6;; K yr Z ^ K Ó; [G v K%N :;Uß^tÎ G >= HK6Z Lbv6L G n K6Z ; H\ ×_ Ù J : K = O Y G ` Û = Z?HK = O Y G Õ RR K = O6G YQ=ML%;%:: G&HKG `Tn: Z?H L Z n6=Yd ÙY%=^^%Ù NG L j ÙY%=^^UÞ G LQY& Z ^ K Ó6; [G yuvÕôRQRAL N =b>=S= H6à Y Z ^ G n6=Q:=t:= Z V [ = à :p;%: Ge Z a-yua; JQH[ Î G >= HK6Z Lb::;%: ñu`ts6TRRA^ GoN ; J p GAG ::;åö YQ= H ²%= G v6L G ² ;g K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yua; JQH[ Î G >= HK6Z L&::;%:fh loÎ G >= HK6Z Lo::;%:^Pa; JH[ yrn N =^ G DQl%Õi ëkFrq n JO Y Z LPp; Z&[ ÙYQ=^^&Ù N6G L j ÙYQ=^^bÞ G LQY& Z ^ K Ó6; [G y Z ^ K Ó6; [G vFuF ×Fr\ Z a-yuvA`` HJ YY6í: GQK%J : H ÕFr_ K :Q¥M×F|d ÙYQ=^Q^%Ù N6G L j ÙYQ=^Q^UÞ G LQYUÓ6; [G yyÙYQ=^^UÞ G L%Y&Ó6; [G tv/B H ; [G ÕFre ëFrg L%= K L N yÎ G >= HKZ LUv6L G n K6Z ; HzG Fh ×PRRA^ GTJ > G ::;S;LQ;%:Q: G&JAH =S= H6à Y Z ^ Gt[ =MLQY%=^^ G öFri RR [à = > G&H ^&=Q< G >áöð>=^Ta=QVS=t= H6à Y Z ^ G n6=%:=Tn:x&v Z >=cLQY%=^^ GFrk Î%¥6^ KG >ìB; JK B|n: Z?HK Y H y G B< GQK%ÛG ^^%=%< G yÕ\uq a; JH[ Î G >= HK6Z LU::;%:fQfÕ\F ë\u\ ÙY%=^^%Ù NG L j ÙY%=^^UÞ G LQY& Z ^ K Ó6; [G yuv/B HG v K Õ\u_ ë

¤ñY%Rm C'A³³ D oÉ2 C'A³³¾MD o C » ³?U½ HD ¦§_`]`U9W<7 5 W<]+: 5 ; 5 Y%RF:G7U:U(;(+M' EGE d1+78 Ç >7 E @RWê>7G7 5 ¦ 5 +e 5 e%:G7U; 5 C 4 E5 :8+e9 E K; 5 >e 5 e%:G7U; 5 V 5 W<]: 5 ; 5 >W).:G6RWi

Page 217: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© s7 §¨X¯© D%'i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ï·¶/x)Ü Ò»ð»ÛÌ×ÓX¿ÊÓX¿@и»Ò0Ô[×+ÎZÜwx3Ú6Õ`×*пd×*Õ^ÜÚPÜ Õ`Ô@¿ o

W<+e E +WVt.e+7G>W<+e%:8 5 5 e:U; 5 7»;$0+787 5%E ) 5 e%:G'eR# 5 W ÍeL­M' E b78# E ;$>Wi EMK E8E E VÌU9Wie; 5 p E 078>+R7 E '1IW<+e%:GVy E8E e; 5 5 W 5 7GRW<+e%: 5ä5 78 E : 5 ù§+R;%úJ; 5» ³c?&½ HD C¤«W<]: 5 ; 5 C'A³³ D oÉ2 C'A³³¾­D o Cé½ H7D :G7U:8-;;$>+M'78S+T 5 ;zRWiMK E8E C m R

¦ ReS>T 5 ]1+78 Ç >7 E e 5 E 5 5 5 7G78+e%:86v­<+g$ E :GRWii+M' EGE 5 W¨ E8E Je 5 W<V>e%:8T 5 V: 5 Wi7»i:G.:GR;$0;$+1K;d'e E +78HprMK<e):8L>M'#; Eâ W3 5 M 5E V+W + E5 e>:G'1 5 V 5 RM'eS+7RWi)gNS+T 5 V+W«+ EG5 5%E .:G'1 5 C[? E :8bW<]: 5 ; 5 ]JW 5E :G7U; 5 e 5 7 5 78Wi3C /C· 78.W<+'7US+T 5 e EGE W<]: 5 ; 5 ] E M'17 55 $v*+: 5;=<>@?AB:CD 5 7G78+e%:GC2·«:Ut+MK

5 7G78+e%:8`]^7G E 5 e E ­I1+M 5 7F78W<_+>e7 5%E@EGâ W0 5 M 5%E ;b+M' EGE » 5 7G78+e%:8C l e'+'M.W<+e%:8V%e 5e â 1>MLWi E M.: 5 V:Ut+MK3 5 787G>e:8^] Y%R+MK3+7GK;be 5 5 e E :G78R$: 5 76;$ EGE b+M' EGE V 5 e; E T 5'e E >7GK; 5%E65%E :G' 5E ­ E K 5%E b E MK E8E E ;$e â 1>MBWi E g:G>7Ge 5 C12 Re; 5 i;>MK7US>T 5 ;$RWiÍ+M' EGE b]0+e 5 e%:G7U;#eÍ­7G1 5 78 E 'e:U­:8'>VtRWi#e 5 1#>e%:G7U;#; 5 :G' 5X¸?QË=< C'A6³³]i'e E >7GK;eä:Ut+MK 5 7G78+e%:GCÍAB>W378p E <;ÍY%RiRWi; E 178'­I1+ E ; E8E >e:878;ä]RW 5 R:G7 55 $v*+: 5;=<>@?AB:CD 7U78Wi_>+e7 5E3EGâ W3 5 M 5E ;7GN]+W)pw;$>+M'78;MK E8E C·^M']+W´;$ EGEG5 VZ 5 W 5 e­M. E E >W<®e%:GK+7 5E8E >R<e 5%E e¯ E G;$+e%:G7 5 i;;$NMK7US>T 5 ;MK E8E V 5 e 5 1 5^5 $v*: 5n;=<>³?AB:CD ;$+16L E8E 7Ø E +7Z»:8t+MK( 5 7878+e%:GVN;$FW 5 ; 5 Y%RFe 5 1 5EEGâ W0 5 M 5%E6E *vW.e E >7GK; 5E e E :U3e 5 13:8L>M'<Y%RJ 5 7878 E 5 e;$ J MK E8E E +e; 5 eM' E ;C· 5)Ç eMB; 5 W)]+: 5 ; 5 V 5 1M 5 7ae%:G' 5 ;)1I7GK­I1>MU Ë:?A7B:CD ]J78>+RL>78; 5 V$;$J¦ 5 7GWi)Y%Re 5 1 E ;$NMK7US È EaE >78T 5 +¦ :GRL; E e0:8t+MK<;$e â 1>M E Rt+78 5 7NCD 5 W<+W 5E 5 W 5 +g>W<M 5 ä­781 5 78 E .e%:U­:GK+ä; Ç R78zC'"C3· 5 7U;$>W ;$01 E .:8ä; 5%E

e¯ E`E >7GK0 E +R.e%:8<ù 5E eXHW<>7 5%E 'e;$K+W 5%E e¯ E`E +e; 5 1 E .:8; 5E ú

• C'A³³ D oÉ · ? ù"Nú

• C'A³³ D oÉK C'A³³¾­D o C » ³?&½ HXD ù*"Nú

• C'A³³ D oÉK C'A³³¾­D o Cî½ HXD ùú

=^ EGE 5 e%: 5 Va-:8L>M',;$ EGâ W3 5 M 5E 78 E +e%:U-¦ 5 7GWiW 5E :G7U;-e Ç R78CªC?de%:8T 5 V#+e%:G7U;<;i+M' EGE ú ]b'e E +78';<eL):8t+MKi;$ EGâ W3 5 M 5E V E8E e; 5 E +7^ E :UiMK E8E ) 5 787G>e:8Vy;$>1+eL; 5E RÍ:8L>M';$ EGâ W0 5 M 5%EJE >7JY%R+MKÍR E ;ÍL7UÍ'e E +78.7Je 5 1 5EEGâ W0 5 M 5%E CdOñ E .:GRS+T 5 W 5%E :878;)e Ç R78<CªY%Rt+78W<H:83Y%Rbie­M. E E >W<®e%:GK+ 5E8E z7 5E8E >R'7( 5 W äU9W<;äi C'A³³ D oÉK C'A³³º H<½ HXD ;$iWie+'78ä 5 7G78:UC· 5 78: 5 78e7(;$ E8E ÍU9W<;Vy E .:GRS+T 5 ;#:8t+MKä;$ EGâ W3 5 M 5E ])YR+MK#W 5E :G7U;#eÇ R783C'">CZû E8E J¦ 5 7GWiV 5 5 e%:8.eR76be­M' E E +Wi®e%:8'>V 5 76g$+W<M 5 V 5 W 1 E H:U 5 e¯#V$:G>W)p E e 5 1W<+e%:8J):Ut+MKi;$Wi E M.: 5 e â 1>MÌ 5 W 5 5 787G>e%:GJb<.e E >78S>T 5 ;MK E8E û e 5 5E : 5 v*R E : 5 C

9:;%<:=?>= ¬ Bu@F n JO Y Z LPp; Z&[ ÙYQ=^^&Ù N6G L j ÙYQ=^^bÞ G LQY&Ó; [G yÙYQ=^^UÞ G LY&Ó6; [G v\ K%N :;&ß6^tÎ G >= HK6Z LUv6L G n KZ ; H_ ×d Î%¥U> K = O Y GSKG >n N ;Y [ `tÙ J : K = O Y G Õ RR^&=Y%p=S=Un; HK = [ ;%:tnR K = O6G YQ=cL%;%:: G&HKGe HK :Q¥ÙYQ=^Q^ H LçÕgh Z a-yuvA`` HJ YY6í: GQK%J : H Õik RRín:;L J :=cLQYQ=^^ GPH = K = O6G Y%=

Page 218: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !)">i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

int

1

0

string

int

1

0

string

int

1

0

string

Maintable Curtable

APróx. livre

Maintable

Curtable

Próx. livre

A

Maintable

Próx. livre

Curtable

(a) (b)

(c)

2 2

2

3

j['R7U)Cªu l e E +7US+T 5 ;J+M' EGE Je0:8L>M'<;$ EGâ W0 5 M 5%E C

Frq H LX`y HK :¥ÙY%=^^PÙ J : K = O Y G BLQYQ=^Q^&ï ZbH[ ènÌyuv/B H =b> G B Z >=Q< G ÕFuFFr\ Z a-y H L-ñ` HJ YYTRR ÖQàP[G LQYQ=%:= [ =ö Q6Fr_ ×F|d K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B H =b> G öFre l?ÙYQ=^^l?ftvCB H =b> G B Z >=Q< G flí=Y%: G = [ ¥ [G LQYQ=Q: G%[ l%ÕFrg ëFhFri RR ZbH LQY JZ LQYQ=^Q^ GTH = K = O6G YQ=cL%;%:: G&HKGFrk Ù J : K = O Y G Bu= [[ y H LS` H6G ßt HK :¥ÙYQ=^^yuv/B H =?> G B Z >=Q< G öÈÙ J : K = O Y G Õ\uq Ù J : K = O Y G ` H LåB H6G ^ KG%[ Õ RR K = O6G YQ=ALQ;%:: GUHKG ` K = O6G YQ= [ =MLQYQ=^Q^ G\F ÙY%=^^%Ù NG L j ÙY%=^^UÐ6; [ ¥QÓ6; [G yuv/B O ; [ ¥Õ\u\ Ù J : K = O Y G ` KG >n N ;Y [ Õ RRP: G L J n G :=A=&n; HK = [ ;%:tn6R K = OG YQ=cLQ;%:Q: G&HKG\u_ ë

?dW E >RK;VeJM'.e9Li"> V1>7G Ç +p E E `e 5 E 5 5 5 7G78+e%:G[v­J+g E :G`RWib+M' EGE ` 5 W5 W< E W 5 e 5 W<3;Í+M' EGE E +e; 5 ;$>+M'78;C`? EGE i7 5 R7Ui]¦ >H:U# 5 7(W)> 5 ; 5 W<]: 5 ; 5;=<>³?AB:CDÄ o C'A³³!J/QKHb&N W 5%E :878; 5 e 5 7 5 78Wi#C C0? EGE )W)]+: 5 ; 5 ;$>1)7G E t+.:87J E78+7U E ;$ E 5 5 ;<M''eR>WäCk· R E >3¦ Re 5 e<; E +R.e%:8 ¦ 5 7GWi

"CF'eKKM'W<+e%:GV 5 W<]+: 5 ; 5 7 5 R78i#+M' EGE e#:8t+MK# 5 787G>e:8#ù 5 R E vVt1+78 Ç + E eLiMK E8E J 5 7G78+e%:G(g$ E :8JRWiiMK E8E J 5 Wî E8E (e 5 W<Núm

Ca> EG5 eT 5 :8+e9 +eL 5 e%:878; 5 VU9W<»7GNR7 E .1W<>e:8@ L E Y%R E »R$:G'M'._Ne; 5 `:Ut+MK;(e â 1+M E RL>7G 5 7NV 5 R E *vV$Y%R+MK07G+¦ +78+e%:G J +M' EGE »RWe â 1+MPWi E g:G>7Ge 5 ù+ EG5>M'<+g$ E :8%ú C

Page 219: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& %q- !)">i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ï·¶/x)Ü Ò»ð»ÛÌ×ÓX¿ÊÓX¿@и»Ò0Ô[×+ÎZÜwx3Ú6Õ`×*пd×*Õ^ÜÚPÜ Õ`Ô@¿ %q

û»R78e:8&R E >-eL:Ut+MK; EGâ W3 5 M 5E V E5 W<+e%:Gä+e%:G7U; E ; 5 :G' 5c¸?QË=< C'A6³³ ¸:?Ë=<7;å >"NKCD ù§+M' EGE <3:8. 5E 'W<M' E VB7G E t>:G'1W<+e%:GIú E T 5 5 e E ';$>78; E C3· 'W)M.+pW<+e%:8S+T 5 ;$ E8E 3W)]+: 5 ; 5 VLeÍ7GNM'';;$VL;$ Ç e0 E 78+78 E ;$3 E 5 5 7UiR$:8.M'._NS>T 5 ; EMK E8E E CØ?dW¨RW¨;:G>7GW<'e; 5 5 e%: 5 ; 5 7 5 78W<V E T 5 + E8Eâ 1> E : 5 ; E E MK E8E E ;$ Ç peK; E eL)+M' EGE 5 7G78+e%:G((: 5 ; E ;$ Ç e'; E +W¨MK E8E E ;$Je â 1+MBWi E +g%:8+78e 5 C

9:;%<:=?>= ¬ BªF n JO Y Z LT HK :Q¥= O Y G LQYQ=^^Uï ZbH[ èQnÌyÎ K : ZbH <cv\ ×_ HK :Q¥= O Y G nA` K ;bnÌÕde RRín6=Q:=cL&= [ = G Y G > G&HK ; [ = K = O6G YQ=cLQ;&:: G&HKGg ß NZ Y G yrnêñu` HJ YY6h ×i RRTp G : Z a Z L%=c^ G J >= G&HK := [ = [G LQYQ=^Q^ G ; JMKZ n;A^ Z >nY G ^k RR GtG&HK ;SLQ;?>n6=%:=M; H ;> GFrq Z aytyyrn ZbH ^ K = H L G ;%aS HK :¥ÙYQ=^^ ]] y|n ZbH ^ K = H L G ;&aS HK :¥Î Z >nY G FuF ÃÃTn B H =b> G B GQI%J =Y^çyuvFr\ : G%K%J : H n/ÕFr_ nM`TnÌB H6G v K ÕÜRRXn:x%v Z >= GUHK := [ =F|d ëFre Z a-yY G p G Y J n`` HJ YY6XRRA^ GTH ;t=L N ; JcG S; H Ý&p G Yí>= Z ^ G v KG : H ;Frg : GQK%J : HSHJ YQYåÕ RRT: G%K ;%: H = HQJ YYFhFri RRín:;L J := H ; H Ý&p G Yí>= Z ^ G v KG : H ;Frk : G%K%J : H Y G p G Y J n B >¥ K = O Y G BLQYQ=^^Uï ZbH[ èQnÌyuvÕ\uq ë ö 5 M.:8e; 5 5 7 5 7UWi C V1+W 5E Y%R E »+M' EGE `]`+e 5 e%:G7U;V>e:UT 5 RWiJ+g$+>S>T 5

]»MKeLS+;C 4 EG5 5 e%:G7U­78 5 V78'p E ^RWi3e 5 1b+e%:878; ¸?QË=< C'A6³³ 7833MK E8E ^ EGE +e%:878;]»'e E +78';e:Ut+MK3 5 787G>e:8CZ= 5 :G Y%R 5 5 e E :G78R$: 5 76;$ ¸:?Ë=< CA³³ v­3+RK;;+7GKS>T 5 ;$zRW´e 5 1 55 v*: 5;&<>@?ABCD Cz= M'.e9L- VØ E :Ue 5 1ä:8L>M': 5 7Gep E i:8L>M'< 5 787G>e:8JJie­M' E 5 e%:G'e%RL3e 5 e¯q C'A³³º H<½ HD V Ç M'9 5 ; 5 e¯# 5 787G>e:8V 5 E]Je+M'bY%R 5 ;+W¨78>++7 5 R$:878 E ;$>+M'78S È E ;$MK E8E E C= 5 W)]+: 5 ; 5 Y%RzeM. E RWg C'A³³º H<6½ HD ù 5 5 7G 5 ;+M' EGE NúVØ+g$ E :G EG5 W<>e:8

RWi(U9Wi;^78 5^Ç M'9 5 YRF 5 e%:G]>W»M' E :8(;$aMK E8E E e'e9; E VI 5 e$¦ 5 7GW<6W 5%E :878; 5e 5 7 5 78W<0Cªo$C

9:;%<:=?>= ¬ BF n JO Y Z LPp; Z&[ ÙYQ=^^&Ù N6G L j ÙYQ=^^bÐ6; [ ¥QÓ; [G yÙYQ=^^UÐ; [ ¥QÓ6; [G v\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : H Õd ÙY%=^^%Ù NG L j ÙY%=^^UÞ G LQY& Z ^ K Ó6; [G yuv/BLY Z ^ K Õe ë ?Ñ EGE EaE T 505E HeK 5E e¯ E YR 78>+ E W E +76:G7U:U; 5%E e E :807G'W<+'78b¦§ E (;0e­M' E

E +Wi®e%:GK+C m T 5 +M' E Y%R^ 5E8E R+W 5 Ri E :UT 5 +WRW >W<.e9 5 Y%R»M'+1»RWib;>MK7US>T 5;$(MK E8E C[· 5Ç eMP;$ E8E (¦§ E Vb E :G78R$:8R783;$^:Ut+MKb;$ EGâ W3 5 M 5E V+W :8+78W 5%E ;$(MK E8E E;$NMK7U; E e 5 7 5 7UWiV% E :878­) 5 W)M.+:8W<>e:8JW 5 e%:8;C

Page 220: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !) i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

9.4 O programa principalfZ5 7 Ç WV]F78>+ EG5 MH:8+7U7 5 W)]+: 5 ; 5 78.eL'M$; 5 e 5%EGEG5 5 W<'M'; 5 7Z78 YRF>M.a+gNR$:8 E :G»e â 1+Mt;e­M. E E >Wi®e%:GK+C l E8E5 ]`¦ >H: 5 V 5 W 5 ;$» 5%E :8RW<V%M.:G+7UeL; 55 7UY%R'1 5 C v vC¤ 7 5 78W<C 3W 5E :G7U 5 :87GNU9 5 ; 5 W<]: 5 ; 5l>MA5 e;$ ](+7GK; 5b535 $v*: 5 C'A6³³ D oÉù M''e9"> %ú6('eKK;<)78.W<>.7U0¦§ E J;)e­M' E E +Wi®e%:GK+äù M''e9"Nú C

9:;%<:=?>= ¬ Bu«F RQRPp G : Z a Z L%=c^ G n; [G ;Un G :=%:^Q; O : G = à :p;&: G ^ ZbHKàQK6Z L&=\ Z aãyðn6=%:6^ G :/B K ; j6G&H Ï^Q; J :L G Ba; JH[ G vQ::;%:yE_ fXn6=Q:6^ G :/BLQ; HK 9=Q:6^ G ::;&:``Psd ×e Z aãy|n: ZbHK Ï K : GG PRR G v Z?OZ :M= à :p;%: Gg ×h 9: ZbHK : GG n: K ` H6G ßS9: ZbHK : GG yEÕi n: K B|n: ZbHK ;; K yu:;; K Õ RRAL N =?>=o> K ; [ ;Tn6=Q:= Z >n: Z > Z : à :Qp;%: Gk ëFrq ÙYQ=^^%Ù N6G L jcK LP` H6G ßMÙY%=^^%Ù NG L j yEÕFuF K :¥A×Fr\ K LåBuÙYQ=^^%Ù N6G L j ;; K yu:;; K ÕFr_ Î%¥6^ KG >ìB; JK B|n: Z?HK Y H yl?sÎ G >= HK6Z L G ::;%:ta; JH[ l%ÕF|d ëFre L%= K L N yÎ G >= HK6Z LUv6L G n K6Z ; HG Frg ×Fh Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y G B< GQKQÛG ^^%=Q< G yÕFri ëFrk ë

9.5 Arquivos-fonte do compiladorf 7U E :8^+ â :8RM 5 ¦ 5 78W'eM'R â ; 5E e 5 ;.78:8¯78 5 92ÆÅ 5%E 5 :8 E ! L^¥!#5. ü Cd·^M']+W¨; E8E5 V 5 7UYR.1 5 C v v6¦ 5 ÌM.:G>78; 5 V$ 5 W 5 ;$ E 78H: 5 eL E NS+T 5 C C465 M 5 +W 5%E Vy:UW0L]>WäV[e 5 ;$'7G+:G¯7G 5 !N9:L #RW<17GKS>T 5 W0R.: 5E .W<M' E ; 5 7 5 p

7UWi+ü±+Vke 5 Y%RM E T 5 ;$>+M'78; E M'RWi E MK E8E E e'e9; E Y%Rä78>;$ Ç e+W EMK E8E E ü±c*b¶ VL>78e; 5 V$ EGE .WV$RW¨+787 5<E +Wi®e%:GK 5 Ck¤78 E RMH:U; 5 ] 5iE >R'e%:G

`^T ©X^&]7^T^&di_&dªZh=^[7RZXZ6WiXi^fTch=_i&Wgb[7S&d_X__dXd\=i_f^[7Scb=`\7^i_ Z 7óXó ² \fTbh=_d_di7b\[ Z ~X= _X^&ab[7¤&d\f¦bh=_ ZXZ6WiXi^fTch=_i&Wgb[7S&d_X__dXdX\c=i_f^[7Scb=`\7^i_ Z ZZZa _ b=`^7h dXd\di7\X[7a!°& [7S^`S:b=` dXd\&diX\X[aa b[_ ~ `\7hf[ U ² h=^iXigb'[7SXd_X_¤^Xhd_X^=a a7_`&h&^&d_=aa b[_ Q `\7hf[ ~X U ² h=^iXia7^S^^7hd_X^&a a7_`&h&^&d_=a~!° _f:^[XS:b=` d=d\&di7\X[a TXQ^i_

Page 221: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !)$"i

i

i

i

i

i

i

i

Capítulo 10Análise Semântica –Segunda Parte

=^ E :8#+ â :8RM 5 VÌ7G E >e:U78+W 5E E >ReL;ä7G:GV 5 R E >ReL;#¦§ E VØ;e­M' E E +pWi®e%:GK+C@=^>M'V E +7UT 5 eM. E ; 5E M.Re E E t> : 5E 78¦ >7G>e%:G EKJ 9>78eS+)>e:87Gb E MK E8E E;$NMK7U; E z:8W0L]>W E ;$NMK7US È E ; E 178K­I1+ E VZ; 5E W)]+: 5 ; 5%E 5 e E :G78R$: 5 7G E ; EMK E8E E C

10.1 Análise da hierarquia de classes= 5 + â :8RM 5 »1%'W 5E 5 W 5 »­7G1 5 78 E 'e%:8­:GK+^]6R$:G'M'._N; 7U`W 5 e%:U7Z^ E :G78R$:8R78»­ E K+;<:Ut+MKi;$ EGâ W0 5 M 5%E b1+78 Ç >7^i7G E >eS+i;$3+787 5%E V 5 W 5 <78>;$NMK7US+T 5 ;3MK E8E E+W E 5 5%E eLT 5 L>7GW<.:GK; 5E C#½^Wÿ E LN : 5 ;;$>+M'78S+T 5 ;$#MK E8E E VÌ 5 e:8R; 5 VBeT 5 ¦ 5 1>7G Ç >; 5 [< 5 >7I>eK3eL<R$:G'M.'_>S+T 5 ;<+M'­R E RM'8 C2 ReL; 5 :G+W 5%E RWii;$>+M'78S+T 5 ;$MK E8E 5 W 5

`&h=^i=i _ S7_[aci °RW ; 5E E LN : 5E 5 YRLM;+1>W 5E :8+7Ø:G>eS+T 5 ]@`g$ E :I+e+'`;^MK E8E û C 465 W 5 +W

X++

eT 5 :878M'9W 5%E 5 W MK E8E E g:G>7Ge E VÌ+M' EGE û :G>W Y%R# E :U7 E +e; 5 5 W<'M'; 5 WË+M' EGE ú C fZ5 78]+WV 5 ;$»78>++7ke%:G EZ5 Ri;$> 5 E ; ú C fZ5 7k E8E5 VeJ78'W)>.7U ¦§ E ;ze­M. E E >Wi®e%:GK+ÍeT 5 ]3 5E8Eâ 1>MV 5 R E >7GK#Wi E ;$H¦ â 'MXVB7GNM'._N7`:UMZ1>7G Ç >S+T 5 C m û ];$>+M'78;3;$> 5 E ; ú V 5 eM. E 7a);>MK7US>T 5 ;$ ú V$eT 5)E +78'0 5E8Eâ 1>M E t+7 E û ](;>MK7U; 5 RäeT 5 CZ°­0e E :8 E +Re;b¦§ E VY%ReL; 5 : 5 ; E E +M' EGE E E :8T 5 'e E +78'; Ee0:8L>M'<;$ EGâ W3 5 M 5E V$]( 5E8EGâ 1+My¦ +:GR7a:8MB1>7G Ç +S+T 5 C

½^W 5 R$:87 5 E LN : 5 Y%Ri;$>1 E >7(1+78 Ç +; 5 +W 7G>M'S+T 5J 9.>7878Y%RKÍ;<+M' EGE E ]ig$ E :I+e+'<;$;$NMK7US È E '78+RM'7G E 5 W 5

`&h=^i=i _ S7_[aci °`&h=^i=i ° _ S7_[aci ²`&h=^i=i ² _ S7_[aci

Page 222: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© Dbs §¨X¯©©Q©i

i

i

i

i

i

i

i

$"N Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

Y%RJ]J.M'+%MXC[? EGE (:G' 5 ;$J7 5 M.>W<0eT 5)E +7U­b:878:8; 5 e E :80¦§ E Je<e­M. E E +Wi®e%:GK+Cl E : 5 5 78Y%RaJ 5 e E :U:US+T 5 ; 5 7 5 M.>W< E ¯( 5 ;$+78K E +7Z¦ >H:U eL(;>MK7US>T 5 ;$o[C· E8E 'WV78¦ >7G'W 5E ;$K7b EGE 1>7G Ç >S+T 5 7U¦§ E E >R'e%:G#z 5 ;$>70 5 e%:U7 5 +787 5 v­&eeL­M' E (;0;$NMK7US>T 5 ;$ ú C· E8E 'WV$e E :83¦§ E V 5 :878:87a;$JRWi<;$>+M'78S+T 5 ;$MK E8E V5 eM' E ; 5 7 E +Wi®e%:8' 53E 'W<M' E W)>e%:G^1+78 Ç > E » E Rt+7UMK E8E `+g E :G^( 5 e%:8RW >7G7 5+W > EG5 e>:G'1 5Í5 R- 5 W<M':8zÍ>e%:G7U;z;z+M' EGE 3eL#:Ut+MKz;$ EGâ W0 5 M 5%E VP'e;$K+eL; 5Y%RMB E R E RL>78+M' EGE Cf 7U E :8 E +Re;䦧 E <¦ 5 F;$ Ç e';MK E8E x'A6Ë cD oÉ%VBY%R E i.eKK; E +R'e:8

Wie>.7U

9:;%<:=?>=DbsCBEDF n6=L j =Q< G ^ G >= H =Y%¥^ Z ^çÕ\_ Z >n;&: K ^&¥U> K = O Y G B Õd Z >n;&: K ^&¥ HK =L K6Z LU: GG B Õeg n JO Y Z LALQYQ=^Q^XØ=Q:Ù N6G L jG v KG&H[ ^tÙYQ=^^%Ù N6G L j ×hi n JO Y Z LTØ=Q:Ù N6G L j yék ×Frq ^ J n G :CyEÕFuF ëFr\Fr_ n JO Y Z LPp; Z&[ Ø=Q:Ù NG L j 6;Q; K y Z ^ K Ó6; [G v K%N :;&ß6^SÎ G >= HK6Z LUvL G n K6Z ; HF|d ×Fre ÙY%=^^%Ù NG L j 6;Q; K yuvÕ RRTa=%VA= H6à Y Z ^ GS[ =^tLQYQ=^^ G ^Frg Ø=%:Ù N6G L j ÙYQ=^Q^UÞ G LQYU Z ^ K Ó; [G yuvÕFh Z a-yua; JQH[ Î G >= HK6Z Lb::;%: ñu`ts6TRRA^ GoN ; J p GAG ::;åö YQ= H ²%= G v6L G ² ;Fri K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yua; JQH[ Î G >= HK6Z L&::;%:fFrk loÎ G >= HKZ LT::;&:6^Ta; JQH[ yrn N =^ GM© l&Õ\uq ë

? E8E +M' EGE < E :G+eL;$#MK E8E n C'A6³³ D oÉ%Vy;$<¦ 5 78WiYR<: 5 ; E E 178'­I1+ E â ;$+pÇ eK; E 5E8E W E +70R$:G'M'._N; E Y%RXC¤« 5 e E :G78R$: 5 7 E .W<M' E W<+e%:Gz.e1 5 > 5 5 e E :G78R$: 5 7; E RL>78+M' EGE ä 5 W<]+: 5 ; 5 x'AË D oÉ · ? ] 5 W<]+: 5 ; 5 Y%R;$+1 E >7#U9Wi; 5 t+M 5 5 W<.MK; 5 7)7U&;$ E 7U7)-e­M' E E +Wi®e:8'>CѤ Y%Rä E8E ÍW<]: 5 ; 5 ¦§_z]ä'e%1 5 +7)78.W<>.7U䦧 E #;e­M' E E >Wi®e%:GK+,ù§W)]+: 5 ; 5 C'A³³ D oÉ · ? úVZ+ EG5 eT 55 5 7878W+787 5E VN'eKK7d E +Re;»¦§ E aU9LWie; 5x'A6Ë D oÉK C'A³³¾­D o C » ³?b½ HXD V EGE eL; 5 5 W 578RW)>e%: 5 07U'_;<­781 5 7G E 'e%:8­:8'>C

465 W 5 ;$» 5E :GRW<V E8E FW<]+: 5 ; 5 t+7U 5 7G78FbM. E :U;$^MK E8E E U9W<e; 55 W<]: 5 ; 5 Y%R:G7U:U;$#+;RWi;$>M' E C m #RWÿ+787 55 5 7G78)+W´M'RWi; E MK E8E E V 5 5 e%:U; 5 7b;$+787 5E ]J.e+7G>W<+e%:8; 5 J<e­M' E 5 e:8.eR078 5 7G E : 5 ;)M. E :U<;$bMK E8E E C

9:;%<:=?>=DbsCB ©F n JO Y Z LPp; Z&[ Ø=Q:Ù NG L j ÙY%=^^UÞ G LQY& Z ^ K Ó6; [G y Z ^ K Ó6; [G v\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : H Õd K :Q¥M×e Ø=Q:Ù N6G L j ÙYQ=^^UÞ G LQY&Ó6; [G ymyuÙYQ=^^bÞ G LQY&Ó; [G Pv/B H ; [G Õ

Page 223: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& "" !)/i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏwvÇnx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx<ÓX¿1¾<Ö[Ò»Ý^ÜÚPÜ Õ`Ô@¿ ""

g ëh L%= K L N yÎ G >= HKZ LUv6L G n K6Z ; HzG i ×PRRA^ GTJ > G ::;S;LQ;%:Q: G&JAH =S= H6à Y Z ^ Gt[ =MLQY%=^^ G ök RR [à = > G&H ^&=Q< G >áöð>=^Ta=QVS=t= H6à Y Z ^ G n6=%:=Tn:x&v Z >=cLQY%=^^ GFrq Î%¥6^ KG >ìB; JK B|n: Z?HK Y H y G B< GQK%ÛG ^^Q=Q< G yEÕFuF a; JH[ Î G >= HK6Z LU::;%:fQfÕFr\ ëFr_ Ø=%:Ù N6G L j ÙYQ=^Q^UÞ G LQYU Z ^ K Ó; [G yuvCB H6G v K ÕF|d ë

ök*vW 5%E 5 7U 5 Y%R(¦§_ 5 W<]: 5 ; 5 Y%RJ:878:8<;<;$NMK7US+T 5 ;$b>;)MK E8E C

9:;%<:=?>=DbsCBu@F n JO Y Z LPp; Z&[ Ø=Q:Ù NG L j ÙY%=^^UÞ G LQY&Ó6; [G yÙYQ=^^UÞ G L%Y&Ó; [G v\ K%N :;Uß^SÎ G >= HK6Z LUv6L G n KZ ; H_ ×d Î%¥U> K = O Y GSKG >n N ;Y [ `tÙ J : K = O Y G ÕÈRQRS^%=Y&p= K = O6G YQ=MLQ;%:Q: G&HKGe HK :Q¥ÙYQ=^Q^cLX` HJ YYåÕg HK :Q¥ÙYQ=^Q^ H LçÕhi Z a-yuvA`` HJ YY6í: GQK%J : H Õk Z a-yuv/B^ J n G : H =b> G ñu` HJ YY6Frq × RRPp G : Z a Z L&=c^ G ^ J n G :6LQYQ=^^ G a; ZX[G a ZbHZ&[ =FuF LP`-yr HK :¥ÙYQ=^^tÙ J : K = O Y G BLQY%=^^&ï Z?H[ ènÌyv/B^ J n G : H =U> G B Z >=Q< G ÕFr\ Z aãyîLT`` HJ YY6PRRPÎ GTH6 ;P=L N ; J ^ J n G :LQYQ=^^ G ö 6Fr_ ×F|d K&N :;&ß H6G ßMÎ G >= HK6Z Lbv6L G n K6Z ; H yv/B|n;^ Z&K6Z ; H ötlbÎ J n G :6LQYQ=^Q^zlfFre v/B^ J n G : H =b> G B Z >=Q< G fl H ; K a; JQH[ l%ÕFrg ëFh ëFri H LX`y HK :¥ÙY%=^^PÙ J : K = O Y G BLQYQ=^Q^&ï ZbH[ ènÌyuv/B H =b> G B Z >=Q< G ÕFrk H LçB|n6=Q: GUHK `ALçÕ RRAL%;Y;L%= H = K = OG YQ=M;P=Un; HK = [ ;%:tnRA^ J n G :6L%YQ=^^ G\uq Ù J : K = O Y G ` H LåB H6G ^ KG%[ ÕóRR K = O6G YQ=cLQ;&:: G&HKG ` K = OG YQ= [ =SLQYQ=^^ G\F Ø=%:Ù N6G L j ÙYQ=^Q^UÐ6; [ ¥%Ó6; [G yv/B O ; [ ¥Õ\u\ Ù J : K = O Y G ` KG >n N ;Y [ Õ RRT: G L J n G := K = O6G YQ=cLQ;%:: G&HKG\u_ ë

l eKKM'W)>e%:GV`78¦ >7I>eK J :8t+MK, 5 7G78+e%:8ä] E M'1e178'­I1+M ?=D >"N/ CH CQ?dWE +R';V1+78 Ç >p E E ^g$ E :8^e 5 e¯3 5 7G78+e%:G^;b­781 5 7G E .e%:8­:GK+ 5Ç M.9 5 ³NËDËcA>³D VY%R'e;$K+Y%R^JMK­R E RMK#8& :a¦ 5 R E ;CØ?dW > EG5 5%E .:G'1 5 V(+e%:G7U;J 5 787G E 5 e;+e%:G JE RL>78+M' EGE »]J7 5 R7U;e3:8t+MK)R$:G'M'._Ne; 5)5 W)]+: 5 ; 5;=<>@?AB:CDCÄ o C'A6³³!J/EHEN VY%RV 5 W 5 1% E : 5 e 5 + â :8RM 5 7G E t+.:8& E 78+78 E ;$Í E 5 5 7U E MK E8E E C· EGE .WV E 57 5 78W<; 5 7J:8+e%:87<R$:G'M.'_>7) 5 W 5-E Rt+7UMK E8E zRWi-+M' EGE zY%RäeT 5 ¦ 5 `;$NMK7U; 5 RY%R3eLT 5 ]<+ E8Eâ 1>MÌe 5 5 e:8g: 5 5 7G78+e%:GVtÍL E Y%R E i¦§M'9Í0RWiÍgNS+T 5 ]0MKeS>;V'e:8+787 5 W<L>e; 5 )e­M' E E +Wi®e%:GK+0780: 5 ;) EGE <MK E8E C

4 EG5 E Rt+7UMK E8E E *v`>e 5 e%:G7U;V>`178K­I1+M@ 5E8E R%^ 5 7G78 E 5 e;$>e%:GZ+e%:G7U;ae:8L>M'0;$ Eâ W3 5 M 5E CZ?dW E >RK;V%0+e%:G7U;b 5 7G78 E 5 e;$>e:8 J MK E8E E >e; 5 ;>MK7U;]7 5 R7U;(e:8t+MK» 5 W<M':U; 5 WJ7G+¦ +7I+e+' JbE Rt+7UMK E8E CÌ? E :G ]^ E K+W)>e%:G: 5 ; 5¬5 7 5 E8E W<+e%: 5 78>M.'_>; 5 L>M 5 W<]: 5 ; 5 C fZ5E :G>7G 5 78W<+e%:GVF1M 5 7Í;$ Ë:?A7B:CD

Page 224: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& "N !)i

i

i

i

i

i

i

i

$"I Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

]:8RM''_>; 5 78Y%R E ;>MK7US È E Y%R E >78T 5 eM' E ; E e 5E e¯ E GHg 5 ; 5 e¯ 5 7G78+e%:8 E vW M'K+; E eL7G:G(;J:Ut+MK3;$ Eâ W3 5 M 5E 5 7878 E 5 e;$+e%:8^b E8E bMK E8E C¤W<]: 5 ; 5xA6Ë D oÉ2 C'A6³³º H<6½ HD ]b'e1 5 +; 5 780:G7U:U7»; 5 5 7G 5 ;#+M' EGE VLe 578: 5 7Ge 5 V 5 1IM 5 7^;$µ Ë:?AB:CD ]J7G E :UR7U; 5 C

10.2 Análise da declaração de variáveis e mé-todos

=^ E :Uͦ§ E <;äe­M. E E +Wi®e%:GK+ E T 5 :UW3t]+W eM. E ; 5E E ;$>+M'78S È E ; E 178K­I1+ E;ÑMK E8E V E +R E W<]: 5 ; 5E - 5 e E :G78R$: 5 7G E Cˤ W<]: 5 ; 5 Y%ReM. E 5 5 78 5 ;¬+M' EGE E .W<M' E W<+e%:G0.e1 5 > 5E W<]: 5 ; 5E YR3:878:8Wæ;$)+;#RWiä; E M' E :8 E ^;$<MK E8E E e.pe9; E V`;$178'­I1+ E Va;$& 5 e E :G78R$: 5 78 E &;$W<]+: 5 ; 5E Vae E :8 5 78;+WC\¤ W<]: 5 ; 5 Y%R:G7U:U; E +M' EGE E e.e9L; E ] 5 W< E W 5 Y%R):G7U:Uä E ;$>+M'78S È E ;$#+M' EGE E V 5 R E *vVx'A6Ë D oÉK C'A³³¾­D o C » ³?&½ H7D C

9:;%<:=?>=DbsCBªF n JO Y Z LPp; Z&[ Ø=Q:Ù NG L j ÙY%=^^UÐ6; [ ¥QÓ6; [G yÙYQ=^^UÐ6; [ ¥QÓ; [G v\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : H Õde Ø=%:Ù N6G L j ÙYQ=^Q^UÞ G LQYU Z ^ K Ó; [G yuvCBLQY Z ^ K Õg Ø=%:Ù N6G L j Ø=Q:QÞ G LQY& Z ^ K Ó6; [G yuv/BpY Z ^ K Õh Ø=%:Ù N6G L j Ù; H ^ K : J L K Þ G LQY& Z ^ K Ó6; [G yuvÌBL K Y Z ^ K Õik RRt^ GTH6 ; G v Z ^ KG LQ; H ^ K : J L K ;%:CyEö ZbH ^ G : GTJ >a=Y^%;Frq Z a-y Ù J : K = O Y G B > GQK%N ; [ ï ZbH[ Ò H LQY%=^^çy?lbLQ; H ^ K : J L K ;%:lö HJ YY6o`` HJ YQY6FuF ×Fr\ Ù J : K = O Y G B= [[ y HG ß HK :¥ ÛGQK%N ; [ y?lULQ; H ^ K : J L K ;%:löFr_ Ù J : K = O Y G BY G p G Y J nÌö K : JG ÕF|d ëFre Ø=%:Ù N6G L jÛGQK%N ; [ Þ G L%Y& Z ^ K Ó6; [G yv/B >Y Z ^ K ÕFrg ë

¤ E W<]: 5 ; 5E Y%RZ:878:8Wê; E ;$>+M'78S È E ;$d17GK­I1> EPE T 5 W 5E :G7U; 5%E e 5 7 5 7UWi "> Cªo$C¤7G'W<+'7 5 :G7U:Uz;M. E :U;$#;$>+M'78S È E 5E >ReL; 5 .e E +78i+;Í17GK­I1>M[eLÍ:Ut+MK;$ EGâ W0 5 M 5%E C l eKKM'W<+e%:GV 5 W)]+: 5 ; 5 :G>e:Uä+e 5 e%:G7U7 e#:Ut+MK;$ EGâ W3 5 M 5E z+M' EGE R$:8.M'._N;)e<;$NMK7US>T 5 C fZ5 7`+g>W<M 5 V 5 eM. E 7`<;$>+M'78S+T 5

ñ ² h=^iXi Ñ e]Je>+ E8E ­7G 5 1+78 Ç +7 E <MK E8E l²b|L¦ 5 B;>MK7U;C= 5 :G0Y%R3W) E W 5ÍE 3i17GK­I1>My E :G'1+7 E >e; 5 ;$NMK7U;< 5 W 5 RW¨:G' 5 ­ E K 5 u-ü±c

5 R * ü±XüzutVy EGE #R E >ÍR$:8.M''_>eL; 5¯;=<>@?AB:CDCÄ o C'A³³7J/KHbN .7U­i¦ Re 5 e7>C f 78Í E8E5 V'e:87 5 ;$R_+'W 5%E ei:8t+MKÍ; EGâ W0 5 M 5%E ;$R E >e:878; E`Ç : â +' E Y%Rb78+7G E >e:UW 5E :G' 5%E­ E K 5%E ÍY%RV[ 5 73 E :U78+W e 5 e â 1+MdWi E M.: 5 ;ä:Ut+MKV E T 5 EGEGâ 1+ E ;$ÍY%RM'Y%R>7 5 e%: 5 ; 5 7 5 78W<C

Page 225: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& ">/ !)oi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏwvÇnx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx<ÓX¿1¾<Ö[Ò»Ý^ÜÚPÜ Õ`Ô@¿ ">/

4 EG5 )+M' EGE J;i;$>+M'78S+T 5 eT 5<E *v)>e 5 e:878;VRW¨+787 5)5 5 7G78C 4 EG5 5 e%:G7U­78 5 V78`>;a178K­I1+Me^;$NMK7US+T 5 ]d.e E >7GK;aRWi^>e%:G7U;ae`:8t+MK^;$ Eâ W3 5 M 5E 5 787G>e%:G'e;$K+eL; 5 VM.]>Wî; 5#E +Rz:G' 5 V E RL);.W<+e E T 5 C

=^>e9RW 5 e%:87 5 M.<]i¦ >H: 5&E5 78#g$ E :I>eK;$z;$>+M'78S È E 78+t:GK; E V 5 R E *vV E v­9­RWi178'­I1+Md 5 W 5 W< E W 5 e 5 W<C l E : 55 5 7G78<+Wÿ1%'7G:GR;$z; E +7U:G>7 âKE :8'> EE +Wi®e%:GK+ E Y%R3Y%R+78+W 5%E ;7 J M.'eRL>WC6?dW

X++VLeT 5#E 3;$>1t+78W<H:8.7(YRbRWi

178'­I1+M EG5 78+ 5 e9L 5 RQ7GN;$>+M'7GäRWi 5 R$:878178K­I1+Ma>WþRWi E Rt+7UMK E8E Cñ· E8E 'WVe E :8` 5 e: 5 ;be­M' E E >Wi®e%:GK+ E +78'J 5E8Eâ 1>M$1>7G Ç +7 E ^J17GK­I1>M E +eL; 5 ;$ Ç e';av­¦ 5 B;>MK7U;e)W< E W<)MK E8E VWi E eT 5<E +78'3 5%EGEGâ 1+MP1>7G Ç >7 E J E8EG535 5 7G78»>WRWiE RL>78+M' EGE V6M.>W37UeL; 5 YR E Rt+7UMK E8E ä 5 ;7GN+7i;$> 5 E V`;$+e%:87 5 ; 5 ¯$;$' 5 p¦ 5 e%:8VB<Y%R E R E ;>MK7US È E ;$<1I7GK­I1>MØ.e;ÍeT 5 ¦ 5 78W eM. E ; E C fZ5 7J EGEG5 VP EGE E t> : 5iE >78­01>7G Ç +; 5 e)7G¯Ig$'Wib¦§ E ;ie­M' E E >W<®e%:GK+C

9:;%<:=?>=DbsCBF n JO Y Z LPp; Z&[ Ø=Q:Ù NG L j Ø=%:QÞ G LQYU Z ^ K Ó; [G y Z ^ K Ó6; [G v\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : H Õd K :Q¥M×e Ø=Q:Ù N6G L j Ø=Q:QÞ G L%Y&Ó6; [G ymyØ=%:QÞ G LQYUÓ6; [G Tv/B H ; [G Õg ëh L%= K L N yÎ G >= HKZ LUv6L G n K6Z ; HzG i ×k Î%¥6^ KG >ìB; JK B|n: Z?HK Y H y G B< GQK%ÛG ^^Q=Q< G yEÕFrq a; JH[ Î G >= HK6Z LU::;%:fQfÕFuF ëFr\ Ø=%:Ù N6G L j Ø=Q:QÞ G LQY& Z ^ K Ó6; [G yuv/B HG v K ÕFr_ ëF|dFre n JO Y Z LPp; Z&[ Ø=Q:Ù NG L j Ø=%:QÞ G LQYUÓ6; [G yrØ=Q:QÞ G LQY&Ó6; [G vFrg K%N :;&ß^SÎ G >= HK6Z Lbv6L G n K6Z ; HFh ×Fri HK :Q¥= O Y G LÕFrk Z ^ K Ó6; [G nÌÕ\uq\F Z a-yuvA`` HJ YY6í: GQK%J : H Õ\u\\u_ RRT=L N = GUHK := [ = [ ; K6Z n; [ =tp=Q: Z%à p G Y\d LX`SÙ J : K = O Y G BLQYQ=^^Uï ZbH[ èQnÌyuv/B|n6;^ Z&K6Z ; H B Z >=%< G Õ\ue RRt^ GTH6 ;t=L N ; J öæ\ug Z a-yîLP`` HJ YY6\h K%N :;Uß H6G ßcÎ G >= HK6Z LUv6L G n K6Z ; H yuv/B|n;^ Z&K6Z ; H öSl?ÙY%=^^ml?f\ui v/Bn;^ Z&KZ ; H B Z >=Q< G fl H ; K a; JH[ l%Õ\uk_uq RRín6=Q:=cL&= [ =tp=%: Z%à p G Y [ = [G LQYQ=Q:=L ;åöÈL&: Z = J >= GUHK := [ = H = K = O6G YQ=_F a;&:ãyrnM`Pv/Bp=Q:^çÕ(nòñu` HJ YYåÕðnM`Tn B H6G v K _u\ ×_u_ Ø=Q:QÓ; [GSI ` yØ=Q:%Ó6; [G ínÌB H ; [G Õ_d Ù J : K = O Y G B= [[ y HG ß HK :¥QØ=Q:Cy I Bn;^ Z&KZ ; H B Z >=Q< G öoLçö I B [Z >Õ_ue ë_ug ë

Page 226: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© D?ª §¨X¯©© «i

i

i

i

i

i

i

i

$"> Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

?dW E >RK;(]a¦ +.:8e­M' E a; 5E 5 e E :G78R$: 5 78 E C f 7U(>;J;$NMK7US>T 5 ;^ 5 e E :87GR$: 5 7NV'e'+'M.W<>e:8 E T 5 eM. E ; 5EF5%E 7U®W<:87 5%E ;$>+M'78; 5E C 4 ;)78®W<:G7 5 ]3eM. E ; 5 1>7G Ç >p E E 5 :G' 5 5 7G78 E 5 e;$>e:8g$ E :8Vy 5 W 5 ¦ 5 ئ +.: 5 eÍ;$NMK7US>T 5 ;$01I7GK­I1> E C4 EG5J5 :G' 5 eLT 5 g$ E :UVRWË+787 5J5 5 7G78CØ=»JM'.e9LJ%o(; 5 7 5 78W<3"> C (]`W 5 e%:8;(RWiM' E :8ù§RW 5 $v*+: 5 ; 5 :G' 5 ¸?Ë=<6·MD o;$ E 78.: 5 e 5 > â :GRM 5 %ú` 5 W 5%E :G' 5E 0;$.W<>e EÈ E;$i+;ä7U®W<+:G7 5 C0= ä1+7U;;$Vy EGE äM. E :Uä])W 5 e:U;ä;$<¦ 5 7GWiz.e1>7:8';z 5 E +;78®W)+:G7 5 ]J'e E +78'; 5 e 5 'e â 5 ;<M. E :UC

j 5 78b; 5!ç:CD V E8E JM. E :U]^'e1+7G:GK;JV>e:UT 5 VR$:8.M'._N;b7UJ7 5 +R7U7 5 5 e E :G78R$: 5 7e-:8L>M';$ EGâ W0 5 M 5%E Cñ¤«W<]: 5 ; 5¤;=<>@?AB:CDCÄ >³D7?Q HJCQ2H¼ o CA6³³ ]äR:G'M.'_>; 5 5 W E :GJ'e%:GR.: 5 Ck? EGE JW<]: 5 ; 5 ]JW 5E :G7U; 5 e 5 7 5 78W<#"> C¼qbR$:G'M.'_>)e)t E Y%R E 5 e 5 W<;$^RWËW<]: 5 ; 5 ^RWiJM' E :8b;`:G' 5%E V 5 7dW<+ 5 ;$^RW 5 $v*: 5æ¸?Ë=<·D oCB·^M']+W;$ EGEG5 V+M'M'.W<.:8 E RL R E > J +M' EGE a 5 7878+e%:GC l E8E5 5 7UYR 5 5 e E :G78R$: 5 7Z]FRWW<]: 5 ; 5bE >We 5 W<V;$NMK7U; 5 5 7[W<+ 5 ; M'I17UpwU9I1K ae 5 7 5 7UWip¦ 5 e:8V>W< E :878:8; 5 t+M 5eLM' E ; 5 7^ 5 W 5 RW W)]+: 5 ; 5 Y%RM'Y%R>7>C^·Ë;$.¦ +78+eS>i]0Y%Rb>M.0]b'e E >7GK; 5 eL<:8L>M'z;$EGâ W0 5 M 5%E R:G'M.'_>e; 5J5 e 5 W<d 5 e E :G78R: 5 7 VGv­JY%R`eT 5 ]at+78W<H:8'; 5 RWW<]: 5 ; 5 5 W\ EGE e 5 W)C f[5 7G]>WV$+WRWi E RL>78+M' EGE V:8MB 5 e E :87GR: 5 7NV$ 5 W 5E W< E W 5%E 7U®W<+:G7 5E V 5 ;$:G>7 E '; 5 ;$NMK7U; 5 V 5 Y%ReLT 5 .e1M'K;i<;$>+M'78S+T 5 5 7G78+e%:GCZ?dW¨78 E RW 5 V$RWî+787 5<E ¯5 5 7G78 E Je<MK E8E 5 787G>e:8 RW¨ 5 e E :G78R$: 5 7a 5 W 5E W< E W 5E 78®W)+:G7 5E ¦ 5 Ì;>MK7U; 5 C4 EG5 5 e%:878­7G 5 V 5 5 e E :87GR: 5 7a]J'e E >7GK; 5 e0:8L>M'i 5 787G>e%:GC=»äM'.e9Loä; 5 7 5 7UWi"N C Vy1+W 5E Y%R 5 5 e E :87GR$: 5 7J]<.e E >7GK; 5 5 W 5 RW W<]+p

: 5 ; 5 e 5 78W<MC=»U9LWi; 5 5 e E :87GR$: 5 7b;$ ¸?Ë=<6ÊMD7? H V 5 78'W)>.7 5 78RW)>e%: 5 ]5 e 5 W)z;; 5 5 W<]: 5 ; 5 V 5 R E vVy 5 e E :G78R: 5 7 C¤ E >Re; 5 ] 5 :G' 5 ;$#78: 5 78e 5 ; 5W<]: 5 ; 5 V[e E :G#> EG5 VBR E W 5%E +e%:G7U;äeä:Ut+MK;$ EGâ W0 5 M 5%E ;MK E8E <:GRMV[Y%R E :8­<>WÞ Ë:?ABCDCÄ=CDQÆ:D:C?N Cd¤:G+7U>.7 5 78RW<>e: 5 ]3i;$'W<+e E T 5 ; 5 :G' 5 ;b7G+: 5 7Ge 5 C?^V Ç eM'W<+e%:GV 5 HMH:8.W 5 ])M. E :8i;$(:G' 5E ; 5%E 7U®W<+:G7 5E ¦ 5 78W< E ; 5 W<]+: 5 ; 5 C

9:;%<:=?>=DbsCBu«F n JO Y Z LPp; Z&[ Ø=Q:Ù NG L j Ù; H ^ K : J L K Þ G L%Y& Z ^ K Ó6; [G yr Z ^ K Ó6; [G v\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : H Õde K :Q¥M×g Ø=Q:Ù N6G L j Ù; H ^ K : J L K Þ G LQY&Ó6; [G yyÙ; H ^ K : J L K Þ G L%Y&Ó6; [G Sv/B H ; [G Õh ëi L%= K L N yÎ G >= HKZ LUv6L G n K6Z ; HzG k ×Frq Î%¥6^ KG >ìB; JK B|n: Z?HK Y H y G B< GQK%ÛG ^^Q=Q< G yEÕFuF a; JH[ Î G >= HK6Z LU::;%:fQfÕFr\ ëFr_ Ø=%:Ù N6G L j Ù; H ^ K : J L K Þ G LQY& Z ^ K Ó6; [G yuvÌB HG v K ÕF|d ëFreFrgFh n JO Y Z LPp; Z&[ Ø=Q:Ù NG L j Ù; H ^ K : J L K Þ G L%Y&Ó6; [G yÙ; H ^ K : J L K Þ G LQY&Ó6; [G vFri K%N :;Uß^SÎ G >= HK6Z LUv6L G n KZ ; HFrk ×\uq HK :Q¥ ÛGQK%N ; [ LçÕ\F HK :Q¥Q G LP:A` HJ YYçÕ\u\ HK :Q¥= O Y GcG Õ\u_ Z ^ K Ó6; [G nÌÕ

Page 227: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& "No !)qi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏwvÇnx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx<ÓX¿1¾<Ö[Ò»Ý^ÜÚPÜ Õ`Ô@¿ "No

\d Ø=Q:QÞ G LQY&Ó6; [GAI Õ\ue Ø=Q:QÓ; [GPJ Õ\ug ZbHKPH Õ\h\ui Z a-yuvA`` HJ YY6í: GQK%J : H Õ\uk nA`tv/B O ; [ ¥/B|n6=%:=b>áÕ_uq H `SsÕ_F ß NZ Y G yrnêñu` HJ YY6PRRín6=Q:=ML&= [ =Pn6=Q:âb> GQK :; [ ;SLQ; H ^ K : JK ;%:_u\ ×_u_ I `-yrØ=Q:QÞ G LQY&Ó6; [G on B H ; [G Õ3RR I ` H ;SL%;?>m= [G LQYQ=Q:=L ; [ ;Xn=Q:âb> G%K :;_d J `-yrØ=Q:QÓ6; [G I Bp=Q:6^åB H ; [G ÕóRR J ` H ;tLQ;?>; H ;?> GSGT[6Z > G&H ^ ;_ue H ffÕ_ug RRt=L N =S= G&HK := [ = [ ; K6Z n6; H = K = O6G YQ=_h G `tÙ J : K = O Y G BLQY%=^^&ï Z?H[ ènÌy I B|n;^ Z&K6Z ; H B Z >=Q< G Õ_ui_uk RRA^ GXH6 ;t=L N ; J ­(Q6dq Z aãy G `` HJ YY6dîF K%N :;&ß H6G ßMÎ G >= HK6Z LUvL G n K6Z ; H y I Bn;^ Z&KZ ; H öAl?ÙYQ=^^l fd\ I Bn;^ Z&KZ ; H B Z >=Q< G fl H ; K a; JH[ l%Õd_dud RRALQ; H ^ K :x Z =SY Z ^ K =cLQ;?>;^ín6=Q:âb> GQK :;^de :A` HG ßS HK :¥Q G Ly G ö J B [6Z >áö H ö :Õdg nc`XnÌB H6G v K Õdh ëdidk Z a-yu: ñu` HJ YY6euq :A`P:CB ZbH p G : KG yEÕÈRQR ZbH p G : KG =SY Z ^ K =eFeu\ RRín:;L J :=cLQ; H ^ K : JK ;%:mLQ;?> G ^^%=A=^^ ZbH = K%J := [G&HK :; [ =o> G ^>=ML%YQ=^^ Geu_ LX`SÙ J : K = O Y G B > GQK%N ; [ ï ZbH[ Ò H LQYQ=^^çy?lUL%; H ^ K : J L K ;%:löí:Õedeue Z a-yîLP`` HJ YY6eug × RQRA^ GTH6 ;P=L N ; J ö ZbH ^ G : Geh LP` HG ßS HK :¥ ÛGQK&N ; [ y?lbLQ; H ^ K : J L K ;&:löíÙ J : K = O Y G BY G p G Y J nÌöusòöu:Õeui Ù J : K = O Y G B= [[ yîLÕeuk ëguq G Y^ G RQRALQ; H ^ K : JK ;&: ÖQàt[G a ZbHZ&[ ; H =o> G ^>=MLQYQ=^Q^ G ­ægF K%N :;Uß H6G ßcÎ G >= HK6Z LUv6L G n K6Z ; H yuv/B|n;^ Z&K6Z ; H öSl?Ù; H ^ K : J L K ;%:!l fgu\ Ù J : K = O Y G BY G p G Y J nÌB H =b> G fgu_ ly?lífyu:t`` HJ YY³mll­(:/B K ;Î K :CyéPfml%l fgd l =Y%: G = [ ¥ [G L%YQ=Q: GQ[ l%Õgue ë

½^W 5 R:G7 5 ;$:UM'9^;$+1 E +7de 5 :8; 5 e 5 7 5 78W<)"N C (W 5%E :878; 5 e%:G>7G 5 78W<+e%:GCÌ?dWX++

Vy: 5 ;MK E8E <;$+13:8+7JRWÿ 5 e E :87GR$: 5 7 E >W 78®W)+:G7 5E YR E +7U­ÍU9LWi; 5 + E5z5 5 7G 5 ;$ RW 5 e E :87GR$: 5 7@;»RWi E RPMK E8E ^eLT 5 R$:8.M''_+»+g$M.K.:8W<+e%:G 5 5 Wie; 5 9ù 1+7+ â :GRM 5 "Ii78zWi E ;$:UM'9 E ú C3· EGE 'WäV E <z+M' EGE )eT 5 5%EGE Rdä;$>+M'78S+T 5 ;$:8M@ 5 e E :G78R$: 5 7>VBRW<>e%:G7U;ͦ§M E ]i'e E +78';zeLÍ:Ut+MK;$ EGâ W0 5 M 5%E ù f 7 5 78W<-"> C LVM'.e9L#"Nú Cd¤£HM.:G'W 5 78RW<>e: 5 ;3U9LWi; 5 5 e E :G78R$: 5 7 ¸?QË=<6Ê­D7?Q H .e;'>`v*R E :8pW<+e%:GbY%R E (:G7U:8<;$RW¨ 5 e E :G78R$: 5 76¦§M EG5 C

Page 228: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© Db« §¨X¯©© ®i

i

i

i

i

i

i

i

$"N Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

9:;%<:=?>=DbsCB('F n JO Y Z LT HK :Q¥ ÛGQK%N ; [ > GQK%N ; [ ï ZbH[ Ò H LQY%=^^çyÎ K : ZbH <mvCö( HK :¥Q G LP:\ ×_ HK :Q¥= O Y G nA` K ;bnÌÕd HK :Q¥ÙYQ=^Q^ I Õeg RRín6=Q:=cL&= [ = G&HK := [ = [ = K = OG YQ=h ß NZ Y G yrnêñu` HJ YY6i ×k RRPp G : Z a Z L&=c^ GtK6Z n6;tT HK :¥ ÛG%K%N ; [cG L%;?>n6=Q:=M; H ;?> GFrq Z aãy(n ZbH ^ K = H L G ;&aS HK :¥ ÛGQK%N ; [ ÃÃPn B H =?> G B GQI&J =Y^çyvMFuF ×Fr\ HK :¥ ÛG%K%N ; [MK `-y HK :Q¥ ÛGQK%N ; [ onÌÕFr_ RRSLQ;?>n6=%:=A;^on=Q:âb> G%K :;^F|d Z ay K B|n6=%:=b>`` HJ YY6Fre ×Frg Z ayu:S`` HJ YQY6o: GQK&J : HcK ÕFh ëFri G Y^ GFrk ×\uq Z ay K B|n6=Q:=?>ìB GQI%J =Y^çyu:\F : G%K%J : HcK Õ\u\ ë\u_ ë\d nc`XnÌB H6G v K Õ3RRXn:x&v Z >= GUHK := [ =\ue ë\ug : G%K%J : HSHQJ YYåÕ3RR H6 ;t=L N ; J\h ë = 5 7 5 7UWi)"> C E T 5 W 5E :G7U; 5%EZ5E W<]+: 5 ; 5E Y%R`:G7U:UW ; E ;$>+M'78S È E ;$»W)]+: 5 p

; 5%E ;b+M' EGE Ck¤Ê7 5 +>;$'W<+e%: 5 ]»W3R.: 5)E >W)>M.9Le%:G`783;$>+M'78S+T 5 ;$( 5 e E :87GR: 5 78 E C· E ;$H¦ >7G>eS+ E .e'+'W0p E FeL M''e9bo V 5 eL;$ 5 e 5 W<^; 5 W<]: 5 ; 5 ]`7 5 +R78; 5 e :8t+MKVeT 5 (M'I17U67 )+ CÌ?@W E +R';V+ E5(5 W<]+: 5 ; 5 eT 5 +g E :8 eJMK E8E a 5 7G78+e%:GV]3;$'+ 5 e;0RW<#+e%:G7U;<eL<:8L>M'#; Eâ W3 5 M 5E ;$ E 78+1+e; 5<5 W<]+: 5 ; 5 V 5 R E *vV E +Re 5 W)VÌ:8. 5 ;#7G+: 5 7Ge 5 VØ;$'W<+e E T 5 ; 5 78: 5 7Ge 5 #:G' 5%E ; 5%E 78®W)+:G7 5E ¦ 5 7GWi E C D 5 ; E8E 3'e$¦ 5 78WiS>T 5 ]7G+:G'78;0; 5 e¯< 5 787G>e%:GJ;i­781 5 7G E 'e%:8­:8'>C

9:;%<:=?>=DbsCBu®F n JO Y Z LPp; Z&[ Ø=Q:Ù NG L jÛG%K%N ; [ Þ G LQY& Z ^ K Ó6; [G y Z ^ K Ó; [G v\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : H Õd K :Q¥M×e Ø=Q:Ù N6G L jÛGQK%N ; [ Þ G LQY&Ó; [G yy ÛGQK%N ; [ Þ G LQYUÓ6; [G Tv/B H ; [G Õg ëh L%= K L N yÎ G >= HKZ LUv6L G n K6Z ; HzG i ×k Î%¥6^ KG >ìB; JK B|n: Z?HK Y H y G B< GQK%ÛG ^^Q=Q< G yEÕFrq a; JH[ Î G >= HK6Z LU::;%:fQfÕFuF ëFr\ Ø=%:Ù N6G L jÛGQK%N ; [ Þ G L%Y& Z ^ K Ó6; [G yv/B H6G v K ÕFr_ ëF|d

Page 229: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& "Iq- !)i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏwvÇnx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx<ÓX¿1¾<Ö[Ò»Ý^ÜÚPÜ Õ`Ô@¿ "Iq

Fre n JO Y Z LPp; Z&[ Ø=Q:Ù NG L jÛG%K%N ; [ Þ G LQY&Ó6; [G y ÛG%K%N ; [ Þ G LY&Ó6; [G vFrg K%N :;Uß^SÎ G >= HK6Z LUv6L G n KZ ; HFh ×Fri HK :Q¥ ÛGQK%N ; [ LçÕFrk HK :Q¥Q G LP:A` HJ YYçÕ\uq HK :Q¥= O Y GcG Õ\F Z ^ K Ó6; [G nÌÕ\u\ Ø=Q:QÞ G LQY&Ó6; [GAI Õ\u_ Ø=Q:QÓ; [GPJ Õ\d ZbHKPH Õ\ue\ug Z a-yuvA`` HJ YY6í: GQK%J : H Õ\h nA`tv/B O ; [ ¥/B|n6=%:=b>áÕ\ui H `SsÕ\uk ß NZ Y G yrnêñu` HJ YY6 RRXn=Q:=ML%= [ =Tn6=Q:âb> GQK :; [ ;í> K ; [ ;_uq ×_F H ffÕ_u\ I `-yrØ=Q:QÞ G LQY&Ó6; [G on B H ; [G Õ RR I ` H x [ = [G LQYQ=Q:=L ; [ ;on=Q:âb> G%K :;_u__d J `-yrØ=Q:QÓ6; [G I Bp=Q:6^åB H ; [G ÕóRR J ` H xtLQ;?>; H ;?> GSGT[6Z > G&H ^ ;_ue RRt=L N =S= G&HK := [ = H = K = OG YQ= [ ; K6Z n;_ug G `tÙ J : K = O Y G BLQY%=^^&ï Z?H[ ènÌy I B|n;^ Z&K6Z ; H B Z >=Q< G Õ_h RRA^ GXH6 ;t=L N ; J öæQ6_ui Z aãy G `` HJ YY6_uk K%N :;&ß H6G ßMÎ G >= HK6Z LUvL G n K6Z ; H y I Bn;^ Z&KZ ; H öAl?ÙYQ=^^l fdq I B|n6;^ Z&K6Z ; H B Z >=Q< G fl H ; K a; JH[ l%ÕdîFd\ RRALQ; H ^ K :x Z Y Z ^ K = [GtK6Z n6;^ [ ;^ín6=Q:âb> GQK :;^d_ :A` HG ßS HK :¥Q G Ly G ö J B [6Z >áö H ö :Õdud nc`XnÌB H6G v K Õde ëdg Z a-yu: ñu` HJ YY6dh :A`P:CB ZbH p G : KG yEÕ RR ZbH p G : KG =tY Z ^ K =didk RRín:;L J := H = K = O6G YQ=S; K6Z n; [G : GQK ;%: H ; [ ;í> K ; [ ;euq G `SÙ J : K = O Y G BLQYQ=^^Uï ZbH[ èQnÌyuv/B|n6;^ Z&K6Z ; H B Z >=%< G ÕeF Z a-y G `` HJ YY6eu\ K%N :;Uß H6G ßcÎ G >= HK6Z LUv6L G n K6Z ; H yuv/B|n;^ Z&K6Z ; H öSl?ÙY%=^^ml feu_ v/B|n;^ Z&K6Z ; H B Z >=Q< G fl H ; K a; JH[ l%Õedeue RRín:;L J :=X> K ; [ ; H = K = O6G Y%=ö [G&HK :; [ =í> G ^>=cLQY%=^^ Geug LX`SÙ J : K = O Y G B > GQK%N ; [ ï ZbH[ Ò H LQYQ=^^çyuv/B H =b> G B Z >=< G öí:Õeh Z a-yîLP`` HJ YY6eui × RRA^ GXH6 ;t=L N ; J ö Z?H ^ G : Geuk LP` HG ßS HK :¥ ÛGQK&N ; [ yuvCB H =b> G B Z >=Q< G ö G ö(v/B [6Z > ö :Õguq Ù J : K = O Y G B= [[ yîLÕgF ëgu\ G Y^ G RR > K ; [ ; Ö =QV [G a ZbHZU[ ; H =o> G ^>=MLQY%=^^ G ö Q6gu_ K%N :;Uß H6G ßcÎ G >= HK6Z LUv6L G n K6Z ; H yuv/B|n;^ Z&K6Z ; H öSl ÛG%K%N ; [ lÈfgd v/B H =b> G B Z >=%< G fly?lÈfyu:A`` HJ YY³ll­æ:CB K ;Î K :CyEgue fl%líflí=Y%: G = [ ¥ [G LQYQ=Q: GQ[ l%Õgug ë

Page 230: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& "> !)/ i

i

i

i

i

i

i

i

$"N Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

465 W´ EGEG5 :8+78W)'e E >ReL;¦§ E z;&eL­M' E E +Wi®e%:GK+C-· 5&E +R Ç eMXVZ:G>W 5E e:8L>M'Í;$ EGâ W0 5 M 5%E E +M' EGE E ;>MK7U; E Vt78<+;<RWi#;$>M' E Vt<M. E :8#;$31I7GK­I1> E VW<]: 5 ; 5E ä 5 e E :87GR: 5 78 E C D W3t]+Wÿe E :Gä+ E5 V 5%E W<]: 5 ; 5E 78 E 5 e E ­I1> E t+MK&e­M' E E T 5 E :8e%:G E .W<M' E b 5 R 5%E :G' 5E ;b+787 5%E`E >Wi®e%:GK 5%E 5 ;$>W 5 5 7G78+7NC@·»M.]>W ; E8E5 VEG5 W<+e%:GJ7:8;i­781 5 7G E 'e%:8­:8'>)7GN E E +7^eM' E ;C@¤ E e¯ E Y%R E :UT 5 ;$>e:87 5 ù 5 RL.g 5 ú»;ä;>MK7US>T 5 ;)W<]+: 5 ; 5E i 5 e E :G78R$: 5 7G E eT 5E T 5 eM' E ; 5E VP 5 E e>e9RWi'e$¦ 5 78WiS+T 5 t+7G:G'e+e%:8a E8E ^¦§ E a;Je­M. E E +Wi®e%:GK+ g$ E :8F â Cd¤Ñ:878M'9 5 7GNM'W)>e%:GL E ; 5 0;äeL­M' E E +Wi®e:8'> E +7U­i¦ >H: 5 e#:8+7U>.7U#"HM.:G'Wiͦ§ E VBY%R E >78­Í1% E :8ze 5+ â :GRM 5 ""C

10.3 O programa principalû zW< E WiiWie>.7UiY%R3e 5 + â :8RM 5 Vt]b78>+ EG5 M.:G>787 5 W<]: 5 ; 5 78'e'M[; 5 e 5%EGEG5 5 W<.MK; 5 7@L7U3Y%R( E :G»'e+M.R))U9Wi;b3 E :U E +Re;b¦§ E ;)e­M. E E +Wi®e%:GK+Cl E : 5 ]J¦ +.: 5 5 W 5 W 5%E :878; 5 e 5 7 5 7UWi#"N C C

9:;%<:=?>=DbsCB ¬F RQRPp G : Z a Z L%=c^ G n; [G ;Un G :=%:^Q; O : G = à :p;&: G ^ ZbHKàQK6Z L&=\ Z aãyðn6=%:6^ G :/B K ; j6G&H Ï^Q; J :L G Ba; JH[ G vQ::;%:yE_ fXn6=Q:6^ G :/BLQ; HK 9=Q:6^ G ::;&:``Psd ×e Z aãy|n: ZbHK Ï K : GG PRR G v Z?OZ :M= à :p;%: Gg ×h 9: ZbHK : GG n: K ` H6G ßS9: ZbHK : GG yEÕi n: K B|n: ZbHK ;; K yu:;; K ÕÈRRAL N =b>=o> K ; [ ;Tn=Q:= Z >n: Z > Z : à :p;%: Gk ëFrq Ø=Q:Ù N6G L jcK LT` H6G ßSØ=Q:Ù N6G L j yéÕFuF K :¥A×Fr\ K LåBrØ=Q:Ù N6G L j 6;; K yu:;; K ÕFr_ Î%¥6^ KG >ìB; JK B|n: Z?HK Y H yl?sÎ G >= HK6Z LT::;%:^Ta; JH[ l%ÕF|d ëFre L%= K L N yÎ G >= HK6Z LUv6L G n K6Z ; HG Frg ×Fh Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y G B< GQKQÛG ^^%=Q< G yÕFri ëFrk ë

=»,M''e9Q"> ]+7GK; 5,5,5 $v*+: 5 ; 5 :8. 5Çx'A6Ë D oÉÊV`eM.'e9Q"I$Va]U9W<; 55W<]: 5 ; 5 YR:G7U:8,; 5 e¯,78._;,­7G1 5 78 E 'e:U­:8'>C = 5 :8YR E8E W<]: 5 ; 5 :G7U:U,;$g$NR$:U7`)7G'W<+'780¦§ E ;<eL­M' E E +Wi®e:8'>)(1+78 Ç +7`Y%RJe>e9RWî>7G7 5 :8+e9L E K; 5+eL 5 e%:878; 5 V$e%:8 E ;$7 5%EGE +R.7` 5 W¨ E R)7:8b;ie­M. E CdAB>W378V:8W0L]>WVY%RbMK E8E x'A6Ë D oÉ E :G>e;$ )MK E8E C C'A6³³ A7D oÉäV$ 5 7F E8EG5 Vt+e E RW 5 $v*+: 5 ; 5 :G' 5x'A6Ë D oÉ&]78K; 5 C

Page 231: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& "> !)/"i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6ÏwvÇnx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx<ÓX¿1¾<Ö[Ò»Ý^ÜÚPÜ Õ`Ô@¿ ">

10.4 Arquivos-fonte do compilador= 5 ;$'7G+:G¯78 5 90&20¦ 5 %.eLM'R â ;»^1+7 E T 5 e 5 1»; 5 7UY%R.1 5 C v vØVe 5 ;$.78:8¯78 5 90&2%Q!".5 ü V 5 7UY%R.1 5 °c7­$& 8Vy;$ E +7G.: 5 e E :8+ â :8RM 5 C465 W 5 g$+W<M 5 V(e 5 ;$.78:8¯78 5 !N9:L:8+W 5Eä5 7UY%R.1 5 +ü±.6 .)!#XüG.

ý · á8V+W YRa:8e%: 5 RW 5 e E :G78R$: 5 7d;+M' EGE / b 5 W 5 RW W<]: 5 ; 5 ;MK E8E /+ü±E T 5 ;$NMK7U; 5%E ;$R E 1+_> E CÌ=^ EGE E +Re; 5 > EG5 VI+W0 5 78 5E ; 5 E W<]: 5 ; 5E ü± y:G>e9WE '; 5 ;>MK7U; 5E 5 W:8. 5E ;$^78: 5 7Ge 5 ;$H¦ >7G>e%:G E V E +R E e 5 W< E a:G' 5E ;^7U®W<+:G7 5EkE T 5K;7I+e%:GK 5%E V 5 Y%Rb>R E 3RW<G 5 M. E T 5 >e%:G78(>M. E V$ 5 7^ E8E5 V%RWî+787 5 C· E8E 'WV 5 +gNR$:U78W 5EF5 e 5E8E5 5 W<.MK; 5 7` 5 W E8E 78Y%R'1 5 :G>W 5%E

`^T ©X^&]7^T^&di_&dªZh=^[7RZXZ6WiXi^fTch=_i&Wgb[7S&d_X__dXd\=i_f^[7Scb=`\7^i_ ~ Z 7óXó ² \fTbh=_d_di7b\[ Z ~X= _X^&ab[7¤&d\f¦bh=_ ZXZ6WiXi^fTch=_i&Wgb[7S&d_X__dXdX\c=i_f^[7Scb=`\7^i_ ~ Z ZZZa _ b=`^7h dXd\di7\X[7a!°& [7S^`S:b=` dXd\&diX\X[aa b[_ ~ `\7hf[ U ² \[:iSXd=`S\&da7^&S^ b[7Seѯb'[7SeÑb[7S ^7hd_X^=a a7_`&h=^d_=aa b[_ `\7hf[ U,ñ_S=Q\=ab[i_&dXS a7^&S^ ^7hd_=^=a a7_`&h=^&d_&a~!° _f:^[XS:b=` d=d\&di7\X[a TXQ^i_ ~

Page 232: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !)/i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

Page 233: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& $" !)//i

i

i

i

i

i

i

i

Capítulo 11Análise Semântica –Parte Final

j[.eM.W<>e:8ÍU9>W 5%EyJ HMH:8.Wi+:8L;e­M. E E >W<®e%:GK+CÍ? E :U]#Wi E 5 W)pM'g); E :G7I E ¦§ E E Ck=^>M' E >78T 5 :878:8; 5Ed5%E ;$.1+7 E5%E E t>: 5E ;$>Hg; 5E L>e;$>e:8 E e E¦§ E E e%:G+78 5 78 E VP 5 W 5 Vy 5 7+g$+W<M 5 VÌä1>7G Ç >S+T 5 ;;$ Ç eKS+T 5 +.7URM'7(;$#+M' EGE E V78.eL'M'W<+e%:GVBzU9N++W ;3:8. 5E C)= E >S>T 5 ""C'" E >78T 5 5 W)>e%:8; E E 78.eL' E+78 :8+7 â'E :GK+ E ;$ E :U+;b'W< 5 7:U®e+'3;3U9N++W ;$^:8. 5E eRW 5 W<.MK; 5 7NCÌ?dWE +R';V E +7U­i78 E +e%:8;< E R<.W<M'+W<>e:US>T 5 78<e 5%EGEG5 5 W<.MK; 5 7

X++>Wî:87I E

E >S È E 78.W<>.7Uz; E 78+1ieL­M' E E >W<®e%:GK+z7U 5E e¯ E W< E M.: 5E 5 W 5 ;$>+M'p7US+T 5 ;$<MK E8E E E RL E 178'­I1+ E mP E +Re;z;$ E 78+13äe­M. E 07U 5%E 5 WieL; 5E ;M'.eR+Wpm$0:G+7U>.7UV78 5%E ;$.1+7 E5%E :8. 5E ;$g$78 E8EÈ E C

11.1 Checagem de tiposû +t+e;$>e; 5 ; 5 :G' 5 ;$ 5 t+7US+T 5 Y%R)Y%R>7G>W 5E 7GNM'._N7NVL;$>1+W 5%E R$:8.M''_>7J 5 Wie; 5%E E t> â.Ç 5E VLY%RVt+W«>78MVL 5%EGE R>W¨78+78 E L>W ; Ç eK; E ;$¦ 5 7GWiS+T 5 C f[5 7^g$>W)M 5 V 5 R$:8.M''_>78W 5E +W

X++5 5 WieL; 5 ; E >M.NS+T 5 ü ýUVL;+1>W 5E :G>7»M' 5 5 W 5

b _ TXd `\f:^[aX\ _7hi_`\f:^[aX\ ~Ë

5 eL;$¨89^;$>1 E +7[RWi g$78 E8E T 5 Rv 5 7G E RMH:U; 5(E v»; 5 :G' 5 ü±6ù M'+W378e; 5 Y%RX++

eT 5 5E8E Rt:8. 5 55 M'>e 5 úCk¤ 1KW<+e%:GV E8E 31+78 Ç +S+T 5 eT 5 5 ;$ E +76¦ +.:8<;$R7Ue%:G(eL­M' E E 'e:U­:8'>C?de%:8T 5 V 5 W 5 ]J¦ >H:U< E8E )U9N++W¶äödW 5%E .eKK7^ 5 WRWîg$>W)M 5iE .W<M' E C

b g d_&S=Xd=[ Ë

$"

Page 234: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !)/i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

? E8E @:G78>U9 5 ;$@7 5 78Wia+7U`»­7G1 5 78 E 'e%:8­:8'>^W 5E :G7U;ae Ç R7U""C."C f 7U^eM. E 7E 5 5 Wie; 5 ü ýQ]äM'+MV@ E : 5 ]V E E R&g$78 E8E T 5 ;$ 5 e:87 5 M.z7 5 ;R_zRW 7G E RM.:8; 5'e:8+'7 5 V E >7GK0 E :8e:8 E 'W<M. E Cdû +1+W 5E

•7 5 R787a)178K­I1+MOJeL3:Ut+MK<;$ Eâ W3 5 M 5E m

•t+%7 5 :G' 5 5 W¨YRb017GK­I1>M¦ 5 Ì;$>+M'78;m

•MKeLS+7`RW<)+g$+>S>T 5 + EG5)5 :G' 5 eT 5)E *väü±cC

$" äïå!æ"Øþ Ô|ÿyäïå!æØ ' Ø&×ÿyéäïå!æ"Øç åèØ%éKêë é!× â åéÖ×yäZå!æØ

ç åèØ%é2ê

j['R7Uz""C'"»ui?dg>W<M 5 ;bU9>>>W;$J:G' 5E 78< 5 Wie; 5 ü ýUC

û»>1>W 5%E M'+W07U7NV 5 78]+WVYR(3g$78 E8E T 5 ;$( 5 e%:G7 5 M'^e>W E >W<7G ]»RWi0178'­I1+ME .W<M' E W<+e%:GC m 5 M'978W 5E eb;$ Ç eKS+T 5 ; 5 e¯ ¼ Å ½ HD V1>7G>W 5%E YR 5JÇ M'9 5 5 7G78 E 5 e$p;$>e:8 J g$78 E8E T 5 ;$J 5 e%:87 5 M.^]J; 5 :G' 53¸ ¹ NCËD%½ H7D VY%R(] ;$ Ç eK;) 5 e¦ 5 78W) W 5E :G7U 57 5 78W<""C'"C ¸ ¹ NCËD%½ H7D ])RWiäMK E8E ) E :G7U:Ui078+7G E >e:UiRWizg$78 E8E T 5 Y%RM.pY%R+7NVÌ 5 W 5 VB 5 7+g$+W<M 5 VÌRW< E .W<M' E 17GK­I1>MVyRWi 5 e E :8e:8VBRW< EG5 Wi;$i;$R EE RL+g$7G EGEGÈ E VRWi 5 L>78S+T 5 ;$M 5 +S+T 5 ;$JRW 5 $v*+: 5 C

9:;%<:=?>=DDBEDF n6=L j =Q< G ^&¥ HK =L K6Z L&: GG Õ\_ Z >n;&: K ; j6GUH Õde = O ^ K :=L K n JQO Y Z LALQY%=^^Xv&n: G Ó6; [GAG v KGUH[ ^tÑ G&HG :=Y&Ó; [G ×gh n JO Y Z LTv%n: G Ó6; [G yu; j6GUHmK i ×k ^ J n G :Cy K ÕFrq ëFuF ë f 7U E >7GW 5E W< E 78> EG5E V+ E M' E :Ub; E MK E8E E Y%R^ E :G>e;$>W ¸ ¹ N/ËcD%½ HD 5 Y%R

+;)RWi<;$+MK E 78+78 E +e%:UC

•¼? ³?&½ HD kRWi< 5 e E :Ue%:G; 5 :8. 5 ü±XV 5 W 5 >W

Page 235: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& / !)/oi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û /

^¢ m

•;:?Ëå6Á ³c?&½ HD kRWii 5 e E :8e%:8J; 5 :8. 5 * ü±XüV 5 W 5 +W

^¢ ± ^fô^¦iSXd:b[7

•½|CXC 6 ³?&½ HD kR E5 ;i 5 e E :8e%:Gl7±¼V 5 W 5 +W

^¢[XhXh

•x'A6Ë6½ HD kR E5 ;$RWi)178'­I1+My 5 W 5 E +R.7bùY%RP:G>W 5E ; 5 Eµx'A6Ë6½ HD³ ú

^¢g

•¶@HMH½ HD ØRWi 5 L>78S+T 5 ;$a;$KS+T 5»5 R E R$:G7US>T 5 >e%:G78F;$RL EZE RL+g7G EGEGÈ E VI 5 W 5

^¢¤g-`

•Ê|C?&½ HD bRWi 5 L>78S+T 5 ;$iW3RMH:8.M'K+S>T 55 R;$'1 E T 55 R78 E : 5 +e%:87Gi;$R EE Rptg$78 E8EGÈ E V 5 W 5 +W

^¢¤g ý `

•cA6Ë=<6½ HD kRWi 5 t+7US+T 5 ;(e+S+T 5 ReL­78'V 5 W 5

^¢ô ~X

•·MD:C'A? cAMCé½ HD iRW< 5 t+7US+T 5 ;$z 5 W<78S+T 55 R E R$:G7US>T 5 +e%:87Gä;$R E0E Rptg$78 E8EGÈ E V 5 W 5

^¼g ¢¦`

•½MD! BÅcD o ?&½ HD 5 t+7US+T 5 ;JM 5 >S+T 5 ;(RWîe 5 1 505 $v*: 5 V 5 W 5 >W

^¢¤[_Yñ ² h=^iXi X~:

•½MD!6¶ËËA<½ HD dM 5 +S+T 5 ;$RW«7878IV% 5 W 5 +W

^¢[_Yôb[7SVÒ Ó

• AMCXCE½ HD dU9W<;<;$JRWîW<]+: 5 ; 5 VL 5 W 5 +W

]«ZGf ñ_&S=Q\=a ^ËÑlgªÑ`

•¾ ?&½ HD d EGEG5 )RWi)178'­I1+My;$'e E :8®eLK);JM.RW 5 $v*: 5 V 5 W 5 >W

^¢f K\ g©X_`S«ZGf b_7ha

•¼2HD ¹ ½ HD d+ E8E5 )RWî>M.>W)>e%: 5 ;$RW«7878Ii 5 W 5 >W

Page 236: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA©© ª §¨X¯© @Q«i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

#" äïå!æØ' Ø%ÓÕÔ× ò åéÔÓóäïå!æ"Ø ' Ø&×ÿyéäïå!æØ

ææ"äïå!æ"Ø ç åèØ%é2ê>

é7× â åéÖ×yäïå!æØ é7× â åéÖ×yäïå!æ"Øþ ÔÿyäZå!æØ ç åèØ%éKê&% þ Ô|ÿyäïå!æØ ç åèØ%éKꢭ ç åèØ&é2ê&ç åèØ&é2êíÔ ç åèØ%éKêë

j[.R7Uz""CªJu m >ReL; 5 g$+W<M 5 ;$bU9>>+W;$J:8. 5E L7U0 5 Wie; 5 ü ýUC

^¢¤gKÒ ÓödW 5E E R 5 7>Vt+e%:8T 5 VLRW E >ReL; 5 g$+W<M 5 ;$) 5 W<e; 5 ü ýUVy+RvÍ­7G1 5 78 E 'e:U­:8'>i]

7G E >e:U;3e Ç R78z""C C

b ^óg w d7_&S=7d=[ |

f 7U0 EGE (g$+W<M 5 V E H:8RS>T 5<E 5 W<M.K+)RW¨ 5 R 5 Wi E CZ·»e%:G E ; E L>7aY%RM 5:G' 5 ;0+g$7G EGE T 5 ;$ 5 e%:87 5 M.V%]JeN EGE ­78 5 +M'+RM'7 5 :8. 5 ;$+; E Rtg$78 E8E T 5 C f[5 7g$>W)M 5 Vt]078> EG5ÍE L>7 E l^ó¤g E T 5 +g$7G EGEGÈ E ; 5 :G' 5 'e%:G+'7 5 78i 5 ;$+78+WE +7» 5 W<7U; E 5 7»W<> 5 ; 5#5 t+7U; 5 7

>C fZ5 7 E Ri1+_b]37GN E5#E t+7 E 3 E 178'­I1+ E

^<¥g E T 5 ; 5 :8. 5 .e%:8+'7 5 7U) 5 ;$>7G>W E +7 EG5 Wi; E (7 5 ;$R_>.7`RWî78 E RMH:U; 5 'e:8+'7 5 C465 W 5 5 ;$+W 5E L>78++t+7NV 5%E :8. 5E ; E g$78 E8EÈ E ;$+1+W E >7»+M'+RMK; 5%E ;3Hg 5

78ä'WiI VÌ7G:G'7; EE Rtg$78 E8EÈ E Wi EE .W<M' E VØ:G]iY%R E <U9+R J +g7G EGE T 5 5 W<M.+:8CÍû»ÍW<e+'7Uz'M'R E :878:G'1VÌ1*vW 5%E e 5 7 5 78W<-""C 5 Y%R#;$>1>W ¦§_>+7 5%EW<]: 5 ; 5E 5 eM' E 7G>WÊM'Re E ; 5E e¯ E ;»­781 5 78 E 'e%:8­:8'>a; 5 5 W<e; 5 ü ý0; Ç R78(""C C

9:;%<:=?>=DDB ©F p; Z&[ ¥&n G Ù N6G L j yîÒ&a%Ó6; [G v\ ×_ K `T¥%n G Ù N6G L j yuv/B G v&n:Õd ^ GPK l Z?HK le /Õg ^ GUH6 ;h G ::;­ G v%n: G ^^ ; [G p G ^ G : ZbHKGZ :=Õi ëkFrq l K6Z n;líQ¥%n G Ù NG L j yv%n: G Ó; [G vFuF ×

Page 237: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ ~X~ X ~Xi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û o

Fr\ [G ^LQ; O : G =ALQYQ=^^ G l: G =Yl [G v G L N =b>=A;í> K ; [ ;P= [GQI%J = [ ;åÕFr_ : G%K ;%: H =M;Xp=Y;&:A: GQK ;%: H = [ ; H =SL N =b>= [ =ÕF|d ëFreFrg l K6Z n;líQ¥%n G Ù NG L j y G YQ= K6Z ; H =Y&Ó; [G vFh ×Fri K Dí`P¥%n G Ù N6G L j yuv/B G v%n:DQÕFrk K© `P¥%n G Ù N6G L j yuv/B G v%n: © Õ\uq ^ GPK D GtK© ^ ;l ZbHK l\F : GQK ;&: H =cLQ;?>;P: G ^ J Y K = [ ;l ZbHK lÕ\u\ ^ G v/B|n;^ Z&K6Z ; H `Q`l?``lí; J v/B|n6;^ Z&K6Z ; H ``lñ`l\u_ ^ GtK D HJ YQY GPK© mlU^ K : ZbH <lX; J p Z L G6¨ p G :6^&=\d : G%K ;%: H =ALQ;?>;P: G ^ J Y K = [ ;zl ZbHK l\ue ^ GtK D HJ YQY GPK© J >; OÖQGQK ;t; J p Z L G¨ p G :^%=\ug : G%K ;%: H =ALQ;?>;P: G ^ J Y K = [ ;zl ZbHK l\h ^ GtK D GtK© ^ ; HJ YY\ui : G%K ;%: H =ALQ;?>;P: G ^ J Y K = [ ;zl ZbHK l\uk ^ GtK D GtK© ^ ;S; O6ÖQGQK ;^ [GtK6Z n;^SLQ;?>n= K Ý&p GZ ^_uq : G%K ;%: H =ALQ;?>;P: G ^ J Y K = [ ;zl ZbHK l_F ^ GUH6 ;_u\ G ::;å­ ;Un G := H[ ;^ Z?H p à Y ZU[ ;^ G >m;bn G :=!² ;t: G YQ=L Z ; H =Y_u_ ë_d_ue l K6Z n;líQ¥%n G Ù NG L j yØ=Q:QÓ6; [G v_ug ×_h n:;L J :=Sv/B|n;^ Z&K6Z ; HAH = K = O6G YQ= [G ^QÝ> O ;YQ;^çÕ_ui ^ G =L N ; J_uk : GQK ;%: H = K6Z n; [ =tp=Q: Z%à p G Y H = K = O6G YQ=åÕdq ^ G&H6 ;dîF G ::;­æp=Q: Z%à p G Y H ; [G a ZbHZ&[ =åÕd\ ë

= 5 :G@Y%Rd EGE .Wê 5 W 5 eL`e­M. E d; 5 5 Wie; 5 ü ýUV+;F:G' 5 ;$ ¸ ¹ N/ËD%½ HD 5%EGE R E R E78¯78K678+78 E ;$d1+78 Ç >S>T 5 C fZ5 7Bg$+W<M 5 VI 5 eM' E 7yRW e¯»; 5 :8. 5 ·MD:C'A? cACE½ HDE T 5 e>+ E8E ­7GK E ;$'1>7 E E 7G>7U E 7801M'';7`<g$78 E8E T 5

•E 5E ; 5 Ea5 t+7Ue; 5%E ¦ 5 78+W'e%:G+'7 5E V)+g7G EGE T 5 E :8­#¤ 5iE +Rä:G' 5 ]<ü±cm

•E 5E ; 5 E(5 t+7Ue; 5E ¦ 5 78+W * ü±XüVBzg$78 E8E T 5 ])1­M''; EG5 W<+e%:8 E 5ä5 t+7U; 5 7¦ 5 7^;$'RM';;$ 5 R;$ E 'RM';;$m

•K;$>W7U3; 5 E65 $v*: 5E ;$(:G' 5%E 5 W<78­I1+ E ù :G' 5%E 'RL E65 RÍRW ] E RPMK E8E (; 55 R$:G7 5 úm

•E :G78'e E 5 $v*+: 5E 5 ;$>W E +73 5 W<78; 5E Y%Re%: 5ÄJ .RMK;;i J ;$ E 'RM';;$ 5 W¨RW 5 R$:G7 505 L>78e; 5 Y%R E v7±¼C

·^M']+Wÿ;$<1+78 Ç +7Jz1M'';;$i; E g$78 E8EÈ E VyU9>>>W ;$):G' 5%E ]):8W3t]+W H$:8.M78-RK7i>78S+T 5 ;$¯$;$' 5 V6 5 W 5 1+78+W 5E e 5 > â :GRM 5 "NCÑödW 5%EiE R 5 7>V6 5 7g$>W)M 5 VYRJ:G+W 5%E E +R'e:8Jg$78 E8E T 5

Page 238: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA©© « §¨X¯© @Q®i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

ñ ² h&^iXi e^¢ ZGf ñ_&S=Q\&a g¡ó¼` m b E 17GK­I1> E J¶(¦ 5 78Wî; 5 :G' 5 ü±cV)+7US+T 5 ;$b+¯$;$. 5 ;$+1

•+7GK7^ E .e E :G78RS È E 7U E5 Wi7a E8E E 1IM 5 7G E 7 5 ;$R_+'7`RWî78 E RM.:8; 5 'e%:G+'7 5 m

•U9LWi7 5 W<]: 5 ; 5 ²b|L!l²¯%$ p ü± t C

= 5 + E5 VL 5 78]+WVP+W Y%Rz]0RW E :G78'eÍpVyRWæ'e%:G>.7 5 V 5 +¯$;$. 5 +7U; 5 ;$>1 E >7;$.¦ +78+e%:GC ¤æ+¯;. 5 ;+1>78­ E +7i>78; 5 ;¦ 5 78W<Y%R EiE +R'e:8 E<5 L>78S È E<E *vW78>M''_>; E

•:878e E ¦ 5 78W<7 5 1M 5 7F'e%:G>.7 5 ;$,J+W¨RW E :G78'em

• 5 e>:8+e7 5 1M 5 7Ø;$¨( 5 W EGE d1M 5 7Ì:G7Ue E ¦ 5 78Wi; 5 V+7 5 ;$R_>.e; 5 5 W 5 7G E RM.:8; 5RW E :G78.ecm

•U9LWi7 5 W<]: 5 ; 5 ²b|L!l²¯%$ p * ü±Xü t C

¤ R E *vV$M']+Wî;$(>7876'e E :G78RS È E L7U:G7U:U7`;$(Wie>.7U0;.1+7 E 5EF5 t+7Ue; 5E ;$:G' 5E ;$H¦ >7G>e%:G E V3eL­M' E »; 5%E :G' 5E ; E g$78 E8EÈ E@E >7G1'RÍ 5 W 5 RK78b;>K;$'76Y%RMW<]: 5 ; 5 ;)MK E8E /²pb|L;+1 E >76'e1 5 +; 5 [Y%R>M.(YR»78>>LJ 5 W 5 78RW<>e: 5 RWE :G78.e 5 RzRW¨eXHW<+7 5 'e%:G>.7 5 C=» E 78¯Ig$.Wi EdE NS È E W 5E :G7U78+W 5E 5 W;$:UM'9 E +;RW; 5E W<]+: 5 ; 5E Y%R^:878:8W

; 5%E e¯ E ;#­7G1 5 78 E 'e:U­:8'>V'W<M'+W<+e%:8; 5E e#+M' EGE Ç<NËD D oÉ%Cd? E :8 E»E +7UT 5#E >S È EM 5 e% E VL 5 E ;H¦ >7G>e:8+W<+e%:8); E ¦§ E E e%:G+78 5 78 E V: 5 ;äÍ­7G1 5 78 E 'e%:8­:GK+i:8+W Y%R E >71 E .:8;V0eT 5 L>e E»5E e â 1+ E Wi E MH: 5E C 465 W 5 5 e E >Y=kI+eLKV78:GK+W<>e:8J: 5 ; 5%E5E :G' 5%E ;$0e¯ E :I+W«:878:8W<>e: 5E L7G:GKRMK78 E E >7G>W¦ +.: 5%E 5 7 W<]: 5 ; 5%E E t> âHÇ 5E V;$ Ç eK; 5E e E :U<MK E8E C

11.2 Análise das declaraçõesl eKKW 5E V^;$ E :81+_Va 5 W 5 7 5 7UWi78.eL'MXV`YR&;$+1 E >7ÍM.:G>78; 5 ;W< E Wi¦ 5 78WiY%R^e 5 > â :GRM 5 "N CZ·òW3R;eS>(¦ +.:8e 5 7 5 7UWi0""C /VM.'e9i"I$V]» 5 e>7Ge>e%:GJ R$:G'M'._NS+T 5 ;$JRW 5 $v*: 5 ; 5 :8. 5AÇ<N|D D oÉ-78);$ E 787`)e­M' E E >Wi®e%:GK+C

9:;%<:=?>=DDBu@F RQRPp G : Z a Z L%=c^ G n; [G ;Un G :=%:^Q; O : G = à :p;&: G ^ ZbHKàQK6Z L&=\ Z aãyðn6=%:6^ G :/B K ; j6G&H Ï^Q; J :L G Ba; JH[ G vQ::;%:yE_ fXn6=Q:6^ G :/BLQ; HK 9=Q:6^ G ::;&:``Psd ×e Z aãy|n: ZbHK Ï K : GG PRR G v Z?OZ :M= à :p;%: Gg ×h 9: ZbHK : GG n: K ` H6G ßS9: ZbHK : GG yEÕi n: K B|n: ZbHK ;; K yu:;; K ÕÈRRAL N =b>=o> K ; [ ;Tn=Q:= Z >n: Z > Z : à :p;%: Gk ë

Page 239: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& q- !)/i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û q

Frq ¥%n G Ù N6G L jcK LP` HG ßA¥%n G Ù N6G L j yEÕFuF K :¥A×Fr\ K LåBQ¥%n G Ù NG L j 6;Q; K yu:;Q; K ÕFr_ Î%¥6^ KG >ìB; JK B|n: Z?HK Y H yl?sÎ G >= HK6Z LT::;%:^Ta; JH[ l%ÕF|d ëFre L%= K L N yÎ G >= HK6Z LUv6L G n K6Z ; HG Frg ×Fh Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y G B< GQKQÛG ^^%=Q< G yÕFri ë

=»2MK E8E Ç'<NËD cD oÉ%V@:8+W 5Ez5 W)]+: 5 ; 5òÇ'<NËD cD oÉ · ? V@Y%R]&78 E 5 e E ­I1+M» 5 7;$ E L7U7^#e­M' E E +Wi®e%:8'>Ca? E8E bW<]+: 5 ; 5 78'W)>.7 5 U9W< 5 W<]: 5 ; 5xA6Ë D oÉ · ?1 E : 5 e 5 > â :GRM 5 "N `6Y%R6]d7G E 5 e E ­I1+M 5 7Øg$>+R$:87Ø E ;$R E ¦§ E E e%:8+78 5 7G E ;»e­M' E E +Wi®e%:GK+C fZ5 7 E >7Ø MK E8E Ç'<NËD cD oÉ<RWi E RPMK E8E F;$ x'A6Ë cD oÉ%V: 5 ;»^'e$¦ 5 7GWiS>T 5 5 M.+:8;3eL E ¦§ E E e%:G+78 5 78 E ù +W¨7G:GKRM'7>V$0:8L>M'<;$ EGâ W0 5 M 5%E ú6 5 ; E >7FR:G'M.'_>;Y%RXC@¤\7 5 7UWii""C <W 5E :G7U));>MK7US>T 5 ;iMK E8E (b; 5 W<]: 5 ; 5tÇ<NËD D oÉ · ? C

9:;%<:=?>=DDBªF n JO Y Z LALQYQ=^Q^T¥%n G Ù N6G L jG v KG&H[ ^TØ=Q:Ù NG L j\ ×_ ZbHKPHG ^ K6ZbH <CÕ RRAL%; HK :;QYQ=M; H ÝUp G Y [G = HZbHN =b> G&HK ; G >LQ;?>= H[ ;^P: G n GQK6ZUK6Z p;^d n:; KG L KGQ[Z?HK Ó6Y;L%=Y^çÕ RRALQ; HK = H W%> G :; [G p=Q: Z%à p GZ ^AY;L&= Z ^ HJ >S> K ; [ ;e K ¥%n G GQK%J : HK ¥%n G ÕÈRQR K6Z n6; [G : G%K ;%: H ; [GTJ >t> K ; [ ;g n:; KG L KGQ[ a ZbH =YP HK :¥Î Z >nY G Î%%ÒUÓÑÏ&±Ê9/öóRRTp=Q: Z%à p GZ ^ I%JG =&n; HK =b>z;^h ÒUÓÏ%Ê9/ö RR K6Z n6;^ O6à ^ Z LQ;^ H = K = O6G YQ= [G ^QÝ> O ;YQ;^i ÓQè6Ï&±Ê9/Õk n:; KG L KGQ[ HK :¥ ÛGQK%N ; [ Ù J : ÛGQK%N ; [ Õ RQRí> K ; [ ;A^ G&H[ ;t= H =Y Z ^%= [ ;FrqÚO ;;Y G = H L%= H ^ J n G :Õ RR ZbH[6Z L%=c^ G L N =b>= [ =c^ J n G :ATn G :U> Z&K6ZU[ =FuF n:; KG L KGQ[tO ;;Y G = H ^ K ;%: G Õ3RR ZbH[6Z L%=c^ GPG ^ Kà =Q:U>=QV G&H = H[ ;Ap=Y;%: HQJ >=Sp=Q:Fr\Fr_ n JO Y Z LP¥%n G Ù N6G L j yEF|d ×Fre ^ J n G :CyEÕFrg H6G ^ K6ZbH <M`PsÕFh Ó6YQ;L%=Y^t`PsÕFri Î%%ÒUÓÑÏ&±Ê9c`yr HK :¥Î Z >nY G Û = ZbHK = O Y G BLQYQ=^^Uï ZbH[ èQnÌy?lU^ K : ZbH <l&ÕFrk ÒUÓÏ%±Ê9Qc`-y HK :¥Î Z >nY G Û = ZbHK = O Y G BLQY%=^^&ï Z?H[ ènÌyl ZbHK l&Õ\uq ÓQè6Ï%±ÊQ9c` H6G ßS HK :Q¥Î Z >n6Y G y?l£ËUÓQè"Ël%Õ\F Û = ZbHK = O Y G Bu= [Q[ yÓQèQ6Ï%±Ê9QÕ\u\ ë\u_\d n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j ;; K y Z ^ K Ó6; [G v K%N :;Uß^SÎ G >= HK6Z LUv6L G n KZ ; H\ue ×\ug Ø=%:Ù N6G L j 6;; K yuvÕ RQRPa=QVA= H6à Y Z ^ Gt[ =^Tp=Q: Z%à p GZ ^ G > K ; [ ;^\h ¥&n G Ù N6G L j ÙYQ=^^UÞ G L%Y& Z ^ K Ó6; [G yvÕXRRXa=QVA= Hà Y Z ^ GS[ ;SLQ;%:&n; [ ;^ > K ; [ ;^\ui Z a-yua; JQH[ Î G >= HK6Z Lb::;%: ñu`ts6TRRA^ GoN ; J p GAG ::;åö YQ= H ²%= G v6L G ^Q^Q;\uk K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yua; JQH[ Î G >= HK6Z L&::;%:f_uq loÎ G >= HKZ LT::;&:6^Ta; JQH[ yrn N =^ G @l&Õ_F ë

Page 240: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA©© ® §¨X¯© ªsi

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

ök+W 5E Y%R<;$'1>7 E E 1I7GK­I1> E E T 5 ;>MK7U; E eLz+M' EGE C0¤ E 5 W<+e%:8­7G 5E ;T 5 RWie 5 S+T 5 ; E RäR$:8.M'._NS>T 5 Vy 5 78]+W ;$R7Ue%:Gizg$M''>S+T 5 ; 5E W<]: 5 ; 5E ;äMK E8E VB'7G>W 5%E;$+:8M'9­pXMK E 5 WWi E RK;; 5 Ckû .W< 5 7G:8e%:8 :8+W 5E`EG5 W<>e:80'e+M.R E T 5 uÍ)g$+W<M 5; 5 Y%RZ¦ 5 ¦ >H: 5 5 W 5%E :G' 5E L­ E ' 5E ;`M''eR>Wòu(;$@RWÊ:8. 5^Ç : â 5 78a78+78 E +e%:U75 :G' 5 ;$^;; 5 E8E RW)K; 5 t+MK 5 e E :Ue%:GV[XchXhC̽^Wi>e:878;J 5 W 5 e 5 W)F ýÊ `]'e E >7GK;(e 5 e â 1>M$Wi E M.: 5 ;(:Ut+MK(; Eâ W3 5 M 5E V;$`W 5 ; 5 E >7@+ E8Eâ 1>M+WËY%RM'Y%R>7 E 5 5 ; 5 7 5 78W< E +e; 5 eM. E ; 5 CB·^M']+W\;$ EGEG5 VN¦§_>+W 5E RWi`R E +» 5E :G' 5%E ­ E K 5%E;3M.'eRL>WËJ:87G'R â W 5EªJE 1I7GK­I1> EN;åÇ&·ç¼½/»Q¹CÇÌËb´¸ ¼½/ÇQ¹CÇÌËb´¸ ;$»W 5 ; 5 Y%R»: 5 ; E E 1>_+ E Y%R67GN E 7GW 5%E R$:8.M'._N7[ E8E E >e:878; E VIeT 5 e>+ E8E .:87G>W 5E t E Y%R E 7Z`:Ut+MK;$ EGâ W0 5 M 5%E C

465 W 5#E +W<78V'eKKW 5E t+M 5E e¯ E Wi E MH: 5E ;i­7G1 5 78V 5 R E *vVL 5 W 5%E W)]+: 5 ; 5%EY%R<:G7U:UW ;M. E :U;$#MK E8E E #; E ;$>+M'78S È E ù f 7 5 7UWi-""CªoúCÍ=»T 5 9­e;;$e 5 1 5 e 5 78.W<+'7 5 W)]+: 5 ; 5 C= 5¬E +Re; 5 Va He'>,e 5 1K;;$]-,1>7G Ç +S+T 5 ;RWi 5E8Eâ 1>MØ;$NMK7US+T 5 '78+RM'7 ;$)MK E8E E C =»iM'.e9zo<]b¦ >H:UÍRWi#U9LWi;Í 5 W<]: 5 ; 5o Ë o |C'A6Ë=;NËDË o C'A6³³ E8E e; 5 5 W 5 7GRW<+e%: 5%E >e:878;e:8L>M'-;$ EGâ W0 5 M 5%Ez+e%:G7U;&; E R E Rt+7UMK E8E Í;>MK7U;C-¤¨Y%R 5 W)]+: 5 ; 5 ¦§_Í]z.7J E R'e; 5 Í 5 WU9W<; E 78>+R7 E '1I E e<9'+7U7UY%R'); E MK E8E b:G]Y%R 5 R 5#E +Re; 5 78RW<>e: 5 :G+e95 1M 5 7 |CXC#5 R 5zE >Re; 5 78RW<+e%: 5#E v<.RM[ 5 78.W<>.7 5 Ca= 5 7G'W<+'7 5 > EG5 VeLT 59­)+787 5 ;$'7URMK78';;$C[= 5<E +Re; 5 V+e 5 e%:G7 5 R$p E »RWi)+;+K39'+7U­7UY%RK+b>WîY%RMK E8E 5 78..eML78>` 5 W 5 eL E :G7UML;$+MKW< E WiV% 5 7:Ue%: 5 VRW+787 5 ¦ 5 L;:GN :U; 5 C

9:;%<:=?>=DDBF n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j ÙYQ=^^UÞ G LQY& Z ^ K Ó6; [G y Z ^ K Ó; [G v\ ×_ Z ayuvA`` HQJ YY6o: GQK%J : H Õd K :Q¥M×e ¥%n G Ù N6G L j ÙYQ=^^bÞ G LQY&Ó; [G yyÙYQ=^Q^UÞ G LQYUÓ6; [G Tv/B H ; [G Õg ëh L%= K L N yÎ G >= HKZ LUv6L G n K6Z ; HzG i × RRS^ GTJ > G :Q:;S;LQ;&:: G&JSH =S= H6à Y Z ^ GS[ =SLQYQ=^^ G ök RR [à =í> GUH ^%=Q< G >áö(>=^Xa=QVA=S= Hà Y Z ^ G n6=Q:=A=on:x%v Z >=cLQYQ=^Q^ GFrq Î%¥6^ KG >ìB; JK B|n: Z?HK Y H y G B< GQK%ÛG ^^%=%< G yÕFuF a; JH[ Î G >= HK6Z LU::;%:fQfÕFr\ ëFr_ Q¥%n G Ù NG L j ÙY%=^^UÞ G LQY& Z ^ K Ó6; [G yuv/B HG v K ÕF|d ëFreFrgFh n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j ÙYQ=^^UÞ G LQY&Ó6; [G yÙY%=^^UÞ G LQY%Ó6; [G vFri K%N :;&ß6^SÎ G >= HK6Z LUvL G n K6Z ; HFrk ×\uq Î%¥U> K = O Y GSKG >n N ;Y [ `tÙ J : K = O Y G ÕÈRQRS^%=Y&p= K = O6G YQ=MLQ;%:Q: G&HKG\F HK :Q¥ÙYQ=^Q^ H LçÕ\u\\u_ Z a-yuvA`` HJ YY6í: GQK%J : H Õ\d H LX`y HK :¥ÙY%=^^PÙ J : K = O Y G BLQYQ=^Q^&ï ZbH[ ènÌyuv/B H =b> G B Z >=Q< G Õ\ue Z a-y3L Z :L J YQ=Q:Î J n G :LQYQ=^^y H Lçö H LåB|n6=%: G&HK A\ug × RQRA^ GSG v Z ^ KGt[G LQYQ=Q:=!² ;cL Z :L J YQ=Q:ö 6\h H LåB|n=Q: G&HK ` HJ YYåÕ\ui K%N :;Uß H6G ßcÎ G >= HK6Z LUv6L G n K6Z ; H yuv/B|n;^ Z&K6Z ; H öSl?Ù Z :6L J YQ=%: ZbHN6G : Z&K = H L G l%Õ\uk ë

Page 241: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA©©Q¬c§¨X¯© ªDi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û

_uq Ù J : K = O Y G ` H LåB H6G ^ KG%[ Õ RR K = O6G YQ=ALQ;%:: GUHKG ` K = O6G YQ= [ =MLQYQ=^Q^ G_F ¥&n G Ù N6G L j ÙYQ=^^UÐ6; [ ¥QÓ6; [G yuv/B O ; [ ¥Õ_u\ Ù J : K = O Y G ` KG >n N ;Y [ Õ RRP: G L J n G := K = O6G YQ=MLQ;%:Q: G&HKG_u_ ë_d_ue RRPp G : Z a Z L&=c^ GtG v Z ^ KG : G a G : H L Z =cL Z :L J YQ=Q: [G ^ J n G :6LQYQ=^Q^ G ^_ug n: Z p= KGPO ;;QY G = H L Z :6L J YQ=%:Î J n G :6LQYQ=^Q^çy HK :¥ÙYQ=^^m;%: Z <Cöæ HK :¥ÙYQ=^^ G _h ×_ui Z a-y G `Q` HJ YYo: GQK%J : H a=Y^ G Õ_uk Z a-y;%: Z <M`` G dq : GQK%J : HMK : JG ÕdîF : G%K%J : H L Z :6L J Y%=Q:Î J n G :6LQYQ=^^çy;%: Z <Cö G Bn6=Q: G&HK Õd\ ë

¤òW<]+: 5 ; 5 Y%R^eLM' E 5 5 78 5 ;+M' EGE a]^78 E +e%:U; 5 e 5 7 5 7UWi0""C C D W3t]+WY%RÌe;i;e 5 1 5<5 5 7G78VL>e E iU9LWi; J e­M' E ;<M' E :8i;$0MK E8E E e'e9; E V; E 178'­I1+ E V[; 5E 5 e E :87GR$: 5 78 E Í; 5E W<]: 5 ; 5E C=^ E :Gz 5 e%: 5 E :8W 5E v­¦§W<.M''7G'_>p; 5%E 5 W 5E W<]+: 5 ; 5E YR E 'W<M' E W)>e%:Git+7U 5 7878+W EGE E M' E :8 E V[ 5 7b EGEG5 VØeT 5E +7UT 57G E >e:U; 5%E C

9:;%<:=?>=DDBu«F n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j ÙYQ=^^UÐ; [ ¥QÓ6; [G yÙY%=^^UÐ6; [ ¥Ó6; [G v\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : H Õde ¥&n G Ù N6G L j ÙYQ=^^UÞ G L%Y& Z ^ K Ó6; [G yv/BLQY Z ^ K Õg ¥&n G Ù N6G L j Ø=Q:%Þ G LQY& Z ^ K Ó6; [G yuv/BrpY Z ^ K Õh ¥&n G Ù N6G L j Ù; H ^ K : J L K Þ G LQYU Z ^ K Ó; [G yv/BL K Y Z ^ K Õi ¥&n G Ù N6G L jÛGQK&N ; [ Þ G LQY& Z ^ K Ó6; [G yuv/B >Y Z ^ K Õk ë

ödW 5E VÌ 5 7UVy 5 78;7z;$NMK7US>T 5 ; E 178'­I1+ E ;)'e E :8®eK;z+M' EGE C#¤W<]+p: 5 ; 5 t+7U 5 78780+;zRWiz; E 1I7GK­I1> E Y%R< E :8T 5äE >e; 5 ;$>+M'78; E L>M 5 e¯;ä­781 5 7GE .e%:8­:GK+ÍVy78z+;#RWiVBU9LWi 5 W)]+: 5 ; 5;=<>@?AB:CDCÄÆcA6Ë!J/2H V$Y%R)7 5 +R7UÍ#1p78'­I1+MeL:8L>M');$ Eâ W3 5 M 5E C[? EGE b7 5 R78V% 5 e$¦ 5 7GW<»W 5%E :878 5 7 5 78W<<""C¼qV%]»¦ >H:Uuà;$.1+7 E W<+e%:G;L E Y%R E -;$+M' EGE E Y%RR$:G'M'._N- E :G78R$:8R78;$e.e9LW<+e%: 5 ; EMK E8E E u 5 73W<+ 5 ; E :G78R$:GR7U9'+7U­7UY%RK+;+M' EGE Í 5 787G>e:8C-¤ R E *vVZ&178'­I1+M]b7 5 R7U;0eL#MK E8E b 5 787G>e%:GVL;$+ 5 E e E R E Rt+7UMK E8E Ve E Rt+7 E RL>78+M' EGE V3 E pE .W 5 7 ;'e:8C ¤ E +Re; 5 7GRW<+e%: 5 VeiM''e9"I$VL.e;'>#Y%R0;$ E vW 5E E +Re;5 5 7G7I+e+'0;)178'­I1+Mte39.>7878Y%RKC m (:8M 5 5 787I+e+'+g$ E :G'7>V$RWî+787 5 ¦ 5 B;:GN :U; 5 Cj ­i:8W0L]>W¨RW<Í1>7 E T 5 ;$ ;=<>@?A7B:CDCÄÆA6Ë"J/KH ¿Ã Y%RbR$:8.M''_>#RW He' 5 78RW<>e: 5 78: 5 7GeL E +W<7807G'W<+'78 5 5 787I+e+');)178'­I1+MPe)9'+7U7UYR');$MK E8E E C

9:;%<:=?>=DDB('F n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j Ø=Q:QÞ G L%Y&Ó6; [G yØ=Q:QÞ G LQY&Ó6; [G v\ K&N :;&ß^PÎ G >= HK6Z LUvL G n K6Z ; H_ ×d Z ^ K Ó6; [G nÌÕe HK :Q¥QØ=Q:cYåÕ

Page 242: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& / !)%i

i

i

i

i

i

i

i

/ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

gh Z a-yuvA`` HJ YY6í: GQK%J : H Õi a;&:ãyrnM`Pv/Bp=Q:^çÕ(nòñu` HJ YYåÕðnM`Tn B H6G v K k ×Frq Ø=Q:QÓ; [GtI `yØ=Q:%Ó6; [G ínÌB H ; [G ÕFuF RR KG&HK =Pn G <=Q: © =B ;LQ;%:Q: H L Z = [ =tp=Q: Z%à p G Y H = K = OG YQ=Fr\ YP`SÙ J : K = O Y G Bp=%:ï ZbH[ y I B|n;^ Z&K6Z ; H B Z >=%< G ö © ÕFr_F|d RRS^ G LQ; H ^ G < JZbJ öÜ=tp=Q: Z&à p G Yta; ZT[G a Z?HZ&[ = [%J =^Tp G V G ^çöæQ6Fre Z ay Y-ñu` HQJ YY6Frg K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H y I B|n6;^ Z&K6Z ; H öSlEØ=Q: Z = O Y G l?fFh I Bn;^ Z&KZ ; H B Z >=Q< G flÈ=Y%: G = [ ¥ [G LQY%=Q: GQ[ l&ÕFri ëFrk ë = 5 :G,Y%R E +7U:G>7 âKE :8'> E ;t E Y%R E 2;$1I7GK­I1> E ;$ E 78.:8 E ;$+:G+78W<.eLWÙRW

'W) 5 7G:8e%:Gz E t>: 5E >Wi®e%:GK 5 ;M'.eR+WX++

z+g$ E :I>eK-;äY%RM'Y%R>73¦ 5 7GWi;$<e.e9W<+e%: 5 ;$ 5 $v*: 5E Í;$+e%:G7 5 ;zMK E8E E e'e9; E ù;$.¦ +78+e%:Gä;$z°%I1ú C l EGEG5E .e Ç +<Y%R E RWi#MK E8E û ]3; Ç eK;<e 5 .e%:G>7G 5 7^;bRWiiMK E8E ú VL;$R E 'e E :U®e+' E;$ EGE E ;$R E MK E8E E0E T 55 $v*+: 5%E 5 W<M':UW<+e%:G;$ E :8.e%: 5E 5-5 $v*: 5 ; 5 :8. 5 û eLT 578 E 'e;$;<+g E :I+eLK);RW 5 $v*: 5 ; 5 :8. 5 ú 78 E >7^78'; 5 C fZ5 7:Ue%: 5 V;+e%:G7 5 ;MK E8E û Vy E 178'­I1+ E ;$>+M'78; E >W ú eT 5zE T 5 + E8Eâ 1> E ù§ ÆcA6Ë!J/2H E :8­Í;$0 5 7U; 5 5 Wî EGE ) 5 M â :GK+%ú CF?dW

X++V 5 78]+WV EG5 W<+e%:Gbi+M' EGE ú ù 5 RMK E8E E .e%:G>7GeL E < E :8%ú

5 ;+WîR:G'M.'_>7^)+M' EGE û C9:;%<:=?>=DDBu®

F R ^Q^ G > K ; [ ;Xn:;L J :=A= H¨ ^ Z >=A;LQ;&:: H L Z = [ ;S^ÝE> O ;Y;tv H =\ K = O6G YQ= GPK =?> O b> H =åyî^ K = O6G YQ=y^ [ =yî^ ^ J n G :6LQYQ=^Q^ G yî^öó=Un; HK = [ =_ n;%:MY G p G Y J n B|n6=Q: G&HK B 9:;L J :=Pn;&: J >= GUHK := [ = [ ; K6Z n;T HK :¥QØ=Q: Rde n JO Y Z LT HK :Q¥QØ=Q:Ap=%:ï ZbH[ yÎ K : Z?H <MvCö ZbHKXH g ×h HK :Q¥= O Y G nA` K ;bnÌÕi HK :Q¥ÙYQ=^Q^ I ÕkFrq ß NZ Y G yrnòñ` HJ YQY6FuF ×Fr\ Z aãyðn ZbH ^ K = H L G ;%aS HK :¥QØ=Q:¾ÃÃPn B H =b> G B GQI%J =Y^çyuvFr_ Z aãy ¨¨H `Q`tsF|d : GQK%J : H y HK :Q¥QØ=Q:ín/ÕFre nc`Xn B H6G v K ÕFrg ëFh I `AY G p G Y J nÌÕFri Z a-y I B|n=Q: G&HK `Q` HJ YQY6X: GQK%J : HSHJ YQYåÕFrk : G%K%J : HMI B|n6=Q: GUHK B H6G ^ KGQ[ Brp=Q:ï Z?H[ yuvCö H Õ\uq ë\F\u\ n JO Y Z LT HK :Q¥QØ=Q:Ap=%:ï ZbH[ yÎ K : Z?H <Mv\u_ ×\d : GQK%J : H p=Q:ï ZbH[ yuvCöíDQÕ\ue ë

Page 243: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© @D §¨X¯© ª@i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û /"

?dW E +R';Vd1+78+W 5E35 W<]: 5 ; 5 Y%Rz:G7U:U&;$>+M'78S+T 5 ;$äRW 5 e E :G78R$: 5 7zù f 7 5 p7UWi""C úC ·7G'W<+'78Í7G:G); 5 W<]: 5 ; 5 ] E 'W<M. E E +W<+M'9e%:8 J ¦§ E )e%:G>7G 5 7 ;eL­M' E E +Wi®e%:GK+C^·M' E :8z 5 W 5%E :8. 5E ;$3L7U®W<:87 5%E ]3W 5 e%:8;i78ÍYR E 0 5%EGE 7 5 R7U7NVR E e; 5#5 W<]: 5 ; 5¯;=<>³?AB:CDÄ >³D7? HJCQKH VÍ+e%:G7U;<eLi:8L>M'Í;$ EGâ W0 5 M 5%E 5 7G78 E 5 e;$>e%:GJ 5 5 e E :87GR: 5 7NCZ? E8E W<]: 5 ; 5 ] E :8e:8 E >W)>M.9Le%:G 5 ÆcA6Ë"JC2H V1 E : 5e%:8+78 5 7GW<+e%:8V E >78­3W 5E :G7U; 5 Wi E ;$Ke%:8V'e;be E :G > â :GRM 5 5 E ;$+:G+78W<.eL3+p7U :8+7 â'E :GK+ E 'W< 5 7:Ue%:G E ;(M.'eR+WCÌ?dM'aL>78 5 787Ga(9'+7U7UYR' ;$^MK E8E E³J 7 5 R7U; 5 W<]: 5 ; 5 5 W 5 e 5 W<J 5E :G' 5E ;$78®W<:G7 5E R$:8.M'._N; 5%E C= 5 :GYR-eT 5 ]7GNM'._N;àe+e9RWiÑ1>7G Ç +S+T 5àE 5 W<]: 5 ; 5 ¦ 5 J+e 5 e%:G7U; 5¬5 R

eT 5 C l EGEG5 ¦§_ E +e%:GK; 5 V1 E : 5 Y%Rb:G+W 5%E >7:8+_N)Y%R 5 W<]: 5 ; 5 +g$ E :GJuÍ3 E :8­<e#+M' EGE 5 7G78+e%:8utVÌ 5 E ¦ 5 d+7G:8W<+e%:G).e E >7GK; 5 ez:8t+MKVÌez¦§ E <e%:G+78 5 7NCbO L>W 1>78;;$Y%R^ 5 ;$+7 â W 5E >1%.:87d E8E JL E Y%R E EGEG5 Ke; 5 5 e¯- ³c?Ë o ?b¾­D o CE½ H7D J>e:878;e):Ut+MK); Eâ W3 5 M 5E Ve 5 W 5 W<+e%: 5 +W¨Y%R>M'0¦ 5 Ì'e E >7GK;V$e0¦§ E be%:G>7G 5 7NC f[5 7G]>WV;$K;:8'>W<+e%:8V 5 e E ';$>78W 5E W<+M'9 5 7aeT 5 ¦§_I+pXM 5 (Wie:8+7 5 W<]: 5 ; 5 .eMH:8+7U; 5 C

9:;%<:=?>=DDB ¬F n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j Ù; H ^ K : J L K Þ G LQY&Ó6; [G yÙ; H ^ K : J L K Þ G LQY&Ó; [G v\ K%N :;Uß^tÎ G >= HK6Z Lbv6L G n K6Z ; H_ ×d HK :Q¥ ÛGQK%N ; [MK Õe HK :Q¥Q G LP:A` HJ YYçÕg HK :Q¥= O Y GcG Õh HK :Q¥ÙYQ=^Q^ K&NZ ^LQY%=^^çÕi HK :Q¥QØ=Q: K%NZ ^&p=Q:Õk Z ^ K Ó6; [G nÌÕFrq Ø=Q:QÞ G LQY&Ó6; [GAI ÕFuF Ø=Q:QÓ; [GPJ ÕFr\ ZbHKPH ÕFr_F|d Z a-yuvA`` HJ YY6í: GQK%J : H ÕFre nA`tv/B O ; [ ¥/B|n6=%:=b>áÕFrg H `SsÕFhFri RRÈ>; HK =A=SY Z ^ K =MLQ;?>m;^ K6Z n6;^ [ ;^ín6=Q:âb> GQK :;^Frk ß NZ Y G yrnêñu` HJ YY6\uq ×\F I `yrØ=Q:QÞ G LQY&Ó6; [G on B H ; [G ÕÜRR I ` H xtLQ;?>m= [G LQYQ=Q:=!² ; [ ;on6=Q:âb> GQK :;\u\ J `yrØ=Q:QÓ6; [G I Bp=Q:6^åB H ; [G ÕóRR J ` H xSLQ;?>; H ;?> GSGP[6Z > G&H ^ ;\u_ H ffÕ\d\ue RRP=L N =S= GUHK := [ = [ ; K6Z n; H = K = O6G YQ=\ug G `SÙ J : K = O Y G BLQY%=^^&ï Z?H[ ènÌy I B|n;^ Z&K6Z ; H B Z >=Q< G Õ\h\ui RRSL%; H ^ K :x Z =AY Z ^ K =MLQ;?>m;^ K6Z n6;^ [ ;^ín6=Q:âb> GQK :;^\uk :S` HG ßt HK :¥Q G Lçy G ö J B [Z >áö H ö(:Õ_uq nM`TnÌB H6G v K Õ_F ë_u\_u_ Z a-yu: ñu` HJ YY6_d :S`t:CB ZbH p G : KG yEÕ RR ZbH p G : KG =tY Z ^ K =_ue

Page 244: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& / !)i

i

i

i

i

i

i

i

/% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

_ug RRT=L N =A= G&HK := [ = [ ;tLQ; H ^ K : JK ;%: H = K = O6G YQ=_h K `SÙ J : K = O Y G B > GQK%N ; [ ï ZbH[ y?lULQ; H ^ K : J L K ;%:lö :Õ_ui Ù J : ÛGQK%N ; [ ` K Õ RRP< J =%: [ =o> K ; [ ;MLQ;&:: G&HKG_ukdq RR ZbHZ L Z = J > H ;&p; G ^L%;Un; H = K = O6G Y%=MLQ;%:: G&HKGdîF Ù J : K = O Y G B O6G < ZbH ÎLQ;bn G yEÕd\d_ RRín G <=A= G&HK := [ = [ =SLQYQ=^^ G LQ;%:: GUHKGPH = K = O6G Y%=dud K%NZ ^LQYQ=^^t`-y HK :¥ÙYQ=^^PÙ J : K = O Y G BY G p G Y J nÌÕdedg K%NZ ^&p=Q:M` H6G ßS HK :¥QØ=Q:Cy?l K&NZ ^lö K%NZ ^LQYQ=^Q^çöÜsÕdh Ù J : K = O Y G Bu= [[ y K%NZ ^Up=Q:Õ RR Z?H LQY JZ p=Q: Z%à p G YAY;L%=Yml K%NZ ^lTLQ;?> H W%> G :;Psdi G%K%J : HK ¥%n G ` HJ YYåÕ RQR K6Z n; [G : GQK ;%: H ; [ ;í> K ; [ ;t` H6GUHNJ >dk H6G ^ K6ZbH <M`PsÕ RR H Ý&p G Y [G = HZ?HN =b> GUHK ; [G LQ;>= H[ ;^Pa;%:euq Ó6YQ;L%=Y^t`cDÕ RR ZbHZ L Z =Y Z V= H W%> G :; [G p=Q: Z%à p GZ ^SY;L%= Z ^eF ¥&n G Ù N6G L jÛGQK&N ; [ Ð6; [ ¥QÓ6; [G yuv/B O ; [ ¥Õeu\ K B K ; K =YQY;L%=Y^A`XÓ6Y;L&=Y^çÕ3RR H W%> G :; [G p=%: Z%à p GZ ^SY;L%= Z ^ [ ; > K ; [ ;eu_ Ù J : K = O Y G B G&H[ ÎLQ;Un G yEÕ RRT: G%K6Z :=Sp=%: Z%à p GZ ^SY;L%= Z ^ [ = K = O6G YQ=ed ë

·7:8.70;M'.e9L/V 5 W<]+: 5 ; 5 5 W<>S>78+787 5 eM. E ; 5 7 E +Wi®e:8' 5 7U:G7ULM'97e 5 5 7G 5 ; 5 W<]: 5 ; 5 V 5 e; 5%E 5 W<e; 5%E ,+g$7G EGEGÈ EE +7UT 5 eM. E ; 5E Cl eKKM'W<+e%:GV^R78;p E e¬178'­I1+MC ËÊ­DX? H à>e:878;à; 5 W<]: 5 ; 52E >e; 5 eM..pE ; 5 C 465 W 5 eT 5 +g E :G+WW<]: 5 ; 5E e'e9; 5E +W

X++VeT 5 7GN E W 5%E 78 5 R7GpXe 5E

+W E M'1I7 5 1M 5 7)e%:G>7G 5 7ä;$+ 5 E 78>+Rt+7U­prM 5 Cz?dW E +R';VZ]ÍU9W<; 55 W<]: 5 ; 5;=<>³?AB:CDÄBXD%Á/Q7; o6 N|D eL:8L>M'; EGâ W0 5 M 5%E 5 7G78+e%:GC&¤ E +R 5 $v*:8.1 5 ]ÍWi7U+7 5 E :8; 5 >W Y%R E 3+e 5 e%:G7U#<:Ut+MKÍ 5 7G78+e%:8b;$3W 5 ; 5 Y%R0 E :Gb 5E8E E >7»78>+RL>78; 5Y%ReL; 5 :8+78W)'e7F0e­M. E (; 5 5 78 5 ; 5 W<]+: 5 ; 5 C6¤ EFEGâ W0 5 M 5%E 'e E >7GK; 5%E eb:8L>M');$+ep:G7 5 ; 5 5 78 5 ; 5 W<]: 5 ; 5 5 W 5 178'­I1+ E M 5 > E 3L7U®W<:87 5%E ¦ 5 78W< E E T 5 7G+:G'78; 5E ;:8L>M'(;$ EGâ W0 5 M 5%E ;6¦ 5 7GWi((eT 5 .e%:8+7G¦ +78.7Ze(e­M. E F; 5%E[5 R$:87 5%E W<]+: 5 ; 5E CØAÌ+W07G+p E ;$#Y%R#+g$ E :GiRWiä:Ut+MK 5 73MK E8E VÌ#eLT 5 RWi 5 7bW<]: 5 ; 5 V[Í E8E 'W ; 5 E W)]+: 5 ; 5%E:I>WþY%R 5 W<7G:G'M.9L7iW) E Wi-:8L>M' E +W Y%RRWþ.e%:8+7 Ç 78-e 5,5 R$:G7 5 Cñ¤ W<]: 5 ; 5Y%R378: 5 78e##:8t+MKÍ 5 E :8; 5 E M'1 5 5 7 BXD%Á/X; o NËD ] D2H; o NËD VLU9Wi; 5 e#M'.pe9o/zt¯ E Íe­M' E ); 5 5 78 5 ; 5 W)]+: 5 ; 5 Cb? E8E E ; 5 E W<]: 5 ; 5E ¦ 5 7UWæ7G E >e%:8; 5Ee 5 + â :GRM 5 Cö 5 M.:8e; 5 5 7 5 78Wi<""C V%1>W 5E eLbM'.e9L3 E J:87G'R'7 J 178'­I1+M ?å³ o C'A³³

78¦ +7I+eLK J +e%:878;i;Í+M' EGE b 5 7G78+e%:8ei:Ut+MK#;$ EGâ W3 5 M 5E C`?dW E >RK;V'e E >7G+p E e<:Ut+MKi 5 7G78+e%:GRW<<>e%:G7U;i;$3RWii178'­I1+MB 5 W 5 e 5 W<¶%$ü C^· E8E 'WVL;$>e%:G7 5 ; 5 5 e E :G78R$: 5 7>VL 5 ;$+p E b¦§_++7(78¦ +7I+eLK#i:UM[1I7GK­I1>MB78i78¦ >7G>eK7 5Í5 $v*: 5 5 7G78+e%:GV 5 W 5)E J¦§_J+W¨°I1Ck½»W 5 R:G7 5 W 5 ; 5 ;$b 5 e E +R.76:8MÌ+78 :G>7 âKE :GK+ E +78K0;$NMK7U7 5EGâ W0 5 M 5 *:G9 E ` 5 W 5 RW: 5 º+e)78 E +781I; 5 ù 5 W 5 VM'K­ E V 5 e%:GNF+WË°%I1úCØ·Q1e%:8>W;ie 5E8E i 5 78;>W]3Y%R 5%E W<]: 5 ; 5E ;$0e­M. E E >W<®e%:GK+<b+7US+T 5 ;0¯$;$' 5 eLT 578>+ E W :G7U:U7Ì`17GK­I1>M;$@RWêW 5 ; 5 E t>+'MLù§ 5 7Ø+g>W<M 5 VN+7GKeL; 5 p E kRW Çå³½ HDe­7G1 5 78 E .e%:8­:GK+%ú CÍ·»M.]>W ;$ EGEG5 V 5 e 5 W<i 5 ; E >7R$:G'M.'_>; 5 78 5 R:G7 5E Ç e E V[ 5 W 5e 5 W)-;$W<]: 5 ; 5¬5 Rò178'­I1+MXC l E : 5 e>W E +W<78] 5 WC l Wi'eRWi,17GK­I1>M^;$'e E :U®e+'¬ 5 W 5 e 5 W<ä*:G9 E UC· ;> E T 5 ;$Y%RM( 5 7U;+W R$:G'M'._N7;$+t+e;-; E+78 :8+7 â'E :GK+ E6E +Wi®e%:8'> E Y%R E b;$ E vW 5 $:G>7^;)M.'eR+W)prM.1 5 C

Page 245: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© @@ §¨X¯© ª7i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û //

·^e%:G E ;ÍU9Wi7be­M. E i7U 5 5 7G 5 ; 5 5 e E :G78R$: 5 7>V['e;M.RWi E 178K­I1+ EE T 5 7G>7U; E

•c^:GR7Ge%:*L^RL7U; 5 :8. 5 0Í;.W<+e E T 5 ;$)7G+: 5 7Ge 5 ; 5 W<]: 5 ; 5 mB 5 W 5ÍE 3:878:8;RW¨ 5 e E :G78R$: 5 7>V$Y%ReT 5 78: 5 78e01IM 5 7>V)178K­I1+MP]J'e'+'M.'_>;< 5 W @CXC m

•e E :G'ed17GK­I1>MBYRb 5 e%:87 5 M' 5 e â 1+MØ;$be'e9W<+e%: 5 >W¨Y%RRW ;$:8+78W<.e; 5 5 WieL; 5 7GNJ;$+e%:G7 5 ; 5 5 e E :87GR: 5 7m

•=»M 5 >M E Ì 5 e%:8 5 eXHW<+7 5 ;$61I7GK­I1> E M 5 + E ;$ Ç e'; E e 5 5 e E :G78R$: 5 7>C l e'+'M.W<>e:8]i"V$ 5 E 017GK­I1>M³%$üav­)¦ 5 y'e E +78';C

· 5 78: 5 78e7(;äe­M. E <; 5 5 7G 5 ; 5 5 e E :G78R$: 5 7>V 5 eXHW<>7 5 ;$)1I7GK­I1> E M 5 > E R:G.pM'._N; E e 5 W<]: 5 ; 5 ]#R78;; 5 e>e:878;; 5 W<]: 5 ; 5 V[eä:8L>M'; Eâ W3 5 M 5E CÍ? EGE 'e$¦ 5 78WiS+T 5 ]iR:G'M.'_>;e>78S+T 5 ;$#+¯;. 5 Cz¤W)]+: 5 ; 5 :8+78W)'e 5 W M'.W<t+_N;:8L>M'Ck·êe­M' E (;0;>MK7US>T 5 ;$JRW W<]+: 5 ; 5 ] t+W E +W<>M.9e%:G J ;$JRW 5 e E :G78R$: 5 7VÌ 5 7( E8E5 VBeT 5 78>+ E E +77G E >e:U;zY%RXC)· E HeK+ E ;H¦ >7G>eS+ E(E T 5 Y%RVØ 5 7 5 pR787 5 W<]: 5 ; 5 eL#:Ut+MKä; EGâ W3 5 M 5E VyR$:G'M.'_>p E 5 e 5 W<i; 5 W<]+: 5 ; 5 Y%R< E :8­ze 5 e¯;0­781 5 78 E 'e%:8­:GK+(YR b17GK­I1>M ·MDX?QË?'<NËD ]»'eKKM'._N;b 5 W RW 5 v*: 5 ; 5 :G' 5Ç<N|D VY%R .eL;$'> 5 :8. 5 3;$.W<>e E T 5 ; 5 78: 5 78e 5 E L>78; 5 t+M 5 W<]: 5 ; 5 YR» E :8­ E +eL; 5;$NMK7U; 5 CØ? E8E E ;$R E ;$.¦ +78+eS> E <MK E8E Ç<N|DE T 5 W 5E :G7U; E e 5 7 5 7UWi#""C'"> C

9:;%<:=b>=mDDBED?sF n JO Y Z LPp; Z&[ ¥%n G Ù N6G L jÛGQK%N ; [ Þ G LQY&Ó; [G y ÛGQK%N ; [ Þ G LQY&Ó6; [G v\ K%N :;&ß^SÎ G >= HK6Z LUv6L G n K6Z ; H_ ×d BPBtBeg RRT=L N =A= G&HK := [ = [ ;È> K ; [ ; H = K = OG YQ=h K `SÙ J : K = O Y G B > GQK%N ; [ ï ZbH[ yuv/B H =?> G B Z >=Q< G ö :Õi Ù J : ÛGQK%N ; [ ` K Õ RRP< J =%: [ =o> K ; [ ;MLQ;&:: G&HKGkFrq RRo GQK%J : HK ¥%n G ` K6Z n; [G : GQK ;%: H ; [ ;È> K ; [ ;FuF G%K%J : HK ¥%n G ` H6G ß K ¥%n G y K B K ¥%n G ö K B [Z >ÕFr\Fr_ BPBtBF|d ëFreFrg RRRRQRRRRRQRRRRRQRRRRRQRRRRRQRRRmÙY%=^^ K ¥%n G RRRRQRRRRRQRRRRRQRRRRFh n6=L j =Q< G ^ G >= H =Y%¥^ Z ^çÕFriFrk Z >n;&: K ^&¥U> K = O Y G B Õ\uq\F n JO Y Z LALQYQ=^Q^ K ¥%n G ×\u\ n JO Y Z LT HK :Q¥= O Y GSK ¥CÕ RR G&HK := [ = H = K = O6G YQ= [ ; KZ n;\u_ n JO Y Z L ZbHKS[Z >áÕ RR [6Z > G&H ^ ;\d\ue n JO Y Z L K ¥%n G y HK :Q¥= O Y GMK ö ZbHKS[ \ug ×\h K ¥A` K Õ\ui [Z >m` [ Õ

Page 246: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© @Qª §¨X¯© ª«i

i

i

i

i

i

i

i

/ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

\uk ë_uq_F n JO Y Z LSÎ K : Z?H < [ ^L±Í%=Qp=yé_u\ ×_u_ : GQK%J : H HK :¥= O Y G B^ K :QÞ Z >áy [6Z >Af K ¥/B [ ^L±Í%=Qp=yéÕ_d ë_ue_ug ë_h ·^ 5 7U;78+W 5%E V$ 5 7UV 5 5 7G 5 ; 5 W)]+: 5 ; 5<5 R 5 e E :G78R$: 5 7>Ck·^W0 5%E`E T 5 :G7U:8; 5E t+M 5

W< E W 5 W)]+: 5 ; 5 V Ç<N|D D oÉ Ê­D7? Hº H<6½ HD C l eKKM'W<+e%:GVL;$>1+p E (:G7U:87»;<M' E :8Í;$78®W)+:G7 5E ¦ 5 7GWi E C6? E :G E ;+1>W E +7 .e E +78K; 5E eL<:8L>M'i;$ Eâ W3 5 M 5E 5 W 5 178K­I1+ EM 5 > E e 5 78Wi E C l E : 5 ] ¦ +.: 5 V 5 W 5 W 5E :G7U; 5 e0M.'e9io0; 5 7 5 7UWii""C.""VU9Wie; 55 W<]: 5 ; 5MÇ<N|D D oÉ»o ACMx'A˾MD o C » ³c?U½ HXD b E8E e; 5 5 W 5 78RW)>e%: 5 iM' E :8Í;$78®W)+:G7 5E Y%R E :8­)e 5 e¯i 5 7G78+e%:8V 5 R E *vV:¹ Ä/N@A6ËA'> C

9:;%<:=b>=mDDBEDQDF n JO Y Z LPp; Z&[ ¥%n G Ù N6G L jÛGQK%N ; [ Ð6; [ ¥QÓ; [G y ÛGQK%N ; [ Ð6; [ ¥QÓ6; [G v\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : H Õd RR K := K =Pn6=Q:âb> GQK :;MLQ;>;Pp=Q: Z%à p G YAYQ;L%=Ye ¥&n G Ù N6G L j 6;L&=Y&Ø=Q:%Þ G LQY& Z ^ K Ó6; [G yuvÌB|n=Q:=U>Õgh L%= H ^ J n G :M`Pa=Y^ G Õi Z a-yÙ J : K = O Y G BY G p G Y J n B|n=Q: G&HK ñu` HJ YQY6k × RR G v Z ^ KGPJ >=M^ J n G :6LQYQ=^^ G n6=Q:=S=MLQYQ=^^ G LQ;&:: G&HKG ³FrqFuF RRP=L N =Tn: Z > GZ :;MLQ;?>= H[ ; [ ;í> K ; [ ;Fr\ Î K = KG > G&HK Ó6; [G nM`Pv/B^ K = K ÕFr_ ß NZ Y G yðn Z?H ^ K = H L G ;%aSÐ6YQ;L j Ó6; [G F|d nA`-yÎ K = KG > G&HK Ó6; [G -yyÐ6Y;L j Ó6; [G onB^ K = K ^åB H ; [G ÕFreFrg RRTp G : Z a Z L%=c^ G SL N =b>= [ =c^ J n G :Fh L%= H ^ J n G :M`on ZbH ^ K = H L G ;%aÎ J n G :%Ó6; [G ÕFri ëFrk K :Q¥M×\uq ¥%n G Ù N6G L j Î K = KG > G&HK Ó; [G yuvCB^ K = K Õ\F ë\u\ L%= K L N yÎ G >= HKZ LUv6L G n K6Z ; HzG \u_ ×\d Î%¥6^ KG >ìB; JK B|n: Z?HK Y H y G B< GQK%ÛG ^^%=%< G yÕ\ue a; JH[ Î G >= HK6Z LU::;%:fQfÕ\ug ë\h ë\ui\uk n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j ;L%=Y&Ø=Q:QÞ G L%Y& Z ^ K Ó6; [G yr Z ^ K Ó6; [G v_uq ×_F Z a-yuvA`` HJ YY6í: GQK%J : H Õ_u\ K :Q¥M×_u_ ¥%n G Ù N6G L j 6;L%=YUØ=Q:QÞ G LQY&Ó6; [G yyØ=%:QÞ G LQYUÓ6; [G Tv/B H ; [G Õ_d ë

Page 247: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& /o !)qi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û /o

_ue L%= K L N yÎ G >= HKZ LUv6L G n K6Z ; HzG _ug ×_h Î%¥6^ KG >ìB; JK B|n: Z?HK Y H y G B< GQK%ÛG ^^%=%< G yÕ_ui a; JH[ Î G >= HK6Z LU::;%:fQfÕ_uk ëdq ¥&n G Ù N6G L j 6;L&=Y&Ø=Q:%Þ G LQY& Z ^ K Ó6; [G yuvÌB HG v K ÕdîF ëd\

11.3 Análise dos comandos·´7G:G'7;$ E :G 5 e%: 5òE +7UT 5 :878:8; 5Ez5E 5 Wie; 5%E ; 5 W<]+: 5 ; 5 C«=»Ñ7GNM'';;$V»RWÊ­D7?Q Hº H<½ H7D :G+W 5 W 5 5 78 5 RW He' 5 5 Wie; 5 ; 5 :G' 5Ä;:?A?=D >³D?&½ HD CØ? EGE ]):8W3t]+W RW<+M' EGE ) E :G7U:8äY%Ri78+78 E +e%:8zY%RMKY%R+7RW ; 5E :8. 5E ;< 5 WieL; 5E V 5 W 5 RW ¼ Å ½ HD V%L7U3RW« 5 W<e; 5 ü ýUV 5 R ¶­?Ëå=B%½ HD V7U0RW¨ 5 Wie; 5)E .W<M' E ;$:87G'RKS+T 5 CZ=^ E :8» 5 e%: 5 +WY%R» E :UW 5E V:G+78+W 5%E V%+W +7UMXV 5bÇ M.9 5 ¹ Ä?³?A? 5 W 5 RWºOC 7oÉ ½ H7D V%YR E +781(78<7GR7a;$'1+7 EG5E 5 W<e; 5%E >e%:G78(RWÏÎÍRWÐC·78'W)>.7Ui1+78 Ç >S>T 5 ¦ +.:8it+M 5 W<]+: 5 ; 5MÇ<NËD D oÉ Ê­D7? Hº H<½ HD V 5 RW)>M.9 5 7NV

'e'+';iY%RXV]0 5 W¨7G>M'S+T 5"J R:G'M.'_>S+T 5 ; 5 5 Wie; 5 9 p t 7U).e1 5 >7 5 5 e E p:G78R$: 5 70;ÍRWi E Rt+7UMK E8E C· E 7G>7U E 78R$:8.M''_>­prM 5&E T 5&E .W<M' E iMK E8E # 5 787G>e%:G;$>1:8+7(RWi E RL>78+M' EGE 3;$NMK7U;m>M. E ¯# 5 ;$ E +7(R$:8.M'._N; 5 ;$+e%:G7 5 ;3RWæ 5 e E :G78R$p: 5 7'm(+M'»:8+WY%R E >7 5 78.W<>.7 5 5 Wie; 5 ;$>e:87 5 ; 5 5 78 5 ; 5 W)]+: 5 ; 5 Cd¤ R:G7U E 7G>7U E 5 ;+78'W E +7d;'+ 5 e; E V 5 W 5 +W °I1VY%R`eT 5 t+78W<H:8^JR$:G'M'._NS+T 5 ;$^178'­I1+ E ;$'e E :U®e+'Í 5 W 5 7GRW<+e%: 5%E ;#U9Wi;VWi E L7U 5 + E5 ;ie 5E8E <M.'eRL>W

X++V

t+eL E E8E E :G7I E 78+78 E6E +7UT 5 R$:G'M'._N; E C· 1+78 Ç >S>T 5 7GNM»;$ EGE E 78+78 E ]¦ +.:8¬;$+e%:G7 5 ; 5 W<]: 5 ; 5 Y%R:G7U:U,;àe­M' E

E +Wi®e%:GK+i;bRW e¯ ;NËDË6½ HD V$Y%Rb78+7G E >e:U<#U9Wi;<+W E XC`? E8E 3W)]+: 5 ; 5ÍE +7U­1 E : 5 Wi E ;$Ke%:8Vye E :8<> â :GRM 5 VyW< E 1IM.i;$'e%:87JY%RiÍK;$]>'ä]<1>7G Ç +7»eY%R+M' 5 e%: 5(E Ì»17GK­I1>M ·MDX?QË?'<NËD ¦ 5 'eKKM'._N; 5 W 5 1IM 5 7 |CXC V 5 Y%R6>7U :8+78._N78'5 W<]: 5 ; 5 5 787G>e:8Í 5 W 5&E >e; 5 RW 5 e E :87GR$: 5 7mkÍ1+78 Ç >73&178'­I1+Myo A³6NËDË Y%R'e;$K+ E 5 5 Wie; 5 9 p t ] 5 RäeT 5 t+78W<H:8'; 5 e 5 5 e%: 5<5 e;$(¦ 5 B'e E +78'; 5 C 465 W 5W 5E :G7U; 5 e E M.'e9 E z"NVP#178'­I1+MØ7GN+t 5 1M 5 7»1+7U;;+'7 5#E 0zMK E8E 3 5 787G>e%:G 5E8E R[RWi E Rt+7UMK E8E E 5 78'W)>.7 5 e¯z;$0 5 Wie; 5 VP;$H¦ >7G>e%:G0;3RW ºOC oÉ ½ HD V]JRW ;NËD˽ HD CØ= 5 :GY%RRW¨7 5 7UWib; 5 :8. 5

`\[:iSXd&:`S\&d '

iXT_&d Ì

Ì] E 'e%:8:GK+W<>e:801­M.K; 5 ):8W0L]>W eT 5 ;$>1 E >7b 5 e E K;$>78; 5 5 W 5 RW<ä1 5 MKS+T 5 ; E78+7U E ;$ E 78H:U E C fZ5 76 EGEG5 V 5 W<]+: 5 ; 5 YR eLM' E 5 5 78 5 ; 5 W<]+: 5 ; 5 5 ;$ :G+7`Y%R 7 5 pR787dL>M 5 9 p t V$ 5 7F;$.1+7 E5%E e â 1+ E ; e.e9LW<+e%: 5 ;»M 5 5E :G] +e 5 e%:G7U7 5 e¯

Page 248: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& / !)i

i

i

i

i

i

i

i

/ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

5 7G78 E 5 e;$>e%:GJ 5 7G'W<+'7 5 5 Wie; 5 7GNMHUCk·»L¯ E E8E 5 t+7US>T 5 V%<eL­M' E E >W<®e%:GK+7 5E8E >RJ 5 Wî<e­M. E (; 5%E 5 W<e; 5%E C· E8E 'W 5 W 5 ]J¦ >H: 5 78<#+M' EGE ¸ ¹ NCËD%½ H7D V#MK E8E ;?A?=D>­D?&½ HD 7GNYR+7`RW

:G7U:UW<+e%: 5 E t>+'M`7U&;$ E 5 78'7<Y%RM 5 :8. 5 78>M`; 5 e¯, E +7ieM. E ; 5 CQ¤«78.pW<+'7 5 :8. 5 ;0 5 Wie; 5 Y%R3 5 ;$)7GN+7`]3RW M 5 5 V 5 RÍ 5 WieL; 5 5 W) 5E : 5 UVtY%RE +781i7878R7b;.1+7 E5%E 5 Wie; 5E #]#78+78 E +e%:8; 5 e­7G1 5 78 E 'e:U­:8'> 5 7bRWºOC 7oÉ ½ H7D C&· E R&e­M' E z]z E :Ue%:G E 'W<M' E V@ 5 W 5 W 5E :G7U; 5 e 5 7 5 78Wi,""C."I$C·^e%:8 E ;$ eM. E 7dJM. E :8;$» 5 WieL; 5E V]^U9W<; 5J5 W<]: 5 ; 5ÄB=D%Á/7; o NËD 78JWi78>75 'e â + 5 ;$#RWÿ E 5 5 e 5 1 5 Vk;$+ 5 E ;&e­M. E VÌ]#78>M.'_>;U9W<; 5 W<]: 5 ; 5D2H; o NËD C#¤7G E : 5 ]iRW<U9LWi;ä Ç<N|D D oÉ ;:?A?&D>³DQ:? » ³?&½ H7D VY%RV[ 5 7 E R1>_VI'e%1 5 + Ç<N|D D oÉ ;:?A?&D>³DQ:?&½ HXD 7U^+;`e¯0ù E +W<786; 5 :8. 5l;?A?=D>­D?&½ HD ú;$>e:87 5 ;)M' E :8C

9:;%<:=b>=mDDBED ©F n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j ÐY;L j Ó; [G yÐY;L j Ó; [G v\ ×_ Ù J : K = O Y G B O6G < ZbH ÎL%;Un G yEÕíRR Z?H ÝL Z ; [GTJ > G ^LQ;Un6;d Q¥%n G Ù NG L j Î K = KG > GUHK Z ^ K Ó6; [G yuv/B^ K = K ^Õe Ù J : K = O Y G B G&H[ ÎLQ;Un G yEÕ RRTa Z?H =Y [ ; G ^LQ;Un6;åö3Y ZbO6G :=tp=Q:^åBÜY;L%= Z ^g ëhi n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j Î K = KG > G&HK Z ^ K Ó6; [G y Z ^ K Ó; [G vk ×FrqFuF Z aãyuvS`Q` HJ YYo: GQK%J : H ÕFr\Fr_ K :¥M×F|d ¥%n G Ù N6G L j Î K = KG > G&HK Ó6; [G yyÎ K = KG > G&HK Ó6; [G tv/B H ; [G ÕFre ëFrg L&= K L N yÎ G >= HK6Z LUvL G n K6Z ; HzG Fh ×Fri Î%¥6^ KG >ìB; JK B|n: ZbHK Y H y G B< G%KQÛG ^^&=Q< G yEÕFrk a; JQH[ Î G >= HK6Z Lb::;%:ffÕ\uq ë\F Q¥%n G Ù NG L j Î K = KG > GUHK Z ^ K Ó6; [G yuv/B HG v K Õ\u\ ë ¤ 78¯Ig'W 5 :G' 5 ;$( 5 W<e; 5 YR»1>7G>W 5E ] RWi3;$NMK7US>T 5 ;$(178'­I1+ E M 5 > E V%7G+p

78 E +e%:8;J 5 7FRWe¯ x'A6ËEHD:C o ½ HD VIM.>W37Ue; 5 Y%R»RWib;>MK7US>T 5 ;$ 178'­I1+M 5 ;$L78>>7^+WæY%RM'Y%R>7» 5 e%: 5 ; 5 W<]: 5 ; 5 C»? EGE 3e¯Í] 5 W< E W 5 R$:8.M''_>; 5 e#;>MK7US>T 5;$i178K­I1+ E ;$i'e E :8®eLK 5 7b7G>78 E +e%:87JW< E Wi 5 e E :G78RS+T 5E 'e:U­:8'>VÌ>W3 5 7U E +pWie%:GK+W<+e%:G E8E E ;$RL EaE .:GRLS È E 78>Y%R>.7UW S È E L>Wî;$.¦ +78+e%:G E C fZ5 ;$+7Gp E prKb78'7; 5 E :G' 5%E ;Íe¯ E ;$.¦ +78+e%:8 E VkRW´7U;$NMK7US È E ;$ä1I7GK­I1> E ;$Í'e E :8®eLK 5 R$:G7 57817GK­I1> E M 5 + E CठHeK 5 .e 5 e1>e'+e%:Gä;$ÍR E 7)RW He' 5 :8. 5 ;ze¯-]äY%RäMK E8E (;$ EGE (e¯<]J;>MK7U;0 5 W 5)E RPMK E8E J;$ ;:?A?=D>³D:?&½ HD V 5 Y%R E +78'0RW 5 R 5 E :G7Ue9 5 e 5 > EG5 ;$;$>+M'78S+T 5 ;$178'­I1+ E ;.e E :8®eKC=»;$NMK7US+T 5 ;$<178'­I1+ E M 5 + E Vy+W 78'W)>.7 5 M.R%7 E i;$>1VB 5 W 5 W 5E :G7U; 5 e 5

'e â + 5 ; 5 7 5 7UWi&""C'">/Vy1+78 Ç +7 E 5 :G' 5 R E ; 5 e;$NMK7US+T 5 +g E :GCz½`:G'M'._Np E V78Í:8MV 5 W< E W 5 W<]: 5 ; 5 ;=<>@?AB:CDCÄ o C'A³³7J/Q2HbN C¤ 1KW<+e%:G<RW +787 5ä5 5 7878 E

Page 249: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& /%q- !)i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û /%q

5 :G' 5 eT 5 ]>e 5 e:878; 5 C¬?dW E +R';V@;$>e%:G7 5 ; 5 5 Wie; 5 Å/ Ë ;&M''e92"NV6+;RWiÍ; E 1I7GK­I1> E ]0'e E +78';Íei:Ut+MKÍ;$ EGâ W0 5 M 5%E C(·^M'RWi E 1>7G Ç >S È E»E T 5 ¦ >H:U E V1 E eL; 5 <>1H:U7` 5 e7P.: 5E e E8E E ;>MK7US È E C

9:;%<:=b>=mDDBED?@F n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j ;L%=Y&Ø=Q:QÞ G L%Y&Ó6; [G yØ=Q:QÞ G LY&Ó6; [G v\ K%N :;&ß^SÎ G >= HK6Z LUv6L G n K6Z ; H_ ×d Z ^ K Ó6; [G nÌÕe Ø=Q:QÓ; [GSI Õg HK :Q¥QØ=Q:cYåö J Õh HK :Q¥= O Y G LÕik Z a-yuvA`` HJ YY6í: GQK%J : H ÕFrqFuF RQRXn:;L J := K6Z n; [ = [G LQYQ=Q:=!² ; H = K = O6G Y%= [G ^ÝE> O ;Y;^Fr\ LX`SÙ J : K = O Y G BLQYQ=^Q^&ï ZbH[ ènÌyuv/Bn;^ Z&KZ ; H B Z >=Q< G ÕFr_ RQRA^ GXH ;t=L N ; J ö F|d Z aãyîLT`Q` HJ YYFre K%N :;&ß H6G ßMÎ G >= HK6Z LUvL G n K6Z ; H yuv/Bn;^ Z&KZ ; H öAl?ÙYQ=^^lfFrg v/Bn;^ Z&KZ ; H B Z >=Q< G fl H ; K a; JH[ Bl&ÕFh a;%:ãyrnc`Tv/Bp=%:6^çÕænêñ` HJ YYçÕ(nc`XnÌB H6G v K Fri ×Frk I `-yØ=Q:QÓ; [G ín B H ; [G Õ\uq YP`tÙ J : K = O Y G Bp=Q:ï ZbH[ y I B|n6;^ Z&K6Z ; H B Z >=Q< G Õ\F\u\ RRA^ G p=Q: Z%à p G Y Ö = G v Z ^ KG Tn: G L Z ^Q;S^%= O6G : I&J6GtK6Z n6; [G p=Q: Z%à p G YS\u_ Z aãy Y-ñu` HJ YY6\d ×\ue RRTp G : Z a Z L&=c^ G SYQ;L%=Yåö [G a ZbHZU[ = H ; G ^QLQ;Un;AL%;%:: G&HKG\ug Z ayYåB^LQ;Un G ``SÙ J : K = O Y G B^Lbn K :tRRA^ G a;%:CöæQ6\h K%N :;&ß H6G ßcÎ G >= HK6Z LUv6L G n KZ ; H y I B|n;^ ZUK6Z ; H ötlEØ=Q: Z = O Y G l?f\ui n Bn;^ Z&KZ ; H B Z >=Q< G flÈ=Y%: G = [ ¥ [G LQY%=Q: GQ[ l&Õ\uk_uq RRSLåBLåBæp G : Z a Z L%=c^ G J >=Tp=Q: Z&à p G Y [G LQYQ=^^ G_F Z ayYåBY;L%=YLQ; JHKmä sTRRt^ G a;%:ö [àTJ >=t= [ p G : K H L Z =_u\ Î%¥^ KG >ìBu; JK B|n: ZbHK Y H y?lE Z?H6G lÈf I B|n;^ Z&K6Z ; H B O6G < ZbH ZbHG f_u_ lÈÙ;Y J > H l f I Bn;^ Z&KZ ; H B OG < ZbH Ù;Y J > H f_d lC=Q: HZ?H </­æØ=Q: Z = O Y G l f I B|n6;^ Z&K6Z ; H B Z >=Q< G f_ue l NZ&[G ^t=SLQYQ=^Q^Tp=Q: Z = O Y G l&Õ_ug G Y^ G RRA^ G&H ;åö J >=tp=Q: Z%à p G YtY;L%=Y G >m; JK :; G ^LQ;bn;_h Î%¥^ KG >ìBu; JK B|n: ZbHK Y H y?lE Z?H6G lÈf I B|n;^ Z&K6Z ; H B O6G < ZbH ZbHG f_ui lÈÙ;Y J > H l f I Bn;^ Z&KZ ; H B OG < ZbH Ù;Y J > H f_uk lC=Q: HZ?H </­æØ=Q: Z = O Y G l f I B|n6;^ Z&K6Z ; H B Z >=Q< G fdq l NZ&[G ^t=on6=Q:=?> GQKG :c;&:A=SY;L%=Ytp=Q: Z = O Y G l%ÕdîF ëd\ RR Z?H ^ G : G =Pp=Q: Z%à p G YAYQ;L%=Y H = K = O6G YQ=cLQ;%:: G&HKGd_ Ù J : K = O Y G Bu= [[ ydud HG ßS HK :¥QØ=Q:y I B|n;^ Z&K6Z ; H B Z >=%< G öXLçö I B [6Z >áö Ó6Y;L&=Y^%ff6de ë Õdg ë

Page 250: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& / !)o i

i

i

i

i

i

i

i

/ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

· 7G'W<+'78Í1>7G Ç +S+T 5 ]0>Wæ7G>M'S+T 5 5 R:G7U#178'­I1+MØM 5 +M[; Ç eK;ze 5 W) E W 5 E p 5 5 Ck·^M']+W¨; 5 5 78 5 ; 5 W<]: 5 ; 5 V+;3M 5 5 ;$ 5 Wie; 5E ;$ Ç e(:8W0L]>WRW¨ E 5 578J178K­I1+ E CØ· E8E .WV%RWib178'­I1+M$M 5 +Mt;$+1 E +76 EGEGâ 1+Mb7G:G'76; 5 5 e: 535 e;$`¦ 5 ;$NMK7U;<:8] 5iÇ eLMØ; 5 M 5 5 e 5 Y%RMy¦ 5 Z;$ Ç eK;C`½^WiÍ1I7GK­I1>MyM 5 >MXVLY%ReL; 5 .e E +p78';0e3:8L>M');$ Eâ W3 5 M 5E V 5 +R 5 *: 5 5 (;3:8L>M'VY%RV 5 W 5 1 E : 5 e%:8+78 5 7GW<+e%:8V¦ Re+ 5 e(e(¦ 5 78Wi ;`RWiJ.M'9Ck¤òW)]+: 5 ; 5";=<>³?AB:CDÄÆcA6Ë"JC2H 'e'+'J(R E + E +W<78; 5 : 5 5 ; E8E 0'M.9V78 5 7G'_>e; 5 V% EGE .WV)7 5 R7U) 5 7`1I7GK­I1> E M 5 > E C½^WiäU9Wi;i ;=<>³?AB:CDÄÆcA6Ë"JC2H VeÍM.'e9ä VL7 5 R7Uie#:8L>M'z;$ EGâ W0 5 M 5%E

RWi-1I7GK­I1>MF 5 W 5 W< E W 5 e 5 W)Y%R E v- EGEGâ 1+MFe E :G 5 e%: 5 ; 5 7 5 7UWiC m :8M`178'­I1+Md¦ 5 7i+e 5 e%:G7U;Vk+e%:UT 5 +7G:8W<+e%:G 5 5 7878+RàRW +787 5E +MK&¦ 5 ^;$NMK7U;e 5 E 5 5 5 787G>e%:GC f 7U#1+78 Ç >7 E ) E : 5 5 e%:GN+RÌVP 5 W<78p E 5 >W< 5S³ o NËD ;178'­I1+MkY%R(v­ E :8I1äez:8L>M' 5 W 5 >W< 5A³ o NO?QË ;ä:Ut+MK 5 7878+e%:G<Y%Ri.eL;$'>Y%RM`] 5 E 5 5 :GRMC m z¦ 5 7G>W 'R E V@RW +787 5-5 5 7G78+RÌC m eT 5 ¦ 5 78+W .R E VF178'­I1+My>e 5 e:878;) 5 ;$ E >7^RWii178K­I1+MyM 5 +MØY%Rb E :U­<+W 5 R$:87 5 E 5 5 VRW¨78®pW<:87 5 ¦ 5 78WiM 5 RäRWi3178K­I1+Mt;$J.e E :U®e+');$>+M'78;e E :U<MK E8E 5 RÍ>WRWi);$ E R EE RL>78+M' EGE E V 5 Y%RaeT 5 5 e E K;$+7U78+W 5E RWË+787 5 +W

X++CZ= 5 :8^Y%R 5 5 W< 5 7G:8W)>e%: 5

;$ ;&<>@?ABCDCÄÆcAË"J/EH ;$3t E Y%R E 7»RW EGâ W0 5 M 5 #7G:G'7 ; 5 : 5 5 ;<:8L>M'# 5 787G>e%:G]z;$>Y%R; 5 V[ 5 E > EG5 RWi>e:878;78&178'­I1+M E *v>e 5 e%:G7U;V E +7U­ E +W<78Í'e E :U®e+') 5 7G78 E 5 e;$>e%:G J ;$NMK7US>T 5 Wi E 7GN>e:8+W<+e%:8J â .e E +78K;V 5 R E *vV E +W<78e 5%E E 5 5E Wi E 78¯Ig$.W 5E 5 E 5 5 5 787G>e%:GC·\78¯Ig$.Wi<1>7G Ç >S+T 5 E +7^¦ +.:8i] EG5 78RWi<178'­I1+MB;$3.e E :8®eKi 5 W 5 W< E W 5

e 5 W)6;^178K­I1+M E +eL; 5 ;$ Ç eK;CØ?dW3 5 7U`eT 5»E *v`RW >7G7 5 +WX++

VI 5 ;$+W 5E ;$1+7G:G'75 7 5 7UWi; 5 7 EG5 78:UM(¦§: 5 C f 7U,:UMU9>>+WV^1>7G Ç >W 5EÍ5 1M 5 7; 5 +W< 5C o AMC o ? e+e%:878;+e 5 e%:G7U;-eL:8t+MKà;$ EGâ W3 5 M 5E Cê· >;17GK­I1>MFM 5 +M'e E >7GK; e :8L>M'V:87G'R.p E FRWeXHW<>7 5JE NY=k+e+'MV 5 W<NS+eL; 5 5 W (78((178'­I1+M%$ü V "L7U 5 78.W<>.7 5 7U®W<:87 5 ¦ 5 78WiMXV6 E8E .W E R+ E8E '1W<+e%:GC m 5 M'978W 5E)5W<]: 5 ; 5 Y%R'e E >7G E 178'­I1+ E ;$ Ç e'; E eL,MK E8E VF1+78+W 5E Y%R 5 1M 5 7#78 EGE +W< 5 VÌe 5 > EG5 ; E 17GK­I1> E ;+M' EGE VØ] E >W)7G<pU"C f[5 7b EGEG5 VØ 5 ;$>W 5%E ;$.¦ +78+e+'7RWi)178'­I1+MPM 5 >MB;$RWi<;$'e E :8®eLKC?^V Ç eM'W<+e%:GV E &17GK­I1>M`+e 5 e%:G7U;eT 5 E :8­e 5 W) E W 5 E 5 5 eT 5 ]-;$

'e E :U®e+'V E ¯^78 E :8»^ 5E8E ''M.K;;@;$aYR E *v`RWi»1I7GK­I1>MM 5 >M%+W RW E 5 5 ;$.1+7 E5 Cû(0W< E Wi)¦ 5 78WiVRWii;1+7G:I>eK0](>W<H:8';C·^t¯ E :GRL; 5 EGEG5 V E -e+e9RWÙ>7G7 5à5 5 7G78+RÌV`7G E :U,.e E >7G'7z¬1I7GK­I1>M»eà:8L>M'Ñ;$

EGâ W0 5 M 5%E CZ·ÊU9Wi;b ;=<>@?AB:CDCÄAMHMH VNe3M.'e93V¦§_ E8EG5 CZ·Ê>e:878;b+7GK;JL7Ub178'­I1+M]^; 5 :G' 5 ¸:?Ë=<Bx'AË 5E 7GRW<+e%: 5%E R$:G'M.'_>; 5E eJU9Wi;(; 5 5 e E :87GR$: 5 7 E T 55 e 5 W<`; 178'­I1+MXV 5(E +R0:G' 5 V E RJ;$.W<>e E T 5 5E +R)e=HW)>7 5JE >Y=k+eLKMXCZ¤QeXHW<>7 5 E +7d:87G'R â ; 5/J 178K­I1+M$]^ 5 e%:G7 5 MK; 5 t+MKJ178'­I1+M ½OC 7o AMCU³ VIY%R`]».eKKM''_>;(e%:G E ;$E `.eKK7de­M' E `; 5 5 78 5 ;$^RWW<]: 5 ; 5 `.eL78+W<+e%:8;J+;(.e E +7US+T 5 ;$`178'­I1+Me#:8t+MKC= 5 e 5%EGEG5 5 W<'M'; 5 7NVL17GK­I1> E M 5 + E ;$ Ç e'; E +Wæ E 5 5E ; E v*Re%: 5%E eLT 5 5 W<7G:G'M.9LW 5 W< E W 5 eXHW<>7 5 Cök+78+W 5E V 5 7UV+RW 5 Wie; 5»E .W<M' E VWi E YR@'e:87 5 ;$R_@RWi^e 5 1%K;;$VY%R@] 5 R EG5

; 5 +­M'+RM 5 ; 5 :8. 5 ;$ag$78 E8EGÈ E 7U U9>+>W;$F:G' 5%E Ck= 5 5 Wie; 5 T7d:b[XS¡_ T7d :G>W 5E 89:b 5 W 5 RWi3+g$7G EGE T 5 YRLMKYR+7NV%;$ 5 7U; 5 5 W07UWi­:8'>b;0M.'eR+WCs E`5 Y%RbY%R+78+W 5E ]t+78W<H:8.7 YR 5 7 5 7UWi(*'W<7G'WiIt+e E 1M 5 78 E Y%R E *vWE :G78.e E CZ· E8E .WV$e 5 W<]: 5 ; 5tÇ<N|D D oÉ ´Ëå:?&½ HXD W 5E :G7U; 5 e 5 7 5 7UWi<""C.">b¦§_+p E RWiU9Wi;& Ç<NËD D oÉ ¸ ¹ N/ËD%½ HD Y%Rä78: 5 7GeLRW 5 $v*: 5 ; 5 :G' 5?<NËD Y%R

Page 251: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ ~X X ~:i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û /

;$ E +7G>1 5 :8. 5 b<;$.W<>e E T 5 ; 5 78 E RM.:8; 5 ;)g$78 E8E T 5 C m E8E J78 E RMH:U; 5 eT 5 ¦ 5 7^; 5:G' 5 ü±=ü(a;$6;$'W<+e E T 5 3ù§eT 5 ]@t+78W).:GK; 5 .W<78.W<'7ZRW\7878Iú VNRW\>7G7 5 ] E 'eM'._N; 5 C¤W 5 ; 5 5 W 5ä5 :G' 5 ;ä+g7G EGE T 5 ]<>MKRMK; 5 ;$>L>e;$#; 5 :G' 5 ;Í+g7G EGE T 5 E +7U­;$ E +R$:GK; 5 e E >S>T 5 ""C

9:;%<:=b>=mDDBEDªF n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j 9: ZbHK Ó; [G y9: ZbHK Ó; [G v K%N :;&ß6^tÎ G >= HK6Z LUv6L G n KZ ; H\ ×_ K ¥%n GPK Õde Z aãyuvS`Q` HJ YYo: GQK%J : H Õgh RQR K ` KZ n; GT[6Z > G&H ^ ; [ ;P: G ^ J Y K = [ ; [ = G v%n: G ^^ ;i K `t¥%n G Ù N6G L j v%n: G Ó6; [G yuv/B G v&n:ÕkFrq RQR K6Z n; KG > I%JG ^ G :M^ K : ZbH < GP[6Z > G&H ^ ; KG > I%J6G ^ G :AsFuF Z aãy K B K ¥ ñu`AÎ&QÒUÓÑÏ%±Ê9 ]Q]üK B [6Z > ñu`SsMFr\ K%N :;&ß H6G ßMÎ G >= HK6Z LUvL G n K6Z ; H yuv/Bn;^ Z&KZ ; H öFr_ lU^ K : ZbH < G v%n: G ^^ Z ; H : GQI%JZ : GQ[ l&ÕF|d ë ¤î7G¯Ig$'W 5 5 Wie; 5 E +7b1 E : 5 ]#RW d_X^=aLV[Y%RÍ;$>1+78K E >7:8T 5&E 'W<M' E Y%Re%: 5

RWÎT7d:b[7StVtWi E M'RW< E 1+78 Ç +S È E ;$K 5 e E(E +7UT 5 e> EGE ­78K E Cök*vW 5%E 5 7Y%RICf 78.W<>.7 5 V 5 7UYRJ0g$78 E8E T 5 R E ;3eRW¨ 5 Wie; 5 ;$J+e%:G7U;);$;; 5E eT 5 5 ;$ E >7Y%RMKY%R+7NCJû»>1 E >7»RWiz7G+¦ +7I+e+'#zRWi0 5E 'S>T 5 ;$)W<+W<¯78KI Vt 5 W 5 RWiz178'­I1+M5 Rä 5E 'S>T 5 ;$RWî1: 5 7NCZ· EGE 'WäV 5%E 5 W<e; 5%E

d_X^=a^ d_X^=agKÒ óc`Ó d_X^=a`ËÒ ÓªZ3aªZ3_ªÒ)ö7Ó E T 5 1I­M.K; 5%E V 5 5 e%:G7U­78 5 ; 5%E`E >R'e%:G E VY%R E T 5 7 5 .'; 5%E

d_X^=a^óg d_X^=a` aOÑ_ ¤ eM. E ; 5 7 E 'e%:8­:8' 5 e 5E R$g$'M.K# 5 ;$ E :G'eR.7 5E 5 Wie; 5E 7 5 .'; 5%E C f 78):UMXV

5 5 WieL; 5 ;$)M'+.:GR7UÍ]<;$ Ç eK; 5 eLÍ78W<­:GK+X++

5 W 5 p45V 5 Y%R)+M'.W<'eM'Re E :8. 5E ;$b+g7G EGEGÈ E 5 W 5#5 ; 5 L>eXHMH:8.W 5 g$+W<M 5 Y%R0+W 5E ;$bW 5E :G7U7NC=»T 5 +M'.W<'eV` 5 78]+WV 5 HM.:G'W 5 g$>W)M 5 V`RWi,1>_YReà 5 e E :G78RS+T 5 ; E R­781 5 7G 5 7G78 E 5 e;$>e%:G@n55F 5 ;+W 5E :G>7[ 5 W 5 7U'_ 5%EØE +R.e%:8 E :G' 5%E ;$Fe¯ E BRW ¾ ?&½ H7D VRW ¼62HD ¹ ½ HD VRW x'AË6½ HDä5 RäRWh AMC=CE½ HD CØ? E :GbY%R7G: 5 5 787G E 5 e; +g$:8W)>e%:G 5 HMH:8.W 5 +g$+W<M 5 Í;$>1 E +70+1H:U; 5 C fZ5 7b EGEG5 V 5 W<]+: 5 ; 5 Y%RÍeM' E 5t·MD&AMH½ HD;$>1J1>7G Ç +7`YRLMy] 5 :G' 5 ; 5#E +Räe¯ Ç M'9 5 +R E 7aRWî>7G7 5 > EG5iE v0RWh AMC=CE½ HD Cû»>1+p E 1>7G Ç +7>V6'e;V E M.>H:8R78eLT 5 E :8­ E +e; 5 ¦ >H:U,eRWi178'­I1+Ma.M'+%MXC

fZ5 7»¦ 5 7G:GReVeT 5 :G>W 5E >WX++

178'­I1+ E E ¯#;$0M.>H:8R78 5 W 5 E 178'­I1+ E ¡O:k+W°%I1IC fZ5 7G]>WäVg$ E :G3RWiiM.>H:8R7UiYRb]b'M.>MÌei178'­I1+MS=Qb=iC l E8E5 eT 5#E 'e Ç >iY%R E8E z17GK­I1>MØeT 5 5%EGE E >7R E ;äeäg$78 E8E T 5 ; 5 d_X^=atC fZ5 7g$+W<M 5 V 5EE +R.e%:G E 5 Wie; 5%EaE T 5 t+7G¦ +.:8W)>e%:G1­M''; 5E

Page 252: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© ªs §¨X¯© ©i

i

i

i

i

i

i

i

% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

d_X^&aS&Qb=i|Z Od_X^&aS&Qb=i|Z Ò)S=Qb=i@Z ö7Ó s E ]('M'+M 5 5 Wie; 5

d_X^&aS&Qb=i ·^M']+Wî; E8E5 V E5 W<+e%:G(;; 5%E .e%:G>.7 5EF5 R E :G78.e E 5 ;$+W E >7FM'K; 5E J E8EG5 :UW3t]+W:8+W

Y%R E >7`1>7G Ç +; 5 C= 5 7 5 78Wi&""C'"No$VÌ1+W 5%E .eKKM'W<+e%:G#ä1+78 Ç >S>T 5 ; 5 :G' 5 ;ie¯Y%R# 5 W) È

5 5 Wie; 5 C m #eLT 5 ¦ 5 73RWÿ; 5E :G7I E :G' 5%E t+78W).:GK; 5%E V[+e%:8T 5 RW >7G7 55 5 7878+7U­Ci?dWE +R';V6> EG5E *vRWþe¯,; 5 :G' 5Sx'A6Ë6½ HD Vk1>7G Ç +p E E 1I7GK­I1>M E >e; 5 M.K;]178'­I1+M[M 5 >MkeXHW<+7 5 C m )¦ 5 7NVy:G7U:Up E <;$%$ü<iRW +787 5z5 5 7G78+7U­C0= 5 :8#Y%R<7 5 pR78W 5%E )178K­I1+Mte0:8L>M'<;$ EGâ W0 5 M 5%E V E ( E :U3eLT 5 ¦ 5 7a+eL 5 e%:878;zù ƽ¼M¼c|CXC ú Ve; E +7U­¦ >H: 5 5 E EGE >7G7 50E +7U­3:G7U:8; 5 e 5 W<]+: 5 ; 5 YRJeM' E 0Y%R+M'(e¯ xA6Ë6½ H7D CfZ5 ;$+7 â W 5E :8W0L]>W 1+78 Ç >7 E 'W<M' E W)>e%:G E 5 e 5 W<<;ä178'­I1+M[]%$ü VB>W 1>_i;$7 5 R7U­prM')ei:8t+MKC fZ5 7 Ç W ]b1>7G Ç +; 5iE 5 :G' 5 ;ig$78 E8E T 5 7G E RMH:Ue%:Gb]3.e%:G>.7 55 R E :G78.e< E );.W<+e E T 5 ] V 5 E eLT 5iE J 5 ;$M.>7`RW¨7G7UIC

9:;%<:=b>=mDDBED£F n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j G = [ Ó6; [G y G = [ Ó6; [G v K&N :;&ß^SÎ G >= HKZ LUv6L G n K6Z ; H\ ×_ K ¥%n GPK Õde Z a-yuvA`` HJ YY6í: GQK%J : H Õgh RRXp G : Z a Z L%=c^ G ; H xPa Z Y N ; KG > J > KZ n;Pp à Y Z&[ ;i Z a-yAñPyv/B G v%n: ZbH ^ K = H L G ;%aSÞ; K Ó6; [G ]]k vCB G v%n: ZbH ^ K = H L G ;%aÒ H[G vQÓ; [G ]]Frq vCB G v%n: ZbH ^ K = H L G ;%aSØ=Q:QÓ6; [G AFuF K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öFr\ lUÒ H p=Y Z&[MG v&n: G ^^ Z ; HzZbH : G = [ ^ K = KG > GUHK l%ÕFr_ RRXp G : Z a Z L%=c^ G J >=t= K : ZbOQJZ ² ;Pn6=%:=l K%NZ ^lF|d Z a-y v/B G v%n: ZbH ^ K = H L G ;%aAØ=Q:QÓ; [G Fre ×Frg HK :Q¥QØ=Q:Apt`tÙ J : K = O Y G Bp=Q:ï ZbH[ yuvCB G v%n:CB|n;^ Z%KZ ; H B Z >=Q< G ÕFh Z ayæpãñu` HQJ YYqÃÃtp/BY;L&=YLQ; JQHK ``SsXRRPS=Tp=Q: Z&à p G YAY;L%=YSs7³Fri ×Frk K&N :;&ß HG ßcÎ G >= HK6Z Lbv6L G n K6Z ; H y\uq v/Bn;^ Z&KZ ; H öolE G = [6ZbH < ZbHK ;Pp=Q: Z = O Y G líf\F l õl K%NZ ^Qõl Z ^ H ; K Y G <=Yl%Õ\u\ ë\u_ ë\d RRXp G : Z a Z L%=c^ G ; K6Z n6;SA^ K : ZbH <c; JcZbHK\ue K `t¥%n G Ù N6G L j v%n: G Ó6; [G yv/B G v%n:Õ\ug Z a-y K B K ¥êñu`SÎ%%ÒUÓÑÏ&±Ê9iÃà K B K ¥ãñu`MÒUÓÏ%±Ê9z\h K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H y\ui v/Bn;^ Z&KZ ; H öolUÒ H p=Y ZU[AK ¥%n G B ÛQJ ^ KtO6GSZbHK ;&:c^ K : Z?H <l%Õ\uk_uq RRXp G : Z a Z L%=c^ GXH6 ; Gà =Q::=Q¥

Page 253: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& " !)o/i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û "

_F Z a-y K B [Z > ñu`SsM_u\ K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öSl?ÙQ= HH ; K : G = [ =Q:Q:=Q¥l%Õ_u_ ë ¤ 5 WieL; 5 d7_&S=7d=[#] E :8e:8 E 'W<M' E W0RH: 5 78>+'; 5 5 W¨RWRT7d:b[7StCk·¦He'>

e 5 1K;;$3])Y%R 5 :G' 5 ;Íg$78 E8E T 5 eT 5 ]) 5 e9>K; 5 n9: üG ü^);$+10 5 'eK;$'7( 5 W 5:G' 5 ;$`7G+: 5 7Ge 5 ;$NMK7U; 5 78 5 W<]: 5 ; 5 C[· EGE 'WäV1>W 5%E e 5 7 5 78W<3""C."N Y%R 5 :G' 5;äg$78 E8E T 5 ]# 5 W<78; 5 5 W 5 5 e%:GHL; 5 ;ä1I7GK­I1>M ·D7?QË:?<NËD C m 5 7G E RM.:8; 5;i+g$7G EGE T 5 ] |CXC V EGEG5 .eL;$'>ÍY%RbeLT 5 9­#RWiig$78 E8E T 5 e 5 5 Wie; 5 5 :G' 5 +W·MD7?%ËCÇ<NËD ;$+1 E +7a:UW0L]>W @CXC V.eL;$'>e; 5 :G7U:87p E ;$RW« 5 e E :87GR: 5 7NCm 3ie­M' E b;<+g7G EGE T 5 7G+: 5 7Ge)RW¨:G' 5 V>e%:8T 5 1+78 Ç >p E E 5 W<]: 5 ; 5 5 787G>e%:G

]JRWî 5 e E :G78R$: 5 7aV+ E5<E *vV$RWî+787 5 ] E 'eM.'_>; 5 C 4 EG5 e+W¨)+g7G EGE T 5 e+W 5 :G' 5;$)7G+: 5 7Ge 5zE vWæeRM 5E Vt1+78 Ç +p E E 5 :8. 5 <Í;.W<+e E T 5zE T 5 'RL E C= 5 :G<Y%R0YR9­RWÿt>Y%R+e 5 .eL 5 e1+e'+e%:GC m R 5 e9W 5%E Y%R#+g7G EGE T 5 7G E RMH:8i+WÿRW 5 $v*: 5;$#RW :8. 5 L ú V[Y%R 5 :G' 5 ;Í78: 5 7Ge 5 ; 5 W<]: 5 ; 5&E vL û ÍY%RL ú E vRW ;$ E ++e;+e%:Gä;$.78: 5&5 Rà.eL;$.78: 5 ;$L û Ck=» E8E + E5 V[RW +787 5&E +78K.eL;$'>; 5 5 7 5 78Wi; 5 7(;$>1>7GK䦧_>+73 5 e1>7 E T 5 78 5 :8. 5 5 787G+: 5 C¤M.>H: 5 73Wi E :G>e: 5;$>1 E :87 E t+78Re:Ue; 5 5 W 5 E8EG5 5 ;$>7GK E >7`¦ +.: 5 v­iY%ReT 5 9­<RW 5 t+7U; 5 7^;$ 5 >78S>T 5 >W

X++CZök+78+W 5E V+W E +R';V 5 5 WieL; 5 ;$J:87G'RKS+T 5 J 5 W 5 ) 5 +7US+T 5 ]

¦ +.:8C

9:;%<:=b>=mDDBED?«F n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j GQK%J : H Ó6; [G yr GQK%J : H Ó6; [G v K%N :;&ß^SÎ G >= HK6Z Lbv6L G n K6Z ; H\ ×_ K ¥%n GPK Õde Z a-yuvA`` HJ YY6í: GQK%J : H Õg RR K ` KZ n; Gt[Z > G&H ^ ; [ ;T: G ^ J Y K = [ ; [ = G v%n: G ^Q^ ;h K `t¥%n G Ù N6G L j v%n: G Ó6; [G yv/B G v%n:Õik RRXp G : Z a Z L%=c^ G Z < J =YS=; KZ n; [ ;È> K ; [ ;MLQ;%:: GUHKGFrq Z a-y K `Q` HJ YYMFuF × RR K `` HJ YY H6 ; KG > G v&n: G ^^ ; H ;P: G%K%J : HFr\ Z ay( GQK%J : HK ¥%n G `Q` HJ YYFr_ : GQK%J : H ÕF|d G Y^ G RRS^ G GQK%J : HK ¥%n G ñ` HJ YY G J >t> K ; [ ;åö G&HK ;P6Fre K%N :;&ß H6G ßcÎ G >= HK6Z LUv6L G n K6Z ; H yuv/B|n;^ Z&K6Z ; H öFrg lé GQK%J : HcG v%n: G ^^ Z ; H : GQI%JZ : GQ[ l%ÕFh ëFri G Y^ GFrk ×\uq Z aãyð GQK%J : HK ¥%n G `` HJ YQY6TRRP: GQK ;%: H ; HJ >zLQ; H ^ K : JK ;%:Cö Q6\F K%N :;&ß H6G ßcÎ G >= HK6Z LUv6L G n K6Z ; H yuv/B|n;^ Z&K6Z ; H ö\u\ l?Ù; H ^ K : J L K ;%:mL%= HQH ; K : G%K%J : H =Tp=Y J6G l%Õ\u_ ë\d\ue RRtLQ;?>n=Q:= K6Z n6; Gt[6Z > G&H ^ ;\ug Z a-y K B K ¥êñu`T G%K%J : HK ¥%n G B K ¥ ]Q]üK B [6Z > ñu`P G%K%J : HK ¥%n G B [Z >-\h K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öSlUÒ H p=Y ZU[ : GQK%J : HcK ¥%n G l&Õ\ui ë

Page 254: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& % !)oi

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

¤ñ 5 WieL; 5 ;^:G78'RKS+T 5 ] E >W<+M'9e%:G` 5 5 WieL; 5 d_X^=aJ1 E : 5 e%:8+78 5 7GW<+e%:8V 5 ERWæ1M 5 7J;$>1 E >7(7GWi_>+e; 5 eRWi# 5E KS+T 5 ;$)W)>W<¯78'CJ= 5 > EG5 ;ä:87G'RKS+T 5 V 5:G' 5 ;Í+g7G EGE T 5 5 ;$ E >7JY%RM'Y%R>7 RWäVÌ 5 7G]>W E ;$+Wi E 7G>7U E ; 5 5 WieL; 5 d_X^=a'e;-1M'+WC¬· EGE .WV 5 'e â 5 ; 5 7 5 78W<à""C'"Iq:8]ä-M.'e9o#v­-] 5 e9>K; 5 ;eL­M' E b; 5 d_X^=aLCFû»> 5 E VP;$+1p E 1+78 Ç >7 E 5 :G' 5 ; 5 MK; 5 E YR+7U; 5 ;#:87G'RKS+T 5 ] 5 W<: â 1+MB 5 W 5 1M 5 7`;<g$78 E8E T 5 ; 5 MK; 5 ;.78+.: 5 C

9:;%<:=b>=mDDBED%'F n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j Í K : ZbO Ó; [G yuÍ K : ZbO Ó; [G v K%N :;&ß6^tÎ G >= HK6Z LUv6L G n KZ ; H\ ×_ K ¥%n GPK Dö K© Õd HK :Q¥QØ=Q:ApCÕegh Z a-yuvA`` HJ YY6í: GQK%J : H Õik RRXp G : Z a Z L%=c^ G ; H xPa Z Y N ; KG > J > KZ n;Pp à Y Z&[ ;Frq Z a-yAñPyv/B G v%n:D ZbH ^ K = H L G ;&aMÞ; K Ó6; [Gò]]FuF vCB G v%n:D ZbH ^ K = H L G ;&aÒ H[G vQÓ; [G ]]Fr\ vCB G v%n:D ZbH ^ K = H L G ;&aMØ=Q:QÓ6; [G AFr_ K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öF|d lUÒ H p=Y Z&[ Y G a K ^ Z&[G ;%aA=^Q^ Z < H > G&HK l%ÕFreFrg RRXp G : Z a Z L%=c^ G J >=t= K : ZbOQJZ ² ;Pn6=%:=l K%NZ ^lFh Z a-y v/B G v%n: ZbH ^ K = H L G ;%aAØ=Q:QÓ; [G Fri ×Frk HK :Q¥QØ=Q:Apt`tÙ J : K = O Y G Bp=Q:ï ZbH[ yuvCB G v%n:CB|n;^ Z%KZ ; H B Z >=Q< G Õ\uq Z ayæpãñu` HQJ YYqÃÃtp/BY;L&=YLQ; JQHK ``SsXRRPS=Tp=Q: Z&à p G YAY;L%=YSs7³\F ×\u\ K&N :;&ß HG ßcÎ G >= HK6Z Lbv6L G n K6Z ; H yv/B|n;^ Z&K6Z ; H ö\u_ lÍ^^ Z < HZbH < K ;Pp=Q: Z = O Y G õl K%NZ ^Qõl Z ^ H ; K Y G <=Yl&Õ\d ë\ue ë\ug\h K D `t¥%n G Ù N6G L j v%n: G Ó6; [G yuv/B G v&n:DQÕ\ui K© `t¥%n G Ù N6G L j v%n: G Ó6; [G yuv/B G v&n: © Õ\uk_uq RRXp G : Z a Z L%= K6Z n;^ [ =^ G v%n: G ^^±° G ^_F RRXp G : Z a Z L%= [6Z > G&H ^±° G ^_u\ Z a-y K DB [6Z > ñu` K© B [6Z >_u_ K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H ö_d lUÒ H p=Y Z&[A[6Z > G&H ^ Z ; H ^ ZbH =^^ Z < H > G&HK l&Õ_ue_ug RRXp G : Z a Z L%=c^ G YQ= [ ; G ^ I%J6G : [ ;S J >=SLQYQ=^Q^ GAGP[6Z : GZ&K ;S HJ YYåö _h Z a-y K DB K ¥ ZbH ^ K = H L G ;&aS HK :¥ÙYQ=^^nÃà K© B K ¥M``TÓQè6Ï%±ÊQ9_ui : GQK%J : H Õ_ukdq RRXp G : Z a Z L%=c^ GPK© A^ JO LQYQ=^^ GS[GtK DdîF Z a-yAñPy Z ^QÎ JO ÙYQ=^^y K© B K ¥Cö K DB K ¥ ]Q]æZ ^QÎ JQO ÙYQ=^Q^çy K DB K ¥Cö K© B K ¥td\ K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öd_ lUÒ H L%;?>n6= KZbO Y GAK ¥%n G ^Pa;%:t=^^ Z < H > G&HK l%Õdud ë

Page 255: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ ~ X ~i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û /

= 5 :GY%R(; E8E >W 5E 5 W<: â 1>Mt(eT 5 'R E CZ= 5 7 5 7UWii""C'"IqV:87G'R.p E ( ?º5:G' 5 ;Jg$78 E8E T 5 ; 5 M'; 5 E Y%R+7U; 5 ^ ?¹ V 5 ; 5 MK; 5 ;.78+.: 5 C[· E 1>7G Ç +S È E +¦ :GRL; EE T 5 E`E +R.e%:G E

•M''e9/»1>7G Ç >p E E i E ;$'W<+e EGÈ EJE T 5 'R E C fZ5 7J+g>W<M 5 VBÍ7G'W<+'78ä:87G.pR'S>T 5 E >R'7@] L>7¦ >H:UW<+e%:8»M'+MCZ· E +Re;Ve 5 +e%:8e%: 5 V%eT 5b5 ](;$ 5 7U; 5 5 W¨ E :8)7G>7UC

b[XSVÒ Ó«Ò Ó Ñ O ¢[_Yôb[7SVÒ Ó«Ò Ó ¢ Ò Ó

•M''e9,/%q$ E ?º ]RW :8. 5 Y%RMKY%R+7#Y%R78+78 E +e%:8-RWiMK E8E ,ù E R>e:878;eLÍ:Ut+MKÍ])RWi ¸:?Ë=< CA³³ ú VB)eT 5 RW :G' 5E .W<M' E ù E Rz+e%:G7U; E +78'ÍRWi¸?Ë=<X;å>"NKCD úV 5 M'; 5 ;$'7G>H: 5 78 E RM.:8)ei 5 e E :8e:8¨[=chXhV+e%:8T 5 <:G78.R'S>T 5 ]M'+%MXCa¤1M 5 7^;$ ?¹ ]b 5 W<78; 5 5 W¨<+e%:878;iY%R.e E >7G'W 5E e):Ut+MK<7U78+7G E >e:U7 RW :G' 5 E t>KM[78 5 1M 5 71[=chXhVLe 5 'e â 5 ;$ E :Ui¦§ E <;Íe­M' E E +Wi®e:8'>Ck½^W¨g$+W<M 5 1­M''; 5 RW¨eT 5 1­M'K; 5iE >7GKWV7G E t>:G'1W<+e%:G

ñ ² h=^iXi e ¢[=chXh b[XSö ö£¢[=chXh

•M''e9ä"^1>7G Ç +p E E 5 :8. 5 >W ?º ] E RPMK E8E <; 5 :G' 5 +W ?¹ò5 R-1'+pr1+7 E C¤ E ; 5 E + EG5E`E T 5 ++.: 5%E 5 W 5 M.> E C

=^ EGE pHMH:8.W 5 + E5 V@1M'äRWi-+g$M.K+S+T 5EG5 78 E +Wi®e%:8'>-Y%RY%R+78+W 5%E ;7i E :G0 5 Wie; 5 C f 7G'W<+'7 5 V E 5 :G' 5 ; 5 MK; 5 ;$'7G>H: 5 ¦ 5 7 RWi E Rt+M' EGE b; 5 :8. 5 ; 5 M'; 5 E Y%R+7U; 5 Vt>e%:8T 5 z:G78.R'S>T 5 ]0¦ >H:UÍeL:GR78M.W<+e%:8V E +Wæ7 5 M'+Wi E Cb= 5 > EG5 'e1+7 EG5 Ve%:8 E ;#¦§_>+73-:87G'RKS+T 5 V 5&E E :G+Wi;Íg$NRS>T 5 ¦§_z 5 70 5 e%:878¯7GK 5 >78S>T 5; 5%E :8. 5E C@¤ 1%KW<>e:8V E J) 5 +7US+T 5 eT 5 R;+7 E >7@¦ >H:UV$RWî+787 5 ;(+g$>RLS+T 505 5 7878Cök*vW 5E RW¨g$+W<M 5

`&h=^i=i _ S7_[aci ²b[7SÊf:_&S=Q '² ]^d ]^d ~Ë° ]^d Ë]^&d ¢¤[_Y ' ]^&d ~ ¢]^&d :]^&d ¢]^&d :Ì

Ì`&h=^i=i ° _ S7_[aci ²

Page 256: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& , !)oi

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

ZXZXZÌ`&h=^i=i ²

ZXZXZÌ

=»z78.W<+'7U#:87G'RKS+T 5 V]7^&d ]);$0RWi E Rt+7UMK E8E 0;#+g7G EGE T 5 ; 5 M'; 5 ;.78+.: 5 V E8E .W b:87G'RKS+T 5 ]^¦ +.:8 E +W 7 5 M'+Wi E CØ= E +Re;Vg$78 E8E T 5 E YR+7U;(]»; 5 :G' 5ú VPY%R3]0RWi E RPMK E8E 3;ÍMK E8E 3;$n]^&d Vt EGE 'WäVPÍ:G78.R'S>T 5 ]3¦ +.:8ÍW)N;$Ke%:G); 5 >78S>T 5 ;Íg$78 E8E T 5 ;$.78+.:8Í7U 5 :8. 5 +e 5 e%:G7U; 5 e 5 MK; 5 E Y%R>78; 5 C 465 W 5z5 :G' 578>M[;$l]7^&d ] 5 W< E W 5 Vte>e9RWæ7 5 M'+Wi 5 5 7G78C(°­#ei:8+7U+'7U#:87G'RKS+T 5 VL:G+W 5%ERW«+787 5 V$ 5 E :G>e:UW 5E ¦§_+>7»i 5 >78S>T 5 ;$RW 5 $v*+: 5 ú L7U)i+M' EGE û V 5 Y%RbeT 5 ] 5E8Eâ 1>MC[? E8E ^>7G7 5 eT 5 ]»;$+:G>:8; 5 t+M 5 eLM' E ; 5 7 E >Wi®e%:GK 5 7G E RM.:878­(eRW+787 5 ;$g$NRS>T 5 C?î78:8. 5EäE .W<M' E V»Y%RM(]-à7G>7U& n +WV 5 W<]: 5 ; 5 ³=;:B o C'A³³ W 5%E :878; 5

e 5 7 5 7UWi2""C'">:878:8:UW3t]+WÙ;$-Wie>.7U, 5 7G78:U E :G&> EG5 Cò2 Re; 5 RWÙ; 5%E78RW)>e%: 5E EGE ; 5E 7Uä+M')]iRW :G' 5E 'W<M. E VÌ+M'i7G+: 5 78ez1>78;;$+'7 5zEG5 W<+e%:G E 5Í5 R$:G7 5 ]0g:UW<+e%:8 5 W< E W 5 :8. 5 C· EGE .WVy:87G'RKS È E Y%R0+e1 5 M.1+W¨:G' 5%E(E 'W)M. E:I>W¨Y%R(:G>7^+W¨W3 5Ea5%E M'; 5E +g:8W<+e%:G 5 W) E W 5 :8. 5 ;$Jg$78 E8E T 5 C

9:;%<:=b>=mDDBED?®F n:; KG L KGQ[tO ;;Y G = HZ ^QÎ JO ÙYQ=^^y HK :Q¥= O Y GK Dö( HK :¥Q= O Y GSK© \ ×_ RRXp G : Z a Z L%=c^ G ^ ;S;È> G ^>; KZ n;-yup=Y G n6=%:= K6Z n6;^S^ Z >nY G ^d Z a-y K Do`Q` K© e : GQK%J : HMK : JG Õgh RRXp G : Z a Z L%=c^ G ^ ;ALQY%=^^ G ^i Z a-yñty K D ZbH ^ K = H L G ;%aS HK :¥ÙYQ=^^qÃÃ K©SZbH ^ K = H L G ;%aS HK :¥ÙYQ=^^Mk : GQK%J : H a=Y^ G ÕFrqFuF RRín:;L J := K©XH =^S^ J n G :6LQYQ=^^ G ^ [GTK DFr\ a;&:ãy( HK :¥ÙY%=^^Xnc`yy HK :¥ÙYQ=^^ K D%B|n6=Q: G&HK Õón ñu` HJ YYåÕ(nc`on B|n6=%: G&HK Fr_ Z ayðnM`` K© o: G%K%J : HMK : J6G ÕF|d : G%K%J : H a=Y^ G ÕFre ë

¤ 5 WieL; 5 iXT_&d ZXZXZ ]iR E ; 5 e 5 5 e E :G78R$: 5 7;$<RWi;$:8+78W)'e;MK E8E )7U¦§_>+7Gp E )RWiäU9LWi;z 5 5 e E :G78R$: 5 7(; E R E RL>78+M' EGE C)· E 1>7G Ç >S È E Y%Ri;$>1+WE +7a¦ +.:8 E 7U01IM.K;7 5 5 WieL; 5iE T 5

•1+78 Ç +7 E 5 5 Wie; 5 E :8­ E >e; 5 R E ; 5 ;$>e%:G7 5 ;$RW¨ 5 e E :G78R$: 5 7'm

•1+78 Ç +7 E J+M'] 5 7G'W<+'7 5 5 W<e; 5 ; 5 5 e E :G78R$: 5 7'm

•1+78 Ç +7 E iMK E8E (+W«YR 5 5 e E :G78R$: 5 7a E :8­< 5E8E RyRW< E Rt+7UMK E8E &m

Page 257: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& %o !)oqi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û %o

•1+78 Ç +7 E ) E RL>78+M' EGE b 5E8E RØRWæ 5 e E :87GR: 5 7(Y%R3+ E 0 5 Wæ#U9LWi; E +eL; 5eM' E ;zù§eXHW<+7 5 J:8. 5 ;$J78®W)+:G7 5E ú C

ök*vW 5%E VL+e%:8T 5 V 5 W 5 E8E E 1>7G Ç >S È EFE T 5 'W<M.>W<+e%:8; E e 5 eM. E ; 5 7 E +Wi®e$p:GK 5 ù f 7 5 7UWi)""C."NúCÌ·ò78.W<>.7UJ 5 eL;$'S>T 5 ]^1+78 Ç >; 5 7dW<+ 5 ; 5 1M 5 7d;J178'­I1+M·MD7?%Ë?<NËD V+Y%RVI 5 W 5 1 E : 5 VI] |CXC Y%Re; 5 RW 5 e E :87GR$: 5 7Ø E :8­ E +eL; 5 eLM' E ; 5 CB?dWE +R';VPR$:G'M.'_>W 5E ä1I7GK­I1>MNo A³6NËDË V J YRLMZ¦ 5 k:G78.R â ; 5ä5 1IM 5 7 ?QË:D e 5 'e â 5;ze­M. E 0; 5 W<]: 5 ; 5 V E 5 78'W)>.7 5 5 Wie; 5 ]3RW<zU9Wi;p 9 C»?@e:UT 5 V E 3 EGE 178'­I1+M](1>78;;$>.7UV E :UW 5E eM. E e; 535 78.W<>.7 5 5 Wie; 5 ; 5 W<]: 5 ; 5 V 5 7G:8e%: 5b5 5 Wie; 5 ]0M'+%MXCb= 5 :GiY%R0M 5 5 L¯ E EGE #1+78 Ç >S>T 5 V 5 1IM 5 7(;Í178K­I1+MØ]<W3R;; 5;$<W 5 ; 5 Y%RiY%RM'Y%R>7 5 R$:G7 5 5 Wie; 5 iXT_&dY%Ri78>S>#e E :8< 5 e E :G78R$: 5 7(eT 5E v++.: 5 C

9:;%<:=b>=mDDBED ¬F n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j Î J n G :QÓ; [G yÎ J n G :QÓ; [G v K%N :;&ß6^tÎ G >= HK6Z LUv6L G n KZ ; H\ ×_ K ¥%n GPK Õde Z a-yuvA`` HJ YY6í: GQK%J : H Õg Z a-yæ GQK&J : HK ¥&n G ñu` HJ YY6h K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öi lU^ J n G : Z ^t; H Y%¥S=YY;&ß GQ[ZbH L%; H ^ K : J L K ;%:^l%ÕkFrq Z a-yAñ L&= H ^ J n G :FuF K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öFr\ lU^ J n G :X> J ^ KPO6G a Z :6^ K ^ K = KG > G&HKZbHAK%N6G LQ; H ^ K : J L K ;%:l&ÕFr_F|d L%= H ^ J n G :M`Pa=Y^ G Õ3RR H6 ;Xn G :U> Z&KG ; JK :;A^ J n G :FreFrg RRínc=&n; HK =Tn6=%:=S= G&HK := [ = [ =A^ J n G :6LQYQ=^^ GA[ =MLQY%=^^ G L%;%:: G&HKGFh HK :¥ÙY%=^^Xnc`PÙ J : K = O Y G BY G p G Y J n B|n6=Q: G&HK ÕFri Z a-yrnc`` HJ YY6Frk K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H ö\uq lEÓ6;A^ J n G :6LQY%=^^Pa;%: K%NZ ^SL%YQ=^^l&Õ\F\u\ RR K B K ¥tn6;^^ JZíJ >c HK :¥Q G LAL%;?>;^ K6Z n;^ [ ;^on6=%:âb> GQK :;^\u_ K `t¥%n G Ù N6G L j v%n: G Z ^ K Ó; [G yuvCBu=Q:<6^Õ\d RRín:;L J :=M;ALQ; H ^ K : JK ;%: H = K = O6G YQ= [ =M^ J n G :6LQYQ=^^ G\ue HK :¥ ÛG%K%N ; [ >m`\ug n B H6G ^ KG%[ B > GQK&N ; [ ï Z?H[ Ò H L%YQ=^^çylULQ; H ^ K : J L K ;%:löy HK :¥Q G L K B K ¥Õ\h\ui RRt^ GTH6 ;t=L N ; J öæ\uk Z a-yü>`Q` HJ YYM_uq K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öSl?Ù; H ^ K : J L K ;%:!lífon B H =?> G f_F ly?lífy K B K ¥S`` HJ YQY³mllm­QySy HK :¥Q G L K B K ¥B K ;QÎ K :CyEQAf_u\ l% H ; K a; JH[ l%Õ_u_ RR ZbH[6Z L%= I%J6GSG v Z ^ KG L N =b>= [ =A=M^ J n G : H ;È> K ; [ ;_d Ù J : ÛGQK%N ; [ B N =^^ J n G :m` K : J6G Õ_ue ë

Page 258: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© ª« §¨X¯© %®i

i

i

i

i

i

i

i

% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

?dW E +RK;V@: 5 Wip E ä-+e%:878;&eL&:Ut+MK;$ Eâ W3 5 M 5E ; E RL>78+M' EGE z;+M' EGE 5 7G78+e%:8C l EGEG5 ]<¦ +.: 5 eM''e9"Iq$C m i E8E )1M 5 7]ie%RM 5 VÌ+e%:UT 5 MK E8E i 5 7G78+e%:8)eLT 5 5E8E RyRW< E Rt+7UMK E8E (V$ 5 7G:8e%: 5 V 5 5 Wie; 5 iXT_di]'M'+MC=»3M.'e93/]^¦ >H:U3be­M' E ^;3M. E :8b;$(78RW<>e: 5E ;0U9Wi;C 465 W 5 78 E RMH:U; 5 V

5 :G]+W)p E <RW 5 v*: 5 ; 5 :8. 5P¸?QË=<·MD oIVBY%RVØ 5 W 5 1%'W 5E VÌ]iRWiM' E :8;<:G' 5%E VZY%R;$ E +7G>1 5%E :8. 5E ;$(+;bg$78 E8E T 5 R$:8.M'._N;3e)U9Wi;C 465 W E »e E :G ¸?Ë=<6·MD o]F¦ +.:8JRWi(R E +(e E Rt+7UMK E8E Jù EG5 W<>e:8ae E Rt+7UMK E8E NúÌ 5 7kRWË 5 e E :G78R$: 5 7kYR^+ E 5 W 5E :G' 5E +M'+RM'; 5E ; 5%E 7GRW<+e%: 5%E C 4 E5 E8E < 5 e E :87GR: 5 7(eT 5äE *vz+e 5 e%:G7U; 5 VRW¨+787 5 ¦ 5 yM 5 +M''_>; 5 Ck· W<+e E +W 78) E8E (>7G7 5 ]JM. 5 ; 5 :G' 5

hb[_ `\7hf[ U ² \[:iSXd=`S\&dÊñ ² h=^iXi b[XSVÒ Ó«Ò ÓËÑiSXd:b[7 [\&S7\X[7aªZ¤¨W<]: 5 ; 5S¸?Ë=<·D o Ä? ;:?Ë ¿Ã R$:G'M'._N; 5 eLM'.e9L/"Í; 5 7 5 7UWi""C."N;$+1 5 M'1

RW E :87G'eY%Ri78+78 E +e%:UäM' E :U;$i:G' 5E 78+7G E >e:U;zt+M 55 $v*+: 5P¸?QË=<·MD oICi? EGE W<]: 5 ; 5 ]L E :8e%:8 E 'W)M. E b;$ E t+e E )g$M''>S È E C½^WeM' E ; 5 7 E +Wi®e%:8' 5 Wi E 5 W<M': 5 5 ;$>7GK^+¦ :8R7 5 R$:87 5%E :8. 5E ;$@1+78 Ç +S>T 5

+W«78+MKS+T 5 5 5 Wie; 5 iXT_&dtCF?dW«7G:GKRM'7>VL 5 ;$>7GK<7G E :87G'e.7 5 R E5 ; E 178K­I1+ E;$J'e E :U®e+'<;<+M' EGE ( 5 787G>e%:G»eL)U9LWi;V 5 E E :U E 'e;0eT 5 ¦ 5 78W .e'+'M.'_>; E CfZ5 78]+W eT 55 ¦§7G>W 5%E e 5 e 5%EGEG5 5 W<'MK; 5 7>VØW) E W 5 5 7UY%Ri+W 5 R$:87 5%E 5 W<e; 5%E ;M'.eR+WeT 50E 1+78 Ç > E »RWi0178'­I1+M¦ 5 y.e'+'M.'_>;be%:8 E ;$ E >76R E ;V 5 E EGEG5g$''7GKY%RÍe 5E8E5 eM' E ; 5 7 E +Wi®e:8' 5 78>M''_> E8E #e­M. E z;$¶PRg 5 ;$z 5 e%:G7 5 M'#ä;$;; 5E V 5 Y%R RW<+e%:87GK E >e E .1+M'W)>e%:G E Rb 5 W<M'g$K;;$C 4 ;17GK­I1>M;$(.e E :8®eK78>>LJRW¨1M 5 7GpX;$7UT 5 V%;$b 5 7U; 5 5 W 5<E +Rä:8. 5

•'e%:>d1M 5 7pr;78T 5 ] m

•E :G78'ek1M 5 7Gpr;$7UT 5 ]lc7± w

•5 $v*: 5E b7G7UI E Ø1IM 5 7pr;$78T 5 ]#7±HC

°­ E 178'­I1+ E M 5 + E ;$>1+W E >7ig$M''+H:UW<+e%:8ä'eKKM'._N; E L>M 5 7 5 78Wi; 5 7>C4 EG5 E8E5 eT 5E v#¦ >H: 5 0:G>e%:Gp E 0R E 7 5 1IM 5 7(;Í178K­I1+MØeT 5 'e'+'M.'_>;VPRWæ>7G7 5;$+gNRS>T 5)5 5 7878Cök*vW 5%E V 5 7UVN^eL­M' E @;$6RW\ 5 Wie; 5 7\&dtCZ¤àW<]+: 5 ; 5 Y%Rd:G7U:8»;$@RW J Ë6½ HD

]^W 5E :G7U; 5 e 5 7 5 78W<)""Cª C[=»T 5 9­e>e9RWie 5 1K;;$VL>e E E U9Wi; E 7U+;iRW ; 5E»Ç M.9 5E Vt1+78 Ç +eL; 5#E 5 :8. 5 ;#g$78 E8E T 5 ;$< 5 e:87 5 M.3]0; 5 :G' 5 5 7G78: 5 V5 R E *vVRW«ü±cC 4 ;RWib;$ EGE E U9LWi; E ]^¦ >H:Ub;$»¦ 5 78W<J'e;$>L>e;$>e:8V$;$>e:87 5 ;$RW ?Ë&< V;$3W 5 ; 5 Y%R3RWî>7G7 5 +W¨RWi#;$+MK E eLT 5 'e:8+787 5 W<<ie­M. E E +Wi®e:8'><; 5 5 Wie; 5 C 4 EG5 RW\+787 5 7GNS+VI W)>e E >W\ 5 7878 E 5 e;$+e%:8d]6>W<H:8';VWi E e­M' E 5 e%:G'e%RLzL7Uä E ;$+Wi E L7G:G E ; 5 5 WieL; 5 C#·»e:8 E ;pHMH:8.WiU9Wi; 5 W<]: 5 ; 5Ç<N|D D oÉ ;:?A?&D>³DQ:?U½ HD VI3178K­I1+M :D³c?Á ](.eL78+W<+e%:8;b'e;$K+e; 5 Y%R 5 e â 1>M;$e'e9W<+e%: 5 ; 5 5 Wie; 5 ;$+e%:87 5 ; 5 7\&d] E RL>7G 5 7< 5 ; 5 7G¯7G 5 7\&d->W RWiReK;;$C ? EGE #'e$¦ 5 7GWiS>T 5 ]0R E ;ie 5 :G7U:UW<+e%: 5 ; 5 5 Wie; 5 gXd_X^&özY%R01+78+W 5%E E +R.7NCk¤ñ:878:8W<>e: 5 ;$ RW ¼ Å ½ HDzE +R 5 W< E W 5 E :G'M 5 ; 5 :878:8W)>e%: 5 ; 5 7\dPV 5 7 EGEG5 eT 5 78> E E +7^78 E +e%:8; 5 YRC

Page 259: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& q- !)oi

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û q

9:;%<:=b>=mDDB © sF n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j ï;%:QÓ6; [G yuï;%:%Ó6; [G v\ ×_ K ¥%n GPK Õde Z a-yuvA`` HJ YY6í: GQK%J : H Õg RRT= H =Y Z ^%= ZbHZ L Z =Y Z V=!² ;h K :Q¥i ×k ¥%n G Ù N6G L j Î K = KG > G&HK Ó; [G yuvCB ZbHZ&K ÕFrq ëFuF L%= K L N yÎ G >= HKZ LUv6L G n K6Z ; HzG Fr\ ×Fr_ Î%¥6^ KG >ìB; JK B|n: Z?HK Y H y G B< GQK%ÛG ^^%=%< G yÕF|d a; JH[ Î G >= HK6Z LU::;%:fQfÕFre ëFrg RRT= H =Y Z ^%= G v%n: G ^^ ; [G LQ; HK :;Y GFh K :Q¥Fri ×Frk K `tQ¥%n G Ù NG L j v&n: G Ó6; [G yuv/B G v%n:Õ\uq Z ay K B K ¥êñu`SÒUÓÏ&±Ê9 ]] K B [6Z > ñu`Ss\F K&N :;&ß HG ßcÎ G >= HK6Z Lbv6L G n K6Z ; H yv/B G v%n:/B|n;^ Z&K6Z ; H ö\u\ lUÒ HKG < G : G v%n: G ^^ Z ; HG v%n G L KGQ[ l&Õ\u_ ë\d L%= K L N yÎ G >= HKZ LUv6L G n K6Z ; HzG \ue ×\ug Î%¥6^ KG >ìB; JK B|n: Z?HK Y H y G B< GQK%ÛG ^^%=%< G yÕ\h a; JH[ Î G >= HK6Z LU::;%:fQfÕ\ui ë\uk RRT= H =Y Z ^%= G v%n: G ^^ ; [GMZbH LU: G > G&HK ;_uq K :Q¥_F ×_u\ ¥%n G Ù N6G L j Î K = KG > G&HK Ó; [G yuvCB ZbH L&:Õ_u_ ë_d L%= K L N yÎ G >= HKZ LUv6L G n K6Z ; HzG _ue ×_ug Î%¥6^ KG >ìB; JK B|n: Z?HK Y H y G B< GQK%ÛG ^^%=%< G yÕ_h a; JH[ Î G >= HK6Z LU::;%:fQfÕ_ui ë_uk RRT= H =Y Z ^%=cLQ;?>= H[ ;S=S^ G :S: G n GQK6Z&[ ;dq K :Q¥dîF ×d\ H6G ^ KZbH <ffåÕ3RR ZbH LU: G > G&HK =M;t= HZ?HN =b> GUHK ;d_ ¥%n G Ù N6G L j Î K = KG > G&HK Ó; [G yuvCB^ K = K Õdud ëde L%= K L N yÎ G >= HKZ LUv6L G n K6Z ; HzG dg ×dh Î%¥6^ KG >ìB; JK B|n: Z?HK Y H y G B< GQK%ÛG ^^%=%< G yÕdi a; JH[ Î G >= HK6Z LU::;%:fQfÕdk ëeuq H6G ^ K6ZbH < ¨¨ Õ3RR [G L&: G > G&HK =M;t= HZbHN =?> G&HK ;eF ë

Page 260: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© ª® §¨X¯© «Qsi

i

i

i

i

i

i

i

% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

¤ 5 Wie; 5 gXd_X^&ö0>WX++

](R$:G'M'._N; 5 7Ub'e%:G+787 5 W<L>763g$>+RS+T 5 ;$(RW 7\d<V 5 7a E8EG5 VeT 5 ¦§_ E +e%:GK; 5<E >7FR:G'M.'_>; 5 ¦ 5 78);$ :8MB 5 Wie; 5 C[? E8E 0]nHe'>31+78 Ç +S>T 5¦ +.:8<L7U3 EGE 5 Wie; 5 V$ 5 W 5 W 5%E :878 5 7 5 78W<Í""C "C

9:;%<:=b>=mDDB © DF n JO Y Z LPp; Z&[ ¥%n G Ù N6G L j Ð: G = j Ó; [G yÐ: G = j Ó; [G v K%N :;&ß6^tÎ G >= HK6Z LUv6L G n KZ ; H\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : H Õd RRXp G : Z a Z L%=c^ GtG ^ Kàt[G&HK :; [GXJ >a;%:/B Î GXH6 ;åöæQ6e Z a-y H6G ^ K6ZbH < ä `tscg K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öh l O : G = jAH ; KAZbH =Ta;%:c^ K = KG > GUHK l%Õi ë ?^V 5 W EGEG5 V%:G>7GW<'eW 5%E 07G:GJ;$eL­M' E (; 5E 5 W<e; 5%E C[ök*vW 5%E e E >S>T 5 ""C

5 W 5 +¦ :8R7^<eL­M' E ;$+;3:8. 5 ;$Jg$78 E8E T 5 ;$X++

C

11.4 Análise de expressões465 W 5 ;$ E8E +W 5E e%:8+78 5 7GW<+e%:8VtRWiÍ+g7G EGE T 5 >W

X++ 5 ;$ E >7JRWi E .W<M' E 5 e E p

:8e%:G 5 R)17GK­I1>MV 5 RiRWiJg$78 E8E T 5 5 W< 5E :8;$ ;$.1+7 E E g$78 E8EÈ E W< E6E 'W<M' E Ck¤:G' 5 ;$JRWi<g$78 E8E T 5 ]b+M'+RMK; 5 5 W E Je 5E :8. 5E ; E`E R E`E Rtg$78 E8EÈ E Cf 7U# E 5 e E :Ue%:G E V 5 $:G>7 5ÍE +R:G' 5 ]:G78.1KMXVL 5 W 5 W 5E :G7U 5 7 5 78WiÍ""Cª$C»¤

78¯78 5 :G' 5 ; 5 e¯Í;Í­781 5 7G E .e%:U­:GK+i;:G>7GW<'eÍY%RM 5 :8. 5 ;# 5 e E :Ue%:GC m 5 W<>e:8e 5 + E5 ;$<RWiz 5 e E :8e:80'e%:G>.7U#]<eN E8E ­78'iRW<ä1+78 Ç >S>T 5 +g%:878zY%R<eT 5 ]0¦ >H:Ueie­M' E E 'e%:8­:GK+CF½^Wii 5 e E :8e%:8.e%:G>.7U)]3;$ Ç eK;<e 5 eLM' E ; 5 7 E 'e%:8­:8' 5 t+e E 5 W 5 RWi E NY&kI+e+'z;$); â H: 5E Vy 5 7G]>W E 0¦ 5 7;$+Wi E K; 5 7Ue;$V 5 eXHW<+7 5 eLT 5zE +7U­1­M''; 5 C f 7Ub1>7G Ç >7 E (] RW<) 5 e E :8e%:8 1­M'K;VR$:8.M'._NW 5E RWi)U9Wi;3 5 W<]: 5 ; 5¼?&D%ÁMDËìÄWN@A6˳cD¼? ;`· f l °%I1IC m k:UM%U9Wi;aeT 5 MKeS>7BRW<^gNS+T 5 V>^ 5 e E :8e%:G]d1­M'K;CÌ= 5 :8@Y%RdR$:8.M'._Ne; 5 E8E kW<]+: 5 ; 5 78a1M.K;7Ø` 5 e E :Ue%:GV> E :UW 5E EGE RW<'e; 5Y%R 5 'e%:G>7G1M 5 1­M.K; 5 7UÍRW<ä 5 e E :8e%:80'e%:G+'7UÍ>W

X++] 5 W) E W 5 R$:G'M'._N; 5 +W

°%I1IC[· 5 e E :8e:81[XchXhb:G+W E >W<7G 5 :G' 5ó½ »=» ¹CÇÌËb´¸ .e E >7GK; 5 e 5 e â 1+MyWi E M.: 5 ;:8L>M'<;$ EGâ W3 5 M 5E C

9:;%<:=b>=mDDB ©Q©F n JO Y Z L K ¥%n G ¥%n G Ù N6G L j Ò HK Ù; H ^ K Ó6; [G yîÒ HK Ù; H ^ K Ó6; [G v\ K%N :;&ß6^tÎ G >= HK6Z LUv6L G n KZ ; H_ ×d ZbHKPj Õeg Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕhi RR KG&HK = K := H ^Ua;%:U>=%: Z >=Q< G > G > H W%> G :; ZbHKGZ :;k K :Q¥Frq ×FuF j `MÒ HKG < G :/B|n6=Q:^ G Ò HK yuv/B|n;^ Z&K6Z ; H B Z >=%< G ÕFr\ ëFr_ L%= K L N yÓ J > O6G :Qï;%:U>= K v6L G n K6Z ; HG

Page 261: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !)"i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û

F|d × RRS^ Gt[G&JcG ::;åö a;%:U>= K ;S ZbH p à Y Z&[ ;Fre RRy|n;^^ Z p G Y?> GUHKG a;%:= [ ;^tY Z > Z&KG ^Frg K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H ölUÒ H p=Y ZU[ZbHK L%; H ^ K = HK l%ÕFh ëFri : G%K%J : HSHG ß K ¥%n G yîÒUÓÏ%±Ê9Cöós6ÕFrk ë\uq\F\u\ RR ¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨ Ù; H ^ K = HKG ^ K : ZbH < ¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨\u_\d n JO Y Z L K ¥%n G ¥%n G Ù N6G L j Î K : ZbH <Ù; H ^ K Ó6; [G yÎ K : ZbH <Ù; H ^ K Ó; [G v\ue ×\ug Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕ\h : G%K%J : HSHG ß K ¥%n G yÜÎ%Q6ÒUÓÑÏ%Ê9/ö3sÕ\ui ë\uk_uq RR ¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨ Ù; H ^ K = HKGPHJ YY ¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨_F_u\ n JO Y Z L K ¥%n G ¥%n G Ù N6G L j Ó J YYQÙ; H ^ K Ó6; [G yÓ J YYQÙ; H ^ K Ó6; [G v_u_ ×_d Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕ_ue : G%K%J : HSHG ß K ¥%n G yæÓQèQ6Ï%±Ê9Q/ö3sÕ_ug ë

f 7U¬RWiÑ178'­I1+M^:UW0L]>W©eT 5 ],;$H¦ â 'Mb+M'+RMK7 E >Rñ:G' 5 C n E :U¬ 5 e E RMH:U7:8L>M'ä;$ EGâ W0 5 M 5%E C l E : 5 ])¦ +.: 5 e 5 7 5 78Wi""C /VyY%R<R$:G'M.'_> 5 5 e9>+'; 5 W<]: 5 ; 5;=<>³?AB:CDÄÆcA6Ë"JC2H 787 5 +R787b178K­I1+Md+Rv 5 e 5 W<# E :8­e 5 e¯ xA6Ë6½ H7D¬E +eL; 5eLM' E ; 5 C m b017GK­I1>ML]>e 5 e:878;V 5iE +Rz:G' 5 ]+g%:878 â ; 5 ;0:Ut+MKi;$ Eâ W3 5 M 5E C

9:;%<:=b>=mDDB © @F n JO Y Z L K ¥%n G ¥%n G Ù N6G L j Ø=Q:QÓ6; [G yØ=Q:%Ó6; [G v K%N :;&ß^tÎ G >= HK6Z LUv6L G n K6Z ; H\ ×_ HK :Q¥QØ=Q:tnÌÕde Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕgh RRín:;L J :=Sp=Q: Z%à p G Y H = K = O6G YQ=i nA`SÙ J : K = O Y G Brp=Q:ï Z?H[ yuv/Bn;^ Z&KZ ; H B Z >=Q< G ÕkFrq RRt^ GTH6 ;t=L N ; J öæFuF Z a-yrnc`` HJ YY6Fr\ K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öSlEØ=Q: Z = O Y G l fFr_ v/Bn;^ Z&KZ ; H B Z >=Q< G fl H ; K a; JH[ l%ÕF|d : G%K%J : HSHG ß K ¥%n G yrn B K ¥%n G ö n B [Z >ÕFre ë

? E8E E ¦ 5 78W 5%E e¯ E Y%R(78+78 E +e%:8W 5%E :8. 5E Wi E6E 'W)M. E ;$ g$78 E8EÈ E +WX++

Cök*vW 5E V^ 5 78V 5 :G7U:UW<+e%: 5 ;&RW e¯àRW 5 RL 5 Wi EäE5ÇLE :8'>; 5 V 5 ACXCE½ H7D VY%Rä7G>7G E >e%:8RW<U9W<;&;äW<]+: 5 ; 5 Cò¤«W<]: 5 ; 5 Y%Rä:G7U:U&;$ EGE z:G' 5 ;$e¯]W 5E :G7U; 5 e 5 7 5 78WiÍ""Cª[email protected]'e'+'M.W<>e:8V>MKRMK 5 :G' 5 ;<g$78 E8E T 5 Y%R E :U­

Page 262: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© Qs §¨X¯© « ©i

i

i

i

i

i

i

i

o Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

e 5ÍE +R7G'W<+'7 5iÇ M.9 5 0Y%Rb78+78 E +e%:Uiig$78 E8E T 5#J E Y%R+7U;#; 5 C eÍU9Wi;i; 5W<]: 5 ; 5 Ck½^Wi01+_J+M'+RMK; 505 :8. 5)E T 5 ¦ +.:8 E ;$R E 1>7G Ç >S È E Y%Re%: 5lJ)E RLb1M'';;$

•E Í;.W<+e E T 5 ]#Wi 5 73Y%RÍ_++7 5 C 4 EG5E *vVZRWÿ+787 5 ¦ 5 @>e 5 e%:G7U; 5 VÌ 5 E RW7G7UIieT 5 5 ;$J:G>7^RWîW<]+: 5 ; 5 E8E5 +'; 5 )>M.&m

•E 5 :G' 5 +M'+RMK; 5 5 787G E 5 e;»bRWi0MK E8E C 4 E5 eLT 53E *vVRW >7G7 5 ¦ 5 P>e 5 e$p:878; 5 V$ 5 E :G' 5E^E .W<M' E eT 5 5 ;$>W:8+7^W<]: 5 ; 5E C

?dW E >RK; E T 5 +MKRM'; 5E(5E :8. 5E 7U+;zRW ; 5%E 78RW<>e: 5E Vy 5 7bW<+ 5 ;U9W<;b Ç<NËD D oÉ ¸ ¹ NCËD » ³?U½ H7D e3M''e9</C[? E8E )U9W<;b78: 5 78eRW 5 $v*: 5; 5 :8. 5ô?<NËD VaRv,178'­I1+M ?< ]RW ¸?QË=<½ H7D 5 W 5%E :8. 5E +MKRM'; 5E 78 5%E78RW)>e%: 5E ;äU9Wi;C)½`:G'M'._Ne; 5ä5 e 5 W<i; 5 W<]: 5 ; 5 VÌY%R<]<RW ; 5%E»Ç M.9 5%E ; 5 e¯ 5 7G78+e%:8VIF M' E :8J;$6:G' 5%E ; 5E 7GRW<+e%: 5%E VN7GNM'._Np E 6RWi»R E >»eL^:Ut+MK ;$ EGâ W0 5 M 5%E78(U97 5 W<]+: 5 ; 5 ;$NY%R; 5 CÌO,MK7 5 YRa(R E >(;+1 E +7Z¦ >H:UJeJMK E8E a;$NY%R;V5 R E *vVe<MK E8E Y%R(¦ 5 Ì>MKRMK;0e 5 'e â 5 YR7G>7G E >e%:8)0+g$7G EGE T 5"J E Y%R+7U;; 5 5 e%: 5 eiU9Wi;); 5 W<]: 5 ; 5 C fZ5 7`g$>W)M 5 V$e E >R'e%:GJg$78 E8E T 5

Z Zî«Ò =ÓªZGf ñ_&SQ\=a Ñ E R 5 e9W 5%E YR+g7G EGE T 5 Z Zî«Ò =Ó&M.>1RW 5 $v*: 5 ; 5 :8. 5 |L ú Cd?@e:UT 5 V;$>1+W 5%E 7 5 +R7U7e:Ut+MK;$ Eâ W3 5 M 5E 5 70RW´W<]: 5 ; 5 U9Wi; 5 !²¯±$'Vd 5 W; 5 E 7U®W<:87 5%E 'e:8+'7 5%E Vt3 EGE iR E >#;$+1 E +7»¦ +.:8#eLÍMK E8E |L ú ù§ E R E MK E8E EeL E :G7U E ú C m 6:UM$W<]: 5 ; 5 eT 5 ¦ 5 7k>e 5 e%:G7U; 5 V+e%:8T 5 RWË+787 5(5 5 7G78+RBV 5 W 5 W 5%E :878; 5e0M.'e9</"C 4 EG5 5 e%:G7U­78 5 V)>e:878;3; 5 W<]+: 5 ; 5 e0:8t+MK<;$ Eâ W3 5 M 5E ;$'_pre 5E Y%RM] 5 :G' 5 7G+: 5 7Ge; 5 L>M'bU9LWi;CÌ? E8E a:G' 5 ]V>e:UT 5 V7G+: 5 7Ge; 5 L>M 5 W<]+: 5 ; 5 Y%R`:878:85 ACXCE½ H7D ù M''e9i/%ú C

9:;%<:=b>=mDDB © ªF n JO Y Z L K ¥%n G ¥%n G Ù N6G L j ÙQ=YY&Ó6; [G yÙ=YY&Ó6; [G v K&N :;&ß^SÎ G >= HKZ LUv6L G n K6Z ; H\ ×_ HK :Q¥ÙYQ=^Q^cLÕd HK :Q¥ ÛGQK%N ; [ >áÕe K ¥%n GPK Dö K© Õgh Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕik RRtL%=YL J YQ= K6Z n6; [ ;Xn: Z > GZ :;ta Z Y N ;Frq K D `t¥%n G Ù N6G L j v%n: G Ó6; [G yuv/B G v&n:ÕFuFFr\ RRt^ G a;&:A=Q::=%¥CöæFr_ Z a-y K DB [6Z > sMF|d K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öFre lÍQ::=Q¥6^ [ ; H ; KXN =Qp G > G%K%N ; [ ^6l%ÕFrgFh RRt^ GTH6 ;Pa;%: J >=MLQYQ=^^ G öæQ6Fri Z a-yñty K DB K ¥ ZbH ^ K = H L G ;%aS HK :¥ÙYQ=^^Frk K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öSlQ¥%n G l f K DB K ¥CB H =b> G f\uq l [ ; G ^ H ; KPN =Qp G > GQK%N ; [ ^l%Õ\F

Page 263: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© D §¨X¯© «Q@i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û o$"

\u\ RRín G <= KZ n;^ [ ;^P=Q:< J > G&HK ;^\u_ K© `t¥%n G Ù N6G L j v%n: G Z ^ K Ó6; [G yv/Bu=Q:<^Õ\d\ue\ug RRín:;L J :=M;í> K ; [ ; [G ^ GÖ = [ ; H =MLQY%=^^ GtK DB K ¥\h LX`y HK :¥ÙYQ=^^ K DB K ¥CÕ\ui >c`MLåB H6G ^ KGQ[ B > GQK%N ; [ ï ZbH[ yuv/B > G%K%N B Z >=Q< G öy HK :¥Q G L K© B K ¥Õ\uk_uq RRt^ GTH6 ;t=L N ; J öæ_F Z a-y>m`` HJ YY6_u\ K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öSl ÛGQK%N ; [ l fPv/B > GQK%N B Z >=Q< G_u_ fmlylífy K© B K ¥A`` HJ YY³cllz­Tyy HK :¥Q G L K© B K ¥B K ;Î K :CyE_d fml% H ; K a; JH[cZbH LQYQ=^^clífALåB H =b> G Õ_ue_ug : G%K%J : HSHG ß K ¥%n G y>ìB K ¥%n G ö(>ìB [Z >Õ_h ë

½^Wæ 5 W<+e%:8­7G 5 .W< 5 7G:8e:8 EG5 78 ;=<>³?AB:CDÄ >³D7? HJ/%2H VY%R3+W 5E ;$3R$:8.M'.p_>7>VP;$>1 E +7 ¦ +.: 5 CJ? EGE 3W<]+: 5 ; 5 ]<U9W<; 5ÍE +W<780Y%R07GN E W 5E R:G'M.'_>7>VPe 5 7 5 p7UWi

X++VNRWêW)]+: 5 ; 5`5 RJ 5 e E :G78R$: 5 7NC fZ5 7yg$>W)M 5 V>ea+g$7G EGE T 5 ^¢gVZ%f ñ_&S&Q\=a `­Ñ¶a V

E R 5 e; 5 YRl»l E *vW1I7GK­I1> E ; 5E :G' 5%E |L *|L¦3V7G E t>:G'1IW<+e%:GV;+1+pW 5E G+M'+RMK7 5 :G' 5 ;$3ù E R 5 e9W 5E Y%R E *v|L û úkV>e:UT 5 V7 5 R7U7ke(:Ut+MK;$ Eâ W3 5 M 5E05 W<]+: 5 ; 5 !²¯±$' p |L*ÑC|L¦ t Vd&7:8.7<;-MK E8E d@ û ä+W: 5 ; 5%EF5E`E +R E eL E :G7U E Ck¤ M'9eL; 5(;=<>@?A7B:CDCÄ >­D7? HJC2H e 5 7 5 78Wi#""C o$V%1>W 5%EY%Rb>M.0eT 5 ;$.¦ +783W0R.: 5 ;$ 5 R$:87 5%E W<]: 5 ; 5E ;bL E Y%R E ie<:Ut+MKÍ;$ EGâ W3 5 M 5E 5 W 5ÆcA6Ë!J/2H V 5 76+g$+W<M 5 Ck= 5 :GV 5 78]+WVYR(Y%Re; 5 RW<3+e%:G7U;b; 5 :8. 53¸?Ë=<6ÊMD7? H V 5 W 5 W< E W 5 e 5 W<(; 5 W<]: 5 ; 5 7 5 R7U; 5 V] +e 5 e%:G7U;JeL:8L>M'0;$ EGâ W3 5 M 5E ¦§_p E V+e%:UT 5 VRWi3 5 W<7US>T 5 ; 5%E :G' 5E ; 5E 78RW<>e: 5E ù78Wi_+>e; 5E +W Ë úk 5E :8. 5E ; 5%E78®W)+:G7 5E ¦ 5 78Wi E 7GWi_++eL; 5%E e(>e:878; +e 5 e%:G7U;CB? E8E J 5 W<7US>T 5 ]6¦ >H:U( 5 7W<+ 5 ;iU9Wi;0 ¸?Ë=<6·MD o ÄDÒcAMCU³ VY%Rb 5 W<7U E 5%E :G' 5%E ;$.W<>e EÈ E ;$b+;+M'+W<>e: 5 ;)M. E :Ui;$(:G' 5%E + E W g:UW<+e%:8Cl E : 5(E 'e Ç +»YR678 Y%R@RW\W<]+: 5 ; 5 R$:G'M.'_>; 5 eRWi(U9Wi; E *v^>e 5 e%:G7U; 5 V 5%E

:G' 5E R:G'M.'_>; 5E 5 W 5 78RW)>e%: 5E ;+1>W E +7^+g:8W<+e%:G'R E 5E :8. 5E ;$>+M'78; 5E C4 9W<; E R$:G'M'._Ne; 5 Vy 5 7 +g$+W<M 5 V 5 v*: 5%E ;3RWi E RPMK E8E 0;äMK E8E 0R$:G'M'._N;Íe;$NMK7US+T 5 ; 5 W<]: 5 ; 5 78 E RM.:878KWæ+W +787 5 C3=^RW 5 W<'MK; 5 7(78>MVP:UMk+78 :8+7 â'E :GK+E +78'3: 5 :8M'W<+e%:GJ'e;$ E v;Cd¤ 5 W).MK; 5 7`°I1V 5 7ag$>W)M 5 V$ 5%EGE RBM'RW< E 7G>7U E78b;:G>7GW<'e7 5 G+ E W<+e%: 5 a>e:87G^:G' 5%E ; 5E 78RW<+e%: 5E J; 5E 78®W)+:G7 5E ¦ 5 7GWi E V:8]0W< E W 5 L7U 5 > EG5 >W YR0Wi E ;$0RWæW)]+: 5 ; 5 5 W3'eÍ 5 W zU9Wi;ÍICb= 5e 5%EGEG5 > EG5 V$++.:87G>W 5%E 078 E :G78KS+T 5 ;$(:G7ULM'97`t+eL E 5 Wî+ E W<+e%: 5%E +g: 5%E C

9:;%<:=b>=mDDB © F n JO Y Z LT HK :Q¥ ÛGQK%N ; [ > GQK%N ; [ ï ZbH[ yÎ K : ZbH <cvCöæ HK :¥Q G LP:\ ×_ HK :Q¥= O Y G nA` K ;bnÌÕd HK :Q¥ÙYQ=^Q^ I Õeg ß NZ Y G yrnêñu` HJ YY6Ô ë rß*r Ú r çá× ä Ü3Ø r âáÞÜ3×­×Ö tß Ü r × ß Ü3é ß*r ׳ÙØ*çáâáç 6r ä r ×­Ü6ÚÔÓ r6æreæ Ü ß¢Õ×ÖØÙ­ÚÛ ÜÞÝßàâáäã­ÛqÖ å&æçè×àéÕã»êãëÛ ã­Ýß»ì×ãâß»àÚªíàîâÜ ïäîã­áªÜ¨Ù­Ý±åð»Ýòñàñ³Ö å¯í»í´Öôóöõ´÷ø½ó»ù³úâåûñ³ñ­ÜÞÚüÙ­ÝøâýþàâÚÛ àâÿåðú»ú»ú

Page 264: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& o !)i

i

i

i

i

i

i

i

o Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

h ×i Z aãy(n ZbH ^ K = H L G ;&aS HK :¥ ÛGQK%N ; [ ÃÃPn B H =?> G B GQI&J =Y^çyvMk ×Frq HK :¥ ÛGQK%N ; [MK `y HK :¥ ÛGQK&N ; [ onÌÕFuF Z aãy K B|n=Q:=b>`` HJ YY6Fr\ ×Fr_ Z aãyu:t`` HJ YY6F|d : GQK%J : HcK ÕFre ëFrg G Y^ GFh ×Fri Z aãy K B|n6=Q:=b>ìB GQI&J =Y^çy:Frk : GQK%J : HAK Õ\uq ë\F ë\u\ nc`XnÌB H6G v K Õ\u_ ë\d I `Y G p G Y J nÌÕ\ue Z a-y I B|n=Q: G&HK `Q` HJ YQY6\ug : G%K%J : HAHJ YYåÕ\h : G%K%J : HMI B|n6=Q: GUHK B H6G ^ KGQ[ B > GQK%N ; [ ï ZbH[ yuvCöí:Õ\ui ë

· e­M' E (;bR$:8.M''_>S>T 5 ; RWi31I7GK­I1>M;$(.e E :U®e+'37G>7G E >e%:8;J 5 76W<+ 5 ;»RWe¯ ¾ ?&½ HD ]b E :Ue%:G E +W<+M'9e%:8 J U9Wi;);bW<]: 5 ; 5 Y%R0+W 5%E ;b1>7>C f[5 7 EGEG5 V[eT 5-E >78­eN EGE ­78 5 78 E +e%:87bY%R 5 W)]+: 5 ; 5 YR#¦ +:GR:8MFe­M. E C· He'>;$.¦ +78+eS>b](YRV$t¯ E +MKRM'7 5 :8. 5 ;bg$78 E8E T 5nJ E Y%R>78;b; 5 5 e%: 5 (1+78 Ç +7 E ]RW«:G' 5 1­M''; 5 ù 5 R E vVtRWi#MK E8E Iú VL¦§_+p E 3i7 5 R7U< 5 7»RW<#1I7GK­I1>MÌ;$0.e E :8®eKe EGE bMK E8E Cd¤ :G' 5 7G+: 5 7Ge; 5 t+M 5 W<]: 5 ; 5 ] 5 $:8'; 5 ;3+e%:G7U;3;317GK­I1>Me:Ut+MK;$ Eâ W3 5 M 5E Cd¤ %1KW<+e%:8 E b17GK­I1>MeT 5 ¦ 5 7a>e 5 e:878;Je)MK E8E (;$ E *v;be+W +WM'RW<)MK E8E Je E :878MVRW¨+787 5)5 5 7G78+RBC=»^e­M' E k;$kRWi^U9LWi;a;$kW<]+: 5 ; 5 VNR$:8.M'._NW 5EB5 W)]+: 5 ; 5ÜÇ<NËD D oÉ ¸ ¹ N/ËD » ³?MÄ

½ H7D Y%R`eM' E (^+M'+RM' 5%E :G' 5%E ;$`RWiJM' E :8J;$`+g7G EGEGÈ E VR E ; E 5 W 5 78RW<>e$p: 5%E ;3U9Wi;CÌ? E :8»W<]: 5 ; 5 ]^W 5E :G7U; 5 e 5 7 5 78W<)""CªCk¤ YR^+M'^¦§_^]»U9W<75 W<]+: 5 ; 5TÇ<NËD D oÉ ¸ ¹ N/ËD%½ H7D Y%R»:G7U:U3;37G'W<+'78bg$78 E8E T 5 ;bM' E :UV7G+: 5 7Gee; 55<E >R#:G' 5 Y%R(]J78W<_+>e; 5 e317GK­I1>M ? ù M''e9ä"Nú CZ?dW E +R';V 5 78¯7G 5 W<]: 5 ; 5]»U9Wi; 5 78>+R7 E '1IW<+e%:G`78 :878:876; 5 78 E :8e%:8^;M' E :8#ù§M.'e9)ú CZû»> 5 E ]»78'; 5RW 5 $v*+: 5 ; 5 :G' 5 ¸?Ë=<6·MD oY%R3 5 e%:G]+W 5 :G' 5 b#;$'W<+e E T 5 ;<7G'W<+'78<+g7G EGE T 5zY%Rz 5 e%:8L7U 55 R$:87 5S¸?Ë=<·D o¬;$>1 5 M.1K; 5 eU9Wi;78>+R7 E '1;M'.e9L-C? E8E 5 v*: 5 ]Vy>e%:8T 5 VP+e> E RMK; 5 e%RW 5 $v*+: 5 ; 5 :8. 5?<NËD );+1 5 M.1K; 5 Cæ2 RLe; 5z51M 5 7FR$:G'M'._N; 5 e0U9LWi;3;$ Ç<NËD D oÉ ¸ ¹ N/ËD » ³?b½ H7D ] @CXC V%+e%:8T 50E U9> 5 Rz 5Ç W ;<M' E :8#;g$78 E8EÈ E C@=» E :G3> EG5 ]7G+: 5 78e; 5 RW 5 $v*: 5?<NËD 5 W:8. 5o|CXC ;$'W<+e E T 5 C l E : 55 5 7G78`:8]^W< E W 5 Y%Re; 5 U9Wi;;$»W)]+: 5 ; 5 ]`¦ >H:U E +W e+e9RW78RW)>e%: 5 CF= 5 7 5 78WiÍ""CªV 5 1IM 5 7^;$+1 5 M'1'; 5í|CXC ]bR$:8.M'._N; 5 L7U<L E Y%R E 7^:8L>M'; Eâ W3 5 M 5E i+ EG5 RWÿW)]+: 5 ; 5E +W 7U®W<:87 5%E g$ E :UV E +7U­ä+e 5 e%:G7U; 5 e E :Ut E YR E C

Page 265: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© Q@ §¨X¯© «i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û o/

9:;%<:=b>=mDDB © «F n JO Y Z L K ¥%n G ¥%n G Ù N6G L j v%n: G Z ^ K Ó6; [G y Z ^ K Ó6; [G v\ ×_ K ¥%n GPK ö K DÕd HK :Q¥Q G LP:CÕe ZbHKPH Õgh Z a-yuvA`` HJ YY6í: GQK%J : HAH6G ß K ¥%n G y HJ YYåösÕik K :Q¥Frq ×FuF RRon G <= K6Z n; [ ;Xn: Z > GZ :; H x [ =tY Z ^ K =Fr\ K `tQ¥%n G Ù NG L j v&n: G Ó6; [G ycyv%n: G Ó6; [G Xv/B H ; [G ÕFr_ ëF|d L%= K L N yÎ G >= HKZ LUv6L G n K6Z ; HzG Fre ×Frg Î%¥6^ KG >ìB; JK B|n: Z?HK Y H y G B< GQK%ÛG ^^%=%< G yÕFh a; JH[ Î G >= HK6Z LU::;%:fQfÕFri K ` HG ß K ¥&n G yÓQè6Ï%±ÊQ9/öósÕFrk ë\uq\F RRín G <= KZ n; [ ;X: G ^ K = HKGS[ =SY Z ^ K =B K DB K ¥LQ; HK ?> J >c HK :¥Q G L\u\ K D `t¥%n G Ù N6G L j v%n: G Z ^ K Ó6; [G yv/B H6G v K Õ\u_\d RR H ` K =b>= HN ; [ =AY Z ^ K = G > K D\ue H `y K DB K ¥A`` HQJ YY6³Ps­Pyty HK :Q¥Q G L K DB K ¥BLQ; HK Õ\ug\h RRtL&: Z = H ;%p;T HK :¥Q G LALQ;?> K B K ¥LQ;?>;DU;B G Y G > GUHK ;\ui :t` H6G ßS HK :¥Q G Lçy K B K ¥Cö K B [6Z >áö H fDöSy HK :¥Q G L K DB K ¥Õ\uk_uq RRtL&: Z = K ¥%n G LQ;>c:cLQ;>;Pp=Q: Z%à p G Y K ¥_F K ` H6G ß K ¥%n G yu:ö sÕ_u\ : G%K%J : HMK Õ_u_ ë

·Êe­M' E `; 5 L>78S+T 5 ;$`'e;$+gS+T 5 ;$^RW787UI]»78 E +e%:U;(e 5 7 5 78Wi0""Cªq678 E +e%:8`M.RWi EÌE +W<>M.9eS+ E 5 W\^e­M. E @;»U9LWi;`;@W<]: 5 ; 5E C l eKKM'W<+e%:GV+M'+RMKp E i+g7G EGE T 5 ; 5 7G'W<+'7 5<Ç M'9 5 ; 5T¼KHD ¹ ½ HDE +e; 5 eM' E ; 5 C^¤7G E RM.:8; 5;$ EGE Jg$78 E8E T 5 ;$+1 E +7dRW 7G7UIV; 5 Y%RM E »; E *vR$:8.M''_>76RW+M'+W<+e%: 5 C f[5 7@ EGEG5 V 5:G' 5 78: 5 7GeL; 5 e0U9Wi;;bM''e933;$+1^:G>7F;.W<+e E T 5 Wi 5 7@Y%R _++7 5 CZ·^M']+W; E8E5 V;$>1p E 1+78 Ç >7 5 :G' 5 ;)g$78 E8E T 5 R E ;) 5 W 5<â eL;$'+VY%Rb;+1 E +7^; 5 :8. 5 'e:8+'7 5 Cm J E8E E ;$R E 5 e;'S È EaE T 5 5 787G+:8W<>e:8»1+78 Ç >; E V%+e%:UT 5)5 :8. 5 ;0g$78 E8E T 5 E >778: 5 7GeL; 5 ]6¦§'M.W<>e:8`+MKRM'; 5 CØO 5 W< E W 5 :8. 5 ;(g$78 E8E T 5 >MKRMK; 'e'+'M.W<>e:8 5 Wî<;$'W)>e E T 5 ;$>+7G>W<+e%:8;0;RWi0Re';;$C

9:;%<:=b>=mDDB © 'F n JO Y Z L K ¥%n G ¥%n G Ù N6G L j Ò H[G vQÓ; [G yîÒ H[G vQÓ; [G v K%N :;&ß6^tÎ G >= HK6Z LUv6L G n KZ ; H\ ×_ HK :Q¥ÙYQ=^Q^cLÕd K ¥%n GPK Dö K© Õe

Page 266: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© %ª §¨X¯© «Q«i

i

i

i

i

i

i

i

o Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

g Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕhi RRtL%=YL J YQ= K6Z n6; [ ;Xn: Z > GZ :;ta Z Y N ;k K D `t¥%n G Ù N6G L j v%n: G Ó6; [G yuv/B G v&n:DQÕFrqFuF RRt^ GTH6 ;Pa;%:A=%::=Q¥Cö(6Fr\ Z a-y K DB [6Z > ä `tscFr_ K%N :;Uß H6G ßcÎ G >= HK6Z LUv6L G n K6Z ; H yuv/B|n;^ Z&K6Z ; H öF|d l?ÙQ= HSH ; KMZbH[G v H ; H =Q:Q:=Q¥Sp=%: Z = O Y G ^l%ÕFreFrg RRín G <= KZ n; [ ;tÝ H[6Z L GFh K© `t¥%n G Ù N6G L j v%n: G Ó6; [G yuv/B G v&n: © ÕFriFrk RRt^ GTH6 ;Pa;%: Z?HK öæQ6\uq Z a-y K© B K ¥êñu`MÒUÓÏ%±Ê9Q ]] K© B [6Z > s\F K%N :;Uß H6G ßcÎ G >= HK6Z LUv6L G n K6Z ; H yuv/B|n;^ Z&K6Z ; H ö\u\ lUÒ H p=Y ZU[AK ¥%n G B Ò H[G vo> J ^ KtO6GSZbHK l&Õ\u_\d : G%K%J : HSHG ß K ¥%n G y K DB K ¥Cö K DB [Z > ¨ DQÕ\ue ë

f E8E 7G>W 5%E V[ 5 7UV J M 5 >S+T 5 ;#RW 5 $v*+: 5 VØ 5 7bW<> 5 ; 5 R EG5 ; 55 t+7U; 5 7¥[_Y;M'.eR+W

X++Cñ? E :8 5 t+7US>T 5 ]7G>7G E >e%:8;e,­7G1 5 78 E .e%:8­:GK+ 5 7iRWþe¯

½MD! BÅcD o ?&½ HD 5 W<]: 5 ; 5 YRa:G7U:8(;$ EGE F:G' 5 ;$ae¯J]aW 5E :G7U; 5 e 5 7 5 78W<3""C Cl eKKM'W<+e%:GV7 5 +R78p E ke^:8t+MK»; EGâ W0 5 M 5%E MK E8E @;»Y%RM E 6;$ E v»78K7 5 5 $v*+: 5 CfZ5 ;$p E Ç >7a+W;7H1%K;<Y%Re%: 5lJ 5%EGE '.M'K;;$J;$V$+W1+_J;$ >e 5 e%:G7U7a3>e:878;);$RWiÍ+M' EGE VP#t E Y%R E Í7G+: 5 78e7^RWiÍ; E >e%:G7U; E ;$3:G' 5%E ­ E K 5%E Vt 5 7(e¯ E .e E >7GK;e#:8t+MKCJ·78 E 5E :8i]0e+%:G'1# 5 E»5 eM. E ; 5 7 E 'e%:8­:GK 5 78>Y%R>7»RWæK;$+e%:8 Ç >; 5 7;$> 5 E ;$¥[_YyVeT 5 ++.:8e; 5 V$ 5 7G:8e%: 5 V$ E MKI178 E 78 E +781; Eð?5 R ³?ËçÁ C

m T 5 +M'+RMK; 5%E@5%E :8. 5E ; 5%E 78RW<+e%: 5E YR E +7UT 5 R$:G'M.'_>; 5E e)U9W<;3; 5 5 e E p:G78R$: 5 7`V+e%:8T 5 V$7 5 R7Up E RW¨ 5 e E :G78R$: 5 7^Y%R++.:G E :8)M' E :8<;$b7GRW<+e%: 5%E C m (¦ 5 7+eL 5 e%:878; 5 V:GR; 5 E :878­b 5 787G+: 5 5 :8. 5 78: 5 78e; 5 L>M 5 W)]+: 5 ; 5 5 W 5 7G E RM.:8; 5 ;$ EGE g$78 E8E T 5 ;bM 5 >S>T 50E +7U­<<MK E8E (7GNRt+7U;3e0:Ut+MKi;$ Eâ W3 5 M 5E e)M'.e9"> C

9:;%<:=b>=mDDB © ®F n JO Y Z L K ¥%n G ¥%n G Ù N6G L j Ó G ß6 OÖ%G L K Ó6; [G yÓ G ß6 OÖQG L K Ó6; [G v\ K%N :;&ß^tÎ G >= HK6Z LUv6L G n K6Z ; H_ ×d K ¥%n GPK Õe HK :Q¥ ÛGQK%N ; [ nÌÕg HK :Q¥= O Y G LÕhi Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕk RRín:;L J :=A=MLQY%=^^ Gt[ = I%J =YS^ Gt[G ^ GÖ =ML&: Z =Q: J >m; OÖQGQK ;Frq LX`SÙ J : K = O Y G BLQYQ=^^Uï ZbH[ èQnÌyuv/B H =b> G B Z >=Q< G ÕFuF RRt^ GTH6 ;t=L N ; J öæFr\ Z a-yîLP`` HJ YY6Fr_ K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öSl?ÙYQ=^^mlÈftv/B H =?> G B Z >=Q< G fF|d l H ; K a; JH[ l%ÕFre

Page 267: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© §¨X¯© «'i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û oo

Frg RR K B K ¥A: G L G&O6G =SY Z ^ K = [GPKZ n;^ [ ;^P=Q:< J > G&HK ;^Fh K `t¥%n G Ù N6G L j v%n: G Z ^ K Ó; [G yuvCBu=Q:<6^ÕFriFrk RRín:;L J := J >zL%; H ^ K : JK ;%:LQ;> G ^^%=t=^^ ZbH = K%J :=\uq Î%¥b> K = O Y G ^T`yyr HK :¥ÙYQ=^^%LB HG ^ KGQ[ Õ\F nA`M^åB > G%K%N ; [ ï ZbH[ Ò H LQYQ=^^y?lULQ; H ^ K : J L K ;%:löyr H6K :¥Q G L K B K ¥Õ\u\ RRt^ GTH6 ;t=L N ; J öæ\u_ Z a-yrnc`` HJ YY6\d K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öSl?Ù; H ^ K : J L K ;%:!líf\ue vCB H =b> G B Z >=Q< G fly?lífy K B K ¥M`` HJ YY³mll­\ug yPy HK :¥Q G L K B K ¥B K ;Î K :yEPfml% H ; K a; JH[ l%Õ\h\ui RRX: GQK ;&: H =cLSLQ;>; K6Z n6;åö [6Z > G&H ^ ;S`PsöÜY;L%=Yt` ¨ Dy H6 ;AY;L%=Y\uk K ` H6G ß K ¥%n G yîLö sÕ_uq : G%K%J : HMK Õ_F ë

· M 5 +S+T 5 ;$-7878I E ] E >W<+M'9e%:GC l e'+'M.W<+e%:8]¦ +.:8àR E >e:8L>M'¬;$EGâ W0 5 M 5%E ;äMK E8E 5 R:8. 5 ­ E ' 5 Y%R< 5 W< È 0+;#>M.>W<+e%: 5 ; 5 7G7UIC»?dW E +R';V78-+;g$78 E8E T 5 Y%Rä E :8­-e&M' E :U&;$äg$78 E8EÈ E e 5&Ç M'9 5PH>³ ; 5 e¯ 5 7G78+e%:GV1>7G Ç >p E E 53E +Ri:8. 5 ] RW.e%:8+'7 5 VRWi1+_»Y%R E8E E +g7G EGEGÈ E ;$>1>WË78+78 E +e%:U75 e=HW)>7 5 ;$J+M'+W<>e: 5E +W>;0RWi<; E ;$'W<+e EGÈ E ; 5 7878IC m »: 5 ; E E +g7G EGEGÈ E¦ 5 78+W ; 5 :G' 5 5 7G78: 5 V+e%:8T 5b5 W<]: 5 ; 5 78: 5 78e7U­ 5 W 5 :G' 5 ;b+g$7G EGE T 5 ;$ M 5 +S+T 5 V5 :8. 5 78>+RL>78; 5 ;:Ut+MKb;$ EGâ W3 5 M 5E 5 W 5 eXHW<+7 5 ;$ ;.W<+e EÈ E .RML 5 eXHW<+7 5;$+g7G EGEGÈ E e 5<Ç M'9 5H> ; 5 e¯i 5 787G>e:8C@¤ W<]+: 5 ; 5 ]W 5E :G7U; 5 e 5 7 5 7UWiÍ""Cª

9:;%<:=b>=mDDB ©%¬F n JO Y Z L K ¥%n G ¥%n G Ù N6G L j Ó G ßÍ::=Q¥QÓ6; [G yÓ G ßÍ::=Q¥%Ó6; [G v\ K%N :;&ß^tÎ G >= HK6Z LUv6L G n K6Z ; H_ ×d K ¥%n GPK Õe HK :Q¥= O Y G LÕg Z ^ K Ó6; [G nÌÕh v%n: G Ó6; [GSI Õi ZbHKPj ÕkFrq Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕFuF RRín:;L J :=M; K6Z n; [ = I%J =YA^ Gt[G ^ GÖ =cL&: Z =%: J >m=Q:Q:=Q¥Fr\ LX`SÙ J : K = O Y G BLQYQ=^^Uï ZbH[ èQnÌyuv/B H =b> G B Z >=Q< G ÕFr_ RRt^ GTH6 ;t=L N ; J öæF|d Z a-yîLP`` HJ YY6Fre K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öSlQ¥%n G l fPv/B H =b> G B Z >=%< G fFrg l H ; K a; JH[ l%ÕFhFri RRín6=Q:=cL&= [ = G v&n: G ^^ ; [ =^ [Z > G&H ^° G ^çö p G : Z a Z L&=c^ GtK6Z n6;t ZbHKFrk a;&:ãy j `Psö(nA`Pv/B [Z >^çÕænòñ` HJ YQYåÕænM`on B H6G v K \uq ×\F K `P¥%n G Ù N6G L j v%n: G Ó; [G ycyv%n: G Ó6; [G on B H ; [G Õ\u\ Z aãy K B K ¥ãñu`MÒUÓÏ%±Ê9 ]Q] K B [Z > ñu`ts6\u_ K%N :;&ß H6G ßcÎ G >= HK6Z LUv6L G n K6Z ; H yrn B|n;^ Z&K6Z ; H ö\d lUÒ H p=Y Z&[MG v%n: G ^Q^ Z ; H a;%:S= H =Q:Q:=Q¥ [6Z > G&H ^ Z ; H l%Õ

Page 268: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& o !)i

i

i

i

i

i

i

i

o Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

\ue j ffåÕ\ug ë\h : G%K%J : HSHG ß K ¥%n G yîLçö j Õ\ui ë

ök*vW 5%E V[ 5 7UVB 5 W 5 ]<¦ >H:Ue­M. E <;iRWi 5 t+7US+T 5 Re­78'V 5 R E *vV[;$iRWe¯); 5 :8. 5cA6Ë=<6½ HD C D MLe¯378+78 E +e%:8 5 R#RWi 5 t+7US+T 5 ;$ e+%S+T 5 78.:GW<]:8'>V 5 RRWi)e+%S>T 5 M'¯'>CZ?dW«W3 5EF5%E + EG5E V$)g$78 E8E T 50EG5 78(<Y%RM 5)5 L>78; 5 7FRe­7G 5]0M''>; 5 ;$>1 E +7(; 5 :8. 5 'e%:G>.7UC^· EGE .WVt E :8Í]3¶He'>i1>7G Ç +S+T 5 78>M.'_>;C m 5:G' 5 ;g$78 E8E T 5 ]#.e%:8+'78 E +W´;$'W)>e E T 5 VÌ:GR; 5 E :8­ 5 7G78: 5 C 4 E5 5 e%:G7U­78 5 VyRW+787 5 ]'e;$K+; 5 Ck= 5 7 5 78Wi#""C / 31+W 5EF5 W<]: 5 ; 5 YR :878:8<;$ E :8J:G' 5 ;$Je¯LC

9:;%<:=b>=mDDBu@QsF n JO Y Z L K ¥%n G ¥%n G Ù N6G L j è H =Q:¥QÓ; [G yrè H =Q:¥QÓ; [G v\ K%N :;&ß^SÎ G >= HK6Z Lbv6L G n K6Z ; H_ ×d K ¥%n GPK Õeg Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕhi K `t¥%n G Ù N6G L j v%n: G Ó6; [G yv/B G v%n:ÕkFrq RRt^ Gt[6Z > G&H ^ ; söæQ6FuF Z a-y K B [Z > sMFr\ K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öSl?ÙQ= HSH ; KTJ ^ GTJH =Q:¥l fFr_ vCB|n;^ ZUK6Z ; H B Z >=Q< G fmlóa;%:A=%::=Q¥6^6l%ÕF|dFre RRt^Qx ZbHK t=L GZ&K ;Frg Z a-y K B K ¥êñu`AÒUÓÏ%±Ê9QFh K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öFri lbÒ H LQ;?>n6= K6ZbO Y GAK ¥%n G a;%: JH =%:¥zl fPv/B|n;^ Z&K6Z ; H B Z >=Q< G ÕFrk\uq : G%K%J : HSHG ß K ¥%n G yîÒUÓÏ%±Ê9Cöós6Õ\F ë

¤ W< E W 5 :8. 5 ;01+78 Ç >S>T 5 ;$>1 E >7 ¦ >H: 5 L7U 5 t+7US È E .e­7GK E 5 W 5zEG5 Wi E VW3RMH:8.M'K+S È E5 Rà 5 W<78S È E ;#1M 5 78 E C l eKK78+W 5%E 5 W´ E3E5 W< E E R$:878S È E V78+78 E +e%:8; E eRWe¯ ¶¯HMH½ H7D CB? E :8»e¯0 5%EGE RL 5 W 5Ç M'9 5%E E ;$R E@E RL+g$7G EGEGÈ E 55 t+7U; 5 7^ E +7(M''>; 5 #+MK E C m +Re; 5 i 5 e E :G78RS+T 5 ¦ +.:8it+M 5 eM' E ; 5 7 E .e%:U­:GK 5 V E :G 5 L>78; 5 7a 5 ;$ E +7»;$ EG5 Wi 5 R; E R:G7US+T 5 C 4 L3 5 W)]+: 5 ; 5 W 5E :G7U; 5 e 5 7 5 p7UWii""C /" 1+78 Ç +7 E 5%E :8. 5E ; E g$78 E8EÈ E 505 L>78; 5 7F 5 W0'eW;$:8+78W<.e75 :G' 5 ;$7G+: 5 7Ge 5 Ck·\1>7G Ç +S+T 5 ¦ +.:8<]L E :8e%:8 E 'W)M. E C m T 5 +M'+RMK; 5%E65%E :G' 5%E ; EE RL+g$7G EGEGÈ E `]`78>RL>78; 5J5(5 L>78; 5 7kY%R` 5 ;$ E +7 ´ » ;5 R Êç¼½; ù§ 5 e E :8e%:8 E ;$+pÇ eK; E e 5 eM. E ; 5 7 E .e%:U­:GK 5 ú Ck?dW E +R';V1+78 Ç +p E E M'RWi<; E`E Rtg$78 E8EGÈ E 5E8E RØ;$.W<>e E T 5 W< 5 7^Y%R_+>7 5 V 5 Y%R]RW«+787 5 Cd·\7G:G'7^;<M'.e9#$" E T 5 5 e:U; 5%EY%Re%: 5E ; 5%E`5 t+7Ue; 5E`E T 5 ; 5 :G' 5 .e%:8+'7 5 bY%Re: 5E`E T 5 ; 5 :8. 5#E :G78.eLC6·\17GK­I1>M ]iR E ;z78 5 e%:87 5%E .e%:G>.7 5E # Å VÌL7Uz 5 e%:87 5E ; 5 :G' 5E :87G'eC#· EGE 'WäV 5 e¯]1­M''; 5<E

Page 269: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© ' §¨X¯© « ¬i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û oq

• i == 2, j == 0u:G>W 5%E EG5 Wi 5 R E R:G7US+T 5 ;$i; 5 E 'e%:G+'7 5E Vy 5 78 E RMH:U; 5 ]

RWî'e:8+'7 5 m• i == 1, j == 1

u:G>W 5%E RW E :G78.e E5 W<; 5 5 R E R$:878 â ; 5 ;$#RW´'e:8+'7 5 ù 5 R1K+pX1+7 E %ú Cd· 5 t+7US>T 5<E ¯<]1M'K; E 5<5 L>78; 5 7F¦ 5 7 ;$ E5 WiV$78+78 E +e%:8e; 5 5 e>:8+eS+T 5 ; 5E :G78.eJ 5 WË(78+78 E +e%:8S+T 5 :G+g%:8RML; 5 e=HW)>7 5 ù§ 5 W 5 +W °I1úC¤78 E RMH:U; 5 ]RW E :87G'em

• i == 0, j == 2uä:G>W 5%E ; 5 E E :G78.e E C m ¯z]01­M.K;Íz 5 e+:G+eLS+T 5 ù EG5 Wiú^+e%:G78

>M. E C6¤\7G E RMH:U; 5 ]JRW E :G78'eC

¤e 5%EGEG5 5 W<'MK; 5 7(eLT 5 >H:U 5 R$:G7U E(5 L>78S È E ;$ EG5 Wi% E R:G7US+T 5 C fZ5 7J+g>W)pM 5 V%eT 5 >H:UV 5 W 5 +W°%I1IV EG5 Wib;»RW 5 $v*: 5 ;$ Y%RM'Y%R>7d:8. 5 5 WRW E :87G'eLV5 Y%R<7G>78 E +e%:8 5 e+:G+eLS+T 5 ; 5E :87G'e 5 W 5 78 E RMH:U; 5 ;U9Wi; 5 W<]: 5 ; 5S\ ° SXd:b[7 '3EG5 7G)Y%R+M' 5 $v*+: 5 C3?dW

X++V 5 7 5 78W<; 5 7^;+1)g$M'K.:8W<>e:80+gp

:G7U'7J#78+78 E +e%:8S+T 5 ; 5Í5 $v*: 5 eͦ 5 78Wi#;$)RW E :87G'eLVtL7UVt+e%:8T 5 VP 5 ;$>7JR$:G'M.'_>­pXM 5+W¨RWi< 5 eL+:8+eS+T 5 C

9:;%<:=b>=mDDBu@DF n JO Y Z L K ¥%n G ¥%n G Ù N6G L j Í [[ Ó6; [G yuÍ [[ Ó6; [G v\ K%N :;&ß^tÎ G >= HK6Z LUv6L G n K6Z ; H_ ×d K ¥%n GPK Dö K© Õe ZbHK ;bnÌÕÜRRS;bn G :=!² ;g ZbHKcZ ö Ö Õhi Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕkFrq ;UnA`tv/B|n6;^ Z&K6Z ; H B jZ?H[ ÕFuF K D `t¥%n G Ù N6G L j v%n: G Ó6; [G yuv/B G v&n:DQÕFr\ K© `t¥%n G Ù N6G L j v%n: G Ó6; [G yuv/B G v&n: © ÕFr_F|d RRt^ Gt[6Z > G&H ^ ; söæQ6Fre Z a-y K DB [6Z > s ]]üK© B [6Z > scFrg K%N :;&ß H6G ßMÎ G >= HK6Z LUvL G n K6Z ; H yuv/Bn;^ Z&KZ ; H öAl?ÙQ= HSH ; KTJ ^ G l fFh vCB|n;^ ZUK6Z ; H B Z >=Q< G fmlóa;%:A=%::=Q¥6^6l%ÕFriFrk Z ` Ö `SsåÕ\uq\F Z a-y K DB K ¥M``MÒUÓÏ%±Ê9Q\u\ Z ffÕ\u_ G Y^ G\d Z a-y K DB K ¥M``AÎ%%ÒUÓÑÏ&±Ê9\ue Ö ffÕ\ug\h Z a-y K© B K ¥M``MÒUÓÏ%±Ê9Q\ui Z ffÕ\uk G Y^ G_uq Z a-y K© B K ¥M``AÎ%%ÒUÓÑÏ&±Ê9_F Ö ffÕ_u\_u_ RR [ ; Z ^S;bn G := [ ;%: G ^ ZbHKGZ :;çö3

Page 270: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© Q® §¨X¯© 'Qsi

i

i

i

i

i

i

i

o Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

_d Z a-y Z `` © _ue : GQK%J : HSH6G ß K ¥%n G yÒUÓÏ%Ê9/ö3sÕ_ug_h RR J > ZbHKGZ :; GoJ >z^ K : ZbH </BÜÎQxon; [G ^Q;?>=%:_ui Z a-yÜ;Unc`Q`SYQ= H <ÔÙ; H ^ K = HK ^åBr9Qè6ÎiÃà Z f Ö `` © _uk : GQK%J : HSH6G ß K ¥%n G yÎ%QÒUÓÑÏ%±Ê9Q/öÈs6ÕdqdîF K%N :;&ß H6G ßcÎ G >= HK6Z LUv6L G n KZ ; H yuvCB|n;^ ZUK6Z ; H ötlUÒ H p=Y Z&[AK ¥%n G ^Pa;%:zlÈfd\ vCB|n;^ ZUK6Z ; H B Z >=Q< G Õd_ ë =»T 5 5 7U;7G>W 5%Ek5 W<]: 5 ; 5 Y%R :G7U:Ub;$»W0RM.:G'M.K+S+T 5b5 RÍ;.1 E T 5 V% 5 E ]»7GNK; 5

5 W 5 W<]+: 5 ; 5 ; 5 7 5 7UWi""C /"Vk 5 78]+W Wi E0E 'W)M. E V6RWi&1+_zY%R EG5 W<+e%:G E T 5++.:8 E g$78 E8EGÈ E ; 5 :G' 5 .e%:8+'7 5 C f E8E 7G>W 5E V+e%:8T 5 V JE g$78 E8EÈ E 7G>M' 5 e E V:878p:8; E L>M 5 W)]+: 5 ; 5 ; 5 7 5 7UWiä""C /%$Ca=^ E :83W<]: 5 ; 5ÍE T 5 ¦ +.:8 E ;$'1>7 E E 1+78 Ç +S È EY%R(:G>e:U78+W 5E +g$M.K+7` E +R'7>

•M''e9#">Z;$R E@E RL+g$7G EGEGÈ E 'e%:G>.7U E 5 ;$>W E >76 5 W<7U; E ;$ Y%RM'Y%R>7d¦ 5 7GWiùY%RMKY%R+7 5 t+7U; 5 7UúC ¤:G' 5 7G+: 5 7Ge; 5#E +7U­ E >W<7G3.e%:G>.7 5 VtRWi#1+_3Y%R

X++

eLT 5 5%EGE R 5 :8. 5 55 M.Ne 5 m•M''e9<">Ø E[E Rtg$78 E8EÈ E ;$+1+W\:8+7d E W< E Wi E ;.W<+e EÈ E C l EGEG5 5 78Y%R 5 v*: 5%E#7G7UI E E ¯ 5 ;+W E +7b 5 W<78; 5E Y%Re%: 5JE Rä.RMK;;$ù 5 t+7U; 5 7 ºyº ú 5 R; E .RMK;;äù 5 t+7U; 5 7 º ú VÌ 5 7 E8E5 V 5 $v*+: 5%E 5 W ;.W<+e EÈ E ;$.¦ +78+e%:8 EE T 55 1%KW<>e:8;$H¦ >7G>e%:G E V 5 7G:8e%: 5 VeT 5 ;$>1>W E >7^ 5 W)L7U; 5%E m

•M''e9i/[7G7UI EdE ¯) 5 ;+W E +7` 5 W)L7U; 5%E Y%Re%: 5J)E R3.RMK;;$» J ; E .RM.p;;$V 5 R$:87 5%Ea5 t+7U; 5 7G E +7UW RW¨+787 5 m

•M''e9¬/ ; 5 E#5 $v*: 5E 5 ;$+W E +7Í 5 W<7U; 5EiE ¦ 5 78+W ;,W< E WiàMK E8E 5 RRWî¦ 5 7 E RPMK E8E b; 5<5 R$:87 5 CF¤ W<]: 5 ; 5S³&;:B CA³³ 78: 5 78e)1>78;;$+'7 5 :UW3t]+WY%Re; 5#5%E ; 5 E :8. 5E(E T 5 .R E V 5 R E *vV E J:G'1>7GW 5E ; 5 E^E :G78.e E^E +e; 5 5 W<p7U; 5E VL>M. E(E +7UT 5 1+78 Ç +; 5E Y%RC f 7U#>M. E EG5 W<>e:80 5 W<7US>T 5 ;$)'RM';;$5 R;$ E .RMK;;$ 5 ;$ E +7a¦ +.:8m

•M''e9ä/o$a E :8nHM.:G'W 5 + E5 1+78 Ç + E 0Í 5 W<78S+T 5 ]3+e%:87G0RW 5 $v*+: 5 5 :G' 5 ^± aMa Y%RF7G>78 E +e%:8 ( 5 e E :8e%:Gª[=chXhCÌ=^ EGE a+ EG5 :8W0L]>W EG5 W<+e%:GF'RM';;$b; E .RMK;; 5 ;$+W E >7^ 5 W<78; E C

9:;%<:=b>=mDDBu@ ©F n JO Y Z L K ¥%n G ¥%n G Ù N6G L j G YQ= K6Z ; H =Y&Ó; [G y G YQ= K6Z ; H =Y&Ó6; [G v\ K%N :;Uß^tÎ G >= HK6Z Lbv6L G n K6Z ; H_ ×d K ¥%n GPK Dö K© Õe ZbHK ;bnÌÕÜRRS;bn G :=!² ;gh Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕik ;UnA`tv/B|n6;^ Z&K6Z ; H B jZ?H[ ÕFrq K D `t¥%n G Ù N6G L j v%n: G Ó6; [G yuv/B G v&n:DQÕ

Page 271: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& o !)%q"i

i

i

i

i

i

i

i

ÎZÜ^ÚOu+Ô(Ö[Û6Ïwvvyx)Ü»Ò ð»ÛB×Ó7¿ÊÓX¿@Ð ¸ Ò0Ô[×+ÎZÜôx0ÚyÜ»Õ`Ô@¿ÉÈ[×*Ò»Ü Û o

FuF K© `t¥%n G Ù N6G L j v%n: G Ó6; [G yuv/B G v&n: © ÕFr\Fr_ RRt^ G =b> O ;^S^ ; ZbHK öæ: GQK ;%: H =MF|d Z a-y K DB K ¥A``MÒbÓÏ%±ÊQ9®Ãà K© B K ¥M``SÒUÓÏ&±Ê9zFre : GQK%J : HSH6G ß K ¥%n G yÒUÓÏ%Ê9/ö3sÕFrgFh RRt^ G = [Z > G&H ^ ;t [6Z a G : G&HKG ö Fri Z a-y K DB [6Z > ñu` K© B [6Z >Frk K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H ö\uq lÙ= HSH ; K LQ;?>n=Q: G ; OÖ%G L K ^Xß Z&K%NM[6Z aa G : GUHKM[6Z > G&H ^ Z ; H ^6l%Õ\F\u\ RRt^ Gt[6Z > G&H ^ ; sö3^%xXn; [G LQ;?>n6=%:=Q: Z < J =Y [ = [G\u_ Z a-y K DB [6Z > s ÃÃM;bnòñu`SY%= H <ÔÙ; H ^ K = HK ^åBr! ®ÃÃ\d ;Unòñ`SYQ= H <ÔÙ; H ^ K = HK ^åBrÓ" \ue K%N :;Uß H6G ßcÎ G >= HKZ LUv6L G n K6Z ; H yuv/B|n6;^ Z&K6Z ; H öSl?ÙQ= HSH ; KTJ ^ G líf\ug vCB|n;^ ZUK6Z ; H B Z >=Q< G fmlóa;%:A=%::=Q¥6^6l%Õ\h\ui RRt^ Gt[ ; Z ^S^ ;t; OÖQGQK ;^ [ ; > G ^>; K6Z n;åö(n; [G LQ;?>n6=Q:=Q: Z < J =Y [ = [G\uk RR Z ^^Q; Z?H LQY JZX[ ; Z ^S^ K : ZbH <^_uq Z a-ySy Z ^QÎ JO ÙYQ=^^çy K© B K ¥ö K DB K ¥ ]]ðZ ^QÎ JO ÙYQ=^^y K DB K ¥Cö K© B K ¥mÃÃ_F y;UnM``SYQ= H <ÔÙ; H ^ K = HK ^åBrÓ! ]] ;Unc``tYQ= H <ÔÙ; H ^ K = HK ^åB|" 6m_u\ : GQK%J : HSH6G ß K ¥%n G yÒUÓÏ%Ê9/ö3sÕ_u__d RRt^ GTJ >S; OÖ%GQK ; G ; JK :;åö HQJ YYåö(n6; [G LQ;>n6=Q:=%: Z < J =Y [ = [G_ue Z a-ySyty K DB K ¥ ZbH ^ K = H L G ;%aS HK :¥ÙYQ=^^nÃà K© B K ¥M`Q`TÓQèQ6Ï%±Ê9Q ]]_ug y K© B K ¥ ZbH ^ K = H L G ;%aS HK :¥ÙYQ=^^nÃà K DB K ¥M`Q`TÓQèQ6Ï%±Ê9QMÃÃ_h y;Unc``AY%= H <ÔÙ; H ^ K = HK ^åBrÓQ" ]Q] ;UnM`Q`AYQ= H <QÔÙ; H ^ K = HK ^çBr" 6c_ui : GQK%J : HSH6G ß K ¥%n G yÒUÓÏ%Ê9/ö3sÕ_ukdq K%N :;&ß H6G ßcÎ G >= HK6Z LUv6L G n KZ ; H yuvCB|n;^ ZUK6Z ; H ötlUÒ H p=Y Z&[AK ¥%n G ^Pa;%:zlÈfdîF vCB|n;^ ZUK6Z ; H B Z >=Q< G Õd\ ë

11.5 Arquivos-fonte do compilador= 5 ;.78:8¯78 5 9M00%Qc!#:¼ü± ü2¦ 5 7UWï;$'+ 5 e; 5E5E 78Y%R'1 5%E ÷79!­$% 8 9 8VtYRJ 5 e%:I>WV$7G E t>:G'1IW<+e%:GV<+M' EGE Ç<NËD D oÉ;$ E +7G.:80e E :G> â :GRM 5 MK E8E ?<NËD R$:8.M'._N;ä78z78+78 E +e%:87»RW :G' 5 <RWi;$'W)>e E T 5 VÌ+7UM'W<+e%:G07U78Wi_>+e7 5 78 E RMH:U; 5 ;$JRWi<+g7G EGE T 5 C= 5 ;$'7G+:G¯7G 5 !19L V'eM'R â W 5E[5 78Y%R'1 5 ü±c*.6 .)!"XüG.¼ý 4 á8#Y%RF 5E p

E R`M'Re E +787 5E)E >W<®e%:GK 5E Vd;$+:G>:8­I1+ E e E :U¦§ E ä;e­M. E C 465 e$¦ 5 7GW<zW 5%E :878-g$NRS>T 5 E +R'7>V 5%E +787 5%E 'e%:G7 5 ;R_+K; 5E ¦ 5 78W

•5 5 W<e; 5 d_&S=7d&[ E +We>e9RW78RW)>e%: 5 ¦ 5 tR$:8.M'._N; 5 ;$+e%:87 5 ; RWW<]: 5 ; 5Y%Rb;+1>7GK07G+: 5 78e7FRW.e%:8+'7 5 m

•R E5 R$p E d` 5 W<7US>T 5 h=_==S3¢ VNda1I7GK­I1>M&h=_&=S^]kRW 5 $v*: 5 ; 5 :G' 5 g:b[7SXd_=_LV 5 7G:8e%: 5 eT 5 5 ;$+78' E +7` 5 W<7U;) 5 WRW¨e=HW)>7 5 'e%:G+'7 5 m

Page 272: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !)%qi

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

•e 5 5 WieL; 5 T7d:b[7S3¦ 5 P¦ +.:8<0 5 e>:8+eS+T 5 ;$JRW 5 $v*: 5 5 W RW E :G78'eV 5 Y%R]7 5 .K; 5 m

•¦ 5 R$:8.M''_>; E >R'e%:Gag$78 E8E T 5 S¢¤[_Ygb[7S=d_X_ YeÑ V»MK E8E «gb[7S=d_X_eLT 5 5%EGE RyRW« 5 e E :87GR: 5 7` 5 W¨; 5 E 78RW<+e%: 5E C

· E W<>e E >e E ;; E L>M 5 5 W<'M'; 5 7 E T 5 E`E +R.e%:8 E

`^T X ©X^&]7^T^&di_&dªZh=^[7RZXZ6WiXi^fTch=_i&Wgb[7S&d_X__dXd\=i_f^[7Scb=`\7^i_ Z 7óXó ² \fTbh=_d_di7b\[ Z ~X= _X^&ab[7¤&d\f¦bh=_ ZXZ6WiXi^fTch=_i&Wgb[7S&d_X__dXdX\c=i_f^[7Scb=`\7^i_ Z ZZZa _ b=`^7h dXd\di7\X[7a!°& [7S^`S:b=` dXd\&diX\X[aa b[_ =~ `\7hf[ ~X~ U _&S=7d=[£_ T7d_i=i7b\[d_ bd_=aa b[_ `\7hf[ OU ± [7]^7hbaS T_iX\&d3¢a b[_ = `\7hf[ % U ± [7]^7hbaS T_iX\&dóa b[_ `\7hf[ U ² \[:iSXd=`S\&dgb[7SXd7_X_ a7^S^ËÑpb[7S [\&S7\X[a-° _f:^[XS:b=` d=d\&di7\X[a TXQ^i_

Page 273: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& " !)%q/i

i

i

i

i

i

i

i

Capítulo 12Geração de Códigoj[.eLM'W)>e%:G3U9>W 5%EVJ ¦§ E 3;$>78S+T 5 ;$0¯$;$' 5 C l 7G>W 5E R$:8.M''_>7 Y%RBRWi# 5 78;p>W E :8e:8 E .W<M' E VPWi E YR0;78­# 5 M'+.: 5 7(RWiz 5 #e 5 S+T 5 ;$) 5 W 5 #>78S+T 5 ;$¯$;$' 5 ]^¦ +.:8V$M']+W ; E :8 E ¦§S>T 5 ;$ 5 ;$>761+7 E >R E 7 5 7UWi E

X++V% 5 W<'M'; 5E 5 W

E +Rä7G¯78 5 5 W).MK; 5 7>V78>M.W<+e%:8(+g$>R:8eL; 5 C½`:8.M'._N78+W 5E 5 W 5 Wi­Y%R'epwM'1 5 #s­Y%R.eL0ö .7G:GRLMØ°%I1V 5 R°ö sÙù°I1)ö»'7G:GRM

sU9.eNú Vt 5 W 5 ÍU9Wi78+W 5%E Y%RXCF·R$:G'M.'_>S+T 5 ;#°ö(s´L>7GW<.:G)YRb;$+.g$+W 5E ;$MK; 5 ;$'1>7 EG5E E t>: 5E 5 W<M''>; 5%E ;<>78S+T 5 ;$b+¯$;$. 5 V 5 W 5 M 5 +S>T 5 ;$78+ E :G7Up; 5 7G E V[M 5 >S>T 5 ;$#W<+W<¯78K7Uä1I7GK­I1> E +:8Cä·°ö s 5E8E Rk:G7U:UW<+e%: 5 *e:G'1 5 78 5E :8. 5E ;$#;; 5%E R:G'M.'_>; 5E >W

X++ù 'e%:G+'7 5 E :G78.e%ú V 5 Y%R):UW3t]+W ¦§+.M'H:U

W3RH: 5Í5 :878M'9 5 ;Í>78S+T 5 ;0¯$;$' 5 C»·^M']+W ; E8E5 Vt E t>: 5%E ;$0:G>W) 5 ;3g$NRS>T 5 5 W 5 M'.eº>;'S>T 5 ;.e®W<'>Í>e:87G< E +M' EGE E >78; E V E T 5 ;$<78 E 5 e E 'M.K;;$b: 5 :8Mk;°ö s,Cl eKK78+W 5E5 > â :GRM 5 V[>e%:8T 5 VØ 5 WÿRWiLNY%R+e.e%:G7 5 ;$RS>T 5J °ö s,V[YR#1 E

g$M'K+7iW<>M.9 5 7 5,E >RѦ Re 5 eW<+e%: 5 EiE R E .e E :G78RS È E Cñc^> 5 W<+e;p E V6 5 7G]>WVY%R 5 M'+.: 5 7# 5 e E RM.:G E 7G+¦ +7I+e+' E E LN â.Ç + EiE5 78 5 EGE Re%: 5 78 5 $:G>7iW< 5 7G E;$+:8M'9 E CË?dW E >RK;V E >78­¬78 E +e%:8;:8W3t]+W RWià'e%:G7 5 ;$RS+T 5 5 ° E W<'eBV`RW7 5 78W<W 5 e%:8; 5 7Y%R3L>7GW<.:G3+7U7»+¯$;$. 5 78iz°ö(s i7:8.7(;$3RWæ78Y%R'1 5:G+g: 5 V 5 e%:G>e; 5 <;$ E 78KS+T 5 ;$RWi<MK E8E (J'e E :G78RS È E °ö sàC?^VB 5 7 Ç WVÌ7G E >e%:878+W 5%E z.W<M'+W<+e%:US+T 5 ;ä+7US+T 5 ;$<¯$;$' 5 i; 5 78Re%:G'W<

X++C

12.1 A Máquina Virtual Java· E t> Ç >S+T 5 5 W<M':U);)°ö sÿ 5 ;$ E >7a+e 5 e%:G7U;0e 5 M'.17 5

D 9b°I1)ö»'7:8RMBs&U9'e E LN Ç +:G 5 eBV;$ D 'W¨AÌ.eL;$9 5 M'Wîbj78eº#§d>M.M'.eùd

aN;yC.VL·`;;$ E5 e E M.>VB"Nú V

:8W3t]+W«;$ E 5 e â 1>M 5 e$prM.'eJ+WÎ$X59 Q"Q8"L 7¯±!=Q:&'Q:(Q'!9yQLü±:&8M5$X!¼C"

Page 274: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !)%qIi

i

i

i

i

i

i

i

% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

? E8E ` E t>+ Ç +S>T 5 7G E >e%:8VN;$dWie+'78` 5 W<M':8V 5 W 5 ;$>1 E +7Ø`.W<M'+W<>e:US>T 5;$bRW<Í°ö(s,VLY%RM'Y%R>7»Y%R E *v#iM':8¦ 5 7GWiC6?dMK#;$ E +7G>1V+e%:G78 5 R:G7U E >7U :8+7 â'E p:GK+ E

•5%E :G' 5%E ;$b;; 5E :878:8; 5E L>M'i°ö sm

•5 5 ev*Re: 5 ;$'e E :87GRLS È E b 5 W 5 ] 5 5 W< 5 7G:8W)>e%: 5 ;<°ö(s 5 g$NR$:U7^+;RW<i;+MK E m

•5 ¦ 5 7GWi: 5 ;$RW¨78Y%R'1 5 g$>+R$:8­I1+Mdù§RW¨78Y%R'1 5 C +M' EGE úF;i°ö(sm

• 5 W 5 ¦ Re+ 5 e 5 7 5 EGEG5 ;$b+7G78+%W<+e%: 5 V'eKKM'._NS+T 5 JM'.eº>;'S>T 5 ;$MK E8E EeLi°ö(s,C

4 ;ò78Y%R'1 5 g$NR$:U­I1+M;ò°ö s¾ù :8W0L]>W U9LWi; 5 L¡OL8ú;$ E +7G>1RWiMK E8E C<=^ E :G#78Y%R'1 5 g$ E :8+W M.RWi E ;$ E +7GKS È EJEG5 78<ä+M' EGE E >W E V[ 5 W 5 (Y%RM] E R E Rt+7UMK E8E );$)Y%RMZ7UY%R.1 5 pX¦ 5 e%:GJ>M'#¦ 5 [+7U;VLz;$ E 78KS+T 5 ; E 1I7GK­I1> E ;$'e E :U®e+'VÌ178K­I1+ E ;$#+M' EGE VØW)]+: 5 ; 5%E Í 5 e E :G78R$: 5 7G E ;$ E8E +M' EGE i:UCz· E 178K­I1+ EE T 5 ;$ E 78H:U E >W ¦ ReS>T 5 ;$

•E +R#:G' 5 VY%R» 5 ;$ E >7@RW :G' 5 ­ E K 5 V E R 5 7G:8; 5 L>M'0°ö(s,V% 5 W 5 ü±c))ü= VLXüV XVªVVV 5 R&RW<+M' EGE )Y%R) 5 ; E +7ä78¯78KÍMK E8E 0;$ Ç eK;äe 578Y%R'1 5)5 Rä+W«M'RW 5 R$:87 5 7UY%R'1 5 ;bMK E8E &m

•E R E 7 5 78.N;;$ E V$ 5 W 5 9¼üGV79))V79 ü± V¡O¼V XüGJ:UC

4 ;zW<]: 5 ; 5 < 5 e E :87GR$: 5 7NVyM']+W ; 5 :G' 5 <;#7 5 7G'>;;$VPeN EGE H:UWæ;$ 5 R$:878 E'e$¦ 5 78WiS È E L7U E +78+Wî 5 W<M':UW<+e%:GJ E t>+ Ç >; 5%E CZ?de%:87G>M' E V:8+W 5E

•5%E :G' 5%E ;$b>;07U®W<+:G7 5 E t+7U; 5 t+M 5 W)]+: 5 ; 5<5 R 5 e E :G78R$: 5 7'm

•5 eXHW<>7 5 ;$178'­I1+ E M 5 + E Y%R 5 W<]: 5 ; 5 R:G'M.'_>m

•iMH:8R7U3Wi­g$'Wi)Y%Rb)'M'9<;$g$>+RS+T 5 ù§1>7^;$Ke%:GIúF:G'em

• E .e E :87GRS È E VYRb;$ E 78+1+W 5 5 W) 5 7G:8W<+e%: 5 ; 5 W<]: 5 ; 5 m

•RW<):Ut+MK<;$ E 78+1+e; 5 5 W 5<E T 5 :G7U:U; E E g+>S È E ;$+e%:G7 5 ;$ E :GW<]: 5 ; 5 m

•RW<`:8t+MK^Y%Rd78+MK+ 5 e`+;a'e E :87GRLS+T 5 ; 5 W<]: 5 ; 5 5 WêRWi`M'.e9`e 5 7 5 7UWip¦ 5 e%:Gm

•RW<3:8L>M'0Y%R»78+MK+ 5 eb+;178K­I1+MLM 5 >MR:G'M.'_>;bt+M 5 W<]+: 5 ; 5 5 W 5 e 5 W<;RWi<1I7GK­I1>MLM 5 +Mye 5 7 5 7UWipX¦ 5 e%:8C

=^>W : 5 ; 5%E E8E E ;; 5%E E T 5 E8E >eK E e;$ E 78'S>T 5 ; 5E W<]: 5 ; 5E(5 R 5 e E :87GR: 5 78 E CfZ5 7[g$+W<M 5 V^:8t+MK(YR@78+MK 5 eL^ E 178'­I1+ E M 5 > E 5 W e 5 W< E e 5 7 5 7UWip¦ 5 e:8k]H$:8.MP78;$>R7US>T 5 VWi EFE R3R E I+e+'beT 5 'W<LN;$J3 5 7G78:UJg$>+RS+T 5 ;$(RWW)]+: 5 ; 5 C2 ReL; 5 RW\7 5 7UWi`]Fg$>+R$:8; 5 eL °ö s,VRW\W)]+: 5 ; 5 ]d 5 e; 5 kW<>;$Ke%:G E R

U9W<;b>W RW 5 R:G7 5 W<]: 5 ; 505 RÍW<>;$Ke%:8 E R)U9Wi;L>M'078¯78K3°ö s,V$+ E5 +M'E *v 5 W<]: 5 ; 5 78.e+.LMÌ; 5 7 5 7UWiV 5 R E *vV 5 W<]: 5 ; 5 iS7^&S:b=`TX=gchb=`]\baf:^cb[

Page 275: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& / !)%qoi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ /

° S=d:b[7VÒ)Ó C D 5 ; 5 W<]: 5 ; 5 5E8E RtRW<3.e E :87GRS>T 5 .eKKMXV 5 R E vV$+;W<]: 5 ; 5 5E8E Rt+eL E RW 5 e%: 5 ;$Í>e:878;C· E 'e E :87GRLS È E0E T 5 g$>+R$:8; E eL E NY=kI+e+'&YRÍp78>>W¨e 5 W<]: 5 ; 5 V E M.1 5i5 1'W<+e%:G3Y%Re; 5ÍE T 5 g$>+R$:8; E .e E :G78RS È E ;0;$ E 1 5 VP;$U9W<; E ;$JW<]: 5 ; 5E`5 RäY%RJMKeS>W+g>S È E C2 ReL; 5 78>++t 5 5 e%:87 5 M.F;$6+g$>RLS+T 5 V 5 W<]: 5 ; 5 5E8E R;R E ­78> E 78 E +781I; E 7U

E RWi­7GN 5 e;$ E T 5 78Wi_+>e; EJE RL E 178'­I1+ E M 5 + E iRW<­7GNÍR:G'M.'_>;7Ug$NR$:U7 5 t+7US È E CZ·ê78.W<+'7U3]JRW1: 5 7`Y%R E .e E :87GRS È E +e;+78>S+W;$'7G+:8W<>e:8R$:8.M'._Ne; 5 V$783 E8E5 V 50â e;$K;$>;0+M'+W<+e%: 5 ; 5 1: 5 7NCØO2e E8E (1: 5 7`Y%R E T 5 :8W)pt]+W´78W<_+>e; 5%E(5E 78RW)>e%: 5E L E8E ; 5E 78 5 W<]: 5 ; 5 Cz= 5 + E5 ;$#W<]+: 5 ; 5E ;$MK E8E #ù E :8­:GK 5%E úV 5E 78RW<>e: 5Ea5 RW E 7G'W<+'78 E 5E 'S È E ;$ EGE b1+: 5 7>C`= 5 + EG5;$)RW W<]: 5 ; 5 ;)'e E :8®eK-ù§eT 5 E :8­:GK 5 ú VyÍ 5E KS+T 5 _+>7 5 ] 5 +R;Ít+MKÍ78¦ >7I>eK 535 $v*+: 5 pwM'1 5 ;0U9Wi;J 5%E 78RW)>e%: 5E@E T 5 78Wi_+>e; 5E 7:8.7F;b 5E KS+T 5 RWäC½^Wî1IM 5 7F7GWi_++eL; 5 e 5 1+: 5 7F;$J178K­I1+ E M 5 + E 5 ;$ : 5 Wi7FRW 5 Rä; 5 E E S 5E ; 51+: 5 7>V$;$>L>e;$+eL; 5 ; 5iE >RÍ:8. 5 Cd½»Wî>M.>W)>e%: 5 ; 5 :G' 5 'e%:G+'7 505 RzRWi<78¦ >7I>eK00RW5 v*: 5 : 5 Wi<RW HeK 5 E S 5 C D ' 5%E 5 W 5 M 5 e 5 R; 5 RM.b: 5 WiW¨; 5 E E LS 5%E V$Wi EE T 5E >W<7Gi>e;$>7GNS+; 5E t+MK E 'e E :G78RS È E R$:G'M.'_>e; 55 eXHW<>7 5 ; 5 7G'W<+'7 5 +M'+W<>e: 5Y%R 5 +RWæe 5 1: 5 7>C=» E :G<+ EG5 VPRWiz.e E :87GRS>T 5 YR) E8E 0;$'7G+:8W)>e%:G 5E +Re; 5+M'+W<>e: 5 ]#'M.>MXCz· Ç R7U"NC."<W 5E :G7U 5 e Ç R78S+T 5 .e'+'M6; 5 1: 5 7b;$#178K­I1+ EM 5 > E ;$0RW¨W<]+: 5 ; 5 ;$)MK E8E 3RWæ;$b'e E :U®e+'C`· E 5E KS È E .eKKM'W<+e%:G3eT 5i5 Rp; E ; 5 1: 5 7 E T 5 R:G'M.'_>; E L7U(7GWi_++eL7d E 1I7GK­I1> E M 5 + E `1M 5 7G E :G>W) 5 7U­78 5E; 5 W<]: 5 ; 5 CiS^S:b=`]\cbaÊf ñ_&S=Q\=a b[XS ѯh=\[Xö

ZXZXZÌ

Variáveis locais

0

n

1

2

3

x

k

]\baf ñ_&S&Q\=a b'[7S Ñðh=\[7ö

ZXZ=ZÌ

this

Variáveis locais

0

n

1

2

3

k

x

j['R7Uä"NC."»u#?kg$+W<M 5 ;$M 5 >S>T 5 ;$78RW<+e%: 5E e 5 1+: 5 7^;(17GK­I1> E M 5 > E C

¤Ñ E S 5 78 E +781; 5 78»^78>M''_>S>T 5 ;$ 5 t+7US È E ¦ ReL 5 e»e`¦ 5 7GWi»;6RWi».M'9C· W< 5 7GK3; E .e E :87GRS È E R$:G'M.'_> 5E 1M 5 78 E 78Wi_+>e; 5E e 5)E +RÍ: 5 5 5 W 505 t+7Ue; 5%E37GWi_>+e E +R E 7G E RMH:U; 5%E :8W3t]+W«e 5 : 5 5 ;$ E :8i.M'9C D 5 W<+W 5%E 5 W 5 g$+W<M 5 'e E :87GRLS+T 5 üGaY%R6: 5 Wi»; 5 E 1M 5 78 E .e%:G>.7 5E 5 W 5»5 t+7UeL; 5E 67 5 ;$R_F 5 W 5 7G E RM.:8; 5RW1M 5 7Ø'e%:G+'7 5 Y%RF]` EG5 Wi(; 5E ; 5 E[5 t+7UeL; 5E Cá2 Re; 5 EGE .e E :G78RS>T 5 ]a+gNR$:U;V'M.9L;$+1<:G+7NVÌt+M 5 W<+e 5E VØ; 5 E >M.>W<+e%: 5%E 5E ; 5 E +M'+W<+e%: 5%E Y%Ri E :G'1>7G>W e E 5E 'S È E e 5 : 5 5 ;Í'M'9;$+1+W E +7(.e%:G>.7 5E C 465 W 5 78 E RMH:U; 5 ;z.e E :G78RS>T 5 V 5%E ; 5 E+M'+W<>e: 5E Y%R3 E :UI1IW¨e 5 : 5 5äE T 5 78:8.7U; 5%E Vt#'M'9Í;$N78 E 3;);$RL E ReK;;$ E 5

Page 276: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& , !)%qi

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

1M 5 7^ 5 787G E 5 e;+e%:G JiE5 Wi);Y%R+M' E 1M 5 7G E ]V>e:UT 5 V+W<'M.9L; 5 C@= 5<Ç eLMXViM.:GR7U;.M'9 Ç >RWiRe';;$#'e$¦ >7G 5 7 J Y%R+MKY%Ri:8.e9L&e%:8 E ;g$>+RS+T 5 ; 5 üG&C·Ç R78z"NC 0W 5E :G7U0 E :8 E .:GRLS+T 5 C

8

Pilha de execução

0

18

IADD

Pilha de execução

0

10

jØ'R78ä"NC u f 'M.9<eL<g$>+RS+T 5 ;)'e E :G78RS+T 5 üG&C· E8E 'WVPW3R.:8 E ; E 'e E :G78RS È E ;#°ö sþ:8RW E5 783#'M'9V 5 e; E T 5 +gNR$:U; E

E»5 t+7US È E C»¤ R$:878 E 'e E :87GRLS È E E >7G1+WîL7U#78Wi_+>e7 5 R7GNRt+7U7 5E 1M 5 7G E Y%R E :8T 5 e E 17GK­I1> E M 5 > E Cz· E8E 'WVÌ 5 7b+g>W<M 5 VÌ78 EG5 Wi7b; 5 E 1M 5 78 E M 5 e 5%E Y%R E :8T 5 78Wi_+>e; 5E e E 1I7GK­I1> E M 5 + E eXHW<>7 5%E /^^ 5 M 5 >7 5 78 E RM.:8; 5 eL178'­I1+MeXHW<+7 5 "&;$+1p E 78'W)>.7 5 +W<'M.9L7 5%E 1M 5 78 E 78Wi_>+e; 5E e 5 1: 5 7Í;$178K­I1+ EM 5 > E 78V+e%:8T 5 V¦§_+>7@ EG5 WiJ»;$> 5 E :G7Ue E 5 7G:87 5 78 E RM.:8; 5 ;$^1 5 M.:8J78 5 1: 5 7;$178K­I1+ E M 5 + E Ck· E 'e E :G78RS È E 5 787G E 5 eL;$+e%:G E 7U3 E8E5iE +78'Wä

h=h=\X^=a _fT:bhQ^]^d:b&]_Xhh=\`^Xh h=h=\X^=a _fT:bhQ^]^d:b&]_Xhh=\`^Xhh&^=aXa i\f^aX\cb=i_7h=_f_[7S\i[\S\T\¤a7^TbhQ^h7iS\&d_ a7_i_fTbhQ^h=\[7£_£^&df:^7_[^Ê[^]^&d«Zph=\`^7h

·^M']+W;b.M'93 ; E 178'­I1+ E M 5 > E V%'e E :87GRLS È E 5 ;$>WË:UW0L]>W 78>+Rt+7U7@ 78W<p_+>e7 5E 1M 5 78 E ; E 17GK­I1> E ; 'e E :8®eLK ;$JMK E8E »;$»RW;; 535 $v*+: 5 C@¤ E W< E W 5%E 5 W<+e%:8­7G 5E ¦ >H: 5E Y%Re: 5ÄJE 17GK­I1> E M 5 + EbE +781>Wæ:8W3t]+Wÿ7U 5E 1M 5 7G E 78W<p_+>e; 5E e E8E E 1I7GK­I1> E V 5 R E *vVy7U#R:G'M.'_>­pXM 5E ])e>+ E8E ­7G 5 :878_IprM 5E e%:G E 78z'M.9LCØ·Q;$.¦ +78+eLS+^]aY%Ra E 178'­I1+ E ;$`MK E8E 6F;6'e E :8®eLK E T 5 R:G'M.'_>; E ;$'7G+:8W<>e:8 5 7`W<+ 5 ;$ E >Rze 5 W<CfZ5 ;+W 5E +M' EGE Ç +7) E q&'e E :G78RS È E 5 787G>e%:G+W<>e:8ä; Ç eK; E 7U-,°ö sçe E

E +R.e%:G E +:G+ 5 78' E

•Wie.RM'S+T 5 ;0.M'9< 5 W 5 9:X6$$VX99z¶9P@).e E :87GRS È E m

•>W<.M'9W)>e%: 5 ;$ 5 e E :8e%:8 E 5 W 5 L&VØüG þ"2V³& þnc7±¼d )'e E :87GRLS È E m

•>W<.M'9W)>e%: 5 ;$J178'­I1+ E M 5 + E 5 W 5 ü±L'&V|LFo0'e E :G78RS È E m

•7GWi_++eLW<+e%: 5 ;@1M 5 78 E eL E 1I7GK­I1> E M 5 + E 5 W 5 ü +V +[oa'e E :87GRLS È E m

•+7GKS>T 5 ;$ 5 v*: 5%EF5 R7878I E 5 W 5 ckVM!l75XüGce d<'e E :87GRLS È E m

Page 277: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& o !)%qqi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ o

•>W<.M'9W)>e%: 5 ;$J1M 5 78 E ;$b7G7UI E 5 W 5 üGLV|&L6).e E :87GRS È E m

•7GWi_++eLW<+e%: 5 ;$J1M 5 78 E >Wî7878I E 5 W 5 üG V³& +@).e E :87GRS È E m

•Wie.RM'S+T 5 ;(17GK­I1> E 5 W 5 9:7 ¡«LVcü= ¡ªLki'e E :G78RS È E m

•1+78 Ç +S>T 5 ;$J:G' 5%E 5 W 5 $%XVBü± :ýU@).e E :87GRS È E m

•5 L>78S È E 7G.:GW<]:8'> E 5 W 5 üGVÌü±:ü@<'e E :G78RS È E m

•5 L>78S È E M'¯'> E 5 W 5 ü$XHVÌü48X `"I3'e E :G78RS È E m

• 5 e1>7 EGÈ E 5 W 5 ü · ¼V­ · ü ^"No0'e E :G78RS È E m

•:878e E ¦ +7I+e+');$b 5 e%:G7 5 M'( 5 W 5 ü ý+Vü= V"8 @"J.e E :G78RS È E m

• 5 W<78S È E 5 W 5 L!19tV@&!19H6o0.e E :G78RS È E m

•; E 1% 5 :G' 5 £ckü± $B60'e E :87GRLS È E m

•78: 5 78e 5 ;$W<]: 5 ; 5 5 W 5 7 Vyü±7 k).e E :87GRS È E m

•+g>S È E V­$7ck»"('e E :G78RS+T 5 m

• 5 e%:G7 5 M';$JW 5 e.: 5 7G E !"ü± V!#Lü±)8ü±[email protected] E :87GRS È E m

•U9LWi; E ;$W<]: 5 ; 5%E 5 W 5 ü±c>ü± HVÌü±& XüG+d<.e E :G78RS È E m

•78 E +781; 5%E VM9ü±XVBü±!19&)9M0V[ü±!N9 9 · 6/).e E :87GRS È E m

•5 L>78S È E GY%R'Uº 5 W 5 Lþ$üG%V­cÌþ$üG%@/).e E :87GRS È E m

•5 R$:G7U E ü ü±:VcküG+V@ L=ü±$$V­:9tki'e E :G78RS È E C

12.2 O Assembler para Java½^Wi'e E :87GRLS+T 5 Y%R< 5 M 5 +zeä'M.9 5 1M 5 7;z1I7GK­I1>M[;)'e E :8®eKlf ^&d;ä+M' EGE ñ ² h=^iXi]J E +R.e%:8

_S7b_7ha Q _fT:bhQ^¤\¤]^7h=\da7_ñ ² h=^i=i|ZGf 7^&ds E V 5 W 5 ; E8E >W 5E e%:G E VRW<3178'­I1+M;$ .e E :8®eK] +e;$>7GNS+;JL>M 5)E >Rie 5 W<C

?de%:8T 5 V 5 YR^7G>78 E +e%:8 5 eXHW<+7 5 ">JeJ'e E :G78RS+T 5 ü& ¡ªL n +WV 5 76Y%R E :8T 5 ;$^ Ç .pI+eLKV E .e E :G78RS È EkE T 5 78+7G E >e:U; E 5 7kW<> 5 ;$ E +R<¯$;$' 5 ù*"a%:GIú[aM.RWi E ;$>M' E:I>W E >R E 78RW<>e: 5E V>+7UM'W<+e%:GVI;@:UWie9 5^Ç g 5 C[· E8E 'WV+W\1+_6;F7GWi_>+e7tGs%p4 MK E8E C W3öd7 5 W 5 L7G:G;).e E :87GRS>T 5 V>;<+M' EGE 5E8E RBRWi0:8L>M'<;$b 5 e E :8e:8 E Cû(; 5%E 5 W 5 Í78¦ >7I>eK J 178'­I1+M³ñ ² h=^i=i|ZGf 7^&d E T 5 78Wi_+>e; 5E e E :8Í:8t+MKä78¦ +78+eLK; 5%E e E 'e E :G78RS È E CJ· E8E 'WV 5 eXHW<+7 5 ">Í.eL;$'>Íz+e%:G7U;ie E8E i:8L>M'zY%R;$>1 E >7`R E ;0e<g$NRS>T 5 ;).e E :G78RS>T 5 C? E :Gä]zt+eL E RW ; 5E W3R.: 5%E ;$+:8M.9 E Y%Rͦ§_+>W 5 W Y%Rä 5 e E :87GRLS+T 5 ;ÍRW

7UY%R'1 5 ;$i+M' EGE E *vVye 5 W â e.W 5 Vy:G7UM.9 5EG5 C f 7Ui¦§+.M'.:87( E :G0:G7ULM'9 5 C+g E :G+WM'Re E 7 5 7UWi E i'M' 5 :GN+ E Y%R 5 ¦ +78>++W RWi'e%:G+7G¦§+<W< E 7U;­I1+M[7Uz:8M

Page 278: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !)%qi

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

:87G+¦§CñO 5 > EG5 ; 5 ° E W<'eêù°I1,· EGE +W0M.>7 l e%:G+7G¦§+NúC fZ5 7#W<+ 5 ;$>M.VF 5 ;$+W 5%E:G7Ue E ¦ 5 7GWi7JRW´7UY%R'1 5 :Gg: 5 VZYR#;$ E 78+1<+M' EGE ù E R E 1I7GK­I1> E VyW<]: 5 ; 5E +:8Cªú V+WîRW¨78Y%R'1 5 ;$MK E8E Ck¤ R E vV:878:8p E ;$RWî1+7U;;$+'7 5 W 5 e%:8; 5 7F7U))°ö sàCfZ5 7`+g>W<M 5 V).e E :G78RS>T 5 .:8;)< 5 RL 5iE >7GK);$ E 78H:U<; E >R'e%:G(¦ 5 78Wi

_fTbhQ^\¤]^7h=\d£aX_ñ ² h=^iXi@ZGf ^d_S7b_7ha ñ ² h=^i=i&Wf 7^&d a ©X^&]^7W7S:bhXW!_`S\d

· 78.W<>.7U<7G:GL¯ E <.e E :87GRS>T 5 'e;$K+ 5 e 5 W)b;<1I7GK­I1>MPb E >Re;V 5 :G' 5 Y%RE 0 E t+7UÍ;$ EGE #17GK­I1>MC= 5 ·^I+eL;$'+ 4E T 5 ;; 5E M'Re E ;:8M.9 EJE5 78 5 °% E W<.eÌV:8]^W< E W 5 E 78¦ >7I>eK E ; 5 eL;$`+e 5 e%:G7U­prM 5 ( 5 W 55 $:I+pXM 5 e l e%:8+78e:NC[=» E :8 E >S>T 57G E >e:U78+W 5E t+eL E M'RWi E +7U:G>7 âKE :8'> E Y%RJR$:G'M.'_>7G>W 5E Wi E ;$Ke%:8Cf 7U^;$ E 78+1+7 5%E 5 W< 5 e+e%:G E ;»MK E8E V 5 ° E W<'eb;$ Ç edRW\ 5 ev*Re%: 5 ;$@;$'7G+:G'1 E C

½^Wi-; E YRÍR E 78+W 5E e>78S+T 5 ;$z+¯;. 5 7UX++

]ä&;$'7G+:G'1Zi\7d`_V[Y%R E t> Ç >^Y%RM 5 e 5 W)F; 5 78Y%R'1 5 p¦ 5 e%:GdY%R 5 7G''e 5 R 5 7UYR.1 5 ;$F+M' EGE Cؽ`:G'M'._N78+W 5E V'e;V% E ;.78:8.1 E Z`&h=^iXi(¯ZiXT_&dPCÌ· 78.W<+'7U3;$'_(Y%RML] 5 e 5 W<(;3MK E8E Y%R» E :U­;$ E +7G.:8äe 5 7UY%R'1 5 # E +Re;V 5 e 5 W<#; E R E RL>78+M' EGE Ci½^W´7UY%R'1 5 : â ' 5 ; 5°% E W)'eä.eKKp E ( 5 W¨ E`E >R'e%:G E ;.78:8.1 E

Zi\7d`_ gb[7S=d_X_eZ `\fTbh=^=a7\aX_¤f¼^&d b]\ Z Z`&h&^iXiTXXghb=` gb[7SXd7_X_ `&h=^iXi_ÊTXXgchb&`¤`Q^f:^&a7^Êgb[7S=d_X_Zi=T_&d©X^&]7^7WXh=^[XW \ g©=_`S [X\T\iXib f:^iXT_d`&h=^i=i_Êa7_`&h=^&d^&a7^=^ EGE ig$+W<M 5 V[MK E8E )¦ 5 6 5 W<.MK;ä;iRWÿ78Y%R'1 5

X++VØ]#HM.K+VØU9W<;

+ü±( eT 5 5E8E RtRW< E RL>78+M' EGE ^+gM.K.:8W)>e%:GJ;$>+M'78;V 5 7F E8E5 ] 9>78;+'780;$8"=üuøN 8VRWia1+_dY%Rk>Wê°%I1Jù ke`°ö s&úP: 5 ;`MK E8E d;$+78.1a;$8LXüuøNW8XV;$'7G+:8 5 Rä'e;$'7G+:8W<>e:8Ck= 5%E ;$'1+7 EG5E g$+W<M 5E e:8+78 5 7G E R:G'M.'_>W 5%Ea5 m (780Wi7Gp+7 5 'e â 5 ;$bRWæ 5 W<+e%:8­7G 5 CF? E8E #]3 E .e%:8g$R E ;<t+M 5 ° E W<'eBC D RL; 5 Y%R E +R5 m J:G] 5<Ç eMB;)M.'e9<] 5 e E ';+7U; 5 5 W)>e%:8­78 5 Cf 7U); Ç e'7^RWi)178'­I1+MPeT 5 M 5 +MVR:G'M.'_>p E );.78:8.1Z3b_7h&atC fZ5 7`g$+W<M 5 V E

178'­I1+ E Y%R>Wî°%I1I E +78'W;$ Ç e'; E 5 W 5

TX=gchb=`b[XSf b_7h&a iS7^&S:b=`T7db]^&S_7_`S\&df _`S7\&d +W«° E W<'e E +78KW;$ Ç eK; E 5 W 5

Z3b_7h&aTXXghb=`ðf b_7h&a ±Z3b_7h&aT7d:b]^&S_£iS7^&S:b=`ðf _`S\d a ©X^&]7^eZ)7S:bhOZ9_`S7\&d ¤ E W<]: 5 ; 5%E^E T 5 ;$ Ç e'; 5%E 5 7`W<+ 5 ;$;$R E ;.78:8.1 E V$e)¦ 5 7GWi

ZGf:_S=Q\=aõS:bT\¤a7_^`_i=i\ õ=^iXi7b[^S=7d^ õb'[:iSXd=å X_i Z6_[7aÊf_&S=Q\=a

Page 279: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& %q- !)%qi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ %q

?de%:G78ä E ;R E ;$'7G+:G'1I E<E T 5 5 M 5 +; E E .e E :87GRS È E YRͦ 5 7GWiW 5 W)]+: 5 ; 5 C= ;$'7G+:G'1¯ZGf:_&S=Q\=a(;$+1+W E +7k E t>+ Ç >; E E 7 5 78.N;; E ; 5 W<]+: 5 ; 5 V 5 W 5 iS^S:b=` 5 RTXXghb=`$VJ E R3 EGE .eL:GR78;$'_+>e; 5 YRLMt] 5 e 5 W<VY%R EFE T 5b5E 7U®W<+:G7 5E E t+7U; 5%EY%RMB] 5iE +Rä:G' 5 ;(78: 5 78e 5 C fZ5 7a+g>W<M 5 V 5 ;+7 â W 5%E :G+7

ZGf:_S=Q\=a iS^&S:b&`TXXgchb&`ðf:^cb[ Ò a ©X^&]7^7WXh=^[XW ° SXd:b'[X b[:iS=d= X_i

Z6_[7aÊf_&S=Q\=a= 5 °% E W<.eie°ö(s,V 5%E 5 e E :87GR$: 5 78 E eT 5E T 5 :G7U:U; 5%E ;$iWie>.7U;$ E :G'e%:8; 5%E

W<]: 5 ; 5E ;$'e E :8®eKCF¤\:G' 5 ;$78: 5 7Ge 5 78)>M. E ] E >W<7Gb;>MK7U; 5 üGVL'e;$K+; 5 5 7oPVZ 5 W 5 e E :GHMH:8.W 5 g$>W)M 5 C m +R2e 5 W<Vd 5 7<;$7UT 5 VZ]Äõb[bS C· E8E 'WVdRW 5 e E :G78R$: 5 7 E >W L7U®W<:87 5%E Y%R6U9Wi 5 5 e E :G78R$: 5 7Ì; E R E Rt+7UMK E8E 8LXüuøNW8J7G+: 5 7Ge0]b;$ Ç eK; 5 5 W 5

ZGf:_S=Q\=a TXXgchb=`õb[bS ' `\[:iSXd=7S\d^Xh=\X^=aE b'[7]\&ö_iT_`7b^7hÊ©X^]^7WXh=^[7W \ g©X_`SW=õb[bS `Q^f:^£iXT_&d 'd7_&S=7d=[

Z6_[7aÊf_&S=Q\=aû»RL E`5 R$:G7U E ;$'7G+:G'1 E Y%R78>+ E 78+W 5E R$:8.M'._N7 E T 5

Zhb f³bS£h=\`^7hi õ[MÌf:_d\¡b[7S_bd\ Zhb f³bSiS^`ö õ[MÌf:_d\¡b[7S_bd\ ?dMK E`E T 5 5 M 5 +; E ;$+e%:87 5 ;<;$ Ç e'S>T 5 ;$+;3W<]: 5 ; 5 J E :Ut+M'>>WV$7G E t>:G'1Ip

W<+e%:GV 5 e=HW)>7 5 ;$J178'­I1+ E M 5 + E Y%R 5 W<]+: 5 ; 5 R$:G'M'._N0 5 :8Wie9 5 Wi­g$'W 5 Y%R'M.9L):G'e;$R78e:80+g$>RLS+T 5 ; 5 W<]: 5 ; 5 C fZ5 7a+g>W<M 5

ZGf:_S=Q\=a TXXgchb=`õb[bS ' `\[:iSXd=7S\dZhb f³bS£h=\`^7hi Zhb f³bSiS^`ö ^Xh=\X^=aE b'[7]\&ö_iT_`7b^7hÊ©X^]^7WXh=^[7W \ g©X_`SW=õb[bS `Q^f:^£iXT_&d '

d7_&S=7d=[Z6_[7aÊf_&S=Q\=a? E8E E)E T 5-5E 78.e+.L E >M.>W)>e%: 5E ;$°% E W)'eBVdM.]>W ; E .e E :87GRS È E 7 5 78'W)>e%:G

;$.:8 E VaY%RR$:G'M.'_>7G>W 5E e E :G> â :GRM 5 C2ök>7G>W 5E V@+W E >RK;V6.W<M'+W<>e:US>T 5 ; 5>78; 5 7a;$b+¯;. 5 C

12.3 Implementação·«.W<M'+W<+e%:US+T 5 ; 5 +7U; 5 73;$¯$;$' 5 ]zWi E RWi&1+_ä E >;eL&1 E .:8- 5E e¯ E;z­781 5 78 E .e%:8­:GK+C · E8E .WVBÍ;>MK7US>T 5 5 'e â + 5 ;Í+M' EGE E T 5zE >W)>M.9Le%:G E 5 Y%R

Page 280: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© «® §¨X¯© ®Qsi

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

1.W 5%E e 5%E > â :GRM 5E e%:8+78 5 7G E E T 5 W 5%E :878; 5E e 5 7 5 78W<<"I$C'"CØ?dW3 5 7U¦§S+7:8;$)RW 5 :G0;H¦ >7G>e:8buo HQÁMD uPVBz+M' EGE H»XDQ ]0RW< E Rt+M' EGE 0; 5 eM' E ; 5 7E +Wi®e%:GK 5 VRWi01+_Y%R E 'e$¦ 5 78WiS È E 5 W<R:8; E ;$R7Ue%:GJ<e­M. E E +Wi®e%:8'>V$+W7:8'+RM'76b:8t+MKb;$ EGâ W0 5 M 5%E V E T 5 R$:8.M'._N; E e3>78S+T 5 ; ¯$;$' 5 C l e'+'M.W<+e%:8 E T 5;$NMK7U; E ;$'1+7 E E 17GK­I1> E VL+Rv 5E R EG5E(E >78T 5 g$M''>; 5%E ;$R78e:83 E :8)> â :GRM 5 C(?dWE +R';V 5 W 5 v­ E :8W 5%E 9H:8R; 5%E V]`¦ +.:83U9Wi; J e­M' E E +Wi®e%:8'> L E8E e; 5 5 W 5 7GRW<+e%: 5 )78._J;i­7G1 5 78 E .e%:8­:GK+C·;$.¦ +78+eLS+ie 5 W<]: 5 ; 5 6 HD»XDQ· ? ]0YRVyM']+W ;i7U'_3;#­7G1 5 78 E 'e%:8­:8'>Vt+M'

78>>LJ 5 W 5 78®W<:G7 5b5 e 5 W<; 5 7UY%R.1 5 pX¦ 5 e%:GV+g$:8W)>e%:GJ 5 W 5 E :G ¦ 5 P¦ 5 7GeNK; 5ezM.'e9;$i 5 Wie; 5 78 5 5 W<'MK; 5 7>C5ÍÑ? E8E <e 5 W))] E >7U; 5 +W ;$R E 7:8 E V 5+W<.e9 5 e 50E E :8+Wib;$(7UYR.1 5E 5 e 5 W<^7 5 7GKW<>e:8^;$.: 5 CZ? E8E E ;R E 7G:G E@E +7UT 5R$:8.M'._N; E eLb78'S+T 5 ; 5 78Y%R'1 55 $v*: 5 C 4 EG5 3e­M' E ^eLT 5 E :8*v E >e; 5 ¦ >H:U337G:G'7;$iRW´7UY%R'1 5 VyV E 'WäV[;+e%:878;pr;78T 5 VP+e%:8T 55 e 5 W<i78>>K; 5 5 W 5 78RW)>e%: 5 5 e%:G]+W 5<E :G78'e<1I_+ 5 = C

9:;%<:=?>=D © BEDF n JO Y Z LALQYQ=^Q^PÙ; [G Ñ G&HG v KG&H[ ^TQ¥%n G Ù NG L j\ ×_ RR G v KG&H ^ ; [ ;P=Q: I%JZ p;S=A^ G :t< G := [ ;d ^ K = KZ LPa ZbH =YSÎ K : Z?H < Í%=^ G v KG&H ^ Z ; H `lB Ö =^lÕeg Î K : Z?H <cÎ; J :L G ï Z Y G Õ RR H ;?> GS[ ;T=Q: I%JZ p; ¨ a; HKGh Î K : Z?H <cÎ; J :L G 9= K&N Õ RR [Z : GQK x&: Z ; [ ;P=%: I%JZ p;ta; HKGi Î K : Z?H <cÎ; J :L G Í O ^Õ RR H ;?> G LQ;?>nY GQK ; [ ;Pa; HKGk 9: ZbHK : Z&KG :Ma%nM` HQJ YYåÕ RRP=%: I%JZ p;A; H[G ;SLQx [6Z <;t G ^LU: Z&K ;Frq Î K : Z?H < O : G = j YQ= O6G YS` HJ YQYåÕ3RRP=%:U>=QV GUH =S:x K%J Y; [Gt[G ^&p Z ; [GTJ > O : G = jFuF ZbHK L J ::YQ= O6G YQ`AsÕ RR H W%> G :; [ ;Xn:x%v Z >;P:x K%J Y;S=S^ G :S< G := [ ;Fr\ÚO ;;Y G = HAN =^%Î K =Q: K `Ta=Y^ G Õ3RR Z?H[6Z L%=c^ G LQYQ=^Q^ GtKG > J >S> K ; [ ;A^ K =Q: KFr_ÚO ;;Y G = H ^ K ;&: G `ta=Y^ G Õ RR Z?H[6Z L%=c^ G p=Q: Z&à p G Y G ^ Kà ^ G&H[ ;t=^^ ZbH =YQ= [ =F|d ZbHK ^ K =L j Î Z V G öó^ K =L j # Z < N ÕóRRTp=Q: Z%à p GZ ^ I%J6G LQ; HK :;YQ=b>; J ^Q; [ =Tn Z Y N =FreFrg n JO Y Z LtÙ; [G Ñ G&H yEFh ×Fri ^ J n G :CyEÕ RQRSL N =?>=cLQ; H ^ K : JK ;&: [G ¥%n G Ù N6G L jFrk ë\uq\F n JO Y Z LPp; Z&[ Ù; [G Ñ G&H 6;; K y Z ^ K Ó6; [G vCöÜÎ K : ZbH <ta Z Y G&H =b> G \u\ K%N :;&ß6^SÎ G >= HK6Z LUvL G n K6Z ; H öóÑ G&H Ù; [G v6L G n K6Z ; H\u_ ×\d ¥&n G Ù N6G L j 6;; K yuvÕ RRPa=QVS= H6à Y Z ^ G ^ G >â HK6Z L%=\ue Î%¥^ KG >ìBu; JK B|n: ZbHK Y H y?l?smÎ G >= HK6Z L G ::;%:Sa; JQH[ l%Õ\ug\h Z?HKcZ Õ\ui Z `ta Z Y G&H =b> G BYQ=^ K Ò H[G v%aCyuï Z Y G B^ G n6=Q:= K ;&:ÕoRRXn G <=A; H ;?> Gt[ ;Pa; HKG\uk ÎQ; J :6L G ï Z Y G `ta Z Y G&H =?> G B^ JQO ^ K : Z?H <Cy Z fDQÕ_uq Z aãy ZPä s_F Î; J :L G 9= K&N `mllÕ RRon G <=M;SL&=b> ZbHN ;_u\ G Y^ G_u_ Î; J :L G 9= K&N `Pa Z Y G&H =b> G B^ JO ^ K : ZbH <ysö Z ÕÔ¯Ú ì ØÖ ä Ö ï Ö ç=Ö ÚKç Ø*ç ä Ö«åÖ ß ×Ü ß ×Ü3ÚKÜ3âáÞ r èØÜ r Ö æ çá×*Ø*Ö«èÖ ×³Ý r åà Ø*ÙâáÖ × r èØ*Ü ß çáÖ ß Ü3×ê

Page 281: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© « ¬c§¨X¯© ®Di

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ

_d ÎQ; J :6L G Í O ^t`ta Z Y G&H =b> G Õ RRP< J =Q: [ = K =b> O ?>z;SL%=b> ZbHN ;MLQ;>nY GQK ;_ue Ù; [G Ñ GUH ÙYQ=^Q^UÞ G LQYU Z ^ K Ó; [G yuvÕoRRAL N =b>=t< G :=!² ;Tn6=Q:=S=P:= Z V_ug ë

465 W 5 E :Ga:UW0L]>WË]`RW+ â :GRM 5 M 5 e 55 W<H:8.78+W 5EZ5%E W<]: 5 ; 5E Y%R E T 5 78+t:GKS È E;$ 5 R$:G7 5E 1% E : 5E e%:G>7G 5 78W<+e%:GV Y%R E 'W)M. E W<+e%:8^.e1 5 >W J+7US>T 5 ;$»+¯$;$. 5 7U5E»Ç M'9 5E C f E8E W 5E VP EGE 'WäVy 5 W<]: 5 ; 5 HD»XD CA³³¾­D o Cé½ HD YR3:878:8Í;)RWæe¯;$b;$NMK7US>T 5 ;(RW<i+M' EGE C[? E8E W<]+: 5 ; 5 ]W 5E :G7U; 5 e 5 7 5 7UWiÍ"N$Cª$Cû»>1>W 5%E M'+W0787`.e'+'M.W<+e%:83Y%RbRW«e¯¾ C'A³³¾­D o Cé½ HD 5 ;$b78+78 E +e%:87`RWi

;$NMK7US+T 5 ;#MK E8E ie.e9L;äV[ 5 7b EGEG5 VØ]ie>+ E8E ­7G 5 YR#M'RWi E 17GK­I1> EJE *vWE M'1I E e%:G E ;$^'eKK7 5 7 5 EGE W<>e: 5 ; E 'e$¦ 5 7GWiS È E e 5 e¯C f[5 7dg$>W)M 5 VRWi; E5 t+7US È E ¦ +.:8 E e E :8#e¯]Í+7GKS>T 5 ;$#RW´7UY%R.1 55 e;$ E +7U­ä7UI1; 5ä5 7 5 7UWi5 v*: 5 e 5 ¦ 5 78Wi: 5 ; 5 °% E W<.eBC[·à78¦ >7I>eK` 5^5 $v*: 5 ´ËåQ? e ËåX?=DË YR@78+78 E +e%:8F EGE 7UY%R'1 5 ]<78W<_+>e;<eL#178'­I1+MÅ N Cð2 Re; 5 RWiÍ+M' EGE 0e.e9;#1I E +7 :G7U:U;V E8E #178'­I1+Mv­Í E :U) 5 R;I0 5 W RW 5 $v*: 5 Y%R)] 5 78Y%R'1 5#5 $v*: 5 ; E Rz+M' EGE Wi E +g%:8+78eC fZ5 76 E8E5 V 5 1IM 5 76;$=Å N :G>W YR E >7 E M'1 5 >W Å N CH V7UY%R»RW 5 R$:G7 57UY%R'1 5 5E8E E +7k78'; 5 E R 7G+¦ +7I+e+' 78W<_+>e;»+W½Å N CØû(Y%R>M.F 5 e%: 5 +W;'e:8ù eL E R­7G1 5 78 EG5 5 e¯;MK E8E <e'e9;úVy: 5 ; 55 ¯$;$' 5E +7U­Í78I1; 5 e E :8)e 5 1 57UY%R'1 5 CZ· 5 :G+78W<.eL7^)e­M. E J;$ EGE <MK E8E (]Je>+ E8E ­7G 5 78 E :8R787 5 1M 5 7`;$Å N 7UY%R 5 7G E :Ue%:GJ; 5 ¯$;$' 5 ;<+M' EGE Jg:G>7Ge0 5E8E E +7`7 5 ;$R_+K; 5 ù e 5 78Y%R'1 5 5 7G78: 5 úC·^t¯ EFE M.17@ E 17GK­I1> E eN EGE ­78' E V]»78>RL>78;J+e%:G7U;JeJ:8L>M'3;$ EGâ W0 5 M 5%E

5 7G78 E 5 e;$>e%:G J +M' EGE E +e; 5 ;$>+M'78;C^û(M'Ø]07GNRt+7U;ii+e%:G7U;#; E R E Rt+7GpMK E8E Cd? E8E E ;$RL E >e:878; E`E T 5 7GWi_>+e; E >W o& ³ V78 E LN :G'1W<+e%:8C6·7G:G'7;$ EGE E ;$RL E >e:878; E`E T 5 >MKRMK; 5Ea5E e 5 W< E G 5 W<M.+: 5%E ;$ E8E E ;$R E MK E8E E Cd? E8E Ee 5 W) E V E +R'e; 5<5 ;$7UT 5 ; 5 :8; 5 e<°ö(s,V E T 5 ¦ 5 78W<; 5E ; E +R'e:8JW<e+'7U

•E &+M' EGE zeLT 5 ]RWiMK E8E äe'e9;V E >R¬e 5 W) 5 W<M.+: 5 5 .e+';ä 5 W E +Re 5 W<b;$>+M'78; 5 C fZ5 7`+g>W<M 5 V7ñ ² h=^iXi m

•E 0MK E8E »](e.e9; E >R#e 5 W<( 5 W<M': 5 ] 5 e 5 W)(;3+M' EGE 5 e;$»>M'¦ 5 y;$>+M'p7U;aW< E RWQ UV>W< EB5^E >R(e 5 W<d;$>+M'78; 5 C fZ5 7Bg$+W<M 5 Vñ ² h=^iXi ñ ² h&^i=i ° C

m iMK E8E E +e; 5 ;$NMK7U;ÍeT 5 5E8E RkRW< E Rt+7UMK E8E ù +gM.K.:8W)>e%:Gi;$>+M'78;úV E8E RW<p E @Y%R E RL E RL>78+M' EGE @] ÅAÆcAÌÄ=C'AÁ1Ä BÅcD o ? Ct· 5 78Y%R'1 5 +7GK; 5 7U^»+7US>T 5;$»+¯$;$. 5 ]»;; 5b5 e 5 W< Y%R^](b 5 e+:G>eS>T 5 ; 5 e 5 W<»; 5 78Y%R'1 5 p¦ 5 e%:G` 5 W 5 e 5 W< 5 W<M.+: 5 ;MK E8E )<Wi EJ5E R Ç g 5 8 C fZ5 7g$>W)M 5 VÌMK E8E lñ ² h=^iXi ñ ² h&^iXi °;$NMK7U;-e 5 7UY%R'1 5 ¦ 5 e%:G!l¡Oá8Ê.7U­7 5 ;R_+'7#RW 7UY%R.1 5-5 $v*: 5 U9Wi; 5 !.¡Oá8ML²b|L ú ²pb|L û 8 C

9:;%<:=?>=D © B ©F n JO Y Z LPp; Z&[ Ù; [G Ñ G&H ÙYQ=^^UÞ G L%Y&Ó6; [G yÙYQ=^Q^UÞ G LQYUÓ6; [G v\ K%N :;&ß6^PÑ G&H Ù; [G vL G n K6Z ; H_ ×d Î%¥U> K = O Y GSKG >n N ;Y [ `tÙ J : K = O Y G ÕÈRQRS^%=Y&p= K = O6G YQ=MLQ;%:Q: G&HKGeÚO ;;Y G = HcKG >n^ K =Q: K ` N =^%Î K =Q: K ÕÈRQRS^%=Y&p=Sp=Q: Z&à p G Y N =^QÎ K =Q: Kg HK :Q¥ÙYQ=^Q^cLX` HJ YYåÕh HK :Q¥ÙYQ=^Q^ H Lçö H ^&` HJ YYçÕ

Page 282: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& %q !)i

i

i

i

i

i

i

i

q Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

i Î K : Z?H <Aï Z Y GUH =b> G ` HJ YYåöÜ^ H =b> G Õk ï Z Y G JK n JK Î K : G =b>;^çÕFrq 9: ZbHK : Z&KG :Ma%nY [ `Pa%nÌÕ RRS^%=Y%p=A=Q: I&JZ p;A^ G&H[ ;t< G := [ ;FuFFr\ Z aãyuvS`Q` HJ YYFr_ : GQK&J : H ÕF|dFre RQRt=L N =t=ALQYQ=^^ GPH = K = O6G Y%=Frg H LP`-y HK :¥ÙYQ=^^PÙ J : K = O Y G BLQYQ=^^&ï ZbH[ ènÌyuvCB H =b> G B Z >=< G ÕFh H ^P` H LçB|n6=Q: GUHK Õ3RRXn G <=M^ J n G :6LQY%=^^ GFriFrk RQRXn G <= H ;?> Gt[ =A^ J n G :6LQYQ=^^ G\uq Z aãy H ^T`` HJ YY6\F ^ H =?> G `l Ö =Qp=RY%= H <R OÖQG L K lÕ RQR H6G&NJ >=M^ J n G :6LQYQ=^^ G\u\ G Y^ G\u_ ^ H =?> G ` H ^çBLQ;?>n6Y GQKG Ó=b> G yEÕ\d\ue ï Z Y G&H =?> G `SÎ; J :6L G Í O ^SfmlBl f H LåBLQ;?>nY GQKG Ó=?> G yEtf Í%=^ G v KG&H ^ Z ; H Õ\ug K :¥\h ×\ui RRALU: Z =S=Q: I%JZ p;on6=Q:=t< G :=Q:LQx [6Z <; [ =MLQYQ=^Q^ G\uk ;^P` H6G ßAï Z Y G JK n JK Î K : G =b> yuï Z Y GUH =b> G Õ_uq ë_F L&= K L N yï Z Y G Ó; K ï; JQH[ v6L G n K6Z ; HG _u\ ×_u_ K%N :;&ß H6G ßAÑ G&H Ù; [G v6L G n K6Z ; H y_d lÙ= HH ; K L&: G = KG ; JK n JK a Z Y G ­ lífPï Z Y G&H =?> G Õ_ue ë_ug_h a&nc` H6G ßS9: ZbHK : Z&KG :Cy;^Õ_ui Î&¥6^ KG >áB; JK Bn: ZbHK Y H y?l?Ñ G&H6G := K6ZbH < l?fTï Z Y GUH =b> G Õ_ukdq RQR G ^L&: G p G ;AL&= O6G ²%=Y N ; [ ;t=%: I%JZ p;­AB^Q; J :6L G BL%YQ=^^ G B^ J n G :dîF n JK Ù; [G y?lÕ ¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨¨¨¨¨Q¨ l%Õd\ n JK Ù; [G y?lÕÜÙ; [G < G&HG := KG%[AO ¥tÔffALQ;?>n Z Y G :l%Õd_ n JK Ù; [G y?lÕ Ø G :6^ Z ; H sBED ¨X© ss © l%Õdud n JK Ù; [G y?lÕ ¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨¨¨¨¨Q¨ l%Õde n JK Ù; [G y?lB^%; J :6L G l fSÎ; J :6L G ï Z Y G Õ3RR G ^QL&: G p G B^Q; J :6L Gdg n JK Ù; [G y?lBL%YQ=^^Tn JO Y Z Lml f H LåBLQ;>nY GQKG Ó=b> G yEÕÈRRBL%YQ=^^ Gdh n JK Ù; [G y?lB^ J n G :!lífS^ H =b> G Õ3RR G B^ J n G :didk Ù J : K = O Y G ` H LçB H6G ^ KGQ[ Õ RR K = O6G Y%=MLQ;%:: G&HKG ` K = O6G YQ= [ =MLQYQ=^^ Geuq N =^QÎ K =%: K `Pa=Y^ G ÕeF Ù; [G Ñ GUH ÙYQ=^Q^UÐ6; [ ¥%Ó6; [G yv/B O ; [ ¥Õeu\ Z aãy N =^QÎ K =Q: K XRRPp G : Z a Z L%=c^ G LQY%=^^ GtKG >S> K ; [ ;M^ K =%: Keu_ L&: G = KG%Û = ZbH yEÕed RQRPa G L N =Q:A=Q: I&JZ p;Tn6=%:=MLQYQ=^^ Geue a&n BLQY;^ G yEÕeug a&nc`Pa%n6Y [ Õ3RRX: G L J n G :=A=Q: I%JZ p;S= HKG : Z ;%:eh Ù J : K = O Y G ` KG >n N ;Y [ Õ RRT: G L J n G := K = OG YQ=MLQ;&:: G&HKGeui N =^QÎ K =%: K ` KG >n^ K =%: K ÕóRRT: G L J n G :=SaYQ=Q<euk ë

Page 283: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ ~: X ~Xi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ %q"

½^Wi1+_#>MKRMK; 5%E5E e 5 W< E ;+M' EGE iÍ; E R E Rt+7UMK E8E iÍ78'; 55 78Y%R'1 55 v*: 5 Vy]078I1; 5Í5 +LNS+M'9 5 e 5 ¦ 5 78W<: 5 ° E W<'eBVB 5 W 5 ;$ E +7G.: 5 e 5 .e â 5 ;$ E :Gi+p â :GRM 5 CJ·^M']+Wæ;$0RW 5 W<+e%:8­7G 5 .eL;$'>e; 5 Y%R 5 7UY%R.1 5 ¦ 5 [>78; 5 L>M 5 5 W).MK; 5 7X++

V E T 5 .e E +78K; E E ;.78:8.1 E Z`&h=^iXi$V#ZiXT_&d¡Zi\7d`_C2½`:8.M'._NW 5E<5 W<]: 5 ; 5NC? HD VY%RJ1+78+W 5%E Wi E ;$Ke%:GVL7Ub'e E >7G'7a¯$;$' 5 e 5 78Y%R'1 5b5 $v*: 5 C@¤ Y%R(+M'¦§_)]) E '>W<+e%:8:G7Ue E 78+1+7 5zE :G78.ez E8E ; 5 5 W 5 78RW<+e%: 5 +WæRWize 5 1#M'.e9e 5 7UY%R'1 5 C=»zM.'e9äo$"b]0¦ +.:8zÍU9Wi;#;#>78S+T 5 ;$0+¯;. 5 78 5 5 7G 5 ;zMK E8E C»?dW

E +R';]¦ >H:URWi1+78 Ç +S+T 5E5 78 5 1M 5 7#;1I7GK­I1>M A³=;:?AË:? C¬? EGE 178'­I1+M'e;$K+ E )e 5 5 7G 5 ;ä+M' EGE 0¦ 5 d;$NMK7U; 5z5 W<]: 5 ; 5 b'[7S¦iS^&dXS ' C 4 EG5 :G+e9 E K; 5;$NMK7U; 5 VÌ E :G E >78­ 5 5 e: 5 ;$z+e%:G7U;L7UMK E8E V 5 W)]+: 5 ; 5 t+M 5 Y%RM6+M' EGE 5 ; E +7<g$NR$:U;C,?kg$ E :GVd 5 7G]>WVdRW 7 5 M.>W<Í 5 W 5 'e;$K+7<78--°ö sçY%R'78­zg$>+R$:87bz+M' EGE iY%R< E :G<] 5 5 e%: 5 ;)>e%:G7U;Vy1% E : 5 Y%Riä°ö s E +W<78)'eKK+g$>RLS+T 5 5 73W<+ 5 ; 5 W<]: 5 ; 5 iS^S:b=`]\cbaf:^cb[ ° SXd:b[XVÒ Ó ¤«Y%Rͦ§78+W 5E ]78K7 5 W<]+: 5 ; 5 f:^cb[)Y%R^+¦ :GRLbbU9W<; 5 e 5E8E5 5 e%: 5 ;$^>e:878;liS^dXSPCÌO 5 Y%R78>M''_> 5 W<]: 5 ; 5 o ËD&A?=DUÊA VU9Wi; 5 e)M'.e9)o/0; 5 7 5 7UWii"NC 3JW 5E :G7U; 5 e 57 5 78W<Í"NC /C

9:;%<:=?>=D © Bu@F n: Z p= KG p; ZU[ L&: G = KG%Û = Z?H yE\ ×_ HK :Q¥ÙYQ=^Q^Spt`-y HK :¥ÙYQ=^^PÙ J : K = O Y G BY G p G Y J nÌÕde n JK Ù; [G yEÕg n JK Ù; [G y?lÕ HK :¥Sn; ZbHK a;%: K&N6G ÍUØ Û l%Õh n JK Ù; [G y?lB > G%K%N ; [ ^ K = K6Z LXn JO Y Z Lí>= Z?H y| Ö =Qp=RY%= H <RÎ K : ZbH <ÕE?Øl%Õi n JK Ù; [G y?lBY Z > Z&K Y;L&=Y^Dl%Õk n JK Ù; [G y?lBY Z > Z&K ^ K =L j Dl%ÕFrq n JK Ù; [G y?l ZbH p; j6G ^ K = K6Z LcYQ= H <ÔQ: K R& JQHK6Z > G R ZbHZ&KZ =Y Z V G yE%Òl&ÕFuF n JK Ù; [G y?l Z a HG G&H[ l%ÕFr\ n JK Ù; [G y?l ZbH p; j6G ^ K = K6Z Ll fPpCBLQ;?>n6Y GQKG Ó=b> G yEtflbR^ K =Q: K yE%Òl%ÕFr_ n JK Ù; [G y?lén;Unl%ÕF|d n JK = O6G Yåy?l G&H[ ­l%ÕFre n JK Ù; [G y?l ZbH p; j6G ^ K = K6Z LcYQ= H <ÔQ: K R& JQHK6Z > G R%a ZbHZ Y Z V¥Cyé?Øl%ÕFrg n JK Ù; [G y?l: GQK&J : H l%ÕFh n JK Ù; [G y?lB G&H[ > GQK%N ; [ l%ÕFri ë ¤\W<]+: 5 ; 5#>MA >78; 5 :G+W 5iE >R'e%:G(¦ 5 78Wi: 5

[7SXd T\b[7S7\&dS=Q_ =ñZ%f:_&S=Q\&a¡iS^&S:b&`TXXgchb&`ðf:^cb[ Ò a ©X^&]7^7WXh=^[XW ° S&d:b'[X Z6hbf³bS h=\`^7h7i Z6hbf³bS iS^`ö b'[7]\&ö_iS^&S:b&`h=^[XMXdXSW X[7S:b f:_7Wb'[:bScb^7hbX_ ' ±b&[_ _[ab'[7]\&ö_iS^&S:b&`gb[XSXd_X_7W7iS^&dXS ' ±T\T

_[aeU b'[7]\&ö_iS^&S:b&`h=^[XMXdXSW X[7S:b f:_7Wcb'[bhb

Page 284: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© ' ©M§¨X¯© ®%ªi

i

i

i

i

i

i

i

q Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

d7_&S=7d=[Z3_[af:_&S=Q\=a

·^e%:G E ;#.e'+'73g$NRS>T 5 ;+M' EGE i 5 7bW<+ 5 ;&U9Wi;iS^&dXSPV 5 W<]: 5 ; 5U9W<Äh=^[7XdXS«Z X[7S:bf_Z b'[bS:b^Xhb7_ Y%Ri7G+: 5 7GezRW .e%:G>.7 5 Ci? EGE iW<]: 5 ; 5E +7U­;$ E +R$:GK; 5 e E >S>T 5 "N$C # 5 Y%R)+M'3¦§_3]).e'+'M.'_>7 5 *78Re%:G'W< 0;Íe 5E8E ÍM.'eR+WC¤Ë1M 5 7 5 7 >M.07G+: 5 78e; 5 'e;$K+ E 0Í.e'+'M.'_>S+T 5 ¦ 5 [L>W0p E RN;$';; 5 ù 1M 5 7(.RM[_+>7 5 ú 5 R E JRW¨+787 5)5 5 7878+RBC[?dW + EG5 ;$+787 5 V$)U9LWi;)(iS7^&dXSieT 5 ](¦ >H:UC

¤îM.>H: 5 7Wi E :8+e%: 5 ;+1<:8+70L>78++K; 5 Y%R# 5 7U;+W E 5 M'9K;+R E 78­zRW7 5 M'+Wi E 5 7 5 78Wi; 5 7#;$>+';$'R ;>MK7U7zRWÙW<]: 5 ; 5 f:^cb[ ° SXd:b'[7VÒ Ó e 5ÑE +R7 5 78W<

X++C f +78WieNÍ â RWÿ+g$+7U â 5 ù 1+7<·^I+e;$K· ú3 E +7)7G E5 M.1K; 5 <:8]

5 eL;$J E8E5 ]JRW¨7 5 M'+Wi)JY%R E`E +78KWî E 5%EGEGâ 1+ EaE5 M.RS È E C·^ 5 7U0Y%RFv­3:G+W 5%E RWî7UY%R'1 535 e;$J>787 5 ¯$;$' 5 ;<MK E8E 1W 5%E 78>M.'_>76 EGE

5 t+7US>T 5 78b>;JRW; 5E >M.>W<+e%: 5%E ;$>e:87 5 ;bMK E8E Cd¤ñW<]+: 5 ; 5 Y%R»:G7U:83; 5 5 7G 5;<MK E8E (]W 5%E :878; 5 e 5 7 5 7UWi#"I$C C f 7U) E +M' EGE E e.e9L; E V 5 W 5 v­<1%'W 5E V 57 5 E8EG5JE ^78+t:8^»RW e 5 1 5 7UYR.1 5JE +7U­78K; 5 CØ·^e%:8 E ;>78S+T 5 ;$ ¯$;$' 5 78 5%E 5 e E :G78R$: 5 7G E C 5 W)]+: 5 ; 5 7 5 R7UJe(:Ut+MKb;$ EGâ W0 5 M 5%E RW 5 e E :87GR$: 5 7 E +W 7U®W<+:G7 5E78i#+M' EGE b 5 7G78+e%:8Ca?dM'0>7:UW<+e%:8bg$ E :8Vt 5 E VL 5 W 5 1.W 5%E e 5 > â :GRM 5 "N Vt+ EG5+M')eT 5äE vÍ;$NMK7U; 5 t+M 5 7 5 7UWi; 5 7>V 5 78¯7G 5 eLM' E ; 5 7 E +Wi®e%:8' 5 RK;78­z;$'e E >7G.prM 5 e):8L>M'<;$ EGâ W3 5 M 5E CZ=» E :Gb> EG5 V 5 +W< 5 Å A É D ;<>e:878;0]1+7U;;$+'7 5 'e;$K+iY%RbRWi<'W<M.>W<+e%:8S+T 5 pXL;$7UT 5 ;$+1 E >7^>78;)7U) E :G3 5 e E :G78R$: 5 7NV 5 YRb]¦ +:GR; 5 L>M 5 W<]+: 5 ; 5t»XDËA ³?Ë o ? ˾D Å A@C? W 5E :G7U; 5 e 5 7 5 78W<Í"NC oC

9:;%<:=?>=D © BªF n JO Y Z LPp; Z&[ Ù; [G Ñ G&H ÙYQ=^^UÐ6; [ ¥QÓ6; [G yÙYQ=^Q^UÐ6; [ ¥%Ó6; [G v\ K%N :;&ß6^PÑ G&H Ù; [G vL G n K6Z ; H_ ×d HK :Q¥ ÛGQK%N ; [ YåÕeg Z a-yuvA`` HJ YY6í: GQK%J : H Õhi Ù; [G Ñ G&H ÙYQ=^^bÞ G LQY& Z ^ K Ó6; [G yuv/BLQY Z ^ K Õk Ù; [G Ñ G&H Ø=Q:QÞ G LQY& Z ^ K Ó6; [G yuv/BpY Z ^ K ÕFrq YT`SÙ J : K = O Y G B > GQK%N ; [ ï ZbH[ Ò H LQYQ=^^çy?lUL%; H ^ K : J L K ;%:lö HQJ YY6ÕFuF Z a-yÜYBa= j6G Fr\ Ñ G :=Ù; H ^ K : J L K ;%:%Þ G a= J Y K yEÕíRRA^ G LQ; H ^ K : JK ;%:cTa=Y^Q;çö < G := [G a= J Y KFr_F|d Ù; [G Ñ G&H Ù; H ^ K : J L K Þ G LQY& Z ^ K Ó6; [G yuv/BîL K Y Z ^ K ÕFre Ù; [G Ñ G&HÛGQK%N ; [ Þ G LQYU Z ^ K Ó; [G yuvCB >Y Z ^ K ÕFrg ë

9:;%<:=?>=D © BF n: Z p= KG p; ZU[ Ñ G :=QÙ; H ^ K : J L K ;&:QÞ G a= J Y K yE\ ×_ Î K : Z?H <^ J nÌÕd HK :Q¥ÙYQ=^Q^cLQLçÕeg LLX`y HK :¥ÙY%=^^PÙ J : K = O Y G BY G p G Y J nÌÕÈRRon G <=MLQY%=^^ G LQ;&:: G&HKG

Page 285: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& %q/ !)oi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ %q/

h Z a-yîLLåBn6=Q: G&HK ñ` HJ YQY6PRRP=L N = H ;?> Gt[ =A^ J n G :6L%YQ=^^ Gi ^ J nc`SLLåB|n=Q: G&HK BLQ;?>n6Y GQKG Ó=b> G yEÕk G Y^ GFrq ^ J nc`l Ö =Qp=RYQ= H <R OÖ%G L K lÕFuFFr\ RRX< G :=M;tLQx [6Z <;Xn6=Q:=M;SLQ; H ^ K : JK ;%: [G a= J Y KFr_ n JK Ù; [G yEÕF|d n JK Ù; [G y?lÕÞ G a= J Y K LQ; H ^ K : J L K ;%:/BÜÙ=YQY^S^ J n G :CyEl&ÕFre n JK Ù; [G y?lB > G%K%N ; [ n JO Y Z L äZbHZ&K yEØl%ÕFrg n JK Ù; [G y?lBY Z > Z&K Y;L%=Y^Dl%ÕFh n JK Ù; [G y?lBY Z > Z&K ^ K =L j Dl%ÕFri n JK Ù; [G y?l?=Y;%= [ ÏQsl&ÕFrk n JK Ù; [G y?l ZbH p; j6G ^bn G L Z =Y!l fM^ J ncfml?R äZbHZUK yE?Øl%Õ\uq n JK Ù; [G y?l: GQK&J : H l%Õ\F n JK Ù; [G y?lB G&H[ > GQK%N ; [ l%Õ\u\ ë ¤Q:878:8W)>e%: 5 ;$`RWiJ;$>+M'78S+T 5 ;$a178'­I1+M$;$`'e E :8®eLK ]a E :Ue%:G E .W<M' E V 5 W 5

W 5E :G7U 5 7 5 78W<("I$C C f 7U`+;`e¯ xA6˾­D o CE½ HD e 5 5 78 5 ;»+M' EGE k]d78>RL>78;`+e%:878; 5 7G78 E 5 e;$>e:8ae(:8L>M'b; Eâ W3 5 M 5E »;$+ 5 E ]»+7U; RW<3;$.78:8.1Z3b_Xh&atC¤ËW<]: 5 ; 5¾H³ o AÆcA ]<;$>+M'78; 5 E :878: 5 eLz+M' EGE ¸?QË=<CÇABCD 0.W<M'+W<>e:U; 5 +W+;(RWiJ; EdE R EkE RPMK E8E E CÌ?dM'^;$+1 5 M'1FRW E :G78'ebY%Ra7G>7G E >e%:8 5 :G' 5 ;(>e:878;ù e 5 > EG5 V 5 :G' 5 ;z178'­I1+M ú`eRWæ¦ 5 7GWi: 5 pr;$78T 5 ;$ Ç eK; 5 L>M'ä°ö(s,C fZ5 7Jg$>W)M 5 V78 5E :8. 5E ;J;; 5%E +W

X++V$:G>W 5%E E`E +R.e%:8 E 78+78 E +e%:8S È E

D ' 5 c`+7G E >e:US>T 5b[7S ±iSXd:b[X a ©=^&]^7WXh&^[7W ° SXd:b'[X ñ ² h=^iXi a ñ ² h=^i=i b[7SVÒ Ó Ò ±ñ ² h=^iXi ñ ² h=^i&i ° Ò Ó Ò Ó ÒXÒ a ñ ² h&^iXi ñ ² h&^iXi °

9:;%<:=?>=D © Bu«F n JO Y Z LPp; Z&[ Ù; [G Ñ G&H Ø=Q:%Þ G LQY&Ó; [G yØ=Q:QÞ G L%Y&Ó6; [G v\ ×_ Z ^ K Ó6; [G nÌÕd HK :Q¥QØ=Q:cYåÕe HK :Q¥= O Y G LX` HJ YYåÕgh Z a-yuvA`` HJ YY6í: GQK%J : H Õik a;&:ãyrnM`Pv/Bp=Q:^çÕ(nòñu` HJ YYåÕðnM`Tn B H6G v K Frq ×FuF Ø=Q:QÓ; [GtI `yØ=Q:%Ó6; [G ínÌB H ; [G ÕFr\Fr_ RRon G <=wp=%: Z%à p G Y H = K = O6G YQ=F|d YP`SÙ J : K = O Y G Bp=%:ï ZbH[ y I B|n;^ Z&K6Z ; H B Z >=%< G ÕFreFrg RRT< G := [6Z : GQK6Z p= Ba Z%G Y [Fh n JK Ù; [G y?lBa Z%G Y [ n JO Y Z LmlÈfAYB H =b> G flSl fAYåB [ ^L×Í&=Qp=yEQÕFri ë

Page 286: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© 'Qª §¨X¯© ®Q«i

i

i

i

i

i

i

i

q Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

¤:878:8W)>e%: 5 ;$kRWi`;$NMK7US>T 5 ;$d 5 e E :87GR: 5 7NV¦ >H: 5 t+M 5 W)]+: 5 ; 5 e 5 7 5 7UWi»"I$C¼qV]<RW 5 RL 5 M 5 e 5 C)· EGE .WVÌeM' E 7G>W 5%E 5 7J7:8 E C l e'+'M.W<+e%:8)]<W 5 e%:U;ääM. E :U;$<:8. 5E ; 5%E 7U®W<+:G7 5E Y%R<]VÌ>e%:8T 5 VBR E ;z78äM 5 >M'._N7ä+e%:G7U;z; 5 5 e E :G78R$: 5 7eb:8t+MKb;$ Eâ W3 5 M 5E CZ·`YRL1M'»e 5 :87@Wi E RW<31>_»Y%R 3R E + 5 ;$+78' E >76>1%.:8;E 0 E8EG5 +'­ EGE +W 5%E #>e:878;#;Í:8L>M'z 5 e¯z;z­781 5 7G E .e%:U­:GK+Íe 5 W 5 W)>e%: 5 >W Y%R5<Eâ W3 5 M 5 ]J'e E +78'; 5 e3:8L>M');$ Eâ W3 5 M 5E CZ? E8E 0W< E W< 5 E >7G1S>T 5 1M.J783W3R.: 5%E5 R:G7 5E 5 e%: 5%E e+7US>T 5 ;$»¯$;$' 5 C[· EGE 'WäVeT 5 1IW 5E 78+t:8HprM'(: 5 ;1>_V Ç +e; 5bEG5 'eRW0cI>eK<; 5 M'+.: 5 7`K;$>e:8 Ç +­prM 5E C=»»M.'e9^/^ E R E >Y=k>e%:G E ]6+M'+RMK;``78+7G E >e:US>T 5 ; 5E :G' 5%E ; 5E L7U®W<:87 5%E e

¦ 5 78Wi^;$6RW E :87G'eLVI;6 5 7U; 5 5 Wê;$7UT 5 ;»°ö s; E 78H: 5 e%:G>7G 5 78W<+e%:GC̽`:8.M''_>eL; 5 E8E <.e$¦ 5 7GWiS+T 5 ]+7U;<i;$'7G+:G'1ZGf_&S=Q\=a<e 5 7UY%R.1 5 ;$ E â ;C`¤e 5 W<R$:G'M'._N; 5 V;$ 5 7U; 5 5 W 5 ;$78T 5 ; 5 ° E W<'eÑ°ö s,V6]ðõb'[bS 5 :G' 5 ;$&7G+: 5 78e 5 ]üGV78+78 E +e%:8; 5 t+M 5 PC· E >R'7NVM'Re E +g>W<M 5%E 465 e E :87GR: 5 7 4 t>S>M'9 5`\[:iSXd=:`S7\&d ' ZGf_&S=Q\=aT=Xgchb=`õb[bS ' `\[:iSXd=:`S7\&d b[XS ZGf_&S=Q\=aT=Xgchb=`õb[bS ± `\[:iSXd=:`S7\&d iS=d:b'[7 ZGf_&S=Q\=aT=Xgchb=`õb[bS a ©X^&]7^7WXh=^[=W ° SXdb[= `\[:iSXd=:`S7\&d b[XS Ò Ó«Ò Ó ZGf_&S=Q\=aT=Xgchb=`õb[bS ÒXÒ ±

9:;%<:=?>=D © B('F n JO Y Z LPp; Z&[ Ù; [G Ñ G&H Ù; H ^ K : J L K Þ G LQYUÓ6; [G yuÙ; H ^ K : J L K Þ G L%Y&Ó6; [G v\ ×_ HK :Q¥ ÛGQK%N ; [MK Õd HK :Q¥Q G LP:A` HJ YYçÕe HK :Q¥= O Y GcG Õg HK :Q¥ÙYQ=^Q^ K&NZ ^LQY%=^^çÕh HK :Q¥QØ=Q: K%NZ ^&p=Q:Õi Z ^ K Ó6; [G nÌÕk Ø=Q:QÞ G LQY&Ó6; [GAI ÕFrq Ø=Q:QÓ; [GPJ ÕFuF ZbHKPH ÕFr\ Î K : Z?H <^ J nc`llÕFr_F|d Z a-yuvA`` HJ YY6í: GQK%J : H ÕFre nA`tv/B O ; [ ¥/B|n6=%:=b>áÕFrg H `SsÕFhFri RRÈ>; HK =A=SY Z ^ K =MLQ;?>m;^ K6Z n6;^ [ ;^ín6=Q:âb> GQK :;^Frk ß NZ Y G yrnêñu` HJ YY6\uq ×\F RR I ` H xAL%;?>m= [G LQYQ=Q:=!² ; [ ;ín6=Q:âb> GQK :;\u\ I `yrØ=Q:QÞ G LQY&Ó6; [G on B H ; [G Õ\u_ J `yrØ=Q:QÓ6; [G I Bp=Q:6^åB H ; [G ÕóRR J ` H xSLQ;?>; H ;?> GSGP[6Z > G&H ^ ;\d H ffÕ\ue\ug RRt=L N =S= G&HK := [ = [ ; KZ n; H = K = O6G Y%=\h G `SÙ J : K = O Y G BLQY%=^^&ï Z?H[ ènÌy I B|n;^ Z&K6Z ; H B Z >=Q< G Õ\ui\uk RRSL%; H ^ K :x Z =AY Z ^ K =MLQ;?>m;^ K6Z n6;^ [ ;^ín6=Q:âb> GQK :;^

Page 287: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& %qo !)%qi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ %qo

_uq :S` HG ßt HK :¥Q G Lçy G ö J B [Z >áö H ö(:Õ_F nM`TnÌB H6G v K Õ_u\ ë_u__d Î K : ZbH <Pn=Q:Y Z ^ K `mllÕ_ue Z a-yu: ñu` HJ YY6_ug ×_h :S`t:CB ZbH p G : KG yEÕ RR ZbH p G : KG =tY Z ^ K =_ui RR >; HK = [G ^L&: Z&K ;%:tn6=Q:=AL%= [ = J > [ ;^ n6=Q:âb> GQK :;^_uk n6=Q:Y Z ^ K `t:CB [ ^L×Í&=Qp=yEÕdq ëdîFd\ RRT=L N =A= G&HK := [ = [ ;tLQ; H ^ K : JK ;%: H = K = O6G YQ=d_ K `SÙ J : K = O Y G B > GQK%N ; [ ï ZbH[ y?lULQ; H ^ K : J L K ;%:lö :Õdud Ù J : ÛGQK%N ; [ ` K Õ RRP< J =%: [ =o> K ; [ ;MLQ;&:: G&HKGdedg RRX< G :=cL%x [6Z <;on6=Q:=A;SL%= O6G ²&=Y N ; [ ;tLQ; H ^ K : JK ;&:dh n JK Ù; [G yEÕdi n JK Ù; [G y?lB > G%K%N ; [ n JO Y Z L äZbHZ&K y?lofon6=Q:Y Z ^ K fl%Øl%Õdk RR H W%> G :;o> à v Z >; [G YQ;L%= Z ^ JK6Z Y Z V= [ =^euq n JK Ù; [G y?lBY Z > Z&K Y;L%=Y^ml f K B K ; K =YY;L%=Y^ÕeF RRín G <=A= G&HK := [ = [ =SLQYQ=^^ G LQ;%:: GUHKGPH = K = O6G Y%=eu\ K%NZ ^LQYQ=^^t`-y HK :¥ÙYQ=^^PÙ J : K = O Y G BY G p G Y J nÌÕeu_ RRín G <=M; H ;?> GP[ =M^ J n G :6LQYQ=^^ Ged Z a-y K%NZ ^LQYQ=^Q^åB|n6=Q: G&HK ñu` HJ YQY6eue ^ J nc`yy HK :¥ÙY%=^^ K&NZ ^LQY%=^^åB|n=Q: G&HK BîLQ;?>nY GQKG Ó6=b> G yÕeug G Y^ Geh ^ J nc`l Ö =Qp=RYQ= H <R OÖ%G L K lÕeuieuk RRXp G : Z a Z L%=c^ GPKG >zL N =b>= [ =A=;S^ J n G :6LQ; H ^ K : JK ;%:guq Z a-yñ Ù J : ÛGQK%N ; [ B N =^^ J n G :gF × RRA^ GXH6 ;åö3L N =b>=M^ J n G :Cyégu\ n JK Ù; [G yéÕgu_ n JK Ù; [G yl?=Y;Q= [ ÏQslöXDQÕgd n JK Ù; [G yl ZbH p; j6G ^bn G L Z =Y!l fM^ J ncfmlbR äZbHZ&K yE?Ølö ¨ DQÕgue ëguggh RR ZbHZ L Z = J > H ;&p; G ^L%;Un; H = K = O6G Y%=MLQ;%:: G&HKGgui Ù J : K = O Y G B O6G < ZbH ÎLQ;bn G yEÕgukhq K%NZ ^&p=Q:M` H6G ßS HK :¥QØ=Q:Cy?l K&NZ ^lö K%NZ ^LQYQ=^Q^çöÜsÕhF Ù J : K = O Y G Bu= [[ y K%NZ ^Up=Q:Õ RR Z?H LQY JZ p=Q: Z%à p G YAY;L%=Yml K%NZ ^lTLQ;?> H W%> G :;Psh\ Ó6YQ;L%=Y^t`cDÕ RR ZbHZ L Z =Y Z V= H W%> G :; [G p=Q: Z%à p GZ ^SY;L%= Z ^h_hrd RR ZbHZ L Z =Y Z V= H W%> G :; [GSG ^bn=!²Q;^S;L J n6= [ ;^ H =Xn Z Y N =he ^ K =L j Î Z V G `A^ K =L j # Z < N `tsÕhg Ù; [G Ñ G&HÛGQK%N ; [ Ð6; [ ¥%Ó6; [G yv/B O ; [ ¥Õhuh Ù J : K = O Y G B G&H[ ÎLQ;Un G yEÕ RRT: G%K6Z :=Sp=%: Z%à p GZ ^SY;L%= Z ^ [ = K = O6G YQ=hi n JK Ù; [G y?l: GQK&J : H l%Õhk n JK Ù; [G y?lBY Z > Z&K ^ K =L j l f-y K B K ; K =Y^ K =L j `M^ K =L j Î Z V G Õiuq n JK Ù; [G y?lB G&H[ > GQK%N ; [ l%Õ RRTa ZbH =Y [ ;í> K ; [ ;iF ë

Page 288: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& %q !)i

i

i

i

i

i

i

i

q Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

?dW E >RK;VÌeM.'e9o VØ])+7U;;$'7G+:G'1¡Z6hbf³bS£h&\`^7hi<R:G'M.'_>e; 5 'e$¦ 5 7GpWiS>T 5EG5 78 5 eXHW<>7 5 ;Í178'­I1+ E M 5 > E Y%R 5 W<]: 5 ; 5 R E zY%Rͦ 5 F7G>1'W)>e%:Gù§e­M' E E +Wi®e%:GK+%ú@>MKRMK; 5 JR7U;; 5 e0:Ut+MK); Eâ W3 5 M 5E Ck· L7G:G'7^; â V$.e'+'pE b+7US>T 5 ; E 'e E :G78RS È E ; 5 5 e E :87GR: 5 7NCØ·»e%:G E ;$('e'+'7F3>78S+T 5 L7U 5 5 78 5 ; 5 5 e E :G78R$: 5 7>VI1>7G Ç >p E E 6 E :8 E @'eKK 5 W RWi(U9Wi;^ 5 5 e E :87GR$: 5 7Z; E Rt+7UMK E8E C? E8E )'e$¦ 5 78WiS>T 5 ¦ 5 Ì78Wi_>+e;be)>e:878;); 5 W)]+: 5 ; 5 Ve0:8L>M'<;$ EGâ W0 5 M 5%E C 4 EG5eT 5 +g$ E :8z:8M@U9W<;z]i+7U; 5 +¯;. 5 U9LWie; 5z5 5 e E :G78R$: 5 7; E RL>78+M' EGE E +We>e9RW¨7GRW<+e%: 5 ù M'.e9<%úC?dW E >RK; E T 5 ¦ +.:8 E M'RW< E .e'+'M.'_>S È E e:8 E ; E #U9LWi7 5 W<]: 5 ; 5 7U

>7876+¯;. 5 7U 5 5 7G 5 ; 5 5 e E :G78R$: 5 7>CØ?dW7:8'+RM'7>V E T 5 'eKKM'._N; E E 178K­I1+ E³?A oÉ ;åòµD ³?A oÉ7f %Á YR& 5 e:87 5 M'W 5 eXHW<+7 5 ;$- E S 5E R$:8.M'._N; 5%E eà.M'9C? E :8'e$¦ 5 78WiS>T 5 ]iR$:G'M.'_>;78z>787J;.78:8.1£Zhbf³bSiS7^`öPVÌt¯ EJ5 78: 5 78e 5 ;$ H7D»XD6ÊMD7? HQº H<6½ HXD CPök*vW 5E V$+e%:8T 5 V 5 W 5 EGE (1IM 5 7`]+MKRM'; 5 C· >;b.e E :G78RS>T 5 Y%R ]»>78;VR$:G'M'._Ne; 5 p E 5 W)]+: 5 ; 5N? H7D V 5 ;$p E .e¦ 5 78W<7

Y%RM]@a178'S+T 5 ù§ 5%E .:G'1 5 Re+:G'1úPe 5 :UWie9 5 ;`.M'9C fZ5 7B+g>W<M 5 VN^.e E :G78RS>T 5üG&)]0+7U; E >W)7G E <U9Wie; 5#5 W<]: 5 ; 5 TX7S ² \=a7_ b^=aXa Ñ VL'e;$K+e; 5 Y%R'M.9L,;$>+7G E +;$RWi,ReK;;$ 5 W +gNRS>T 5 ;$ E :U.e E :G78RS>T 5 C · E8E 'WV^;$+e%:G7 5; 5 W<]: 5 ; 5µNC:? HD +g$.K; 5 e 5 7 5 7UWi&"I$C VB 5 ;$p E # 5 e%:87 5 M'7 5 :UWie9 5 Y%R#'M.9L0;$>1 :G>7aL¯ E 0g$NRS>T 5 ;0'e E :87GRLS+T 5 V$ 5 7G:8e: 5 V:8W3t]+W 5 :8Wie9 5 W<­g$.W 5Y%R3i.M'9ÍM'>eS>i;$R7Ue%:GbÍg$>+RS+T 5 ; 5 W<]: 5 ; 5 C^·1I7GK­I1>M ³?A oÉ!f &Á RL7U; 5:8Wie9 5 ;)'M'9b 5 787G>e%:G Vt¯ E )g$>+RS+T 5 ;0'e E :G78RS+T 5 V$ ³?A oÉ ;åòµD V 5 :8Wie9 5Wi­g$'W 5 MK+eS+; 5 C f 7UÍY%R< E :8 5 7U;+W«¦ ReL 5 e<9­M'RW< E 7G E :87GKS È E Y%Ri>78S+T 5 ;$b+¯;. 5 ;$>1 E +R.7NCZ?dM' E`E >78T 5 +g$M.K+; E e E >S>T 5 "NC /C /C

9:;%<:=?>=D © Bu®F n: Z p= KG p; ZU[ n JK Ù; [G yÎ K : ZbH <m^çö ZbHKcZbH L\ ×_ ^ K =L j # Z < N f` Z?H LçÕd Z aãyî^ K =L j # Z < Nm ^ K =L j Î Z V G e ^ K =L j Î Z V G `A^ K =L j # Z < N Õg a&n B|n: Z?HK Y H ylbõ K õ K lPfS^Õh ëik n: Z p= KG p; ZU[ n JK Ù; [G yÎ K : ZbH <m^Frq ×FuF n JK Ù; [G yî^çöÜsÕFr\ ëFr_F|d n: Z p= KG p; ZU[ n JK Ù; [G yEFre ×Frg a&n B|n: Z?HK Y H yéÕFh ëFriFrk n: Z p= KG p; ZU[ n JK = O6G YåyÎ K : ZbH <^\uq ×\F a&n B|n: Z?HK Y H y^Õ\u\ ë

Page 289: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& %qq- !)i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ %qq

·+7US+T 5 ;$z+¯;. 5 7U;$NMK7US+T 5 ;$ÍW<]: 5 ; 5E0E >R 5 W< E W 5 E Y%R>W<&;;$NMK7US+T 5 ;$b 5 e E :G78R$: 5 78 E V 5 7` EGEG5iE >78­ 5 W<.:GK;iY%RXC

12.3.1 Geração de código para os comandosf E8E >W 5E V+e%:8T 5 V J >78S+T 5 ;$)¯$;$' 5 78i 5E 5 Wie; 5E C`·;$NMK7US>T 5 ;$b178K­I1+ EM 5 > E eLT 5 +7U3¯$;$' 5 VWi E 78>+ E W 5%E V% 5 W 5 v­¦ +.: 5 e0e­M. E E >Wi®e%:GK+V%+R';7a;$'eM'R â pXMK E ei:Ut+MKÍ;$ Eâ W3 5 M 5E Vt 5 E Y%Re; 5 RW 5 Wie; 5iÇ _+>7 78¦ >7I>eK#zM'RWi;$>M' E 78>+ E 78+W 5E ;@M'RWi E 'e$¦ 5 78WiS È E 7U``+7US+T 5 ;$6+¯;. 5 CÌ· EGE .WV 5 W<]: 5 ; 5Y%R):G7U:Uz;;$NMK7US>T 5 ;)17GK­I1> E ] E 'W<.MK7 5 1 E : 5 e 5 > â :GRM 5 ""C0·^M' 5E .W<'M'7 5 e%:GN#L7U 5 :878:8W)>e%: 5 ;$ 5 Wie; 5 5 W< 5E : 5 V6 HD»XDQºOC oÉ ½ HXDÌ¿ºËC 7oÉ ½ H7D¹ à Cl eKKW 5E 5 W RW 5 Wie; 5 E :Ue%:G E .W<M' E 5 5 WieL; 5 T7db[7SPC = +7US>T 5

]ÍR:G'M.'_>;RWi-U9Wi; 5 W<]+: 5 ; 5 9: ü± EG5 7GÍ&178'­I1+Ml !o±73; 5 78Re%:G'W<°%I1IV%Y%R»:8W3t]+W E :8­);$ E 5 e â 1+Mte 5 78Re%:G'W<

X++C[? E :U3](RWi3; E 1Ie%:8+e E +W E

R$:8.M'._N7Z»°ö s 5 W 5 M.1 5 ;»+7US>T 5 ;$a¯$;$' 5 C[¤ÑW<]: 5 ; 5 W 5E :G7U; 5 e 5 7 5 78WiJ"N$C 78.W<>.7 5 +7Uͯ$;$' 5 Y%R)+W<'M.9 5ä5 $v*+: 5 c !±7XVB;$+ 5 E U9W< 5 W)]+: 5 ; 5 Y%R>78 5 +¯;. 5 78#zg$78 E8E T 5 ; 5 T7db[7SPVt;+.g$e; 5z5 78 E RMH:U; 5 e 5 : 5 5 ;Í'M'9VyV+e%:UT 5 V+7U 5 ¯$;$' 5 78<#U9LWi;<; 5 W<]+: 5 ; 5 « ü±cW*!o 9: ü±XVY%RbWieL;<7U E â ;pr;78T 505ÍE :G78'e#Y%Rb E :8­#e 5 : 5 5 ;i'M.9C`= 5 :8beiU9Wi;i;$ N? H7D5%E1M 5 78 E J.eL78+W<+e%: 5 b;$N78+W<+e%: 5 ; 5 :UWie9 5 ;).M'9C

9:;%<:=?>=D © B ¬F n JO Y Z LPp; Z&[ Ù; [G Ñ G&H 9: Z?HK Ó6; [G y9: Z?HK Ó6; [G v\ ×_ K ¥%n GPK Õde Z a-yuvA`` HJ YY6í: GQK%J : H Õgh n JK Ù; [G yEÕi n JK Ù; [G y?lÕ O6G < ZbH ^Tn: Z?HK l%Õk RRtLQ;Y;L%=MÎ%¥6^ KG >ìB; JKtH =Tn Z Y N =Frq n JK Ù; [G y?l< GQK ^ K = K6Z L Ö =%p=RYQ= H <RÎ%¥^ KG >RQ; JK Ö =Qp=R Z ;R&9: ZbHK Î K : G =b> Õ?lötDQÕFuFFr\ RRtLQ;Y;L%=S: G ^ J Y K = [ ; [ = G v%n: G ^^ ; H =Tn Z Y N =Fr_ ^ K ;%: G `ta=Y^ G ÕF|d K `SÙ; [G Ñ G&H v&n: G Ó6; [G yuv/B G v%n:ÕFre RRtL N =b>=t9: ZbHK Î K : G =?>ìB|n: Z?HK yÎ K : ZbH <Frg n JK Ù; [G y?l ZbH p; j6G p Z : K%J =Y!l fFh l Ö =%p=R Z ;QR&9: ZbHK Î K : G =b>RUn: ZbHK y Ö =Qp=RY%= H <RÎ K : ZbH <CÕ?Ølö ¨&© ÕFri ë

¤æW<]+: 5 ; 5 Y%R:G7U:U;äRWþ 5 Wie; 5 d_X^=a:8W0L]>W ] E :Ue%:G E .W<M' E V6 5 78]+W 5E8E RZM'RW< E 7:8'+RMK78';;$ E YR3W<+78>++W E >7( 5 W<+e%:U; E C 465 W 5 eT 5 ; 5 :8W 5%E< 5 7U;+W;$b7GWi_++eL7ae 5 e¯#;<­781 5 7G E .e%:8­:GK+ 5 :G' 5 ;<g$78 E8E T 5 V:G+W 5%E Y%RU9W<7@e 5 1W)>e%:G 5 W<]: 5 ; 5 Y%R^¦§_(0U9>>>W ;»:8. 5 Ck=»T 5 78b1+78 Ç +7 E »g$ E :8M'RW7 5 M'+WiV 5 E EGEG5 ¦ 5 $¦ >H: 5 eJe­M. E E +Wi®e%:GK+VWi E 5 7UY%Ra7GN E W 5EZE L>7Y%RM 5 :G' 5 ;(+g7G EGE T 5 L7U»+7U7 5 +¯;. 5 ;$`U9W<;»; 5 W<]+: 5 ; 5 5 7878: 5 7U»¦§_+>7

Page 290: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& %q !) i

i

i

i

i

i

i

i

q Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

M.>H:8R78 5 R);$FRW'e:8+'7 5 V 5 R);$aRW E :87G'eLCØ·^W0 5%EZ5E W<]: 5 ; 5%E +e 5 e%:G7UW)p E 6e +M' EGE L=üy 9 17cü±!#FY%R6'W<M'+W<+e%:8 5 7GRe%:8.W<

X++ù m >S+T 5 "I$C %ú C[·ÑU9LWi; Y%RM'Y%R>7

RW«;$+M' E ;$>Hg)RW¨e 5 1 5 1M 5 7`e)'M.9LVY%R] 5 1M 5 7aM.K; 5 e<>e:878;pr;$78T 5 C¤ 78Wi_>+eW)>e%: 5 ; 5 1M 5 7)eT 5 5 ; E +7<+7U; 5 e E :GäW)]+: 5 ; 5 C f 7U:UMXV E >7GK

eN E8E ­78 5<E L>7^Y%RM 5 :8. 5 ;$b7GWi_++eLW<+e%: 5 Y%Rb;$>1 E +7`¦ >H: 5 E b<RWi<178'­I1+MM 5 >MXV[RWi178'­I1+Md;$#'e E :8®eK 5 RàRW >M.>W<+e%: 5 ;#RW 7878IC f 7U EGEG5 V E >7GKeN E8E ­78 5 eLM' E 7» E RL­781 5 78Hg 5 ;$ E :8be¯LC`?dWæ1>_b;$ E8EG5 Vt]bWi7U+;ii178'­I1+M³? ËD V'e;$K+e; 5 p E 3 5 W<]+: 5 ; 5 Y%R3:G7U:8Í; 5 e¯äHg 5 VtY%R3 E :Ui]3RWi 5 L>78S+T 5 ;$:87G'RKS+T 5 C(¤ E W<]: 5 ; 5%E Y%R3:G7U:UW ; 5E :G7I E :G' 5%E ;3e¯ E Y%R3 5 ;$+W 78>++7» 5 W 5Ç M'9 5E ; 5 e¯# 5 7878+e%:GJ;$+1+WV$+e%:UT 5 V$1+78 Ç +7F E8E íPt<J+7U7`+¯;. 5 ;J 5 78; 5 C

9:;%<:=b>=mD © BED?sF n JO Y Z LPp; Z&[ Ù; [G Ñ G&H G = [ Ó6; [G y G = [ Ó6; [G v\ ×_ K ¥%n GPK ` HJ YYåÕde Z aãyuvS`Q` HJ YYo: GQK%J : H Õg K :¥h ×i RR KG > I%JG p G : Z a Z L%=Q:c; K6Z n; [ = G v%n: G ^^ ;k K `P¥%n G Ù N6G L j v%n: G Ó; [G yuvCB G v%n:ÕFrq ëFuF L&= K L N yrv6L G n K6Z ; HmG o× ëFr\Fr_ Z aãy K B K ¥A``MÒUÓÏ%±Ê9Q RRAL N =b>=t: G = [ Ò HK ö : G ^ J Y K = [ ; H =Tn Z Y N =F|d n JK Ù; [G yl ZbH p; j6G ^ K = K6Z LY%= H <Ô: K R& JHK6Z > G R&: G = [ Ò HK yE%Ò6lötDQÕFre G Y^ G RQRSYQM^ K : ZbH <cL N =b>=t: G = [ Î K : ZbH <CöÜ: G ^ J Y K = [ ; H =Tn Z Y N =Frg n JK Ù; [G yl ZbH p; j6G ^ K = K6Z L!lÈfFh lbY%= H <Ô: K R& JHK6Z > G R&: G = [ Î K : ZbH <yE? Ö =p=RYQ= H <RÎ K : ZbH </Õ?löSDQÕFriFrk ^ K ;%: G ` K : J6G Õ RR ZbH[Z L%= I%JG A;Un G :=!² ; [G =Q:U>=QV G&H =%< G >\uq Ù; [G Ñ GUH v%n: G Ó6; [G yuv/B G v&n:Õ\F ë

fZ5 7g$>W)M 5 VB1vW 5E e 5 7 5 78W<&"NC.""0 5 W 5 ¦ ReL 5 e 5 W<]: 5 ; 5 Y%R):G7U:U;$RW ¼2HD ¹ ½ HD VÌ1% E : 5 Y%Rz+M'z7GN E >MKRMK7 5 1M 5 7);+g$7G EGE T 5 Y%Rz.eL;$'>&Y%RM] 5 7G7UIà E >7#R$:8.M'._N; 5 ;,g$78 E8E T 5â e;'+C\= 5 :GY%R&e:8 E ;&+M'+RM'7i E8E Eg$78 E8EGÈ E V<17GK­I1>M ³? ËD 7GN+t 5 1M 5 7`¦§M E V 5 E .g 5 ; E :Ge¯LV 5 7^g$>W)M 5 Ve 5 +­M'+RM 5 ; 5â eL;$'+VB 5 t+7US>T 5 ;$ E v;zeT 5 ]<;$<78W<_+>e+WC m ):G'1+78W 5E RWig$78 E8E T 5 5 W 5

d_X^&a£^eÒgKÒbÓ=Ó +e%:UT 5 U9Wi;zä E8E )W<]+: 5 ; 5 7Uäz7G'W<+'78ä'e;$gS+T 5 ù >W 78+MKS>T 5 5 7878IÄ^ú;$>1)7GN+t+7z178'­I1+M ³? ËD 5 W 5 1M 5 7(1+7U;;$+'7 5 Cb°­z78zÍ'e;$+g$S+T 5 ;$lgyV 5E +Rä1IM 5 7^;$+1 E >7a¦§M E5 V% 5 E^E ;$ E *v<t+eL E R E 7 5 1M 5 7`;$¥gKÒbÓ<(eLT 5 7GN;$ Ç eHprM 5 C·^M']+W ;$ EGEG5 V E Z¦ 5 7BRWi 5 t+7US>T 5 ;$@7GWi_>+e>WäV+9­ 5 .eL 5 e1+e'+e%:Gk;$6YR 5 1IM 5 7

E +7»7GWi_>+e; 5 v­<¦ 5 [ 5 M 5 +; 5 e 5 : 5 5 ;i'M.9LiVL 5 7^ E8EG5 V+7Up E <'e E :G78RS+T 5 ;$

Page 291: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& %q !)"i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ %q

£ce9PV%Y%R`'e1+7G:G 5%E ; 5 E 1M 5 7G E e 5 : 5 5 Ck·»e:8 E ;^>787Z E 'e E :87GRLS È E 78J78>+Rt+7U75 R#7GWi_++eL7 5 1M 5 7@e 5 7G7UIV;$+1+W 5E :G+76eb.M'9b37G+¦ +7I+e+' 5 7878IV 5bâ e;$K(; 5+M'+W<>e: 5 ;$ E *v; 5 VL 5 7NHM.:G'W 5 V 5 1IM 5 7^ E +7»7GWi_>+e; 5 ù E ¦ 5 7^ E :8 5 + E5 ú CF= 5 :8Y%R 5E W<]: 5 ; 5%E YRz+7UW ¯$;$' 5 7U& E +g$7G EGEGÈ E 5 e%:8.eRW 78: 5 7GeL7 5 :G' 5;)g$78 E8E T 5 V 5 E E8E 0'e$¦ 5 7GWiS>T 5 5 ;$ E +7`R:G'M.'_>;)e 5 W<]: 5 ; 5 Y%RJ¦§_b)U9LWi;V 5 W 5 5 e:8>+ e 5 7 5 78Wi#"NC.""C

9:;%<:=b>=mD © BEDQDF n JO Y Z L K ¥%n G Ù; [G Ñ G&H Ò H[G vQÓ6; [G yîÒ H[G vQÓ6; [G v\ ×_ HK :Q¥ÙYQ=^Q^cLÕd K ¥%n GPK Dö K© ÕeÚO ;;Y G = HAO `S^ K ;%: G Õgh Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕik RRtL%=YL J YQ=Pn: Z > GZ :;ta Z Y N ;åö3;T=Q::=%¥Frq ^ K ;%: G `ta=Y^ G ÕFuF K D `SÙ; [G Ñ G&H v%n: G Ó; [G yuvCB G v%n:DQÕFr\Fr_ RRt^ G a;&:Pn6=Q:=t=Q:U>=QV G&H =Q:Cö K :;L%= K ;bn;F|d Z a-y O Fre n JK Ù; [G ylU^Uß=&nl%ÕFrgFh RRín G <=cÝ H[6Z L GFri K© `SÙ; [G Ñ G&H v%n: G Ó; [G yuvCB G v%n: © ÕFrk\uq Z a-y O TRQRP: G =Y Z V=A=S;bn G :=!² ;åöÜ=Q:U>=QV G&H =%:c; J L%=Q:Q: G <=Q: H =Tn Z Y N =\F ×\u\ n JK Ù; [G ylU^Uß=&nl%Õ RR K :;L%=M; K ;Un;\u_ Z aãy K DB K ¥S``MÒUÓÏ%±Ê9®Ãà K DB [6Z >``cDQTRRt=%::=Q¥ [GMZbHKGZ :;^\d n JK Ù; [G y?l Z =^ K ;%: G lö ¨ @Õ\ue G Y^ G\ug n JK Ù; [G y?l?=Q=^ K ;%: G lö ¨ @Õ\h ë\ui G Y^ G\uk ×_uq Z aãy K DB K ¥S``MÒUÓÏ%±Ê9®Ãà K DB [6Z >``cDQTRRt=%::=Q¥ [GMZbHKGZ :;^_F n JK Ù; [G y?l Z =Y;Q= [ lö ¨ DQÕ_u\ G Y^ G_u_ n JK Ù; [G y?l?=Q=Y;Q= [ lö ¨ DQÕ_d ë_ue ^ K ;%: G ` O Õ_ug : G%K%J : HSHG ß K ¥%n G y K DB K ¥Cö K DB [Z > ¨ DQÕ_h ë

ö 5 M.:8e; 5 5E 5 Wie; 5E V1*vW 5%E@5 ;$:87G'RKS+T 5 C[?dWîM'Re E E LN : 5%E EGE +W<>M.9pE J 5 d_X^=atVe 5iE +e%:GK; 5 ;$Y%RJ.e E :G78RS È E 7U 5 78Wi_>+eW)>e%: 5 ;(RW1M 5 7`;$+1+7UT 5E +7J>78; E +W M.RWæ 5 e%: 5 C)s E ;$.¦ +78i;$ld7_X^=aä+W 78+MKS>T 5J M'+.:GR7Uä;$<RW 1M 5 7NV 5 E@EG5 W<+e%:G».e%:G>.7 5E@5 R E :G78.e E@E +7UT 5 >H: 5E CØ= 5 + E5 ;3:G78'RKS+T 5 V 5 $v*: 5E 7878I E:8W3t]+W 5 ;+W E +7»R:G'M.'_>; 5E C fZ5 7» EGEG5 Vte 5 7 5 7UWi"NC."I$VeL#M'.e9L">VL]0>78;i

Page 292: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© ®s §¨X¯©Q¬©i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

'e E :87GRLS+T 5 Y%R^ 5 e1+7G:G 5 :G' 5 ; 5 1M 5 7Z E +7d:G78.R â ; 5 V E +WY%R 5 7 5 78W<; 5 7 5 :G+e9¦ +.: 5 g$M''+H:UW<+e%:GCO 5%EGEGâ 1+MXVÌ 5 78]+WVZY%RÍ 5 >78S>T 5 eT 5E v1­M'';C=^ E8E #+ EG5e>e9RWi):G.:GR;b](: 5 Wi;)RWî>7G7 5 ù g+>S+T 5 ú 5 5 7878 e 5 7 5 7UWiV%e<g$NRS>T 5 ;'e E :87GRLS+T 5 $&& XC

9:;%<:=b>=mD © BED ©F n JO Y Z LPp; Z&[ Ù; [G Ñ G&H Í K : ZbO Ó6; [G yuÍ K : ZbO Ó6; [G v\ ×_ K ¥%n GPK Do` HQJ YYåö K© Õde Z a-yuvA`` HJ YY6í: GQK%J : H Õgh RRín G <= KZ n; [ = G v%n: G ^^ ;S~ G ^ I%J6G : [ = [ =P= K : ZbOQJZ ² ;i K :Q¥M×k K Do`tQ¥%n G Ù NG L j v&n: G Ó6; [G yuv/B G v%n:D%ÕFrq ëFuF L%= K L N yv6L G n KZ ; HG T× ëFr\Fr_ RRtL%=YL J YQ= G v%n: G ^^ ;S~ [6Z : GZ&K =F|d ^ K ;%: G `ta=Y^ G ÕFre K© `SÙ; [G Ñ G&H v%n: G Ó; [G yuvCB G v%n: © ÕFrgFh RRXa=QVcL%; G :"² ; [GtK6Z n6;^Fri Z a-y K DB K ¥ ñu` K© B K ¥Ãà Z ^QÎ JQO ÙYQ=^Q^çy K DB K ¥Cö K© B K ¥Frk n JK Ù; [G ylUL N6G L j L%=^ K l f K DB [ ^QL×Í%=Qp=åyEÕ\uq\F RRT=Q:U>=%V G&H =S: G ^ J Y K = [ ;\u\ ^ K ;%: G ` K : J6G Õ\u_ Ù; [G Ñ G&H v%n: G Ó6; [G yv/B G v%n:DQÕ\d ë ¤Q 5 Wie; 5 i=T_&dJ;$+1 E +7Ø:G7U;$R_>'; 5 eRWi U9LWi; ;$FW)]+: 5 ; 5 C f 7U^ EGEG5 VI'eKKM.p

W<+e%:G ]»>W).M'9;378¦ >7I>eKb 535 $v*+: 5 Y%R ] 5 M.1 5 ;0U9Wi;CÌO2178'­I1+MM 5 +M_+>7 5 V 5 R E *vV0178'­I1+M³±$$üUCdû + 5 E ]J+7U; 5b5 +¯$;$. 5 780+;bRWi); E +g7G EGEGÈ EY%R E >78T 5z5%E 78RW<>e: 5E ;U9W<;ù M'.e9L">; 5f 7 5 7UWi-"NC."N/ú C)?dW E >RK;ä]>78;ä.e E :G78RS>T 5 5 W U9W<;ä7U 5 W)]+: 5 ; 5 õb[bS ; E Rt+7UMK E8E i;+M' EGE 5 7G78+e%:8C ·Ë178'­I1+M AË6ÁOC³c? 5 e%:8]+W Í; E 78'S>T 5 Vte#¦ 5 78W<z;$)RW E :87G'eLVP; 5E :G' 5%E; 5%E 7GRW<+e%: 5%E R:G'M.'_>; 5E C[·2178K­I1+M ËD> Æ:D;:?A oÉ# 5 e%:G]>W 5 eXHW<>7 5 ;$`78RW)>e%: 5E Cm 5 W<e; 5 p E b# E :8 E 5#5 $v*+: 5 %$ü VP:8+W)p E 5 e=HW)>7 5 ;$3>M.>W)>e%: 5E Y%R E +7UT 5 78:8.7U; 5E;'M'9e+g$>RLS+T 5 ;.e E :G78RS>T 5 ù§ 5 e E ';+7Ue; 5 p E (v­ 5 ¦§: 5 ;$ÍY%R 5 W)]+: 5 ; 5 eLT 578: 5 7GeL3e>e9RWî1M 5 7UúC

9:;%<:=b>=mD © BED?@F n JO Y Z LPp; Z&[ Ù; [G Ñ G&H Î J n G :QÓ6; [G yÎ J n G :QÓ6; [G v\ ×_ K ¥%n GPK Õd Î K : Z?H <^ J nÌÕeg Z a-yuvA`` HJ YY6í: GQK%J : H Õhi RRínc=&n; HK =Tn6=%:=S= G&HK := [ = [ =A^ J n G :6LQYQ=^^ GA[ =MLQY%=^^ G L%;%:: G&HKG

Page 293: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA© ®D §¨X¯©Q¬ @i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ "

k HK :¥ÙY%=^^Xnc`PÙ J : K = O Y G BY G p G Y J n B|n6=Q: G&HK ÕFrqFuF ^ J nc`Xn BLQ;?>nY GQKG Ó=?> G yEÕFr\Fr_ n JK Ù; [G yEÕF|d n JK Ù; [G y?lÕ O6G < ZbH ^M^ J n G :l%ÕFre n JK Ù; [G y?l?=Y;%= [ ÏQslöTDQÕFrgFh RRtLQ;Y;L%=M;^on6=%:âb> GQK :;^ H =Tn Z Y N =Fri ^ K ;%: G `ta=Y^ G ÕFrk K `SÙ; [G Ñ G&H v&n: G Z ^ K Ó6; [G yuv/Bu=%:<6^Õ\uq Î K : ZbH <A=%:<Y Z ^ K `-y K B K ¥M`` HQJ YY6q³cllz­ K B [ ^L×Í&=Qp=yEÕ\F ZbHK : G >;&p G Î K =L j `y K B K ¥A`` HQJ YY6³Tsã­PyQy HK :Q¥Q G L K B K ¥BL%; HK Õ\u\\u_ n JK Ù; [G y?l ZbH p; j6G ^bn G L Z =Y!l f\d ^ J nMfl?R äZbHZUK y?lofS=%:<Y Z ^ K fl%?Ølö ¨ yu: G >;%p G Î K =L j fDQÕ\ue ë

= 5 7 5 78Wi&"I$C'"+VÌ1+W 5%EJ5 W)]+: 5 ; 5 Y%Ri+7Uä+¯$;$. 5 7UäRW 5 Wie; 5 ¦ 5 7>Cz·M'¯K+0R$:8.M'._N;)78) EGE ( 5 WieL; 5 ;$+1 E +7^ E +R.e%:8

•+7U7`¯$;$' 5 78 5 5 W<e; 5 ;$'e'+'M.'_>S+T 5 ù§M.'e9"Iú m

• 5 M 5 +7ae 5 +¯;. 505 78¯:GRM 5 7\dh=\X\T

NUUV 5 e;

N]RWeXHW<>7 5iE >Y=k+eLKMy;$+1 5 M.p

1K; 5 t+M 5 W<]+: 5 ; 5í:D! » ABXD:C¿Ã ù§M.'e9"Ioúm•¦§_+>7(Í+7US>T 5 78Í#g$78 E8E T 5 ;$) 5 e:87 5 M.CJ¤ +¯;. 5 >78; 5 ;$>Hg#RWæ1IM 5 7'e%:G>.7 5 e 5 : 5 5 ;)'M.9Lù M'.e9Lz"Núm

•+7U7Í+¯$;$. 5 Y%R:G E :8 E 5 1M 5 7zYR Ç 5 Ròe,.M'9,]-_++7 5 V E ¦ 5 7>V^;$ E 1'&g$>+RS+T 5 78 5&Ç eMF; 5 ý¬ù§7G¯:GRM 5 d\=

Nú VZ 5 E05 1M 5 73_>+7 5 'e;$K+&Y%Rä

+g$7G EGE T 5 ](¦§M E ù§M.'e9#"Nú m•+7U7(¯$;$' 5 L7U 5 5 WieL; 5 ;$>e:87 5 ; 5 ¦ 5 7(Vy+W E +RK;Vt7U 5 5 W<e; 5 ;$'e+7G>W)>e%: 5 ù M'.e9#ú m

•+7U70RWi'e E :87GRLS+T 5 ü&)Í7U 5 'e â 5 ; 5 M'S 5 ; 5 ¦ 5 7>V 5 R E vVk78 5 7G¯:GRM 57\&dh=\=\T

Nù§M.'e9#ú m

•+7U7 5 7G¯:GRM 5 d\&

NU@Y%RJ] 5)Ç eMB; 5 ýù M'.e9i/"Iú C

9:;%<:=b>=mD © BEDªF n JO Y Z LPp; Z&[ Ù; [G Ñ G&H ï;%:%Ó6; [G yï;%:QÓ6; [G v\ ×_ Î K : Z?H <cYQ= O ` H6G ß= O6G YåyéÕd Î K : Z?H <c;Y [%O : G = j Y%= O6G YA` O : G = j Y%= O6G YåÕóRRt^%=Y%p=MYQ= O6G Y [ ; O : G = jegh Z a-yuvA`` HJ YY6í: GQK%J : H Õik n JK Ù; [G yEÕ

Page 294: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !)i

i

i

i

i

i

i

i

% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

Frq n JK Ù; [G y?lÕ O6G < ZbH ^ta;%:lífSYQ= O ÕFuF RRX< G :=cL%x [6Z <;on6=Q:= Z?HZ L Z =Y Z V=!² ;Fr\ Ù; [G Ñ G&H Î K = KG > G&HK Ó; [G yuvCB ZbHZ&K ÕFr_F|d RRX< G :=MY%= O6G YXn=Q:=AYQ=7²Q; [ ;AL%;?>= H[ ;Fre n JK = O6G Yåy?la;&:Y;;UnlPftYQ= O fl­l%ÕFrg RRX< G :=cL%x [6Z <;on6=Q:=ML%; H[6Z ² ; Gt[GZ v=t: G ^ J Y K = [ ; H =Tn Z Y N =Fh ^ K ;%: G `Pa=Y^ G ÕFri Ù; [G Ñ G&H v%n: G Ó6; [G yv/B G v%n:ÕFrk\uq RR KG ^ K =M;T: G ^ J Y K = [ ;\F n JK Ù; [G y?l Z a G%I :;%alíftYQ= O ö ¨ DQÕ\u\ O : G = j YQ= O6G YS`l:;%alíftYQ= O Õ RQR H ;%p;SYQ= O6G YTn6=Q:= O : G = j ­(a Z > [ ;Ta;%:\u_ RRX< G :=cL%x [6Z <;on6=Q:=A;SLQ;%:%n; [ ;Pa;%:\d Ù; [G Ñ G&H Î K = KG > G&HK Ó; [G yuvCB^ K = K Õ\ue RRX< G :=cL%x [6Z <;on6=Q:= Z?H L&: G > G&HK ;\ug Ù; [G Ñ G&H Î K = KG > G&HK Ó; [G yuvCB ZbH L&:Õ\h\ui RRX< G :=S: GQK ;%: H ;t=;SYQ=7²Q;\uk n JK Ù; [G y?l<; K ;Aa;%:Y;;bnlofSYQ= O Õ_uq RRX< G :=MY%= O6G Y [ ;Ta Z > [ ;ALQ;?>= H[ ;_F n JK = O6G Yåy O : G = j YQ= OG Ycfml­l%Õ_u\_u_ O : G = j YQ= O6G YS`A;Y [%O : G = j YQ= O6G YåÕóRRP: G ^ K = J :=SYQ= O6G Y [ ; O : G = j_d ë

½^Wþ 5 e: 5 E e 5 :U7<]&R$:8.M''_>S>T 5 ;178'­I1+M BËD&A É» ABXD:C 7878Wi_+>e7 578¯:GRM 5 Y%R&7G>7G E >e%:8 5,Ç eLMJ; 5 5 Wie; 5 C\? E8E 78¯:8RM 5 ]&R$:8.M''_>; 5 e,+7US+T 5 ; 5 5 Wie; 5 Vy 5 W 5 W 5%E :878 5 7 5 7UWiä"NC."Io$C`·+;# 5 Wie; 5 ý#e.e9L; 5 EGE 78¯:GRM 5 ;+1 E >7 v*R E :U; 5 78 5iÇ eM[; 5 5 Wie; 5 V: 5 W<e; 5 p E 5 +R';; 5 VL 5 78]+WVP;$E M'1I7 E >R1M 5 7»e:8+78 5 7>V;bW 5 ; 5 Y%R3 5<Ç eM[;<>78S+T 5 ;$0¯$;$' 5 78 5 ¦ 5 7^Wi E'e:8+78e 5 V 5 1M 5 7`; 5 78¯:8RM 5 ; 5 5 WieL; 5 +g:G+78e 5iE *v)7GNRt+7U; 5 C

9:;%<:=b>=mD © BED£F n JO Y Z LPp; Z&[ Ù; [G Ñ G&H Ð: G = j Ó6; [G yÐ: G = j Ó6; [G v\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : H Õde n JK Ù; [G yEÕg n JK Ù; [G y?lÕ O6G < ZbH ^ O : G = j l%Õh RRX< G := [G ^&p Z ;on6=Q:=A;tYQ= O6G Y [ ; O : G = ji n JK Ù; [G y?l<; K ;lÈf O : G = j YQ= OG Y6Õk ë

=»T 5 7G E >e%:878+W 5%E^5E W<]: 5 ; 5E Y%R<+7UWæ+¯;. 5 78 5E 5 W<e; 5%E 7 -ü ý 5 7 E +78+W E >W)>M.9Le%:G E JW<]: 5 ; 5%E v­7G E >e:U; 5%E 7U 5 R$:87 5%E 5 W<e; 5%E CØ?,e+W 7U5 5 Wie; 5 1_> 5 V 5 7 E >7`:G78'1%KMXCd=» E >S>T 5 "NC /C E +7UT 5 78 E +e%:8; 5EF5%E W)]+: 5 ; 5%E Y%R>78W¯$;$' 5 78) E +g7G EGEGÈ E +W

X++C

Page 295: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& / !)oi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ /

12.3.2 Geração de código para as expressões½^W ; 5%E W<]: 5 ; 5E Y%R#:G7U:8Wÿ;+7US>T 5 ;$Í+¯$;$. 5 7Ug$78 E8EGÈ E ¦ 5 61 E : 5 eL E +pS+T 5 "NC /C."CÌO 5 W<]: 5 ; 5 Y%Ra:G7U:Ub;$^RW<bg$78 E8E T 5 ;$».e;gS>T 5 ;$^RW 7G7UIC 465 e%:G.peR+W 5%E 1+e; 5 0>78S+T 5 ;$(+¯$;$. 5 L7U3 E +g7G EGEGÈ E W< E ­ E K+ E V 5 R E *vV178K­I1+ E# 5 e E :8e%:8 E Cz· +7US+T 5 L7U 5 e E :Ue%:G<'e:8+'78 5 R E :87G'e]# E K+W<+e%:GiW< E Wi 5 e E E :G)+W 5 M 5 +7(ez'M.9 5 1M 5 7J; 5 e E :Ue%:GC l E : 5 ]0W 5%E :878; 5 e 5E W<]: 5 ; 5%E ; 57 5 78W<Í"NC."NC m 5 W<+e%:8(RW<<'e E :G78RS+T 5 V$; 5 :G' 5 L+VL+R';); E :8 5 t+7US>T 5 C

9:;%<:=b>=mD © BED?«F n JO Y Z L K ¥%n G Ù; [G Ñ G&H Ò HK Ù; H ^ K Ó6; [G yÒ HK Ù; H ^ K Ó6; [G v\ ×_ Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕde RRtL%=Q:: G <=A=MLQ; H ^ K = HKGPH =Xn Z Y N =g n JK Ù; [G y?lbY [ LlÈfPv/B|n6;^ Z&K6Z ; H B Z >=Q< G öXDQÕh : G%K%J : HSHG ß K ¥%n G yîÒUÓÏ%±Ê9Cöós6Õi ëkFrq n JO Y Z L K ¥%n G Ù; [G Ñ G&H Î K : ZbH <Ù; H ^ K Ó6; [G yÎ K : ZbH <Ù; H ^ K Ó6; [G vFuF ×Fr\ Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕFr_F|d RRtL%=Q:: G <=A=MLQ; H ^ K = HKGPH =Xn Z Y N =Fre n JK Ù; [G y?lbY [ LlÈfPv/B|n6;^ Z&K6Z ; H B Z >=Q< G öXDQÕFrg : G%K%J : HSHG ß K ¥%n G yÜÎ%Q6ÒUÓÑÏ%Ê9/ö3sÕFh ë f 7U00178'­I1+M]JeN EGE ­78 5 +e 5 e%:G7U7Fe3:8t+MK<;$ Eâ W3 5 M 5E 0+e%:G7U;0 5 7G78 E 5 e$p

;$>e:8» 1+78 Ç +7 E E :8 E ^:878:8b;»RWib17GK­I1>MM 5 >M 5 R#;$JMK E8E C 4 E53E *v3178'­I1+MM 5 >MXV$ù M'.e9L3"N/»; 5 f 7 5 7UWi"I$C'"Iqúy.e;'>;»L>M 5 1M 5 7Ø; C o AC o :? Wi 5 7ØY%RF_++7 5ez+e%:G7U;z;z178'­I1+M[ez:8L>M'ä;$ Eâ W3 5 M 5E Vy>78p E 3ä'e E :87GRLS+T 5 Y%R E 'W<M. E W<>e:8t+ 5 1M 5 7^;<1I7GK­I1>MPav 5 pr0e<'M'9ù e 5 > EG5 ;$beT 5<E +7`RW<i:G78.R'S>T 5 ú 5 R;'M.9L<7U<017GK­I1>MZù+ E5iE *v<RWii:87G'RKS+T 5 úCd·`YRy:8W3t]+Wî]R:G'M.'_>;i<178'­I1+M³? ËD Y%R'e;$K+i 5 +7U; 5 7F;$b+¯$;$. 5 + EG5iE ;$>1<+7U7`+¯;. 5 L7U)7GWi_++eL7 5 R78>RL>787FRW¨1M 5 7NC@= 5 .e â 5 ; 5 W<]: 5 ; 5 V¦§_p E J< E 5 M'9<;$bY%RMÌ.e E :G78RS>T 5 R$:G'M'._N7NV 5 W E (e 5 1M 5 7`;)178'­I1+M ³c? ËD CØ·^'e;V]J78> EG5 ;$NK;$'7>V$78 5 + EG5 ; E 178'­p1> E M 5 + E V E 5 1M 5 7^ E +7`Wie.RM'; 5 ]RW¨.e%:G>.7 5<5 RRW E :87G'e 5 R787UIù :G7U:U; 5%E 5 W 5Í5 v*: 5%E eLz°ö s&úCB· E8E 'WVBÍ 5 W<7US>T 5 eLÍM'.e9&"> E +781bL7UÍ;$NK;$.7Gp E E 578 Ç g 5 ;<'e E :87GRLS+T 5<E +7U­3RW*H(L7U0'e%:G>.7 5EF5 RäRW(78 E :87G'e Ea5 R7878I E C= 5 > EG5 ;1I7GK­I1> E ;$b+M' EGE V;$>1+p E JR$:G'M.'_>7^'e E :87GRLS È E E t> âHÇ > E 78078>RL+p

7US+T 5 ;$ E >R E 1M 5 7G E C 465 W 5ÍE b:G7U:UÍ;$0RWæe 5 W));$)1I7GK­I1>M E .W<M' E W<+e%:GVt E :U­ E 78¦ +78'e; 5 )RWi017GK­I1>MP; 5)5 $v*: 5 5 7878+e%:GV 5 R E vV; 5i5 $v*: 5 %$ü 5 RBV$Wi E 7GN E pW<+e%:GVÌ 5ä5 v*: 5 +Rvä7G+¦ +7I+e+'z E :8­zeä178'­I1+M[M 5 +Mk_+>7 5 C fZ5 7J EGEG5 VBeLzM''e9oÍ]>78; 5 +¯$;$. 5 Y%R<>W).M'9ä E8E )1M 5 7JVÌ+W E +R';V 5 ¯$;$' 5 ;$¶ü& ¡ªL 5 R¯97 ¡ªL;$b 5 7U; 5 5 W 5 1M 5 7`;$ ³? ËD Ck· 78¯78'0'e E :87GRLS+T 5 'e;$K+iY%RM 5 e 5 W<;<178'­I1+M<¦§_++7»7G:Gb; 5 t+7US+T 5 CF½^Wi 5 E >7G1S>T 5 E +7`¦ >H:Ui]3Y%Rbe 5 + E5 ;$ 5 t+7US+T 5 ;$78Wi_>+e+WV 5 1M 5 7` E +7^ 5 M 5 >; 5 e<178K­I1+MP E :U­»v­<e 5 : 5 5 ;<'M'9<V 5 7» E8E5 Vt¯ E #'e E :G78RS+T 5 Y%R0>W<.M'9 5 1M 5 7(;$ ?å³ Vt]3+7U;<RW<Í.e E :87GRS>T 5 £ce9Y%R0.ep

Page 296: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& , !)i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

1>7:8 5E ; 5 E 1IM 5 7G E e 5 : 5 5 ;'M.9V$;$+.ge; 5 p 5%E e 5E KS+T 5 5 7878:8JL7Ub78¯Ig$.Wi'e E :87GRLS+T 5 V 5 9:7 ¡«C

9:;%<:=b>=mD © BED%'F n JO Y Z L K ¥%n G Ù; [G Ñ G&H Ø=Q:%Ó6; [G yrØ=Q:QÓ6; [G v\ ×_ HK :Q¥QØ=Q:tnÌÕd Î K : Z?H <^T`M^ K ;%: G ³clU^ K ;&: G l­Èl?Y;Q= [ lÕe Î K : Z?H <^ © `A^ K ;%: G ³lén JK a Z%G Y [ l!­Èl< G%K a Z%G Y [ lÕgh Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕik RRín:;L J :=Sp=Q: Z%à p G Y H = K = O6G YQ=Frq nA`SÙ J : K = O Y G Brp=Q:ï Z?H[ yuv/Bn;^ Z&KZ ; H B Z >=Q< G ÕFuFFr\ Z a-yrn BYQ;L%=YL%; JHK `Ss6Fr_ × RRtTp=Q: Z&à p G YAY;L%=YF|d Z ay|n B K ¥%n G ``MÒUÓÏ%±Ê9®ÃÃTn B [Z >``ts6TRR G ^QLQ;Y N6GAZ Y;Q= [ ; J =Y;%= [Fre n JK Ù; [G y?l Z lofA^Tfmltl fTn BuY;L%=YLQ; JHK ö ^ K ;%: G ³ ¨ D­óD%ÕFrg G Y^ GFh n JK Ù; [G y?l?=lofA^Tfmltl fTn BuY;L%=YLQ; JHK ö ^ K ;%: G ³ ¨ D­óD%ÕFri ëFrk G Y^ G\uq × RRPp=Q: Z%à p G Y [ =ML%YQ=^^ G\F RRXn G <=S=SLQYQ=^^ G = I%J6GtG YQ=Tn G : KG&H L G\u\ HK :¥ÙYQ=^^PpA` n B >¥ K = O Y G BuY G p G Y J nÌÕ\u_\d RR G >n Z Y N =l K%NZ ^l\ue n JK Ù; [G yl?=Y;Q= [ ÏQslöXDQÕ\ug RRA^ G a;%:Tn6=Q:=S=%:U>=QV GUH =Q:Cö K :;L%= K ;Un6; [ =Tn Z Y N =\h Z aãy^ K ;%: G \ui n JK Ù; [G y?lU^Uß=&nl%Õ\uk_uq n JK Ù; [G y^ © fltl fPp/BL%;?>nY G%KG Ó=b> G yEtfmlbRl fXn B H =b> G fmltl f_F n B [ ^L±Í%=Qp=yéöÈ^ K ;%: G ³ ¨&© ­æsÕ_u\ ë_u__d : G%K%J : HSHG ß K ¥%n G yrn B K ¥%n G ö n B [Z >Õ_ue ë

f E8E >W 5%EKJ 78'S+T 5 ;$JRW 5 $v*+: 5 VR$:G'M.'_>e; 5 5 t+7US>T 5 [_YyC@¤ W<]: 5 ; 5 Y%RJ+7U¯$;$' 5 L7U EGE a:G' 5 ;$^e¯3]`W 5%E :878; 5 e 5 7 5 78Wi3"I$C'">C[·ò78.W<>.7U 5 t+7US>T 5 E >7¦ +:GR;J 5 7@ EGE `W<]: 5 ; 5 ]`+e 5 e%:G7U7keLJ:8L>M';$ Eâ W3 5 M 5E J>e%:G7U; 5 787G E 5 e;+e%:GJ MK E8E ;,YRLM E ;$ E *v+7GK7 5,5 $v*: 5 CÊû + 5 E ;$ E8E VF]+W<.:GK;à'e E :87GRLS+T 5 :|c 5 W 5 e 5 W<) 5 W<M': 5 ;+M' EGE C?dW E >RK;z]0+7U;zÍ'e E :G78RS+T 5 9PVÌY%Ri 5 'z78¦ +7I+eLKz 5z5 $v*: 5 +7GK;Ít+MKä.e E :G78RS>T 5 e%:G>7G 5 7NC0û + 5 E ]i>78; 5 +¯$;$. 5 L7U 5%E78RW)>e%: 5E ; 5 5 e E :G78R$: 5 7»V Ç eM.W<+e%:8VBÍU9LWi;Í 5 5 e E :G78R$: 5 7 Y%R< 5 W3'e) 5 W5E :8. 5E ; 5%E 78RW<+e%: 5E R$:G'M.'_>; 5E C0= 5äÇ eMXV 5 ¯$;$' 5 +7U; 5 ¦§_i 5 W Y%R 5z5 $v*: 578K; 5 .e'+'M.'_>; 5 t+MKiU9W<;) 5 5 e E :87GR$: 5 7` E :8*v)e 5 : 5 5 ; 5 'M'9C

Page 297: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& o !)%qi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ o

9:;%<:=b>=mD © BED?®F n JO Y Z L K ¥%n G Ù; [G Ñ G&H Ó G ß OÖQG L K Ó6; [G yÓ G ß6 OÖQG L K Ó6; [G v\ ×_ K ¥%n GPK Õd HK :Q¥ ÛGQK%N ; [ nÌÕe HK :Q¥ÙYQ=^Q^cLÕgh Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕik RRín:;L J :=A=MLQY%=^^ Gt[ = I%J =YS^ Gt[G ^ GÖ =ML&: Z =Q: J >m; OÖQGQK ;Frq LX`y HK :¥ÙYQ=^^TÙ J : K = O Y G BLQYQ=^Q^&ï ZbH[ ènÌyuv/B H =b> G B Z >=Q< G ÕFuFFr\ RRtL&: Z =M;P; OÖQG%K ;Fr_ n JK Ù; [G y?l H6G ßlÈf-yy HK :¥ÙYQ=^^ALBLQ;?>nY GQKG Ó=?> G yEöXDQÕF|d RR [%J nY Z L%=Pn6=Q:=ML N =b>=Q:LQ; H ^ K : JK ;&:Fre n JK Ù; [G y?l [%J nlöoDQÕFrgFh RRX< G :=cL%x [6Z <;on6=Q:=A;^P=Q:< J > G&HK ;^ [ ;ALQ; H ^ K : JK ;%:Fri K `SÙ; [G Ñ G&H v&n: G Z ^ K Ó6; [G yuv/Bu=%:<6^ÕFrk\uq Î K : ZbH <A=%:<Y Z ^ K `-y K B K ¥M`` HQJ YY6q³cllz­ K B [ ^L×Í&=Qp=yEÕ\F ZbHK : G >;&p G Î K =L j `y K B K ¥A`` HQJ YY6³TsC­tyyr HK :¥% G L K B K ¥BLQ; HK Õ\u\\u_ RRX< G :=cL N =b>= [ = [ ;ALQ; H ^ K : JK ;%:\d n JK Ù; [G y?l ZbH p; j6G ^bn G L Z =Y!l fMLçBLQ;?>n6Y GQKG Ó=b> G yEPf\ue lbR äZbHZ&K y?loft=Q:<Y Z ^ K fl%Ølö ¨ yu: G >;%p G Î K =L j fDQÕ\ug\h RRP; OÖQG%K ;ML&: Z = [ ; G ^ KàPH =Xn Z Y N =\ui K ` H6G ß K ¥%n G yîLö sÕ\uk : G%K%J : HMK Õ_uq ë

ök*vW 5%E V 5 78V>RW; 5E :8. 5E ;$ag$78 E8E T 5 'e­7GK»;$X++

VYR6]` g$78 E8E T 5 7G>M'p 5 eLMXC 465 W 5 1%'W 5E e 5 > â :GRM 5 ""V+MKb 5 ; E +763 5 W<78S+T 5 +e%:G78^'e:8+'7 5%Ed5 Ri+e%:G78E :G78.e E V 5 v*: 5%Ed5 RÍ7878I E VWi E e E :G¨HM.:G'W 5 + E53EG5 W<>e:8 b 5 W<78S+T 5 ;»'RM';;$5 R,;$ E 'RLMK;;$ù 5 L>78; 5 78 E ¢X¢ 5 R ¢$ú ]#++.:8C l eKKM'W)>e%:Gi]i>78; 5 ¯$;$' 5 7U E ;$R E0E RL+g7G EGEGÈ E VØ;$#W 5 ; 5 Y%R 5 7G E RM.:8; 5 ;7G'W<+'78ù J E YR+7U;ú Ç Y%RÍet+eXHM.:G'W<z 5E 'S>T 5 ;Í'M'9Í 5 7G E RM.:8; 5 ; E Rtg$78 E8E T 5,J ;.78+.:8z; 5z5 L>78; 5 7NVte 5: 5 5 C)c^ E :8Vy 5 7G:8e%: 5 Vy+7U7J¯$;$' 5 7UäYR) 5 W<7US>T 5ÍE *vz¦ +.:8ä 5 7G E RM.:8; 5E *v 5 1M 5 7d_+>7 5 e 5 : 5 5 ;'M.9V E »b 5 W<78S+T 5 ]^¦§M E V 5 R"V%> EG5bE v1>78;;$+'7UC4 EG5b5%Ed5 t+7UeL; 5E6E vW .e%:G>.7 5E V 5 W bU9LWi;3 ³cD:CD o ?&º/Q¼³?QË o ? e3M.'e9Í"Iq; 5 7 5 78Wi"NC."NVB>MKRMKp E iY%RMd.e E :G78RS>T 5 ;°ö(s ;$NYRL;ä78ä 5 W)L7UpS+T 5 ;$ E v;C fZ5 70+g>W<M 5 V`ü ýîþ"!195`L7UÍõ 5 Rñü ýîþ"!N9ü&)L7UÍ ¢ C 4 EG5&E vÍ 5 W<78S+T 5 >e:87G E :87G'e E V 5 $v*+: 5%E^5 R-7878I E VRWiz; E ;R E .e E :87GRS È E ]3 E 5 M.9';ü ýîþ"!N9 5 R-ü ýîþ"!19+C? E8E E 'e E :G78RS È E ¦ +:GRW 3 5 W<7US>T 5 ;$ E *v;b>e%:G78 5E ; 5 E65 t+7U; 5 7G E e 5 : 5 5

;'M.9L-+gNR$:UW RWþ;$ E 1 5 > EG5 :UM^ 5 W<7US>T 5 78 E RM.:G1>78;;$+'7UCÑ· EGE 'WäVF'e E :87GRLS+T 5 E +7b+7U;äM 5 5 L¯ E 5 W<7US>T 5 ]ÍRW +ü 9X$Ê2iY%R# 5 M 5 > 5 1IM 5 7b ù 'e;$K+e; 5 7G E RMH:U; 5 ¦§M E5 úBe 5 : 5 5 ; 'M.9CØ?»VM 5 5 ;+ 5 E VRWË;$ E 1 5 7U^RW\ 5 e: 5

Page 298: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !)i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

5 eL;$`Jg$78 E8E T 5 v­(¦ 5 : 5 ; 5 +M'+RM';C fZ5E :G+78 5 78W)>e%:GF]`+7U; 5 5 ¯$;$' 5 78JY%Re; 5)g$78 E8E T 5 ]1+7U;;$>.7UVY%R+W<'M'9 5 1M 5 7"(7 5 e: 5 CödW 5E : 5 Wi7` 5 W 5 +g$+W<M 5 )g$78 E8E T 5 ^¡õgyC6¤ +¯;. 5 +7U; 5)E >7GK0M. 5 5 W 5

bh=\=^=a `6Xh`ch=\Êa7^ ^eZÄiXg_ T7d_iXiX\bh=\=^=a ~ `6Xh`ch=\Êa7^ ~ ^eZÄiXg_ T7d_iXiX\bE7`fTchS d7_7h=_ TXd gbT=:iQ \&S7\ T _7h=_&d d_7h&_ T7d UgbT=:iQ T _Xh=_&d U

9:;%<:=b>=mD © BED ¬F n JO Y Z L K ¥%n G Ù; [G Ñ G&H G Y%= K6Z ; H =Y&Ó6; [G y G Y%= K6Z ; H =Y%Ó6; [G v\ ×_ K ¥%n GPK Dö K© Õd ZbHK ;bnÌÕÜRRS;bn G :=!² ;e Î K : Z?H <cYQ= O ` H6G ß= O6G YåyéÕgh Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕik ;UnA`tv/B|n6;^ Z&K6Z ; H B jZ?H[ ÕFrqFuF RRX< G :=cL%x [6Z <;on6=Q:=S=^ [%J =^t^ JO6G v&n: G ^^° G ^Fr\ K D `SÙ; [G Ñ G&H v%n: G Ó; [G yuvCB G v%n:DQÕFr_ K© `SÙ; [G Ñ G&H v%n: G Ó; [G yuvCB G v%n: © ÕF|dFre Z a-y K DB [6Z >m``tsqÃà K DB K ¥A`Q`MÒUÓÏ&±Ê9zFrg × RRS^ G a;%: Z?HKGZ :;åöæn G <= ZbH ^ K : J ² ;MLQ;&:: G ^bn6; H[G&HKGFh Î K : Z?H <c^P`S^ G Y G L K Ð ZbH Ò H ^ K : J L K y;UnÕFri n JK Ù; [G yî^tfl : G Y G v%n:loftYQ= O ö ¨&© ÕFrk ë\uq G Y^ G\F × RRA^ G a;%:S=Q::=Q¥ö3; OÖQGQK ;S; J ^ K : ZbH <Cö J ^%=S=o> G ^>= Z?H ^ K : J ² ;\u\ Z ay ;UnM``SYQ= H <ÔÙ; H ^ K = HK ^åB|" 6SRRA^QxT``A; J ñ`A^ ;on G :U> ZUK6Z&[ ;^\u_ n JK Ù; [G y?l Z aÏQ=L>n GQI : G Y G v%n:lofSYQ= O ö ¨&© Õ\d G Y^ G\ue n JK Ù; [G y?l Z aÏQ=L>n H6G : G Y G v%n:lofSYQ= O ö ¨&© Õ\ug ë\h n JK Ù; [G y?l OZ n J ^ N slö D%Õ\ui n JK Ù; [G y?l<; K ;tnv G Y G :lofSYQ= O Õ\uk n JK = O6G Yåy?l: G Y G v%n:lPftYQ= O fl­l%Õ_uq n JK Ù; [G y?l OZ n J ^ N Dl%Õ RR H6 ; ZbH L&: G > G&HK =c^ K =L j öæn6; Z ^S^ G : Z =MLQ; HK =Q:_F RR [%J =^Tp G V G ^çö ÖQàPI&J6G ; OZ n J ^ N s ZbH L&: G > G&HK ; J_u\ n JK = O6G Yåy?lénv G Y G :lTfSY%= O fml­l%Õ_u__d : G%K%J : HSHG ß K ¥%n G yîÒUÓÏ%±Ê9Cöós6Õ_ue ë

Page 299: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& %q- !)i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ %q

fZ5 7nHMH:8.W 5 VZ1+78+W 5E 5 W 5 >787b¯$;$' 5 78RW<&U9Wi;;$#W<]: 5 ; 5 C&¤î7 5 p7UWi0"NC »W 5E :G7U 5 W<]: 5 ; 5 Y%Ra:878:8J;$ EGE a:G' 5 ;`g$78 E8E T 5 C l eKKM'W<+e%:GV+7Up E ¯$;$' 5 L7Ui<7G'W<+'78<+g$7G EGE T 5 ; 5 e¯ÍY%Rb'e;$K+#Y%RM 5#5 v*: 5#EG5 7G 5 Y%RMÌ#U9pWi; E +7U­378>M.'_>;Cd¤\+¯$;$. 5 +7U; 5 ;$>Hg 5<5 $v*+: 5 e 5 : 5 5 ;<.M'9C?dW E >RK;V+7Up E 6¯$;$' 5 78( E +g$7G EGEGÈ E ; 5%E 78RW<+e%: 5E VYR^;$+.g(>; RW

;$>M. E ;`* E Y%R>78; 78(J;$.78+.:8F>W 5%E KS È EkE R+ E8E '1 E ;('M.9LCZû»> 5 E ; E8E5 VU9pE ^ >e%:G7U;J 5 7G78 E 5 e;$>e%:Ga 5 W<]: 5 ; 5 eL(:8t+MK;$ EGâ W0 5 M 5%E ^+M'+RM'p E 5bE :87G'eY%R78+78 E +e%:8 5E :G' 5%E ; 5E 78RW<+e%: 5E V Ç eM.W<+e%:8Vd+7Up E #-.e E :87GRS>T 5 ü±cNü± *Y%R(¦§_b<U9W<;) 5 W<]: 5 ; 5 ;$ E v; 5 C

9:;%<:=b>=mD © B © sF n JO Y Z L K ¥%n G Ù; [G Ñ G&H Ù=YQY&Ó6; [G yÙ=YYUÓ6; [G v\ ×_ HK :Q¥ÙYQ=^Q^cLÕd HK :Q¥ ÛGQK%N ; [ >áÕe K ¥%n GPK Dö K© Õgh Z a-yuvA`` HJ YY6í: GQK%J : HAHJ YYåÕik RRín G <=M; OÖQGQK ;SLQ;%:: G ^bn; H[G&HKG =;Xn: Z > GZ :;ta Z Y N ;Frq K D `SÙ; [G Ñ G&H v%n: G Ó; [G yuvCB G v%n:ÕFuFFr\ RRX< G :=cL%x [6Z <;on6=Q:=A;^P=Q:< J > G&HK ;^Fr_ K© `SÙ; [G Ñ G&H v%n: G Z ^ K Ó6; [G yuv/B=Q:<6^ÕF|dFre RRín:;L J :=M;í> K ; [ ; [G ^ GÖ = [ ; H =MLQY%=^^ GtK DB K ¥Frg LX`y HK :¥ÙYQ=^^ K DB K ¥CÕFh >c`MLåB H6G ^ KGQ[ B > GQK%N ; [ ï ZbH[ yuv/B > G%K%N B Z >=Q< G öy HK :¥Q G L K© B K ¥ÕFriFrk Î K : ZbH <A=%:<Y Z ^ K `-y K© B K ¥M`` HQJ YY6³cllz­ K© B [ ^QL×Í%=Qp=åyEÕ\uq ZbHK : G >;&p G Î K =L j `y K© B K ¥A`` HJ YY6³tsC­PyQy HK :Q¥Q G L K© B K ¥BLQ; HK Õ\F\u\ RRX< G :=cL N =b>= [ =\u_ n JK Ù; [G y?l ZbH p; j6G p Z : K%J =Y!l fMLçBLQ;?>n6Y GQKG Ó=b> G yEPfl?Rlífí>áB H =b> G fly?líf\d =Q:<Y Z ^ K fl&lífí>áB [ ^L×Í&=Qp=yEö ¨ : G >;%p G Î K =L j Õ\ue\ug : G%K%J : HSHG ß K ¥%n G y>ìB K ¥%n G ö(>ìB [Z >Õ\h ë

? E8E EÌE T 5 E +g$7G EGEGÈ E 78` E Y%R E 78>+ E W 5%E 1+7Ø 5 W 5 +7U7y¯$;$' 5 CÌ· E ;$+Wi E VY%RkeT 5 78 E +e%:87G>W 5E Y%RXV E T 5 E ;$dM 5 +S>T 5 ;$d7G7UI E V.e­7GK E ; E5 W< E R$:878S+T 5äW3RM.:G'M''>S+T 5 ;$.1 E T 5 V[g$78 E8E T 5 Re­7GKVd EGEG5 +W< 5 ;$äRW 5 $v*: 5 äM. E :8;$g$78 E8EGÈ E CØ?dMK E@E T 5 L E :8e%:8 E >W)>M.9Le%:G E 5 R:G7 5E W<]: 5 ; 5E Y%R»1%'W 5E e%:G>7G 5 78W<+e%:GV$ 5 7G:8e%: 5 V 5 78¯7G 5 M'+.: 5 7 E >78­)+_;$b 5 W<78+>e;7IprMK EFE >WîW3RH: 5 E ¦ 5 78S 5 C

Page 300: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !0/ i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

12.3.3 Algumas restrições?kg$ E :8+W ; 5 E 7 5 M.>Wi E eL>78S+T 5 ;$(¯$;$' 5 Y%R 78 E +e%:8W 5E Ìb+7US+T 5 ;'e E :87GRpS+T 5 *7 ze 5#Ç eMZ;$)RWæW<]: 5 ; 5z5 R& 5 e E :G78R$: 5 7»<Í 5 e%:8>W«; 5 :8W<e9 5 ;#'M'9R$:8.M'._N;)t+M 5 W<]: 5 ; 5 C· E .e E :87GRS È E ;@78: 5 7Ge 5 ;$@RW W<]: 5 ; 5 E T 5 +7U; E L>M 5 e 5E8EG5 5 W<'MK; 5 7Ø+;a1>_

Y%R`RWe¯ ·MD7?Q˽ H7D ]`+eL 5 e%:878; 5 eb­781 5 7G E .e%:8­:GK+C[·»M.]>W ;$ E8E5 V E +W<78`e 5JÇ eM;$b>;<W<]: 5 ; 5i5 R 5 e E :G78R$: 5 7>V 5 5 W<'M'; 5 7a>78) 5 7» 5 e%:8)78¯7GK)RW« 5 WieL; 5 ;$78: 5 7Ge 5 7UJ+1.:87FY%R +g$>RLS+T 5 >K(¦ 5 7UI^; 5 W<]: 5 ; 5 CQ2 Re; 5b5 W)]+: 5 ; 5 78: 5 78eM'RW1M 5 7NV 5 5 W<.MK; 5 7Z:G>W Y%RV%M.]>WË;$»+7U7kJ'e E :G78RS+T 5 ;$`7G+: 5 7Ge 5 V E 5 M.9+7kRW1M 5 7(7Ui78: 5 78e7NC(= 5 > EG5 VP E 5 M.9>78W)p E _+>7 5 7U#W<]: 5 ; 5E .e%:8+'7 5%E [XhXh#7UE :G78.e E V 5 $v*: 5E b787UI E C? E :G3++7G:8W<>e:8JeT 5 ] 5 W<+M'9 5 7^ 5 W< 5 7G:8W)>e%: 5 C6¤Y%R 5 5 W<.MK; 5 7^;$>1J¦§_>+7NV

+ E5 ¦§MH:8iRW 5 Wie; 5 ;i7G+: 5 78e 5 e 5Ç eMd; 5 W<]: 5 ; 5 VÌ]#I1 E 7 5 7 5 7UWi; 5 7(; 5¦§: 5 Vt+W<.:G'e; 5 RWæ+787 5#E +Wi®e%:8' 5 C»·»M.]>W ; E8E5 VL]0 5%EGEGâ 1+MØYR 5 5 WieL; 5 ;$378: 5 78e 5>78; 5 L>M 5 5 W<.MK; 5 7 E v).eXH$:8.MXC fZ5 7ag$>W)M 5 V 5 5 W).MK7 5iE +R.e%:GJW<]: 5 ; 5

b[7Sñ ñ_S=Q\=a b[7Sö

b ö d_&S&7d=[ _7hi_d_&S&7d=[¼ Ì

:G>7 â W 5%Ey5 ¯$;$' 5 +7U; 5 5 WêRWü±7 `e 5`Ç eM+7U; 5 ;$k¦ 5 78Wia.eXH$:8.MXV 5 W 5 1+W 5%E E +R.7NCÌ?dW0 5 78b E8E5 eLT 5 5 W<7 5 W<:8J+7US>T 5 ;$»¯$;$' 5 V]^RW< E5 M.RS>T 5 Ve 5 W â e.W 5 V 5 R 5 >M.>e:8)ù§ 5 7G]>WV$¦§­+.MB;$'W<M'+W<+e%:87UúC

bh=\=^=a h&ac` bEb=`fT7=Sd_7h=_ T7d gbT=:iQ \&S7\T _7h=_&d d_7h&_ T7d UgbT=:iQ T _Xh=_&d Ub7_ _Xhi_ h&ac` bd_S=7d=[\&S7\cb _7hi_ Uh&ac` b[_bd_S=7d=[

b U h&ac` bd_S=7d=[ `6&ab\_d^=a7\ÊT_Xh=\£`\fT:bh=^=a7\d«Z ö r â=Ü ß*ß ÖK×Ü ß ç rKr åÖ èØ r ä ÖKåÜ3â r Ó%üsý r ÖªØÜ3èØ rß ÚKÖ ×@Ü 'Ü6Ý3ÙØ rß Ö«å ß Ö é ß*r Ú r ê

Page 301: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !0/ "i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ

¤ E +Re; 5 7 5 M'+Wib78+MK+ 5 ep E » 5 Wî0 5 e%:8>W; 5 eXHW<>7 5 ;$J E S 5E Y%RJ7G+p E W 5E 7G E >7G17ÍeÑ'M.9Ñ78ÑYR 5 W)]+: 5 ; 5 ¦ Re+ 5 eC 465 W 5 ;$ E +7G>1+W 5%E V^ EGE 5 e%:8+W]b¦ +.:8i EGE eL; 5 p E J 5 W 5 78RW<+e%: 5 L7U 5 W<]+: 5 ; 5oNC? 6 HD5 eXHW<+7 5 ;$ 5E 'S È E Y%R(+;.e E :87GRS>T 5 ;$K 5 e J .M'9zù 1M 5 76e+%:G'1 5 V> EG5 7G+:G'7G W< E +M'+W<+ep: 5%E ; 5 Y%R+W<'M.9Nú CkökvW 5E V 5 78]+WV 5iE >R'e%:G(:G78>U9 5 ;$b+¯$;$. 5

bh=\=^=a a&XTb7_ a Ubd_S=7d=[

a Ubh=\=^=a ZXZXZ

m <e 5E8EG5 5 W<.MK; 5 7(+7U E8E 3¯$;$' 5 ;$ E8E #Wie>.7UVP:8+7 â W 5E RW 7 5 M'+WiVt1 E : 5Y%R# E .e E :G78RS È EE T 5 +7U; E eW< E Wi 5 7U;$+W +W Y%R#78>++W e 5 ¯$;$' 5 V 5 Y%ReT 5 78+78 E +e%:Ue>+ E8E 7GKW<>e:8#: 5 ; 5E)5E PR$g 5E ;$+gNRS>T 5 5%EGEGâ 1+ E Cà=» E8E + E5 VE R 5 e9W 5%E Y%RVZ 5 +W<.:G'73'e E :87GRLS+T 5 ü ýO0 5 5 e%:8; 5 7;MH:8R7Uä:GRM@;'M'9:G>e9 5 1M 5 7$Cb·»L¯ E E :8#'e E :G78RS+T 5 Vt:G>78­Í1M 5 7)"3<t¯ E 5 ü±7 #:G>78­Í1M 5 7J C· 5>787»z7G¯Ig$'Wii.e E :87GRS>T 5 VL 5 7G:8e: 5 V 5 1M 5 7(; 5 5 e%:U; 5 7^ E :878­i>7G7U; 5 C û +1+78' E >7"Vy 5 E Í+g$>RLS+T 5 U9+ 5 RÍ EGE 0 5 e%: 5 5 W zg$>+RS+T 5 ; 5 ü ýV[t¯ E(5 Y%RMkÍ'M'9:G>W¨MH:8R78ä"C

½^W W<+ 5 ;$3 5 e%: 5 7Ge7a E :Gb7 5 M.>W<)¦ 5 B'W) 5 7(<7G E :87GKS+T 5 ;$3Y%R: 5 ;<.e E :G78RS>T 5;$»; E 1% 5 ]^+7U;(t+M 5 5 W).MK; 5 7>V;$`:8MW 5 ; 5 Y%R»L¯ EdE RJg$>+RS+T 5 J'M.9b E :87U­eN E8E 78'W)>e%:G)1I_+KCi· E8E .WVtM 5 5E ) 5 e%: â R 5%E ;$#¯$;$' 5 7:8+W E +W<78i;$iRWi'M.9L E +W¨e+e9%RW+M'+W<+e%: 5 Cd·HeK+)+g$+>S>T 5)5 5 787G e)>78S+T 5 ; 5 ¯$;$' 5 780RWig$78 E8E T 5 7G>M' 5 eMÌù f 7 5 7UWi<"NC."Nú C[·^M'V$'e E :G78RS+T 5 ü= `>78;JeM''e90;$+.gRWæ>M.>W)>e%: 5 e#'M'9C?dW 5 W<t+e E S>T 5 VPz.e E :G78RS>T 5 +ü 9X$00eÍM.'e9ä/ Í]0+7U;E +W´ 5 e%:U'M.'_>7be>e9RW 'e+7G>W)>e%: 5 e.M'9V[;$ͦ 5 78WiYRÍ 5Ç eMF; 5 +­M'+RM 5 ;g$78 E8E T 50E tp E JY%R)'M.9Li78 E +Rz+W¨g:UW<+e%:GJRWi)ReK;;$C·Wie+'780 5 787G+:8Ib;$ E5 M.R+ 5 e7 E8E E ; 5 E 7 5 M'+Wi E»E +78'iW<N;$'e%:G0;#'W)M.+p

W<+e%:8S+T 5 ;$RWî EGEG5 0Wi E ;ie­M' E E +Wi®e%:GK+)Y%R78>M''_> E8E 5 Y%R E JU9LWi<;$eL­M' E »;$1PR$g 5 ;$( 5 e:87 5 M.» ;$íPR$g 5 ;$J;; 5E C f 78J:Ue%: 5 V 5 W<]: 5 ; 5 ]»78+78 E +e%:U; 5e^¦ 5 78W<(;$6RW7U¦ 5 ;$.78>+ 5 e; 5 VI+WY%Ra+;^1]+7G:GK@78+7G E >e:U`RW\M 5 5 .e;.1 Eâ 1>M;$i 5 Wie; 5%E i>;z78 E :8VB E 5%EGEGâ 1+ E :878e E ¦ +7I+e+' E ;$i 5 e%:G7 5 M'3e E RÍ+g$>RLS+T 5 C· E8EG5 +'e; 5 p E @'e$¦ 5 78WiS>T 5JE5 7G 5E 5 e%: 5%E ; 5 7U¦ 5 5 e;$aRWi(178'­I1+M78>>LFRWË1IM 5 7< 5 e%: 5E(5 e;$< E8E z178'­I1+M[]iR E ;Vy 5 ;$+p E i'e;zM 5 +M.'_>7 5 R$:87 5%E :8. 5E ;)7 5 M.+pWi E V$ 5 W 505 R EG5 ; 178K­I1+ E eT 5 'eKKM'._N; E CZ½^Wî 5 W<'M'; 5 7F 5 W)>78+'Mt++7G:8W)>e%:G;$>1+78K3'W<M.>W<+e%:87^)e­M' E ; 5 PR$g 5 ;$b 5 e%:G7 5 M' b;; 5%E C

12.4 O runtime X++

¤W3'+e%:G<;$)g$>+RS+T 5 78zÍM''eR>WX++

7 5 1+.:8p E W3R.: 5 ; 5 W0.>e%:G<;°ö s,C l E : 5-E 'e Ç +-Y%RzeLT 5 :8+W 5E Y%Räe 5E 78 5 RL7< 5 W E t>: 5E 5 W 5 +7G78+%pW<+e%: 5 V@1+78 Ç >S>T 5 [email protected]''_>S>T 5 ;MK E8E ä:UCò· .W<M'+W<>e:US>T 5 ; 5 7GRe%:8.W<

X++

M'.W<.:8p E ÍRW´70;$#W<]+: 5 ; 5E Y%R E T 5 U9Wi; 5%E ;$+e%:87 5 ; 5 W<]: 5 ; 5 !"ü±2;$zRWi

Page 302: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !0/ i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

MK E8E VÌe:8 E i;$> 5 E ;+g$>RLS+T 5 ; 5 W<]: 5 ; 5 XVÌY%RVØ 5 W 5 1'W 5E VB] 5 5 e: 5 ;$+e%:878;-;RW 7 5 78Wi

X++C j ­VF:8W3t]+WVFRW 7#;$W<]: 5 ; 5E 78¦ +:GR7#

M'+.:GR7Uz;i1IM 5 7G E 'e%:G>.7 5E E :87G'e E i] E T 5 R$:G'M'._N; 5 eä.W<M'+W<>e:US>T 5 ; 5 5 Wie; 5d_X^&atC

¤\78Re%:G'W<J].W<M'+W<+e%:U; 5 +W«°I1V%eL)+M' EGE C'AÁÂË:?åÄé·?>³D CP· 5 +g$>R:87Gp E RWË7 5 7UWi

X++V;$>1p E 6'eM'R'7k:8MMK E8E ae 5 L9%$)¦ 5 78eNK; 5yJ °ö s«78(Y%R 5

78Re%:G'W) E vb> E8EGâ 1+MXCØ= 5 7 5 7UWi)"NC " E T 5 W 5%E :878; 5Ek5%E ; 5 E 7G'W<+'7 5%E W<]: 5 ; 5E VY%R(¦§_>+W¨)'eKKM'._NS+T 5 5 ¦ >U9LW<+e%: 5 ;)+gNRS>T 5 ;$JRW¨7 5 7UWi

X++

9:;%<:=b>=mD © B © DF n JO Y Z LALQYQ=^Q^X JHKZ > G ×\ ^ K = KZ LTÐ J aa G : GQ[ G = [G : ZbH Õ_d ^ K = KZ LXn JO Y Z L ZbHKMZbHZ&K6Z =Y Z V G yEe ×g Î%¥^ KG >ìBu; JK B|n: ZbHK Y H y?lE= H < J =Q< G ÔS: JHK6Z > G ^U¥6^ KG >áBæØ G :6^ Z ; H sCBEDl&Õh ZbH ` H6G ßtÐ J aa G : GQ[ G = [G :Cy H6G ßzÒ H n JK Î K : G =?>6 G = [G :CyÎ%¥^ KG >ìB ZbH Õi Z a-y ZbH `Q` HJ YYk ×Frq Î%¥6^ KG >ìB G :Q:/B|n: Z?HK Y H ylE::;&: ZbHZUK6Z =Y Z V ZbH <MÔMYQ= H < J =Q< G : JHK6Z > G ^&¥6^ KG >ål%ÕFuF : GQK%J : H¨ DÕFr\ ëFr_ : G%K%J : H såÕF|d ëFreFrgFh ^ K = KZ LXn JO Y Z LTp; ZU[ a ZbHZ Y Z V¥CyéFri ×Frk K :Q¥\uq ×\F ZbH BL%Y;^ G yéÕ\u\ ë\u_ L%= K L N yîÒ%&v6L G n K6Z ; HmG X× ë\d ë

=»Í7GNM'';;$VPi'eKKM'._NS+T 5 78 E RW<p E >W 78'7^RW 5 v*: 5 ; 5 :8. 5PÅAÆcA/ÄQ ÄéºÄÅMÅ DËDH·MDAMHDË Y%R E +7U­äR$:G'M.'_>; 5 7UäM.>7b1M 5 78 E ;>e%:G7U;pX;$7UT 5 e 5E 5 Wie; 5%EC 4 EG5 eT 5)E *v0 5E8Eâ 1>Mt+7GK76:8M 5 $v*+: 5 V 5 7GRe:8.W<(+W<.:GJRWi3W<>e E >W;$ >7G7 5378: 5 78e 5 1M 5 7^pU"Cb¤ W<]: 5 ; 5 !#ü±,;äMK E8E VtY%R<U9W 5 R 5 W<]: 5 ; 5c7?AMCòµcD V1>7G Ç > E8E i1M 5 73Vk+ E5 9vRW´+787 5 VB:8+78W)'eg$>+RS+T 5E >WÿU9Wi7 5 W<]: 5 ; 5iS^dXSPCZ¤ W<]+: 5 ; 5 Å Còµ&<&E 'W<M' E W)>e%:G^¦ NU9 505 $v*+: 5 º ÅMÅ DËDH·MDAMHDË +7GK; 5 e'e'+'M.'_>S+T 5 C

¤ E@5 R$:G7 5E ; 5 E W<]: 5 ; 5%E eL0+M' EGE E T 5 W 5%E :878; 5E e 5 7 5 78Wi<"N$CªC 465 W 5 .:8; 5e%:8+78 5 7GW<+e%:8Vt+M' E(E T 5 R$:8.M'._N; 5%E eLÍ+7US+T 5 ;$<¯$;$' 5 ; 5 5 Wie; 5 Cb½^W ;$>M. EMI<; 5oº ÅMÅ DËDH·D&AMHDË 078: 5 78e#RW .e%:8+'7 5 55 R$:G7 5 MI<)78: 5 78e#RW E :87G'eLC 4 EG5M'RW +787 5 eM'+.:GR78 5 5 7G7UV 5 78Re%:G'W<i+W<.:GiRWiW<+e E +W ;#+787 5 VBWi E W< E W 5 E8E .W 78: 5 78ee 5 7GWiM'W<+e%:GV$ 5 W RW1M 5 7GpX;$7UT 5 CØ= 5 + E5 ;$ M'+.:GR78);$JRWeXHW<+7 5'e:8+'7 5 Vy+ EG5 9Lv#>7G7 5 e 5 ¦ 5 7GWi: 5 ; 5 eXHW<+7 5 VP+e%:8T 5 e+e9RWi#W<>e E >Wæ]0>W).:GK;V

Page 303: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& " !0/ /i

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ "

t+eL E`5 1M 5 7Gpr;$7UT 5 ]7G+: 5 7Ge; 5 Ca¤\1M 5 7`78: 5 78e; 5 e 5 + EG5 ;$RW«eXHW<+7 5 .e%:G>.7 5] VJe 5 > EG5 ; E :G78'eV$]#c7±¼C

9:;%<:=b>=mD © B ©Q©F ^ K = KZ LXn JO Y Z L ZbHK : G = [ Ò HK yE\ ×_ Î K : Z?H <^T` HQJ YYåÕd ZbHKPj Õeg K :¥h ×i ^T` ZbH B: G = [ ZbHG yEÕk j `AÒ HKG < G :/B|n6=%:6^ G Ò HK yî^ÕFrq ëFuF L&= K L N yÒQ&v6L G n K6Z ; HG Fr\ ×Fr_ Î%¥6^ KG >ìB G ::/B|n: ZbHK Y H y?lE::;%:: G = [6ZbH <SaQ:;?>z^ K = H[ =Q: [ZbH n JK l%ÕF|d Î%¥6^ KG >ìB G ::/B|n: ZbHK Y H y?lE G =^Q; H ­tlÈf G B< GQKQÛG ^Q^%=Q< G yéÕFre : GQK&J : H sÕFrg ëFh L&= K L N yrÓ J > O6G :ï;%:U>= K v6L G n K6Z ; H aFri ×Frk : GQK&J : H sÕ\uq ë\F : GQK%J : HAj Õ\u\ ë\u_\d\ue ^ K = KZ LXn JO Y Z LtÎ K : ZbH <A: G = [ Î K : Z?H <CyE\ug ×\h Î K : Z?H <^T` HQJ YYåÕ\ui\uk K :¥_uq ×_F ^T` ZbH B: G = [ ZbHG yEÕ_u\ ë_u_ L&= K L N yÒQ&v6L G n K6Z ; HG _d ×_ue Î%¥6^ KG >ìB G ::/B|n: ZbHK Y H y?lE::;%:: G = [6ZbH <SaQ:;?>z^ K = H[ =Q: [ZbH n JK l%Õ_ug Î%¥6^ KG >ìB G ::/B|n: ZbHK Y H y?lE G =^Q; H ­tlÈf G B< GQKQÛG ^Q^%=Q< G yéÕ_h ë_ui : G%K%J : H ^Õ

12.5 Arquivos-fonte do compilador· E e 5 1';;$ E e E :GÍ> â :GRM 5E T 5 'eM'R E T 5 ; 5%E 7UY%R'1 5E ; 5 +7U; 5 7;$Í+¯;. 5 z; 578Re%:G'W)C[= 5 ;.78:8¯78 5 90 · Qü=ͦ 5 78Wê'e+M.R â ; 5%EZ5E 7UY%R.1 5E O'&ÿN¯ 83 ÿN.O'&ûO8= 9XüGLC ¤\78'W)>.7 5 5 e%:G]+W 5E W)]+: 5 ; 5%E ;$ E 78.: 5E e E :Gb> â :GRM 5 5ÍE +Re; 5 Vb;$ Ç eKS+T 5 ;+g$+>S>T 5 MKeS>;> EG5 M'RW 7 5 M'+Wi 5 5 7G7UJe+7US+T 5 ;$»¯$;$' 5 C[= 5

Page 304: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ ~X~ X Xi

i

i

i

i

i

i

i

% Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

;$'7G+:G¯7G 5 90 · Qc=üy b¦ 5 6 5 M 5 +; 5z5 78Y%R'1 5 í7Xü±!" 8- 5 Wÿ.W<M'+W<>e:US>T 5; 5 78Re%:G'W)

X++C

· E8E 'WV780>787 5 5 W<'M'; 5 7a 5 7GRe:8.W<V E T 5 e> EGE ­78 5E65E`E +R.e%:G E E8EG5E

`^T ~ WT^di_&dK©X^&]7^`X`h=^[XM7óXóªZ3©X© ^&]7^ ² \fTbh&_&d ² \fTbh=_&d_&di7b\[ ~ Z ^di_&d7_[_&d^&S7\&d ² \T d:b=QXS ` c ~XXS° X[ñ:b=`d\i iS_f­i³Ñ ± [:`@Z² \T d:b=QXS ` ~XX __gEX^cb[ªÑ ± [:`|Z S T_ ©X^&]7^`X` YbS=Q¤[\^&dX=f_[7SiX\&d¤Q_7hT _X^&ab[7¤&d\f¦bh=_h=^[7M7óXóeZ6©X©RZZ£Z bh&_ ò \&ö_[XñXXd d=d\&d«Z ©X^&]7^ aX\X_i[\&S£_ b&iS«Z_bhXh£`d_X^&S7_¤\[_eZ bh&_ ^&di_ `_TXS:b\[ªZ6©X^]7^ a7\X_i[\S_ b=iS«Z_bhXh£`d_=^&S_¤\[_OZ bh&_ ò \&ö_[«Z6©X^&]^ a7\=_i[\&S£_ b=iS«Z_bh=h¡`d_X^&S_¤\[_eZ bh&_ Q° bfTch&_ ² Q^&d ° SXd_&^f1Z3©=^]^ a7\=_i[\&S¡_ b=iS«Z_bhXh£`d_X^&S7_¤\[_eZ ^&dci_&d¤_[_&d^&S_&a£i:`X`_iXi&hXh Z`^T ~ ©X^&]7^`T^&di_&dWXh=^[7M«Z6©=^&]^`^T ~ ©X^&]7^`h=^[7XdXSW X[7S:bf_eZ6©=^]7^=» E NS+T 5 "NC b1+78+W 5%E 5 W 5 5 W<'M'7>V%>787 5E 7UY%R'1 5E ;$JMK E8E +gNR$:U7FRWi

GM''>S>T 5 »>WX++

C

12.6 Exemplos½`:8.M'._N78+W 5E 5 W 5 +g>W<M 5i5 7 5 7UWi+ü±+VY%R1.W 5E e 5 + â :8RM 5 /C f 78i 5 W)p'M'7 5 7 5 7UWibJ+7U7`¯$;$' 5 V$R$:G'M.'_>7G>W 5EF5 5 Wie; 5 ;$ E >W<7G

`^T ~ ©X^&]7^T^&di_&dªZh=^[7RZXZ6WiXi^fTch=_i&Wgb[7S&d_X_OZ 7óXó ² \fTbh=_d_di7b\[ Z ~X= _X^&ab[7¤&d\f¦bh=_ ZXZ6WiXi^fTch=_i&Wgb[7S&d_X_OZ ZZZa _ b=`^7h dXd\di7\X[7a!°& [7S^`S:b=` dXd\&diX\X[a!° _f:^[XS:b=`_&d=d\&d7\X[7a7_[_&d^&S:b'[7 ZXZ6WiXi^fTch=_i&Wgb[7S&d_X_OZ Z)gb[7S=d7_=_eZ ©X^i7_[_&d^&S:b'[7 ZXZ6WiXi^fTch=_i&Wgb[7S&d_X_OZ Z)gb[7S=d7_=_ba7^&S7^OZ3©X^i² \=aX_¤7_[_&d^S_=a

465 W E8E i 5 Wie; 5 ¦ 5 7UW +7U; 5E(5E 78Y%R'1 5%E Qc!N9:L Qü±c*á8M±ü±c* 8 Q!19 Q:+ü±á8±+ü± ) 8» 5 e%:G>e; 5`5 ¯$;$' 5 °% E W<.eJ78a E MK E8E E +ü±& V%7G E t>:G'1IW<+e%:GCk¤ E 7 5 7UWi E "I$Cª/("NC Ve 5bÇ eMt;$ E :G^> â :GRM 5 W 5%E :878Wt>Y%R+e 5E :G78>U9 5E ;$ E8E E 7UY%R.1 5E 7UäYR 5 M'+.: 5 7J 5%EGE z 5 W<787 5 ¯$;$' 5 +7U; 5 5 W 5 7 5 7UWip¦ 5 e:8C?dW E >RK;i+7GKW 5E V 5 W 5 R$g â M' 5 ; 5 °% E W)'eBV 5E 78Y%R'1 5%E g$NR$:U­I1+ E (7 5 78Kp

W<+e%:Gb;H: 5E CZû +1+W 5E R:G'M.'_>7 5E`E +R.e%:G E 5 W<e; 5%E

`^T ~ `aÎZXZWi=i^fTch&_iiXi^fTch=_i"©X^if­b[¤gb[7S=d_X_eZ Z)gb[7S=d7_X_ËZ6©X^i

Page 305: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ ~X X Xi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ /

7_[_&d^&S_&aªUlgb'[7SXd_X_OZ`&h=^i=iiXi^fTch=_i"©X^if­b[¤gb[7S=d_X_eZ Z)gb[7S=d7_X_&a7^S7^OZ6©&^i7_[_&d^&S_&aªUlgb'[7SXd_X_M&a7^&S^OZ`&h=^7iXi?^V Ç eM'W<+e%:GV E :8W 5E 7 5 e%: 5E 78)g$NR$:U7`e 5%EGEG5 7G'W<+'7 5 7 5 7UWi3>W

X++C

¤ñ7G E RM.:8; 5 ]`W 5E :G7U; 5 E +R.7NC 4 ; E >Y=kI>eKJ;$`:G7I E e=HW)>7 5%E 5 7G78 E 5 e;$a 5 ;'VW"I E be 5 Y%R E +7UT 5 M.K; 5%E L>M 5 7 5 7UWi3bi;:8<'e E +78';0eRWi#­7G1 5 78»'e­7GKC f[5 7g$>W)M 5 V78'W)>.7U;:8 5 7G78 E 5 e;$^<"I$"> % Cy·^t¯ E65 e_>^;:U E ;.H:U; E ù§;:8 E78+t:GK; E`E T 5 78*v*>H:U; E úV 5 7 5 7UWib'W<7G'W<.7U­<<­781 5 78»J:8+78W<.e78­C

iXi^fTch=_i"©X^&]^=`h=^iXiT^&S=Q Z=UXZXZW`^T ~ gb[7SXd7_X_a ^[X=^&_i£d==[7S:bf:_£i iS_fNZ_&diXb\[ Z ~~XX=~XX~~XX=~~XX= h=_f:_[7S\©X^£_ b=iS_~~~XX=~~XX=~~~XX=~~XX=

~ W ~ W Q W W

Page 306: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

¤¥=L O¦z§¨o© ssQªRQ«R ©Q¬m§Q¨T© sC­usQ® §¨ n6=%< GA©Q¬ ª §¨X¯ @sQ«i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

W W ~ W7W ~XXX

~ W W ~=XX~ W W ~X=X

W W ~XXX W ~ W ~XXX

W W ~XX~6 W W ~=XX~

9:;%<:=b>=mD © B © @F Õ ¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨\ Õ Ù; [G < GUH6G := KGQ[SO ¥tÔfQfMLQ;?>n Z Y G :_ Õ(Ø G :6^ Z ; H sCBED ¨o© ss ©d Õ ¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨e B^Q; J :6L GPOZ?HK : GG Bvg BLQY%=^^on JQO Y Z L OZ?HK : GGh B^ J n G : Ö =%p=RYQ= H <R O6ÖQG L Ki Ba Z&G Y [ n JQO Y Z L j6G ¥t OZbHK : GG Ë [ = K =Õk Ba Z&G Y [ n JQO Y Z LSY G a K OZ?HK : GG ÕFrq Ba Z&G Y [ n JQO Y Z LP: Z < NK OZbHK : GQG ÕFuFFr\ ÕÞ G a= J Y K L%; H ^ K : J L K ;%:CB3ÙQ=YY^S^ J n G :CyéFr_ B > G%K%N ; [ n JQO Y Z L äZbHZ&K yE?ØF|d BY Z > Z&K Y;L%=Y^DFre BY Z > Z&K ^ K =L j DFrg =Y;%= [ ÏQsFh ZbH p; j6G ^bn G L Z =Y Ö =%p=RYQ= H <R O6ÖQG L K R äZbHZ&K yE?ØFri : GQK&J : HFrk B G&H[ > GQK%N ; [\uq\F B > G%K%N ; [ n JQO Y Z L äZbHZ&K y OZbHK : GG Ë [ = K =Õé?Ø\u\ BY Z > Z&K Y;L%=Y^ ©\u_\d =Y;%= [ ÏQs\ue ZbH p; j6G ^bn G L Z =Y Ö =%p=RYQ= H <R O6ÖQG L K R äZbHZ&K yE?Ø\ug =Y;%= [ D\h =Y;%= [ ÏQs\ui ^Uß=Un\uk n JK a Z%G Y [tOZbHK : GQG R j6G ¥S OZbHK : GG Ë [ = K =Õ_uq =LQ; H ^ K Ï HQJ YY_F =Y;%= [ ÏQs_u\ ^Uß=Un_u_ n JK a Z%G Y [tOZbHK : GQG RY G a K OZbHK : GG Õ_d =LQ; H ^ K Ï HQJ YY_ue =Y;%= [ ÏQs_ug ^Uß=Un_h n JK a Z%G Y [tOZbHK : GQG R%: Z < NK OZbHK : GG Õ_ui : GQK&J : H_uk BY Z > Z&K ^ K =L jm©dq B G&H[ > GQK%N ; [dîF BBB

Page 307: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& o !0/ %qi

i

i

i

i

i

i

i

ÎZÜ»ÚOu+Ô(ÖØÛFÏôv½lx¾V¿@Õ»Ü/z|bÏÊÝí¿ÎaÝ»×¾bÏ o

9:;%<:=b>=mD © B © ªF Õ ¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨\ Õ Ù; [G < GUH6G := KGQ[SO ¥tÔfQfMLQ;?>n Z Y G :_ Õ(Ø G :6^ Z ; H sCBED ¨o© ss ©d Õ ¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨¨¨¨¨¨Q¨¨¨¨¨¨Q¨¨e B^Q; J :6L GPOZ?HK : GG Bvg BLQY%=^^on JQO Y Z L OZ?HK : GG Ë [ = K =h B^ J n G : Ö =%p=RYQ= H <R O6ÖQG L Ki Ba Z&G Y [ n JQO Y Z L [6Z =MÒk Ba Z&G Y [ n JQO Y Z Lí> G ^SÒFrq Ba Z&G Y [ n JQO Y Z Lt= H ;AÒFuFFr\ B > G%K%N ; [ n JQO Y Z L äZbHZ&K yE?ØFr_ BY Z > Z&K Y;L%=Y^DF|dFre =Y;%= [ ÏQsFrg ZbH p; j6G ^bn G L Z =Y Ö =%p=RYQ= H <R O6ÖQG L K R äZbHZ&K yE?ØFh Y [ LMD ¬ ssFri =Y;%= [ ÏQsFrk ^Uß=Un\uq n JK a Z%G Y [tOZbHK : GQG Ë [ = K =R [6Z =mÒ\F Y [ LMD\u\ =Y;%= [ ÏQs\u_ ^Uß=Un\d n JK a Z%G Y [tOZbHK : GQG Ë [ = K =R?> G ^cÒ\ue Y [ LMD\ug =Y;%= [ ÏQs\h ^Uß=Un\ui n JK a Z%G Y [tOZbHK : GQG Ë [ = K =R [6Z =mÒ\uk : GQK&J : H_uq BY Z > Z&K ^ K =L jm©_F B G&H[ > GQK%N ; [_u\

Page 308: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !0/ i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

Page 309: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

!%"$# · 2&2 5 Q%&Q · Å&# · 2'±2¸(# 9ü= · Å*)+# kæ4 2ÆÅi

i

i

i

i

i

i

i

Apêndice AExercícios=^ E :8#I+e;'+ E >78T 5 7 5 5%E : 5E M'Re E g$+7U â 5E C f 78¦ +78'W 5%E 78+MK 5 eL­prM 5%E YRVØe 5Ç eMF; 5 M'.17 5 &;z 5 M 5 >­prM 5%E +W >;-+ â :8RM 5 Vd 5 W 5 :G7U;$K 5 eM.W<>e:8 E #¦§_Vk 5 E#Wi 5 7GKi;$+M' E 78¦ +78p E 3i7 5 5E :8 E ;$)M.:G+7US È E eLi.W<M'+W<>e:US>T 5 ; 5 5 W).MK; 5 7X++

V^ 5 7Í EGEG5 Va:U E +g$+7U â 5E eT 5 E :8T 5 7G>M' 5 e; 5E ¬RW HeK 5 > â :GRM 5 C· 5 5 e%:G7U­78 5 V+ 5 ;+W\+e1 5 M'1+7ØM.:G+7US È E ;$ E ; 5 eM' E ; 5 7BM']g$K 5 :G]@»>78S+T 5 ;6¯$;$' 5 C

± ¢ ûª ü7¶9ü!#¯7Xü±¼ü-,:X++

Ç Ä9'&ð0ý+ü± ¤9 Xü±&9/.±*7L0ü±LüGüGüÑí&#¼ü±=üü=!10#&$¡eüG&19 !0ü±Xü±Í&Lü± /$&ü± .)¶!p¼ü±Xü'ü&!2 !#üG3»ý¨9:üü±:Äp 8& , * $ü±:ÄÄ!N9Pü±L&Ñ/L+ü±)l95!#c)ð &Í4ð ü4üü±ðl9ü!#$¯"9Í5!±Xü±"!# $¶¼ü±=üü=!o ú ü7/8X!N9:Ln»Í üGK9!Ry7ü±¼ü-,&!"'

•%ÍL7(&»ý) üGqÑFü±)Xü±,n7 ü± w

•y9L!#nü±)!"/" 7L+ü±(&í8X&, w

•y9L!#y n,n76ü w

•ü±!19!#c) 8:9&plLV9¥9tü± $Ñä¡eLnn¼ü ) w

•5;8:9&(&"8=< n#ü7&nüK

± ¢ ¼²¯'ü ¡>¶!19tü±L&,"!#'&?lL8=9¯&" üWÍ+üW8! &ü± 8 9:< n&bü±LüGüG¼ü-,8=9!#:?tÊ<6Ê­D7? Há¿Ã@Q? É ¼i¹/AELMŽ¼PH2LC¼ É -Å@IÊ< C'A³³ ¹ ¼c|CXC7I<½¼c:D!Ê<7;B o C'A³³ú¿ºAïI

B

± ¢ ¿ O!#"Nü±!"¥:#97.±7L(0 · Ñ:9í$y7!¦9&L!#, ü± C&,19.ü!#&

X++,¶9ü!#,7! !C0 ! ¶!"Vf:^cb'[ÑË7!#",

%q

Page 310: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !0/"> i

i

i

i

i

i

i

i

Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

7! !C0 ! !" !"!#l9p"ü=&9LÊ!19tü±L& °c ü ¡>Ä4 »Ñdü )0­ÑDE0n!19 )!"

•& ® !)ü±Ê! 8=9¯äü×ÑíW8×ÑíLü&Ä6ü4ü=9Ä!"¶"!C0 '&ѯ))(¨9:L!"//9ü&6ü4ü=/F

•& ® °­² Ѫ(,6ü4ü=¶W8nü=GF

ʳ!#n,(üGXü ¡ª&#"!19¼ü±nN9&!#×Ñ99X$#(ü±!N9:L!" ¨7!"6ý !##5+üG@Í. L± ¢ ONý !#!"+üG:ð:ð9/.±*7ð0&0×Ñ/ð!19tü±Ä#97¥9¶7! !C0. '&¯:Ä L (H.±!#L(!#c)pUüG&!#c)(8X pc*(ü 9&ü7!#c)Ä&9I!#(ý !#üPl$¡eð7!#,9J.±üG !#ü 8'.±@9XÑ«X:!#¶n9J.±XüGÄ#¡OLüGn9 ® )ü±!19!#c), n9J.±üGp:!19tü±L&

X++

± ¢ ʳ! í üG7 KË9!ôí:8X&í&6ü4ü= ® L017!#y LM1.+üG#&)ü± ;8:9&!ù7!"¼ü±7$#N9:ü!".¼ý ÷c K9¨17Xü±¼ü-,Ñ9y8X!N9:L×Ñ:9¨7!R 97&nn9Lí9:69: üG ® °M² Ñ9<ü±üG/19 #&y7!#8=8=9<ýü¥LN8&"ûª !#Äü=p )ü±Ný !#8=9 ® !)ü±¤ü±5.6 :ü= 8:9&(&6ü4ü="± ¢  !19!#c)n#9 8:9&,&/'8=9¶&yXü 9#89J.G+ü±)Ñdü )C0»Ñýü± í9L¨9ü!#.± ¢ Å ²¯'ü ¡>¶Ä!19tü±,"!#?" üWÍ+ü"'ü¶#¡OLüG#!Ï9N9.LV9! 7ü±¼ü-,n¶!# !#,9 8,¶ n üWÍün'ü± ¢ Âl$¡e?!6±$$ü"¥!#7!#¥9L' &&¼ü±=üü=!ÑNl79p!#(7!",. üWÍEL03ü± üG,# L,&yH.±!#LV9L¼ü&/!IXüG"± ¢ ­.³8¯!O(¯!19tü±&+ü± (ð9 8:9& ¶!"ð,7! & 8)!Ï7! * ü±Xü ú !IXüG,,98=9p/n#!# !#,& &p! ®

Page 311: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& !0/""i

i

i

i

i

i

i

i

Apêndice BJavaCC¤7 5 7UWi3°%I1 4`4 ]RW¨+7U; 5 7`;$beM. E ; 5 7 E 'e:U­:8' 5 YR+7U<¯$;$' 5 °%I1ICk?dM'¦ 5 .eKKM'W<+e%:G^; E +e1 5 M.1K; 5 L>M' m Re#YRV;+ 5 E ;$»M.RWV:G>W) 5 EGEG5 R E +Ri;$ E +ep1 5 M.1'W<+e%: 5 78Ͳ¯ !# o :'VyY%R3 5E :G>7G 5 78W<+e%:Gb¦ 5 [.e 5 78 5 78;)L>M'QPl)ü&ü± :'C m R<1>7 E T 5 :GRLMy]bi$C'" >e 5 e%:G7Up E e%RWî78+ 5E H:8¯78 5 ;)78¯78' m ReÌCf 7U 5E .e%:G>7G EGE ; 5E >W 5 e9>>7#W<+M'9 5 7 5 °%I1 4`4 V E R,­'e,e l e:8+78e:ä]

Q7SXS&T:i|UWXW&©X^&]^`=`|Z3aX_]ªZ6©&^&]^OZ[_&S7WCä?kg$ E :G>WVk:8W3t]+WVdRWiM' E :U&;$;$ E +R EGE T 5 ÍRWc|6ü9 EG5 7G 5 7 5 ;R$: 5 C(û 0 5 7U; 5 5 Wæi78¯7GKi+W<78 E VP;$>_++eL E ;0W<'M.97G E;$F; 5 ~`eM 5 ; E ¦ 5 7UW ¦ +.: 5%E ; 5 °I1 4`4 6W)'M'978 E ;$@R E R­7G 5E R:G'M.'_>W0pre 5 >W\M''>S È E E ]>7GK E UC0=»ä­.eLVy 5 ;p E )+e 5 e%:G7U7J'e;äRW M.'eº78zRWi E ]>7G'<;$<7UWi­:8'> E7 5 e%:8 E 7U(R$:G'M'._NS+T 5 L>M 5 °%I1 4`4 C m T 5 7UWi­:8'> E V 5 7dg$>W)M 5 V;$»°%I1V 4 V 4 xx0Vm 2(A j»D s&AdVW0RH:U Ea5 R$:G7U E C¤ °%I1 4`4 ;$ Ç e<RWiäM.'eRL>W 7G¯78'Í7Uz; E 78'S>T 5 VPeRW He' 5 78Y%R'1 5 Vy; 5

eLM' E ; 5 7M.]+g$' 5 z; 5 eM. E ; 5 7 E 'e:U­:8' 5 C l eKKe; 5 5 W 5 eM. E ; 5 7M']g$K 5 V[ EGE M'.eR+W t+78W).:G<Y%R<+;i: 5 º>e E *vÍ; Ç eK; 5 eͦ 5 78W<z;$)RWiÍ+g7G EGE T 5 78+RMK7Y%RJ 5 ;$ E +7a:UT 5iE .W<M' E 5 W 5

òK\"] M^ U

õ ²Ma&°° U `h=^iXi Ì5 RäWi E 5 W)M.+g$< 5 W 5

òK\"] M^ UÄõiS=d:b[7K7`\[:iS7^[7S«U WXW£`\[:iS^[7S_iSXd:b[X`\f:\ ^g`ag:`a7^

#X ¬|Ò #X Ñ # [ Ñ # d Ó & #cX Ì?dWW3 5E[5%E + EG5E V 5E : 5 º+e E ;$ Ç eK; 5E >e%:G78Nõ E +7UT 5 R$:G'M.'_>; 5E 5 W 5 5 e E :Ue%:G E

'e:8+'78 E VI+ E8Eâ 1> E ;+e%:G7 5 ; 5 eM' E ; 5 7 E .e%:8­:GK 5 CÌ·^M']+W\;$k: 5 º+e E V> 5 ;$+W E +7Ì; Ç eK; 5%Ee 5 eM' E ; 5 7)M.]+gK 5 Y%R E >7U:G+78 E05 RQ+g7G EGEGÈ E ;$+1+W E >7i.e 5 7U; 5%E ùyù dú<

Page 312: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& -/ !0/"Ni

i

i

i

i

i

i

i

/ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

:8W3t]+W 5E : 5 º>e E E LNK E YR E T 5 : 5 º>e E Y%RieT 5äE T 5 EGE ; 5%E 7U 5 eM' E ; 5 7E .e%:8­:GK 5 V$W< E 78Wi_+>e; 5E (78>+Rt+7U; 5%E )7:8.7^;RW: 5 º>eze 5 78W<MC?dW ;$KS+T 5"JE g$78 E8EGÈ E 7G>RMK78 E V] 5%EGEGâ 1+MØ;$ Ç e.76 E :8; 5E 78) E t>+ Ç >7 5%E

: 5 º>e E V E º%' E<5 RÑ: 5 º+e E E t>+' E VFW< E<5 RQW)>e 5E 5 W 5 eRWþR$:GÆWi: 5Ç eH: 5 C = 5g$>W)M 5 E +R.7NVd E >Y=kI>eKzU ÷ E +7U­'e 5 78;t+M 5 eM' E ; 5 73M']g$K 5 #¦§7U­ E :8W3RL;7)7U 5 E :8; 5ð>ç|C?:C:D o >X>³DQ:? C D 5 ; E E ;$ Ç eKS È E ¦ +.:8 E e%:G>7G 5 78W<+e%:Ge 5 E :8; 5 pr;$7UT 5 eLT 53E +78'W7GN 5 e9>+'; E 5 W 5 eM' E ; 5 7dM']g$K 5 e E :G(e 5 1 5 E :U; 5 Cm 5 W)>e%:G 5»E +Re; 5^E º.b E +R.7Ì 5 ;$>7GK E >7BR E ; 5 CB?dM'@;$+:G+78W<.eL^Y%R@+ E5 E >Y=kI>eK ÷ >a7GNS+ eJ+e%:G7U;V+e%:UT 5J5 eM. E ; 5 7ØM']g$K 5 1 5 MH:U 5 E :8; 5 pr;$7UT 5 CB?,Y%R`7UY%RMKY%R+7` 5 E <;$.¦ +78+e%:G;$» ÷ NUV$)+e%:878;3]bL>e E 'e 5 7U;C°]± U

W U"fchS:bhb[_`\fXf:_[XSÌõfhS:bhb'[_`\f=f:_[XS M°"]± U

W U $ M ± a=òR õ¬ËÒ Ó Ì½^W 7GNR7 EG5 +g:G7U 5 ¦ +78>+'; 5 t+M 5 °%I1I 4`4 ]^t+78W<H:8.76YR^¯$;$' 5 °%I1I E *v EGEG5 K; 5

5 78> 5 e9>'W<+e%: 5 ;bRW ;$:8+78W)'e; 5 : 5 º+eÌC 2 RLe; 5i5 eM' E ; 5 7`M']g$K 5 78> 5 e9Ne(+e%:878; Y%R+M'F: 5 º+eBVM.]>W; E S È E e 5 78W< E : 5 Wi; E V 5 eM' E ; 5 7[M.]+g$' 5 +gNR$:U5 ¯$;$' 5 E8EG5 +'; 5 )>M.C

¤Ê7 5 7UWi; 5 7Z;$+1a:8W0L]>W ; Ç e'7 5 e 5 W<»;MK E8E aY%R».7U­78'7 5 eM' E ; 5 7E .e%:8­:GK 5 C l EGEG5 ]k¦ +.: 5 5 7ÌW)> 5 ; 5E 5 Wie; 5E@ ° M ° ± ^ X= ° M M^ $ =X VE +e; 5 888 5 e 5 W<#;; 5 5 eM' E ; 5 7 E .e%:8­:GK 5 C D R; 5 YR#7GNi+e%:87Gi EGE E ; 5 E 5 Wie; 5%EØE +7U­ .e E +78K; 5 5 W 5 +¯$;$. 5 e E :8(MK E8E CØ· E8E .WV 5 ;$+W E +7Z'e E +78'; 5%E ü±!19 *UV178'­I1+ E V$W<]+: 5 ; 5E :UC^?dW 7:8'+RMK7NV 5 W<]: 5 ; 5 !#ü±YRb7GN>L 5%E 7GRW<+e%: 5%E ;M'.e9Lb;$ 5 WieL; 5 V.e E :8eK 5 eM' E ; 5 7 E .e%:U­:GK 5 .e'+'b3e­M. E E 'e:U­:8'> 5 ;$ E >7'eM'R â ; 5 e E :G 5 e%: 5 C

¤ò78 E : 5 ; E ;$NMK7US È EkE T 5 E 7 5 ;RS È E ;J7UWi­:8'> Y%R E ^;$ E vJ.W<M'+W<+e%:U7NC¤°I1 4`4 R$:G'M'._N#):G]NeK+#; E +eL;$+e%:G78>+R7 E '1);3e­M. E C6=» E8E i 5 78;>Wî+;eT 5 pX:G+78W<.eLM»;à7UWi­:8'>].W<M'+W<>e:U; 5 5 7ÍW<+ 5 ;$-RW W<]: 5 ; 5 YRV»Y%Re; 5U9W<; 5 V@7 5 +R78-78> 5 e9N+7<e>e:878;- E :87GR:GR7U-; 5 eLT 5 pX:G>7GW<'eMXCÑ= T 5 g$ E :8%&&ü±=üV 5 R E *vV%> EG5 RWW)]+: 5 ; 5)E vbU9Wi; 5 7U78> 5 e9N>7@ E 7 5 ;$RLS È E ;$>7: 5 eT 5 p:8+78W<.eMk#eT 5 5 e E '䦧_IprM 5 VÌeLT 5 g$ E :8# 5E8E ''M.K;;#;$#78: 5 7GeL7bRW 5 e%: 5 e:8+78 5 7e>e:878;<:G>e%:870RWi 5 R:G7U 5 tS>T 5 V 5 R E *vVZRWi 5 R$:8787 5 ;$RS>T 5Y%RJ 5%EGE )M.>17^ 5 78> 5 e9N'W)>e%: 5 ;)+e%:G7U;C2 ReL; 5 eRWeT 5 pX:G+78W<.eLM+g E :G+W;.1+7 E E 5%EGEGâ 1+ E 7 5 ;$RS È E E >7G>W E +RK; E V

5 eM. E ; 5 7 E .e%:8­:GK 5 >78; 5 t+M 5 °%I1 4`4 : 5 Wi E >W)7G7G'W<+'78-+ E 7< 5 W +e%:878;CF¤ 5 W) 5 7G:8W<+e%: 5 pX;$7UT 5 ]b 5 e E K;$+7U7^L>e E RW EGâ W0 5 M 5 ;<>e:878;)7U;$NK;$.7 E 5 + E W<+e%: 55 5 7G78 5 RòeT 5 Cˤ 7 5 78Wi; 5 7) 5 ;$V` 5 78]+WV»MH:8+7U7i EGE 5 W< 5 7:UW<+e%: 5 ;$:8+78W<.ee; 5 M 5 LM'W)>e%:G3RW eXHW<+7 5 ;H¦ >7G>e:8); EGâ W3 5 M 5E(5 R E p

Page 313: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

þ ^`gÿãX ~XX6 W7W ~ X ~X U =T^_ X: X :i

i

i

i

i

i

i

i

Ü»ÚTS@Ò Ý»×+Î@¿ 1£xUÜGÝÜbÎ`Î / "

EG5 +'e; 5 bRW 5%EGEGâ 1+ML 5 e: 5 ;$(;$>+ E T 55 eXHW<+7 5 ;$ EGâ W0 5 M 5%E ;3+e%:G7U;YR ;$>1+WE +7»> E ; 5%E L7U)Y%R0Y%R+M'b+W<.e9 5#E v E >RK; 5 C l E : 5 ]¦ +.: 5 5 7»W)> 5 ; 5 5 Wie; 5aE\M\!]X ` $ C

m +R'e; 5 Ç M 5EG5Ç Q;Qe­M' E ,;$ E >e;$>e:8,7GNR7 E .1V E ;$>+M'78S È E ; 5%E eT 5 p:G>7GW<'e E»E T 5 L78>K; E 5 W«z;$>+M'78S+T 5 ;$3RW W)]+: 5 ; 5 C»·;$.¦ +78+eLS+i]3Y%R 5 5 7G 5; 5 eT 5 p:8+78W)'eM 5%EGE RP E 7 5 ;RS È E ;$ E 78.:8 E W<>;$Ke%:G E NY=kI+e+' E ;$»: 5 º+e E ( E :G78R$p:GR78 E ;$^78+t:8'S>T 5 V E 5 M'9 Ek5 R 5 P 5 e E CZ½^Wg$+W<M 53E .W<M' E 7G+:G'78; 5 ; 5%E +g>W<M 5%E; 5 7G¯7G 5 °I1 4`4 ]bW 5%E :878; 5 E >R'7NCF=»+M'VPM']+W ;i7 5 ;$RS+T 5 7 5 78'W)>e%:Gb;$.:8V E8EG5 + 5 R$p E `¯$;$' 5 °%I1VY%R»]^g$>+R$:8; 5 Y%ReL; 5b5 5 7G78 5 + E W<>e: 5 ;>e:878;V 5 WRWi7G:G;7 5 ;$RS>T 5 C2= 5 + E5 V 5 eT 5 pX:G+78W<.eLMv 973]R$:8.M''_>; 5 5 W 5,Eâ W3 5 M 5'e'+'MZ7Ui78> 5 e9N+7 RWiÍM''eR>W¨¦ 5 7GWi;i 5 7J78 E ;$¶z#ÌC3¤ËeT 5 p:8+78W<.eM²¯ $ û ) 5 e EG5 W<RW VtU9W<p E 78>+R7 E '1IW<+e%:GV+ E5i5 7G¯Ig$'W 5#EGâ W3 5 M 5 ;+e%:878; E *vRW 5 R$:87 5 V@;$> 5 E Vd 5 e E5 W< 5 Ì-Y%R+ E 5 W 5 C·^M']+W ; E8E5 V 5W<]: 5 ; 5 +7GK; 5 7U#78> 5 e9>>7 5 eT 5 p:8+78W<.eMØ78: 5 78eiRW 1IM 5 7 'e%:G>.7 5 Y%R)]<.e+7G+pW<+e%:8; 5 +;ä7G+: 5 78e 5 ;U9W<;C#= 5Ç eMVÌ:G+W)p E ieLU9Wi;zWi E +g%:8+78e 5eXHW<+7 5 : 5 :UMB;$J7G E 7GN 5 e9>+'; 5E C]\cba ± [XTX7S Ub[7S¦`\X[XS Ì

`\X[7SX¢=ñ^&S`Q_=a ° d7^`_7i ' õ \ °& iS_f1Z3\7S«Z)TXd:b[7S7h[ ò Q_h=_&]7_7hiÊ\=¤[_iSb[7b=i ó¼`\X[7S ÌÌb[7Sñ^S`Q_=a ° d^`_i ' Ub[7S¤[_iS7_=aE`\X[7S7¢ | Ì

õ a °b ² Ò¶[_iS7_=aE`\X[7S7¢=ñ7^&S`Q_&a ° d^`_i ' Ó¡õ °b ² ¤d_S=7d=[óXó[_iS_&aE`\=[7S Ì̤ ¯$;$' 5 E8EG5 +'; 5¯JE 7 5 ;$RS È E 5 ;$>W E >7<L>W W< E 5 W<M'g 5E C fZ5 ;p E 7Gp

Wi_>+e7 5 1M 5 7»; 5%E : 5 º>e E 78> 5 e9NK; 5E b 5 ;$+p E :8+7 :G]bW< E W 5 M 5 5E SXd W`^&Sc`Q 5 W 5 +Wæ°%I1IC»= 5 g$+W<M 5 E >R'7>VP E 7 5 ;RS È E ; 5 eLT 5 pX:G>7GW<'eM >­D7? HHD o C E p:8T 5 ;$>e%:G7 5 ;$äRW S=d Vd;$zW 5 ; 5 Y%R E äM.RWÿ+787 5&E 'e:U­:8' 5&5 5 7G78+7Íù§RWi+g$+>S>T 5´:A6˳cD%¸ ¹:o D&NO? ]3MKeS>;%ú V 5 M 5 5 ; 5 `^&S`Qz]b+gNR$:U; 5 VP 5 W« EGEG5 Vt 5 ;$+p E b'W)pM'+W<+e%:U7bM'RW<ä E :878:G]+';$i78>+Rt+7US+T 5 ;i+787 5%E C#= 5 5 Wie; 5 d_S=7d=[yVB;$+e%:G7 5; 5 SXd V E 'e$¦ 5 78WiS È E 5 M'9'; E e 5 W<]+: 5 ; 5iE T 5 R$:8.M''_>; E 7U3+7GK7FRW e¯<;)­781 5 7GE .e%:8­:GK+C

ñ_&S&Q\=a $ _`&h ^ \=aX_ðf:_S=Q\=aXaX_`&h _`\]7_d ° _&S S=Q7d\Y:i ^&di_ \ `_T7S:b\[ Uò \&ö7_[S ¢[XhXh|Ñ

S ~ ¢[XhXh b[7Sö£¢ |ñ_&S&Q\=a ° \&a ^ \=aX_ðf¼¢[=chXh Ì

Page 314: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& -/ !0/"+i

i

i

i

i

i

i

i

/ % Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

SXd

S ¢¡õ ± ^ ò R S ¢¡õ °&ò ± ^ R#S ¢¦õ ±Q$ M^ ò õ a °M ²] ò õ °b ²] ò ö7óXó Ì =S ~ ¢õ ±Q$ M^ ò f¼¢Êf:_&S=Q\&a&g\=a ¤d7_&S=7d=[[_Y£ñ7_&S=Q\=a $ _`&h ^ \=a7_ S ÑlöeÑS ~ Ѷf Ì

Ì`^&Sc`Q ^&di_ `_T7S:b\[_

`\[:if:_ ± [XS:bh OÑ,_ËÑ f_&S=Q\=a=a7_`&h d_&S=Xd=[¤[_Y£ñ_&S=Q\=a $ _`h ^ \=a7_ S Ñ#öeÑS ~ Ñ,f Ì̤°%I1I 4`4 ]nPLg â 1+M[:8W3t]+W 5 ¦ 5 78eN+7J;$'1>7 EG5E 78RW<+e%: 5E 7U#R E : 5 W<._N7 5

eLM' E ; 5 7 E .e%:U­:GK 5 CÌ? E8E E 78RW<>e: 5E 5 ;$>W E >7Z E8E ; 5E 7U 5 °%I1I 4`4 5 eM. E 77UWi­:GK+ 5 RQe 5 'e â + 5 ; 5 7G¯78 5 7UY%R.1 5 ;7UWi­:8'>V@eRWi E E8E T 5 \ ò±"\ ^ ° Cök*vW 5E M'Re E g$+W<M 5E

•AZ¤¤ · j ?@·»û º eBk E :Ut+M'> 5 1M 5 7aM 5 LMB;$JM 5%5 º9N;ä 5 W 5

nm

•mD · Dal 4 º :G78RII¦§M E b.eL;$'> E 5 eM' E ; 5 7 E .e%:8­:GK 5 +7U; 5 :G>78­ E +R E W)>W)p7 5%E E :8­:GK 5%E5 RàeLT 5 C 465 W RWi-MK E8E ieT 5 E :8­:GK+VØ 5 ;$+W)p E ä78'73;$'1+7 E E'e E :8®eK E ; 5 eM' E ; 5 7 E 'e%:8­:GK 5 m

•û ? n ½ ¹V f · c m ?@c º :G78RN¦§M E i'e;$K+ E z;+1 E >73+7U; 5 +¯$;$. 5 Y%RÍ>W<H:8W<>e E >e EJE5 7G 5 ¦ Re 5 eLW<+e%: 5 ; 5 eLM' E ; 5 7 E 'e:U­:8' 5 VB 5 W 5 W<]: 5 ; 5E U9pWi; 5E eT 5 pX:G>7GW<'e E 78> 5 e9>K; 5%E m

•û ? n ½ ¹V D ¤ J?6=WV^s· =»·^¹(?@c º :G78RII¦§M E ØK;$>Wî78 5 eM. E ; 5 76M']g$K 5 m

•½ = l 4 ¤(û ?XV l = f ½ D º :87GRIN¦§M E 'e;$K+ E 5 eM. E ; 5 7#M.]+g$' 5 ;$+1-+.:87+¯$;$. 5 ½^eK 5 ;$&m

•l ¹J=J¤(c`?XV 4 · m ? º :G78RN¦§M E [.e;'> E ;$+1 'e 5 787F E ;$H¦ >7G>eS+ E +e%:G78 M':878 EWiLH E RM' E W)'eXH E RMK E C

?kg$ E :G>W:UW3t]+WË7 5 7UWi E Y%RV:G7UM.9e; 5 5 W 5 °%I1 4`4 VRg'M''We +7US>T 5;)­781 5 7G E 'e%:8­:8'>3J; E MK E8E E Y%R(¦§_>+W E 1 E .:8 E 5E e¯ E ;$ E8E )­781 5 7GCZ¤ê7G¯7G 5°%I1I 4`4 5E8E R 5 °%° D 78+C[?dM'»]^RW 7G]+pX7 5 EGE ; 5 7ØL7U 5 7UY%R.1 5 ;7UWi­:GK+iù E +W¯$;$' 5 E8EG5 +'; 5íJE 7 5 ;$RLS È E úÌY%Ra'e E +78 5 ¯$;$' 5 e>+ E8E ­7G 5 L7U (78'S+T 5 ;(­781 5 7GE .e%:8­:GK+CZ¤ñ7G E RM.:8; 5 ]`RWË78Y%R'1 5 Y%R^;$>1V+e%:8T 5 V E +7k7 5 EGE ; 5 t+M 5 °I1 4`4 C f[5 7W<+ 5 ;$J>7:U E e 5 :8S È E e 5 7UY%R'1 55 78''eMXV7 5 EGE ; 5 L>M 5 °° D 7G>V 5 7 5 7UWi; 5 7 5 ;V;$b++7G: 5 W 5 ; 5 V+R E : 5 W<'_>7`<78KS+T 5 ;)­7G1 5 78 E .e%:U­:GK+C

¤ R$:G7 5 7 5 78Wi6L78>K; 5 ] 5 ° D`n ù§°%I1> D 78+ n R'MK;$+7 ú CØ?dM.6:8W3t]+Wê78]pr7 5 + E8E z7UWi­:8'>i>78e; 5 RW 7UY%R.1 5 Y%R<;$+1 E +7(:878:8; 5 t+M 5 °%I1 4`4 iY%R) 5 e%:G]>W 5¯$;$' 5 7U#78KS+T 5 ;Í­7G1 5 78 E 'e%:8­:8'>C(·^M']+Wæ;$ EGEG5 Vt>78# E +M' EGE E 5 7878 E 5 e;$+e%:8 E 5%E e¯ E ;ä­781 5 7G E 'e%:8­:8'>Í<RWi E ]>7G'<;$iMK E8E E Y%R<'W<M.>W<+e%:8 5 ;$7UT 5 °Ìü ü± 78 E Jt+7U 5 7G78+7`<­781 5 7GC

Page 315: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& -/ / !0/"Noi

i

i

i

i

i

i

i

Ü»ÚTS@Ò Ý»×+Î@¿ 1£xUÜGÝÜbÎ`Î / /

c` E RW<'e; 5 V 5 °%I1 4`4 ]#RWi¦ >7G7UW<+e%:U E :8e:8i 5 ;$>7 5%E V­PLg â 1+M6Vk 5 W RW 5 R 5 ;$7U­:8'>VF¦§­+.M(;$R$:G'M'._N7NC ·»M.]>W ; E8E5 V E >R2+g:G+e E5 R E5 t+MKà 5 W3Re';;$:G>W ;$ E 5 e''M.'_>; 5 ;$'1>7 E E ¦§'M.K;;$ E g:G7U E V 5 W 5 ¦ +787UW<+e%:8 E »78Wi­:GK+ E VYR 5: 5 7GeLWî.e;0Wi E :G7U:G'1 5 C

Page 316: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& -/ , !0/">i

i

i

i

i

i

i

i

/ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

Page 317: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& -/ o !0/"Iqi

i

i

i

i

i

i

i

Apêndice CJasmin¤ ° E W<'eù§°%I1I· EGE +W0M'+7 l e%:G>7¦§IúZ]^RW 7 5 7UWiJY%R^t+78W<H:8»b78KS+T 5 ;»RW7GpY%R'1 5 ;$@+M' EGE k°I1aa7G:G'7Ì;$kRWê78Y%R'1 5 :G+g: 5 VNe 5 E :8.M 5 ;$kRWêW 5 e%:8; 5 7y78a78Y%R.p:G+:GR7U E :G7U;$K 5 eL E Cy?dM'a 5 W<e9L 5 M.'17 5 °I1aö»'7G:GRMsU9.e@;$6° 5 ebs+>7Ì D 7 5 û 5 ~`e.eV%RM''>; 5 t+MK)¤c`+'M.M'ù±Q7SXS=TVU6WXWYXYXY«Z6\&d_cbhXh Z`\f:W`^&SX^7h&\W&©X^]^]fPúCy¤E H:8&; 5 7 5 v*+: 5 °% E W<.eÌVa; 5 eL;$¦ 5 7G+:G'78;,,Wi 5 7Í7G:G&; E 'e$¦ 5 7GWiS È E ;$ E :8+ â :GRM 5 ]¥Y=YXYVZ`^S«Z)[ «Z6_=a&Wf_ _dW©X^if­b'[yC

¤ ° E W<'e 5%EGE RØRWi E 'e%:8g E 'W<M. E Y%R37GP:83;$'7G+:8W<>e:83#Wi 5 7GKi; 5E :87G.pR$: 5E ;$»RW78Y%R'1 5 ; MK E8E CZs E W 5 E8E 'W ]»RWi¦ >7G7UW<>e:U¨Pg â 1>ML(YR^g$'W) 57 5 78W<; 5 7k;(:U78¦§b;`¦ 5 78Wi:87k»+7U7d; 5 78Y%R'1 5 ;$ MK E8E CØ?dM'`:UW3t]+WeT 5 ¦ +p:GRLiW3R.:8 E U9N++e E`EG5 7G 5 +¯;. 5 W 5 e%:8; 5 V E +e; 5 5%EGEGâ 1+My+7U78+W)p E MK E8E E Y%ReT 50E +7UT 5 +.:8 E t+MK0°ö sàC fZ5 76+g>W<M 5 V+M'»eT 5 ¦ +:GR) 5 e E E :I>eK E g:G>7Ge E 5 W 51>7G Ç >7 E 5 R$:G7U E MK E8E E V7G+¦ +78+e+'; E e3+M' EGE E +e; 5 >78;V7GNM'W<+e%:G g$ E :G>W 5 R E :8T 5 ;$ E 5 e â 1+ E Cs E W 5 5 e E E :I+e+' E 'e%:G+78e E 5 W 5 1>7G Ç >7 E äRWi'e E :87GRLS+T 5 ]E +W<78bMK+eLS+;) 5 W«i'M.9<eLiW< E W<iMH:8R7U0uz+7U:G>7 âKE :8'>)7GNYR+78';)t+MK#°ö suzeT 5ÍE T 5 ¦ +:GR; E C fZ5 7 5 R$:87 5 MK; 5 VP 5 e9>++e; 5 p E RW 5 R 5#5 ¦ 5 78Wi: 5 ; 5 78Y%R'1 5;$(MK E8E `( E 'e E :G78RS È E ;$ °ö sàV]^ 5E8EGâ 1+M'eKK7Gp E `'W)N;$K:8W<+e%:G^eLb7 5 78W<S+T 5 5 W 5 ° E W<'ezg$t+78.W<+e%:U73 EbE RL E Wi E ;$.1+7 E E +78 :G>7 âKE :GK+ E VØ 5 W 5 W<]: 5 ; 5E V178'­I1+ E V E R7 5 :G'e E V$+g$+>S È E :8C· 5 ¦§_++7 5 ; 5 ~`eM 5 ;i; 5 ° E W<'eBV 5 M'+.: 5 7 5 :G]+W RW78Y%R'1 5 5 W< :U; 5 5 W :GRL; 5

;$>e:87 5 VL+g$>R:8­I1> E V¦ 5 e%:GVtg$>W)M 5%E :UC n E :8i;$ E 5 W<:87^:8MØ78Y%R'1 5 0.e+M.R.7 5E +R E RP;$'7G+:G¯78 5 +ü±äe 5 >W<.e9 5 ; R E >3;$(7 5 7UWi E ; 5)E >R E E :G>W< 5 t+7U+ 5 eMLù§Y%R E Iú67 5 e%: 5 C 2 R E ( 5 78Y%R 5 7 5 7UWi]J E +7G.: 5 +W«°I1b;$>L>e;$b;$JRWi<°ö s780g$>+R$:8­pXM 5 Cf 7U)¦§_+>7^¦ ReL 5 e7 5 °% E W)'eBVRW<#1+_3.e E +78K; 5 e 5 >W<.e9 5 ;$bt E Y%R E #;$37 5 p

7UWi E V E :U3+gNR$:U7

©X^if³b'[Êf bh&_eZ6©X^i¤ 5 WieL; 5 8 !0ü±Ñ]VÌeLz1+7U;;VyRWÿ7UYR.1 5 ;$ E 78'$:bYR)'e1 5 +ä°ö s 5 W

5E ;$+1K; 5E 7GRW<+e%: 5%E 7Ug$>+R$:87Í,MK E8E 8 !0ü±!L²¯ü± 7 5 EGE 7 5 78Y%R'1 5

/ o

Page 318: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& -/ !0/">i

i

i

i

i

i

i

i

/ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

;$ E v; 5 CÌ? E8E E +7G'$:Z1>Wê>W; 5 E E 5 78 E UCB½»W\7U E +7Øg$>+R$:8; 5 e 5 û¤ m =ò'e; 5 ~ 5 R:G7 5 L7U E +7d+g$>R:8; 5 t+M 5 7$±te 5 M'.eR$g 5 R m Ret¤ m ù 5 RiY%RMKY%R+7 5 R:G7 5JE E :8+WiY%R E R 5 7:8 5 W3'+e%:8J°%I13 5 7$±§úC?dWÿ:G>7GW 5E ;$Í78RW)>e%: 5E ]#:8W0L]>W L E :8e%:8 E 'W<M. E 5 R E R­7G 5 5 ;$ät+e E

¦ 5 78eN+7`Y%RM 5 ;$.78:8¯78 5 +W¨YR 5 78Y%R'1 5 ;$MK E8E J;+1 E +7`+7U; 5 C fZ5 7a+g>W<M 5

©X^if³b'[¼a Z=ZW`&h=^iXi_if bh&_eZ6©1k 5 M 5 >7 5 7UY%R'1 5 ;$ E â ;Í;$>e%:G7 5 ; 5 ;$'7G+:G¯78 5 Q:LUV[78 E L>H:Ue; 5z5 ;$'78:G¯7G 5Y%RÍ78+7G E >e:U 5 5 :Gz;&MK E8E #>78;C fZ5 73g$>W)M 5 V E ä&MK E8E Í E +7)>78;]!l9&&&ü=L²b|L V>e%:8T 5(5 7UY%R.1 5 ; E â ;n²b|L± E +7U­»78I1; 5 e 5 ;$'78:G¯7G 5 Q:LQc!l9&&&ü=C¤ E 5 WieL; 5E eRW¦ 5 e%:G° E W<'e E T 5 ;$'1';$K; 5%E +W :87I E +:G+ 5 78' E

•;.78:8.1 E m

•'e E :G78RS È E m

•78¯:8RM 5E C

· E ;$'78:G'1 E ¦ 5 78eN+W 'e$¦ 5 7GWiS È EFE5 7G(0+M' EGE Ve>W E >W<7G(78+MK 5 eL; E 5 W 5¯$;$' 5 7 5 7GKW<>e:8^;$.: 5 Ck· ;$>+M'78S+T 5 ;$ RWib;$'7G+:G'1.e'+'p E E +W<78» 5 W 5 e 5 W<;b;.78:8.1 E +R'; 5 ;^_+>7 55 R)Wi E 78RW<+e%: 5E CØ· E ;$'7G+:G'1I E ++.:8 E L>M 5 ° E W<'e E T 5

C +:UU9 C MK E8E C +e; C Ç +MK;C 'W<M'+W<+e%: E C .e%:G>7¦§ C M.'W<H: C M'.eC W<:89 5 ; C E5 R7U C E RL>7 C :G97 5 ~ EC 17

ök*vW 5%E M'Re E g$+W<M 5E

Z`h=^iXiðf T^`ö^_7Wñ ² h=^i&iZiXT_&d©X^]^7WXh=^[7W \ g©X_`S

? E8E E ;$R E ;$'7G+:G'1I EbE T 5 R$:G'M'._N; E RWi1+_i>Wÿ>;78Y%R'1 5 # E t> Ç >WVÌ78 E pt> :8.1W)>e%:GV 5 e 5 W<; 5 7UY%R.1 5 MK E8E » E +7`+7U; 5 bYRLMB E RL E Rt+7UMK E8E C

ZGf_&S=Q\=aT=Xgchb=`ðf ñ_&S=Q\=a a ©=^&]^7W7S:bh=W!_7`S\d Z6_[af:_&S=Q\&a? E :8 E ;R E ;$'78:G'1 E<E T 5 R$:G'M.'_>; E >W 7G E VdL7U&Wi7U+7 5 'e â 5 5-Ç eM^;

;$NMK7US+T 5 ;$FRWW<]: 5 ; 5 CØ·278'W)>.7U^;$ Ç eVM']+W; 5 e 5 W<a; 5 W)]+: 5 ; 5 V E >R E :G78'R$: 5%EJ E8E 'e:8R7UC D R; 505 Y%RJ1%'+7a>e:87G( E8E E ;$.78:8.1 E ;._(7G E t+.: 5 5 W<]: 5 ; 5 V$ 5 W 5 V 5 7g$>W)M 5 V E ;$'7G+:G'1 E

Zhbf³bSiS7^`ö Zhbf³bS£h=\`^7hi

Page 319: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& -/ %q- !0/">i

i

i

i

i

i

i

i

Ü^ÚYS@Ò»Ý ×+Î@¿ËÎxCUÜ ÓÐ×*Ò / %q

Y%RiK;$+e%:G Ç >W 5 eXHW<>7 5 Wi­g$'W 5 ;$i 5E KS È E ;.M'9;$i+gNRS>T 5 5 eXHW<+7 5 ;$178'­I1+ E M 5 > E Y%R 5 W<]+: 5 ; 5 R$:8.M''_>CZ?dW7:8'+RMK7NV;$>e:87 5 ;»RWW<]: 5 ; 5 V78>+ 5E +Re; 5 :G' 5 ;$` 5 Wie; 5 Y%R E T 5 E 'e E :87GRLS È E CØ?@M' E E L>M.9W E 'e E :G78RS È E ; Ç eK; E78-°ö(s,CZ· E >Y=kI>eK>W´Y%Rä E .e E :87GRS È E 7GN+Wÿe 5 7UYR.1 5 pX¦ 5 e%:G#°% E W<.e78P+:Gi E >Y=kI>eKY%Ri E .e E :87GRS È EE +7UT 5 +7U; E e 5 7G7UI;$<:8 E ; 5 78Y%R'1 5 ;$MK E8E C¤ E e 5 W) E +.: 5%E t+M 5 °% E W<.e E T 5 Y%R>M. E R$:8.M'._N; 5%E eL&;$ Ç eKS+T 5 ;&°ö sàV E8E .Wî 5 W 5)5E 78®W)+:G7 5E Y%R+;).e E :G78RS>T 5 5 ;$b+.:87>CZ?kg$>W)M 5%E ;$.e E :87GRS È E

hac` `_7hXh=\d_\&dh&a b=b[:` g:bTX:iQ ? 5 HMH:8.W 5 :G' 5 ;$ä 5 WieL; 5 ++.: 5-E T 5&5E 78¯:8RM 5E C?dM' E)E T 5 :8W3t]+W´R$:G'M'._N; 5%E

E +W<78@;$+e%:87 5 ;$@W)]+: 5 ; 5%E E +781>WÊ78aK;$+e%:8 Ç >7Ø 5 e: 5E E t> âHÇ 5E ù§;$ E M 5 +W)>e%: 5E ú;$>e:87 5 ; 5 7G7UIi;$:8 E Y%R 5 W< È b+;0W)]+: 5 ; 5 C f[5 7`g$+W<M 5

hac` `_7hXh=\d_\&dh&a a ^g_7h U

b=b[:` g:bTX:iQ =^ E :8> EG5 V 5 7G¯:GRM 5 a ^g_Xh U0K;$>e:8 Ç + 5 ;$ E M 5 +W<>e: 5 ;$>e:87 5 ; 5 7G7UIÑ;-%:G E; 5 W)]+: 5 ; 55 e; E z'eKK 5 ¯$;$' 5 ;-'e E :87GRLS+T 5 ü ü±+CѤ E 78¯:8RM 5E3E T 5 H$:G> E Y%Re; 5R$:8.M'._N; 5%E V$ 5 7`+g$+W<M 5 V 5 W 5 M.1 5 ;b 5 Wie; 5E ;$b; E 1% 5 5 W 5

b7_ a ^g_7h hac` h=\ñ=X[aX\ 7\&S\ a ^g_7h ~a ^g_7h U

hac` `_7hXh=\d_\&dh&a a ^g_7h ~ U

^d_&S=7d&[û»'1>7 E EF5 R$:G7U E >7U :8+7 â'E :GK+ E 5 ;$+W E >7`;$ Ç e'; E 78)<MK E8E V 5 W 5

• EGE8EG5 +'S+T 5 ;»RWeXHW<+7 5 ;$ M.'e90; 5 ¯$;$' 5 p¦ 5 e%:G» 5 W RWM 5 5 ;$ .e E :G78RS È E 5 7»W)> 5 ;<;$'78:G'1ÊZ6hb[_cm

•; Ç eKS+T 5 ;$0RW e 5 W<07UiRWii178K­I1+MÌM 5 +MØeRWæ;$+:G>7GW<'e; 5 :G78>U9 5 ; 5 ¯p;. 5 V$ 5 7`W<+ 5 ;<;$'7G+:G'1IÊZ ]^&dm

•; Ç eKS+T 5 ;$#RWi;$+:G>7GW<'e;'e E :G78RS+T 5 5 W 5 RW 8= 9XüG$XL78;$+p:8+78W<.e; 5 M 5 5 ;$b¯$;$' 5 5 7^W<+ 5 ;<;$.78:8.1(`^&Sc`QyC

· E8E 'WV 5 °% E W<.eÍ] RWi0¦ +787UW<+e%:8b E :8e:8 'e%:G>7G EGE e%:G» 78> 5 W<+e;p E (bM'+.:GR7UWi E +R';; 5%E #;Í; 5 RW)>e%:8S>T 5 e 5ÍE .:G); 5 7 5 v*: 5 C^?kg$ E :8+W 'e;ÍM'RWi E»5 R$:878 E¦ +787UW<+e%:8 E YR` 5 ;$>W'e:8+7U.7d 5 W 5 °% E W<.eBCØO 5 + EG5 V 5 7dg$+W<M 5 V; 5 |L7°Ìü

Page 320: Como Construir um Compilador Utilizando Ferramentas Java€¦ · !0/ i i i i i i i i Como Construir um Compilador Utilizando Ferramentas Java MÆrcio Delamaro Novatec Editora + $

+ %& -/ !0/% i

i

i

i

i

i

i

i

/ Î`ÏaЬÏËÎ`ÏaÒ ÓBÔZÕ)ÖÌ×*Õ¨ÖØÐÙÎ`ÏaÐÚ@×*ÛÌÜ»Ý<ÏaÕ

Y%R<]iRW ; E E8E >W3M'+7;$#78Y%R'1 5%E ;#MK E8E C)[email protected] 5 ;$i7 5 ;R_+'7b7UY%R.1 5E :G+g%: 5 VØe 5¦ 5 78Wi: 5 ;$ Ç eK; 5 t+M 5 °% E W<.eÌVPÍ7G:G'7J;$0RW 7UYR.1 5 ;$<MK E8E C¤ |L7°Øü 5 ;$E +7`+eL 5 e%:878; 5 >W¨;$'1>7 EG5EaE H:8 E ;$b; 5 ~`eM 5 ;#78­:G E e l e%:G+78e+:>V 5 W 5 V$ 5 7`g$>W)M 5 CQ7SXS&TVUWXWY=YXYVZ)T\dXS^Xh&©=^&]X^eZ`\fÌC