(CommandList
  children: [
    (FuncDef
      name: READ
      body: 
        (BraceGroup
          children: [(C {(read)} {(-u)} {(0)} {(-e)} {(-p)} {(DQ ('user> '))} {(r)})]
          spids: [9]
        )
      spids: [4 8]
    )
    (FuncDef
      name: EVAL
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:r)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 1))}
                  spids: [39]
                )
              ]
              spids: [39]
            )
          ]
          spids: [36]
        )
      spids: [31 35]
    )
    (FuncDef
      name: PRINT
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:r)
                  op: Equal
                  rhs: {(DQ (${ VSub_Number 1))}
                  spids: [57]
                )
              ]
              spids: [57]
            )
          ]
          spids: [54]
        )
      spids: [49 53]
    )
    (While
      cond: [(Sentence child:(C {(true)}) terminator:<Op_Semi ';'>)]
      body: 
        (DoGroup
          children: [
            (C {(READ)})
            (C {(EVAL)} {(DQ (${ VSub_Name r))})
            (C {(PRINT)} {(DQ (${ VSub_Name r))})
            (C {(echo)} {(DQ (${ VSub_Name r))})
          ]
          spids: [72 104]
        )
    )
  ]
)