diff options
| author | 2015-03-05 14:30:18 +0100 | |
|---|---|---|
| committer | 2015-03-05 14:30:18 +0100 | |
| commit | 606001e99593372d0a71c566a5efdefd48175305 (patch) | |
| tree | 28f1fdee4a0afd5a8b425eebdb8a8d9e73a255d6 /diceparser.cpp | |
| parent | 30aaf7a35bc6e8224ad683148af28cedf81f03fd (diff) | |
| download | OneRoll-606001e99593372d0a71c566a5efdefd48175305.tar.gz OneRoll-606001e99593372d0a71c566a5efdefd48175305.zip | |
add generateTree
add jumpbackward node
Diffstat (limited to 'diceparser.cpp')
| -rw-r--r-- | diceparser.cpp | 47 |
1 files changed, 41 insertions, 6 deletions
diff --git a/diceparser.cpp b/diceparser.cpp index 2be2e08..3f1c21c 100644 --- a/diceparser.cpp +++ b/diceparser.cpp @@ -35,6 +35,7 @@ #include "node/explosedicenode.h" #include "node/parenthesesnode.h" #include "node/helpnode.h" +#include "node/jumpbackwardnode.h" #define DEFAULT_FACES_NUMBER 10 @@ -44,6 +45,7 @@ DiceParser::DiceParser() m_mapDiceOp = new QMap<QString,DiceOperator>(); m_mapDiceOp->insert("D",D); + m_mapDiceOp->insert("L",L); m_OptionOp = new QMap<QString,OptionOperator>(); m_OptionOp->insert(QObject::tr("k"),Keep); @@ -53,7 +55,7 @@ DiceParser::DiceParser() m_OptionOp->insert(QObject::tr("r"),Reroll); m_OptionOp->insert(QObject::tr("e"),Explosing); m_OptionOp->insert(QObject::tr("a"),RerollAndAdd); - m_OptionOp->insert(QObject::tr("@"),JumpBackward); + //m_OptionOp->insert(QObject::tr("@"),JumpBackward); @@ -63,6 +65,9 @@ DiceParser::DiceParser() m_aliasMap->insert("nwod","D10e10c[>7]"); m_aliasMap->insert("nwod","D10e10c[>7]"); + m_nodeActionMap = new QMap<QString,NodeAction>(); + m_nodeActionMap->insert("@",JumpBackward); + m_commandList = new QList<QString>(); m_commandList->append("help"); @@ -166,6 +171,11 @@ bool DiceParser::readExpression(QString& str,ExecutionNode* & node) node = operandNode; return true; } + else if(readNode(str,operandNode)) + { + node = operandNode; + return true; + } else { ExecutionNode* diceNode=NULL; @@ -183,6 +193,26 @@ bool DiceParser::readExpression(QString& str,ExecutionNode* & node) } return true; } +bool DiceParser::readNode(QString& str,ExecutionNode* & node) +{ + /*k case JumpBackward: + { + JumpBackwardNode* jumpNode = new JumpBackwardNode(); + previous->setNextNode(jumpNode); + node = jumpNode; + isFine=true; + }*/ + QString key= str.left(1); + if(m_nodeActionMap->contains(key)) + { + JumpBackwardNode* jumpNode = new JumpBackwardNode(); + node = jumpNode; + str=str.remove(0,1); + readOption(str,jumpNode,true); + return true; + } + return false; +} void DiceParser::Start() { @@ -332,11 +362,11 @@ bool DiceParser::readCommand(QString& str,ExecutionNode* & node) node = new HelpNode(); return true; } + return false; } bool DiceParser::readDiceExpression(QString& str,ExecutionNode* & node) { - int number=1; bool returnVal=false; ExecutionNode* next = NULL; @@ -579,10 +609,7 @@ bool DiceParser::readOption(QString& str,ExecutionNode* previous, bool hasDice) isFine = true; } } - case JumpBackward: - { - } } } @@ -598,7 +625,6 @@ QList<ExecutionNode::ERROR_CODE> DiceParser::getErrorList() bool DiceParser::readOperand(QString& str,ExecutionNode* & node) { int myNumber=1; - ExecutionNode* myNode=NULL; if(m_parsingToolbox->readNumber(str,myNumber)) { @@ -610,3 +636,12 @@ bool DiceParser::readOperand(QString& str,ExecutionNode* & node) } return false; } +void DiceParser::displayDotTree() +{ + QString str("digraph ExecutionTree {\n"); + m_start->generateDotTree(str); + str.append("}"); + + qDebug()<< str; + +} |