aboutsummaryrefslogtreecommitdiff
path: root/src/tree.cc
diff options
context:
space:
mode:
authorAdrian Kummerlaender2015-06-10 20:32:13 +0200
committerAdrian Kummerlaender2015-06-10 20:32:13 +0200
commit0985a623e4cbd14da77fddf1bb1a9ca3384b28ea (patch)
tree9feca01ba5a93dfdf40efffd062630b856274dd4 /src/tree.cc
parentab3a0312247f1467cd1eee81f6b1d22b499a8715 (diff)
downloadSimpleParser-0985a623e4cbd14da77fddf1bb1a9ca3384b28ea.tar
SimpleParser-0985a623e4cbd14da77fddf1bb1a9ca3384b28ea.tar.gz
SimpleParser-0985a623e4cbd14da77fddf1bb1a9ca3384b28ea.tar.bz2
SimpleParser-0985a623e4cbd14da77fddf1bb1a9ca3384b28ea.tar.lz
SimpleParser-0985a623e4cbd14da77fddf1bb1a9ca3384b28ea.tar.xz
SimpleParser-0985a623e4cbd14da77fddf1bb1a9ca3384b28ea.tar.zst
SimpleParser-0985a623e4cbd14da77fddf1bb1a9ca3384b28ea.zip
Changed token determination regarding identifier values
* all non operator and digit tokens are now identifier tokens as this seems more intuitive than generating number token lists containing non-digit values * renamed lexer-local `level` variable to `nesting` as to avoid confusion between nesting state and predecence levels
Diffstat (limited to 'src/tree.cc')
-rw-r--r--src/tree.cc24
1 files changed, 10 insertions, 14 deletions
diff --git a/src/tree.cc b/src/tree.cc
index f8c17ae..8e29255 100644
--- a/src/tree.cc
+++ b/src/tree.cc
@@ -12,7 +12,7 @@
namespace {
using SimpleParser::Node;
- inline boost::optional<Node*> top(const std::stack<Node*> stack) {
+ boost::optional<Node*> top(const std::stack<Node*> stack) {
if ( !stack.empty() ) {
return boost::make_optional<Node*>(
stack.top()
@@ -22,7 +22,7 @@ namespace {
}
}
- inline boost::optional<Node*> pop(std::stack<Node*>& stack) {
+ boost::optional<Node*> pop(std::stack<Node*>& stack) {
if ( boost::optional<Node*> node{ top(stack) } ) {
stack.pop();
@@ -63,7 +63,7 @@ std::string Tree::print() const {
for ( auto&& node : this->node_collection_ ) {
out << "node"
- << nodeIndex
+ << nodeIndex
<< " [ label = \""
<< node->print()
<< "\"]; ";
@@ -74,9 +74,9 @@ std::string Tree::print() const {
for ( auto&& child : this->node_collection_ ) {
if ( node->isParentOf(child.get()) ) {
out << "\"node"
- << nodeIndex
+ << nodeIndex
<< "\" -> \"node"
- << childIndex
+ << childIndex
<< "\"; ";
}
@@ -134,10 +134,10 @@ Node* Tree::buildTree(const std::string& term) {
OperatorNode*const lastOperator{
static_cast<OperatorNode*const>(*lastNode)
};
-
+
if ( precedence(elementToken)
> precedence(lastOperator->token()) ) {
- operators.emplace(
+ operators.emplace(
this->addNode<OperatorNode>(elementToken)
);
} else {
@@ -145,9 +145,7 @@ Node* Tree::buildTree(const std::string& term) {
boost::optional<Node*> rightChild { pop(operands) };
boost::optional<Node*> leftChild { pop(operands) };
- if ( currentOperator &&
- rightChild &&
- leftChild ) {
+ if ( currentOperator && rightChild && leftChild ) {
static_cast<OperatorNode*const>(
*currentOperator
)->setChildren(
@@ -172,7 +170,7 @@ Node* Tree::buildTree(const std::string& term) {
};
if ( subElements.size() == 1 ) {
- switch ( determineToken(subElements.front()) ) {
+ switch ( determineToken(subElements.front().front()) ) {
case TokenType::VALUE_NUMBER:
case TokenType::OPERATOR_MINUS: {
operands.emplace(
@@ -210,9 +208,7 @@ Node* Tree::buildTree(const std::string& term) {
boost::optional<Node*> rightChild { pop(operands) };
boost::optional<Node*> leftChild { pop(operands) };
- if ( currentOperator &&
- rightChild &&
- leftChild ) {
+ if ( currentOperator && rightChild && leftChild ) {
static_cast<OperatorNode*const>(
*currentOperator
)->setChildren(