From 9a11d0ec7f7fe4e3cde14a3de1daa8a4222fdd42 Mon Sep 17 00:00:00 2001 From: nuffer Date: Sun, 25 Jan 2004 00:13:52 +0000 Subject: [PATCH] Removing compressed file and added uncompressed version. --- doc/loplas.ps | 5249 ++++++++++++++++++++++++++++++++++++++++++++++ doc/loplas.ps.gz | Bin 69079 -> 0 bytes 2 files changed, 5249 insertions(+) create mode 100644 doc/loplas.ps delete mode 100644 doc/loplas.ps.gz diff --git a/doc/loplas.ps b/doc/loplas.ps new file mode 100644 index 00000000..2067b582 --- /dev/null +++ b/doc/loplas.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/doc/loplas.ps.gz b/doc/loplas.ps.gz deleted file mode 100644 index b0be76bf67aa600cf972c7837ecff9776e64b85c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69079 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

E#JDiIo#a*^X6vp^B3bHKB0jI z$JlVck0ZP-LDQenvI8)qb; zB^b)WavdFfBBgQ{yS}-Jb1WKfGI4J2nC0LOZQkQmv&`W*Sn7QC z=*jtY568-(OK~{m(f|LHFN`re$HOM>Zr%LPPv$>|B+~is@gfEx7lKc&!AJSHfRM6T zlZsKl595%Ep=Qm9))5fCPc`c|(DIQUbjexOwbswQPJTx6*~Qn>(ba0pN75Bv7ymKg zg?`%}RvjNsZzc}sZ}j)|nyv=??{6nGNnhdSiVULX7M%7Jz;ATB?zjXr!w3*#ZHT83 zW4O1zaAa=)(4g=uccUx1Gw<1wmFE{3oOD0Ym8{*bTfLgGs+cr23h=&Z`70WgJCA%) z)Nbd}`gyo=0$is*YqHaH^kuu->>nX=9*Z@HP|*>gN+u5;e-&)T#U7-D@_FM#hiM} z$I|z+!&dFGw>%TY&6o#4`e5>b{>U+8y$M`re#l?7Z-}%Va&9J8>T)^yq2&^N>n+1G z{5auszTN0W&mahS&4GuaoRucb?N)?h+5dtUCSM3#ctHI`zi#FR0YEb-|5y;xLU;l1S%z@3IbIePn^)|3iu zquge1fqatQtgU#~Ql7PTR3^oTGH+zgN@(WSxu3Ha>vaeIeLZ>X;+Ef%zQx!4J^nsE zFgt%aAuWQ&C#a)5$_fLef$dTL?u##2>hLnN(n^1Aga=k!&G5)!dXZL-wH5xWE3>S{b=#YfOy)TCbtk>n|N;A{PJ%Z?{U`=ZZV)lII7j=RZu;IiviA;Rje8@AI_J(tx zN7tpF_PU!y}{*EP1Q3m3O>jCb<+ah)eoL03-ri zxLCx`_!Y)l+i7T?oa`Bd9bx8o}Ug657$4v*3uBO7dhml*FEL@DT!f&1w(ux_W zeYZPKQA?Xx2I7kLS;9g-69(eAF`R2nIEO5n_Oli5v2S&w55>6$m~p6Wiy_nO#Tlhy zdw7UN!6_!z#WM$)oMVlb#3+n>!z|J8aG0SuXpK*{y7`dMelP$wDE`+;><9MEbcYlb z5ym`wG|Mb;b%!%M&UGDTVlfeu_dUiGoEPIR*yt*CyH88qs-BpY7bip#XieYn`MKY} zSEhna^vX%B#ppF-O0D-Kx47-QiIkHURY?{A6~PypBC{I(Fx}4pt13#xK&QYd^9h}T zS+*z(^#Pq(k`*G@1$S_c{7Aa$wGW3jMBsHN9%?gb;h3h0xrM}tj_7B_b zTKDae#^|++pH|&r!?JvZod)GXkwE9>b)wV!jQ}+5kydi|M`}}~M&~o^2AF$Oo9Kqi zXHW^XiO)_R(Q-tK_@T%ObrL5P^!V!}P?f&rT)o-$9r$g|a;LNEw?`lc!$I(O5tOe` z`2be2?(jLA#J~IgM|R-sjsl-#)zLX4Vn0=%+7x-@QrDGwP;iQu8%X{@5O?PVag7|J zPYB|bNMUB@>7E_82ObN6-@kg!%kh&TTghry5HO>M2jm}@8Hwr~+Q>VSZ&E@TF5UZ) zasmop)3gQJ(!Y~Z-7QygIrvfzFE4=Ku#c<*q{UYg;fJ)AquW6zaz5A}Yka(sQuO&^ zZk@2=t|2Y#%?8MCQH1U!QA_%bx?1ktbw(O6mwqg zG;T_bZfe)cIG5*TOdb`ncOo)&2cV$J0Q%+P63}Nstw;{5DRGBv873 z7_UduU%~P%v-~P3P6B@CakFZ}TXiXTZZes-%(ruf+WZ7!E6-*RENJnY7d8Sz+2T7n}`TNct-*@ILu}Kem$8Y_ECzwtJ>_wJNBAXUo zHf0KinKZIXhdVF|wqOr4)*be$L4RJCti8OyXA!pDcgK6V@$hPkNyKi`veM6ciiW9J z0CJ>7C`Gc#N37C!E@xGsVZEKQ;}>UVS_Girl|Y%fglboDeHO{dgrjKHJBl>6q1E%s zdi(=j!8G$T!h0deM5+fhm