summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTuowen Zhao <ztuowen@gmail.com>2016-09-26 10:06:01 -0600
committerTuowen Zhao <ztuowen@gmail.com>2016-09-26 10:06:01 -0600
commitf4474891acec5918f94bc126fed8eb9bb2792912 (patch)
tree819864472649715d2bae19eeeba450a94621b5f2
parenteb1ab91e1a12520d825cae60ee49655a0e8c4b94 (diff)
downloadchill-f4474891acec5918f94bc126fed8eb9bb2792912.tar.gz
chill-f4474891acec5918f94bc126fed8eb9bb2792912.tar.bz2
chill-f4474891acec5918f94bc126fed8eb9bb2792912.zip
set printS getPrecS to protected
-rw-r--r--include/printer/cfamily.h14
-rw-r--r--include/printer/dump.h9
-rw-r--r--include/printer/generic.h56
3 files changed, 38 insertions, 41 deletions
diff --git a/include/printer/cfamily.h b/include/printer/cfamily.h
index 83e7765..0426ded 100644
--- a/include/printer/cfamily.h
+++ b/include/printer/cfamily.h
@@ -7,23 +7,19 @@
#include "printer/generic.h"
-/*!
- * \file
- */
-
namespace chill {
namespace printer {
/*!
- * \brief Print the AST for C like syntax, This replace the old print function
+ * \brief Print the AST in a C-like syntax.
+ *
+ * This replace the old print function.
* Custom multiplexer should not be needed. This version should calculate the correct precedence for expressions.
* Expression should be encapsulated in {} or () or ended with ; with heuristics at the parent node
*
* All precedence calculation taken from http://en.cppreference.com/w/cpp/language/operator_precedence
*/
class CFamily : public GenericPrinter {
- public:
- CFamily() {}
-
+ protected:
virtual int getPrecS(chillAST_BinaryOperator *n);
virtual int getPrecS(chillAST_CallExpr *n);
@@ -109,6 +105,8 @@ namespace chill {
virtual void printS(std::string ident, chillAST_UnaryOperator *n, std::ostream &o);
virtual void printS(std::string ident, chillAST_VarDecl *n, std::ostream &o);
+ public:
+ CFamily() {}
};
}
}
diff --git a/include/printer/dump.h b/include/printer/dump.h
index fd382a3..894ea4a 100644
--- a/include/printer/dump.h
+++ b/include/printer/dump.h
@@ -10,14 +10,13 @@
namespace chill {
namespace printer {
/*!
- * \brief this replace the old dump function in the chillAST
+ * \brief Dump the whole AST in Prefix format
*
+ * This replace the old dump function in the chillAST.
* Everthing is written in a Tree-like structure: (<NodeName> <Params>). No precedence calculation is needed.
*/
class Dump : public GenericPrinter {
- public:
- Dump() {}
-
+ protected:
virtual void printS(std::string ident, chillAST_ArraySubscriptExpr *n, std::ostream &o);
virtual void printS(std::string ident, chillAST_BinaryOperator *n, std::ostream &o);
@@ -86,6 +85,8 @@ namespace chill {
virtual void printS(std::string ident, chillAST_VarDecl *n, std::ostream &o);
+ public:
+ Dump() {}
/*!
* Just prints everything. Indent is igored due to need to limit the number of output
* @param ident
diff --git a/include/printer/generic.h b/include/printer/generic.h
index 6918136..a466e7f 100644
--- a/include/printer/generic.h
+++ b/include/printer/generic.h
@@ -9,33 +9,18 @@
#include <string>
#include <sstream>
-/*!
- * \file
- * \brief this is a generic AST printSer that prints the code out to a C-family like syntax
- */
namespace chill {
+ /*!
+ * \brief this is a generic AST printSer that prints the code out to a C-family like syntax
+ */
namespace printer {
class GenericPrinter {
protected:
std::string identSpace;
- public:
- GenericPrinter() { identSpace = " "; }
- //! Set the indentation for print
- /*!
- * Some subclass has indentation unused, like Dump. Also, only spaces is supported,
- * so it is a number of the spaces in the indentaion.
- * @param numspaces number of spaces for the indentation
- */
- void setIndentSpace(int numspaces) {
- identSpace = "";
- for (int i = 0; i < numspaces; ++i)
- identSpace += " ";
- }
-
- /*!
- * Default return value for get prec, can be used as a reference
- * @return default precedence
- */
+ /*!
+ * Default return value for get prec, can be used as a reference
+ * @return default precedence
+ */
virtual int defGetPrecS() { return INT8_MAX; }
virtual int getPrecS(chillAST_ArraySubscriptExpr *n) { return defGetPrecS(); }
@@ -105,12 +90,6 @@ namespace chill {
virtual int getPrecS(chillAST_UnaryOperator *n) { return defGetPrecS(); }
virtual int getPrecS(chillAST_VarDecl *n) { return defGetPrecS(); }
- //! return the Precedence of the corresponding AST node
- /*!
- * @param n the chillAST_Node
- * @return a int representing the subnodes's precedence, 0 being the highest, INT8_MAX being the default
- */
- virtual int getPrec(chillAST_Node *n);
//! default error output when encountering not recognized error code
/*!
* @param ident
@@ -190,6 +169,26 @@ namespace chill {
virtual void printS(std::string ident, chillAST_UnaryOperator *n, std::ostream &o) { errorPrintS(ident, n, o); }
virtual void printS(std::string ident, chillAST_VarDecl *n, std::ostream &o) { errorPrintS(ident, n, o); }
+
+ public:
+ GenericPrinter() { identSpace = " "; }
+ //! Set the indentation for print
+ /*!
+ * Some subclass has indentation unused, like Dump. Also, only spaces is supported,
+ * so it is a number of the spaces in the indentaion.
+ * @param numspaces number of spaces for the indentation
+ */
+ void setIndentSpace(int numspaces) {
+ identSpace = "";
+ for (int i = 0; i < numspaces; ++i)
+ identSpace += " ";
+ }
+ //! return the Precedence of the corresponding AST node
+ /*!
+ * @param n the chillAST_Node
+ * @return a int representing the subnodes's precedence, 0 being the highest, INT8_MAX being the default
+ */
+ virtual int getPrec(chillAST_Node *n);
//! Print the AST to string stream, multiplexer
/*!
* @param ident indentation of the node
@@ -224,7 +223,6 @@ namespace chill {
virtual void printErr(std::string ident, chillAST_Node *n) {
print(ident, n, std::cerr);
}
-
//! Print the subexpression with precedence
virtual void printPrec(std::string ident, chillAST_Node *n, std::ostream &o, int prec) {
if (getPrec(n) > prec) o << "(";