package Ġcom . s me up . r pg parser . performance Ċ Ċ import Ġcom . s me up . r pg parser . interpreter .* Ċ import Ġcom . s me up . r pg parser . parsing . ast .* Ċ import Ġcom . s me up . r pg parser . parsing . ast . Assignment Operator .* Ċ import Ġcom . strument a . kol as u . model . Reference ByName Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ Ċ /** ĊĠĠĠ ĠK ute 1 0 _ 5 5 . kt Ġis Ġthe Ġ" hybrid " Ġway Ġto Ġperform Ġthe Ġsimilar ĠM UTE 1 0 _ 5 5 . rp gle ĠDO W Ġ( do - while ) Ġloop Ġcode . ĊĊĠĠĠ Ġ- Ġ( M UTE 1 0 _ 5 5 . rp gle ) ĊĠĠĠĠĠĠ ĠC ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDO W ĠĠĠĠĠĠ Ġ$ X < 1 0 0 0 0 0 0 1 ĊĠĠĠĠĠĠ ĠC ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠE VAL ĠĠĠĠĠ Ġ$ X =$ X + 1 ĊĠĠĠĠĠĠ ĠC ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEND DO ĊĊĠĠĠ Ġ- Ġ( K ute 1 0 _ 5 5 . kt ) ĊĠĠĠĠĠĠ Ġwhile Ġ( eval ( less Than Expr ). as Boolean (). value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġexecute ( eval Statement ) ĊĠĠĠĠĠĠĠĠĠĠ Ġloop Counter ++ ĊĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Hybrid " Ġmeans Ġit Ġuses Ġboth ĠKotlin Ġtechnology Ġand Ġthe ĠJar iko Ġinte preter Ġimplementation , Ġso , Ġfor Ġexample ĊĠĠĠ Ġthe Ġincrement Ġof Ġthe Ġvariable Ġchecked Ġfor Ġeach Ġiteration Ġis Ġdone Ġusing Ġ" Eval Stmt " Ġ( not Ġsimply Ġthe Ġplus Ġ" +" Ġoperator ) ĊĠĠĠ Ġand Ġthe Ġvalue Ġof Ġthe Ġvariable Ġis Ġstored Ġ( read / write ) Ġin Ġglobal Symbol Table Ġ( Symbol Table ) ĠMap . ĊĠĠĠ ĠThis Ġapproach Ġshould Ġbe Ġuseful Ġfor Ġdeveloper Ġto Ġbe Ġmore Ġefficient Ġto Ġdevelop / debug Ġcode Ġdue Ġto ĊĠĠĠ Ġperformance Ġtuning , Ġin Ġa Ġmore Ġconcise Ġdeveloping Ġenvironment . ĊĊ Ġ*/ Ċ Ċ class ĠK ute 1 0 _ 5 5 Ġ: ĠK ute () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġexpected Elapsed TimeIn Milli sec Ġ= Ġ 8 3 L ĊĠĠĠ Ġprivate Ġvar Ġloop Counter Ġ= Ġ 0 L ĊĊĠĠĠ Ġfun Ġperformance Comp aring (): ĠArray < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġperformance Comp aring ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġperformance Comp aring ( do Assert s : ĠBoolean ): ĠArray < String > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġvariable Ġname , Ġ' X ' Ġinstead Ġof Ġ'$ X ' Ġdue Ġto ĠKotlin Ġsyntax ĊĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġ" X " ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠNumber Type ( 1 0 , Ġ 0 , Ġ" I ") ĊĠĠĠĠĠĠĠ Ġvar Ġreferred : ĠData Definition Ġ= ĠData Definition ( name , Ġtype ) ĊĠĠĠĠĠĠĠ Ġvar Ġvariable : ĠReference ByName < Abstract Data Definition > Ġ= ĠReference ByName (" X ", Ġreferred ) ĊĠĠĠĠĠĠĠ Ġvar Ġdata Ref Expr Ġ= ĠData Ref Expr ( variable ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠStore Ġthe Ġvariable ĊĠĠĠĠĠĠĠ Ġglobal Symbol Table [ referred ] Ġ= ĠInt Value . ZERO . as Int () ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe ĠEval Stmt Ġ( similar Ġto Ġ' to Ast ' Ġdoes ) ĊĠĠĠĠĠĠĠ Ġval Ġright Int Ġ= ĠInt Literal ( 1 0 0 0 0 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġless Than Expr Ġ= ĠLess Than Expr ( data Ref Expr , Ġright Int ) ĊĠĠĠĠĠĠĠ Ġval Ġint Literal Ġ= ĠInt Literal ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġplus Expr Ġ= ĠPlus Expr ( data Ref Expr , Ġint Literal ) ĊĠĠĠĠĠĠĠ Ġvar Ġstatement Ġ= Ġeval Stmt ( data Ref Expr , Ġplus Expr , ĠNORMAL _ ASSIGN MENT ) ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Elapsed TimeIn Milli sec Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ' DO W ' Ġimplementation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec _ DO W ( less Than Expr , Ġstatement ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠResults ĊĠĠĠĠĠĠĠ Ġvar Ġmessage 1 Ġ= Ġ" Expected Ġexecution Ġof Ġ${ right Int . value } Ġiterations , Ġactual Ġis Ġ$ loop Counter Ġiterations ." ĊĠĠĠĠĠĠĠ Ġvar Ġmessage 2 Ġ= Ġ" Expected Ġexecution Ġof Ġ${ right Int . value } Ġiterations Ġ($ loop Counter Ġdone ) Ġtakes Ġless Ġor Ġsame Ġto Ġ$ expected Elapsed TimeIn Milli sec Ġms . ĠActual Ġis Ġ$ actual Elapsed TimeIn Milli sec Ġms ." ĊĠĠĠĠĠĠĠ Ġif Ġ( do Assert s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( right Int . value , Ġloop Counter , Ġmessage 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( actual Elapsed TimeIn Milli sec Ġ<= Ġexpected Elapsed TimeIn Milli sec , Ġmessage 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠarrayOf ( message 1 , Ġmessage 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexec _ DO W ( less Than Expr : ĠExpression , Ġstatement : ĠEval Stmt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( eval ( less Than Expr ). as Boolean (). value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecute ( statement ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloop Counter ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġeval Stmt ( data Ref Expr : ĠData Ref Expr , Ġplus Expr : ĠExpression , Ġplus Assignment Operator : ĠAssignment Operator ): ĠEval Stmt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġextend ers Ġ= Ġchar ArrayOf (' H ', Ġ' M ', Ġ' R ') ĊĠĠĠĠĠĠĠ Ġval Ġflags Ġ= ĠEval Flags ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhalf Adjust Ġ= Ġ' H ' Ġin Ġextend ers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaximum NumberOf Digits Rule Ġ= Ġ' M ' Ġin Ġextend ers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Decimal Position Rule Ġ= Ġ' R ' Ġin Ġextend ers ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠEval Stmt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ref Expr , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplus Expr , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplus Assignment Operator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflags Ġ= Ġflags , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition Ġ= Ġnull ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ ĠK ute 1 0 _ 5 5 (). performance Comp aring (). forEach Ġ{ Ġprintln ( it ) Ġ} Ċ }