docs: def get_vars(n):
      """
      extract variables from expression node
      defined by tuple-pair: (_var_, [variable name])
      """
      op = n[0]
      if op.startswith('_') and op.endswith('_'):
          op = op.strip('_')
          if op == 'var':
              return [n[1]]
          return []
      else:
          ret = []
          for c in n[1:]:
              vs = get_vars(c)
              if vs:
                  ret.extend(vs)
          return ret