package Ġcom . github . dur un . nit ron . core . ast . visitor Ċ Ċ import Ġcom . github . dur un . nit ron . core . ast . node . Ast Node Ċ import Ġcom . github . dur un . nit ron . core . ast . node . Ast Rule Node Ċ import Ġcom . github . dur un . nit ron . core . ast . node . Ast Terminal Node Ċ Ċ object ĠAst Print Visitor ĊĠĠĠ Ġ: ĠAst Visitor < String > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġvisit ( node : ĠAst Node ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Rule ( node : ĠAst Rule Node ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġthis Tokens Ġ= Ġnode . getText (). split (" Ġ"). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take ( n ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString (" Ġ") Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n Ġ< Ġit . size ) Ġ" Ġ..." Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġthis Text Ġ= Ġ"${ node . type . name }\ t \ t $ this Tokens " ĊĠĠĠĠĠĠĠ Ġval Ġchildren Text Ġ= Ġnode . children . or Empty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("\ n ") Ġ{ Ġit . accept ( this ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. prepend Indent ("\ t ") ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Text Ġ+ Ġ"\ n " Ġ+ Ġchildren Text ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvisit Terminal ( node : ĠAst Terminal Node ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"${ node . type . name } Ġ${ node . getText () }" ĊĠĠĠ Ġ} Ċ }