Skip to content

Commit 340edc0

Browse files
committed
make transform a virtual method
1 parent e3c1438 commit 340edc0

File tree

5 files changed

+45
-4
lines changed

5 files changed

+45
-4
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
*~
33
*.swp
44
/clops.dSYM
5+
/tags

Makefile

+5
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,8 @@ default:
55

66
release:
77
$(CXX) $(CXXFLAGS) src/main.cpp -o clops -O2 -DNDEBUG
8+
9+
tags:
10+
ctags --recurse=yes --exclude=.git
11+
12+
.PHONY: tags

src/main.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ int main(int argc, char** argv) {
4444
}
4545
}
4646
std::shared_ptr<ListToken> result = Parser::parse(x, std::cin);
47-
std::unique_ptr<HeadEx> transformed = result->transform();
47+
std::unique_ptr<Ex> transformed = result->transform();
4848
std::unique_ptr<Polynomial> p = transformed->eval();
4949
p->print_polynomial(x);
5050
std::cout << '\n';

src/token.cpp

+31-2
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,62 @@
44

55
#include "token.hpp"
66

7+
static const int B_STRONG = 4;
8+
static const int B_MINUSBOUND = 16;
9+
static const int B_END = 1;
10+
711
std::unique_ptr<Polynomial> ListToken::eval() {
812
if (value.size() == 1) {
913
return value[0]->eval();
1014
}
1115
throw std::runtime_error("not implemented");
1216
}
1317

14-
std::unique_ptr<HeadEx> ListToken::transform() {
15-
throw std::runtime_error("not implemented");
18+
std::unique_ptr<Ex> ListToken::transform() {
19+
if (value.size() == 1) {
20+
return value[0]->transform();
21+
}
22+
throw std::runtime_error("ListToken transform, not implemented");
1623
}
1724

1825
std::unique_ptr<Polynomial> PlusToken::eval() {
1926
throw std::runtime_error("not implemented");
2027
}
2128

29+
std::unique_ptr<Ex> PlusToken::transform() {
30+
throw std::runtime_error("PlusToken transform not implemented");
31+
}
32+
2233
std::unique_ptr<Polynomial> MinusToken::eval() {
2334
throw std::runtime_error("not implemented");
2435
}
2536

37+
std::unique_ptr<Ex> MinusToken::transform() {
38+
throw std::runtime_error("MinusToken transform not implemented");
39+
}
40+
2641
std::unique_ptr<Polynomial> MultToken::eval() {
2742
throw std::runtime_error("not implemented");
2843
}
2944

45+
std::unique_ptr<Ex> MultToken::transform() {
46+
throw std::runtime_error("MultToken transform not implemented");
47+
}
48+
3049
std::unique_ptr<Polynomial> VarToken::eval() {
3150
return std::make_unique<Vary>(degree);
3251
}
3352

53+
std::unique_ptr<Ex> VarToken::transform() {
54+
VarEx result(degree);
55+
return std::make_unique<VarEx>(result);
56+
}
57+
3458
std::unique_ptr<Polynomial> NumToken::eval() {
3559
return std::make_unique<Consty>(value);
3660
}
61+
62+
std::unique_ptr<Ex> NumToken::transform() {
63+
NumEx result(value);
64+
return std::make_unique<NumEx>(result);
65+
}

src/token.hpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class Token {
1111

1212
public:
1313
virtual std::unique_ptr<Polynomial> eval() = 0;
14+
virtual std::unique_ptr<Ex> transform() = 0;
1415
virtual ~Token() {}
1516
};
1617

@@ -21,6 +22,7 @@ class NumToken final: public Token {
2122
: value(value)
2223
{}
2324
std::unique_ptr<Polynomial> eval() override;
25+
std::unique_ptr<Ex> transform() override;
2426
};
2527

2628
class VarToken final: public Token {
@@ -30,27 +32,31 @@ class VarToken final: public Token {
3032
: degree(degree)
3133
{}
3234
std::unique_ptr<Polynomial> eval() override;
35+
std::unique_ptr<Ex> transform() override;
3336
};
3437

3538
class PlusToken final: public Token {
3639
public:
3740
std::unique_ptr<Polynomial> eval() override;
41+
std::unique_ptr<Ex> transform() override;
3842
};
3943

4044
class MinusToken final: public Token {
4145
public:
4246
std::unique_ptr<Polynomial> eval() override;
47+
std::unique_ptr<Ex> transform() override;
4348
};
4449

4550
class MultToken final: public Token {
4651
public:
4752
std::unique_ptr<Polynomial> eval() override;
53+
std::unique_ptr<Ex> transform() override;
4854
};
4955

5056
class ListToken final: public Token {
5157
public:
5258
std::unique_ptr<Polynomial> eval() override;
53-
std::unique_ptr<HeadEx> transform();
59+
std::unique_ptr<Ex> transform() override;
5460
ListToken(std::vector<std::shared_ptr<Token>> value)
5561
: value(value)
5662
{}

0 commit comments

Comments
 (0)