package Ġcom . iy x an 2 3 . e pl k . objects Ċ Ċ import Ġcom . iy x an 2 3 . e pl k . Tokens Ċ import Ġcom . iy x an 2 3 . e pl k . errors . runtime . E pl k NotImplemented Error Ċ import Ġcom . iy x an 2 3 . e pl k . errors . runtime . E pl k TypeError Ċ import Ġcom . iy x an 2 3 . e pl k . interpreter . Realtime Result Ċ import Ġcom . iy x an 2 3 . e pl k . interpreter . Scope Ċ import Ġcom . iy x an 2 3 . e pl k . lexer . models . Position Ċ import Ġkotlin . math . pow Ċ Ċ /** Ċ Ġ* ĠA Ġfloat Ġobject Ġin ĠE PL K Ċ Ġ*/ Ċ class ĠE pl k Float ( ĊĠĠĠ Ġvar Ġvalue : ĠFloat , ĊĠĠĠ Ġoverride Ġval Ġscope : ĠScope Ċ ) Ġ: ĠE pl k Object ( scope ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġobject Name Ġ= Ġ" Float " ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġvalue . toString () ĊĊĠĠĠ Ġoverride Ġfun Ġoperator Plus ( ĊĠĠĠĠĠĠĠ Ġother : ĠE pl k Object , ĊĠĠĠĠĠĠĠ ĠstartPosition : ĠPosition , ĊĠĠĠĠĠĠĠ Ġend Position : ĠPosition ĊĠĠĠ Ġ): ĠReal time Result < E pl k Object > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE pl k Integer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). success ( E pl k Float ( value Ġ+ Ġother . value , Ġscope )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE pl k Float Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). success ( E pl k Float ( value Ġ+ Ġother . value , Ġscope )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE pl k NotImplemented Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"+ Ġoperator Ġwith Ġ${ other . objectName } Ġis Ġnot Ġsupported ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartPosition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġoperator Minus ( ĊĠĠĠĠĠĠĠ Ġother : ĠE pl k Object , ĊĠĠĠĠĠĠĠ ĠstartPosition : ĠPosition , ĊĠĠĠĠĠĠĠ Ġend Position : ĠPosition ĊĠĠĠ Ġ): ĠReal time Result < E pl k Object > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE pl k Integer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). success ( E pl k Float ( value Ġ- Ġother . value , Ġscope )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE pl k Float Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). success ( E pl k Float ( value Ġ- Ġother . value , Ġscope )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE pl k NotImplemented Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- Ġoperator Ġwith Ġ${ other . objectName } Ġis Ġnot Ġsupported ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartPosition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġoperator Multiply ( ĊĠĠĠĠĠĠĠ Ġother : ĠE pl k Object , ĊĠĠĠĠĠĠĠ ĠstartPosition : ĠPosition , ĊĠĠĠĠĠĠĠ Ġend Position : ĠPosition ĊĠĠĠ Ġ): ĠReal time Result < E pl k Object > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE pl k Integer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). success ( E pl k Float ( value Ġ* Ġother . value , Ġscope )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE pl k Float Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). success ( E pl k Float ( value Ġ* Ġother . value , Ġscope )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE pl k NotImplemented Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"* Ġoperator Ġwith Ġ${ other . objectName } Ġis Ġnot Ġsupported ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartPosition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Position , Ġscope ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġoperator Divide ( ĊĠĠĠĠĠĠĠ Ġother : ĠE pl k Object , ĊĠĠĠĠĠĠĠ ĠstartPosition : ĠPosition , ĊĠĠĠĠĠĠĠ Ġend Position : ĠPosition ĊĠĠĠ Ġ): ĠReal time Result < E pl k Object > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE pl k Integer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). success ( E pl k Float ( value Ġ/ Ġother . value , Ġscope )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE pl k Float Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). success ( E pl k Float ( value Ġ/ Ġother . value , Ġscope )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE pl k NotImplemented Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ Ġoperator Ġwith Ġ${ other . objectName } Ġis Ġnot Ġsupported ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartPosition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġoperator Pow ( ĊĠĠĠĠĠĠĠ Ġother : ĠE pl k Object , ĊĠĠĠĠĠĠĠ ĠstartPosition : ĠPosition , ĊĠĠĠĠĠĠĠ Ġend Position : ĠPosition ĊĠĠĠ Ġ): ĠReal time Result < E pl k Object > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE pl k Integer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). success ( E pl k Float ( value . pow ( other . value ), Ġscope )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE pl k Float Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). success ( E pl k Float ( value . pow ( other . value ), Ġscope )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReal time Result < E pl k Object >(). failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE pl k NotImplemented Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"^ Ġoperator Ġwith Ġ${ other . objectName } Ġis Ġnot Ġsupported ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartPosition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġincrement ( ĊĠĠĠĠĠĠĠ ĠstartPosition : ĠPosition , ĊĠĠĠĠĠĠĠ Ġend Position : ĠPosition ĊĠĠĠ Ġ): ĠReal time Result < E pl k Object > Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue ++ ĊĊĠĠĠĠĠĠĠ Ġreturn ĠReal time Result < E pl k Object >(). success ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecrement ( ĊĠĠĠĠĠĠĠ ĠstartPosition : ĠPosition , ĊĠĠĠĠĠĠĠ Ġend Position : ĠPosition ĊĠĠĠ Ġ): ĠReal time Result < E pl k Object > Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue -- ĊĊĠĠĠĠĠĠĠ Ġreturn ĠReal time Result < E pl k Object >(). success ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcomparison To ( ĊĠĠĠĠĠĠĠ Ġother : ĠE pl k Object , ĊĠĠĠĠĠĠĠ ĠstartPosition : ĠPosition , ĊĠĠĠĠĠĠĠ Ġend Position : ĠPosition ĊĠĠĠ Ġ): ĠReal time Result < Array < Tokens >> Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( other ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE pl k Integer Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= ĠArrayList < Tokens >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomparison Ġ= Ġvalue . compareTo ( other . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comparison Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add ( Tokens . DOUBLE _ EQUAL S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add ( Tokens . GRE ATER _ OR _ EQUAL _ THAN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add ( Tokens . LES SER _ OR _ EQUAL _ THAN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add ( Tokens . NOT _ EQUAL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ> Ġother . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add ( Tokens . GRE ATER _ THAN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add ( Tokens . LES SER _ THAN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠReal time Result < Array < Tokens >> (). success ( tokens . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠE pl k Float Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= ĠArrayList < Tokens >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġother . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add ( Tokens . DOUBLE _ EQUAL S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add ( Tokens . GRE ATER _ OR _ EQUAL _ THAN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add ( Tokens . LES SER _ OR _ EQUAL _ THAN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add ( Tokens . NOT _ EQUAL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ> Ġother . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add ( Tokens . GRE ATER _ THAN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtokens . add ( Tokens . LES SER _ THAN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠReal time Result < Array < Tokens >> (). success ( tokens . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠReal time Result < Array < Tokens >> (). failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE pl k TypeError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Comparison Ġwith ĠInteger Ġmust Ġbe Ġeither Ġan Ġother ĠInteger Ġor ĠFloat . ĠExpected ĠInteger Ġ/ ĠFloat , Ġgot Ġ${ other . objectName }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartPosition , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscope ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }