public void run() {
    try {

      Scanner s = new Scanner(this.reader);
      Parser p = new Parser(s);
      Symbol root = p.parse();

      Program prog = (Program) root.value;
      prog.accept(new PrettyPrintVisitor());

      System.out.print("Parser rodou com sucesso!");

    } catch (CompilerException e) {
      // erro de compilação do arquivo de entrada
      System.err.println(e.getMessage());
    } catch (Exception e) {
      // erro do compilador
      System.err.println("Erro inesperado no parser: " + e.toString());
      e.printStackTrace();
    }
  }