(command.CommandList
  children: [
    (command.FuncDef
      name: READ
      body: 
        (command.BraceGroup
          children: [(C {(read)} {(-u)} {(0)} {(-e)} {(-p)} {(DQ ('user> '))} {(r)})]
        )
    )
    (command.FuncDef
      name: EVAL
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(lhs_expr.LhsName name:r) op:Equal rhs:{(DQ (${ VSub_Number 1))})]
            )
          ]
        )
    )
    (command.FuncDef
      name: PRINT
      body: 
        (command.BraceGroup
          children: [
            (command.Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(lhs_expr.LhsName name:r) op:Equal rhs:{(DQ (${ VSub_Number 1))})]
            )
          ]
        )
    )
    (command.WhileUntil
      keyword: <KW_While while>
      cond: [(command.Sentence child:(C {(true)}) terminator:<Op_Semi ';'>)]
      body: 
        (command.DoGroup
          children: [
            (C {(READ)})
            (C {(EVAL)} {(DQ (${ VSub_Name r))})
            (C {(PRINT)} {(DQ (${ VSub_Name r))})
            (C {(echo)} {(DQ (${ VSub_Name r))})
          ]
        )
    )
  ]
)