-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathJToken.cpp
80 lines (73 loc) · 2.25 KB
/
JToken.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
#include "JToken.hpp"
namespace J { namespace JTokens {
JTokenBase::~JTokenBase() {}
JWord::Ptr get_bare_word(JTokenBase::Ptr token, JMachine::Ptr m) {
switch (token->get_j_token_elem_type()) {
case j_token_elem_type_noun:
return get_word_as_word<JNoun>(token);
break;
case j_token_elem_type_verb:
return get_word_as_word<JVerb>(token);
break;
case j_token_elem_type_adverb:
return get_word_as_word<JAdverb>(token);
break;
case j_token_elem_type_conjunction:
return get_word_as_word<JConjunction>(token);
break;
case j_token_elem_type_operator:
do {
optional<JWord::Ptr> o(m->lookup_symbol(static_cast<JTokenOperator*>(token.get())->get_operator_name()));
assert(o);
return *o;
} while(0);
break;
case j_token_elem_type_name:
do {
optional<JWord::Ptr> o(m->lookup_name(static_cast<JTokenName*>(token.get())->get_name()));
assert(o);
return *o;
} while(0);
break;
default:
throw std::logic_error("get_bare_word was called with wrong arguments");
}
}
JTokenBase::Ptr construct_token(JWord::Ptr word) {
switch (word->get_grammar_class()) {
case grammar_class_noun:
return JTokenWord<JNoun>::Instantiate(get_word_as_type<JNoun>(word));
break;
case grammar_class_verb:
return JTokenWord<JVerb>::Instantiate(get_word_as_type<JVerb>(word));
break;
case grammar_class_adverb:
return JTokenWord<JAdverb>::Instantiate(get_word_as_type<JAdverb>(word));
break;
case grammar_class_conjunction:
return JTokenWord<JAdverb>::Instantiate(get_word_as_type<JAdverb>(word));
break;
default:
throw std::logic_error("Word is of illegal type");
}
}
std::ostream& operator<<(std::ostream& os, JTokenBase::Ptr base) {
return (os << base->to_string());
}
std::ostream& operator<<(std::ostream& os, const list<JTokenBase::Ptr>& lst) {
os << "TokenBaseList[";
for (list<JTokenBase::Ptr>::const_iterator iter(lst.begin()); iter != lst.end(); ++iter) {
os << (*iter);
}
os << "]";
return os;
}
std::ostream& operator<<(std::ostream& os, const deque<JTokenBase::Ptr>& lst) {
os << "TokenBaseList[";
for (deque<JTokenBase::Ptr>::const_iterator iter(lst.begin()); iter != lst.end(); ++iter) {
os << (*iter);
}
os << "]";
return os;
}
}}