-
Notifications
You must be signed in to change notification settings - Fork 0
/
declarator.cpp
95 lines (65 loc) · 2.85 KB
/
declarator.cpp
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include "declarator.h"
Declarator & Declarator::getInstance()
{
static Declarator instance;
return instance;
}
//----------------------------------------------------------------
Declarator::Declarator()
{
}
//----------------------------------------------------------------
Declarator::~Declarator()
{
}
//----------------------------------------------------------------
string Declarator::declareVariable(const string & type, const string & variable, const bool & semicolon)
{
if(trace) cout << "\nDeclarator::declareVariable{\n";
string result = "";
if(trace) cout << "\nDeclarator::declareVariable 1\n";
if(declared.count(variable) == 0)
{
if(trace) cout << "\nDeclarator::declareVariable 2\n";
declared.insert(variable);
if(trace) cout << "\nDeclarator::declareVariable 3\n";
result = "";
if(trace) cout << "\nDeclarator::declareVariable 4\n" << "result: " << result << "\ntype: " << type << "\n";
result += type;
if(trace) cout << "\nDeclarator::declareVariable 5\n" << "result: " << result << "\n";
result += " ";
if(trace) cout << "\nDeclarator::declareVariable 6\n" << "result: " << result << "\nvariable: " << variable << "\n";
}
result += variable;
if(trace) cout << "\nDeclarator::declareVariable 7\n" << "result: " << result << "\nsemicolon: " << semicolon << "\n";
result += (semicolon ? "": ";\n");
if(trace) cout << "\nDeclarator::declareVariable 8\n" << "result: " << result << "\n";
if(trace) cout << "\n}Declarator::declareVariable\n" << "result: " << result << "\n";
return result;
}
//----------------------------------------------------------------
string Declarator::declareInt(const string & variable, const bool & semicolon)
{
if(trace) cout << "\nDeclarator::declareInt{\n";
string result = declareVariable("int", variable, semicolon);
if(trace) cout << "\n}Declarator::declareInt\n" << "result: " << result << "\n";
return result;
}
//----------------------------------------------------------------
string Declarator::declareFloat(const string & variable, const bool & semicolon)
{
if(trace) cout << "\nDeclarator::declareFloat{\n";
string result = declareVariable("float", variable, semicolon);
if(trace) cout << "\n}Declarator::declareFloat\n" << "result: " << result << "\n";
return result;
}
//----------------------------------------------------------------
string Declarator::declare(const string & variable, const bool & semicolon)
{
if(trace) cout << "\nDeclarator::declare{\n";
string result = (this->*('i' <= variable[0] && variable[0] <= 'n' ? &Declarator::declareInt : &Declarator::declareFloat))(variable, semicolon);
// string result = declareVariable('i' <= variable[0] && variable[0] <= 'n' ? "int" : "float", variable, semicolon);
if(trace) cout << "\n}Declarator::declare\n" << "result: " << result << "\n";
return result;
}
//----------------------------------------------------------------