@Olga1994
0 / 0 / 1
Регистрация: 12.03.2013
Сообщений: 24
|
|
1
|
Перевод из С++ в С
28.05.2013, 06:01. Просмотров 345. Ответов 0
C++ | 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
| #ifndef _lex_h_
#define _lex_h_
#include <deque>
struct Lexer
{
std::deque<std::string> tokens;
std::string GetToken()
{
if (!tokens.size()) return "";
std::string token = *tokens.begin();
tokens.pop_front();
return token;
}
void Put(std::string token)
{
tokens.push_front(token);
}
void Create(std::string data)
{
for (;data.length(); Trim(data))
{
if ((data[0] >= 'A' && data[0] <= 'Z') || (data[0] >= 'a' && data[0] <= 'z') || (data[0] >= '0' && data[0] <= '9'))
{
AddWord(data);
}
else if ((data[0] == '<' || data[0] == '>' || data[0] == ':') && data[1] == '=')
{
AddToken(data, 2);
}
else if (data[0] == '<' && data[1] == '>')
{
AddToken(data, 2);
}
else if (data[0] == '<' || data[0] == '>' || data[0] == ':' ||
data[0] == ';' || data[0] == ',' || data[0] == '(' || data[0] == ')' ||
data[0] == '+' || data[0] == '-' || data[0] == '*')
{
AddToken(data, 1);
}
else
{
throw __FUNCTION__;
}
}
}
void AddToken(std::string& s, const int sz)
{
std::string tok = s.substr(0, sz);
tokens.push_back(tok);
s = s.substr(sz, s.length() - sz);
}
void AddWord(std::string& s)
{
std::string word = ""; int i = 0;
for (; i < s.length(); i++)
{
if (!((s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= 'a' && s[i] <= 'z') || (s[i] >= '0' && s[i] <= '9')))
break;
word += s[i];
}
tokens.push_back(word);
s = s.substr(i, s.length() - i);
}
void Trim(std::string& s)
{
for (int i = 0; i < s.length(); i++)
{
if (s[i] != ' ' && s[i] != '\t')
{
s = s.substr(i, s.length() - i);
break;
}
}
}
};
#endif |
|
0
|