From 967be9e750221ab2ab783f95df79bb26d290a45e Mon Sep 17 00:00:00 2001 From: Martial Simon Date: Mon, 15 Sep 2025 01:07:58 +0200 Subject: add: added projects --- tiger-compiler/src/ast/pretty-printer.hh | 96 ++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 tiger-compiler/src/ast/pretty-printer.hh (limited to 'tiger-compiler/src/ast/pretty-printer.hh') diff --git a/tiger-compiler/src/ast/pretty-printer.hh b/tiger-compiler/src/ast/pretty-printer.hh new file mode 100644 index 0000000..7532331 --- /dev/null +++ b/tiger-compiler/src/ast/pretty-printer.hh @@ -0,0 +1,96 @@ +/** + ** \file ast/pretty-printer.hh + ** \brief Declaration of ast::PrettyPrinter. + */ + +#pragma once + +#include +#include +#include + +namespace ast +{ + /// Visit an Ast and print the content of each node. + class PrettyPrinter + : virtual public DefaultConstVisitor + , virtual public ObjectConstVisitor + , virtual public AssertConstVisitor + { + public: + using super_type = DefaultConstVisitor; + // Import overloaded virtual functions. + using super_type::operator(); + + /// Build to print on \a ostr. + PrettyPrinter(std::ostream& ostr); + + /// Visit methods. + /// \{ + void operator()(const SimpleVar& e) override; + void operator()(const FieldVar& e) override; + void operator()(const SubscriptVar& e) override; + void operator()(const CastExp& e) override; + // FIXME DONE: Some code was deleted here. + void operator()(const NilExp& e) override; + void operator()(const IntExp& e) override; + void operator()(const StringExp& e) override; + void operator()(const ObjectExp& e) override; + void operator()(const CallExp& e) override; + void operator()(const MethodCallExp& e) override; + void operator()(const OpExp& e) override; + void operator()(const RecordExp& e) override; + void operator()(const SeqExp& e) override; + void operator()(const AssignExp& e) override; + void operator()(const IfExp& e) override; + void operator()(const WhileExp& e) override; + void operator()(const ForExp& e) override; + void operator()(const BreakExp&) override; + void operator()(const LetExp& e) override; + void operator()(const ArrayExp& e) override; + void operator()(const FieldInit& e) override; + /// \} + + /// Visit Var declarations. + void operator()(const VarChunk& e) override; + void operator()(const VarDec& e) override; + + /// Visit Function declarations. + void operator()(const FunctionChunk& e) override; + void operator()(const FunctionDec& e) override; + void operator()(const MethodChunk& e) override; + void operator()(const MethodDec& e) override; + + /// Visit Type declarations. + void operator()(const TypeChunk& e) override; + void operator()(const TypeDec& e) override; + + /** \} */ + + /** \name Visit Type related nodes. + ** \{ */ + void operator()(const NameTy& e) override; + void operator()(const RecordTy& e) override; + void operator()(const ArrayTy& e) override; + void operator()(const ClassTy& e) override; + /** \} */ + + /** \name Visit Field related nodes. */ + void operator()(const Field& e) override; + + /** \name Visit Assertion nodes. */ + void operator()(const AssertExp& e) override; + + private: + // Factor pretty-printing of RecordExp and RecordTy. + template void print_record(const RecordClass& e); + + // Whether we are in a ast::ClassTy. + bool within_classty_p_ = false; + + protected: + /// The stream to print on. + std::ostream& ostr_; + }; + +} // namespace ast -- cgit v1.2.3