From: Ulya Trofimovich Date: Fri, 26 Jul 2019 10:24:21 +0000 (+0100) Subject: Updated 1994 paper "RE@C: a More Versatile Parser Generator" (finer rendering quality). X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=76893860b3d3c8b26fd7d588d72f24c68d318696;p=re2c Updated 1994 paper "RE@C: a More Versatile Parser Generator" (finer rendering quality). --- diff --git a/src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.pdf b/src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.pdf deleted file mode 100644 index c661f18e..00000000 Binary files a/src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.pdf and /dev/null differ diff --git a/src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.ps b/src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.ps new file mode 100644 index 00000000..2067b582 --- /dev/null +++ b/src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.ps @@ -0,0 +1,5249 @@ +%!PS-Adobe-2.0 +%%Creator: dvipsk 5.526a Copyright 1986, 1993 Radical Eye Software +%%Title: paper.dvi +%%Pages: 16 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%EndComments +%DVIPSCommandLine: dvips -o paper.ps paper +%DVIPSParameters: dpi=300, compressed, comments removed +%DVIPSSource: TeX output 1994.04.15:2115 +%%BeginProcSet: texc.pro +/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N +/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 +mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} +ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale +isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div +hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul +TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get +round 5 exch put setmatrix}N /@landscape{/isls true N}B /@manualfeed{ +statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 +0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn +begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X +array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo +setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx +FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{ +pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get} +B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup +length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B +/ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type +/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp +0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 +index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff +ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice +ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]/id +ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N /cp 0 N{ +rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id gp get +/gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp add /cp +X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add /gp X +adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{dup +255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 adv} +B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2 idiv +S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string +putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval +adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg} +{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{ +adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2 +chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{] +}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup +length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ +cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin +0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul +add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage +userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook +known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X +/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for +65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 +0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V +{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 +getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} +ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley +false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley +scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave +transform round exch round exch itransform moveto rulex 0 rlineto 0 +ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta +0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail} +B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{ +3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p +-1 w}B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{ +3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end +%%EndProcSet +%%BeginProcSet: special.pro +TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N +/vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP 0 N /rwiSeen +false N /rhiSeen false N /letter{}N /note{}N /a4{}N /legal{}N}B +/@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{@scaleunit +div /vsc X}B /@hsize{/hs X /CLIP 1 N}B /@vsize{/vs X /CLIP 1 N}B /@clip{ +/CLIP 2 N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{ +10 div /rwi X /rwiSeen true N}B /@rhi{10 div /rhi X /rhiSeen true N}B +/@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X}B /magscale +true def end /@MacSetUp{userdict /md known{userdict /md get type +/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup +length 20 add dict copy def}if end md begin /letter{}N /note{}N /legal{} +N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath +clippath mark{transform{itransform moveto}}{transform{itransform lineto} +}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{ +itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{ +closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 +0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}N +/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 +scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get +ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip +not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 +TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR +pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 +-1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg +TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg +sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr +0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add +2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp +{pop pop showpage pm restore}N end}if}if}N /normalscale{Resolution 72 +div VResolution 72 div neg scale magscale{DVImag dup scale}if 0 setgray} +N /psfts{S 65781.76 div N}N /startTexFig{/psf$SavedState save N userdict +maxlength dict begin /magscale false def normalscale currentpoint TR +/psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts +/psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx +psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy +scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR +/showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{ +psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 +roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath +moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict +begin /SpecialSave save N gsave normalscale currentpoint TR +@SpecialDefaults count /ocount X /dcount countdictstack N}N /@setspecial +{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto +closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx +sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR +}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse +CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury +lineto closepath clip}if /showpage{}N /erasepage{}N /copypage{}N newpath +}N /@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{ +end}repeat grestore SpecialSave restore end}N /@defspecial{SDict begin} +N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{ +/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX +SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X +/startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad +yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end +%%EndProcSet +TeXDict begin 40258431 52099146 1000 300 300 (paper.dvi) +@start /Fa 43 122 df<126012F0A212701210A31220A312401280040C7B830D>44 +D<126012F0A2126004047B830D>46 D<1303A3497EA2497E130BA2EB11E0A3EB20F0A249 +7E1478A2497EA33801FFFEEB001E0002131F80A248EB0780A2120C001E14C039FF803FFC +1E1D7E9C22>65 DI<90380FE0209038 +7018603801C00439030003E000061301000E13004814605A15201278127000F01400A800 +70142012781238A26C14407E000614806CEB01003801C00638007018EB0FE01B1E7D9C21 +>II +II<90381FC04090387030C03801C00C38030003000E1301120C001C +13005A15401278127000F01400A6EC7FF8EC07C00070130312781238A27E120C120E0003 +13053801C008390070304090381FC0001D1E7D9C23>I<39FFF0FFF0390F000F00AC90B5 +FCEB000FAD39FFF0FFF01C1C7D9B22>I<380FFF8038007C00133CB3127012F8A21338EA +7078EA4070EA30E0EA0F80111D7D9B18>74 D<39FFF00FF8390F0007C0EC030014025C5C +5C1460148049C7FC13021307497E1317EB23C0EB43E01381EB00F08014788080141F80EC +078015C015E039FFF03FFC1E1C7D9B23>IIII80 D82 +D<3803E080EA0C19EA1005EA3003EA600112E01300A36C13007E127EEA7FE0EA3FFC6CB4 +FC00071380EA007FEB07C0EB03E0130113007EA36C13C0A238E0018038D00300EACE06EA +81F8131E7D9C19>I<007FB512C038700F010060130000401440A200C014201280A30000 +1400B1497E3803FFFC1B1C7D9B21>I<39FFF01FF0390F000380EC0100B3A26C13021380 +00035BEA01C03800E018EB7060EB0F801C1D7D9B22>I<39FFE003FC001FC712F06C1440 +A26C6C1380A27F0003EB0100A23801E002A2EBF00600001304A2EB7808A2EB7C18EB3C10 +A26D5AA2EB1F60EB0F40A26D5AA36DC7FCA21E1D7E9B22>I<3BFFE07FF03FC03B1F000F +800F00ED00066CEC8004A213800007496C5A1413A23A03C033E0101421A23A01E061F020 +1440A2D800F06D5AEC8078A20178EB7C80903879003CA2013D013FC7FC013E7FA2011E13 +1E011C130EA2010C130C010813042A1D7E9B2E>I<13201370A313B8A3EA011CA3EA020E +A2487EA2EA07FF38080380A3381801C0EA380338FE0FF815157F9419>97 +DIIII103 D<38FF8FF8381C01C0A9EA1FFFEA1C01A938FF8FF815157F9419>II<38FF83F8381C01E01480140013025B5B5B1330137013B8EA1D +1C121EEA1C0E7F14801303EB01C014E014F038FF83FC16157F941A>107 +DI<00FEEB0FE0001E1400 +00171317A338138027A23811C047A33810E087A2EB7107A3133AA2131CA2123839FE083F +E01B157F941F>I<38FC03F8381E00E014401217EA138013C01211EA10E01370A2133813 +1CA2130E130714C0130313011300123800FE134015157F9419>III114 +DI<387FFFF03860703000401310A20080 +1308A300001300ADEA07FF15157F9419>I<38FF83F8381C00E01440AE000C13C0000E13 +8038060100EA0386EA00FC15157F9419>I<38FF01F8383C00F0001C1340A2001E13C000 +0E1380A238070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3132015157F9419> +I<38FF87F0381E0380000E1300EA0F026C5AEA038413C8EA01D0EA00F0A21370137813BC +EA011C7FEA020F487EEB0380000C13C0123C38FE07F815157F9419>120 +D<38FF80FE381E0078000E1320000F13407E3803808013C100011300EA00E2A21374137C +1338A848B4FC1715809419>I E /Fb 7 118 df101 D<123E120CA41218A41230A41260 +A412C012C8A312D0126007177D9609>108 D<3830783C38498CC6384E0502EA4C06389C +0E06EA180CA348485A15801418A23960300900140E190E7D8D1D>I111 +D114 +DI117 D E /Fc 1 59 df<126012F0A2126004047D830A>58 +D E /Fd 1 111 df110 D E /Fe 22 121 df45 +D<12E0A303037D820A>I<130813181330A31360A313C0A3EA0180A3EA0300A21206A35A +A35AA35AA35AA35AA20D217E9812>I<1202120E12FEA2120EB0EAFFE0A20B167D9512> +49 D90 D97 D<12E0A8EAE7C0EAFFE0 +EAF870EAE038A2131CA51338A2EAF0F0EAFFE0EAE7800E177E9612>II101 DII<12E0A31200A612E0AF03187E9708>105 +D<12E0B3A503177E9608>108 D<38E7E1F838EFF3FC38F87E1E38F03C0EEAE038AB170F +7E8E1C>IIII114 D<121FEA7FC012E01300A27E127FEA3F80EA0FC0EA +01E0128012C0EAE1C0127FEA1F000B0F7F8E0E>I<1238A4EAFFC0A2EA3800AA1340EA1F +C013000A137F920D>II120 D E /Ff 34 121 df<3801F1C0120312071301120EA7EAFFF1A2EA0E01B012 +1D809C16>13 D45 D<12E0A303037C820C>I<130113031306A3 +130CA31318A31330A31360A213C0A3EA0180A3EA0300A31206A25AA35AA35AA35AA35AA2 +10297E9E15>II<5A1207123FB4FC12C71207B3A3EAFFF8 +A20D1C7C9B15>II +I<133C137C135C13DC1201139C1203A2EA071CA2120EA2121C123C12381278127012F0B5 +12C0A238001C00A7121B7F9A15>II55 D57 D69 +D<387FFFF0A2380001E0130314C013071480EB0F005B131E133E133C5B13F85B12015B48 +5A12075B120F90C7FC121E123E123C127C1278B512F0A2141D7E9C19>90 +D97 D<12E0ABEAE3E0EAEFF0EAFFF8EAF87CEAF01CEAE01E13 +0EA6131C12F0EAF87CEAFFF8EAEFF0EAE3C00F1D7D9C15>II<130EABEA0F +8EEA1FEEEA3FFEEA7C3EEA700EA212E0A612F0EA701EEA7C3EEA3FFEEA1FEEEA0F8E0F1D +7E9C15>II<13FC12011203EA0700120EA7EAFFE0A2EA0E +00B00E1D809C0D>I<3803C3C0EA0FFF5A381C3800487EA56C5AEA1FF85BEA3BC00038C7 +FCA2EA1FFC13FF481380EA700738E001C0A3EAF003387C0F80383FFF006C5AEA07F8121B +7F9115>I<12F0A41200A71270B2041D7E9C0A>105 D<12E0AB133C137813F0EAE1E0EAE3 +C0EAE780EAEF00B4FC138012FBEAF9C0EAF1E012E013F013781338133C131E0F1D7D9C14 +>107 D<12E0B3AB031D7D9C0A>I<38E3F03F39EFF8FF80D8FFFD13C039F81F81E038F00F +00EAE00EAD1B127D9122>II< +EA03F0EA0FFC487EEA3C0F38780780EA700338E001C0A5EAF00300701380EA7807383C0F +00EA1FFE6C5AEA03F012127F9115>II114 DI<121CA6EA +FFE0A2EA1C00AC1320EA1FF0120FEA07C00C187F970F>II<39E03E0380A3D870371300EB7707A213733838E38EA33818E18C +381CC1CC001D13DCA2380D80D8000F13F8A20007137019127F911C>119 +D<3870038038780700EA3C0EEA1C1C120E6C5AEA03F06C5A5B7F487EEA0738EA0E18131C +487E487E3870038000F013C01212809113>I E /Fg 72 126 df<126012F0AA12701200 +A4126012F0A212600414799312>33 DII37 D<1207EA1F80EA19C01239A3EA3B9E133EEA3E38EA1C70A2EA1E +E0123E1267EAE7C0EAE3C413CE12E7EA7EFCEA3C380F147F9312>I<126012F012F81278 +1218A31230A2126012C01280050C799312>II<128012C012601230121812 +1C120C120EA21207A7120EA2120C121C12181230126012C0128008197C9612>I<1207A3 +EAE738EAFFF8EA7FF0EA1FC0A2EA7FF0EAFFF8EAE738EA0700A30D0E7E9012>II<126012F012F8127812181230A212E012C0050979 +8312>II<126012F0A212600404798312>I<13181338A21370A2 +13E0A2EA01C0A3EA0380A2EA0700A2120EA25AA35AA25AA25AA25A0D1A7E9612>II<1206A2120E121E12FE12EE120EACEAFFE0A20B147D9312>III<12E0EAFFFEA2 +EAE0181338EA007013E013C01201EA0380A2EA0700A4120EA512040F157F9412>55 +DII<126012F0A212601200A6126012F0A21260040E798D12>I<126012F0A2126012 +00A6126012F0A212701230A2126012C012800413798D12>I<13381378EA01F0EA03E0EA +0F80EA1F00123C12F85A7E123C121FEA0F80EA03E0EA01F0EA007813380D117E9212>I< +EAFFFEA2127FC7FCA3EA7FFE12FFA20F097F8E12>I<124012E07E127C7EEA0F80EA07C0 +EA01E0EA00F8137813F8EA01E0EA07C0EA0F80EA3E005A12F05A12400D137E9312>I65 DII69 DI73 D75 DII79 +D +I82 DII<38FE3F80A238380E00AE6C5A6C5AEA07F06C5A111480 +9312>I89 DII<12C07E +A21270A27EA27EA37EA27EA2EA0380A2EA01C0A3EA00E0A21370A21338A213180D1A7E96 +12>II97 D<12F8A21238A4EA3BE0 +EA3FF0EA3C38EA381C130C130EA4130C131CEA3C38EA3FF0EA1BC00F147F9312>II< +13F8A21338A4EA07B8EA1FF8EA3878EA7038126012E0A41260EA70781238EA1FFEEA0FBE +0F147F9312>II<137E13FFEA01C7EA03821380A2EA7FFE12FFEA0380AA +EA3FF8A21014809312>II<12F8A212 +38A4EA39E0EA3FF0EA3E38123C1238A8EAFE3EA20F147F9312>I<1206120FA21206C7FC +A3127FA21207AAEAFFF0A20C157D9412>I<12F8A21238A4EA3BFCA2EA38F0EA39E0EA3B +C0EA3F80A213C0EA3DE0123813701338EAFC7EA20F147F9312>107 +DIIIII114 +DI<1206120EA3EA7FF812FFEA0E00A7131CA3EA07F8EA01E00E127F +9112>IIIIIII<13F81201EA0380EA0700A8120E12FCA2120E7EA8EA0380EA01F812000D1A7E96 +12>I<127812FC120E7EA8EA0380EA01F8A2EA0380EA0700A8120E12FC12780D1A7E9612> +125 D E /Fh 37 123 df<90383FE3F83901F03F1C3903C03E3E0007137CEA0F80151C15 +00A5B612C0A2390F807C00AE397FE1FFC0A21F1D809C1C>11 D<127812FCA4127806067D +850D>46 D<1360EA01E0120F12FF12F31203B3A2387FFF80A2111B7D9A18>49 +DI< +EA03F8EA1FFEEA3C1FEB0F80387C07C0127E127C123838000F80A2EB1E005BEA03F8EA00 +1EEB0F80EB07C0A214E01230127812FCA214C038780F80EB1F00EA1FFEEA07F8131B7E9A +18>II66 D<90381FE0209038FFF8E03803F80F3807C003380F +800148C7FC123E1560127E127C00FC1400A8007C1460127E123E15C07E390F8001803907 +C003003803F80E3800FFFCEB1FE01B1C7D9B22>I69 D77 D79 +D82 D<3807F820381FFEE0EA3C07EA +7801EA700012F01460A26C130012FEEAFFE0EA7FFE6C7E1480000F13C06C13E0EA007FEB +03F01301130012C0A214E07E38F001C0EAFC0338EFFF00EA83FC141C7D9B1B>I<007FB5 +12E0A238781F81007013800060146000E0147000C01430A400001400B03807FFFEA21C1C +7E9B21>I97 DIIII<137F3801 +E3803803C7C0EA0787120FEB8380EB8000A5EAFFF8A2EA0F80AEEA7FF8A2121D809C0F> +I<3803F8F0380E0F38121E381C0730003C1380A4001C1300EA1E0FEA0E0EEA1BF80010C7 +FC1218A2EA1FFF14C06C13E04813F0387801F838F00078A300701370007813F0381E03C0 +3807FF00151B7F9118>II<121E123FA4121EC7FCA6B4FCA2121FAEEAFFE0A20B1E7F9D0E>I107 DI<39FF0FC0 +7E903831E18F3A1F40F20780D980FC13C0A2EB00F8AB3AFFE7FF3FF8A225127F9128>I< +38FF0FC0EB31E0381F40F0EB80F8A21300AB38FFE7FFA218127F911B>II<38FF3F80EBE1E0381F80F0EB0078147C143C143EA6143C147C +1478EB80F0EBC1E0EB3F0090C7FCA6EAFFE0A2171A7F911B>I114 DI<1203A45AA25AA2EA3FFC12FFEA1F00A9130CA4EA0F08EA0798EA03F00E1A7F9913>I< +38FF07F8A2EA1F00AC1301120F380786FFEA01F818127F911B>I<39FF8FF8FEA2391F03 +E030A201831370000FEBF0601386D807C613C0EBCEF8EBEC790003EB7D80EBF83D0001EB +3F00A2497E0000131EEBE00EA21F127F9122>119 D<38FFC7FCA2381F8180EA0F833807 +C700EA03EEEA01FC5B1200137C13FEEA01DFEA039F38070F80380607C0380C03E038FF07 +FCA216127F9119>I<38FFC1FCA2381F0060EB80E0000F13C013C03807C180A23803E300 +A2EA01F713F6EA00FE5BA21378A21330A21370EA706012F85BEAF9800073C7FC123E161A +7F9119>I<383FFF80383C1F00EA303F133E485A13FC5BEA01F01203485AEBC180EA0F81 +121F1303003E1300EA7E07EA7C0FB5FC11127F9115>I E /Fi 55 +124 df<1218123CA31204A21208A21210122012401280060C779C0D>39 +D43 D<12181238127812381208A21210A212201240A21280050C7D +830D>II<1230127812F0126005047C830D>I<14031407140E14 +0C141C141814381430147014E014C013011480130314005B1306130E5B13181338133013 +70136013E05B1201485A90C7FC5A1206120E120C121C121812385A126012E05AA218297F +9E15>I<133C13C6EA0183EA030312061480120E120C121C1400485AA4EA700EA4485AA3 +5BA21330485A12E0EA60C0EA7180001EC7FC111D7B9B15>I<13021306130C131C137CEA +039CEA0038A41370A413E0A4EA01C0A4EA0380A41207EAFFF00F1C7C9B15>I<133C13C3 +38010180120214C0EA0441A21208A338108380A238110700EA0E06C65A5B5B13C048C7FC +12061208485A13021220EA4006EA7E0CEAC7F81283EA80E0121D7C9B15>I<133EEBC180 +EA0101380200C05A1340EA0841A3EB8380EA070338000700130EEA01F8EA0038130CA213 +0EA41270485A12805B1330EA4060EA21C0001FC7FC121D7C9B15>III<130FEB308013C0EA01831203 +90C7FC1206120E120C121C13F0EA3B18EA3C0C12381278EA700EA3EA601C12E0A35BA25B +EA60605BEA2180001EC7FC111D7B9B15>I<131E1361EB8180EA0180380300C0A2380601 +80A3380703001386EA03CC13F01201EA0378EA063CEA081EEA180E1230EA6006A3485AA2 +5BEA60105BEA30C0000FC7FC121D7C9B15>56 D<133C13C6EA0183EA03031206120E000C +1380121C1400A2485AA35B130EEA181EA2EA0C6CEA079CEA001C1318133813305BEAE0C0 +A2EA81800086C7FC127C111D7B9B15>I<1206120FA212061200AA1230127812F0126008 +127C910D>I<1418A21438A21478A214B8130114381302143CEB041CA213081318131013 +20A2EB7FFCEB401C1380120113001202A2487F120C001C131EB4EBFFC01A1D7E9C1F>65 +D<903803F02090381E0C6090383002E09038E003C03801C001EA038048C7FC000E148012 +1E121C123C15005AA35AA41404A35C12705C6C5B00185B6C485AD80706C7FCEA01F81B1E +7A9C1E>67 D<48B512E038003C00013813601540A35BA214201500495AA214C013FF3801 +C080A43803810113801402A248485AA2140C5C000E1378B55A1B1C7D9B1C>69 +D<48B512C038003C01EB38001580A35BA214201500495AA214C013FF3801C080A4D80381 +C7FC1380A348C8FCA45AEAFFF01A1C7D9B1B>I<903803F02090381E0C6090383002E090 +38E003C03801C001EA038048C7FC000E1480121E121C123C15005AA35AA2903801FFC090 +38001E00141CA400705BA27E001813786C139038070710D801F8C7FC1B1E7A9C20>I<38 +01FFC038003C001338A45BA45BA4485AA4485AA448C7FCA45AEAFFE0121C7E9B10>73 +D<3801FFE038003C001338A45BA45BA4485AA438038008A31410EA07001430146014E038 +0E03C0B5FC151C7D9B1A>76 DI<3901FC03FE39001C0070013C13 +60012E1340A301471380A3EB43809038838100A2138114C1380101C2A2EB00E2A2000213 +E41474A3481338A3000C1318001C1310EAFF801F1C7D9B1F>II<3801FF +FC38003C079038380380EC01C0A3EB7003A31580EBE0071500140E14383801FFE001C0C7 +FCA3485AA448C8FCA45AEAFFE01A1C7D9B1C>I<3801FFF838003C0EEB3807EC0380A3EB +7007A3EC0F00EBE00E5C1470EBFFC0EA01C014601470A2EA0380A4380700F01540A21580 +48137839FFE07900C7121E1A1D7D9B1E>82 DI<001FB512C0381C070138300E +0000201480126012405B1280A2000014005BA45BA45BA4485AA41203EA7FFE1A1C799B1E +>I<397FF0FF80390F001C00000E13181410A3485BA4485BA4485BA44848C7FCA31302A2 +5BA2EA6008EA3030EA1040EA0F80191D779B1F>I<3901FF81FE39001E00F0011C136001 +1E1380EB0E011500EB0F026D5A5C1490EB03A014C01301A28013021304497EEB10701320 +EB60381340EB803C3801001C12020006131E121E39FF80FFC01F1C7E9B1F>88 +D97 D<123F1207A2120EA45AA4EA39C0EA3E60EA3830A2EA7038A4EAE0 +70A3136013E0EAC0C012C1EA6180EA6300123C0D1D7B9C13>IIIII<13F3EA018FEA030FEA0607EA0E0E120C121CA2EA381CA413381230A2EA1878 +13F0EA0F701200A213E0A2EAC0C012E1EAC300127E101A7D9113>III108 D<393C1E078039266318C0394683A0E0384703C0008E13 +80A2120EA2391C0701C0A3EC0380D8380E1388A2EC0708151039701C032039300C01C01D +127C9122>IIIIIII<13C01201A3EA0380A4EAFFE0EA0700A3120EA45AA4EA3840A313 +80EA1900120E0B1A7D990E>II<381E0183382703871247148338870701A2 +120EA2381C0E02A31404EA180C131C1408001C1310380C26303807C3C018127C911C> +119 DI +I123 D E /Fj 38 123 df<90380FF83F90397FFDFFC03A01F81F +E3E03903E03F87EA07C0D80F801307ED03C06EC7FCA6B612FCA2260F801FC7FCB2397FF0 +FFF0A223237FA221>11 D<1238127C12FE12FFA2127F123B1203A212071206A2120C121C +12181270122008117CA210>39 D<1238127C12FEA3127C123807077C8610>46 +D<13181378EA01F812FFA21201B3A7387FFFE0A213207C9F1C>49 +DI<13FE3807FFC0380F07E0381E03F0123FEB81F8A3EA1F +0314F0120014E0EB07C0EB1F803801FE007F380007C0EB01F014F8EB00FCA2003C13FE12 +7EB4FCA314FCEA7E01007813F8381E07F0380FFFC03801FE0017207E9F1C>I<14E01301 +1303A21307130F131FA21337137713E7EA01C71387EA03071207120E120C121812381270 +12E0B512FEA2380007E0A7EBFFFEA217207E9F1C>I<00101320381E01E0381FFFC01480 +14005B13F8EA1BC00018C7FCA4EA19FCEA1FFF381E0FC0381807E01303000013F0A214F8 +A21238127C12FEA200FC13F0A2387007E0003013C0381C1F80380FFF00EA03F815207D9F +1C>I<1470A214F8A3497EA2497EA3EB06FF80010E7FEB0C3FA201187F141F01387FEB30 +0FA201607F140701E07F90B5FCA239018001FCA200038090C7FCA20006147FA23AFFE00F +FFF8A225227EA12A>65 DIIIIII76 D79 +DI82 D<007FB61280A2397E03F80F0078140700701403006014 +0100E015C0A200C01400A400001500B3A20003B512F8A222227EA127>84 +D87 D97 D99 +DI<13FE3807FF80380F +87C0381E01E0003E13F0EA7C0014F812FCA2B5FCA200FCC7FCA3127CA2127E003E13186C +1330380FC0703803FFC0C6130015167E951A>I<3803FC1E380FFF7F381F0F8F383E07CF +383C03C0007C13E0A5003C13C0EA3E07381F0F80EBFF00EA13FC0030C7FCA21238383FFF +806C13F06C13F84813FCEA380048133E00F0131EA40078133C007C137C383F01F8380FFF +E00001130018217E951C>103 DI<121C123E127FA3123E121CC7FCA7B4FCA2121FB2 +EAFFE0A20B247EA310>I<3AFF07F007F090391FFC1FFC3A1F303E303E01401340496C48 +7EA201001300AE3BFFE0FFE0FFE0A22B167E9530>109 D<38FF07E0EB1FF8381F307CEB +403CEB803EA21300AE39FFE1FFC0A21A167E951F>I<13FE3807FFC0380F83E0381E00F0 +003E13F848137CA300FC137EA7007C137CA26C13F8381F01F0380F83E03807FFC03800FE +0017167E951C>I<38FF0FE0EB3FF8381FF07CEB803E497E1580A2EC0FC0A8EC1F80A290 +38803F00EBC03EEBE0FCEB3FF8EB0FC090C8FCA8EAFFE0A21A207E951F>I114 +DI<487EA412 +03A21207A2120F123FB5FCA2EA0F80ABEB8180A5EB8300EA07C3EA03FEEA00F811207F9F +16>I<38FF01FEA2381F003EAF147E14FE380F81BE3907FF3FC0EA01FC1A167E951F>I<39 +FFE01FE0A2390F800600A2EBC00E0007130CEBE01C00031318A26C6C5AA26C6C5AA2EB7C +C0A2137F6D5AA26DC7FCA2130EA21B167F951E>I<387FFFF0A2387C03E0387007C0EA60 +0F38E01F8000C01300133E137EC65A5B485A00031330EA07E013C0380F8070121F383F00 +60003E13E0EA7C03B5FCA214167E9519>122 D E /Fk 4 122 df15 +D<133C13E0EA01C013801203AD13005A121C12F0121C12077E1380AD120113C0EA00E013 +3C0E297D9E15>102 D<12F0121C12077E1380AD120113C0EA00E0133C13E0EA01C01380 +1203AD13005A121C12F00E297D9E15>I<12021207A61202A3EA7270EAFFF8EA7270EA02 +00A21207B11202A60D267E9C12>121 D E /Fl 12 114 df<38078010EA1FC0383FE020 +EA7FF03860304038C01080128038000900A2130AA3130CA21308A31318A35BA45BA21340 +141B7F9115>13 D<126012F0A2126004047C830C>58 D<126012F0A212701210A41220A2 +12401280040C7C830C>I<140CA2141CA2143C147C145C149C148EEB010EA213021304A2 +1308A213101320EB3FFEEB4007A21380EA0100A21202A21206121E39FF807FF01C1D7F9C +1F>65 D<3801FFE038003C001338A45BA45BA4485AA438038002A31404EA0700140C1418 +1438000E13F0B5FC171C7E9B1C>76 D<3801FFFE39003C03C090383800E015F01570A249 +13F0A3EC01E001E013C0EC0780EC1E00EBFFF03801C03080141CA2EA0380A43807003C15 +08A2151048131E39FFE00E20C7EA07C01D1D7E9B20>82 DI97 D<123F1207A2120EA45AA4EA39E0EA3A30EA3C1812381270131CA3EAE038A31330 +1370136013C01261EA2300121E0E1D7E9C12>II110 D113 +D E /Fm 77 125 df<126012F0AF12601200A4126012F0A212600419779816>33 +DII<13C01201A3EA07F0EA1F +FC48B4FCEA7DCF38F1C78012E1A338F1C300EA79C0127FEA1FF0EA07FCEA01FE13CFEBC7 +80EAF1C3A3EAE1C712F13879DF00EA3FFE6C5AEA07E0EA01C0A2120011207E9C16>I38 +D<1218123C123E121E120EA3121E121C123C127812F01260070D799816>I<13E01201EA +07C013005A121E5A123812781270A312F05AA77E1270A312781238123C7E7E7E13C0EA01 +E012000B217A9C16>I<12E07E127C121C121E7EEA0780120313C01201A313E01200A712 +0113C0A3120313801207EA0F00121E121C127C12F05A0B217C9C16>III<1238127C127EA2123E120E121E +123C127C12F81260070B798416>II<127012F8A3127005057884 +16>IIIIII<137C13FC13DC1201EA039CA2EA071C120F120E121E123C1238 +127812F0B512E0A338001C00A53801FFC0A313197F9816>II<13F8EA03FEEA0FFFEA1F0F123E123CEA78060070C7FC12F0EAF3F8EA +EFFE12FFEAF80F38F00780A2EAE00312F0A21270EA7807EB0F006C5AEA1FFEEA0FF8EA03 +E011197E9816>I<12E0B51280A338E00F00131EEA001C5B137813705BA2485AA3485AA4 +48C7FCA7111A7E9916>III<127012F8A312701200A8127012F8A312700512789116>I<1238 +127CA312381200A81238127CA3123C121C123C123812F812F012600618799116>III<12C012F012FC123EEA0F806C7EEA01F06C7E133EEB1F801307131FEB3E +0013F8485AEA07C0485A003EC7FC12FC12F012C011157E9616>II<13E0487EA213B0A2EA03B8A31318EA071CA5EA0E0EA2EA0FFEA2 +487EEA1C07A3387F1FC000FF13E0007F13C013197F9816>65 D<3801F180EA07FF5AEA1F +0FEA3C0712781303127000F0C7FC5AA77E387003801278A2EA3C07381F0F00EA0FFE6C5A +EA01F011197E9816>67 DI<387FFFC0B5FC7EEA1C +01A490C7FCA2131CA2EA1FFCA3EA1C1CA290C7FC14E0A5EA7FFFB5FC7E13197F9816>I< +B512E0A3EA1C00A41400A2131CA2EA1FFCA3EA1C1CA290C7FCA6B47E7F5B13197F9816> +I<387F1FC038FFBFE0387F1FC0381C0700A7EA1FFFA3EA1C07A9387F1FC038FFBFE0387F +1FC013197F9816>72 DI<387F0FE038FF8F +F0387F0FE0381C0780EB0F00130E5B133C5B5B5BEA1DF0121F7F1338EA1E1C121C7FA27F +A2EB0380387F07E038FF8FF0387F07E01419809816>75 DI<38FC07E0EAFE0FA2383A0B80EA3B1BA513BBEA39B3A413F3 +EA38E3A21303A538FE0FE0A313197F9816>I<387E1FC038FF3FE0387F1FC0381D070013 +87A313C7A2121CA213E7A31367A21377A21337A31317EA7F1FEAFF9FEA7F0F13197F9816 +>III82 +DI<387FFFE0B5FC +A2EAE0E0A400001300AFEA07FC487E6C5A13197F9816>I<387F07F038FF8FF8387F07F0 +381C01C0B0380E0380A23807070013FF6C5AEA00F81519809816>I<387F1F80133F131F +380E1E00131CEA073C1338EA03B813F012015B120012017F120313B81207131CA2EA0E0E +A2487E387F1FC000FF13E0007F13C013197F9816>88 D<38FE0FE0EAFF1FEAFE0F381C07 +00A2EA0E0EA26C5AA3EA03B8A2EA01F0A26C5AA8EA03F8487E6C5A13197F9816>I91 D<12C07EA21270A27EA27EA27EA27EA26C7E +A26C7EA26C7EA21370A27FA27FA27FA27FA2EB0380A2130111207E9C16>II<120C121E123C1278127012F012E0A312F012F81278 +1230070D789B16>96 DI<127E12FE127E120EA4 +133EEBFF80000F13C0EB83E01301380E00F0A21470A414F0000F13E01301EB83C013FF00 +0E1300EA063C1419809816>II<133F5B7F1307A4EA03C7EA0FF7 +EA3FFFEA3C1F487E487EA212E0A412F05BEA781FEA7C3F383FFFE0381FF7F03807C7E014 +197F9816>II<131FEB7F8013FFEA01E7EBC30013C0 +A2EA7FFFB5FCA2EA01C0ACEA3FFE487E6C5A11197F9816>I<3803E3C0380FFFE05A381E +3CC0383C1E00EA380EA3EA3C1E6C5AEA1FFC5BEA3BE00038C7FCA2EA1FFC13FF4813C0EA +780338F001E0EAE000A3EAF001387C07C0383FFF80380FFE00EA03F8131C7F9116>I<12 +7E12FE127E120EA4133C13FF000F138013871303A2120EA9387FC7F038FFE7F8387FC7F0 +1519809816>II108 D<38F9C38038FFEFC0EBFFE0EA3E +7CEA3C78EA3870AA38FE7CF8A2EB3C781512809116>IIIII<38FF0FC0EB3FE0137F3807F040EBE0005B5BA290C7 +FCA7EAFFFCA313127F9116>II<12035AA4EA +7FFFB5FCA20007C7FCA75BEB0380A2130713873803FF005BEA00F811177F9616>I<387E +1F80EAFE3FEA7E1FEA0E03AA1307EA0F0FEBFFF06C13F83803E3F01512809116>I<38FF +1FE013BF131F38380380A413E33819F300A213B3EA1DB7A4EA0F1EA313127F9116>119 +D<387F1FC0133F131F380F1C00EA073CEA03B813F012016C5A12017FEA03B8EA073C131C +EA0E0E387F1FC038FF3FE0387F1FC013127F9116>I<387F1FC038FF9FE0387F1FC0381C +0700120E130EA212075BA2EA039CA21398EA01B8A2EA00F0A35BA3485A1279127BEA7F80 +6CC7FC123C131B7F9116>I<383FFFC05AA238700780EB0F00131EC65A5B485A485AEA07 +8048C7FC381E01C0123C1278B5FCA312127F9116>I<12E0B3AE0320779C16>124 +D E /Fn 10 58 df<121FEA3180EA60C0EA4040EAC060A8EA4040EA60C0EA3180EA1F00 +0B107F8F0F>48 D<120C123C12CC120CACEAFF8009107E8F0F>I<121FEA6180EA40C0EA +806012C01200A213C0EA0180EA030012065AEA10201220EA7FC012FF0B107F8F0F>I<12 +1FEA2180EA60C0A2120013801201EA0F00EA00801340136012C0A2EA8040EA6080EA1F00 +0B107F8F0F>I<1203A25A5A120B121312331223124312C3EAFFE0EA0300A4EA1FE00B10 +7F8F0F>III<1240EA7FE013C0EA8080A2EA010012025AA2 +120C1208A21218A50B117E900F>I<121FEA3180EA60C0A3EA7180EA3F00120FEA3380EA +61C0EAC060A3EA4040EA6080EA1F000B107F8F0F>I<121FEA3180EA60C0EAC0401360A3 +EA40E01221EA1E6012001340EA60C01380EA4300123E0B107F8F0F>I +E /Fo 66 124 df11 D<13FCEA0782EA0E07121C130290C7FCA4B5FCEA1C07AC38FF1FE013 +17809614>I<13FFEA0707120E121CA6B5FCEA1C07AC38FFBFE01317809614>I<12011202 +1204120C1218A21230A212701260A312E0AA1260A312701230A21218A2120C1204120212 +0108227D980E>40 D<12801240122012301218A2120CA2120E1206A31207AA1206A3120E +120CA21218A2123012201240128008227E980E>I<126012F0A212701210A21220A21240 +A2040A7D830A>44 DI<126012F0A2126004047D830A>I<130813 +181330A31360A313C0A3EA0180A3EA0300A21206A35AA35AA35AA35AA35AA20D217E9812 +>I<12035AB4FC1207B1EA7FF00C157E9412>49 DII<1330A2137013F01201 +1370120212041208121812101220124012C0EAFFFEEA0070A5EA03FE0F157F9412>II +I<1240EA7FFE13FC13F8EAC008EA80101320EA00401380A2EA0100A25A12021206A2120E +A512040F167E9512>I57 +D61 D<13101338A3135CA3138EA3EA0107A200 +031380EA0203A23807FFC0EA0401A2380800E0A21218003813F038FE03FE17177F961A> +65 DIIIIII73 D<38FF80FE381C0078146014401480EB0100130613085B13381378139C +EA1D0E121EEA1C07EB0380EB01C0A2EB00E014701478147C38FF80FF18177F961B>75 +DI<00FEEB03F800 +1E14C000171305A338138009A23811C011A33810E021A2EB7041A3EB3881A2EB1D01A213 +0EA2123839FE040FF81D177F9620>I<00FC13FE001E1338001F13101217EA1380EA11C0 +A2EA10E013701338A2131C130E130F1307EB0390EB01D0A2EB00F014701430123800FE13 +1017177F961A>I<13FCEA0303380E01C0381C00E0481370003013300070133800601318 +00E0131CA700701338A200301330003813706C13E0380E01C038030300EA00FC16177E96 +1B>II82 DI<387FFFF83860381800401308A200801304A300001300 +AF3807FFC016177F9619>I<38FF80FE383C0038001C1310A26C1320A26C1340A3380380 +80A213C100011300A2EA00E2A213F61374A21338A3131017177F961A>86 +D<38FF83FC381F01E0380E00807EEB8100EA0382EA01C213E4EA00E81378A21338137C13 +5E138EEA0187EB0780EA0203380601C0000413E0EA0C00001C13F038FF03FE17177F961A +>88 D<12FCA212C0B3AB12FCA206217D980A>91 D<12FCA2120CB3AB12FCA2062180980A +>93 D97 D<12FC121CA813F8EA1F06EA1C031480130114C0A4148013031400 +EA1B0EEA10F81217809614>II<137E130EA8EA07CEEA1C3EEA300E1270126012E0A412 +601270EA301EEA182E3807CFC012177F9614>IIII<12FC121CA8137CEA1D8EEA1E07121CAA38FF9FE01317809614>I<121812 +3CA212181200A5127C121CAC12FF081780960A>I<1203EA0780A2EA0300C7FCA5EA1F80 +1203AF1243EAE30012E7127C091D82960B>I<12FC121CA8EB3F80EB1C00131813205B13 +C0EA1FE0EA1CF0137013787F7FA238FF3FC01217809613>I<12FC121CB3A3EAFF800917 +80960A>I<38FC7C1F391D8E6380391E0781C0001C1301AA39FF9FE7F81D0E808D1E>IIIII< +EAFCF0EA1D38121EEA1C101300A9EAFF800D0E808D0E>II<1208A31218 +A21238EAFF80EA3800A71340A4EA1C80EA0F000A147F930E>III<38FCFE7C383838381410381C3C20A2134C380E4E40A2138638 +078780A2130300031300A2160E7F8D19>IIIII E /Fp 1 4 df<120CA2EACCC012EDEA +7F80EA0C00EA7F80EAEDC012CCEA0C00A20A0B7D8B10>3 D E /Fq +10 58 df<120FEA30C0EA6060A2EA4020EAC030A9EA4020EA6060A2EA30C0EA0F000C13 +7E9211>48 D<120C121C12EC120CAFEAFFC00A137D9211>I<121FEA60C01360EAF07013 +301260EA0070A2136013C012011380EA02005AEA08101210EA2020EA7FE012FF0C137E92 +11>II<136013E0A2EA016012021206120C1208121012 +20126012C0EAFFFCEA0060A5EA03FC0E137F9211>III<1240EA7FFC13F8EA401012801320EA00401380EA0100 +A25A12021206A2120EA512040E147E9311>II< +120FEA3080EA6040EA4060EAC0201330A31240EA6070EA30B0EA0F30120013201360EAE0 +401380EA4100123E0C137E9211>I E /Fr 76 124 df11 +D<137E3801C180EA0301380703C0120EEB018090C7FCA5B512C0EA0E01B0387F87F8151D +809C17>II< +90383F07E03901C09C18380380F0D80701133C000E13E00100131892C7FCA5B612FC390E +00E01CB03A7FC7FCFF80211D809C23>I34 D<126012F012F812681208A31210A212201240 +1280050C7C9C0C>39 D<13401380EA0100120212065AA25AA25AA212701260A312E0AC12 +60A312701230A27EA27EA27E12027EEA008013400A2A7D9E10>I<7E12407E7E12187EA2 +7EA27EA213801201A313C0AC1380A312031300A21206A25AA25A12105A5A5A0A2A7E9E10 +>I<1306ADB612E0A2D80006C7FCAD1B1C7E9720>43 D<126012F0A212701210A41220A2 +12401280040C7C830C>II<126012F0A2126004047C830C>I48 D<12035A123F12C71207B3A4EA0F80EAFFF80D1C7C9B +15>III<13 +0CA2131C133CA2135C13DC139CEA011C120312021204120C1208121012301220124012C0 +B512C038001C00A73801FFC0121C7F9B15>II<13F0EA030CEA0604EA0C0EEA181E1230130CEA7000A21260EAE3 +E0EAE430EAE818EAF00C130EEAE0061307A51260A2EA7006EA300E130CEA1818EA0C30EA +03E0101D7E9B15>I<1240387FFF801400A2EA4002485AA25B485AA25B1360134013C0A2 +12015BA21203A41207A66CC7FC111D7E9B15>III<126012F0A212601200AA126012F0 +A2126004127C910C>I<126012F0A212601200AA126012F0A212701210A41220A2124012 +80041A7C910C>I<1306A3130FA3EB1780A3EB23C0A3EB41E0A3EB80F0A200017FEB0078 +EBFFF83803007C0002133CA20006133E0004131EA2000C131F121E39FF80FFF01C1D7F9C +1F>65 DI<90381F8080EBE061380180 +1938070007000E13035A14015A00781300A2127000F01400A8007014801278A212386CEB +0100A26C13026C5B380180083800E030EB1FC0191E7E9C1E>IIII<90381F +8080EBE0613801801938070007000E13035A14015A00781300A2127000F01400A6ECFFF0 +EC0F80007013071278A212387EA27E6C130B380180113800E06090381F80001C1E7E9C21 +>I<39FFF3FFC0390F003C00ACEBFFFCEB003CAD39FFF3FFC01A1C7E9B1F>III76 DII< +EB3F80EBE0E03803803848487E000E7F487F003C148000381303007814C0A20070130100 +F014E0A8007014C000781303A200381480003C1307001C14006C130E6C5B6C6C5A3800E0 +E0EB3F801B1E7E9C20>II82 D<3807E080EA1C19EA3005EA7003EA600112E01300A36C13007E127CEA7FC0EA +3FF8EA1FFEEA07FFC61380130FEB07C0130313011280A300C01380A238E00300EAD002EA +CC0CEA83F8121E7E9C17>I<007FB512C038700F010060130000401440A200C014201280 +A300001400B1497E3803FFFC1B1C7F9B1E>I<39FFF07FC0390F000E001404B3A26C5B13 +8000035B12016C6C5AEB70C0011FC7FC1A1D7E9B1F>I<39FFE00FF0391F0003C06CEB01 +8015006D5A00071302A26C6C5AA36C6C5AA213F000005BA2EBF830EB7820A26D5AA36D5A +A2131F6DC7FCA21306A31C1D7F9B1F>I<3AFFE0FFE0FF3A1F001F003C001E011E13186C +011F1310A3D807801420EC2780A2D803C01440EC43C0A213E00001903881E080A33A00F1 +00F100A3017913FA017A137AA2013E137C013C133CA301181318A3281D7F9B2B>I<397F +F0FFC0390FC03E0038078018EA03C0EBE01000015BEBF06000001340EB7880137D013DC7 +FC7F131F7F80A2EB13C0EB23E01321EB41F0EBC0F8EB80783801007C48133C00027F0006 +131F001FEB3F8039FFC0FFF01C1C7F9B1F>I<12FEA212C0B3B312FEA207297C9E0C>91 +D +I<12FEA21206B3B312FEA20729809E0C>I97 +D<12FC121CAA137CEA1D86EA1E03381C018014C0130014E0A614C013011480381E0300EA +1906EA10F8131D7F9C17>II<133F1307AAEA03E7EA0C17EA180F487E12 +70126012E0A61260127012306C5AEA0C373807C7E0131D7E9C17>II<13F8EA018CEA071E1206EA0E0C1300A6EAFFE0EA0E00B0EA7FE00F1D809C +0D>II<12FC121CAA137C1387EA1D03001E1380121CAD38FF9FF0141D +7F9C17>I<1218123CA21218C7FCA712FC121CB0EAFF80091D7F9C0C>I<13C0EA01E0A2EA +00C01300A7EA0FE01200B3A21260EAF0C012F1EA6180EA3E000B25839C0D>I<12FC121C +AAEB3FC0EB0F00130C13085B5B5B13E0121DEA1E70EA1C781338133C131C7F130F148038 +FF9FE0131D7F9C16>I<12FC121CB3A9EAFF80091D7F9C0C>I<39FC7E07E0391C83883839 +1D019018001EEBE01C001C13C0AD3AFF8FF8FF8021127F9124>IIIIIII<1204A4120CA212 +1C123CEAFFE0EA1C00A91310A5120CEA0E20EA03C00C1A7F9910>I<38FC1F80EA1C03AD +1307120CEA0E1B3803E3F014127F9117>I<38FF07E0383C0380381C0100A2EA0E02A26C +5AA3EA0388A213D8EA01D0A2EA00E0A3134013127F9116>I<39FF3FCFE0393C0F038038 +1C07011500130B000E1382A21311000713C4A213203803A0E8A2EBC06800011370A2EB80 +30000013201B127F911E>I<387F8FF0380F03801400EA0702EA0384EA01C813D8EA00F0 +1370137813F8139CEA010E1202EA060738040380381E07C038FF0FF81512809116>I<38 +FF07E0383C0380381C0100A2EA0E02A26C5AA3EA0388A213D8EA01D0A2EA00E0A31340A2 +5BA212F000F1C7FC12F31266123C131A7F9116>I +II E /Fs 40 122 df<49B4FC011F13C090387F81E0EBFC013901 +F807F01203EA07F0A4EC01C091C8FCA3EC3FF8B6FCA33807F003B3A33A7FFF3FFF80A321 +2A7FA925>12 D<130E131E137EEA07FE12FFA212F81200B3AB387FFFFEA317277BA622> +49 DII<140E141E143E147E14 +FEA213011303EB077E130EA2131C1338137013E0A2EA01C0EA0380EA0700120EA25A5A5A +5AB612F8A3C7EAFE00A890387FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C +5C14C091C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215 +E0A21218127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C61380 +1B277DA622>II<1238123E003FB512F0A34814E015C0158015003870000EA25C485B5C5CEA +00015C495A130791C7FC5B5B131E133EA2137E137CA213FCA41201A76C5A13701C297CA8 +22>I65 D<91387FE003903907FFFC07 +011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F4848147F4848143F4848141F485A16 +0F485A1607127FA290C9FC5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C +14786CB4EB01F090397FF007C0011FB512800107EBFE009038007FF028297CA831>67 +DIII<91387FE003903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FF +D801FC7F484880484880484880485A82485A82127FA290CAFC5AA892B512F87E7F030013 +00123FA26C7EA26C7E6C7E6C7E6C7E6CB45B90387FF007011FB5129F0107EBFE0F903900 +7FF0032D297CA835>I73 +D82 D<01FF13C0000313E1000F13F9381F80FF383F003F +003E130F481307A200FC1303A214017EA26C90C7FC13C0EA7FFCEBFFE06C13F86C13FE80 +000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E01303A46C14E0A26C13076C +14C0B4EB0F80EBE01F00E3B5120000E113FC38C01FF01C297CA825>I87 +D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA +0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F3803F8031E1B7E9A21 +>97 DIIIII<90387F80F03901FFE3 +F83907C0FE1C390F807C7C381F003E151048EB3F00A66C133EA26C6C5A6C6C5A3805FFE0 +380C7F8048C8FC121CA2121E381FFFF814FF6C14C06C14E06C14F0120F383E000748EB01 +F8481300A4007CEB01F0A2003FEB07E0390FC01F806CB5120038007FF01E287E9A22>I< +EAFFE0A3120FAC147E9038E1FF809038E30FC001E413E0EBE80701F813F013F0A213E0B0 +39FFFE3FFFA3202A7DA925>I<1207EA0F80EA1FC0EA3FE0A3EA1FC0EA0F80EA0700C7FC +A7EAFFE0A3120FB3A3EAFFFEA30F2B7EAA12>I107 DI<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0C1F8D80FC49038F101FC9039 +C803F20001D801FE7F01D05BA201E05BB03CFFFE3FFF8FFFE0A3331B7D9A38>I<38FFC0 +7E9038C1FF809038C30FC0D80FC413E0EBC80701D813F013D0A213E0B039FFFE3FFFA320 +1B7D9A25>II<38FFE1FE9038E7FF809038FE0FE0390FF803F09038F001F8 +01E013FC140015FEA2157FA8157E15FEA215FC140101F013F89038F803F09038FC0FE090 +38EFFF809038E1FC0001E0C7FCA9EAFFFEA320277E9A25>I<38FFC3E0EBC7F8EBCC7C38 +0FD8FE13D0A213F0EBE07C1400B0B5FCA3171B7E9A1B>114 D<3803FE30380FFFF0EA3E +03EA7800127000F01370A27E00FE1300EAFFE06CB4FC14C06C13E06C13F0000713F8C6FC +EB07FC130000E0137C143C7E14387E6C137038FF01E038E7FFC000C11300161B7E9A1B> +I<1370A413F0A312011203A21207381FFFE0B5FCA23807F000AD1470A7000313E03801F8 +C0EA00FFEB3F0014267FA51A>I<39FFE07FF0A3000F1307B2140FA2000713173903F067 +FF3801FFC738007F87201B7D9A25>I<3BFFFC7FFC1FFCA33B0FE00FE001C02607F007EB +0380A201F8EBF0070003160015F82601FC0F130EA29039FE1FFC1E0000011C131C15FE90 +39FF387E3C017F1438EC787F6D486C5AA29138E01FF0011F5CA26D486C5AA36D486C5AA2 +2E1B7F9A31>119 D<39FFFC1FFEA33907F00780D803F813006C6C5AEBFE1E00005BEB7F +78EB3FF85C6D5A130F6D7E80130F497EEB3DFEEB38FFEB787F9038F03F80D801E013C039 +03C01FE0EB800F39FFF03FFFA3201B7F9A23>I<39FFFE07FFA33907F000E0A2EBF80100 +0314C0A23901FC0380A2EBFE07000014006D5AEB7F0EA2EB3F9CA214FC6D5AA26D5AA213 +075CA26D5AA25CA21307003890C7FC127CEAFE0EA25B5BEA7C70EA3FE0EA0F8020277F9A +23>I E /Ft 14 123 df97 D99 D +II<13F338038B8038060700120E120C121CEA380EA4EA301CA3EA183C5BEA +07B8EA0038A25B1260EAE0E0EAC1C0007FC7FC11177E8F12>103 +D<1203120712061200A61238124C124E128E129CA2121C1238A212701272A212E212E412 +64123808197C980C>105 D<121F1207A3120EA4121CA41238A41270A412E4A412E81230 +081A7D990A>108 D110 DII115 D<1206120EA45AA2EAFFC0EA1C005AA45AA412E1A312 +E212E412380A177C960D>II122 +D E /Fu 54 124 df<13FCEA0182EA0703EA0607EA0E0290C7FCA5B5FCEA0E07AE387F0F +E0131A809915>12 D<90387E1F803901C17040390703C0600006EB80E0000E14401500A5 +B612E0380E0380AE397F8FE3FC1E1A809920>14 D<1380EA010012025A120C120812185A +A35AA412E0AA1260A47EA37E1208120C12047E7EEA008009267D9B0F>40 +D<7E12407E7E12181208120C7EA37EA41380AA1300A41206A35A1208121812105A5A5A09 +267E9B0F>I<126012F0A212701210A31220A212401280040B7D830B>44 +DI<126012F0A2126004047D830B>I50 DI<1330A2137013F0A2EA0170120312021204120C12081210123012 +20124012C0B5FCEA0070A6EA07FF10187F9713>I<1240EA7FFE13FCA2EA4008EA8010A2 +1320EA0040A213801201A213005AA45AA612020F197E9813>55 D<126012F0A212601200 +A8126012F0A2126004107D8F0B>58 D<126012F0A212601200A8126012F0A212701210A3 +1220A21240128004177D8F0B>I<130CA3131EA2133F1327A2EB4380A3EB81C0A348C67E +A213FF38020070A20006137800041338A2487FA2001C131EB4EBFFC01A1A7F991D>65 +D67 +DII71 +D<38FFE7FF380E0070AB380FFFF0380E0070AC38FFE7FF181A7E991D>II<39FFE07F80390E001E00141814105C5C5C49C7FC13025B5B +131C132E134E1387380F0380120E6D7E6D7EA21470A28080143E39FFE0FF80191A7E991E +>75 DI80 D82 DI<007FB5FC38701C0700401301A200C01480008013 +00A300001400B13803FFE0191A7F991C>I<3AFF83FF0FF03A3C007801C0001CEC0080A2 +6CEC0100A2149C6C1402A2EB010EA2D803815BEB8207A2D801C25B9038C40388A2D800E4 +1390A29038E801D0017813E0A2EB7000A201305B01201340241A7F9927>87 +D<12FEA212C0B3AF12FEA207257D9B0B>91 D<12FEA21206B3AF12FEA20725809B0B>93 +D97 D<12FC121CA913F8EA1F0EEA1E07381C0380130114C0A6EB038014 +00EA1E07EA1B0CEA10F0121A7F9915>II<137E130EA9EA03CEEA0C3EEA380E12301270 +12E0A612601270EA381EEA1C2E3807CFC0121A7F9915>IIII<12FC121CA913F8EA1D0CEA1E0EA2121CAB38FF9F +C0121A7F9915>I<1218123CA21218C7FCA612FC121CAEEAFF80091A80990A>II<12FC121C +A9EB3F80EB1E00131813105B5BEA1DC0EA1FE0121C1370137813387F131E131F38FF3FC0 +121A7F9914>I<12FC121CB3A6EAFF80091A80990A>I<38FC7C1F391D8E6380391E0781C0 +A2001C1301AB39FF9FE7F81D107F8F20>IIII114 DI<1204A3120CA2121C123CEAFFC0EA +1C00A81320A5EA0E40EA03800B177F960F>II<38FF1F80383C0600EA1C04A2EA1E0CEA0E08A26C5AA21390EA03A0A2EA01 +C0A36C5A11107F8F14>I<39FF3F9F80393C0E070000381306381C16041317001E130C38 +0E23081488000F13983807419014D03803C1E01380A200015BEB004019107F8F1C>I<38 +FF3F80383C1C00EA1C18EA0E106C5A13606C5A12017F1203EA0270487E1208EA181CEA38 +1E38FC3FC012107F8F14>I<38FF1F80383C0600EA1C04A2EA1E0CEA0E08A26C5AA21390 +EA03A0A2EA01C0A36C5AA248C7FCA212E112E212E4127811177F8F14>I123 D E /Fv 16 118 df<1303497EA3497EA2EB1BE0A3EB31F0A2EB60F8A2EBE0 +FCEBC07CA248487EEBFFFE487FEB001FA20006EB0F80A2000E14C039FFC07FFCA21E1A7F +9921>65 D76 +D80 D97 D<12FEA2121EA7137F381FC3C0EB00E0001E13F01478 +A2147CA51478A214F0001F13E0381D83C038187F00161A7F9919>II< +EA03F0EA0E1C487EEA3C071278148012F8A2B5FC00F8C7FCA21278A2383C0180381C0300 +EA0E06EA03FC11117F9014>101 D<3807E3C0381C3CE0EA381C38781EC01400A4EA381C +6C5AEA27E00020C7FCA21230EA3FFE381FFF8014C0EA700338E000E0A4387001C0383C07 +803807FC0013197F9016>103 D<123C127EA4123CC7FCA4127EA2121EADEAFF80A2091B +7F9A0D>105 D<39FE1F01F0903863C63C391E81C81C391F01F01EA2001E13E0AA3AFFCF +FCFFC0A222117F9025>109 DII114 DI<1206A4120EA2121EEA3FF0 +12FFEA1E00A81318A5EA0F30EA03E00D187F9711>I<38FE0FE0A2EA1E01AB1303A2380F +05FCEA03F916117F9019>I E /Fw 1 4 df<1202A3EAC218EAF278EA3AE0EA0F80A2EA3A +E0EAF278EAC218EA0200A30D0E7E8E12>3 D E /Fx 34 122 df<127012F812FCA21274 +1204A41208A21210A212201240060F7C840E>44 D<127012F8A3127005057C840E>46 +D<13801203120F12F31203B3A9EA07C0EAFFFE0F217CA018>49 D<13021306130EA2131E +A2132E134EA2138EA2EA010E1202A21204A212081210A21220A212401280B512F838000E +00A7131F3801FFF015217FA018>52 D<00101380381E0700EA1FFF5B13F8EA13E00010C7 +FCA613F8EA130EEA1407381803801210380001C0A214E0A4127012F0A200E013C01280EA +4003148038200700EA1006EA0C1CEA03F013227EA018>I57 +D<497EA3497EA3EB05E0A2EB0DF01308A2497E1478A2497EA3497EA3497EA290B5FC3901 +000780A24814C000021303A24814E01401A2000CEB00F0A2003EEB01F839FF800FFF2023 +7EA225>65 DI<903807E0109038381830EBE0063901C00170390380 +00F048C7FC000E1470121E001C1430123CA2007C14101278A200F81400A812781510127C +123CA2001C1420121E000E14407E6C6C13803901C001003800E002EB381CEB07E01C247D +A223>II<9038 +07F00890383C0C18EBE0023901C001B839038000F848C71278481438121E15185AA2007C +14081278A200F81400A7EC1FFF0078EB00F81578127C123CA27EA27E7E6C6C13B86C7E39 +00E0031890383C0C08903807F00020247DA226>71 D80 D<3803F020380C0C60EA1802383001E0EA70000060136012E0A21420A36C1300A212 +78127FEA3FF0EA1FFE6C7E0003138038003FC0EB07E01301EB00F0A214707EA46C1360A2 +6C13C07E38C8018038C60700EA81FC14247DA21B>83 D<39FFFC07FF390FC000F86C4813 +701520B3A5000314407FA2000114806C7E9038600100EB3006EB1C08EB03F020237EA125 +>85 D<3BFFF03FFC03FE3B1F8007E000F86C486C4813701720A26C6C6C6C1340A32703C0 +02F01380A33B01E004780100A33A00F0083C02A39039F8183E06903978101E04A2137C90 +393C200F08A390391E400790A390390F8003E0A36D486C5AA36D5C010213002F237FA132 +>87 D97 D<120E12FE121E120EAB131FEB +61C0EB8060380F0030000E1338143C141C141EA7141C143C1438000F1370380C8060EB41 +C038083F0017237FA21B>II<14E0130F130113 +00ABEA01F8EA0704EA0C02EA1C01EA38001278127012F0A7127012781238EA1801EA0C02 +38070CF03801F0FE17237EA21B>II<133C13C6EA018F1203130FEA0700A9EAFFF8EA0700B21380EA7FF8102380A20F>I< +121C123EA3121CC7FCA8120E12FE121E120EB1EAFFC00A227FA10E>105 +D<120E12FE121E120EB3ADEAFFE00B237FA20E>108 D<390E1FC07F3AFE60E183803A1E +807201C03A0F003C00E0A2000E1338AF3AFFE3FF8FFE27157F942A>I<380E1F8038FE60 +C0381E80E0380F0070A2120EAF38FFE7FF18157F941B>III< +EA0E3CEAFE46EA1E8FEA0F0F13061300120EAD120FEAFFF010157F9413>114 +DI<1202A41206A3120E121E12 +3EEAFFF8EA0E00AB1304A6EA07081203EA01F00E1F7F9E13>I<000E137038FE07F0EA1E +00000E1370AD14F0A238060170380382783800FC7F18157F941B>I<38FFC1FE381E0078 +000E13301420A26C1340A238038080A33801C100A2EA00E2A31374A21338A3131017157F +941A>I<39FF8FF8FF391E01E03C001CEBC018120EECE010A239070260201470A2390384 +30401438A23901C81880141CA23900F00D00140FA2EB6006A320157F9423>I<38FFC1FE +381E0078000E13301420A26C1340A238038080A33801C100A2EA00E2A31374A21338A313 +10A25BA35B12F05B12F10043C7FC123C171F7F941A>121 D E /Fy +20 124 df50 D<1403A34A7EA24A7EA3EC17E01413A2EC23F01421A2EC40F8A3EC807CA2 +0101137EEC003EA20102133F81A2496D7EA3496D7EA2011880011FB5FCA29039200003F0 +1501A249801500A249147CA348C87EA248153F825AD81F80EC3F80D8FFE0903803FFFCA2 +2E327EB132>65 D<91383FE001903901FFF803903807F01E90391F800307013EC7128701 +78144F49142F4848141F4848140F485A000F150790C8FC481503121E123E003C1501127C +A30078150012F8AB1278127C1601A2123C123E121E001F15027E6D1406000715046C6C14 +086C7E6C6C141001781420013E14C090391F800380903907F00F00903801FFFC9038003F +E028337CB130>67 D69 D71 D77 D82 D<90387F80203801FFE03907C07860380F001C001EEB +06E048130300381301007813001270156012F0A21520A37E1500127C127E7E13C0EA1FF8 +6CB47E6C13F86C7FC613FF010F1380010013C0EC1FE01407EC03F01401140015F8A26C14 +78A57E15706C14F015E07E6CEB01C000ECEB038000C7EB070038C1F01E38807FFCEB0FF0 +1D337CB125>I86 D<13FE380303C0380C00E00010137080003C133C003E13 +1C141EA21208C7FCA3EB0FFEEBFC1EEA03E0EA0F80EA1F00123E123C127C481404A3143E +A21278007C135E6CEB8F08390F0307F03903FC03E01E1F7D9E21>97 +D99 +D101 D<120FEA1F80A4EA0F00C7FCABEA078012FFA2120F1207B3A6 +EA0FC0EAFFF8A20D307EAF12>105 D108 D<380780FE39FF83078090388C03C0390F9001E0EA07A06E7E13C0A2 +5BB3A2486C487E3AFFFC1FFF80A2211F7E9E25>110 D +I<380783E038FF8C18EB907C120FEA07A0EBC0381400A35BB3487EEAFFFEA2161F7E9E19 +>114 D<3801FC10380E0330381800F048137048133012E01410A37E6C1300127EEA3FF0 +6CB4FC6C13C0000313E038003FF0EB01F813006C133CA2141C7EA27E14186C1338143000 +CC136038C301C03880FE00161F7E9E1A>I<1340A513C0A31201A212031207120F381FFF +E0B5FC3803C000B01410A80001132013E000001340EB78C0EB1F00142C7FAB19>I123 D E end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 300dpi +TeXDict begin + +%%EndSetup +%%Page: 1 1 +1 0 bop 284 369 a Fy(RE2C)21 b({)h(A)f(More)h(V)-6 b(ersatile)23 +b(Scanner)e(Generator)472 490 y Fx(P)o(eter)15 b(Bum)o(bulis)209 +b(Donald)17 b(D.)f(Co)o(w)o(an)272 548 y(Computer)g(Science)e +(Departmen)o(t)h(and)i(Computer)e(Systems)g(Group)692 +606 y(Univ)o(ersit)o(y)e(of)k(W)l(aterlo)q(o)1175 588 +y Fw(\003)782 704 y Fx(April)e(15,)i(1994)849 895 y Fv(Abstract)120 +960 y Fu(It)f(is)g(usually)j(claimed)f(that)e(lexical)j(analysis)f +(routines)g(are)e(still)i(co)q(ded)f(b)o(y)f(hand,)i(despite)g(the)e +(widespread)62 1005 y(a)o(v)n(ailabil)q(i)q(t)o(y)h(of)d(scanner)i +(generators,)f(for)f(e\016ciency)i(reasons.)23 b(While)16 +b(e\016ciency)g(is)f(a)f(consideration)q(,)j(there)e(exist)62 +1051 y(freely)k(a)o(v)n(ailable)j(scanner)d(generators)g(suc)o(h)g(as)g +(GLA)f([7])g(that)g(can)h(generate)g(scanners)h(that)e(are)h(faster)f +(than)62 1097 y(most)g(hand-co)q(ded)h(ones.)30 b(Ho)o(w)o(ev)o(er,)18 +b(most)g(generated)g(scanners)g(are)g(tailored)h(for)e(a)g(particular)j +(en)o(vironmen)o(t,)62 1142 y(and)c(retargetting)h(these)e(scanners)i +(to)e(other)h(en)o(vironmen)o(ts,)h(if)f(p)q(ossible,)h(is)f(usually)i +(complex)f(enough)f(to)f(mak)o(e)62 1188 y(a)h(hand-co)q(ded)h(scanner) +f(more)g(app)q(ealing.)26 b(In)16 b(this)g(pap)q(er)g(w)o(e)f(describ)q +(e)i(RE2C,)e(a)g(scanner)i(generator)f(that)f(not)62 +1234 y(only)e(generates)f(scanners)h(whic)o(h)f(are)g(faster)f(\(and)h +(usually)i(smaller\))f(than)f(those)g(pro)q(duced)h(b)o(y)f(an)o(y)g +(other)g(scanner)62 1279 y(generator)i(kno)o(wn)g(to)f(the)g(authors,)g +(includin)q(g)j(GLA,)c(but)i(also)g(adapt)f(easily)i(to)e(an)o(y)h(en)o +(vironmen)o(t.)62 1371 y(Categories)19 b(and)f(Sub)r(ject)g +(Descriptors:)27 b(D.3.2)17 b([)p Fv(Programming)j(Languages)p +Fu(]:)25 b(Language)19 b(Classi\014cations)i({)62 1416 +y Ft(sp)n(e)n(cialize)n(d)11 b(applic)n(atio)o(n)g(languages)o +Fu(;)f(D.3.4)j([)p Fv(Programming)h(Languages)p Fu(]:)j(Pro)q(cessors) +62 1508 y(General)e(T)m(erms:)h(Algorithms,)e(Languages,)h(P)o +(erformance)62 1599 y(Additional)h(Key)d(W)m(ords)h(and)g(Phrases:)j +(Lexical)e(analysis,)g(scanner)f(generator)-42 1736 y +Fs(1)67 b(In)n(tro)r(duction)-42 1827 y Fr(Lexical)14 +b(analysis)g(routines)h(are)g(still)f(often)g(co)q(ded)i(b)o(y)e(hand)g +(despite)i(the)f(widespread)g(a)o(v)n(ailabilit)o(y)c(of)j(scanner)i +(gener-)-42 1877 y(ators.)k(F)m(or)14 b(example,)e(while)i(most)f(Unix) +h(systems)g(ha)o(v)o(e)g(a)g(scanner)i(generator)f(installed)f(\(t)o +(ypically)f(LEX)h([15)o(])g(or)g(\015ex)-42 1927 y([16]\),)d(few)i +(Unix)f(applications)f(use)i(a)f(mec)o(hanically)e(generated)k +(scanner.)19 b(One)13 b(commonly)c(cited)k(reason)g(for)e(not)i(using) +-42 1977 y(LEX-generated)k(scanners)f(is)f(p)q(erformance:)20 +b(they)15 b(can)g(b)q(e)g(10)g(times)f(slo)o(w)o(er)g(than)h(equiv)n +(alen)o(t)f(hand-co)q(ded)i(scanners)-42 2026 y([13].)h(As)d(a)g +(result,)g(there)h(has)f(b)q(een)h(considerable)f(researc)o(h)i(in)o +(to)d(impro)o(ving)e(the)j(p)q(erformance)g(of)f(mec)o(hanically)e +(gen-)-42 2076 y(erated)17 b(scanners)f([16)o(,)f(7,)f(9].)21 +b(GLA)15 b([7)o(],)g(one)g(suc)o(h)h(scanner)g(generator,)g(can)f(pro)q +(duce)h(scanners)h(that)e(are)h(faster)f(than)-42 2126 +y(most)h(hand-co)q(ded)h(scanners.)29 b(Ho)o(w)o(ev)o(er,)17 +b(the)h(use)f(of)f(hand-co)q(ded)i(scanners)g(is)f(still)f(prev)n(alen) +o(t.)27 b(One)17 b(p)q(ossibilit)o(y)f(is)-42 2176 y(that)e(this)g(is)g +(due)h(to)e(the)i(di\016cult)o(y)e(of)g(adapting)g(the)h(generated)i +(scanners)f(to)f(sp)q(eci\014c)h(applications.)21 2226 +y(Most)g(scanner)g(generators)h(are)f(tailored)f(to)g(a)h(particular)f +(en)o(vironmen)o(t.)19 b(In)14 b(fact,)g(the)i(trend)f(in)f(recen)o(t)i +(y)o(ears)f(has)-42 2276 y(b)q(een)i(to)e(in)o(tegrate)g(scanner)i +(generators)f(with)f(compiler)f(to)q(olkits.)21 b(F)m(or)15 +b(example,)f(GLA)h(is)g(part)g(of)g(the)g(Eli)g(compiler)-42 +2325 y(construction)k(system)f([8)o(],)g(and)g(Rex)f([9])g(is)h(part)g +(of)f(the)h(GMD)f(T)m(o)q(olb)q(o)o(x)g(for)g(Compiler)f(Construction) +1688 2310 y Fq(1)1707 2325 y Fr(.)30 b(Scanners)p -42 +2362 780 2 v 4 2389 a Fp(\003)22 2401 y Fo(P)o(ermission)9 +b(to)j(cop)o(y)e(without)h(fee)g(all)g(or)g(part)g(of)g(this)g +(material)e(is)j(gran)o(ted)d(pro)o(vided)h(that)g(the)h(copies)f(are)h +(not)g(made)f(or)i(distributed)-42 2440 y(for)g(direct)e(commercial)f +(adv)n(an)o(tage,)g(the)i(A)o(CM)j(cop)o(yrigh)o(t)9 +b(notice)i(and)g(the)g(title)g(of)h(the)f(publication)e(and)i(its)g +(date)g(app)q(ear,)f(and)h(notice)g(is)-42 2480 y(giv)o(en)g(that)g +(cop)o(ying)f(is)i(b)o(y)f(p)q(ermission)e(of)j(the)f(Asso)q(ciation)f +(for)h(Computing)f(Mac)o(hinery)m(.)15 b(T)m(o)d(cop)o(y)f(otherwise,)f +(or)i(to)f(republish,)f(requires)-42 2519 y(a)k(fee)f(and/or)f(sp)q +(eci\014c)g(p)q(ermission.)19 b(Cop)o(yrigh)o(t)12 b(1994)h(b)o(y)g +(the)g(Asso)q(ciation)f(for)h(Computing)e(Mac)o(hinery)m(,)h(Inc.)22 +b(T)m(o)14 b(app)q(ear)e(in)h(LOPLAS)-42 2558 y(2\(1{4\).)5 +2586 y Fn(1)22 2598 y Fo(Also)f(kno)o(wn)e(as)i(Co)q(c)o(ktail)e +(\(Compiler-Compi)o(ler-)o(T)m(o)q(olb)q(o)n(x)f(Karlsruhe\).)923 +2748 y Fr(1)p eop +%%Page: 2 2 +2 1 bop -42 195 a Fr(generated)21 b(b)o(y)d(these)i(to)q(ols)f(assume)f +(the)i(existence)g(of)e(a)h(library)f(of)g(supp)q(ort)h(mo)q(dules)f +(for)h(error)g(handling,)g(input)-42 245 y(bu\013ering,)c(sym)o(b)q(ol) +d(table)i(managemen)o(t,)d(and)j(similar)e(functions.)18 +b(While)c(these)h(supp)q(ort)g(mo)q(dules)e(simplify)f(the)i(task)-42 +295 y(of)c(implemen)o(ting)c(a)k(compiler)f(or)h(in)o(terpreter,)i +(they)e(mak)o(e)f(adaptation)g(to)h(other)g(purp)q(oses)i(more)d +(di\016cult.)16 b(Adaptation)-42 345 y(to)e(other)h(en)o(vironmen)o(ts) +e(is)h(also)f(made)g(more)g(di\016cult)g(b)q(ecause)j(often)e +(assumptions)f(are)i(made)d(ab)q(out)i(the)h(input)f(and)-42 +394 y(restrictions)j(are)e(placed)g(on)g(tok)o(ens)g(in)g(order)g(to)g +(ac)o(hiev)o(e)g(b)q(etter)i(p)q(erformance.)k(RE2C)14 +b(go)q(es)i(to)f(the)g(other)h(extreme:)-42 444 y(it)e(concen)o(trates) +i(solely)d(on)h(generating)g(co)q(de)h(for)e(matc)o(hing)f(regular)i +(expressions.)21 494 y(RE2C)f(is)h(successful)h(at)f(its)g(task:)k(not) +13 b(only)g(do)q(es)i(it)e(pro)q(duce)i(scanners)h(whic)o(h)e(are)g +(faster)g(than)g(those)g(created)i(b)o(y)-42 544 y(other)g(scanner)h +(generators)f(but,)f(surprisingly)m(,)f(they)i(are)g(usually)e(smaller) +f(as)j(w)o(ell.)21 b(F)m(urther,)15 b(RE2C)g(do)q(es)h(not)f(mak)o(e) +-42 594 y(an)o(y)i(assumptions)e(ab)q(out)h(the)h(input)g(or)f(place)h +(an)o(y)f(restrictions)i(on)e(tok)o(ens.)26 b(T)m(o)16 +b(a)g(large)g(degree,)i(the)g(p)q(erformance)-42 643 +y(and)d(\015exibilit)o(y)d(of)i(RE2C-generated)h(scanners)h(is)f(due)f +(to)h(a)f(no)o(v)o(el)f(metho)q(d)h(for)g(determining)f(when)i(to)f +(re\014ll)g(a)g(bu\013er)-42 693 y(whic)o(h)g(a)o(v)o(oids)f(the)i +(complications)c(in)o(tro)q(duced)k(b)o(y)f(the)g(sen)o(tinel)h(metho)q +(d)e([1)o(].)21 743 y(The)e(follo)o(wing)d(sections)j(of)f(this)h(pap)q +(er)g(describ)q(e)i(RE2C)d(scanner)i(sp)q(eci\014cations,)f(discuss)h +(ho)o(w)e(these)i(sp)q(eci\014cations)-42 793 y(are)21 +b(con)o(v)o(erted)g(in)o(to)f(scanners,)j(and)d(giv)o(e)f(p)q +(erformance)h(results)h(ac)o(hiev)o(ed)g(b)o(y)f(our)g(implemen)o +(tatio)o(n)d(\(including)j(a)-42 843 y(comparison)13 +b(with)g(GLA\).)-42 980 y Fs(2)67 b(Scanner)24 b(Sp)r(eci\014cations) +-42 1071 y Fr(An)14 b(RE2C)g(source)h(\014le)f(consists)h(of)e(C[14)o +(])g(or)h(C++[4])842 1056 y Fq(2)874 1071 y Fr(co)q(de)g(in)o(terlea)o +(v)o(ed)g(with)g(commen)o(ts)e(of)h(the)i(form)d Fm(/*!re2c)20 +b Fl(:)7 b(:)g(:)-42 1121 y Fm(*/)15 b Fr(con)o(taining)f(scanner)i(sp) +q(eci\014cations.)23 b(These)16 b(sp)q(eci\014cations)g(are)g(replaced) +g(with)e(generated)j(co)q(de)e(that)g(is)g(in)o(v)o(ok)o(ed)-42 +1170 y(simply)d(b)o(y)i(\\falling)d(in)o(to")i(the)i(commen)o(ts)d(as)i +(illustrated)g(in)f(Figure)h(1)g(and)f(in)h(App)q(endix)g(A)1481 +1155 y Fq(3)1500 1170 y Fr(.)469 1254 y Fm(#define)20 +b(YYCURSOR)42 b(p)469 1304 y(unsigned)20 b(char)h(*scan)p +887 1304 14 2 v 14 w(uint\(unsigned)e(char)i(*p\))p Fk(f)469 +1353 y Fm(/*!re2c)556 1403 y([0-9]+)195 b Fk(f)p Fm(return)20 +b(p;)p Fk(g)556 1453 y Fm([\\)o(000-\\)o(377])87 b Fk(f)p +Fm(return)20 b(NULL;)p Fk(g)469 1503 y Fm(*/)469 1553 +y Fk(g)681 1634 y Fr(Figure)14 b(1:)k(A)c(simple)f(scanner.)21 +1733 y(A)i(scanner)h(sp)q(eci\014cation)f(tak)o(es)g(the)g(form)e(of)h +(a)h(list)f(of)g(rules,)h(eac)o(h)g(rule)g(consisting)g(of)f(a)g +(regular)h(expression)h([10)o(])-42 1783 y(and)g(an)g(action)f +(expressed)k(in)c(executable)i(co)q(de.)25 b(Figure)16 +b(2)g(illustrates)g(a)g(trivial)e(RE2C)h(scanner)j(sp)q(eci\014cation)e +(that)-42 1833 y(will)c(b)q(e)h(used)h(as)f(an)f(example)g(throughout)g +(this)h(pap)q(er.)36 b(Eac)o(h)14 b(call)d(to)i(the)g(co)q(de)h +(generated)g(from)d(a)h(sp)q(eci\014cation)i(will)416 +1926 y Fm("print")201 b Fk(f)22 b Fm(return)e(PRINT;)49 +b(/*)21 b(rule)g(5)h(*/)f Fk(g)416 1975 y Fm([a-z])o(+)224 +b Fk(f)22 b Fm(return)e(ID;)115 b(/*)21 b(rule)g(4)h(*/)f +Fk(g)416 2025 y Fm([0-9])o(+)224 b Fk(f)22 b Fm(return)e(DEC;)93 +b(/*)21 b(rule)g(3)h(*/)f Fk(g)416 2075 y Fm("0x")g([0-9a-f])n(+)50 +b Fk(f)22 b Fm(return)e(HEX;)93 b(/*)21 b(rule)g(2)h(*/)f +Fk(g)416 2125 y Fm([\\000-\\)o(377])114 b Fk(f)22 b Fm(return)e(ERR;)93 +b(/*)21 b(rule)g(1)h(*/)f Fk(g)108 2214 y Fr(Figure)15 +b(2:)20 b(Sample)13 b(sp)q(eci\014cation.)22 b Fm([)p +Fl(a)p Fm(-)p Fl(b)p Fm(])14 b Fr(matc)o(hes)h(an)o(y)f(c)o(haracter)i +(b)q(et)o(w)o(een)g Fl(a)f Fr(and)g Fl(b)p Fr(,)f(inclusiv)o(ely)m(.) +108 2264 y(The)i(last)f(rule,)g(for)g(example,)e(will)h(matc)o(h)g(an)o +(y)g(eigh)o(t)h(bit)g(c)o(haracter.)23 b(Rules)15 b(are)g(listed)h(in)e +(order)i(of)108 2314 y(precedence)q(.)-42 2414 y(\014rst)d(determine)g +(the)f(longest)h(p)q(ossible)f(pre\014x)h(of)f(the)h(remaining)d(input) +i(that)g(matc)o(hes)g(one)g(of)g(the)h(regular)f(expressions)-42 +2463 y(and)i(will)f(then)h(execute)i(the)e(action)g(in)f(the)i(\014rst) +g(applicable)e(rule.)p -42 2498 780 2 v 5 2525 a Fn(2)22 +2537 y Fo(Retargetting)8 b(RE2C)k(to)f(a)h(di\013eren)o(t)d(language)g +(is)i(straigh)o(tforw)o(ard.)5 2564 y Fn(3)22 2576 y +Fo(RE2C-generated)e(scanners)g(require)h(no)h(additional)d(supp)q(ort)i +(co)q(de.)923 2748 y Fr(2)p eop +%%Page: 3 3 +3 2 bop 138 1062 a @beginspecial 53 @llx 268 @lly 435 +@urx 486 @ury 3820 @rwi @setspecial +%%BeginDocument: scanner.eps + + + + + + + + + + + +/AutoFlatness false def + +% -------------- POSTSCRIPT PROLOG FOR CORELDRAW 3.X ------ + +% Copyright 1992 Corel Corporation. All rights reserved. + +/wCorelDict 300 dict def wCorelDict begin/bd{bind def}bind def + +/ld{load def}bd/xd{exch def}bd/_ null def + +/$c 0 def/$m 0 def/$y 0 def/$k 0 def/$t 1 def + +/$n _ def/$o 0 def/$fil 0 def/$bkg false def + +/$C 0 def/$M 0 def/$Y 0 def/$K 0 def/$T 1 def + +/$N _ def/$O 0 def/$PF false def/$ctm matrix currentmatrix def + +/$ptm matrix def/$ttm matrix def/$stm matrix def + +/$fst 128 def/$pad 0 def/$rox 0 def/$roy 0 def + +currentscreen/@dsp xd/$dsp/@dsp def/$dsa xd + +/$dsf xd/$sdf false def/$SDF false def/$Scra 0.0 def + +/$sv 0 def/@cp/closepath ld/@gs/gsave ld/@gr/grestore ld + +/@np/newpath ld/@sv{/$sv save def}bd/@rs{$sv restore}bd + +/@ss{exch $Scra add exch load setscreen}bd + +AutoFlatness{/$cpx ([Error: PathTooComplex; OffendingCommand: AnyPaintingOperator]\n) def + +/@err1{$cpx print flush newpath}bd/@ifl{dup currentflat exch sub 10 gt + +{@err1 exit}{currentflat 2 add setflat}ifelse}bd + +/@fill/fill ld/fill{currentflat{{@fill}stopped{@ifl}{exit}ifelse + +}bind loop setflat}bd/@eofill/eofill ld/eofill{currentflat{{@eofill} + +stopped{@ifl}{exit}ifelse}bind loop setflat}bd + +/@clip/clip ld/clip{currentflat{{@clip}stopped{initclip @ifl}{exit + +}ifelse}bind loop setflat}bd/@eoclip/eoclip ld + +/eoclip{currentflat{{@eoclip}stopped{initclip @ifl}{exit}ifelse + +}bind loop setflat}bd/@stroke/stroke ld/stroke{currentflat{{@stroke} + +stopped{@ifl}{exit}ifelse}bind loop setflat}bd}if + +/InRange{3 -1 roll 2 copy le{pop}{exch pop}ifelse + +2 copy ge{pop}{exch pop}ifelse}bd/wDstChck{2 1 roll dup 3 -1 roll + +eq{1 add}if}bd/@dot{dup mul exch dup mul add 1 exch sub 2 div}bd + +/@lin{exch pop abs 1 exch sub}bd/@MN{2 copy le{pop}{exch pop}ifelse}bd + +/setcmykcolor where{pop}{/setcmykcolor{4 1 roll + +3{3 index add 1 @MN 1 exch sub 3 1 roll}repeat + +setrgbcolor pop}bd}ifelse/setoverprint{/$op xd}bd + +/currentoverprint{$op}bd/setsepcolor{1 exch sub setgray}bd + +/checksepcolor{1 exch sub dup setgray 1 eq exch 1 eq and not}bd + +/setprocesscolor{ColorSeparationMode 0 eq{setcmykcolor}{ + +0 4 $ink sub index exch pop 5 1 roll 4{pop}repeat + +setsepcolor}ifelse}bd/findcmykcustomcolor{5 array astore}bd + +/setcustomcolor where{pop}{/setcustomcolor{ColorSeparationMode 0 eq{ + +exch aload pop pop 4{4 index mul 4 1 roll}repeat + +5 -1 roll pop setcmykcolor}{exch aload pop + +CurrentInkName eq{4 index}{0}ifelse 6 1 roll + +5{pop}repeat setsepcolor}ifelse}bd}ifelse/colorimage where{pop}{ + +/colorimage{pop pop pop pop pop{currentfile $dat readhexstring pop pop} + +repeat pop}bd}ifelse/@tc{dup 1 ge{pop}{4{dup + +6 -1 roll mul exch}repeat pop}ifelse}bd/@scc{1 eq setoverprint + +dup _ eq{pop setprocesscolor pop}{findcmykcustomcolor + +exch setcustomcolor}ifelse ColorSeparationMode 0 eq{true}{ + +currentgray 1 eq currentoverprint and not}ifelse}bd + +/@sft{/$tx $tllx $pxf add dup $tllx gt{$pwid sub}if def + +/$ty $tury $pyf sub dup $tury lt{$phei add}if def}bd + +/@stb{pathbbox/$ury xd/$urx xd/$lly xd/$llx xd}bd + +/@ep{{cvx exec}forall}bd/@tp{@sv/$in true def + +2 copy dup $lly le{/$in false def}if $phei sub $ury ge{/$in false def}if + +dup $urx ge{/$in false def}if $pwid add $llx le{/$in false def}if + +$in{@np 2 copy m $pwid 0 rl 0 $phei neg rl $pwid neg 0 rl + +0 $phei rl clip @np $pn cvlit load aload pop + +7 -1 roll 5 index sub 7 -1 roll 3 index sub translate + +/$ctm matrix currentmatrix def @ep pop pop pop pop}{pop pop}ifelse + +@rs}bd/@th{@sft 0 1 $tly 1 sub{dup $psx mul $tx add{ + +dup $llx gt{$pwid sub}{exit}ifelse}loop exch $phei mul $ty exch sub + +0 1 $tlx 1 sub{$pwid mul 3 copy 3 -1 roll add exch + +@tp pop}for pop pop}for}bd/@tv{@sft 0 1 $tlx 1 sub{dup $pwid mul $tx add + +exch $psy mul $ty exch sub{dup $ury lt{$phei add}{exit}ifelse}loop + +0 1 $tly 1 sub{$phei mul 3 copy sub @tp pop}for + +pop pop}for}bd/@pf{@gs $ctm setmatrix $pm concat + +@stb eoclip Bburx Bbury $pm itransform/$tury xd/$turx xd + +Bbllx Bblly $pm itransform/$tlly xd/$tllx xd + +/$wid $turx $tllx sub def/$hei $tury $tlly sub def + +@gs $vectpat{1 0 0 0 0 _ $o @scc{eofill}if}{$t $c $m $y $k $n $o @scc{ + +$tllx $tlly translate $wid $hei scale <00> 8 1 false [ 8 0 0 1 0 0 ]{}imagemask + +/$bkg true def}if}ifelse @gr $wid 0 gt $hei 0 gt and{ + +$pn cvlit load aload pop/$pd xd 3 -1 roll sub/$phei xd + +exch sub/$pwid xd/$tlx $wid $pwid div ceiling 1 add def + +/$tly $hei $phei div ceiling 1 add def $psx 0 eq{@tv}{@th}ifelse}if + +@gr @np/$bkg false def}bd/@dlt{ColorSeparationMode 0 eq{ + +/$dc $toc $tot mul $frc $frt mul dup/$c xd sub $fst 1 sub div def + +/$dm $tom $tot mul $frm $frt mul dup/$m xd sub $fst 1 sub div def + +/$dy $toy $tot mul $fry $frt mul dup/$y xd sub $fst 1 sub div def + +/$dk $tok $tot mul $frk $frt mul dup/$k xd sub $fst 1 sub div def + +true}{$frt $frc $frm $fry $frk $frn $o @scc + +dup{/$frk 1 currentgray sub def}{/$frk 0 def}ifelse + +$tot $toc $tom $toy $tok $ton $o @scc dup{/$tok 1 currentgray sub def}{ + +/$tok 0 def}ifelse or dup{/$c 0 def/$m 0 def/$y 0 def/$k $frk def + +/$dc 0 def/$dm 0 def/$dy 0 def/$dk $tok $frk sub $fst 1 sub div def}if + +}ifelse}bd/@ftl{1 index 4 index sub dup $pad mul dup/$pdw xd + +2 mul sub $fst div/$wid xd 2 index sub/$hei xd + +pop translate $c $m $y $k 4 copy ColorSeparationMode 0 ne + +{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse + +0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill + +$pdw 0 translate $fst{4 copy ColorSeparationMode 0 ne + +{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse + +0 0 moveto 0 $hei lineto $wid $hei lineto $wid 0 lineto 0 0 lineto fill + +$wid 0 translate $dk add 4 1 roll $dy add 4 1 roll + +$dm add 4 1 roll $dc add 4 1 roll}repeat $dk sub 4 1 roll + +$dy sub 4 1 roll $dm sub 4 1 roll $dc sub 4 1 roll + +ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop} + +{setcmykcolor}ifelse 0 0 moveto 0 $hei lineto $pdw $hei lineto $pdw 0 lineto 0 0 lineto fill + +}bd/@ftr{1 index 4 index sub dup $rox mul/$row xd + +2 div 1 index 4 index sub dup $roy mul/$roh xd + +2 div 2 copy dup mul exch dup mul add sqrt + +$row dup mul $roh dup mul add sqrt add dup/$hei xd $fst div/$wid xd + +4 index add $roh add exch 5 index add $row add + +exch translate pop pop pop pop currentflat dup 5 mul setflat + +$c $m $y $k 4 copy ColorSeparationMode 0 ne + +{1 exch sub setgray pop pop pop}{setcmykcolor}ifelse + +$wid 0 moveto 0 0 $hei 0 360 arc fill 1.0 $pad 2 mul sub dup scale + +$fst{4 copy ColorSeparationMode 0 ne{1 exch sub setgray pop pop pop} + +{setcmykcolor}ifelse $wid 0 moveto 0 0 $hei 0 360 arc fill + +/$hei $hei $wid sub def $dk add 4 1 roll $dy add 4 1 roll + +$dm add 4 1 roll $dc add 4 1 roll}repeat pop pop pop pop + +setflat}bd/@ff{@gs @dlt{$ctm setmatrix eoclip + +newpath Bbllx Bblly moveto Bbllx Bbury lineto + +Bburx Bbury lineto Bburx Bblly lineto $fan rotate + +pathbbox newpath $fty 1 eq{@ftr}{@ftl}ifelse}if + +@gr @np}bd/@Pf{@sv ColorSeparationMode 0 eq $ink 3 eq or{0 J 0 j [] 0 d + +$t $c $m $y $k $n $o @scc pop $ctm setmatrix + +72 1000 div dup matrix scale dup concat dup Bburx exch Bbury exch itransform + +ceiling cvi/Bbury xd ceiling cvi/Bburx xd Bbllx exch Bblly exch itransform + +floor cvi/Bblly xd floor cvi/Bbllx xd $Prm aload pop + +$Psn load exec}{1 setgray eofill}ifelse @rs + +@np}bd/g{1 exch sub/$k xd/$c 0 def/$m 0 def/$y 0 def/$t 1 def/$n _ def/$fil 0 def + +}bd/G{1 exch sub/$K xd/$C 0 def/$M 0 def/$Y 0 def/$T 1 def/$N _ def}bd + +/k{/$k xd/$y xd/$m xd/$c xd/$t 1 def/$n _ def/$fil 0 def}bd + +/K{/$K xd/$Y xd/$M xd/$C xd/$T 1 def/$N _ def}bd + +/x{/$t xd/$n xd/$k xd/$y xd/$m xd/$c xd/$fil 0 def}bd + +/X{/$T xd/$N xd/$K xd/$Y xd/$M xd/$C xd}bd + +/d/setdash ld/i{dup 0 ne{setflat}{pop}ifelse}bd + +/j/setlinejoin ld/J/setlinecap ld/M/setmiterlimit ld + +/w/setlinewidth ld/O{/$o xd}bd/R{/$O xd}bd + +/c/curveto ld/C/c ld/v{4 -2 roll 2 copy 6 -2 roll curveto}bd + +/V/v ld/y{2 copy curveto}bd/Y/y ld/l/lineto ld + +/L/l ld/rl/rlineto ld/m/moveto ld/n/newpath ld + +/N/newpath ld/F{matrix currentmatrix $sdf{$scf $sca $scp @ss}if + +$fil 1 eq{@pf}{$fil 2 eq{@ff}{$fil 3 eq{@Pf}{$t $c $m $y $k $n $o @scc + +{eofill}{@np}ifelse}ifelse}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if + +setmatrix}bd/f{@cp F}bd/S{matrix currentmatrix + +$ctm setmatrix $SDF{$SCF $SCA $SCP @ss}if $T $C $M $Y $K $N $O @scc{ + +matrix currentmatrix $ptm concat stroke setmatrix}{@np}ifelse + +$SDF{$dsf $dsa $dsp @ss}if setmatrix}bd/s{@cp + +S}bd/B{@gs F @gr S}bd/b{@cp B}bd/W{eoclip}bd + +/p{/$pm xd 7{pop}repeat/$pyf xd/$pxf xd/$pn xd + +/$fil 1 def}bd/P{11{pop}repeat}bd/u{}bd/U{}bd + +/A{pop}bd/q/@gs ld/Q/@gr ld/E{5 array astore + +exch cvlit exch def}bd/`{}bd/~{}bd/@{}bd/&{}bd + +/CorelDrawReencodeVect [ 16#82/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl + +16#88/circumflex/perthousand/Scaron/guilsinglleft/OE + +16#91/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash + +16#98/tilde/trademark/scaron/guilsinglright/oe + +16#9F/Ydieresis 16#A1/exclamdown/cent/sterling/currency/yen/brokenbar/section + +16#a8/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/minus/registered/macron + +16#b0/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered + +16#b8/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown + +16#c0/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla + +16#c8/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis + +16#d0/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply + +16#d8/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls + +16#e0/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla + +16#e8/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis + +16#f0/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide + +16#f8/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis + +] def/@cc{currentfile $dat readhexstring pop}bd + +/@sm{/$ctm $ctm currentmatrix def}bd/@E{/Bbury xd/Bburx xd + +/Bblly xd/Bbllx xd}bd/@c{@cp}bd/@p{/$fil 1 def + +1 eq/$vectpat xd/$pm xd/$psy xd/$psx xd/$pyf xd/$pxf xd + +/$pn xd}bd/@P{/$fil 3 def/$Psn xd array astore + +/$Prm xd}bd/@k{/$fil 2 def/$roy xd/$rox xd/$pad xd + +/$fty xd/$fan xd $fty 1 eq{/$fan 0 def}if/$tok xd/$toy xd/$tom xd/$toc xd + +/$frk xd/$fry xd/$frm xd/$frc xd/$frn _ def/$frt 1 def/$ton _ def/$tot 1 def + +}bd/@x{/$fil 2 def/$roy xd/$rox xd/$pad xd + +/$fty xd/$fan xd/$tot xd/$ton xd/$tok xd/$toy xd/$tom xd/$toc xd + +/$frt xd/$frn xd/$frk xd/$fry xd/$frm xd/$frc xd}bd + +/@ii{concat 3 index 3 index m 3 index 1 index l + +2 copy l 1 index 3 index l 3 index 3 index l + +clip pop pop pop pop}bd/@i{@sm @gs @ii 6 index 1 ne{/$frg true def + +pop pop}{1 eq{$T $C $M $Y $K $N $O @scc/$frg xd}{/$frg false def + +}ifelse 1 eq{@gs $ctm setmatrix $t $c $m $y $k $n $o @scc{eofill}if + +@gr}if}ifelse/$frg $frg $bkg or def @np/$ury xd/$urx xd/$lly xd/$llx xd + +/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul 8 div ceiling cvi string def + +$frg{$SDF{$SCF $SCA $SCP @ss}if $llx $lly translate + +$urx $llx sub $ury $lly sub scale $wid $hei abs + +$bts 1 eq{false}{$bts}ifelse [ $wid 0 0 $hei neg 0 + +$hei 0 gt{$hei}{0}ifelse]/@cc load $bts 1 eq{imagemask}{image}ifelse + +$SDF{$dsf $dsa $dsp @ss}if}{$hei abs{@cc pop}repeat}ifelse + +@gr $ctm setmatrix}def/@M{@sv}bd/@N{/@cc{}def + +1 eq{12 -1 roll neg 12 1 roll @I}{13 -1 roll neg 13 1 roll + +@i}ifelse @rs}bd/@I{@sm @gs @ii @np/$ury xd/$urx xd/$lly xd/$llx xd + +/$ncl xd/$bts xd/$hei xd/$wid xd/$dat $wid $bts mul $ncl mul 8 div ceiling cvi string def + +$llx $lly translate $urx $llx sub $ury $lly sub scale + +$wid $hei abs $bts [ $wid 0 0 $hei neg 0 $hei 0 gt{$hei}{0}ifelse] + +/@cc load false $ncl colorimage @gr $ctm setmatrix}bd + +/z{exch findfont exch scalefont setfont}bd + +/ZB{9 dict dup begin 4 1 roll/FontType 3 def + +/FontMatrix xd/FontBBox xd/Encoding 256 array def + +0 1 255{Encoding exch/.notdef put}for/CharStrings 256 dict def + +CharStrings/.notdef{}put/Metrics 256 dict def + +Metrics/.notdef 3 -1 roll put/BuildChar{exch + +dup/$char exch/Encoding get 3 index get def + +dup/Metrics get $char get aload pop setcachedevice + +begin Encoding exch get CharStrings exch get + +end exec}def end definefont pop}bd/ZBAddChar{findfont begin + +dup 4 1 roll dup 6 1 roll Encoding 3 1 roll put + +CharStrings 3 1 roll put Metrics 3 1 roll put + +end}bd/Z{findfont dup maxlength 2 add dict exch + +dup{1 index/FID ne{3 index 3 1 roll put}{pop pop}ifelse}forall + +pop dup dup/Encoding get 256 array copy dup/$fe xd + +/Encoding exch put dup/Fontname 3 index put + +3 -1 roll dup length 0 ne{0 exch{dup type 0 type eq{exch pop}{ + +$fe exch 2 index exch put 1 add}ifelse}forall + +pop}if dup 256 dict dup/$met xd/Metrics exch put + +dup/FontMatrix get 0 get 1000 mul 1 exch div + +3 index length 256 eq{0 1 255{dup $fe exch get + +dup/.notdef eq{pop pop}{5 index 3 -1 roll get + +2 index mul $met 3 1 roll put}ifelse}for}if + +pop definefont pop pop}bd/@ftx{{currentpoint 3 -1 roll + +(0) dup 3 -1 roll 0 exch put dup @gs true charpath + +$ctm setmatrix @@txt @gr @np stringwidth pop 3 -1 roll add exch moveto + +}forall}bd/@ft{matrix currentmatrix exch $sdf{$scf $sca $scp @ss}if + +$fil 1 eq{/@@txt/@pf ld @ftx}{$fil 2 eq{/@@txt/@ff ld @ftx}{$fil 3 eq + +{/@@txt/@Pf ld @ftx}{$t $c $m $y $k $n $o @scc{show}{pop}ifelse}ifelse + +}ifelse}ifelse $sdf{$dsf $dsa $dsp @ss}if setmatrix}bd + +/@st{matrix currentmatrix exch $SDF{$SCF $SCA $SCP @ss}if + +$T $C $M $Y $K $N $O @scc{{currentpoint 3 -1 roll + +(0) dup 3 -1 roll 0 exch put dup @gs true charpath + +$ctm setmatrix $ptm concat stroke @gr @np stringwidth pop 3 -1 roll add exch moveto + +}forall}{pop}ifelse $SDF{$dsf $dsa $dsp @ss}if + +setmatrix}bd/@te{@ft}bd/@tr{@st}bd/@ta{dup + +@gs @ft @gr @st}bd/@t@a{dup @gs @st @gr @ft}bd + +/@tm{/$textsave save def @sm concat}bd/e{/t{@te}def}bd + +/r{/t{@tr}def}bd/o{/t{pop}def}bd/a{/t{@ta}def}bd + +/@a{/t{@t@a}def}bd/t{@te}def/T{@np $ctm setmatrix + +/$ttm matrix def $textsave restore}bd/@t{/$stm $stm currentmatrix def + +3 1 roll moveto $ttm concat t $stm setmatrix}def + +/@n{/$ttm exch matrix rotate def}bd/@s{}bd + +/@l{}bd/@B{@gs S @gr F}bd/@b{@cp @B}bd/@w{matrix rotate/$ptm xd + +matrix scale $ptm dup concatmatrix/$ptm xd + +1 eq{$ptm exch dup concatmatrix/$ptm xd}if + +1 w}bd/@g{1 eq dup/$sdf xd{/$scp xd/$sca xd + +/$scf xd}if}bd/@G{1 eq dup/$SDF xd{/$SCP xd + +/$SCA xd/$SCF xd}if}bd/@D{3 copy @ss/$dsp xd + +/$dsa xd/$dsf xd}bd/@j{@sv @np}bind def/@J{@rs}bind def + +/@sep{/ColorSeparationMode where{pop}{/ColorSeparationMode 0 def + +/CurrentInkName (Composite) def}ifelse ColorSeparationMode 0 eq{ + +/CurrentInkName (Composite) def}if/CurrentInkName where{pop}{ + +/CurrentInkName (Composite) def}ifelse CurrentInkName (Composite) eq + +{/$ink -1 def}{CurrentInkName (Cyan) eq{/$ink 0 def}{ + +CurrentInkName (Magenta) eq{/$ink 1 def}{CurrentInkName (Yellow) eq + +{/$ink 2 def}{CurrentInkName (Black) eq{/$ink 3 def}{/$ink 4 def + +}ifelse}ifelse}ifelse}ifelse}ifelse}bd @sep + +/@whi{@gs -72000 dup moveto -72000 72000 lineto + +72000 dup lineto 72000 -72000 lineto closepath 1 setgray fill + +@gr}bd/@neg{ [{1 exch sub}/exec cvx currenttransfer/exec cvx] cvx settransfer + +@whi}bd/@reg{[] 0 d 0 setgray .3 setlinewidth + +2 copy 5.4 0 360 arc closepath 2 copy moveto 9 0 rlineto + +2 copy moveto -9 0 rlineto 2 copy moveto 0 9 rlineto + +moveto 0 -9 rlineto stroke}bd/leftbracket{(\050)}def + +/rightbracket{(\051)}def + + + + + +11.4737 setmiterlimit + +1.00 setflat + +/$fst 128 def + +[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 229 + +229 291 457 457 732 543 182 275 275 322 480 229 275 229 229 457 + +457 457 457 457 457 457 457 457 457 229 229 480 480 480 457 836 + +543 543 592 592 543 504 639 592 229 408 543 457 686 592 639 543 + +639 592 543 504 592 543 771 543 543 504 229 229 229 387 457 275 + +457 457 408 457 457 229 457 457 182 182 408 182 686 457 457 457 + +457 275 408 229 457 408 592 408 408 408 275 213 275 480 750 750 + +750 750 457 275 818 457 457 275 818 750 275 818 750 750 750 750 + +182 182 275 275 229 457 818 275 818 750 275 771 750 750 750 750 + +275 457 457 457 457 148 457 275 605 299 457 480 750 605 750 750 + +750 750 750 275 750 441 750 275 750 299 457 750 750 750 504 543 + +543 543 543 543 543 818 592 543 543 543 543 229 229 229 229 750 + +592 639 639 639 639 639 750 639 592 592 592 592 543 750 504 457 + +457 457 457 457 457 732 408 457 457 457 457 229 229 229 229 750 + +457 457 457 457 457 457 750 504 457 457 457 457 408 750 408 ] + +CorelDrawReencodeVect /_Helvetica-Narrow /Helvetica-Narrow Z + +[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 + +600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 ] + +CorelDrawReencodeVect /_Courier /Courier Z + + + + +@sv + +/$ctm matrix currentmatrix def + +@sv + + +106.13 392.62 110.02 399.38 @E + + +[0.07199 0.00000 0.00000 0.07199 106 392] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 125.00 z + +0 0 (0) @t + +T + + +160.70 392.69 163.30 399.31 @E + + +[0.07199 0.00000 0.00000 0.07199 160 392] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 125.00 z + +0 0 (1) @t + +T + + +214.06 392.69 217.94 399.24 @E + + +[0.07199 0.00000 0.00000 0.07199 214 392] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 125.00 z + +0 0 (2) @t + +T + + +268.06 392.54 271.94 399.24 @E + + +[0.07199 0.00000 0.00000 0.07199 268 392] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 125.00 z + +0 0 (3) @t + +T + + +321.98 392.47 325.94 399.10 @E + + +[0.07199 0.00000 0.00000 0.07199 322 392] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 125.00 z + +0 0 (4) @t + +T + + +375.98 392.40 379.94 399.10 @E + + +[0.07199 0.00000 0.00000 0.07199 376 392] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 125.00 z + +0 0 (5) @t + +T + + +159.98 446.69 163.94 453.38 @E + + +[0.07199 0.00000 0.00000 0.07199 160 446] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 125.00 z + +0 0 (6) @t + +T + + +106.06 338.83 110.09 345.38 @E + + +[0.07199 0.00000 0.00000 0.07199 106 338] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 125.00 z + +0 0 (7) @t + +T + + +159.98 338.62 163.94 345.46 @E + + +[0.07199 0.00000 0.00000 0.07199 160 338] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 125.00 z + +0 0 (8) @t + +T + + +106.13 284.62 110.02 291.46 @E + + +[0.07199 0.00000 0.00000 0.07199 106 284] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 125.00 z + +0 0 (9) @t + +T + + +157.97 284.69 166.10 291.53 @E + + +[0.07199 0.00000 0.00000 0.07199 158 285] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 125.00 z + +0 0 (10) @t + +T + + +104.54 446.69 111.53 453.31 @E + + +[0.07199 0.00000 0.00000 0.07199 104 446] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 125.00 z + +0 0 (11) @t + +T + + +112.54 440.93 114.55 445.97 @E + + +[0.07199 0.00000 0.00000 0.07199 112 440] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 97.00 z + +0 0 (1) @t + +T + + +166.46 278.93 169.49 283.97 @E + + +[0.07199 0.00000 0.00000 0.07199 166 278] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 97.00 z + +0 0 (2) @t + +T + + +112.46 332.86 115.49 337.90 @E + + +[0.07199 0.00000 0.00000 0.07199 112 332] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 97.00 z + +0 0 (3) @t + +T + + +166.46 332.86 169.49 337.90 @E + + +[0.07199 0.00000 0.00000 0.07199 166 332] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 97.00 z + +0 0 (3) @t + +T + + +328.46 386.93 331.56 391.97 @E + + +[0.07199 0.00000 0.00000 0.07199 328 386] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 97.00 z + +0 0 (4) @t + +T + + +274.46 386.93 277.56 391.97 @E + + +[0.07199 0.00000 0.00000 0.07199 274 386] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 97.00 z + +0 0 (4) @t + +T + + +220.46 386.93 223.56 391.97 @E + + +[0.07199 0.00000 0.00000 0.07199 220 386] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 97.00 z + +0 0 (4) @t + +T + + +166.46 386.93 169.56 391.97 @E + + +[0.07199 0.00000 0.00000 0.07199 166 386] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 97.00 z + +0 0 (4) @t + +T + + +166.46 440.93 169.56 445.97 @E + + +[0.07199 0.00000 0.00000 0.07199 166 440] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 97.00 z + +0 0 (4) @t + +T + + +382.46 386.78 385.56 391.90 @E + + +[0.07199 0.00000 0.00000 0.07199 382 386] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Helvetica-Narrow 97.00 z + +0 0 (5) @t + +T + + +94.54 382.54 121.61 409.46 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +108.07 409.46 m + +115.49 409.46 121.61 403.42 121.61 396.00 c + +121.61 388.58 115.49 382.54 108.07 382.54 c + +100.66 382.54 94.54 388.58 94.54 396.00 c + +94.54 403.42 100.66 409.46 108.07 409.46 c + +@c + +S + + +94.54 274.54 121.61 301.46 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +108.07 301.46 m + +115.49 301.46 121.61 295.42 121.61 288.00 c + +121.61 280.58 115.49 274.54 108.07 274.54 c + +100.66 274.54 94.54 280.58 94.54 288.00 c + +94.54 295.42 100.66 301.46 108.07 301.46 c + +@c + +S + + +94.54 328.61 121.61 355.54 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +108.07 355.54 m + +115.49 355.54 121.61 349.49 121.61 342.07 c + +121.61 334.66 115.49 328.61 108.07 328.61 c + +100.66 328.61 94.54 334.66 94.54 342.07 c + +94.54 349.49 100.66 355.54 108.07 355.54 c + +@c + +S + + +95.83 329.98 120.17 354.31 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +108.00 354.31 m + +114.62 354.31 120.17 348.91 120.17 342.14 c + +120.17 335.45 114.62 329.98 108.00 329.98 c + +101.30 329.98 95.83 335.45 95.83 342.14 c + +95.83 348.91 101.30 354.31 108.00 354.31 c + +@c + +S + + +148.46 328.54 175.54 355.46 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +162.00 355.46 m + +169.42 355.46 175.54 349.42 175.54 342.00 c + +175.54 334.58 169.42 328.54 162.00 328.54 c + +154.58 328.54 148.46 334.58 148.46 342.00 c + +148.46 349.42 154.58 355.46 162.00 355.46 c + +@c + +S + + +149.76 329.90 174.10 354.24 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +161.93 354.24 m + +168.55 354.24 174.10 348.84 174.10 342.07 c + +174.10 335.38 168.55 329.90 161.93 329.90 c + +155.23 329.90 149.76 335.38 149.76 342.07 c + +149.76 348.84 155.23 354.24 161.93 354.24 c + +@c + +S + + +148.46 436.54 175.54 463.46 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +162.00 463.46 m + +169.42 463.46 175.54 457.42 175.54 450.00 c + +175.54 442.58 169.42 436.54 162.00 436.54 c + +154.58 436.54 148.46 442.58 148.46 450.00 c + +148.46 457.42 154.58 463.46 162.00 463.46 c + +@c + +S + + +149.76 437.90 174.10 462.24 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +161.93 462.24 m + +168.55 462.24 174.10 456.84 174.10 450.07 c + +174.10 443.38 168.55 437.90 161.93 437.90 c + +155.23 437.90 149.76 443.38 149.76 450.07 c + +149.76 456.84 155.23 462.24 161.93 462.24 c + +@c + +S + + +94.54 436.54 121.61 463.46 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +108.07 463.46 m + +115.49 463.46 121.61 457.42 121.61 450.00 c + +121.61 442.58 115.49 436.54 108.07 436.54 c + +100.66 436.54 94.54 442.58 94.54 450.00 c + +94.54 457.42 100.66 463.46 108.07 463.46 c + +@c + +S + + +95.83 437.90 120.17 462.24 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +108.00 462.24 m + +114.62 462.24 120.17 456.84 120.17 450.07 c + +120.17 443.38 114.62 437.90 108.00 437.90 c + +101.30 437.90 95.83 443.38 95.83 450.07 c + +95.83 456.84 101.30 462.24 108.00 462.24 c + +@c + +S + + +148.46 382.54 175.54 409.46 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +162.00 409.46 m + +169.42 409.46 175.54 403.42 175.54 396.00 c + +175.54 388.58 169.42 382.54 162.00 382.54 c + +154.58 382.54 148.46 388.58 148.46 396.00 c + +148.46 403.42 154.58 409.46 162.00 409.46 c + +@c + +S + + +149.76 383.90 174.10 408.24 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +161.93 408.24 m + +168.55 408.24 174.10 402.84 174.10 396.07 c + +174.10 389.38 168.55 383.90 161.93 383.90 c + +155.23 383.90 149.76 389.38 149.76 396.07 c + +149.76 402.84 155.23 408.24 161.93 408.24 c + +@c + +S + + +148.54 274.61 175.61 301.54 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +162.07 301.54 m + +169.49 301.54 175.61 295.49 175.61 288.07 c + +175.61 280.66 169.49 274.61 162.07 274.61 c + +154.66 274.61 148.54 280.66 148.54 288.07 c + +148.54 295.49 154.66 301.54 162.07 301.54 c + +@c + +S + + +149.83 275.98 174.17 300.31 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +162.00 300.31 m + +168.62 300.31 174.17 294.91 174.17 288.14 c + +174.17 281.45 168.62 275.98 162.00 275.98 c + +155.30 275.98 149.83 281.45 149.83 288.14 c + +149.83 294.91 155.30 300.31 162.00 300.31 c + +@c + +S + + +202.46 382.46 229.54 409.39 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +216.00 409.39 m + +223.42 409.39 229.54 403.34 229.54 395.93 c + +229.54 388.51 223.42 382.46 216.00 382.46 c + +208.58 382.46 202.46 388.51 202.46 395.93 c + +202.46 403.34 208.58 409.39 216.00 409.39 c + +@c + +S + + +203.76 383.83 228.10 408.17 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +215.93 408.17 m + +222.55 408.17 228.10 402.77 228.10 396.00 c + +228.10 389.30 222.55 383.83 215.93 383.83 c + +209.23 383.83 203.76 389.30 203.76 396.00 c + +203.76 402.77 209.23 408.17 215.93 408.17 c + +@c + +S + + +256.46 382.39 283.54 409.32 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +270.00 409.32 m + +277.42 409.32 283.54 403.27 283.54 395.86 c + +283.54 388.44 277.42 382.39 270.00 382.39 c + +262.58 382.39 256.46 388.44 256.46 395.86 c + +256.46 403.27 262.58 409.32 270.00 409.32 c + +@c + +S + + +257.76 383.76 282.10 408.10 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +269.93 408.10 m + +276.55 408.10 282.10 402.70 282.10 395.93 c + +282.10 389.23 276.55 383.76 269.93 383.76 c + +263.23 383.76 257.76 389.23 257.76 395.93 c + +257.76 402.70 263.23 408.10 269.93 408.10 c + +@c + +S + + +310.46 382.32 337.54 409.25 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +324.00 409.25 m + +331.42 409.25 337.54 403.20 337.54 395.78 c + +337.54 388.37 331.42 382.32 324.00 382.32 c + +316.58 382.32 310.46 388.37 310.46 395.78 c + +310.46 403.20 316.58 409.25 324.00 409.25 c + +@c + +S + + +311.76 383.69 336.10 408.02 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +323.93 408.02 m + +330.55 408.02 336.10 402.62 336.10 395.86 c + +336.10 389.16 330.55 383.69 323.93 383.69 c + +317.23 383.69 311.76 389.16 311.76 395.86 c + +311.76 402.62 317.23 408.02 323.93 408.02 c + +@c + +S + + +364.46 382.25 391.54 409.18 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +378.00 409.18 m + +385.42 409.18 391.54 403.13 391.54 395.71 c + +391.54 388.30 385.42 382.25 378.00 382.25 c + +370.58 382.25 364.46 388.30 364.46 395.71 c + +364.46 403.13 370.58 409.18 378.00 409.18 c + +@c + +S + + +365.76 383.62 390.10 407.95 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +377.93 407.95 m + +384.55 407.95 390.10 402.55 390.10 395.78 c + +390.10 389.09 384.55 383.62 377.93 383.62 c + +371.23 383.62 365.76 389.09 365.76 395.78 c + +365.76 402.55 371.23 407.95 377.93 407.95 c + +@c + +S + + +121.54 395.86 148.54 396.14 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +121.54 396.00 m + +147.17 396.00 L + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +144.00 398.52 m + +147.96 396.00 L + +144.00 393.48 L + +S + +@J + + +175.54 395.86 202.54 396.14 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +175.54 396.00 m + +201.17 396.00 L + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +198.00 398.52 m + +201.96 396.00 L + +198.00 393.48 L + +S + +@J + + +229.54 395.86 256.54 396.14 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +229.54 396.00 m + +255.17 396.00 L + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +252.00 398.52 m + +255.96 396.00 L + +252.00 393.48 L + +S + +@J + + +283.54 395.86 310.54 396.14 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +283.54 396.00 m + +309.17 396.00 L + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +306.00 398.52 m + +309.96 396.00 L + +306.00 393.48 L + +S + +@J + + +337.54 395.86 364.54 396.14 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +337.54 396.00 m + +363.17 396.00 L + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +360.00 398.52 m + +363.96 396.00 L + +360.00 393.48 L + +S + +@J + + +125.57 268.56 143.86 284.98 @E + + +[0.07198 0.00000 0.00000 0.07199 125 278] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (\133) @t + +60 0 (0) @t + +120 0 (-) @t + +180 0 (9) @t + +0 -125 (a) @t + +60 -125 (-) @t + +120 -125 (f) @t + +180 -125 (\135) @t + +T + + +121.54 287.86 148.54 288.14 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +121.54 288.00 m + +147.17 288.00 L + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +144.00 290.52 m + +147.96 288.00 L + +144.00 285.48 L + +S + +@J + + +121.54 341.86 148.54 342.14 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +121.54 342.00 m + +147.17 342.00 L + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +144.00 344.52 m + +147.96 342.00 L + +144.00 339.48 L + +S + +@J + + +107.86 301.54 108.14 328.54 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +108.00 328.54 m + +108.00 302.90 L + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +110.52 306.14 m + +108.00 302.18 L + +105.48 306.14 L + +S + +@J + + +107.86 355.54 108.14 382.54 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +108.00 382.54 m + +108.00 356.90 L + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +110.52 360.14 m + +108.00 356.18 L + +105.48 360.14 L + +S + +@J + + +107.86 409.54 108.14 436.54 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +108.00 409.54 m + +108.00 435.17 L + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +105.41 432.00 m + +108.00 435.96 L + +110.59 432.00 L + +S + +@J + + +117.00 405.00 153.00 441.00 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +117.00 405.00 m + +152.06 440.06 L + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +147.96 439.63 m + +152.64 440.64 L + +151.70 436.03 L + +S + +@J + + +117.00 351.00 153.00 387.00 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +117.00 387.00 m + +152.06 351.94 L + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +151.63 356.04 m + +152.64 351.43 L + +148.03 352.44 L + +S + +@J + + +166.39 341.93 196.63 377.14 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +173.38 346.82 m + +177.48 347.47 182.59 350.42 186.77 354.60 c + +193.75 361.58 196.63 370.22 193.18 373.68 c + +189.72 377.14 181.08 374.33 174.10 367.34 c + +169.92 363.17 166.90 358.06 166.39 353.95 C + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +169.34 356.90 m + +166.39 353.30 L + +164.30 357.62 L + +S + +@J + + +166.39 450.72 196.63 485.93 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +173.38 455.62 m + +177.48 456.26 182.59 459.22 186.77 463.39 c + +193.75 470.38 196.63 479.02 193.18 482.47 c + +189.72 485.93 181.08 483.12 174.10 476.14 c + +169.92 471.96 166.90 466.85 166.39 462.74 C + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +169.34 465.70 m + +166.39 462.10 L + +164.30 466.42 L + +S + +@J + + +166.39 287.93 196.63 323.14 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +173.38 292.82 m + +177.48 293.47 182.59 296.42 186.77 300.60 c + +193.75 307.58 196.63 316.22 193.18 319.68 c + +189.72 323.14 181.08 320.33 174.10 313.34 c + +169.92 309.17 166.90 304.06 166.39 299.95 C + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +169.34 302.90 m + +166.39 299.30 L + +164.30 303.62 L + +S + +@J + + +166.61 396.00 198.00 450.00 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +182.30 396.00 m + +190.94 396.00 198.00 408.17 198.00 423.00 c + +198.00 437.83 190.94 450.00 182.30 450.00 C + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +185.54 447.41 m + +181.58 450.00 L + +185.54 452.59 L + +S + +@J + + +220.61 396.00 252.00 450.00 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +236.30 396.00 m + +244.94 396.00 252.00 408.17 252.00 423.00 c + +252.00 437.83 244.94 450.00 236.30 450.00 C + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +239.54 447.41 m + +235.58 450.00 L + +239.54 452.59 L + +S + +@J + + +274.61 396.00 306.00 450.00 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +290.30 396.00 m + +298.94 396.00 306.00 408.17 306.00 423.00 c + +306.00 437.83 298.94 450.00 290.30 450.00 C + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +293.54 447.41 m + +289.58 450.00 L + +293.54 452.59 L + +S + +@J + + +328.61 396.00 360.00 450.00 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +344.30 396.00 m + +352.94 396.00 360.00 408.17 360.00 423.00 c + +360.00 437.83 352.94 450.00 344.30 450.00 C + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +347.54 447.41 m + +343.58 450.00 L + +347.54 452.59 L + +S + +@J + + +382.54 396.00 413.93 450.00 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +398.23 396.00 m + +406.87 396.00 413.93 408.17 413.93 423.00 c + +413.93 437.83 406.87 450.00 398.23 450.00 C + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +401.47 447.41 m + +397.51 450.00 L + +401.47 452.59 L + +S + +@J + + +391.54 395.86 398.23 396.14 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +391.54 396.00 m + +398.23 396.00 L + +S + + +175.54 449.86 398.23 450.14 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +398.23 450.00 m + +175.54 450.00 L + +S + + +139.46 385.27 144.43 391.03 @E + + +[0.07199 0.00000 0.00000 0.07199 139 386] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (p) @t + +T + + +188.93 386.93 193.90 390.96 @E + + +[0.07199 0.00000 0.00000 0.07199 188 386] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (r) @t + +T + + +242.93 386.93 247.61 392.76 @E + + +[0.07199 0.00000 0.00000 0.07199 242 386] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (i) @t + +T + + +296.93 386.93 301.97 391.03 @E + + +[0.07199 0.00000 0.00000 0.07199 296 386] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (n) @t + +T + + +350.93 386.86 355.82 392.18 @E + + +[0.07199 0.00000 0.00000 0.07199 350 386] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (t) @t + +T + + +98.93 364.39 103.46 370.22 @E + + +[0.07199 0.00000 0.00000 0.07199 98 364] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (0) @t + +T + + +98.93 310.46 103.97 314.42 @E + + +[0.07199 0.00000 0.00000 0.07199 98 310] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (x) @t + +T + + +125.50 331.78 146.66 338.76 @E + + +[0.07199 0.00000 0.00000 0.07199 125 332] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (\133) @t + +60 0 (0) @t + +120 0 (-) @t + +180 0 (9) @t + +240 0 (\135) @t + +T + + +134.50 367.78 155.66 374.76 @E + + +[0.07199 0.00000 0.00000 0.07199 134 368] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (\133) @t + +60 0 (1) @t + +120 0 (-) @t + +180 0 (9) @t + +240 0 (\135) @t + +T + + +134.28 416.74 166.46 424.73 @E + + +[0.07199 0.00000 0.00000 0.07199 134 418] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (\133) @t + +60 0 (a) @t + +120 0 (-) @t + +180 0 (z) @t + +240 0 (\135) @t + +300 0 (\134) @t + +360 0 (p) @t + +T + + +197.28 417.31 229.46 424.73 @E + + +[0.07199 0.00000 0.00000 0.07199 197 418] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (\133) @t + +60 0 (a) @t + +120 0 (-) @t + +180 0 (z) @t + +240 0 (\135) @t + +300 0 (\134) @t + +360 0 (r) @t + +T + + +251.28 417.31 283.18 424.73 @E + + +[0.07199 0.00000 0.00000 0.07199 251 418] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (\133) @t + +60 0 (a) @t + +120 0 (-) @t + +180 0 (z) @t + +240 0 (\135) @t + +300 0 (\134) @t + +360 0 (i) @t + +T + + +305.28 417.31 337.54 424.73 @E + + +[0.07199 0.00000 0.00000 0.07199 305 418] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (\133) @t + +60 0 (a) @t + +120 0 (-) @t + +180 0 (z) @t + +240 0 (\135) @t + +300 0 (\134) @t + +360 0 (n) @t + +T + + +359.28 417.31 391.39 424.73 @E + + +[0.07199 0.00000 0.00000 0.07199 359 418] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (\133) @t + +60 0 (a) @t + +120 0 (-) @t + +180 0 (z) @t + +240 0 (\135) @t + +300 0 (\134) @t + +360 0 (t) @t + +T + + +413.50 417.31 434.66 424.15 @E + + +[0.07199 0.00000 0.00000 0.07199 413 418] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (\133) @t + +60 0 (a) @t + +120 0 (-) @t + +180 0 (z) @t + +240 0 (\135) @t + +T + + +193.03 475.78 214.20 482.62 @E + + +[0.07199 0.00000 0.00000 0.07199 193 476] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (\133) @t + +60 0 (a) @t + +120 0 (-) @t + +180 0 (z) @t + +240 0 (\135) @t + +T + + +193.03 367.78 214.20 374.76 @E + + +[0.07199 0.00000 0.00000 0.07199 193 368] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (\133) @t + +60 0 (0) @t + +120 0 (-) @t + +180 0 (9) @t + +240 0 (\135) @t + +T + + +192.74 313.78 227.45 320.76 @E + + +[0.07199 0.00000 0.00000 0.07199 193 314] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (\133) @t + +60 0 (0) @t + +120 0 (-) @t + +180 0 (9) @t + +240 0 (a) @t + +300 0 (-) @t + +360 0 (f) @t + +420 0 (\135) @t + +T + + +52.70 412.56 107.21 429.41 @E + + +[0.07199 0.00000 0.00000 0.07199 53 422] @tm + + 0 O 0 @g + +0.00 0.00 0.00 1.00 k + +e + +/_Courier 125.00 z + +0 0 (\133) @t + +60 0 (\134) @t + +120 0 (0) @t + +180 0 (0) @t + +240 0 (0) @t + +300 0 (-) @t + +360 0 (\134) @t + +420 0 (3) @t + +480 0 (7) @t + +540 0 (7) @t + +600 0 (\135) @t + +660 0 (\134) @t + +0 -125 (\133) @t + +60 -125 (0) @t + +120 -125 (-) @t + +180 -125 (9) @t + +240 -125 (a) @t + +300 -125 (-) @t + +360 -125 (z) @t + +420 -125 (\135) @t + +T + + +54.00 391.54 94.54 401.83 @E + +0 J 0 j [] 0 d 0 R 0 @G + +0.00 0.00 0.00 1.00 K + +0 0.22 0.22 0.00 @w + + +54.00 396.65 m + +55.51 398.16 56.52 401.83 58.54 401.18 c + +62.50 399.89 63.29 392.18 67.54 392.18 c + +71.71 392.18 72.29 401.18 76.54 401.18 c + +80.71 401.18 81.50 393.55 85.54 392.18 c + +87.48 391.54 88.27 396.58 90.00 396.65 C + +93.17 396.65 L + +S + +@j + +0.00 0.00 0.00 1.00 K + +0.00 0.00 0.00 1.00 k + +0 @g + +0 @G + +[] 0 d 0 J 0 j + +0 R 0 O 0 1.01 1.01 0 @w + +90.00 399.17 m + +93.96 396.65 L + +90.00 394.13 L + +S + +@J + +@rs + +@rs + + + end + +%%EndDocument + @endspecial 108 1136 a Fr(Figure)21 b(3:)32 b(A)20 b(DF)-5 +b(A)21 b(for)f(the)i(sample)d(sp)q(eci\014cation)j(in)e(Figure)g(2.)39 +b(State)21 b(0)f(is)h(the)g(start)g(state.)108 1186 y(Accepting)d +(states)g(are)g(lab)q(eled)e(with)h(the)g(n)o(um)o(b)q(er)f(of)g(the)i +(rule)f(that)g(they)g(matc)o(h.)26 b(F)m(or)16 b(example,)108 +1236 y(state)i(10)d(accepts)j(rule)f(2.)25 b(T)m(ransitions)16 +b(di\013ering)g(only)g(b)o(y)g(lab)q(el)f(are)i(represen)o(ted)i(with)d +(the)h(same)108 1286 y(arc.)i(F)m(or)12 b(example,)f(state)j(0)e(has)h +(transitions)g(to)f(state)i(6)e(on)h(all)e(of)i(the)g(follo)o(wing)d(c) +o(haracters:)19 b Fm(a)p Fr(,)13 b Fl(:)7 b(:)g(:)n Fr(,)108 +1336 y Fm(o)p Fr(,)14 b Fm(q)p Fr(,)f Fl(:)7 b(:)g(:)12 +b Fm(z)p Fr(.)21 1469 y(RE2C)i(is)g(di\013eren)o(t)h(from)e(most)g +(other)i(scanner)h(generators)f(in)f(that)h(the)g(user)g(m)o(ust)f(pro) +o(vide)g(the)h(input)f(bu\013ering)-42 1519 y(mec)o(hanism)i(for)h(the) +i(scanner;)h(the)f(generated)g(co)q(de)g(simply)c(assumes)j(that)g(the) +g(user)h(has)f(de\014ned)h(three)g(p)q(oin)o(ters:)-42 +1569 y Fm(YYCURSOR)p Fr(,)9 b Fm(YYLIMIT)g Fr(and)h Fm(YYMARKER)p +Fr(,)e(and)i(a)h(routine)f Fm(YYFILL\()p Fl(n)p Fm(\))p +Fr(.)15 b(Before)d(executing)f(the)g(generated)h(co)q(de,)f +Fm(YYCURSOR)-42 1619 y Fr(and)h Fm(YYLIMIT)d Fr(m)o(ust)h(b)q(e)i(set)g +(to)g(p)q(oin)o(t)e(to)h(the)h(\014rst)g(and)f(one)h(past)f(the)h(last) +f(c)o(haracter)i(in)e(the)g(bu\013er,)i(resp)q(ectiv)o(ely)m(.)18 +b(After)-42 1669 y(a)f(tok)o(en)g(is)f(recognized,)i(and)f(b)q(efore)g +(an)o(y)f(action)g(is)h(executed,)i Fm(YYCURSOR)c Fr(is)h(set)i(to)e(p) +q(oin)o(t)g(to)h(just)g(past)g(the)g(tok)o(en.)-42 1718 +y Fm(YYFILL)d Fr(will)g(b)q(e)i(called)f(as)g(the)h(bu\013er)h(needs)f +(\014lling;)e(at)h(least)h Fl(n)f Fr(additional)e(input)i(c)o +(haracters)i(should)e(b)q(e)h(pro)o(vided.)-42 1768 y(When)g +Fm(YYFILL)d Fr(is)i(called,)f Fm(YYCURSOR)f Fr(will)h(p)q(oin)o(t)g(to) +h(the)g(next)h(c)o(haracter)g(to)f(b)q(e)g(scanned)h(and)f +Fm(YYMARKER)p Fr(,)d(if)i(set,)i(will)-42 1818 y(p)q(oin)o(t)f(to)f(a)g +(p)q(ossible)h(bac)o(ktrac)o(king)g(p)q(oin)o(t)f(in)g(the)h(bu\013er.) +21 b Fm(YYFILL)14 b Fr(m)o(ust)f(up)q(date)j Fm(YYLIMIT)p +Fr(,)c(and)j(p)q(ossibly)f Fm(YYCURSOR)-42 1868 y Fr(and)f +Fm(YYMARKER)f Fr(b)q(efore)h(returning.)18 b(T)o(ypically)12 +b Fm(YYCURSOR)p Fr(,)f Fm(YYLIMIT)p Fr(,)g Fm(YYMARKER)p +Fr(,)f(and)j Fm(YYFILL\()p Fl(n)p Fm(\))e Fr(will)h(b)q(e)h(de\014ned)h +(as)-42 1918 y(macros.)-42 2034 y Fj(2.1)56 b(Things)19 +b(That)g(RE2C)f(Do)r(esn't)g(Pro)n(vide)-42 2111 y Fr(RE2C)11 +b(do)q(esn't)h(pro)o(vide)f(man)o(y)e(things)j(a)o(v)n(ailable)d(in)h +(more)h(con)o(v)o(en)o(tional)f(scanner)j(generators)f(including)e +(default)h(rules,)-42 2160 y(end-of-input)17 b(pseudo-tok)o(ens,)i(and) +e(bu\013er)i(managemen)o(t)14 b(routines.)29 b(All)17 +b(of)f(these)j(m)o(ust)d(b)q(e)i(supplied)g(b)o(y)f(the)h(user.)-42 +2210 y(Rather)10 b(than)g(b)q(eing)f(a)g(handicap,)h(this)g(allo)o(ws)e +(RE2C-generated)i(scanners)h(to)f(b)q(e)g(tailored)f(to)g(almost)f(an)o +(y)h(en)o(vironmen)o(t.)-42 2260 y(F)m(or)k(example,)f(the)i(scanner)h +(de\014ned)f(in)f(Figure)h(1)f(compiles)f(in)o(to)h(32)g(b)o(ytes)h(of) +e(i486)h(co)q(de)h(\(using)f(W)m(atcom)e(C)j(9.5\);)e(the)-42 +2310 y(same)g(size)h(as)f(an)g(equiv)n(alen)o(t)g(hand-co)q(ded)h +(routine.)k(Most)c(other)g(scanner)g(generators)h(cannot)e(pro)q(duce)h +(scanners)h(that)-42 2360 y(are)k(comp)q(etitiv)o(e)e(with)g(hand-co)q +(ded)i(analyzers)f(in)f(this)h(case.)28 b(F)m(urther,)18 +b(it)f(is)g(not)f(o)o(v)o(erly)h(di\016cult)f(to)h(implem)o(en)o(t)e(a) +-42 2409 y(more)c(traditional)f(scanner)j(using)f(RE2C.)e(F)m(or)h +(example,)g(App)q(endix)h(A)f(con)o(tains)h(the)g(supp)q(ort)h(co)q(de) +f(for)f(the)i(C)e(scanner)-42 2459 y(b)q(enc)o(hmark)o(ed)j(in)f(T)m +(able)g(1.)k(Note)d(that)g(this)f(co)q(de)h(allo)o(ws)f(for)g +(arbitrarily)f(long)h(con)o(tiguous)g(tok)o(ens)h(and)f(pro)o(vides)h +(line)-42 2509 y(and)g(column)e(n)o(um)o(b)q(er)i(information.)923 +2748 y(3)p eop +%%Page: 4 4 +4 3 bop -42 195 a Fs(3)67 b(Generating)23 b(Directly)h(Executable)g +(Scanners)-42 286 y Fr(As)14 b(demonstrated)g(b)o(y)f(GLA)g([7)o(])g +(generating)h(directly)g(executable)g(co)q(de)g(instead)g(of)f(tables)h +(can)f(result)i(in)e(m)o(uc)o(h)f(faster)-42 336 y(scanners.)20 +b(Ho)o(w)o(ev)o(er,)13 b(to)g(ac)o(hiev)o(e)h(this)f(sp)q(eed,)h +(GLA-generated)h(scanners)f(mak)o(e)e(some)g(assumptions)h(ab)q(out)g +(the)h(input)-42 386 y(and)i(place)g(certain)g(restrictions)g(on)g(tok) +o(ens)680 371 y Fq(4)699 386 y Fr(.)23 b(In)15 b(this)h(section)g(w)o +(e)g(will)e(sho)o(w)h(ho)o(w)g(to)h(generate)g(directly)g(executable) +-42 435 y(scanners)22 b(whic)o(h)d(not)g(only)g(a)o(v)o(oid)f(suc)o(h)i +(restrictions,)h(but)f(are)g(also)e(faster)i(and)f(usually)g(smaller.) +33 b(The)19 b(approac)o(h)-42 485 y(presen)o(ted)f(here)f(has)f(the)g +(added)g(b)q(ene\014t)h(that)f(ev)o(en)g(faster)h(scanners)g(can)f(b)q +(e)g(easily)f(b)q(e)i(created,)g(at)e(the)i(exp)q(ense)g(of)-42 +535 y(increased)f(co)q(de)e(size,)h(b)o(y)e(using)h(a)f(tec)o(hnique)i +(akin)e(to)h(lo)q(op)f(unrolling.)-42 651 y Fj(3.1)56 +b(Constructing)19 b(a)g(DF)-6 b(A)-42 728 y Fr(The)15 +b(\014rst)g(step)g(in)f(generating)h(a)f(directly)g(executable)h +(scanner)h(is)e(to)g(construct)i(a)e(DF)-5 b(A)15 b(that)f(recognizes)i +(the)e(regular)-42 778 y(expressions)g(in)e(the)h(sp)q(eci\014cation.) +18 b(Figure)12 b(3)g(presen)o(ts)i(a)e(DF)-5 b(A)13 b(that)f +(recognizes)h(the)g(regular)f(expressions)i(in)e(Figure)g(2.)-42 +828 y(One)18 b(p)q(ossible)f(algorithm)e(for)h(constructing)i(suc)o(h)g +(a)e(DF)-5 b(A)18 b(can)f(b)q(e)g(found)g(in)f([1].)26 +b(Giv)o(en)16 b(suc)o(h)i(a)f(DF)-5 b(A,)16 b(the)i(task)f(of)p +-42 864 780 2 v 5 891 a Fn(4)22 903 y Fo(These)11 b(assumptions)e(and)h +(restrictions)f(are)i(discussed)e(in)j(more)e(detail)g(in)h(Sections)e +(3.3.1)i(and)f(5.1.)923 2748 y Fr(4)p eop +%%Page: 5 5 +5 4 bop -42 195 a Fr(scanning)14 b(the)h(input)f(can)g(b)q(e)g +(expressed)i(as)e(follo)o(ws:)125 278 y(Starting)i(from)g(the)i(start)g +(state,)g(mo)o(v)o(e)e(from)f(state)j(to)f(state)h(along)e(transitions) +i(lab)q(eled)f(with)g(con-)62 328 y(secutiv)o(e)f(c)o(haracters)h(from) +c(the)i(input.)21 b(When)15 b(no)f(further)i(transitions)f(can)g(b)q(e) +g(made,)e(bac)o(ktrac)o(k)i(to)g(the)62 378 y(last)h(accepting)g +(state,)h(sa)o(y)f Fl(q)q Fr(.)24 b(The)16 b(path)g(to)f +Fl(q)i Fr(sp)q(ells)g(the)f(next)g(tok)o(en)g(and)g(the)g(rule)h(asso)q +(ciated)f(with)g Fl(q)62 428 y Fr(determines)e(the)h(co)q(de)g(to)e(b)q +(e)i(executed.)-42 511 y(As)d(a)e(result,)h(the)h(problem)d(of)h +(generating)h(scanners)h(essen)o(tially)f(reduces)h(to)f(the)g(problem) +e(of)h(generating)h(an)f(executable)-42 560 y(represen)o(tation)16 +b(for)d(a)h(DF)-5 b(A.)-42 677 y Fj(3.2)56 b(Generating)18 +b(Co)r(de)-42 753 y Fr(If)g(w)o(e)g(assume)g(that)g(the)h(input)f(is)g +(en)o(tirely)g(con)o(tained)g(in)g(a)f(single)h(bu\013er)h(then)g +(generating)f(co)q(de)h(for)f(the)g(DF)-5 b(A)19 b(is)-42 +803 y(relativ)o(ely)13 b(straigh)o(tforw)o(ard,)f(as)h(is)g +(illustrated)g(b)o(y)f(the)i(co)q(de)g(templates)e(in)h(Figure)g(4.)35 +b(Note)14 b(that)f(the)g(only)g(di\013erence)p 575 863 +717 2 v 575 912 2 50 v 856 897 a Fi(Pr)n(olo)n(gue)p +1290 912 V 575 914 717 2 v 575 964 2 50 v 720 949 a Fm(int)21 +b(yyaccept;)p 1290 964 V 575 1014 V 720 999 a(goto)g(M)p +Fi(start)p Fm(;)p 1290 1014 V 575 1063 V 720 1049 a(fin:)g(YYCURSOR)f +(=)i(YYMARKER;)p 1290 1063 V 575 1113 V 720 1098 a(switch\(yyaccept\))p +Fk(f)p 1290 1113 V 575 1163 V 807 1148 a Fl(:)7 b(:)g(:)p +1290 1163 V 575 1213 V 602 1198 a Fm(A)p Fl(n)p Fm(:)93 +b(case)21 b Fl(n)p Fm(:)43 b Fi(action)p Fr(\()p Fl(n)p +Fr(\))p Fm(;)p 1290 1213 V 575 1263 V 807 1248 a Fl(:)7 +b(:)g(:)p 1290 1263 V 575 1313 V 720 1298 a Fk(g)p 1290 +1313 V 575 1362 V 720 1347 a Fi(c)n(o)n(de)15 b(for)g(states)p +1290 1362 V 575 1364 717 2 v 204 1370 720 2 v 204 1420 +2 50 v 346 1405 a(Co)n(de)g(for)f(ac)n(c)n(epting)h(state)p +921 1420 V 204 1421 720 2 v 204 1471 2 50 v 230 1456 +a Fm(L)p Fl(q)q Fm(:)50 b(++YYCURSOR;)p 921 1471 V 204 +1521 V 344 1506 a(yyaccept)20 b(=)h Fi(rule)p Fr(\()p +Fl(q)q Fr(\))p Fm(;)p 921 1521 V 204 1571 V 344 1556 +a(YYMARKER)f(=)h(YYCURSOR;)p 921 1571 V 204 1621 V 230 +1606 a(M)p Fl(q)q Fm(:)50 b(switch\(*YYCURSO)o(R\))p +Fk(f)p 921 1621 V 204 1670 V 431 1655 a Fl(:)7 b(:)g(:)p +921 1670 V 204 1720 V 387 1705 a Fm(case)21 b Fl(c)p +Fm(:)43 b(goto)21 b(L)p Fi(goto)q Fr(\()p Fl(q)q(;)7 +b(c)p Fr(\))p Fm(;)p 921 1720 V 204 1770 V 431 1755 a +Fl(:)g(:)g(:)p 921 1770 V 204 1820 V 387 1805 a Fm(default:)42 +b(goto)21 b(fin;)p 921 1820 V 204 1870 V 344 1855 a Fk(g)p +921 1870 V 204 1871 720 2 v 944 1370 V 944 1420 2 50 +v 1045 1405 a Fi(Co)n(de)15 b(for)g(non-ac)n(c)n(epting)h(state)p +1662 1420 V 944 1421 720 2 v 944 1471 2 50 v 971 1456 +a Fm(L)p Fl(q)q Fm(:)49 b(++YYCURSOR;)p 1662 1471 V 944 +1521 V 1662 1521 V 944 1571 V 1662 1571 V 944 1621 V +971 1606 a(M)p Fl(q)q Fm(:)g(switch\(*YYCURSOR\))p Fk(f)p +1662 1621 V 944 1670 V 1172 1655 a Fl(:)7 b(:)g(:)p 1662 +1670 V 944 1720 V 1128 1705 a Fm(case)21 b Fl(c)p Fm(:)43 +b(goto)21 b(L)p Fi(goto)p Fr(\()p Fl(q)q(;)7 b(c)p Fr(\))p +Fm(;)p 1662 1720 V 944 1770 V 1172 1755 a Fl(:)g(:)g(:)p +1662 1770 V 944 1820 V 1128 1805 a Fm(default:)42 b(goto)21 +b(fin;)p 1662 1820 V 944 1870 V 1084 1855 a Fk(g)p 1662 +1870 V 944 1871 720 2 v 108 1946 a Fr(Figure)g(4:)30 +b(Directly)20 b(executable)h(scanner.)38 b(The)20 b(co)q(de)h +(generated)g(for)f(a)g(scanner)h(consists)g(of)f(a)108 +1996 y(prologue)12 b(follo)o(w)o(ed)f(b)o(y)h(co)q(de)i(for)e(eac)o(h)h +(state.)18 b Fi(start)11 b Fr(is)i(the)g(start)g(state.)18 +b Fi(action)p Fr(\()p Fl(n)p Fr(\))13 b(denotes)h(the)f(co)q(de)108 +2045 y(asso)q(ciated)h(with)e(rule)h Fl(n)p Fr(,)f Fi(goto)p +Fr(\()p Fl(q)q(;)7 b(c)p Fr(\))12 b(denotes)i(the)f(state)g(reac)o(hed) +h(from)d(state)i Fl(q)h Fr(along)d(the)i(transition)108 +2095 y(lab)q(eled)18 b(with)e Fl(c)h Fr(and)g Fi(rule)p +Fr(\()p Fl(q)q Fr(\))g(denotes)i(the)e(rule)h(asso)q(ciated)g(with)e +(state)i Fl(q)q Fr(.)28 b Fm(yyaccept)16 b Fr(is)h(used)h(to)108 +2145 y(sa)o(v)o(e)d(bac)o(ktrac)o(king)e(information.)i(The)g +Fm(M)p Fr(-lab)q(els)e(will)f(b)q(e)j(used)g(in)e(section)i(3.4.2.)-42 +2245 y(b)q(et)o(w)o(een)j(the)f(templates)f(for)g(accepting)g(and)h +(non-accepting)f(states)i(is)e(that)g(the)h(accepting)g(states)g(ha)o +(v)o(e)f(additional)-42 2294 y(co)q(de)e(to)f(sa)o(v)o(e)g(bac)o(ktrac) +o(king)f(information.)j(Figure)e(5)g(sho)o(ws)g(co)q(de)h(that)f(migh)o +(t)d(b)q(e)k(generated)g(for)f(state)g(1)g(in)f(Figure)h(3.)-42 +2460 y Fj(3.3)56 b(Bu\013ering)-42 2537 y Fr(Complications)13 +b(arise)i(when)g(the)g(input)g(is)g(not)f(con)o(tained)h(in)g(a)f +(single)g(bu\013er:)21 b(additional)13 b(co)q(de)j(is)e(needed)j(for)d +(\014lling)-42 2587 y(the)h(bu\013er)g(as)f(necessary)m(.)923 +2748 y(5)p eop +%%Page: 6 6 +6 5 bop 647 188 a Fm(L1:)49 b(++YYCURSOR;)762 238 y(yyaccept)20 +b(=)i(4;)762 288 y(YYMARKER)e(=)i(YYCURSOR;)647 338 y(M1:)49 +b(switch\(*YYCURSOR\))p Fk(f)806 388 y Fm(case)21 b('a':)43 +b(goto)21 b(L6;)849 438 y Fl(:)7 b(:)g(:)806 487 y Fm(case)21 +b('q':)43 b(goto)21 b(L6;)806 537 y(case)g('r':)43 b(goto)21 +b(L2;)806 587 y(case)g('s':)43 b(goto)21 b(L6;)849 637 +y Fl(:)7 b(:)g(:)806 687 y Fm(case)21 b('z':)43 b(goto)21 +b(L6;)806 736 y(default:)42 b(goto)21 b(fin;)762 786 +y Fk(g)690 876 y Fr(Figure)14 b(5:)k(Co)q(de)c(for)g(state)g(1.)505 +968 y Fm(L6:)50 b(++YYCURSOR;)621 1018 y(if\(YYLIMIT)19 +b(==)j(YYCURSOR\))e(YYFILL\(1\);)621 1068 y(yyaccept)g(=)h(4;)621 +1118 y(YYMARKER)f(=)h(YYCURSOR;)505 1168 y(M6:)50 b(switch\(*YYCURSO)o +(R\))p Fk(f)708 1217 y Fl(:)7 b(:)g(:)621 1267 y Fk(g)690 +1357 y Fr(Figure)14 b(6:)k(Co)q(de)c(for)g(state)g(6.)-42 +1489 y Fh(3.3.1)48 b(The)16 b(Sen)o(tinel)c(Metho)q(d)-42 +1566 y Fr(Most)20 b(scanner)g(generators)g(use)g(the)g(sen)o(tinel)f +(metho)q(d)g([1)o(])f(to)h(determine)g(when)h(the)f(bu\013er)i(needs)f +(\014lling.)32 b(In)19 b(the)-42 1616 y(simplest)d(case,)h(a)f(sym)o(b) +q(ol)f(that)h(do)q(es)i(not)e(app)q(ear)h(in)f(v)n(alid)f(input)h(is)g +(c)o(hosen)h(as)g(the)g(sen)o(tinel)g(c)o(haracter.)26 +b(An)17 b(extra)-42 1666 y(state)12 b(is)f(added)g(to)g(the)h(DF)-5 +b(A)11 b(and)g(transitions)f(to)h(this)g(state)h(on)f(the)g(sen)o +(tinel)h(sym)o(b)q(ol)d(are)i(added)g(to)g(the)h(original)d(states.)-42 +1715 y(When)16 b(the)g(DF)-5 b(A)16 b(arriv)o(es)f(in)g(this)h(new)f +(state)i(it)e(is)g(time)f(to)h(re\014ll)g(the)h(bu\013er.)23 +b(After)16 b(the)g(bu\013er)h(is)e(re\014lled,)g(scanning)-42 +1765 y(m)o(ust)h(b)q(e)g(restarted)i(in)e(the)h(previous)f(state.)26 +b(Unfortunately)m(,)16 b(this)g(is)g(not)g(p)q(ossible)g(with)g(the)h +(approac)o(h)f(outlined)g(in)-42 1815 y(Figure)j(4:)26 +b(the)19 b(necessary)h(information)15 b(is)j(simply)e(not)i(a)o(v)n +(ailable.)28 b(Co)q(de)19 b(could)f(b)q(e)g(added)h(to)f(eac)o(h)g +(state)h(to)f(sa)o(v)o(e)-42 1865 y(the)e(necessary)g(information)c +(but)j(this)g(w)o(ould)e(result)j(in)e(slo)o(w)o(er)h(and)f(larger)h +(scanners.)22 b(GLA)14 b(solv)o(es)h(this)f(problem)g(b)o(y)-42 +1915 y(ensuring)i(that)g(the)f(sen)o(tinel)h(only)f(gets)g(inserted)i +(b)q(et)o(w)o(een)g(tok)o(ens:)k(if)14 b(this)i(is)f(the)h(case,)g(the) +g(scanner)g(can)g(alw)o(a)o(ys)e(b)q(e)-42 1964 y(restarted)k(from)c +(the)j(start)f(state.)25 b(T)m(o)15 b(ensure)i(that)f(the)h(sen)o +(tinel)f(only)f(gets)i(inserted)g(b)q(et)o(w)o(een)g(tok)o(ens,)f(GLA)g +(allo)o(ws)-42 2014 y(newline)g(\(ASCI)q(I)g(LF\))g(c)o(haracters)h(to) +f(app)q(ear)g(only)f(at)g(the)h(end)g(of)f(a)h(tok)o(en)g(and)f +(disallo)o(ws)f(the)i(bu\013ering)g(of)f(partial)-42 +2064 y(lines)39 2049 y Fq(5)58 2064 y Fr(.)-42 2172 y +Fh(3.3.2)48 b(Bu\013ering)-42 2249 y Fr(RE2C-generated)17 +b(scanners)h(c)o(hec)o(k)f(if)e(the)i(bu\013er)g(needs)g(\014lling)e +(simply)f(b)o(y)i(comparing)e Fm(YYCURSOR)g Fr(and)i +Fm(YYLIMIT)p Fr(.)e(A)-42 2298 y(metho)q(d)d(inspired)g(b)o(y)g(the)h +(mec)o(hanism)d(used)j(to)f(guard)g(against)g(stac)o(k)g(o)o(v)o +(er\015o)o(w)g(in)g([17)o(])1365 2283 y Fq(6)1394 2298 +y Fr(is)g(used)i(to)e(reduce)h(the)g(amoun)o(t)-42 2348 +y(of)i(c)o(hec)o(king.)21 2398 y(Chec)o(ks)j(are)g(only)f(inserted)h +(in)f(certain)h(k)o(ey)f(states.)27 b(These)18 b(c)o(hec)o(ks)g(simply) +c(ensure)k(that)e(there)i(is)e(enough)h(input)-42 2448 +y(in)g(the)g(bu\013er)h(for)f(the)h(scan)f(to)g(pro)q(ceed)h(un)o(til)e +(the)i(next)f(k)o(ey)g(state.)28 b(F)m(or)17 b(example,)f(in)g(the)i +(DF)-5 b(A)17 b(of)f(Figure)h(3)g(it)g(is)-42 2498 y(su\016cien)o(t)e +(to)e(c)o(hec)o(k)i(that)f(there)h(are)g(at)e(least)h(6)g(c)o +(haracters)h(in)f(the)g(bu\013er)h(when)f(it)g(starts,)g(and)g(that)g +(there)h(is)f(at)f(least)-42 2547 y(one)i(c)o(haracter)g(in)e(the)i +(bu\013er)g(when)f(the)h(DF)-5 b(A)14 b(is)g(in)f(states)j(6,)d(8,)g +(or)h(10.)k(No)13 b(other)i(c)o(hec)o(ks)g(are)g(required.)k(The)14 +b(c)o(hec)o(ks)-42 2597 y(inserted)i(in)d(k)o(ey)h(states)h(are)f(of)g +(the)g(form)923 2748 y(6)p eop +%%Page: 7 7 +7 6 bop 62 195 a Fm(if\(\(YYLIMIT)20 b(-)h(YYCURSOR\))f(<)i +Fl(n)p Fm(\))f(YYFILL\()p Fl(n)p Fm(\);)-42 278 y Fr(where)c +Fl(n)f Fr(is)f(the)i(maxim)n(um)11 b(n)o(um)o(b)q(er)k(of)g(c)o +(haracters)i(that)f(can)g(b)q(e)g(consumed)g(b)q(efore)g(another)g(k)o +(ey)g(state)g(is)g(reac)o(hed.)-42 328 y(F)m(or)e(example,)e(Figure)i +(6)g(sho)o(ws)g(the)g(co)q(de)h(generated)g(for)f(state)h(6)e(in)h +(Figure)g(3.)21 378 y(A)h(set)g(of)f(k)o(ey)h(states)h(can)f(b)q(e)g +(determined)g(b)o(y)f(disco)o(v)o(ering)h(the)g(strongly-connected)h +(comp)q(onen)o(ts)e(\(SCCs\))i(of)e(the)-42 428 y(DF)-5 +b(A.)12 b(An)h(SCC)f(is)f(a)h(maxima)o(l)d(subset)k(of)f(states)h(suc)o +(h)g(that)f(there)h(exists)g(a)f(path)g(from)e(an)o(y)i(state)g(in)g +(the)h(subset)g(to)f(an)o(y)-42 477 y(other.)24 b(The)16 +b(set)g(of)f(k)o(ey)h(states)g(consists)h(of)e(all)f(of)h(the)h(states) +h(in)e(non-trivial)f(SCCs,)h(together)i(with)e(the)h(start)g(state.)-42 +527 y(Note)d(that)f(for)g(eac)o(h)g(SCC)g Fl(S)r Fr(,)h(w)o(e)f +(actually)g(only)f(ha)o(v)o(e)h(to)g(include)g(a)f(subset)j(of)d +(states)j(of)d Fl(S)k Fr(suc)o(h)e(that)f(when)g(the)h(subset)-42 +577 y(is)f(remo)o(v)o(ed,)f Fl(S)k Fr(b)q(ecomes)d(acyclic.)17 +b(Indeed,)c([17)o(])e(describ)q(es)j(a)e(simple)e(heuristic)j(for)e(c)o +(ho)q(osing)h(suc)o(h)g(a)g(subset.)18 b(Ho)o(w)o(ev)o(er,)-42 +627 y(since)c(in)f(practice)h(most)d(of)i(the)g(\(non-trivial\))f(SCCs) +h(encoun)o(tered)i(will)c(consist)j(of)e(a)h(single)g(state)g(the)h +(curren)o(t)g(v)o(ersion)-42 677 y(of)f(RE2C)g(simply)e(includes)j(all) +d(states)k(in)e(non-trivial)e(SCCs)943 662 y Fq(7)962 +677 y Fr(.)18 b(An)13 b(algorithm)e(giv)o(en)h(in)h([3)o(])g(w)o(as)g +(used)h(to)f(compute)g(the)-42 726 y(SCCs.)-42 843 y +Fj(3.4)56 b(Optimizations)-42 919 y Fr(Ev)o(en)17 b(go)q(o)q(d)f +(optimizing)e(C)i(compilers)f(can)i(b)q(e)g(coaxed)f(in)o(to)g +(generating)g(m)o(uc)o(h)f(smaller)g(and)h(sligh)o(tly)f(faster)i(co)q +(de)g(if)-42 969 y(some)c(transformations)g(are)h(\014rst)h(applied)e +(to)h(the)g(generated)i(co)q(de.)-42 1077 y Fh(3.4.1)48 +b(Eliminatin)o(g)13 b(Bac)o(ktrac)o(king)-42 1154 y Fr(Consider)19 +b(state)g(1)f(in)g(the)h(DF)-5 b(A)18 b(in)g(Figure)g(3.)31 +b(Note)19 b(that)f(since)h(all)e(of)h(the)h(transitions)f(from)e(state) +j(1)f(reac)o(h)h(only)-42 1203 y(accepting)f(states,)h(bac)o(ktrac)o +(king)f(information)c(do)q(es)k(not)f(need)i(to)e(b)q(e)h(sa)o(v)o(ed)g +(if)e(the)i(co)q(de)g(for)f(the)h Fm(default)e Fr(case)j(is)-42 +1253 y(c)o(hanged)h(to)e(go)g(directly)h(to)g(the)g(co)q(de)h(asso)q +(ciated)f(with)f(state)i(1.)32 b(The)19 b(result)h(of)e(this)h +(optimization)d(is)i(sho)o(wn)h(in)-42 1303 y(Figure)d(7.)48 +b(More)17 b(generally)m(,)e(this)h(optimization)d(can)j(b)q(e)g +(applied)f(to)h(all)f(accepting)h(states)h(whic)o(h)f(ha)o(v)o(e)g +(transitions)647 1396 y Fm(L1:)49 b(++YYCURSOR;)647 1446 +y(M1:)g(switch\(*YYCURSOR\))p Fk(f)806 1495 y Fm(case)21 +b('a':)43 b(goto)21 b(L6;)849 1545 y Fl(:)7 b(:)g(:)806 +1595 y Fm(case)21 b('q':)43 b(goto)21 b(L6;)806 1645 +y(case)g('r':)43 b(goto)21 b(L2;)806 1695 y(case)g('s':)43 +b(goto)21 b(L6;)849 1744 y Fl(:)7 b(:)g(:)806 1794 y +Fm(case)21 b('z':)43 b(goto)21 b(L6;)806 1844 y(default:)42 +b(goto)21 b(A4;)762 1894 y Fk(g)419 1983 y Fr(Figure)14 +b(7:)k(Co)q(de)c(for)g(state)g(1)g(with)g(bac)o(ktrac)o(king)f +(eliminated.)-42 2083 y(only)h(to)f(accepting)i(states.)-42 +2191 y Fh(3.4.2)48 b(Optimizing)12 b Fm(switch)p Fh(es)-42 +2268 y Fr(Most)21 b(C)g(compilers)f(will)f(generate)j(either)f(a)g +(jump)e(table)h(or)h(a)g(set)g(of)f Fm(if)g Fr(statemen)o(ts)h(for)g(a) +f Fm(switch)g Fr(statemen)o(t)-42 2317 y(dep)q(ending)e(on)e(the)i +(distribution)e(of)g(the)i Fm(case)e Fr(lab)q(els.)26 +b(In)17 b(man)o(y)e(compilers)h(the)h(decision)g(as)g(to)g(whic)o(h)g +(metho)q(d)f(to)-42 2367 y(use)j(is)f(biased)f(to)o(w)o(ards)h +(generating)g(jump)e(tables)i(since)g(in)g(most)e(cases)j(this)f +(results)h(in)e(faster)h(alb)q(eit)f(larger)h(co)q(de.)-42 +2417 y(Ho)o(w)o(ev)o(er,)c(exp)q(erience)h(with)e(directly)h +(executable)h(scanners)g(has)e(sho)o(wn,)g(that)g(replacing)h(man)o(y)d +(of)i(these)h(jump)e(tables)p -42 2452 780 2 v 5 2478 +a Fn(5)22 2490 y Fo(If)f(the)g(input)f(con)o(tains)g(no)h(newlines,)f +(a)h(GLA)h(scanner)e(will)h(attempt)f(to)h(bu\013er)f(the)g(en)o(tire)g +(input)h(stream.)5 2518 y Fn(6)22 2530 y Fo(The)h(problem)d(of)i +(detecting)e(stac)o(k)h(o)o(v)o(er\015o)o(w)g(in)i(LR)f(parsers)f(is)i +(probably)d(b)q(est)i(left)f(to)h(hardw)o(are)f(mec)o(hanisms)f([12)o +(].)5 2558 y Fn(7)22 2569 y Fo(It)i(should)f(b)q(e)h(noted)f(that)g +(\014nding)f(the)i(minimal)e(set)i(of)g(states)f(to)h(remo)o(v)o(e)f +(from)g(an)h(SCC)h(in)f(order)f(to)h(render)f(it)h(acyclic)e(is)j +(equiv)n(alen)o(t)-42 2609 y(to)g(the)e(FEEDBA)o(CK)j(VER)m(TEX)h(SET)d +(problem)f(whic)o(h)h(is)g(NP-complete)e([6].)923 2748 +y Fr(7)p eop +%%Page: 8 8 +8 7 bop -42 195 a Fr(with)12 b Fm(if)g Fr(statemen)o(ts)g(results)h(in) +f(scanners)i(whic)o(h)d(are)i(m)o(uc)o(h)e(smaller,)f(and)i +(surprisingly)m(,)f(in)h(some)f(cases)i(sligh)o(tly)e(faster)-42 +245 y(as)h(w)o(ell)78 230 y Fq(8)96 245 y Fr(.)17 b(As)c(a)e(result,)h +(the)h(capabilit)o(y)d(of)h(replacing)g(a)h Fm(switch)e +Fr(statemen)o(t)i(with)f Fm(if)g Fr(statemen)o(ts)h(w)o(as)g(added)g +(to)f(RE2C.)21 295 y(RE2C)j(bases)j(its)e(decision)g(on)g(whether)i(to) +e(generate)i(a)d Fm(switch)g Fr(statemen)o(t)i(or)f(to)g(replace)h(it)f +(with)g Fm(if)p Fr(s)g(solely)g(on)-42 345 y(the)j(densit)o(y)162 +329 y Fq(9)198 345 y Fr(of)f(the)g Fm(switch)f Fr(statemen)o(t.)27 +b(It)18 b(is)e(surprising)i(that)f(suc)o(h)h(a)e(simple)g(heuristic)i +(w)o(orks)f(w)o(ell.)27 b(F)m(or)16 b(more)-42 394 y(esoteric)h +(applications)e(in)g(whic)o(h)h(the)g(input)f(alphab)q(et)h(is)f(not)h +(a)f(simple)f(in)o(terv)n(al)h(RE2C)g(has)g(the)i(adv)n(an)o(tage)d(in) +h(that)-42 444 y(there)f(is)e(no)g(pro)o(vision)f(for)h(don't)f(care)i +(en)o(tries)g(in)f(a)g Fm(switch)f Fr(statemen)o(t:)17 +b(if)11 b(no)h Fm(case)f Fr(matc)o(hes)h(none)g(of)f(the)i(statemen)o +(ts)-42 494 y(in)i(the)g Fm(switch)e Fr(m)o(ust)g(b)q(e)i(executed.)22 +b(Ho)o(w)o(ev)o(er,)15 b(for)f(the)h(examples)f(in)g(T)m(able)f(1)h +(this)h(is)f(not)h(so:)k(RE2C)14 b(simply)f(do)q(es)i(a)-42 +544 y(b)q(etter)j(job)d(of)g(generating)g(co)q(de)i(for)e +Fm(switch)f Fr(statemen)o(ts)i(than)g(the)g(compiler.)21 +b([18)o(],)15 b([11)o(],)g(and)h([2)o(])f(also)g(address)i(the)-42 +594 y(problem)c(of)g(generating)h(go)q(o)q(d)g(co)q(de)h(for)e +Fm(switch)g Fr(statemen)o(ts.)-42 702 y Fh(Replacing)18 +b Fm(switch)p Fh(es)g(with)g Fm(if)p Fh(s)41 b Fr(When)17 +b(replacing)g(a)f Fm(switch)g Fr(statemen)o(t)h(with)g +Fm(if)f Fr(statemen)o(ts,)i(it)f(is)f(useful)i(to)-42 +751 y(sort)g(the)f Fm(case)p Fr(s)f(b)o(y)h(lab)q(el)f(and)g(then)h +(group)g(them)f(according)h(to)f(rule)h(in)o(to)f(subranges,)i(as)f +(illustrated)f(in)g(Figure)h(8.)-42 801 y(RE2C)c(replaces)h(a)f +Fm(switch)f Fr(with)g(either)i(a)f(linear)f(or)h(binary)g(searc)o(h,)h +(dep)q(ending)f(on)g(the)h(n)o(um)o(b)q(er)e(of)g(subranges)i(in)f(the) +467 894 y Fm(switch\(*YYCURSOR\))p Fk(f)511 944 y Fm(case)21 +b('\\)o(000':)49 b Fl(:)7 b(:)g(:)20 b Fm(case)h('/':)115 +b(goto)21 b(L11;)576 994 y(case)g('0':)431 b(goto)21 +b(L7;)576 1043 y(case)g('1':)49 b Fl(:)7 b(:)g(:)20 b +Fm(case)h('9':)115 b(goto)21 b(L8;)576 1093 y(case)g(':':)49 +b Fl(:)7 b(:)g(:)20 b Fm(case)h('`':)115 b(goto)21 b(L11;)576 +1143 y(case)g('a':)49 b Fl(:)7 b(:)g(:)20 b Fm(case)h('o':)115 +b(goto)21 b(L6;)576 1193 y(case)g('p':)431 b(goto)21 +b(L1;)576 1243 y(case)g('r':)49 b Fl(:)7 b(:)g(:)20 b +Fm(case)h('z':)115 b(goto)21 b(L6;)577 1292 y(case)g(')p +Fk(f)p Fm(':)49 b Fl(:)7 b(:)g(:)20 b Fm(case)h('\\377':)49 +b(goto)21 b(L11;)467 1342 y Fk(g)672 1432 y Fr(Figure)14 +b(8:)j Fm(switch)c Fr(for)g(state)i(0.)-42 1531 y Fm(switch)p +Fr(.)i(If)d(there)h(are)f(only)f(a)h(few)g(subranges)h(a)e(linear)h +(searc)o(h)h(is)f(generated;)g(otherwise,)h(a)e(binary)h(searc)o(h)h +(is)f(used.)21 1581 y(Figure)f(9)f(and)g(Figure)h(10)f(sho)o(w)h +(linear)f(and)h(binary)f(searc)o(hes,)i(resp)q(ectiv)o(ely)m(,)g(that)f +(could)f(b)q(e)h(used)h(to)e(replace)52 b(the)607 1674 +y Fm(if\(*YYCURSOR)19 b(<=)i('/'\))g(goto)g(L11;)607 +1724 y(if\(*YYCURSOR)e(<=)i('0'\))g(goto)g(L7;)607 1773 +y(if\(*YYCURSOR)e(<=)i('9'\))g(goto)g(L8;)607 1823 y(if\(*YYCURSOR)e +(<=)i('`'\))g(goto)g(L11;)607 1873 y(if\(*YYCURSOR)e(==)i('p'\))g(goto) +g(L1;)607 1923 y(if\(*YYCURSOR)e(<=)i('z'\))g(goto)g(L6;)607 +1973 y(goto)g(L11;)477 2062 y Fr(Figure)14 b(9:)k(Linear)c(lo)q(okup)f +(co)q(de)h(sequence)i(for)e(state)h(0.)p -42 2147 780 +2 v 5 2173 a Fn(8)22 2185 y Fo(See)c(T)m(able)g(1)g(for)g(examples.)5 +2213 y Fn(9)22 2225 y Fo(The)h(n)o(um)o(b)q(er)d(of)i(distinct)f +(subranges)f(divided)g(b)o(y)i(the)g(total)f(n)o(um)o(b)q(er)g(of)h +Fg(case)p Fo(s.)923 2748 y Fr(8)p eop +%%Page: 9 9 +9 8 bop 563 188 a Fm(if\(*YYCURSOR)19 b(<=)j('`'\))p +Fk(f)650 238 y Fm(if\(*YYCURSOR)d(<=)j('/'\))f(goto)g(L11;)650 +288 y(if\(*YYCURSOR)e(<=)j('0'\))f(goto)g(L7;)650 338 +y(if\(*YYCURSOR)e(<=)j('9'\))f(goto)g(L8;)650 388 y(goto)g(L11;)563 +438 y Fk(g)h Fm(else)f Fk(f)650 487 y Fm(if\(*YYCURSOR)e(==)j('p'\))f +(goto)g(L1;)650 537 y(if\(*YYCURSOR)e(<=)j('z'\))f(goto)g(L6;)650 +587 y(goto)g(L11;)563 637 y Fk(g)463 726 y Fr(Figure)14 +b(10:)k(Binary)13 b(lo)q(okup)h(co)q(de)g(sequence)i(for)e(state)g(0.) +-42 826 y Fm(switch)e Fr(in)g(Figure)h(8.)k(Note)d(in)e(particular)g +(the)i(comparison)d(for)i(the)g(\\)p Fm(p)p Fr(")f(in)g(Figure)h(9.)k +(This)c(optimization)d(eliminates)-42 876 y(a)k(comparison)f(eac)o(h)i +(time)d(it)i(is)g(applied.)k(Also)c(note)h(that)f(no)g(comparisons)f +(are)i(required)g(at)f(the)g(top)g(and)g(b)q(ottom)f(of)-42 +925 y(the)i(range.)-42 1033 y Fh(Simplifyi)o(ng)j Fm(switch)p +Fh(es)40 b Fr(As)19 b(a)f(general)g(rule,)i(b)q(etter)g(replacemen)o(t) +e(co)q(de)h(can)g(b)q(e)g(generated)h(for)e(a)g Fm(switch)f +Fr(if)h(it)-42 1083 y(con)o(tains)g(few)o(er)g(subranges.)31 +b(One)18 b(w)o(a)o(y)f(of)g(reducing)h(the)g(n)o(um)o(b)q(er)f(of)g +(subranges)i(in)e(a)g Fm(switch)p Fr(,)g(at)g(the)i(exp)q(ense)g(of)-42 +1133 y(some)c(sp)q(eed,)j(is)d(to)h(lo)q(cate)g(a)f Fi(b)n(ase)h +Fm(switch)f Fr(whic)o(h)g(is)h(v)o(ery)g(similar)d(and)j(then)g +(replace)h(the)f(co)q(de)h(for)e(all)f(cases)k(whic)o(h)-42 +1183 y(app)q(ear)d(iden)o(tically)d(in)i(the)g(base)h +Fm(switch)d Fr(with)i(a)f Fm(goto)g Fr(to)h(\(the)h(co)q(de)f +(generated)i(for\))d(the)i(base)f Fm(switch)p Fr(.)j(RE2C)c(uses)-42 +1233 y(this)18 b(optimization)d(to)i(go)q(o)q(d)g(adv)n(an)o(tage)g +(when)h(generating)g(co)q(de)g(in)f(the)h(transitions)g(of)f(states)i +(used)f(for)f(matc)o(hing)-42 1282 y(k)o(eyw)o(ords.)i(F)m(or)12 +b(example,)f(note)j(that)f(the)g Fm(switch)p Fr(es)f(for)h(states)h(1)f +(through)g(4)f(di\013er)h(from)f(the)h Fm(switch)f Fr(of)g(state)i(6)e +(only)-42 1332 y(on)i(\\)p Fm(r)p Fr(",)f(\\)p Fm(i)p +Fr(",)g(\\)p Fm(n)p Fr(",)f(and)i(\\)p Fm(t)p Fr(",)f(resp)q(ectiv)o +(ely)m(.)19 b(Figure)14 b(11)f(sho)o(ws)h(the)h(co)q(de)g(generated)g +(for)e(these)j(states.)37 b(Another)15 b(w)o(a)o(y)560 +1425 y Fm(L1:)49 b(++YYCURSOR;)560 1475 y(M1:)g(if\(*YYCURSOR)19 +b(!=)j('r'\))f(goto)g(M6;)560 1525 y(L2:)49 b(++YYCURSOR;)560 +1574 y(M2:)g(if\(*YYCURSOR)19 b(!=)j('i'\))f(goto)g(M6;)560 +1624 y(L3:)49 b(++YYCURSOR;)560 1674 y(M3:)g(if\(*YYCURSOR)19 +b(!=)j('n'\))f(goto)g(M6;)560 1724 y(L4:)49 b(++YYCURSOR;)560 +1774 y(M4:)g(if\(*YYCURSOR)19 b(!=)j('t'\))f(goto)g(M6;)675 +1824 y(goto)g(L5;)444 1913 y Fr(Figure)14 b(11:)j(Co)q(de)d(for)g +(states)h(1{4)e(after)h(all)f(optimizations.)-42 2013 +y(of)h(implemen)o(ting)d(this)j(optimization)e(is)i(to)g(construct)i(a) +e(tunnel)g(automaton)f([9)o(])h(from)e(the)j(DF)-5 b(A,)14 +b(and)g(then)h(generate)-42 2062 y(co)q(de)g(from)d(the)j(tunnel)f +(automaton.)-42 2170 y Fh(Common)i(Sub)q(expression)d(Eliminatio)o(n)38 +b Fr(Man)o(y)14 b(compilers)g(will)f(miss)g(the)i(fact)f(that)h +Fm(*YYCURSOR)d Fr(in)i(Figures)h(9)-42 2220 y(and)e(10)f(should)h(b)q +(e)g(loaded)f(in)o(to)g(a)h(register.)19 b(Most)13 b(can)f(b)q(e)i +(coaxed)f(to)f(do)h(so)g(b)o(y)f(\014rst)i(assigning)e +Fm(*YYCURSOR)e Fr(to)j(a)f(lo)q(cal)-42 2270 y(v)n(ariable.)-42 +2407 y Fs(4)67 b(Exp)r(erimen)n(tal)25 b(Results)-42 +2498 y Fr(T)m(able)16 b(1)h(compares)f(t)o(w)o(o)g(RE2C-generated)h(C)g +(scanners)h(with)e(the)i(\(hand-co)q(ded\))f(lcc)g(scanner)h([5)o(])e +(and)h(comparable)-42 2548 y(GLA-)f(and)g(\015ex-generated)i(scanners)f +(on)f(a)g(v)n(ariet)o(y)g(of)f(platforms.)48 b(It)16 +b(rep)q(orts)i(the)e(times)f(in)h(seconds)i(required)f(b)o(y)-42 +2598 y(the)e(v)n(arious)e(scanners)i(to)e(scan)h(ab)q(out)g(170,000)e +(lines)h(of)g(C)h(source.)19 b(The)14 b(5,607,820)d(b)o(yte)j(source)g +(\014le)g(used)h(essen)o(tially)923 2748 y(9)p eop +%%Page: 10 10 +10 9 bop 707 452 a Fr(time)438 b(space)328 502 y(program)p +516 517 2 50 v 82 w(user)83 b(sys)76 b(total)p 975 517 +V 82 w(text)j(data)d(bss)f(total)p 292 519 1284 2 v 860 +554 a Fi(R4000)16 b(/)f(gc)n(c2.3.3)h(-O)p 292 570 V +317 605 a Fr(\015ex)e(-Cem)p 516 620 2 50 v 71 w(10.36)p +683 620 V 50 w(0.87)p 808 620 V 71 w(11.23)p 975 620 +V 71 w(5200)p 1130 620 V 71 w(4192)p 1285 620 V 92 w(48)p +1420 620 V 72 w(9440)357 655 y(\015ex)h(-Cf)p 516 670 +V 92 w(5.44)p 683 670 V 50 w(0.72)p 808 670 V 92 w(6.16)p +975 670 V 71 w(4688)p 1130 670 V 51 w(64384)p 1285 670 +V 91 w(48)p 1420 670 V 51 w(69120)443 705 y(lcc)p 516 +720 V 93 w(3.19)p 683 720 V 50 w(0.67)p 808 720 V 92 +w(3.86)p 975 720 V 71 w(7328)p 1130 720 V 71 w(1216)p +1285 720 V 51 w(8256)p 1420 720 V 50 w(16800)438 754 +y(gla)p 516 769 V 92 w(2.89)p 683 769 V 50 w(0.63)p 808 +769 V 92 w(3.52)p 975 769 V 50 w(11552)p 1130 769 V 71 +w(3056)p 1285 769 V 72 w(144)p 1420 769 V 50 w(14752)417 +804 y(re2c)p 516 819 V 94 w(2.54)p 683 819 V 50 w(0.68)p +808 819 V 92 w(3.22)p 975 819 V 50 w(13264)p 1130 819 +V 92 w(512)p 1285 819 V 113 w(0)p 1420 819 V 51 w(13776)373 +854 y(re2c)g(-s)p 516 869 V 93 w(2.38)p 683 869 V 50 +w(0.67)p 808 869 V 92 w(3.05)p 975 869 V 50 w(11056)p +1130 869 V 71 w(4528)p 1285 869 V 113 w(0)p 1420 869 +V 51 w(15584)p 292 871 1284 2 v 737 906 a Fi(R4000)h(/)f(c)n(c2.11.2)g +(-O)g(-Olimit)e(5000)p 292 922 V 317 957 a Fr(\015ex)h(-Cem)p +516 972 2 50 v 92 w(9.97)p 683 972 V 50 w(0.89)p 808 +972 V 71 w(10.86)p 975 972 V 71 w(4704)p 1130 972 V 71 +w(4240)p 1285 972 V 92 w(32)p 1420 972 V 72 w(8976)357 +1007 y(\015ex)h(-Cf)p 516 1022 V 92 w(6.19)p 683 1022 +V 50 w(0.72)p 808 1022 V 92 w(6.91)p 975 1022 V 71 w(4256)p +1130 1022 V 51 w(64432)p 1285 1022 V 91 w(32)p 1420 1022 +V 51 w(68720)443 1057 y(lcc)p 516 1072 V 93 w(2.74)p +683 1072 V 50 w(0.72)p 808 1072 V 92 w(3.46)p 975 1072 +V 71 w(9664)p 1130 1072 V 92 w(864)p 1285 1072 V 51 w(8256)p +1420 1072 V 50 w(18784)438 1106 y(gla)p 516 1121 V 92 +w(2.46)p 683 1121 V 50 w(0.69)p 808 1121 V 92 w(3.15)p +975 1121 V 50 w(19232)p 1130 1121 V 71 w(2992)p 1285 +1121 V 72 w(128)p 1420 1121 V 50 w(22352)417 1156 y(re2c)p +516 1171 V 94 w(2.97)p 683 1171 V 50 w(0.63)p 808 1171 +V 92 w(3.60)p 975 1171 V 50 w(15088)p 1130 1171 V 92 +w(528)p 1285 1171 V 113 w(0)p 1420 1171 V 51 w(15616)373 +1206 y(re2c)g(-s)p 516 1221 V 93 w(2.94)p 683 1221 V +50 w(0.61)p 808 1221 V 92 w(3.55)p 975 1221 V 50 w(16080)p +1130 1221 V 51 w(11808)p 1285 1221 V 112 w(0)p 1420 1221 +V 51 w(27888)p 292 1223 1284 2 v 849 1258 a Fi(SP)m(AR)o(C)g(/)g(gc)n +(c2.3.3)g(-O)p 292 1274 V 317 1309 a Fr(\015ex)f(-Cem)p +516 1324 2 50 v 71 w(16.03)p 683 1324 V 50 w(2.78)p 808 +1324 V 71 w(18.81)p 975 1324 V 71 w(8992)p 1130 1324 +V 113 w(24)p 1285 1324 V 92 w(48)p 1420 1324 V 72 w(9064)357 +1359 y(\015ex)h(-Cf)p 516 1374 V 92 w(7.84)p 683 1374 +V 50 w(2.69)p 808 1374 V 71 w(10.53)p 975 1374 V 71 w(6560)p +1130 1374 V 51 w(62232)p 1285 1374 V 91 w(48)p 1420 1374 +V 51 w(68840)443 1409 y(lcc)p 516 1424 V 93 w(4.46)p +683 1424 V 50 w(2.01)p 808 1424 V 92 w(6.47)p 975 1424 +V 71 w(7800)p 1130 1424 V 92 w(384)p 1285 1424 V 51 w(8256)p +1420 1424 V 50 w(16440)438 1459 y(gla)p 516 1473 V 92 +w(4.08)p 683 1473 V 50 w(1.56)p 808 1473 V 92 w(5.64)p +975 1473 V 50 w(10864)p 1130 1473 V 71 w(2168)p 1285 +1473 V 72 w(136)p 1420 1473 V 50 w(13168)417 1508 y(re2c)p +516 1523 V 94 w(3.67)p 683 1523 V 50 w(1.76)p 808 1523 +V 92 w(5.43)p 975 1523 V 50 w(13552)p 1130 1523 V 134 +w(0)p 1285 1523 V 113 w(0)p 1420 1523 V 51 w(13552)373 +1558 y(re2c)g(-s)p 516 1573 V 93 w(3.48)p 683 1573 V +50 w(1.70)p 808 1573 V 92 w(5.18)p 975 1573 V 50 w(15464)p +1130 1573 V 134 w(0)p 1285 1573 V 113 w(0)p 1420 1573 +V 51 w(15464)p 292 1575 1284 2 v 880 1610 a Fi(i486)g(/)g(gc)n(c2.4.5)g +(-O)p 292 1626 V 317 1661 a Fr(\015ex)f(-Cem)p 516 1676 +2 50 v 71 w(21.86)p 683 1676 V 50 w(1.26)p 808 1676 V +71 w(23.12)p 975 1676 V 71 w(8536)p 1130 1676 V 113 w(20)p +1285 1676 V 92 w(24)p 1420 1676 V 72 w(8580)357 1711 +y(\015ex)h(-Cf)p 516 1726 V 92 w(9.12)p 683 1726 V 50 +w(1.18)p 808 1726 V 71 w(10.30)p 975 1726 V 71 w(6200)p +1130 1726 V 51 w(62228)p 1285 1726 V 91 w(24)p 1420 1726 +V 51 w(68452)443 1761 y(lcc)p 516 1776 V 93 w(5.45)p +683 1776 V 50 w(1.22)p 808 1776 V 92 w(6.67)p 975 1776 +V 71 w(5924)p 1130 1776 V 92 w(384)p 1285 1776 V 51 w(8240)p +1420 1776 V 50 w(14548)438 1811 y(gla)p 516 1825 V 92 +w(5.11)p 683 1825 V 50 w(1.18)p 808 1825 V 92 w(6.29)p +975 1825 V 50 w(15496)p 1130 1825 V 71 w(2144)p 1285 +1825 V 72 w(108)p 1420 1825 V 50 w(17748)417 1860 y(re2c)p +516 1875 V 94 w(4.73)p 683 1875 V 50 w(1.13)p 808 1875 +V 92 w(5.86)p 975 1875 V 71 w(9800)p 1130 1875 V 134 +w(0)p 1285 1875 V 113 w(0)p 1420 1875 V 72 w(9800)373 +1910 y(re2c)g(-s)p 516 1925 V 93 w(4.85)p 683 1925 V +50 w(1.17)p 808 1925 V 92 w(6.02)p 975 1925 V 50 w(12968)p +1130 1925 V 134 w(0)p 1285 1925 V 113 w(0)p 1420 1925 +V 51 w(12968)p 292 1927 1284 2 v 871 1962 a Fi(68020)h(/)f(gc)n(c1.40)h +(-O)p 292 1978 V 317 2013 a Fr(\015ex)e(-Cem)p 516 2028 +2 50 v 50 w(117.37)p 683 2028 V 50 w(5.89)p 808 2028 +V 51 w(123.26)p 975 2028 V 70 w(7700)p 1130 2028 V 113 +w(20)p 1285 2028 V 92 w(22)p 1420 2028 V 72 w(7742)357 +2063 y(\015ex)h(-Cf)p 516 2078 V 71 w(50.93)p 683 2078 +V 50 w(5.27)p 808 2078 V 71 w(56.20)p 975 2078 V 71 w(5388)p +1130 2078 V 51 w(62228)p 1285 2078 V 91 w(22)p 1420 2078 +V 51 w(67638)443 2113 y(lcc)p 516 2128 V 72 w(33.28)p +683 2128 V 50 w(6.28)p 808 2128 V 71 w(39.56)p 975 2128 +V 71 w(4956)p 1130 2128 V 92 w(384)p 1285 2128 V 51 w(8236)p +1420 2128 V 50 w(13576)438 2163 y(gla)p 516 2177 V 71 +w(33.80)p 683 2177 V 50 w(4.20)p 808 2177 V 71 w(38.00)p +975 2177 V 50 w(13904)p 1130 2177 V 71 w(2144)p 1285 +2177 V 72 w(106)p 1420 2177 V 50 w(16154)417 2212 y(re2c)p +516 2227 V 73 w(28.92)p 683 2227 V 50 w(2.91)p 808 2227 +V 71 w(31.83)p 975 2227 V 71 w(8556)p 1130 2227 V 134 +w(0)p 1285 2227 V 113 w(0)p 1420 2227 V 72 w(8556)373 +2262 y(re2c)g(-s)p 516 2277 V 72 w(30.72)p 683 2277 V +50 w(3.19)p 808 2277 V 71 w(33.91)p 975 2277 V 71 w(9856)p +1130 2277 V 134 w(0)p 1285 2277 V 113 w(0)p 1420 2277 +V 72 w(9856)513 2352 y(T)m(able)e(1:)18 b(Comparison)12 +b(of)h(generated)j(C)d(scanners.)913 2748 y(10)p eop +%%Page: 11 11 +11 10 bop -42 195 a Fr(consists)15 b(of)d(10)h(copies)h(of)e(the)i +(source)h(to)e(James)f(Clark's)h(SGML)f(parser,)i(sgmls)1263 +180 y Fq(10)1297 195 y Fr(.)k(The)c(times)e(rep)q(orted)i(are)g(a)o(v)o +(erages)-42 245 y(for)j(10)g(trials;)h(the)g(sizes)g(rep)q(orted)h +(include)e(ev)o(erything)h(but)g(C)f(library)f(co)q(de)1251 +230 y Fq(11)1287 245 y Fr(.)28 b(\015ex)18 b(pro)o(vides)f(a)g(n)o(um)o +(b)q(er)g(of)g(table)-42 295 y(compression)e(options)g(including)f +Fm(-Cem)g Fr(for)h(tables)g(optimized)f(for)h(space,)h(and)f +Fm(-Cf)f Fr(for)h(tables)g(optimized)f(for)g(sp)q(eed.)-42 +345 y(By)f(default,)e(RE2C)h(will)f(use)h(a)g(heuristic)h(to)f(decide)h +(if)e(a)h Fm(switch)f Fr(should)h(b)q(e)g(replaced)h(with)f +Fm(if)p Fr(s:)17 b(the)c Fm(-s)e Fr(option)h(forces)-42 +394 y(RE2C)i(to)g(alw)o(a)o(ys)e(generate)k Fm(switch)p +Fr(es.)21 444 y(T)m(o)21 b(mak)o(e)g(comparisons)g(more)g(meaningful,)h +(all)e(seman)o(tic)i(pro)q(cessing)h(co)q(de)g(w)o(as)f(remo)o(v)o(ed)g +(from)e(the)j(GLA-)-42 494 y(generated)d(and)f(lcc)f(scanners,)j(and)d +(co)q(de)i(to)e(pro)o(vide)g(line)g(and)g(column)f(n)o(um)o(b)q(er)h +(information)d(w)o(as)k(added)g(to)f(the)-42 544 y(RE2C)c(sp)q +(eci\014cation.)19 b(The)14 b(remaining)e(di\013erences)k(of)d(note)h +(b)q(et)o(w)o(een)i(the)e(scanners)i(include:)21 627 +y Fk(\017)k Fr(The)15 b(\015ex-generated)g(scanners)h(do)d(not)h(pro)o +(vide)g(line)f(or)h(column)e(n)o(um)o(b)q(er)i(information.)21 +710 y Fk(\017)20 b Fr(The)15 b(GLA-generated)f(scanner)i(assumes)d +(7-bit)h(input.)21 793 y(As)e(a)g(general)g(rule,)h(the)f +(RE2C-generated)h(scanners)h(w)o(ere)f(the)f(fastest,)h(follo)o(w)o(ed) +e(b)o(y)h(the)g(GLA-generated)h(scanner)-42 843 y(and)j(then)g(the)g +(lcc)g(scanner.)24 b(The)15 b(\015ex-generated)i(scanners)h(w)o(ere)e +(signi\014can)o(tly)e(slo)o(w)o(er.)23 b(Only)15 b(the)h +(space-optimized)-42 892 y(\015ex)i(scanner)h(w)o(as)e(smaller)f(than)h +(the)h(default)f(RE2C)g(scanner,)i(and)e(only)g(b)o(y)g(a)g(narro)o(w)g +(margin.)26 b(There)19 b(are)e(some)-42 942 y(arc)o(hitectures,)j +(notably)d(the)g(IBM)h(370,)f(on)g(whic)o(h)g(table)g(driv)o(en)g +(scanners)i(will)d(probably)h(pro)q(duce)h(b)q(etter)h(results:)-42 +992 y(IBM)c(370)e(compilers)g(t)o(ypically)f(generate)j(p)q(o)q(or)f +(co)q(de)h(for)f(large)f(routines.)21 1042 y(The)22 b(v)n(arious)f +(scanners)j(and)d(input)h(\014les)g(used)h(for)e(the)i(tests)g(are)f(a) +o(v)n(ailable)e(for)h(anon)o(ymous)f(ftp)i(from)e Ff(csg.-)-42 +1092 y(u)o(w)o(aterlo)q(o.ca)10 b Fr(in)f Ff(/pub/p)q +(eter/re2c/sampler.ta)o(r.Z)p Fr(.)i(\015ex)f(is)f(a)o(v)n(ailable)e +(for)i(anon)o(ymous)e(ftp)i(from)f Ff(ftp.uu.net)i Fr(as)f +Ff(/pack)o(ages/-)-42 1142 y(gnu/\015ex-2.3.7.ta)o(r.Z)p +Fr(,)14 b(GLA)h(is)g(a)o(v)n(ailable)e(for)i(anon)o(ymous)f(ftp)h(from) +f Ff(ftp.cs.colo)o(rado.edu)i Fr(as)f(part)g(of)g(the)h(Eli)f(pac)o(k)n +(age)-42 1191 y Ff(/pub/cs/distribs/eli/Eli3.4.2.ta)o(r.Z)p +Fr(,)i(and)h(the)g(lcc)h(fron)o(t)e(end)i(is)f(a)o(v)n(ailable)e(for)h +(anon)o(ymous)g(ftp)g(from)g Ff(p)o(rinceton.edu)-42 +1241 y Fr(as)f Ff(/pub/lcc/lccfe-1.9.ta)o(r.Z)p Fr(.)g(An)f(alpha)g(v)o +(ersion)g(of)g(RE2C)g(will)f(so)q(on)i(b)q(e)g(made)e(a)o(v)n(ailable)f +(for)i(anon)o(ymous)f(ftp)h(from)-42 1291 y Ff(csg.u)o(w)o(aterlo)q +(o.ca)g Fr(as)f Ff(/pub/p)q(eter/re2c/re2c-0.5.ta)o(r.Z)p +Fr(.)-42 1428 y Fs(5)67 b(Related)23 b(W)-6 b(ork)-42 +1519 y Fr(The)18 b(k)o(ey)g(to)f(the)h(p)q(erformance)f(and)g +(\015exibilit)o(y)e(of)i(an)g(RE2C-generated)h(scanner)h(is)e(the)h +(approac)o(h)f(used)h(to)f(deter-)-42 1569 y(mine)e(when)i(the)g +(bu\013er)g(needs)g(\014lling.)23 b(In)o(terestingly)m(,)16 +b(the)h(lcc)g(scanner)g([5)o(])f(uses)h(a)f(similar)e(approac)o(h)i +(\(with)g(certain)-42 1619 y(concessions)g(to)e(k)o(eep)g(the)h(b)q(o)q +(okk)o(eeping)e(manageable.\))-42 1735 y Fj(5.1)56 b(Comparison)18 +b(With)g(GLA)-42 1812 y Fr(It)h(is)f(natural)f(to)h(compare)f(RE2C)h +(to)g(GLA)f([7])g(as)h(it)g(also)f(generates)j(directly)f(executable)g +(scanners.)32 b(RE2C)18 b(and)-42 1861 y(GLA)d(ha)o(v)o(e)g(man)o(y)e +(di\013erences)k(simply)c(b)q(ecause)j(they)g(are)f(targeted)h(for)e +(di\013eren)o(t)i(t)o(yp)q(es)g(of)e(users:)22 b(GLA)14 +b(is)h(in)o(tended)-42 1911 y(for)g(p)q(eople)h(who)f(simply)e(wish)i +(to)f(lev)o(erage)i(their)f(e\013orts)i(with)d(existing)h(to)q(ols)g +(and)g(libraries;)g(RE2C)f(is)h(in)o(tended)h(for)-42 +1961 y(p)q(eople)d(that)g(ha)o(v)o(e)f(more)g(sp)q(ecialized)h(needs)h +(and)e(are)h(willing)d(to)j(pro)o(vide)f(their)h(o)o(wn)f(supp)q(ort)h +(routines.)18 b(F)m(or)12 b(example,)-42 2011 y(GLA)h(pro)o(vides)h(a)f +(go)q(o)q(d)f(bu\013ering)i(mec)o(hanism,)c(RE2C)j(users)i(m)o(ust)d +(supply)h(their)h(o)o(wn.)j(These)d(di\013erences,)i(ho)o(w)o(ev)o(er,) +-42 2061 y(are)f(not)f(unique)f(to)h(GLA)g(and)f(ha)o(v)o(e)h(b)q(een)h +(addressed)h(for)d(the)i(most)e(part)h(in)f(previous)h(sections.)21 +2111 y(Of)j(more)f(in)o(terest)i(is)f(the)h(di\013erences)i(in)c(the)i +(co)q(de)g(that)f(RE2C)g(and)g(GLA)g(generate.)29 b(Scanners)18 +b(generated)h(b)o(y)-42 2160 y(RE2C)14 b(and)g(GLA)f(di\013er)h +(primarily)e(in)h(t)o(w)o(o)h(asp)q(ects:)19 b(ho)o(w)14 +b(they)g(determine)g(when)h(the)f(bu\013er)h(needs)g(\014lling,)d(and)i +(ho)o(w)-42 2210 y(they)h(generate)g(co)q(de)g(for)e +Fm(switch)p Fr(es.)21 2260 y(GLA)d(uses)i(the)f(ASCI)q(I)g(NUL)f(c)o +(haracter)i(as)f(the)g(sen)o(tinel)g(to)f(determine)h(when)g(the)g +(bu\013er)g(needs)h(\014lling.)j(T)m(o)10 b(impro)o(v)o(e)-42 +2310 y(the)j(sp)q(eed)h(and)e(reduce)i(the)f(size)g(of)e(the)i +(generated)g(scanners)h(GLA)e(bu\013ers)i(only)d(complete)h(lines)g +(and)g(restricts)i(tok)o(ens)-42 2360 y(to)d(those)g(that)f(do)g(not)g +(con)o(tain)g(newline)g(\(ASCI)q(I)h(LF\))f(c)o(haracters)1013 +2345 y Fq(12)1050 2360 y Fr(.)17 b(If)10 b(a)g(tok)o(en)g(with)g(an)g +(em)o(b)q(edded)h(newline)f(c)o(haracter)-42 2409 y(\(suc)o(h)k(as)f(a) +f(commen)o(t\))f(is)h(required)i(it)e(m)o(ust)f(b)q(e)j(recognized)g +(with)e(an)g(auxiliary)f(scanner)j(written)f(in)f(C.)g(This)h(co)q(de)g +(has)-42 2459 y(to)h(p)q(erform)f(the)i(bu\013ering-related)f(b)q(o)q +(okk)o(eeping)g(that)g(is)g(done)g(automatically)d(b)o(y)i +(GLA-generated)i(co)q(de.)p -42 2494 780 2 v -11 2521 +a Fn(10)22 2532 y Fo(Av)n(ailable)10 b(for)h(anon)o(ymous)d(ftp)j(from) +f Fe(ftp.uu.net)i Fo(as)f Fe(/pub/text-p)o(ro)q(cessing/sg)o(ml/sgmls-) +o(1.1.)o(ta)o(r.Z)o Fo(.)-11 2560 y Fn(11)22 2572 y Fo(The)h +(GLA-generated)c(scanner)i(sizes)h(also)f(do)h(not)g(include)f(the)g +(size)h(of)g(an)g(error)g(rep)q(orting)e(mo)q(dule)g +Fg(err.o)p Fo(.)-11 2600 y Fn(12)22 2612 y Fo(This)j(is)f(discussed)f +(in)h(more)f(detail)g(in)h(Section)f(3.3.1.)913 2748 +y Fr(11)p eop +%%Page: 12 12 +12 11 bop 21 195 a Fr(The)20 b(mec)o(hanism)e(RE2C)h(uses)i(to)f +(re\014ll)g(the)g(bu\013er)h(eliminates)d(these)k(restrictions)f(and)e +(y)o(et)i(allo)o(ws)d(RE2C)i(to)-42 245 y(generate)15 +b(faster)f(and)g(smaller)e(scanners.)19 b(RE2C)13 b(also)g(allo)o(ws)g +(b)q(oth)g(auxiliary)f(and)h(primary)f(scanners)j(to)f(b)q(e)g(sp)q +(eci\014ed)-42 295 y(using)g(regular)g(expressions.)20 +b(F)m(or)13 b(example,)f(App)q(endix)i(A)g(con)o(tains)g(an)g +(auxiliary)e(scanner)j(for)f(commen)o(ts.)21 345 y(Lik)o(e)i(RE2C,)g +(GLA)h(usually)f(replaces)i Fm(switch)p Fr(es)e(with)h +Fm(if)p Fr(s.)27 b(Unlik)o(e)16 b(RE2C,)g(GLA)g(do)q(es)i(not)f(use)g +(a)g Fm(case)p Fr(-based)-42 394 y(heuristic)f(to)f(decide)h(whic)o(h)f +Fm(switch)p Fr(es)g(to)g(replace:)21 b(rather,)16 b(it)f(alw)o(a)o(ys)f +(generates)j(a)e Fm(switch)e Fr(for)i(the)h(start)g(state)g(and)-42 +444 y(uses)g Fm(if)p Fr(s)d(for)h(the)g(rest.)20 b(GLA)13 +b(replaces)i Fm(switch)p Fr(es)f(with)f(co)q(de)i(sequences)h(of)e(the) +g(form:)138 518 y Fm(if\(*YYCURSOR)20 b Fi(in)i Fl(S)505 +524 y Fq(1)524 518 y Fm(\))f(goto)g(L)698 524 y Fq(1)717 +518 y Fm(;)226 562 y(.)226 579 y(.)226 595 y(.)138 645 +y(if\(*YYCURSOR)f Fi(in)i Fl(S)505 651 y Fd(n)528 645 +y Fm(\))f(goto)g(L)702 651 y Fd(n)725 645 y Fm(;)-42 +737 y Fr(Bit)12 b(v)o(ectors)h(are)f(used)h(for)e(all)f(mem)o(b)q +(ership)g(tests)k(in)o(v)o(olving)9 b(sets)k(with)e(more)g(than)g(one)h +(elemen)o(t.)17 b(As)12 b(an)g(optimization,)-42 787 +y(if)k(a)f(state)i(has)f(a)g(transition)g(to)g(itself)f(the)i(test)g +(as)f(to)g(whether)h(to)f(remain)f(in)g(the)i(same)e(state)i(or)f(not)g +(is)g(p)q(erformed)-42 837 y(\014rst.)25 b(F)m(or)16 +b(example,)e(Figure)i(12)f(sho)o(ws)i(the)f(GLA-generated)h(co)q(de)f +(for)g(state)g(8)g(in)f(Figure)h(2)1506 822 y Fq(13)1541 +837 y Fr(.)73 b(Note)16 b(the)g(use)h(of)291 926 y Fm(static)j +(unsigned)g(char)h(yytable[])f(=)i Fk(f)291 976 y Fm(0x00,)e(0x00,)h +(0x00,)g(0x00,)g(/*)65 b(0.)g(1.)g(2.)f(3.)22 b(*/)291 +1025 y Fl(:)7 b(:)g(:)291 1075 y Fm(0x00,)20 b(0x00,)h(0x00,)g(0x00,)g +(/*)43 b(,)g(-)h(.)f(/)22 b(*/)291 1125 y(0x01,)e(0x01,)h(0x01,)g +(0x01,)g(/*)43 b(0)g(1)h(2)f(3)22 b(*/)291 1175 y(0x01,)e(0x01,)h +(0x01,)g(0x01,)g(/*)43 b(4)g(5)h(6)f(7)22 b(*/)291 1225 +y(0x01,)e(0x01,)h(0x00,)g(0x00,)g(/*)43 b(8)g(9)h(:)f(;)22 +b(*/)291 1275 y(0x00,)e(0x00,)h(0x00,)g(0x00,)g(/*)43 +b(<)g(=)h(>)f(?)22 b(*/)291 1324 y Fl(:)7 b(:)g(:)291 +1374 y Fm(0x00,)20 b(0x00,)h(0x00,)g(0x00)g Fk(g)p Fm(;)g(/*)43 +b(|)h Fk(g)108 b Fm(127.)21 b(*/)378 1419 y(.)378 1435 +y(.)378 1452 y(.)291 1502 y(L8:)g(if\(yytable[\(*YYC)o(URSOR)o(++\)+0)o +(])e(&)j(1<<0\))e(goto)h(L8;--YYCURSOR;)291 1552 y(goto)g(A3;)527 +1631 y Fr(Figure)14 b(12:)j(GLA)d(co)q(de)h(for)e(state)i(8)e(in)h +(Figure)g(2.)-42 1731 y(128)i(elemen)o(t)f(en)o(tries)i(for)e(the)i +(bit)f(v)o(ectors)h(to)e(reduce)j(the)e(scanner)i(size:)k(A)16 +b(GLA-generated)h(scanner)g(will)e(crash)h(or)-42 1781 +y(otherwise)f(b)q(eha)o(v)o(e)g(unpredictably)f(if)f(a)h(non-ASCI)q(I)f +(c)o(haracter)j(app)q(ears)e(in)g(the)g(source)1395 1766 +y Fq(14)1432 1781 y Fr(.)21 1831 y(In)k(some)g(sense)j(the)e(results)h +(of)e(Section)h(4)f(are)i(a)e(bit)g(misleading:)26 b(the)19 +b(GLA)f(sp)q(eci\014cation)i(that)e(w)o(as)h(used)h(to)-42 +1880 y(obtain)15 b(the)g(\014gures)h(in)e(T)m(able)g(1)h(is)g(not)f(a)h +(t)o(ypical)f(GLA)g(sp)q(eci\014cation.)22 b(Usually)14 +b(scanners)j(implem)o(en)o(ted)c(using)i(GLA)-42 1930 +y(will)h(handle)i(k)o(eyw)o(ords)f(as)h(iden)o(ti\014ers)g(as)g(GLA)f +(has)g(b)q(een)i(optimized)d(for)h(this)g([7)o(].)29 +b(T)m(able)16 b(2)h(presen)o(ts)j(a)d(more)f(fair)-42 +1980 y(comparison:)h(the)e(k)o(eyw)o(ord)f(matc)o(hing)e(rules)j(w)o +(ere)g(remo)o(v)o(ed)e(from)f(b)q(oth)j(the)f(GLA)g(and)g(RE2C)f(sp)q +(eci\014cations.)39 b(The)-42 2030 y(RE2C-generated)18 +b(scanners)g(w)o(ere)f(still)e(faster)i(and)g(smaller)d(except)k(on)e +(the)h(MIPS)g(R4000,)e(where)i(the)g(cc-compiled)-42 +2080 y(GLA)d(scanner)h(w)o(as)f(sligh)o(tly)f(faster.)21 +2130 y(Note)k(ho)o(w)o(ev)o(er,)g(that)g(the)g(RE2C)g(sp)q +(eci\014cation)g(can)g(b)q(e)g(substan)o(tially)f(sp)q(ed)i(up)f(b)o(y) +f(using)h(a)f(tec)o(hnique)i(akin)e(to)-42 2179 y(lo)q(op)e(unrolling.) +i(Replacing)d(the)i(original)d(k)o(eyw)o(ord)h(matc)o(hing)f(rule)j(in) +e(the)i(RE2C)e(sp)q(eci\014cation)1548 2164 y Fq(15)138 +2252 y Fm(L)22 b(I*)435 b Fk(f)22 b Fm(RET\(ID\);)e Fk(g)-42 +2345 y Fr(with)14 b(the)h(follo)o(wing)c(rules)p -42 +2380 780 2 v -11 2407 a Fn(13)22 2419 y Fo(Actually)m(,)f(GLA)i(w)o +(ould)f(generate)e(a)i Fg(while)f Fo(statemen)o(t.)j(Most)e(compilers)e +(will)j(generate)d(the)i(same)f(ob)r(ject)g(co)q(de)g(for)h(b)q(oth.) +-11 2446 y Fn(14)22 2458 y Fo(No)h(c)o(hec)o(ks)e(are)h(made)f(to)h +(ensure)f(that)g(only)h(7-bit)f(c)o(haracters)f(app)q(ear)h(in)h(the)g +(input.)-11 2486 y Fn(15)22 2498 y Fg(L)e Fo(=)i Fg([a-zA-Z)p +215 2498 11 2 v 10 w(])g Fo(and)g Fg(I)e Fo(=)i Fg([a-zA-Z)p +514 2498 V 10 w(0-9])n Fo(.)913 2748 y Fr(12)p eop +%%Page: 13 13 +13 12 bop 727 776 a Fr(time)387 b(space)380 826 y(program)p +557 841 2 50 v 61 w(user)72 b(sys)65 b(total)p 974 841 +V 62 w(text)58 b(data)e(bss)64 b(total)p 355 842 1158 +2 v 850 877 a Fi(R4000)16 b(/)f(gc)n(c2.3.3)g(-O)p 355 +894 V 479 929 a Fr(gla)p 557 944 2 50 v 71 w(2.63)p 703 +944 V 51 w(0.58)p 828 944 V 71 w(3.21)p 974 944 V 50 +w(5040)p 1109 944 V 50 w(2496)p 1243 944 V 51 w(144)p +1357 944 V 71 w(7680)458 979 y(re2c)p 557 994 V 73 w(2.50)p +703 994 V 51 w(0.65)p 828 994 V 71 w(3.15)p 974 994 V +50 w(6448)p 1109 994 V 71 w(512)p 1243 994 V 92 w(0)p +1357 994 V 72 w(6960)414 1028 y(re2c)g(-s)p 557 1043 +V 72 w(2.49)p 703 1043 V 51 w(0.67)p 828 1043 V 71 w(3.16)p +974 1043 V 50 w(4976)p 1109 1043 V 50 w(4224)p 1243 1043 +V 92 w(0)p 1357 1043 V 72 w(9200)382 1078 y(re2c)g(-s)f +Fk(y)p 557 1093 V 72 w Fr(2.08)p 703 1093 V 51 w(0.59)p +828 1093 V 71 w(2.67)p 974 1093 V 50 w(5792)p 1109 1093 +V 50 w(4224)p 1243 1093 V 92 w(0)p 1357 1093 V 52 w(10016)p +355 1095 1158 2 v 726 1130 a Fi(R4000)i(/)f(c)n(c2.11.2)g(-O)g(-Olimit) +e(5000)p 355 1146 V 479 1181 a Fr(gla)p 557 1196 2 50 +v 71 w(2.43)p 703 1196 V 51 w(0.64)p 828 1196 V 71 w(3.07)p +974 1196 V 50 w(6512)p 1109 1196 V 50 w(2416)p 1243 1196 +V 51 w(128)p 1357 1196 V 71 w(9056)458 1231 y(re2c)p +557 1246 V 73 w(2.93)p 703 1246 V 51 w(0.67)p 828 1246 +V 71 w(3.60)p 974 1246 V 50 w(8048)p 1109 1246 V 71 w(528)p +1243 1246 V 92 w(0)p 1357 1246 V 72 w(8576)414 1281 y(re2c)i(-s)p +557 1296 V 72 w(3.04)p 703 1296 V 51 w(0.64)p 828 1296 +V 71 w(3.68)p 974 1296 V 50 w(9952)p 1109 1296 V 50 w(2208)p +1243 1296 V 92 w(0)p 1357 1296 V 52 w(12160)p 355 1297 +1158 2 v 838 1332 a Fi(SP)m(AR)o(C)g(/)g(gc)n(c2.3.3)g(-O)p +355 1349 V 479 1384 a Fr(gla)p 557 1399 2 50 v 71 w(4.08)p +703 1399 V 51 w(1.65)p 828 1399 V 71 w(5.73)p 974 1399 +V 50 w(5472)p 1109 1399 V 50 w(1656)p 1243 1399 V 51 +w(136)p 1357 1399 V 71 w(7264)458 1434 y(re2c)p 557 1449 +V 73 w(3.77)p 703 1449 V 51 w(1.67)p 828 1449 V 71 w(5.44)p +974 1449 V 50 w(7008)p 1109 1449 V 113 w(0)p 1243 1449 +V 92 w(0)p 1357 1449 V 72 w(7008)414 1483 y(re2c)g(-s)p +557 1498 V 72 w(3.66)p 703 1498 V 51 w(2.37)p 828 1498 +V 71 w(6.03)p 974 1498 V 50 w(9112)p 1109 1498 V 113 +w(0)p 1243 1498 V 92 w(0)p 1357 1498 V 72 w(9112)p 355 +1500 1158 2 v 869 1535 a Fi(i486)g(/)g(gc)n(c2.4.5)g(-O)p +355 1551 V 479 1586 a Fr(gla)p 557 1601 2 50 v 71 w(5.04)p +703 1601 V 51 w(1.15)p 828 1601 V 71 w(6.19)p 974 1601 +V 50 w(5368)p 1109 1601 V 50 w(1632)p 1243 1601 V 51 +w(108)p 1357 1601 V 71 w(7108)458 1636 y(re2c)p 557 1651 +V 73 w(4.75)p 703 1651 V 51 w(1.17)p 828 1651 V 71 w(5.92)p +974 1651 V 50 w(5448)p 1109 1651 V 113 w(0)p 1243 1651 +V 92 w(0)p 1357 1651 V 72 w(5448)414 1686 y(re2c)g(-s)p +557 1701 V 72 w(5.06)p 703 1701 V 51 w(1.13)p 828 1701 +V 71 w(6.19)p 974 1701 V 50 w(8248)p 1109 1701 V 113 +w(0)p 1243 1701 V 92 w(0)p 1357 1701 V 72 w(8248)p 355 +1703 1158 2 v 860 1737 a Fi(68020)h(/)f(gc)n(c1.40)h(-O)p +355 1754 V 479 1789 a Fr(gla)p 557 1804 2 50 v 51 w(32.69)p +703 1804 V 50 w(3.37)p 828 1804 V 50 w(36.06)p 974 1804 +V 50 w(4772)p 1109 1804 V 50 w(1632)p 1243 1804 V 51 +w(106)p 1357 1804 V 71 w(6510)458 1839 y(re2c)p 557 1854 +V 53 w(29.86)p 703 1854 V 50 w(3.74)p 828 1854 V 50 w(33.60)p +974 1854 V 50 w(4468)p 1109 1854 V 113 w(0)p 1243 1854 +V 92 w(0)p 1357 1854 V 72 w(4468)414 1889 y(re2c)f(-s)p +557 1904 V 52 w(28.77)p 703 1904 V 50 w(3.55)p 828 1904 +V 50 w(32.32)p 974 1904 V 50 w(5616)p 1109 1904 V 113 +w(0)p 1243 1904 V 92 w(0)p 1357 1904 V 72 w(5616)108 +1978 y(T)m(able)i(2:)24 b(Scanner)18 b(p)q(erformance)f(with)g(k)o(eyw) +o(ords)g(treated)h(as)f(iden)o(ti\014ers.)29 b Fk(y)17 +b Fr(uses)h(an)f(\\unrolled")108 2028 y(sp)q(eci\014cation.)913 +2748 y(13)p eop +%%Page: 14 14 +14 13 bop 138 185 a Fm(L)501 b Fk(f)22 b Fm(RET\(ID\);)e +Fk(g)138 235 y Fm(L)i(I)457 b Fk(f)22 b Fm(RET\(ID\);)e +Fk(g)138 284 y Fm(L)i(I)g(I)413 b Fk(f)22 b Fm(RET\(ID\);)e +Fk(g)138 334 y Fm(L)i(I)g(I)f(I)370 b Fk(f)22 b Fm(RET\(ID\);)e +Fk(g)138 384 y Fm(L)i(I)g(I)f(I)h(I)326 b Fk(f)22 b Fm(RET\(ID\);)e +Fk(g)138 434 y Fm(L)i(I)g(I)f(I)h(I)f(I)283 b Fk(f)22 +b Fm(RET\(ID\);)e Fk(g)138 484 y Fm(L)i(I)g(I)f(I)h(I)f(I)h(I)239 +b Fk(f)22 b Fm(RET\(ID\);)e Fk(g)138 533 y Fm(L)i(I)g(I)f(I)h(I)f(I)h +(I)f(I)196 b Fk(f)22 b Fm(RET\(ID\);)e Fk(g)138 583 y +Fm(L)i(I*)435 b Fk(f)22 b Fm(RET\(ID\);)e Fk(g)-42 677 +y Fr(reduces)f(the)e(n)o(um)o(b)q(er)f(of)g(end-of-bu\013er)h(c)o(hec)o +(ks)h(and)e(results)i(in)e(a)g(signi\014can)o(t)g(sp)q(eed)i(impro)o(v) +o(emen)o(t)13 b(o)o(v)o(er)k(the)g(GLA-)-42 726 y(generated)f(scanner.) +-42 864 y Fs(6)67 b(Summary)24 b(and)f(F)-6 b(urther)25 +b(W)-6 b(ork)-42 955 y Fr(This)16 b(pap)q(er)h(has)f(describ)q(ed)h +(RE2C,)e(a)h(to)q(ol)f(for)g(creating)h(lexical)f(analyzers.)24 +b(Unlik)o(e)16 b(other)g(suc)o(h)h(to)q(ols,)e(RE2C)g(con-)-42 +1004 y(cen)o(trates)i(solely)d(on)g(generating)g(e\016cien)o(t)h(co)q +(de)g(for)f(matc)o(hing)f(regular)h(expressions.)21 b(Not)14 +b(only)g(do)q(es)h(this)g(singleness)-42 1054 y(of)h(purp)q(ose)i(mak)o +(e)c(RE2C)i(more)g(suitable)g(for)g(a)g(wider)g(v)n(ariet)o(y)g(of)g +(applications,)f(it)h(allo)o(ws)f(it)h(to)g(generate)i(scanners)-42 +1104 y(whic)o(h)c(approac)o(h)g(hand-crafted)h(scanners)g(in)f(terms)g +(of)f(size)i(and)e(sp)q(eed.)20 b(Compared)13 b(to)h(scanners)i +(generated)f(b)o(y)f(\015ex,)-42 1154 y(and)g(GLA,)f(RE2C-generated)i +(scanners)g(are)g(faster)f(and)g(in)f(man)o(y)f(cases)k(smaller)c(as)i +(w)o(ell.)21 1204 y(While)g(RE2C-generated)h(scanners)h(p)q(erform)e(w) +o(ell,)g(there)i(is)e(still)g(ro)q(om)f(for)h(impro)o(v)o(emen)o(t.)k +(Near)d(term)f(impro)o(v)o(e-)-42 1254 y(men)o(ts)g(include)g(using)f +(GLA's)h(bit)f(v)o(ectors)i(to)f(simplify)d(some)i Fm(switch)p +Fr(es)h(and)f(adding)g(a)h(state)h(unrolling)d(op)q(erator.)21 +1303 y(In)i(the)g(longer)g(term,)f(inline)g(actions)h(will)e(b)q(e)i +(added)h(to)e(RE2C.)g(F)m(or)h(example,)e(a)h(sp)q(eci\014cation)i(lik) +o(e)138 1386 y Fm(D)22 b Fk(f)p Fm(c)f(=)h($)p Fk(g)f +Fm(\(D)h Fk(f)p Fm(c)f(=)h(10*c)e(+)i($)p Fk(g)p Fm(\)*)-42 +1469 y Fr(migh)o(t)15 b(b)q(e)i(used)g(to)f(obtain)g(the)h(v)n(alue)f +(of)g(a)g(previously)g(scanned)i(in)o(teger.)26 b(T)o(ypically)m(,)14 +b(these)k(sorts)g(of)d(sp)q(eci\014cations)-42 1519 y(w)o(ould)f(b)q(e) +g(used)h(as)f(an)f(action)h(in)f(some)g(other)i(sp)q(eci\014cation.)-42 +1656 y Fs(7)67 b(Ac)n(kno)n(wledgmen)n(ts)-42 1747 y +Fr(The)15 b(authors)f(thank)g(the)g(referees)j(for)c(their)h(man)o(y)e +(v)n(aluable)h(commen)o(ts)f(and)i(suggestions.)913 2748 +y(14)p eop +%%Page: 15 15 +15 14 bop -42 195 a Fs(A)68 b(C)22 b(Scanner)-42 276 +y Fg(#define)16 b(BSIZE)192 b(8192)-42 315 y(#define)16 +b(RET\(i\))174 b({s->cur)15 b(=)i(cursor;)e(return)h(i;})-42 +394 y(#define)g(YYCTYPE)156 b(uchar)-42 433 y(#define)16 +b(YYCURSOR)138 b(cursor)-42 473 y(#define)16 b(YYLIMIT)156 +b(s->lim)-42 512 y(#define)16 b(YYMARKER)138 b(s->ptr)-42 +552 y(#define)16 b(YYFILL\(n\))120 b({cursor)15 b(=)i(fill\(s,)e +(cursor\);})-42 631 y(typedef)h(struct)f(Scanner)g({)29 +670 y(int)299 b(fd;)29 709 y(uint)281 b(line;)29 749 +y(uchar)263 b(*bot,)16 b(*tok,)g(*ptr,)f(*cur,)h(*pos,)g(*lim,)g(*top,) +g(*eof;)-42 788 y(})i(Scanner;)-42 867 y(uchar)e(*fill\(Scann)o(er)e +(*s,)j(uchar)f(*cursor\){)29 907 y(if\(!s->eof)o(\){)100 +946 y(uint)g(cnt)g(=)i(s->tok)d(-)i(s->bot;)100 985 y(if\(cnt\){)d(/*)j +(move)g(partial)e(token)h(to)g(bottom)g(*/)170 1025 y(memcpy\(s->b)o +(ot,)e(s->tok,)h(s->lim)g(-)j(s->tok\);)d(s->tok)g(=)i(s->bot;)170 +1064 y(s->ptr)f(-=)h(cnt;)f(cursor)f(-=)i(cnt;)f(s->pos)g(-=)h(cnt;)f +(s->lim)g(-=)h(cnt;)100 1104 y(})100 1143 y(if\(\(s->to)o(p)e(-)i +(s->lim\))e(<)i(BSIZE\){)f(/*)g(buffer)g(needs)g(to)h(be)g(expanded)d +(*/)170 1183 y(uchar)i(*buf)g(=)i(\(uchar*\))c(malloc\(\(\(s-)o(>li)o +(m)h(-)i(s->bot\))e(+)i(BSIZE\)*size)o(of\()o(uch)o(ar\))o(\);)170 +1222 y(memcpy\(buf,)d(s->tok,)h(s->lim)h(-)h(s->tok\);)e(s->tok)g(=)i +(buf;)170 1262 y(s->ptr)f(=)h(&buf[s->pt)o(r)e(-)i(s->bot];)e(cursor)g +(=)j(&buf[curs)o(or)c(-)k(s->bot];)170 1301 y(s->pos)e(=)h(&buf[s->po)o +(s)e(-)i(s->bot];)e(s->lim)g(=)j(&buf[s->l)o(im)c(-)k(s->bot];)170 +1340 y(s->top)e(=)h(&s->lim[BS)o(IZE)o(];)170 1380 y(free\(s->bot)o +(\);)d(s->bot)i(=)h(buf;)100 1419 y(})100 1459 y(if\(\(cnt)e(=)i +(read\(s->fd)o(,)e(\(char*\))g(s->lim,)g(BSIZE\)\))g(!=)i(BSIZE\){)e +(/*)i(EOF)g(*/)170 1498 y(s->eof)f(=)h(&s->lim[cn)o(t];)d(*\(s->eof\)+) +o(+)h(=)i('\\n';)100 1538 y(})100 1577 y(s->lim)e(+=)i(cnt;)29 +1616 y(})29 1656 y(return)f(cursor;)-42 1695 y(})-42 +1774 y(int)h(scan\(Scann)o(er)d(*s\){)100 1814 y(uchar)h(*cursor)h(=)h +(s->cur;)-42 1853 y(std:)70 b(s->tok)15 b(=)i(cursor;)-42 +1892 y(/*!re2c)100 1932 y("/*")157 b({)17 b(goto)f(comment;)f(})-42 +2013 y Fc(:)6 b(:)g(:)11 b Fb(mor)n(e)j(rules)e Fc(:)6 +b(:)g(:)100 2086 y Fg([)17 b(\\t\\v\\f]+)50 b({)17 b(goto)f(std;)h(}) +100 2125 y("\\n")157 b({)17 b(if\(cursor)e(==)i(s->eof\))e(RET\(EOI\);) +f(s->pos)i(=)h(cursor;)e(s->line++;)364 2164 y(goto)h(std;)h(})100 +2204 y([\\000-\\37)o(7])32 b({)17 b(printf\("une)o(xpe)o(cte)o(d)d +(character:)h('\045c'\\n",)f(*s->tok\);)364 2243 y(goto)i(std;)h(})-42 +2283 y(*/)-42 2322 y(comment:)-42 2362 y(/*!re2c)100 +2401 y("*/")157 b({)17 b(goto)f(std;)h(})100 2440 y("\\n")157 +b({)17 b(if\(cursor)e(==)i(s->eof\))e(RET\(EOI\);)f(s->tok)i(=)h +(s->pos)e(=)j(cursor;)d(s->line++;)364 2480 y(goto)h(comment;)f(})100 +2519 y([\\000-\\37)o(7])32 b({)17 b(goto)f(comment;)f(})-42 +2559 y(*/)-42 2598 y(})913 2748 y Fr(15)p eop +%%Page: 16 16 +16 15 bop -42 195 a Fs(References)-21 286 y Fr([1])20 +b Fa(Aho,)d(A.)g(V.,)f(Sethi,)h(R.,)h(and)f(Ullman,)h(J.)e(D.)21 +b Fi(Compilers:)e(principles,)c(te)n(chniques,)h(and)g(to)n(ols)p +Fr(.)k(Addison-)44 336 y(W)m(esley)m(,)13 b(1988.)k(Reprin)o(ted)d +(with)f(corrections.)-21 419 y([2])20 b Fa(Bernstein,)c(R.)f(L.)k +Fr(Pro)q(ducing)13 b(go)q(o)q(d)g(co)q(de)i(for)e(the)h(case)g +(statemen)o(t.)j Fi(Softwar)n(e{Pr)n(actic)n(e)d(and)h(Exp)n(erienc)n +(e)g(15)p Fr(,)44 469 y(10)e(\(Octob)q(er)j(1985\),)c(1021{1024.)-21 +552 y([3])20 b Fa(DeRemer,)e(F.,)f(and)g(Pennello,)i(T.)h +Fr(E\016cien)o(t)15 b(computation)e(of)h Fl(LALR)p Fr(\(1\))h(lo)q +(ok-ahead)f(sets.)21 b Fi(A)o(CM)15 b(T)m(r)n(ans-)44 +602 y(actions)g(on)g(Pr)n(o)n(gr)n(amming)g(L)n(anguages)h(and)f +(Systems)g(4)p Fr(,)f(4)g(\(Octob)q(er)h(1982\),)e(615{649.)-21 +685 y([4])20 b Fa(Ellis,)c(M.,)g(and)g(Str)o(oustr)o(up,)h(B.)i +Fi(The)c(A)o(nnotate)n(d)h(C++)e(R)n(efer)n(enc)n(e)h(Manual)p +Fr(.)j(Addison-W)m(esley)m(,)13 b(1990.)-21 768 y([5])20 +b Fa(Fraser,)c(C.)f(W.,)h(and)g(Hanson,)h(D.)f(R.)i Fr(A)c +(retargetable)g(compiler)e(for)h(ANSI)h(C.)j Fi(SIGPLAN)e(Notic)n(es)f +(26)p Fr(,)g(10)44 817 y(\(Octob)q(er)h(1991\),)e(29{43.)-21 +900 y([6])20 b Fa(Garey,)g(M.)d(R.,)i(and)g(Johnson,)h(D.)e(S.)25 +b Fi(Computers)16 b(and)h(Intr)n(actability:)k(A)c(Guide)g(to)f(the)h +(The)n(ory)f(of)h(NP-)44 950 y(Completeness)p Fr(.)h(W.)13 +b(H.)g(F)m(reeman)g(and)h(Compan)o(y)m(,)d(1991.)-21 +1033 y([7])20 b Fa(Gra)m(y,)14 b(R.)e(W.)g Fl(\015)r +Fr(-GLA)e(-)g(A)g(generator)g(for)g(lexical)f(analyzers)h(that)g +(programmers)e(can)i(use.)i Fi(USENIX)g(Confer)n(enc)n(e)44 +1083 y(Pr)n(o)n(c)n(e)n(e)n(dings)17 b Fr(\(June)e(1988\),)d(147{160.) +-21 1166 y([8])20 b Fa(Gra)m(y,)c(R.)f(W.,)g(Heuring,)g(V.)f(P.,)h +(Levi,)h(S.)f(P.,)g(Slo)o(ane,)i(A.)d(M.,)h(and)g(W)-5 +b(aite,)15 b(W.)g(M.)h Fr(Eli:)h(A)c(complete,)44 1216 +y(\015exible)h(compiler)e(construction)j(system.)j Fi(Communic)n +(ations)d(of)g(the)g(A)o(CM)f(35)p Fr(,)g(2)g(\(F)m(ebruary)g(1992\),)f +(121{131.)-21 1299 y([9])20 b Fa(Gr)o(osch,)e(J.)i Fr(E\016cien)o(t)15 +b(generation)g(of)f(lexical)f(analysers.)21 b Fi(Softwar)n(e{Pr)n +(actic)n(e)15 b(and)h(Exp)n(erienc)n(e)g(19)p Fr(,)f(11)f(\(1989\),)44 +1349 y(1089{1103.)-42 1432 y([10])20 b Fa(Harrison,)c(M.)g(A.)j +Fi(Intr)n(o)n(duction)c(to)g(F)m(ormal)f(L)n(anguage)i(The)n(ory)p +Fr(.)i(Addison-W)m(esley)m(,)13 b(1978.)-42 1515 y([11])20 +b Fa(Hennessy,)15 b(J.)e(L.,)i(and)f(Mendelsohn,)i(N.)f +Fr(Compilation)8 b(of)j(the)h(Pascal)g(case)g(statemen)o(t.)i +Fi(Softwar)n(e{Pr)n(actic)n(e)44 1565 y(and)h(Exp)n(erienc)n(e)h(12)p +Fr(,)d(9)h(\(Septem)o(b)q(er)h(1982\),)d(879{882.)-42 +1648 y([12])20 b Fa(Horspool,)c(R.)g(N.,)f(and)g(Whitney,)h(M.)h +Fr(Ev)o(en)d(faster)g(LR)e(parsing.)k Fi(Softwar)n(e{Pr)n(actic)n(e)d +(and)i(Exp)n(erienc)n(e)g(20)p Fr(,)44 1697 y(6)e(\(1990\),)g(515{535.) +-42 1780 y([13])20 b Fa(Ja)o(cobson,)d(V.)i Fr(T)m(uning)14 +b(UNIX)g(Lex)h(or)f(it's)f(NOT)i(true)g(what)f(they)h(sa)o(y)f(ab)q +(out)g(Lex.)19 b(In)14 b Fi(USENIX)i(Confer)n(enc)n(e)44 +1830 y(Pr)n(o)n(c)n(e)n(e)n(dings)h Fr(\(W)m(ashington,)12 +b(DC,)h(Win)o(ter)h(1987\),)f(pp.)g(163{164.)j(Abstract)f(only)m(.)-42 +1913 y([14])20 b Fa(Kernighan,)h(B.)e(W.,)h(and)g(Ritchie,)f(D.)h(M.)28 +b Fi(The)18 b(C)f(Pr)n(o)n(gr)n(amming)g(L)n(anguage,)i(2nd)g(Ed.)28 +b Fr(Pren)o(tice-Hall,)44 1963 y(Inc.,)13 b(1988.)-42 +2046 y([15])20 b Fa(Lesk,)25 b(M.)e(E.)38 b Fr(LEX)20 +b({)g(a)g(lexical)g(analyzer)g(generator.)38 b(Computing)18 +b(Science)k(T)m(ec)o(hnical)e(Rep)q(ort)h(39,)g(Bell)44 +2096 y(T)m(elephone)14 b(Lab)q(oratories,)g(Murra)o(y)g(Hill,)e(NJ,)h +(1975.)-42 2179 y([16])20 b Fa(P)l(axson,)e(V.)h Fr(\015ex)14 +b({)g(man)e(pages,)i(1988.)j(In)d Ff(\015ex-2.3.7.ta)o(r.Z)p +Fr(.)e(Av)n(ailable)g(for)i(anon)o(ymous)e(ftp)i(from)e +Ff(ftp.uu.net)j Fr(in)44 2229 y Ff(/pack)o(ages/gnu)p +Fr(.)-42 2312 y([17])20 b Fa(Pennello,)k(T.)d(J.)33 b +Fr(V)m(ery)19 b(fast)g(LR)f(parsing.)33 b(In)19 b Fi(Pr)n(o)n(c)n(e)n +(e)n(dings)g(of)g(the)h(A)o(CM)f(SIGPLAN'86)h(Symp)n(osium)g(on)44 +2362 y(Compiler)14 b(Construction)j Fr(\(July)c(1986\),)g(A)o(CM.)-42 +2445 y([18])20 b Fa(Sale,)g(A.)25 b Fr(The)17 b(implemen)o(tatio)o(n)c +(of)j(case)h(statemen)o(ts)g(in)e(Pascal.)25 b Fi(Softwar)n(e{Pr)n +(actic)n(e)16 b(and)i(Exp)n(erienc)n(e)f(11)p Fr(,)g(9)44 +2494 y(\(Septem)o(b)q(er)d(1981\),)f(929{942.)913 2748 +y(16)p eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF diff --git a/src/about/sample.bib b/src/about/sample.bib new file mode 100644 index 00000000..1f34ab13 --- /dev/null +++ b/src/about/sample.bib @@ -0,0 +1,48 @@ +@Article{Bumbulis94, + author = {Peter Bumbulis and Donald D. Cowan}, + title = {RE2C -- A More Versatile Scanner Generator}, + journal = "ACM Letters on Programming Languages and Systems", + volume = 2, + number = "1--4", + year = 1994, + abstract = { + It is usually claimed that lexical analysis routines are still coded by + hand, despite the widespread availability of scanner generators, for + efficiency reasons. While efficiency is a consideration, there exist + freely available scanner generators such as GLA \cite{Gray88} that can + generate scanners that are faster than most hand-coded ones. However, + most generated scanners are tailored for a particular environment, and + retargetting these scanners to other environments, if possible, is + usually complex enough to make a hand-coded scanner more appealing. In + this paper we describe RE2C, a scanner generator that not only generates + scanners which are faster (and usually smaller) than those produced by + any other scanner generator known to the authors, including GLA, but + also adapt easily to any environment. + } +} +@Article{Gray88, + author = {Robert W. Gray}, + title = {{$\gamma$-GLA} - {A} Generator for Lexical Analyzers That + Programmers Can Use}, + journal = {USENIX Conference Proceedings}, + year = {1988}, + month = {June}, + pages = {147-160}, + abstract = {Writing an efficient lexical analyzer for even a simple + language is not a trivial task, and should not be done by hand. We + describe GLA, a tool that generates very efficient scanners. These + scanners do not use the conventional transition matrix, but instead + use a few 128 element vectors. Scanning time is only slightly + greater than the absolute minimum --- the time it takes to look at + each character in a file. The GLA language allows simple, concise + specification of scanners. Augmenting regular expressions with + auxiliary scanners easily handles nasty problems such as C comments + and C literal constants. We formalize the connection between token + scanning and token processing by associating a processor with + appropriate patterns. A library of canned descriptions simplifies the + specification of commonly used language pieces --- such as, + C\_IDENTIFIERS, C\_STRINGS, PASCAL\_COMMENTS, etc. Finally, carefully + tuned lexical analysis support modules are provided for error + handling, input buffering, storing identifiers in hash tables and + manipulating denotations.} +}