package Ġru . sp ba u . sm ir nov . cli . preprocessing . parsing Ċ Ċ import Ġru . sp ba u . sm ir nov . CLI Base Visitor Ċ import Ġru . sp ba u . sm ir nov . CLI Parser Ċ import Ġru . sp ba u . sm ir nov . cli . commands . Executable Factory Ċ import Ġru . sp ba u . sm ir nov . cli . commands . Executable Ċ Ċ /** Ċ Ġ* ĠVisitor Ġfor Ġgrammar Ġfrom Ġ` CLI . g 4 `. Ċ Ġ* Ċ Ġ* ĠVis its Ġcommand Ġin Ġtheir Ġexecution Ġorder Ġand Ġadds Ġthem Ġto Ġ` commands ` Ġlist Ċ Ġ*/ Ċ class ĠOperation Visitor ( ĊĠĠĠ Ġprivate Ġval Ġcommands : ĠMutable List < Executable >, ĊĠĠĠ Ġprivate Ġval Ġexecutable Factory : ĠExec utable Factory Ċ ): ĠCLI Base Visitor < String ?> () Ġ{ ĊĊĠĠĠ Ġ/** ĠVis its Ġassignment Ġstatement Ġand Ġcreates Ġ` Assignment ` Ġobject Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġvisit Assignment ( ctx : ĠCLI Parser . Assignment Context ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvariable Name Ġ= Ġctx . variable . text ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġctx . value . accept ( this ) !! ĊĊĠĠĠĠĠĠĠ Ġcommands . add ( executable Factory . create Executable (" =", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( variable Name , Ġvalue ))) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠVis its Ġset Ġof Ġcommand Ġin Ġtheir Ġexecution Ġorder Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġvisit Set Of Commands ( ctx : ĠCLI Parser . Set Of Commands Context ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( command Ġin Ġctx . commands ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand . accept ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCreates Ġcommand Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġvisit Command ( ctx : ĠCLI Parser . Command Context ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarguments Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( argument Ġin Ġctx . args ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargument Value Ġ= Ġargument . accept ( this ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments . add ( argument Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcommand Name Ġ= Ġctx . command Name . accept ( this ) !! ĊĠĠĠĠĠĠĠ Ġcommands . add ( executable Factory . create Executable ( command Name , Ġarguments )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠDeletes Ġquotes Ġfrom Ġdouble Ġquoted Ġtoken Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġvisit Double Quote ( ctx : ĠCLI Parser . Double Quote Context ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġctx . text . substring ( 1 Ġuntil Ġctx . text . last Index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠDeletes Ġquotes Ġfrom Ġsingle Ġquoted Ġtoken Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġvisit Single Quote ( ctx : ĠCLI Parser . Single Quote Context ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġctx . text . substring ( 1 Ġuntil Ġctx . text . last Index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġtoken 's Ġvalue Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġvisit Un quote ( ctx : ĠCLI Parser . Un quote Context ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġctx . text ĊĠĠĠ Ġ} Ċ } Ċ