sealed Ġclass ĠMu Token Ġ{ ĊĠ Ġobject ĠNil : ĠMu Token () ĊĠ Ġdata Ġclass ĠBool ( val Ġe : ĠBoolean ): ĠMu Token () ĊĠ Ġdata Ġclass ĠName ( val Ġname : ĠString ): ĠMu Token () ĊĠ Ġdata Ġclass ĠKeyword ( val Ġid : ĠString ): ĠMu Token () ĊĠ Ġinterface ĠOperator Ġ{ Ġval Ġid : ĠString Ġ} ĊĠ Ġdata Ġclass ĠOp ( override Ġval Ġid : ĠString ): ĠMu Token (), ĠOperator ĊĠ Ġdata Ġclass ĠPrefix Op ( override Ġval Ġid : ĠString ): ĠMu Token (), ĠOperator ĊĠ Ġdata Ġclass ĠCompose Assign Op ( override Ġval Ġid : ĠString ): ĠMu Token (), ĠOperator Ċ } Ċ fun Ġ< T > ĠKeyword Pattern < T >. merge Of ( var arg Ġpaths : ĠString , Ġtransform : Ġ( String ) Ġ-> ĠT ) Ġ= Ġpaths . forEach Ġ{ Ġthis [ it ] Ġ= Ġtransform ( it ) Ġ} Ċ fun ĠKeyword Pattern < Mu Token >. merge Keywords ( var arg Ġk ws : ĠString ) Ġ= Ġmerge Of (* k ws ) Ġ{ ĠMu Token . Keyword ( it ) Ġ} Ċ Ċ fun ĠKeyword Pattern < Mu Token >. merge Ops ( var arg Ġops : ĠString ) Ġ= Ġmerge Of (* ops ) Ġ{ ĠMu Token . Op ( it ) Ġ} Ċ fun ĠKeyword Pattern < Mu Token >. merge Compose Assign Ops ( var arg Ġops : ĠString ) Ġ= Ġops . forEach Ġ{ ĊĠ Ġval Ġtok Ġ= ĠMu Token . Compose Assign Op ( it ) ĊĠ Ġthis [ op ] Ġ= Ġtok ; Ġthis [ op +" =" ] Ġ= Ġtok Ċ } Ċ Ċ abstract Ġclass ĠBasic Parts Ġ{ ĊĠ Ġval Ġdigit Ġ= Ġdigit For (' 0 ' .. ' 9 ') ĊĠ Ġval Ġhex Upper Ġ= Ġdigit For (' A ' .. ' F ', Ġ' A ', Ġ 1 0 ) ĊĠ Ġval Ġhex Lower Ġ= Ġdigit For (' a ' .. ' f ', Ġ' a ', Ġ 1 0 ) ĊĠ Ġval Ġhe xD ig it Ġ= ĠDec ide ( digit , Ġhex Lower , Ġhex Upper ). merge First Ġ{ Ġif Ġ( it Ġin Ġ 0 .. 9 ) Ġ 0 Ġelse Ġ 2 Ġ} Ċ } Ċ Ċ abstract Ġclass ĠMu Lex ical : ĠBasic Parts Ġ{ Ċ // 0 [ x X ][ 0 - 9 A - Fa - f ]+ Ċ val Ġhex Part Ġ= ĠRepeat ( as Int ( 1 6 ), Ġhe xD ig it ) Ċ val Ġzero Not ation Ġ= ĠDec ide ( ĊĠ Ġhex Part Ġprefix Ġelement In (' X ', Ġ' x '). to Constant (' x '), ĊĠ ĠSt icky End ( item (' 0 ') Ġor ĠEOF , Ġ 0 ) Ġ{ Ġif Ġ( peek Ġin Ġ' 0 ' .. ' 8 ') Ġerror (" no Ġoct al Ġnot ations "); Ġ- 1 Ġ} Ċ ). merge First Ġ{ 0 } Ċ // \\ d + Ċ // \\ d + \\. \\ d + Ċ val Ġint Ġ= ĠContext ual ( digit ) Ġ{ ĊĠ Ġif Ġ( it Ġ== Ġ 0 ) Ġzero Not ation ĊĠ Ġelse ĠRepeat ( as Int ( 1 0 , Ġit ), Ġdigit ). Many () Ċ } Ċ val Ġfraction Ġ= Ġint Ġprefix Ġitem ('.') Ċ val Ġnum Ġ= ĠSeq (:: Int Tuple , Ġint , Ġfraction . to Default (- 1 )) Ċ val Ġescape Ġ= ĠMap Pattern ( map Of (' "' Ġto Ġ'" ', Ġ' t ' Ġto Ġ'\ t ', Ġ' n ' Ġto Ġ'\ n ', Ġ' r ' Ġto Ġ'\ r ')) Ċ val Ġstr Part Ġ= ĠDec ide ( Context ual ( item ('\\ ')) Ġ{ escape }. merge First Ġ{' \\ '}, Ġ! element In (' "', Ġ'\ n ')). merge First Ġ{ Ġif Ġ( it Ġin Ġescape . map . values ) Ġ 0 Ġelse Ġ 1 Ġ} Ċ // (\\ ") (( ? <! \\\\ ) \\\\ \\ 1 |. )* ? \\ 1 Ċ val Ġstr Ġ= ĠSur round By ( item ('" ') Ġto Ġitem ('" '), ĠRepeat ( asString (), Ġstr Part ) Ġ) Ċ // (\\ ') (( ? <! \\\\ ) \\\\ \\ 1 |. )* ? \\ 1 Ċ val Ġstr 1 Ġ= Ċ // \\ $ ? [_ a - zA - Z ][ _ a - zA - Z 0 - 9 ]* Ċ val Ġname Ġ= Ċ // ^ #! .* Ċ val Ġshell Bang Ġ= Ġstring For (! newline Char ) Ġprefix Ġitem ('# ') Ċ //' // [^\ n ]* ' Ċ val Ġcomment Ġ= Ġstring For (! newline Char ) Ċ // '/ \\ * .*? \\ */ ' Ċ val Ġcomment 1 Ġ= Ġstring For (! newline Char ) Ċ Ċ // [ Ġ\ t \ r ]+ Ċ val Ġws 1 Ġ= ĠRepeat ( asString (), Ġelement In (' Ġ', Ġ'\ t ', Ġ'\ r ')) Ċ Ċ // Ġbr aces Ċ val Ġkeywords Ġ= ĠKeyword Pattern < Mu Token >(). apply Ġ{ ĊĠ Ġmerge Strings (" nil " Ġto ĠMu Token . Nil ) ĊĠ Ġmerge Strings (" true " Ġto ĠMu Token . Bool ( true ), Ġ" false " Ġto ĠMu Token . Bool ( false )) ĊĠ Ġmerge Ops (" and ", Ġ" or ", Ġ" xor ") ĊĠ Ġmerge Keywords (" if ", Ġ" elif ", Ġ" else ") ĊĠ Ġmerge Keywords (" while ", Ġ" loop ", Ġ" for ", Ġ" in ") ĊĠ Ġmerge Keywords (" return ", Ġ" break ", Ġ" continue ") ĊĠ Ġmerge Keywords (" func ", Ġ" type ", Ġ" using ", Ġ" module ") ĊĠ Ġmerge Keywords (" try ", Ġ" catch ", Ġ" finally ", Ġ" throw ") ĊĠ Ġmerge Keywords (" operator ", Ġ" yield ", Ġ" by ", Ġ" extern ", Ġ" super ", Ġ" attr ") ĊĠ Ġmerge Ops (" ...", Ġ".. < ", Ġ".. ", Ġ". ") ĊĠ Ġmerge Keywords ("$ ", Ġ" -> ", Ġ",", Ġ"; ", Ġ" ?", Ġ": ") ĊĠ Ġ// squares , Ġpare ns ĊĠ Ġmerge Ops (" == =", Ġ" != =", Ġ" ==", Ġ"! =") ĊĠ Ġmerge Ops ("> =", Ġ"< =", Ġ"> ", Ġ"< ") ĊĠ Ġmerge Ops (" =") ĊĠ Ġmerge Of (" ~ ", Ġ" !") Ġ{ ĠMu Token . Prefix Op ( it ) Ġ} ĊĠ Ġmerge Compose Assign Ops ("> >", Ġ"<< ", Ġ"^ ", Ġ"| ", Ġ"& ") ĊĠ Ġmerge Compose Assign Ops ("+ ", Ġ"-", Ġ"*", Ġ"/", Ġ"% ") Ċ } Ċ Ċ } Ċ