docs: def build_ast(self):
          """Convert an top level parse tree node into an AST mod."""
          n = self.root_node
          if n.type == syms.file_input:
              stmts = []
              for i in range(len(n.children) - 1):
                  stmt = n.children[i]
                  if stmt.type == tokens.NEWLINE:
                      continue
                  sub_stmts_count = self.number_of_statements(stmt)
                  if sub_stmts_count == 1:
                      stmts.append(self.handle_stmt(stmt))
                  else:
                      stmt = stmt.children[0]
                      for j in range(sub_stmts_count):
                          small_stmt = stmt.children[j * 2]
                          stmts.append(self.handle_stmt(small_stmt))
              return ast.Module(stmts)
          elif n.type == syms.eval_input:
              body = self.handle_testlist(n.children[0])
              return ast.Expression(body)
          elif n.type == syms.single_input:
              first_child = n.children[0]
              if first_child.type == tokens.NEWLINE:
                  # An empty line.
                  return ast.Interactive([])
              else:
                  num_stmts = self.number_of_statements(first_child)
                  if num_stmts == 1:
                      stmts = [self.handle_stmt(first_child)]
                  else:
                      stmts = []
                      for i in range(0, len(first_child.children), 2):
                          stmt = first_child.children[i]
                          if stmt.type == tokens.NEWLINE:
                              break
                          stmts.append(self.handle_stmt(stmt))
                  return ast.Interactive(stmts)
          else:
              raise AssertionError("unknown root node")