diff --git a/src/main.cpp b/src/main.cpp index a451860..82fefff 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -82,8 +82,8 @@ namespace HighGround { class HGNode { HGNodeType nodeType = HGNodeType::None; HGData data; - std::vector children; public: + std::vector 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; diff --git a/tests/math.hg b/tests/math.hg new file mode 100644 index 0000000..8d2f097 --- /dev/null +++ b/tests/math.hg @@ -0,0 +1 @@ +1 + 1