summaryrefslogtreecommitdiffstats
path: root/Sencha-lang/ASTInspector.h
blob: a77f4a1b1eda106a96c4ab957dae4849ebfabe5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
 * ASTInspector.h
 *
 *  Created on: Dec 17, 2012
 *      Author: att
 */

#ifndef ASTINSPECTOR_H_
#define ASTINSPECTOR_H_

#include <map>
#include "Visitor.h"
#include "AST/AllTypesOfASTNodes.h"

class ASTInspector: public Visitor {
public:
	ASTInspector();
	unsigned int how_many_visits() { return number_of_visits; }
	unsigned int how_many_occurences_of(std::string type);
	std::string get_report() { return this->inspection_report; }

	virtual ~ASTInspector();
	void forget_everything();
	void visit(Visitable * node);
	void visit(ProgramNode * node);

private:
	unsigned int number_of_visits;
	typedef unsigned int NumberOfNodes;
	std::map<std::string, NumberOfNodes> occurences;
	std::string inspection_report;
	unsigned int depth_level;
	std::string compute_indent();
	void write_report(std::string visit_notes);
	void visit(ConstantExpression * node);
	void visit(BasicExpression * node);
	void visit(UnaryExpression * node);
	void visit(PostfixExpression * node);
	void visit(WhileNode * node);

	void visit(BasicStatement * node);
	void visit(DeclarationStatement * node);
	void visit(Assignment * node);
	void visit(IfNode * node);
	void visit(IncorrectExpression * node);
	void visit(RepeatStatement * node);
	void visit(VariableExpression * node);



};

#endif /* ASTINSPECTOR_H_ */