(command.CommandList
  children: [
    (command.ShFunction
      name: READ
      body: 
        (command.BraceGroup
          children: [(C {(read)} {(-u)} {(0)} {(-e)} {(-p)} {(DQ ('user> '))} {(r)})]
        )
    )
    (command.ShFunction
      name: EVAL
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:r)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Number 1))}
                  spids: [39]
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: PRINT
      body: 
        (command.BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:r)
                  op: assign_op.Equal
                  rhs: {(DQ (${ Id.VSub_Number 1))}
                  spids: [57]
                )
              ]
            )
          ]
        )
    )
    (command.WhileUntil
      keyword: (Token id:Id.KW_While val:while span_id:67)
      cond: [(command.Sentence child:(C {(true)}) terminator:(Token id:Id.Op_Semi val:';' span_id:70))]
      body: 
        (command.DoGroup
          children: [
            (C {(READ)})
            (C {(EVAL)} {(DQ (${ Id.VSub_Name r))})
            (C {(PRINT)} {(DQ (${ Id.VSub_Name r))})
            (C {(echo)} {(DQ (${ Id.VSub_Name r))})
          ]
        )
    )
  ]
)