forked from ground/highground
Addition
This commit is contained in:
32
src/main.cpp
32
src/main.cpp
@@ -82,8 +82,8 @@ namespace HighGround {
|
||||
class HGNode {
|
||||
HGNodeType nodeType = HGNodeType::None;
|
||||
HGData data;
|
||||
std::vector<HGNode> children;
|
||||
public:
|
||||
std::vector<HGNode> children;
|
||||
std::string outputId;
|
||||
HGNode(HGNodeType nodeType) : nodeType(nodeType) {}
|
||||
HGNode(HGNodeType nodeType, HGData data) : nodeType(nodeType), data(data) {}
|
||||
@@ -147,6 +147,20 @@ namespace HighGround {
|
||||
code.push_back(codeBlock);
|
||||
break;
|
||||
}
|
||||
case HGNodeType::Add: {
|
||||
HGGroundCodeBlock codeBlock;
|
||||
outputId = "tmp_" + std::to_string(tmpIdIterator++);
|
||||
GroundInstruction gi = groundCreateInstruction(ADD);
|
||||
if (children.size() < 2) {
|
||||
std::cout << "Need more stuff to add\n";
|
||||
}
|
||||
groundAddReferenceToInstruction(&gi, groundCreateReference(VALREF, children[0].outputId.data()));
|
||||
groundAddReferenceToInstruction(&gi, groundCreateReference(VALREF, children[1].outputId.data()));
|
||||
groundAddReferenceToInstruction(&gi, groundCreateReference(DIRREF, outputId.data()));
|
||||
codeBlock.code.push_back(gi);
|
||||
code.push_back(codeBlock);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
std::cout << "Not implemented yet\n";
|
||||
}
|
||||
@@ -240,6 +254,9 @@ namespace HighGround {
|
||||
if (getDataType(in) != HGDataType::None) {
|
||||
return HGNodeType::Value;
|
||||
}
|
||||
if (in == "+") {
|
||||
return HGNodeType::Add;
|
||||
}
|
||||
return HGNodeType::None;
|
||||
}
|
||||
|
||||
@@ -288,6 +305,19 @@ namespace HighGround {
|
||||
}
|
||||
break;
|
||||
}
|
||||
case HGNodeType::Add: {
|
||||
HGNode addNode(HGNodeType::Add);
|
||||
addNode.addNode(rootNode.children.back());
|
||||
rootNode.children.pop_back();
|
||||
auto tokenopt = consume();
|
||||
if (tokenopt) {
|
||||
addNode.addNode(Parser({tokenopt.value()}).parse().children[0]);
|
||||
} else {
|
||||
std::cout << "FEED ME MORE TOKENS\n";
|
||||
}
|
||||
rootNode.addNode(addNode);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return rootNode;
|
||||
|
||||
1
tests/math.hg
Normal file
1
tests/math.hg
Normal file
@@ -0,0 +1 @@
|
||||
1 + 1
|
||||
Reference in New Issue
Block a user