From 76893860b3d3c8b26fd7d588d72f24c68d318696 Mon Sep 17 00:00:00 2001 From: Ulya Trofimovich Date: Fri, 26 Jul 2019 11:24:21 +0100 Subject: [PATCH] Updated 1994 paper "RE@C: a More Versatile Parser Generator" (finer rendering quality). --- ...e2c_a_more_versatile_scanner_generator.pdf | Bin 283807 -> 0 bytes ...re2c_a_more_versatile_scanner_generator.ps | 5249 +++++++++++++++++ src/about/sample.bib | 48 + 3 files changed, 5297 insertions(+) delete mode 100644 src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.pdf create mode 100644 src/about/1994_bumbulis_cowan_re2c_a_more_versatile_scanner_generator.ps create mode 100644 src/about/sample.bib 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 c661f18e2fb30eeba873f98a46593b23a74d97c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 283807 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 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.} +} -- 2.40.0