package Ġworld . ph ant asm al . ps ol ib . asm Ċ Ċ import Ġworld . ph ant asm al . core . fast Is Whitespace Ċ import Ġworld . ph ant asm al . core . fast Replace Ċ import Ġworld . ph ant asm al . core . getCode Point At Ċ import Ġworld . ph ant asm al . core . is Digit Ċ Ċ private Ġval ĠHEX _ INT _ REGEX Ġ= ĠRegex (""" ^ 0 [ x X ][ 0 - 9 a - fA - F ]+ $ """) Ċ private Ġval ĠFLOAT _ REGEX Ġ= ĠRegex (""" ^ - ?\ d + (\ .\ d + )? ( e - ?\ d + )? $ """) Ċ Ċ enum Ġclass ĠToken Ġ{ ĊĠĠĠ ĠInt 3 2 , ĊĠĠĠ ĠFloat 3 2 , ĊĠĠĠ ĠInvalid Number , ĊĠĠĠ ĠRegister , ĊĠĠĠ ĠLabel , ĊĠĠĠ ĠCode Section , ĊĠĠĠ ĠData Section , ĊĠĠĠ ĠStr Section , ĊĠĠĠ ĠInvalid Section , ĊĠĠĠ ĠStr , ĊĠĠĠ ĠUn terminated Str , ĊĠĠĠ ĠIdent , ĊĠĠĠ ĠInvalid Ident , ĊĠĠĠ ĠArg Separator , Ċ } Ċ Ċ class ĠLine Tokenizer Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġline Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar ĠstartIndex Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġvalue : ĠAny ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġvar Ġtype : ĠToken ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġval Ġcol : ĠInt Ġget () Ġ= ĠstartIndex Ġ+ Ġ 1 ĊĠĠĠ Ġval Ġlen : ĠInt Ġget () Ġ= Ġindex Ġ- ĠstartIndex ĊĊĠĠĠ Ġfun Ġtokenize ( line : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . line Ġ= Ġline ĊĠĠĠĠĠĠĠ Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ ĠstartIndex Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġint Value : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( type Ġ=== ĠToken . Int 3 2 Ġ|| Ġtype Ġ=== ĠToken . Register Ġ|| Ġtype Ġ=== ĠToken . Label ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue Ġas ĠInt ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfloat Value : ĠFloat ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( type Ġ=== ĠToken . Float 3 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue Ġas ĠFloat ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġstr Value : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ=== ĠToken . Str Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ=== ĠToken . Un terminated Str Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ=== ĠToken . Ident Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ=== ĠToken . Invalid Ident ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue Ġas ĠString ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnext Token (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartIndex Ġ= Ġindex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Ġ= Ġpeek () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char Ġ== Ġ'/') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek () Ġ== Ġ'/') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIt 's Ġa Ġcomment . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char . fast Is Whitespace ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char Ġ== Ġ'-' Ġ|| Ġchar . is Digit ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokenize Number Or Label () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( char Ġ== Ġ', ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠToken . Arg Separator ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( char Ġ== Ġ'.') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokenize Section () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( char Ġ== Ġ'" ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokenize String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( char Ġ== Ġ' r ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokenize Register Or Ident () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokenize Ident () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( type Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartIndex Ġ= Ġline . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġline . length ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Next (): ĠBoolean Ġ= Ġindex Ġ< Ġline . length ĊĊĠĠĠ Ġprivate Ġfun Ġnext (): ĠChar Ġ= Ġline [ index ++] ĊĊĠĠĠ Ġprivate Ġfun Ġpeek (): ĠChar Ġ= Ġline [ index ] ĊĊĠĠĠ Ġprivate Ġfun Ġskip () Ġ{ ĊĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġback () Ġ{ ĊĠĠĠĠĠĠĠ Ġindex -- ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġslice ( from : ĠInt Ġ= Ġ 0 , Ġto : ĠInt Ġ= Ġ 0 ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġline . substring ( startIndex Ġ+ Ġfrom , Ġindex Ġ- Ġto ) ĊĊĠĠĠ Ġprivate Ġfun Ġeat Rest Of Token () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Ġ= Ġnext () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char Ġ== Ġ',' Ġ|| Ġchar . fast Is Whitespace ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtokenize Number Or Label () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Char Ġ= Ġnext () ĊĠĠĠĠĠĠĠ Ġvar Ġis Label Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Ġ= Ġpeek () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char Ġ== Ġ'.' Ġ|| Ġchar Ġ== Ġ' e ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokenize Float () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( first Char Ġ== Ġ' 0 ' Ġ&& Ġ( char Ġ== Ġ' x ' Ġ|| Ġchar Ġ== Ġ' X ')) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokenize Hex Number () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( char Ġ== Ġ': ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Label Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( char Ġ== Ġ',' Ġ|| Ġchar . fast Is Whitespace ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġslice (). toInt OrNull () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Label ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġskip () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ== Ġnull Ġ-> ĠToken . Invalid Number ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Label Ġ-> ĠToken . Label ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠToken . Int 3 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtokenize Hex Number () Ġ{ ĊĠĠĠĠĠĠĠ Ġeat Rest Of Token () ĊĠĠĠĠĠĠĠ Ġval Ġhex Str Ġ= Ġslice () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( HEX _ INT _ REGEX . matches ( hex Str )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġhex Str . drop ( 2 ). toInt OrNull ( 1 6 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠToken . Int 3 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtype Ġ= ĠToken . Invalid Number ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtokenize Float () Ġ{ ĊĠĠĠĠĠĠĠ Ġeat Rest Of Token () ĊĠĠĠĠĠĠĠ Ġval Ġfloat Str Ġ= Ġslice () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( FLOAT _ REGEX . matches ( float Str )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġfloat Str . toFloat OrNull () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠToken . Float 3 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtype Ġ= ĠToken . Invalid Number ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtokenize Register Or Ident () Ġ{ ĊĠĠĠĠĠĠĠ Ġskip () ĊĠĠĠĠĠĠĠ Ġvar Ġis Register Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Ġ= Ġpeek () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char . is Digit ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Register Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Register ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġslice ( from Ġ= Ġ 1 ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠToken . Register ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtokenize Ident () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtokenize Section () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek (). fast Is Whitespace ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġwhen Ġ( slice ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ". code " Ġ-> ĠToken . Code Section ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ". data " Ġ-> ĠToken . Data Section ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ". string " Ġ-> ĠToken . Str Section ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠToken . Invalid Section ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtokenize String () Ġ{ ĊĠĠĠĠĠĠĠ Ġskip () ĊĠĠĠĠĠĠĠ Ġvar Ġprev Was Back Space Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġterminated Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġloop @ Ġ// ĠUse Ġlabel Ġas Ġworkaround Ġfor Ġhttps :// yout rack . jetbrains . com / issue / KT - 4 3 9 4 3 . ĊĠĠĠĠĠĠĠ Ġwhile Ġ( hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( peek ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'\\ ' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Was Back Space Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'"' Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! prev Was Back Space ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġterminated Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak @ loop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Was Back Space Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Was Back Space Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġskip () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġslice ( from Ġ= Ġ 1 , Ġto Ġ= Ġif Ġ( terminated ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fast Replace ("\\ \"", Ġ"\" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fast Replace ("\\ n ", Ġ"\ n ") ĊĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġif Ġ( terminated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToken . Str ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToken . Un terminated Str ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtokenize Ident () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchar Ġ= Ġpeek () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( char Ġ== Ġ',' Ġ|| Ġchar . fast Is Whitespace ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( char Ġ== Ġ'/') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( peek () Ġ== Ġ'/') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġident Ġ= Ġslice () ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġident ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ident . getCode Point At ( 0 ) Ġ! in Ġ' a '. code .. ' z '. code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠToken . Invalid Ident ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġident . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( ident . getCode Point At ( i )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ' 0 '. code .. ' 9 '. code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ' a '. code .. ' z '. code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'_ '. code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'=' . code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'< '. code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ' >'. code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'! '. code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠValid Ġcharacter . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= ĠToken . Invalid Ident ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtype Ġ= ĠToken . Ident ĊĠĠĠ Ġ} Ċ } Ċ