tipc
A TIP to LLVM compiler
PrettyPrinter.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "ASTVisitor.h"
4 #include <iostream>
5 #include <ostream>
6 #include <string>
7 
22 class PrettyPrinter : public ASTVisitor {
23 public:
24  PrettyPrinter() : os(std::cout), indentChar(' '), indentSize(2) {}
25  PrettyPrinter(std::ostream &os, char indentChar, int indentSize)
26  : os(os), indentChar(indentChar), indentSize(indentSize) {}
27 
28  static void print(ASTProgram *p, std::ostream &os, char c, int n);
29 
30  virtual void endVisit(ASTProgram *element) override;
31  virtual bool visit(ASTFunction *element) override;
32  virtual void endVisit(ASTFunction *element) override;
33  virtual void endVisit(ASTNumberExpr *element) override;
34  virtual void endVisit(ASTVariableExpr *element) override;
35  virtual void endVisit(ASTBinaryExpr *element) override;
36  virtual void endVisit(ASTInputExpr *element) override;
37  virtual void endVisit(ASTFunAppExpr *element) override;
38  virtual void endVisit(ASTAllocExpr *element) override;
39  virtual void endVisit(ASTRefExpr *element) override;
40  virtual void endVisit(ASTDeRefExpr *element) override;
41  virtual void endVisit(ASTNullExpr *element) override;
42  virtual void endVisit(ASTFieldExpr *element) override;
43  virtual void endVisit(ASTRecordExpr *element) override;
44  virtual void endVisit(ASTAccessExpr *element) override;
45  virtual void endVisit(ASTDeclNode *element) override;
46  virtual void endVisit(ASTDeclStmt *element) override;
47  virtual void endVisit(ASTAssignStmt *element) override;
48  virtual bool visit(ASTBlockStmt *element) override;
49  virtual void endVisit(ASTBlockStmt *element) override;
50  virtual bool visit(ASTWhileStmt *element) override;
51  virtual void endVisit(ASTWhileStmt *element) override;
52  virtual bool visit(ASTIfStmt *element) override;
53  virtual void endVisit(ASTIfStmt *element) override;
54  virtual void endVisit(ASTOutputStmt *element) override;
55  virtual void endVisit(ASTReturnStmt *element) override;
56  virtual void endVisit(ASTErrorStmt *element) override;
57 
58 private:
59  std::string indent() const;
60  int indentLevel = 0;
61  char indentChar;
62  int indentSize;
63  std::ostream &os;
64 
65  /*
66  * LIFO record of strings produced by visiting sub-trees
67  */
68  std::vector<std::string> visitResults;
69 };
Class for a record field access.
Definition: ASTAccessExpr.h:7
Class for alloc expression.
Definition: ASTAllocExpr.h:7
Class for assignment.
Definition: ASTAssignStmt.h:8
Class for a binary operator.
Definition: ASTBinaryExpr.h:7
Class for block of statements.
Definition: ASTBlockStmt.h:7
Class for dereferencing a pointer expression.
Definition: ASTDeRefExpr.h:7
Class for declaring a name, e.g., function, parameter, variable.
Definition: ASTDeclNode.h:7
Class for local variable declaration statement.
Definition: ASTDeclStmt.h:8
Class for a error statement.
Definition: ASTErrorStmt.h:8
Class for the field of a record.
Definition: ASTFieldExpr.h:7
Class for function call expressions.
Definition: ASTFunAppExpr.h:7
Class for defining the signature, local declarations, and a body of a function.
Definition: ASTFunction.h:11
Class for if-then-else.
Definition: ASTIfStmt.h:8
Class for input expression.
Definition: ASTInputExpr.h:7
Class for a null expression.
Definition: ASTNullExpr.h:7
Class for numeric literals.
Definition: ASTNumberExpr.h:7
Class for an output statement.
Definition: ASTOutputStmt.h:8
Class for a program which is a name and a list of functions.
Definition: ASTProgram.h:11
Class for defining a record.
Definition: ASTRecordExpr.h:8
Class for referencing the address of an expression.
Definition: ASTRefExpr.h:7
Class for a return statement.
Definition: ASTReturnStmt.h:8
Class for referencing a variable.
Definition: ASTVariableExpr.h:7
Base class for AST visitors.
Definition: ASTVisitor.h:23
Class for a while loop.
Definition: ASTWhileStmt.h:8
GNU Style PrettyPrinter.
Definition: PrettyPrinter.h:22
PrettyPrinter()
Definition: PrettyPrinter.h:24
virtual bool visit(ASTFunction *element) override
Definition: PrettyPrinter.cpp:55
PrettyPrinter(std::ostream &os, char indentChar, int indentSize)
Definition: PrettyPrinter.h:25
virtual void endVisit(ASTProgram *element) override
Definition: PrettyPrinter.cpp:36
static void print(ASTProgram *p, std::ostream &os, char c, int n)
Definition: PrettyPrinter.cpp:6