/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "). Ċ Ġ* Ġ ĠYou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠLicense Ġis Ġlocated Ġat : Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// aws . amazon . com / apache 2 . 0 / Ċ Ġ* Ċ Ġ* Ġ Ġor Ġin Ġthe Ġ" license " Ġfile Ġaccompanying Ġthis Ġfile . ĠThis Ġfile Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ċ Ġ* Ġ Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . part i ql . lang . syntax Ċ Ċ import Ġcom . amazon . ion .* Ċ import Ġorg . part i ql . lang . errors .* Ċ import Ġorg . part i ql . lang . errors . ErrorCode .* Ċ import Ġorg . part i ql . lang . errors . Property .* Ċ import Ġorg . part i ql . lang . syntax . Sql Lexer . Lex Type .* Ċ import Ġorg . part i ql . lang . syntax . Sql Lexer . State Type .* Ċ import Ġorg . part i ql . lang . syntax . TokenType .* Ċ import Ġorg . part i ql . lang . syntax . TokenType . KEYWORD Ċ import Ġorg . part i ql . lang . util .* Ċ import Ġjava . math .* ĊĊ Ċ /** Ċ Ġ* ĠSimple Ġtokenizer Ġfor ĠPart i QL . Ċ Ġ*/ Ċ class ĠSql Lexer ( private Ġval Ġion : ĠIon System ) Ġ: ĠLex er Ġ{ ĊĠĠĠ Ġ/** ĠTransition Ġtypes . Ġ*/ ĊĠĠĠ Ġinternal Ġenum Ġclass ĠState Type ( val Ġbegins Token : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġends Token : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠIndicates Ġthe Ġinitial Ġstate Ġfor Ġrecognition . Ġ*/ ĊĠĠĠĠĠĠĠ ĠINITIAL (), ĊĠĠĠĠĠĠĠ Ġ/** ĠIndicates Ġan Ġerror Ġstate . Ġ*/ ĊĠĠĠĠĠĠĠ ĠERROR (), ĊĠĠĠĠĠĠĠ Ġ/** ĠIndicates Ġthe Ġend Ġof Ġthe Ġstream Ġ*/ ĊĠĠĠĠĠĠĠ ĠEND ( begin s Token Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠ Ġ/** ĠIndicates Ġthe Ġmiddle Ġof Ġa Ġtoken . Ġ*/ ĊĠĠĠĠĠĠĠ ĠIN COMPLETE (), ĊĠĠĠĠĠĠĠ Ġ/** ĠIndicates Ġthe Ġbegin ing Ġof Ġa Ġnew Ġtoken . Ġ*/ ĊĠĠĠĠĠĠĠ ĠSTART ( begin s Token Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠ Ġ/** ĠA Ġstate Ġthat Ġis Ġboth Ġa Ġstart Ġand Ġterminal . Ġ*/ ĊĠĠĠĠĠĠĠ ĠSTART _ AND _ TERMIN AL ( begin s Token Ġ= Ġtrue , Ġends Token Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠ Ġ/** ĠIndicates Ġa Ġpossible Ġtermination Ġpoint Ġfor Ġa Ġtoken . Ġ*/ ĊĠĠĠĠĠĠĠ ĠTER MIN AL ( ends Token Ġ= Ġtrue ), ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠLex er Ġtypes . Ġ*/ ĊĠĠĠ Ġinternal Ġenum Ġclass ĠLex Type Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠNo Ġparticular Ġlexer Ġtype . Ġ*/ ĊĠĠĠĠĠĠĠ ĠNONE , ĊĠĠĠĠĠĠĠ Ġ/* ĠIntegr al Ġnumber . Ġ*/ ĊĠĠĠĠĠĠĠ ĠINTEGER , ĊĠĠĠĠĠĠĠ Ġ/* ĠDecimal Ġnumber . Ġ*/ ĊĠĠĠĠĠĠĠ ĠDEC IMAL , ĊĠĠĠĠĠĠĠ Ġ/** ĠSingle Ġquoted Ġstring . Ġ*/ ĊĠĠĠĠĠĠĠ ĠS Q _ STRING , ĊĠĠĠĠĠĠĠ Ġ/** ĠDouble Ġquoted Ġstring . Ġ*/ ĊĠĠĠĠĠĠĠ ĠD Q _ STRING , ĊĠĠĠĠĠĠĠ Ġ/** ĠIon Ġliterals . Ġ*/ ĊĠĠĠĠĠĠĠ ĠI ON _ LITERAL , ĊĠĠĠĠĠĠĠ Ġ/** ĠWh itespace . Ġ*/ ĊĠĠĠĠĠĠĠ ĠWH ITES PACE , ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠRepresentation Ġof Ġa ĠLex er Ġstate Ġmachine Ġnode . Ġ*/ ĊĠĠĠ Ġinternal Ġinterface ĠState Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Type : ĠState Type ĊĠĠĠĠĠĠĠ Ġval Ġtoken Type : ĠTokenType ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġlex Type : ĠLex Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠNONE ĊĠĠĠĠĠĠĠ Ġval Ġreplacement : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠREPLACE _ SAME ĊĊĠĠĠĠĠĠĠ Ġ/** ĠRetrieves Ġthe Ġnext Ġstate Ġfrom Ġthis Ġone Ġwith Ġthe Ġtransition Ġcode Ġpoint . Ġ*/ ĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġget ( next : ĠInt ): ĠState ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠSimple Ġrepe ating Ġstate . Ġ*/ ĊĠĠĠ Ġinternal Ġclass ĠRe pe ating State ( override Ġval Ġstate Type : ĠState Type ) Ġ: ĠState Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget ( next : ĠInt ): ĠState Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠState Ġnode Ġand Ġcorresponding Ġstate Ġtable . Ġ*/ ĊĠĠĠ Ġinternal Ġclass ĠTable State ( override Ġval Ġstate Type : ĠState Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġtoken Type : ĠTokenType ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġlex Type : ĠLex Type Ġ= ĠNONE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġreplacement : ĠInt Ġ= ĠREPLACE _ SAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdelegate : ĠState Ġ= ĠERROR _ STATE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup : ĠTable State . () Ġ-> ĠUnit Ġ= Ġ{ Ġ}) Ġ: ĠState Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĠDefault Ġtable Ġwith Ġnull Ġstates . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtable Ġ= ĠArray < State ? >( TABLE _ SIZE ) Ġ{ Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoperator Ġfun ĠArray < State ?> . set ( chars : ĠString , Ġnew : ĠState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchars . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcp Ġ= Ġit . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Ġ= Ġthis [ cp ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ cp ] Ġ= Ġwhen Ġ( old ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġnew ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cannot Ġreplace Ġexisting Ġstate Ġ$ old Ġwith Ġ$ new ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget From Table ( next : ĠInt ): ĠState ? Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Ġ< ĠTABLE _ SIZE Ġ-> Ġtable [ next ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget ( next : ĠInt ): ĠState Ġ= Ġget From Table ( next ) Ġ?: Ġdelegate [ next ] ĊĊĠĠĠĠĠĠĠ Ġfun Ġself Repe ating Delegate ( state Type : ĠState Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type : ĠTokenType ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlex Type : ĠLex Type Ġ= ĠNONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate Ġ= Ġobject Ġ: ĠState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġstate Type Ġ= Ġstate Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġtoken Type Ġ= Ġtoken Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġlex Type Ġ= Ġlex Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget ( next : ĠInt ): ĠState Ġ= Ġget From Table ( next ) Ġ?: Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdelta ( chars : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Type : ĠState Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type : ĠTokenType ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlex Type : ĠLex Type Ġ= ĠNONE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplacement : ĠInt Ġ= ĠREPLACE _ SAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelegate : ĠState Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup : ĠTable State .( String ) Ġ-> ĠUnit Ġ= Ġ{ Ġ}): ĠTable State Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= ĠTable State ( state Type , Ġtoken Type , Ġlex Type , Ġreplacement , Ġdelegate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup ( chars ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtable [ chars ] Ġ= Ġchild ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġchild ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠSimple Ġline / column Ġtracker . Ġ*/ ĊĠĠĠ Ġinternal Ġclass ĠPosition Tracker Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġline Ġ= Ġ 1 L ĊĠĠĠĠĠĠĠ Ġvar Ġcol Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġvar Ġsaw CR Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġfun Ġnewline () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcol Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadvance ( next : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( next ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCR Ġ-> Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaw CR Ġ-> Ġnewline () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsaw CR Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL F Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnewline () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaw CR Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s aw CR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnewline () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaw CR Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcol ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġposition : ĠSource Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠSource Position ( line , Ġcol ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġposition . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠCR Ġ= Ġ'\ r '. toInt () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠL F Ġ= Ġ'\ n '. toInt () ĊĊĠĠĠĠĠĠĠ Ġ/** ĠThe Ġsynthetic ĠEOF Ġcode Ġpoint . Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEOF Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġ/** ĠCode Ġpoint Ġrange Ġthat Ġtable - driven Ġlex ing Ġwill Ġoperate Ġon . Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTABLE _ SIZE Ġ= Ġ 1 2 7 ĊĊĠĠĠĠĠĠĠ Ġ/** ĠDo Ġnot Ġreplace Ġcharacter . Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREPLACE _ SAME Ġ= Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReplace Ġwith Ġnothing . Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREPLACE _ NOTH ING Ġ= Ġ- 2 ĊĊĠĠĠĠĠĠĠ Ġ/** ĠSynt hetic Ġstate Ġfor ĠEOF Ġto Ġtrigger Ġa Ġflush Ġof Ġthe Ġlast Ġtoken . Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEOF _ STATE Ġ= ĠRe pe ating State ( END ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠError Ġstate . Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠERROR _ STATE Ġ= ĠRe pe ating State ( ERROR ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĠInitial Ġstate . Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠINITIAL _ STATE Ġ= ĠTable State ( INITIAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinitialState Ġ= Ġthis ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta (" (", ĠSTART _ AND _ TERMIN AL , ĠLEFT _ PAREN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta (" )", ĠSTART _ AND _ TERMIN AL , ĠRIGHT _ PAREN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("[ ", ĠSTART _ AND _ TERMIN AL , ĠLEFT _ BRACK ET ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta (" ]", ĠSTART _ AND _ TERMIN AL , ĠRIGHT _ BRACK ET ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("{ ", ĠSTART _ AND _ TERMIN AL , ĠLEFT _ CURL Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta (" }", ĠSTART _ AND _ TERMIN AL , ĠRIGHT _ CURL Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta (" :", ĠSTART _ AND _ TERMIN AL , ĠCOL ON ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta (",", ĠSTART _ AND _ TERMIN AL , ĠCOM MA ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("* ", ĠSTART _ AND _ TERMIN AL , ĠST AR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta (" ;", ĠSTART _ AND _ TERMIN AL , ĠS EM IC OL ON ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( NON _ OVER LOADED _ OPERATOR _ CHARS , ĠSTART _ AND _ TERMIN AL , ĠOPER ATOR ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("| ", ĠSTART ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("| ", ĠTER MIN AL , ĠOPER ATOR , Ġdelegate Ġ= ĠinitialState ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta (" !", ĠSTART ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta (" =", ĠTER MIN AL , ĠOPER ATOR , Ġdelegate Ġ= ĠinitialState ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("< ", ĠSTART _ AND _ TERMIN AL , ĠOPER ATOR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta (" =", ĠTER MIN AL , ĠOPER ATOR , Ġdelegate Ġ= ĠinitialState ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("> ", ĠTER MIN AL , ĠOPER ATOR , Ġdelegate Ġ= ĠinitialState ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("< ", ĠTER MIN AL , ĠLEFT _ DOUBLE _ ANGLE _ BRACK ET , Ġdelegate Ġ= ĠinitialState ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("> ", ĠSTART _ AND _ TERMIN AL , ĠOPER ATOR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta (" =", ĠTER MIN AL , ĠOPER ATOR , Ġdelegate Ġ= ĠinitialState ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("> ", ĠTER MIN AL , ĠRIGHT _ DOUBLE _ ANGLE _ BRACK ET , Ġdelegate Ġ= ĠinitialState ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( IDENT _ START _ CHARS , ĠSTART _ AND _ TERMIN AL , ĠIDENT IFIER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( IDENT _ CONTINUE _ CHARS , ĠTER MIN AL , ĠIDENT IFIER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠTable State . delta Decimal Integer ( state Type : ĠState Type , Ġlex Type : ĠLex Type , Ġsetup : ĠTable State .( String ) Ġ-> ĠUnit Ġ= Ġ{ Ġ}): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( DIGIT _ CHARS , Ġstate Type , ĠL ITERAL , Ġlex Type , Ġdelegate Ġ= ĠinitialState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( DIGIT _ CHARS , ĠTER MIN AL , ĠL ITERAL , Ġlex Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠTable State . delta Decimal Fraction ( setup : ĠTable State .( String ) Ġ-> ĠUnit Ġ= Ġ{ Ġ}): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta (".", ĠTER MIN AL , ĠL ITERAL , ĠDEC IMAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Decimal Integer ( TERMIN AL , ĠDEC IMAL , Ġsetup ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠTable State . delta Exponent ( setup : ĠTable State .( String ) Ġ-> ĠUnit Ġ= Ġ{ Ġ}): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( E _ NOT ATION _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= ĠERROR _ STATE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( SIGN _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= ĠERROR _ STATE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Decimal Integer ( TERMIN AL , ĠDEC IMAL , Ġsetup ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Decimal Integer ( TERMIN AL , ĠDEC IMAL , Ġsetup ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠTable State . delta Number ( state Type : ĠState Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Decimal Integer ( state Type , ĠINTEGER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Decimal Fraction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Exponent Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Exponent Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTART _ AND _ TERMIN AL Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġat Ġthe Ġtop - level Ġwe Ġneed Ġto Ġsupport Ġdot Ġas Ġa Ġspecial ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta (".", ĠSTART _ AND _ TERMIN AL , ĠDOT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Decimal Integer ( TERMIN AL , ĠDEC IMAL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Exponent Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Decimal Fraction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Exponent Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Number ( START _ AND _ TERMIN AL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun ĠTable State . delta Quote ( quote Char : ĠString , Ġtoken Type : ĠTokenType , Ġlex Type : ĠLex Type ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( quote Char , ĠSTART , Ġreplacement Ġ= ĠREPLACE _ NOTH ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Repe ating Delegate ( IN COMPLETE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquote State Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( quote Char , ĠTER MIN AL , Ġtoken Type , Ġlex Type Ġ= Ġlex Type , Ġreplacement Ġ= ĠREPLACE _ NOTH ING , Ġdelegate Ġ= ĠinitialState ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( quote Char , ĠIN COMPLETE , Ġdelegate Ġ= Ġquote State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Quote ( SINGLE _ QUOTE _ CHARS , ĠL ITERAL , ĠS Q _ STRING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta Quote ( DOUBLE _ QUOTE _ CHARS , ĠQU OT ED _ IDENTIFIER , ĠD Q _ STRING ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIon Ġliterals Ġ- Ġvery Ġpartial Ġlex ing Ġof ĠIon Ġto Ġsupport Ġnested Ġback - tick ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin ĠIon Ġstrings / symbols / comments ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( BACK TICK _ CHARS , ĠSTART , Ġreplacement Ġ= ĠREPLACE _ NOTH ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Repe ating Delegate ( IN COMPLETE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquote State Ġ= Ġthis ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("/", ĠIN COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("/", ĠIN COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġion Comment State Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Repe ating Delegate ( IN COMPLETE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( BACK TICK _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġion Comment State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( NL _ WH ITES PACE _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġquote State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("* ", ĠIN COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġion Comment State Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Repe ating Delegate ( IN COMPLETE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( BACK TICK _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġion Comment State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("* ", ĠIN COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("/", ĠIN COMPLETE , Ġdelegate Ġ= Ġquote State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( DOUBLE _ QUOTE _ CHARS , ĠIN COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġion String State Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Repe ating Delegate ( IN COMPLETE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("\\ ", ĠIN COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( DOUBLE _ QUOTE _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġion String State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( BACK TICK _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġion String State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( DOUBLE _ QUOTE _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġquote State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( SINGLE _ QUOTE _ CHARS , ĠIN COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġion String State Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Repe ating Delegate ( IN COMPLETE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("\\ ", ĠIN COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( SINGLE _ QUOTE _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġion String State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( BACK TICK _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġion String State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( SINGLE _ QUOTE _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġquote State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( SINGLE _ QUOTE _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġion String State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġion Long String State Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Repe ating Delegate ( IN COMPLETE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("\\ ", ĠIN COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( SINGLE _ QUOTE _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġion Long String State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( BACK TICK _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġion Long String State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( SINGLE _ QUOTE _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġion Long String State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( SINGLE _ QUOTE _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġion Long String State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( SINGLE _ QUOTE _ CHARS , ĠIN COMPLETE , Ġdelegate Ġ= Ġquote State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( BACK TICK _ CHARS , ĠTER MIN AL , ĠL ITERAL , ĠI ON _ LITERAL , Ġreplacement Ġ= ĠREPLACE _ NOTH ING , Ġdelegate Ġ= ĠinitialState ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( ALL _ WH ITES PACE _ CHARS , ĠSTART _ AND _ TERMIN AL , Ġnull , ĠWH ITES PACE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġblock Ġcomment Ġand Ġdivide Ġoperator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("/", ĠSTART _ AND _ TERMIN AL , ĠOPER ATOR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("* ", ĠIN COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Repe ating Delegate ( IN COMPLETE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("* ", ĠIN COMPLETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("/", ĠTER MIN AL , Ġnull , ĠWH ITES PACE , Ġdelegate Ġ= ĠinitialState ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġline Ġcomment , Ġsub traction Ġoperator , Ġand Ġsigned Ġpositive Ġinteger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("- ", ĠSTART _ AND _ TERMIN AL , ĠOPER ATOR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinline Ġcomments Ġdon 't Ġneed Ġa Ġspecial Ġtermin ator Ġbefore ĠEOF ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ("- ", ĠTER MIN AL , Ġnull , ĠWH ITES PACE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġself Repe ating Delegate ( TERMIN AL , Ġnull , ĠWH ITES PACE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelta ( NL _ WH ITES PACE _ CHARS , ĠTER MIN AL , Ġnull , ĠWH ITES PACE , Ġdelegate Ġ= ĠinitialState ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġdatetime / hex / bin Ġliterals Ġ( not Ġrequired Ġfor ĠSQL - 9 2 ĠEntry Ġcompliance ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrepr ( code Point : ĠInt ): ĠString Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġcode Point Ġ== ĠEOF Ġ-> Ġ"< EOF >" ĊĠĠĠĠĠĠĠ Ġcode Point Ġ< ĠEOF Ġ-> Ġ"< $ code Point >" ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"' ${ String ( Character . to Chars ( code Point )) }' Ġ[ U + ${ Integer . to HexString ( code Point )} ]" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGiven Ġa Ġtoken Ġas Ġa Ġ[ String ] Ġand Ġa Ġ[ tracker ] Ġcreates Ġand Ġpop ulates Ġa Ġ[ PropertyValue Map ] Ġwith Ġline Ġand Ġcolumn Ġnumber Ġas ĊĠĠĠĠ Ġ* Ġwell Ġas Ġthe Ġtoken Ġstring . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmake Property Bag ( token String : ĠString , Ġtracker : ĠPosition Tracker ): ĠProperty Value Map Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpv map Ġ= ĠProperty Value Map () ĊĠĠĠĠĠĠĠ Ġpv map [ LINE _ NUMBER ] Ġ= Ġ Ġtracker . line ĊĠĠĠĠĠĠĠ Ġpv map [ COLUMN _ NUMBER ] Ġ= Ġ Ġtracker . col ĊĠĠĠĠĠĠĠ Ġpv map [ TOKEN _ STRING ] Ġ= Ġ Ġtoken String ĊĠĠĠĠĠĠĠ Ġreturn Ġpv map ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġtokenize ( source : ĠString ): ĠList < Token > Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġval Ġcode Points Ġ= Ġsource . code Point Sequence () Ġ+ ĠEOF ĊĊĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= ĠArrayList < Token >() ĊĠĠĠĠĠĠĠ Ġval Ġtracker Ġ= ĠPosition Tracker () ĊĠĠĠĠĠĠĠ Ġvar Ġcurr Pos Ġ= Ġtracker . position ĊĠĠĠĠĠĠĠ Ġvar Ġcurr : ĠState Ġ= ĠINITIAL _ STATE ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠStringBuilder () ĊĊĊĠĠĠĠĠĠĠ Ġfor Ġ( cp Ġin Ġcode Points ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġerr Invalid Char (): ĠNothing Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠLex er Exception ( errorCode Ġ= ĠL EX ER _ INVALID _ CHAR , Ġerror Context Ġ= Ġmake Property Bag ( repr ( cp ), Ġtracker )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġerr Invalid Operator ( operator : ĠString ): ĠNothing Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠLex er Exception ( errorCode Ġ= ĠL EX ER _ INVALID _ OPERATOR , Ġerror Context Ġ= Ġmake Property Bag ( operator , Ġtracker )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġerr Invalid Literal ( literal : ĠString ): ĠNothing Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠLex er Exception ( errorCode Ġ= ĠL EX ER _ INVALID _ LITERAL , Ġerror Context Ġ= Ġmake Property Bag ( literal , Ġtracker )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġerr Invalid Ion Literal ( literal : ĠString , Ġcause : ĠIon Exception ): ĠNothing Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠLex er Exception ( errorCode Ġ= ĠL EX ER _ INVALID _ ION _ LITERAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Context Ġ= Ġmake Property Bag ( literal , Ġtracker ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcause Ġ= Ġcause ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtracker . advance ( cp ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġretrieve Ġthe Ġnext Ġstate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġwhen Ġ( cp ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEOF Ġ Ġ-> ĠEOF _ STATE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcurr [ cp ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurr Type Ġ= Ġcurr . state Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Type Ġ= Ġnext . state Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Type Ġ== ĠERROR Ġ-> Ġerr Invalid Char () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Type . begin s Token Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġcan Ġonly Ġstart Ġa Ġtoken Ġif Ġwe 've Ġproperly Ġended Ġanother Ġone . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( curr Type Ġ!= ĠINITIAL Ġ&& Ġ! curr Type . ends Token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr Invalid Char () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( curr Type . ends Token Ġ&& Ġcurr . lex Type Ġ!= ĠWH ITES PACE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġflush Ġout Ġthe Ġprevious Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġbuffer . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtoken Type Ġ= Ġcurr . token Type !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġion Value Ġ= Ġwhen Ġ( token Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOPER ATOR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun ali ased Ġ= ĠOPER ATOR _ ALI ASE S [ text ] Ġ?: Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( un ali ased ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin ĠALL _ OPER ATORS Ġ-> Ġion . new Symbol ( un ali ased ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerr Invalid Operator ( un ali ased ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIDENT IFIER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlower Ġ= Ġtext . toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr . lex Type Ġ== ĠD Q _ STRING Ġ-> Ġion . new Symbol ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlower Ġin ĠALL _ SINGLE _ LEX E ME _ OPER ATORS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġan Ġoperator Ġthat Ġlooks Ġlike Ġa Ġkeyword ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type Ġ= ĠOPER ATOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . new Symbol ( lower ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlower Ġ== Ġ" as " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAS Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type Ġ= ĠAS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . new Symbol ( lower ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlower Ġ== Ġ" at " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAS Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type Ġ= ĠAT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . new Symbol ( lower ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlower Ġ== Ġ" null " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġliteral Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type Ġ= ĠNULL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . new Null () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlower Ġ== Ġ" missing " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġspecial Ġliteral Ġfor ĠMIS SING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type Ġ= ĠMIS SING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . new Null () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlower Ġ== Ġ" for " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġused Ġas Ġan Ġargument Ġdelimiter Ġfor Ġsubstring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type Ġ= ĠFOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . new Symbol ( lower ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlower Ġin ĠTR IM _ SPEC IFICATION _ KEYWORD S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġused Ġto Ġdetermine Ġthe Ġtype Ġof Ġtrim ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type Ġ= ĠTR IM _ SPEC IFICATION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . new String ( lower ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlower Ġin ĠDATE _ PART _ KEYWORD S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġused Ġto Ġdetermine Ġthe Ġtype Ġof Ġtrim ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type Ġ= ĠDATE _ PART ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . new String ( lower ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlower Ġin ĠBOOLEAN _ KEYWORD S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġliteral Ġboolean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type Ġ= ĠL ITERAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . new Bool ( lower Ġ== Ġ" true ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlower Ġin ĠKEY WORDS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġun quoted Ġidentifier Ġthat Ġis Ġa Ġkeyword ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Type Ġ= ĠKEY WORD ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . new Symbol ( KEYWORD _ ALI ASE S [ lower ] Ġ?: Ġlower ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġion . new Symbol ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL ITERAL Ġ-> Ġwhen Ġ( curr . lex Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS Q _ STRING ĠĠ Ġ-> Ġion . new String ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINTEGER ĠĠĠĠ Ġ-> Ġion . new Int ( BigInteger ( text , Ġ 1 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEC IMAL ĠĠĠĠ Ġ-> Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . new Decimal ( big Decimal Of ( text )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠNumber FormatException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr Invalid Literal ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠI ON _ LITERAL Ġ-> Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġanything Ġwrapped Ġby Ġ`` Ġis Ġconsidered Ġas Ġan Ġion Ġliteral , Ġincluding Ġinvalid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġion Ġso Ġwe Ġneed Ġto Ġhandle Ġthe Ġexception Ġhere Ġfor Ġproper Ġerror Ġreporting ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġion . single Value ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠIon Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr Invalid Ion Literal ( text , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠ Ġ-> Ġerr Invalid Literal ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġion . new Symbol ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. se al () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add Or Merge ( Token ( token Type , Ġion Value , Ġcurr Pos )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġready Ġfor Ġnext Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . set Length ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Pos Ġ= Ġtracker . position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreplacement Ġ= Ġnext . replacement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cp Ġ!= ĠEOF Ġ&& Ġreplacement Ġ!= ĠREPLACE _ NOTH ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . append Code Point ( when Ġ( replacement ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREPLACE _ SAME Ġ-> Ġcp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreplacement ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġnext Ġstate Ġis Ġthe ĠEOF Ġmarker Ġadd Ġit Ġto Ġ` tokens `. ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next . state Type Ġ== ĠEND ) Ġtokens . add ( Token ( TokenType . EOF , ion . new Symbol (" EOF "), Ġcurr Pos )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurr Ġ= Ġnext ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtokens ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMutable List < Token >. add Or Merge ( token : ĠToken ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġnew Token Ġ= Ġtoken ĊĊĠĠĠĠĠĠĠ Ġ// Ġtry Ġto Ġmerge Ġwith Ġprevious Ġtokens Ġ( have Ġto Ġgo Ġfrom Ġgreatest Ġto Ġlowest ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin ĠMULTI _ LEX E ME _ MAX _ LENGTH Ġdown To ĠMULTI _ LEX E ME _ MIN _ LENGTH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefix Length Ġ= Ġi Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prefix Length Ġ> Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgo Ġto Ġthe Ġnext Ġsize Ġdown ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcomposite Ġcandidate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeywords Ġ= Ġsub List ( size Ġ- Ġprefix Length , Ġsize ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( new Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . keyword Text Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġle xe me Mapping Ġ= ĠMULTI _ LEX E ME _ TOKEN _ MAP [ keywords ] Ġ?: Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġat Ġthis Ġpoint Ġwe Ġfound Ġthe Ġcandidate Ġso Ġwe Ġneed Ġto Ġreplace Ġthe Ġsuffix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnew Pos Ġ= Ġnew Token . position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( count Ġin Ġ 1 .. prefix Length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Pos Ġ= Ġremove At ( size Ġ- Ġ 1 ). position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreate Ġour Ġnew Ġtoken ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( keyword , Ġtype ) Ġ= Ġle xe me Mapping ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Token Ġ= ĠToken ( type , Ġion . new Symbol ( keyword ), Ġnew Pos ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd ( new Token ) ĊĠĠĠ Ġ} Ċ } Ċ