diff options
Diffstat (limited to 'diceparser.h')
| -rw-r--r-- | diceparser.h | 362 |
1 files changed, 0 insertions, 362 deletions
diff --git a/diceparser.h b/diceparser.h deleted file mode 100644 index 8ecfb50..0000000 --- a/diceparser.h +++ /dev/null @@ -1,362 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2014 by Renaud Guezennec * - * http://www.rolisteam.org/contact * - * * - * This file is part of DiceParser * - * * - * DiceParser is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ -#ifndef DICEPARSER_H -#define DICEPARSER_H - -#include <QMap> -#include <QString> - -#include "dicealias.h" -#include "highlightdice.h" -#include "node/executionnode.h" - -typedef QList<HighLightDice> ListDiceResult; -typedef QMap<quint64, ListDiceResult> ExportedDiceResult; - -class ExplodeDiceNode; -class ParsingToolBox; -class DiceRollerNode; -/** - * @page DiceParser Dice Parser - * - * @section Intro Introduction - * Diceparser is the software component dedicated to compute dice command in rolisteam.<br/> - * - * @section grammar The Grammar - * - * The grammar is described in Readme.md - */ - -/** - * @brief The DiceParser class facade class, it receives a command and return a DiceResult class (not yet implemented). - */ -class DiceParser -{ -public: - /** - * @brief The DiceOperator enum gathering all dice operators - */ - enum DiceOperator - { - D, - L - }; - /** - * @brief The DiceSymbol enum - */ - enum NodeAction - { - JumpBackward - }; - /** - * @brief The OptionOperator enum gathering all options availables for result. - */ - enum OptionOperator - { - KeepAndExplode, - Keep, - Reroll, - RerollUntil, - Explode, - Sort, - Count, - RerollAndAdd, - Merge, - ifOperator, - Painter, - Filter, - Split, - Group, - Occurences, - Unique, - Bind - }; - /** - * @brief The CommandOperator enum - */ - enum CommandOperator - { - }; - - /** - * @brief DiceParser default constructor - */ - DiceParser(); - /** - * @brief ~DiceParser - */ - virtual ~DiceParser(); - - /** - * @brief parseLine, method to call for starting the dice roll. It will parse the command and run the execution - * tree. - * @param str dice command - * @return bool every thing is fine or not - */ - bool parseLine(QString str, bool allowAlias= true); - /** - * @brief getStartNodeCount - * @return - */ - int getStartNodeCount() const; - /** - * @brief Start running the execution tree - * - */ - void start(); - - /** - * @brief displayResult - */ - QString displayResult(); - /** - * @brief readExpression - * @param str - * @param node - * @return - */ - bool readExpression(QString& str, ExecutionNode*& node); - /** - * @brief displayDotTree - Write the execution tree into file using dot format. - * @param filepath absolute or relative path to the tree file. - */ - void writeDownDotTree(QString filepath); - /** - * @brief getLastIntegerResults - * @return - */ - QList<qreal> getLastIntegerResults(); - /** - * @brief getSumOfDiceResult - * @return - */ - QList<qreal> getSumOfDiceResult(); - /** - * @brief getLastDiceResult - * @return - */ - void getLastDiceResult(QList<ExportedDiceResult>& diceValues, bool& homogeneous); - /** - * @brief hasIntegerResultNotInFirst - * @return - */ - bool hasIntegerResultNotInFirst(); - /** - * @brief hasDiceResult - * @return - */ - bool hasDiceResult(); - /** - * @brief getDiceCommand - * @return - */ - QString getDiceCommand() const; - /** - * @brief hasStringResult - * @return - */ - bool hasStringResult(); - /** - * @brief getStringResult - * @return - */ - QStringList getStringResult(); - /** - * @brief humanReadableError - * @return - */ - QString humanReadableError(); - /** - * @brief getAliases - * @return - */ - QList<DiceAlias*>* getAliases(); - /** - * @brief insertAlias - */ - void insertAlias(DiceAlias*, int); - /** - * @brief DiceParser::convertAlias - * @param str - * @return - */ - QString convertAlias(QString str); - /** - * @brief getErrorList - * @return - */ - QMap<ExecutionNode::DICE_ERROR_CODE, QString> getErrorMap(); - /** - * @brief setPathToHelp set the path to the documentation, this path must be adatped to the lang of application etc… - * @param l the path. - */ - void setPathToHelp(QString l); - /** - * @brief getAllStringResult - * @return - */ - QStringList getAllStringResult(bool& hasAlias); - /** - * @brief getAllDiceResult - * @param hasAlias - * @return - */ - QStringList getAllDiceResult(bool& hasAlias); - /** - * @brief hasSeparator allows to know if the current command has separator. - * @return true when the command has separator, false otherwise. - */ - bool hasSeparator() const; - /** - * @brief readIfInstruction reads the current command to build if node with proper parameters. - * @param str is the command string, if IF istruction is found, the str will be changed, in other case the string is - * unmodified - * @param trueNode is the branch's beginning to be executed if the IfNode is true. - * @param falseNode is the branch's beginning to be executed if the IfNode is false. - * @return true, ifNode has been found, false otherwise - */ - bool readIfInstruction(QString& str, ExecutionNode*& trueNode, ExecutionNode*& falseNode); - /** - * @brief setVariableDictionary - * @param variables - */ - void setVariableDictionary(const QHash<QString, QString>& variables); - QString getComment() const; - void setComment(const QString& comment); - - bool readOptionFromNull(QString& str, ExecutionNode*& node); - bool readOperatorFromNull(QString& str, ExecutionNode*& node); - - bool readInstructionList(QString& str); - void getDiceResultFromAllInstruction(QList<ExportedDiceResult>& resultList); - QString humanReadableWarning(); - - bool readValuesList(QString& str, ExecutionNode*& node); - -protected: - bool readParameterNode(QString& str, ExecutionNode*& node); - -private: - /** - * @brief readDice - * @param str - * @return - */ - bool readDice(QString& str, ExecutionNode*& node); - /** - * @brief readDiceOperator - * @return - */ - bool readDiceOperator(QString&, DiceOperator&); - /** - * @brief readDiceExpression - * @param node - * @return - */ - bool readDiceExpression(QString&, ExecutionNode*& node); - /** - * @brief readOperator - * @return - */ - bool readOperator(QString&, ExecutionNode* previous); - /** - * @brief DiceParser::readCommand - * @param str - * @param node - * @return - */ - bool readCommand(QString& str, ExecutionNode*& node); - - /** - * @brief readOption - */ - bool readOption(QString&, ExecutionNode* node); // OptionOperator& option, - - /** - * @brief addRollDiceNode - * @param faces - * @return - */ - DiceRollerNode* addRollDiceNode(qint64 faces, ExecutionNode*); - /** - * @brief addExplodeDiceNode - * @param faces - * @param previous - * @return - */ - ExplodeDiceNode* addExplodeDiceNode(qint64 faces, ExecutionNode* previous); - /** - * @brief readOperand - * @param node - * @return - */ - bool readOperand(QString&, ExecutionNode*& node); - - /** - * @brief readInstructionOperator - * @param c - * @return - */ - bool readInstructionOperator(QChar c); - /** - * @brief readNode - * @param str - * @param node - * @return - */ - bool readNode(QString& str, ExecutionNode*& node); - - /** - * @brief getLeafNode - * @return - */ - ExecutionNode* getLeafNode(ExecutionNode* node); - - /** - * @brief hasResultOfType - * @param notthelast - * @return - */ - bool hasResultOfType(Result::RESULT_TYPE, ExecutionNode* node, bool notthelast= false); - -private: - QMap<QString, DiceOperator>* m_mapDiceOp; - QMap<QString, OptionOperator>* m_OptionOp; - QMap<QString, NodeAction>* m_nodeActionMap; - QList<DiceAlias*>* m_aliasList; - QStringList* m_commandList; - - QMap<ExecutionNode::DICE_ERROR_CODE, QString> m_errorMap; - QMap<ExecutionNode::DICE_ERROR_CODE, QString> m_warningMap; - - ExecutionNode* m_start= nullptr; - std::vector<ExecutionNode*> m_startNodes; - // ExecutionNode* m_current; - QString m_command; - ParsingToolBox* m_parsingToolbox; - QString m_helpPath; - bool m_currentTreeHasSeparator; - bool readBlocInstruction(QString& str, ExecutionNode*& resultnode); - QString m_comment; -}; - -#endif // DICEPARSER_H |