aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/diceparser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'diceparser.cpp')
-rw-r--r--diceparser.cpp127
1 files changed, 88 insertions, 39 deletions
diff --git a/diceparser.cpp b/diceparser.cpp
index c588dd4..1d980a6 100644
--- a/diceparser.cpp
+++ b/diceparser.cpp
@@ -85,6 +85,8 @@ bool DiceParser::parseLine(QString str)
bool DiceParser::readExpression(QString& str,ExecutionNode* & node)
{
+ int myNumber = 1;
+ bool hasReadNumber=false;
if(m_parsingToolbox->readOpenParentheses(str))
{
ExecutionNode* internalNode=NULL;
@@ -102,20 +104,43 @@ bool DiceParser::readExpression(QString& str,ExecutionNode* & node)
}
}
+ NumberNode* myNumberNode = NULL;
+ if(NULL==node)
+ {
+ hasReadNumber= m_parsingToolbox->readNumber(str,myNumber);
+
+ myNumberNode = new NumberNode();
+ myNumberNode->setNumber(myNumber);
+ }
+
bool keepParsing = true;
ExecutionNode* execNode=NULL;
keepParsing = readDiceExpression(str,execNode);
- node = execNode;
- execNode = getLatestNode(execNode);
- while(keepParsing)
+ if(NULL!=myNumberNode)
+ {
+ myNumberNode->setNextNode(execNode);
+ node = myNumberNode;
+ }
+ else
+ {
+ node = execNode;
+ }
+ if(NULL!=execNode)
{
- keepParsing = readOperator(str,execNode);
execNode = getLatestNode(execNode);
+ while(keepParsing)
+ {
+ keepParsing = readOperator(str,execNode);
+ execNode = getLatestNode(execNode);
+ }
}
+
+
+
return true;
}
@@ -206,16 +231,19 @@ void DiceParser::displayResult()
-bool DiceParser::readDice(QString& str,Dice& dice)
+bool DiceParser::readDice(QString& str,ExecutionNode* & node)
{
DiceOperator myOperator;
+
if(readDiceOperator(str,myOperator))
{
int num;
if(m_parsingToolbox->readNumber(str,num))
{
- dice.m_diceOp = myOperator;
- dice.m_faces = num;
+ DiceRollerNode* drNode = new DiceRollerNode(num);
+// dice.m_diceOp = myOperator;
+// dice.m_faces = num;
+ node = drNode;
return true;
}
}
@@ -243,57 +271,61 @@ bool DiceParser::readDiceExpression(QString& str,ExecutionNode* & node)
bool returnVal=false;
- bool hasRead = m_parsingToolbox->readNumber(str,number);
+ /*ExecutionNode* operandeNode = NULL;
+ if(readExpression(str,operandeNode))
+ {*/
+ // bool hasRead = m_parsingToolbox->readNumber(str,number);
- NumberNode* numberNode = new NumberNode();
- numberNode->setNumber(number);
+ /*NumberNode* numberNode = new NumberNode();
+ numberNode->setNumber(number);*/
- Dice myDice;
- if(readDice(str,myDice))
- {
- DiceRollerNode* next = addRollDiceNode(myDice.m_faces,numberNode);
- // numberNode->setNextNode(next); already done in addRollDiceNode method
+
+ ExecutionNode* next = NULL;
+ if(readDice(str,next))
+ {
+ //DiceRollerNode* next = addRollDiceNode(myDice.m_faces,operandeNode);
+ //numberNode->setNextNode(next); already done in addRollDiceNode method
- ExecutionNode* latest = next;
- while(readOption(str,latest))
- {
- while(NULL!=latest->getNextNode())
+ ExecutionNode* latest = next;
+ while(readOption(str,latest))
{
- latest = latest->getNextNode();
+ while(NULL!=latest->getNextNode())
+ {
+ latest = latest->getNextNode();
+ }
}
- }
-
- returnVal = true;
- }
- else if(hasRead)
- {
- //setCurrentNode(numberNode);
- returnVal = true;
- ExecutionNode* latest = numberNode;
- while(readOption(str,latest,false))
+ node = next;
+ returnVal = true;
+ }
+ /* else if(NULL!=operandeNode)
{
- while(NULL!=latest->getNextNode())
+ //setCurrentNode(numberNode);
+ returnVal = true;
+ ExecutionNode* latest = operandeNode;
+ while(readOption(str,latest,false))
{
- latest = latest->getNextNode();
+ while(NULL!=latest->getNextNode())
+ {
+ latest = latest->getNextNode();
+ }
}
+ }*/
+ else
+ {
+ qDebug() << "error" << number << str;
+ returnVal = false;
}
- }
- else
- {
- qDebug() << "error" << number << str;
- returnVal = false;
- }
+ // }
- node = numberNode;
return returnVal;
}
@@ -462,3 +494,20 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous, bool hasDice)
return isFine;
}
+bool DiceParser::readOperand(QString&,ExecutionNode* & node)
+{
+ int myNumber=1;
+ if(m_parsingToolbox->readNumber(str,myNumber))
+ {
+
+ }
+ if(readOperator(str,node))
+ {
+
+ m_parsingToolbox->readNumber(str,myNumber);
+ /// @todo implements this
+
+ }
+
+
+}