(command.CommandList children: [ (C {<source>} { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<dirname>} {($ Id.VSub_Number '$0')}) ) <'/reader.sh'> } ) (C {<source>} { (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<dirname>} {($ Id.VSub_Number '$0')}) ) <'/printer.sh'> } ) (command.ShFunction name: READ body: (BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DPipe] children: [ (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 1))} {<Id.Lit_RBracket ']'>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:r) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1))} spids: [46] ) ] ) (C {<READLINE>}) ] ) (C {<READ_STR>} {(DQ (${ Id.VSub_Name r))}) ] ) ) (command.ShFunction name: EVAL body: (BraceGroup children: [ (C {<local>} {<Id.Lit_VarLike 'ast='> (DQ (${ Id.VSub_Number 1))}) (C {<local>} {<Id.Lit_VarLike 'env='> (DQ (${ Id.VSub_Number 2))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:r) op: assign_op.Equal rhs: (word.Empty) spids: [100] ) ] ) (command.AndOr ops: [Id.Op_DAmp] children: [ (command.DBracket expr: (bool_expr.WordTest w:{(DQ (${ Id.VSub_Name __ERROR))}) ) (command.ControlFlow token: <Id.ControlFlow_Return return> arg_word: {<1>} ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:r) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name ast))} spids: [120] ) ] ) ] ) ) (command.ShFunction name: PRINT body: (BraceGroup children: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.WordTest w:{(DQ (${ Id.VSub_Name __ERROR))}) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<_pr_str>} {(DQ (${ Id.VSub_Name __ERROR))} {<yes>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:r) op: assign_op.Equal rhs: {(DQ <'Error: '> (${ Id.VSub_Name r))} spids: [168] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:__ERROR) op: assign_op.Equal rhs: (word.Empty) spids: [177] ) ] ) ] spids: [141 154] ) ] else_action: [(C {<_pr_str>} {(DQ (${ Id.VSub_Number 1))} {<yes>})] ) ] ) ) (command.ShFunction name: REP body: (BraceGroup children: [ (C {<READ>} {(DQ (${ Id.VSub_Number 1))}) (C {<EVAL>} {(DQ (${ Id.VSub_Name r))}) (C {<PRINT>} {(DQ (${ Id.VSub_Name r))}) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)] ) body: (command.DoGroup children: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<READLINE>} {(DQ <'user> '>)}) (command.ControlFlow token: <Id.ControlFlow_Exit exit> arg_word: {(DQ ($ Id.VSub_QMark '$?'))} ) ] ) (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.DBracket expr:(bool_expr.WordTest w:{(DQ (${ Id.VSub_Name r))})) (C {<REP>} {(DQ (${ Id.VSub_Name r))}) (C {<echo>} {(DQ (${ Id.VSub_Name r))}) ] ) ] ) ) ] )