-
Notifications
You must be signed in to change notification settings - Fork 0
/
schemes.cpp
executable file
·155 lines (144 loc) · 2.59 KB
/
schemes.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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*
* schemes.cpp
* Benjamin Ferid Issa
* February 8th 2017
*
* Based on files provided by Dr. Frank Jones, Computer Science Department, Brigham Young University
*/
#include "schemes.h"
bool schemes::input(char Character)
{
bool stillValid = false;
if(Character == 'S')
{
stillValid = true;
m_token->addCharacter(Character);
nextState(new schemeS1(m_contextManager, m_token));
}
else
{
reject();
}
/*THIS MUST HAPPEN LAST!!!*/
delete this;
return stillValid;
}
bool schemeS1::input(char Character)
{
bool stillValid = false;
if(Character == 'c')
{
stillValid = true;
m_token->addCharacter(Character);
nextState(new schemeC(m_contextManager, m_token));
}
else
{
reject();
}
/*THIS MUST HAPPEN LAST!!!*/
delete this;
return stillValid;
}
bool schemeC::input(char Character)
{
bool stillValid = false;
if(Character == 'h')
{
stillValid = true;
m_token->addCharacter(Character);
nextState(new schemeH(m_contextManager, m_token));
}
else
{
reject();
}
/*THIS MUST HAPPEN LAST!!!*/
delete this;
return stillValid;
}
bool schemeH::input(char Character)
{
bool stillValid = false;
if(Character == 'e')
{
stillValid = true;
m_token->addCharacter(Character);
nextState(new schemeE1(m_contextManager, m_token));
}
else
{
reject();
}
/*THIS MUST HAPPEN LAST!!!*/
delete this;
return stillValid;
}
bool schemeE1::input(char Character)
{
bool stillValid = false;
if(Character == 'm')
{
stillValid = true;
m_token->addCharacter(Character);
nextState(new schemeM(m_contextManager, m_token));
}
else
{
reject();
}
/*THIS MUST HAPPEN LAST!!!*/
delete this;
return stillValid;
}
bool schemeM::input(char Character)
{
bool stillValid = false;
if(Character == 'e')
{
stillValid = true;
m_token->addCharacter(Character);
nextState(new schemeE2(m_contextManager, m_token));
}
else
{
reject();
}
/*THIS MUST HAPPEN LAST!!!*/
delete this;
return stillValid;
}
bool schemeE2::input(char Character)
{
bool stillValid = false;
if(Character == 's')
{
stillValid = true;
m_token->addCharacter(Character);
nextState(new schemeS2(m_contextManager, m_token));
}
else
{
reject();
}
/*THIS MUST HAPPEN LAST!!!*/
delete this;
return stillValid;
}
bool schemeS2::input(char Character)
{
//anything that isn't an alphanumeric will do as a delimeter
if((Character >= 'a' && Character <= 'z') ||
(Character >= 'A' && Character <= 'Z') ||
(Character >= '0' && Character <= '9'))
{
reject();//this isn't the keyword schemes, it may be an ID
}
else
{
m_token->setType(SCHEMES);
}
/*THIS MUST HAPPEN LAST!!!*/
delete this;
return false;
}