add skeleton for variable handling.
This commit is contained in:
parent
10271dab9a
commit
29064c44be
@ -42,7 +42,7 @@ set(GENERATED_HEADER_FILES
|
|||||||
)
|
)
|
||||||
set_property(SOURCE mupp_version.h PROPERTY SKIP_AUTOMOC ON) # needed for cmake 3.x
|
set_property(SOURCE mupp_version.h PROPERTY SKIP_AUTOMOC ON) # needed for cmake 3.x
|
||||||
|
|
||||||
set(SOURCE_FILES
|
set(MUPP_SOURCE_FILES
|
||||||
mupp.cpp
|
mupp.cpp
|
||||||
PmuppAdmin.cpp
|
PmuppAdmin.cpp
|
||||||
Pmupp.cpp
|
Pmupp.cpp
|
||||||
@ -54,13 +54,24 @@ set(SOURCE_FILES
|
|||||||
if (APPLE)
|
if (APPLE)
|
||||||
set(RESOURCE_FILES icons/mupp.icns)
|
set(RESOURCE_FILES icons/mupp.icns)
|
||||||
add_executable(mupp
|
add_executable(mupp
|
||||||
MACOSX_BUNDLE ${GENERATED_HEADER_FILES} ${SOURCE_FILES}
|
MACOSX_BUNDLE ${GENERATED_HEADER_FILES} ${MUPP_SOURCE_FILES}
|
||||||
qrc_mupp.cpp ${RESOURCE_FILES}
|
qrc_mupp.cpp ${RESOURCE_FILES}
|
||||||
)
|
)
|
||||||
else (APPLE)
|
else (APPLE)
|
||||||
add_executable(mupp ${GENERATED_HEADER_FILES} ${SOURCE_FILES} qrc_mupp.cpp)
|
add_executable(mupp ${GENERATED_HEADER_FILES} ${MUPP_SOURCE_FILES} qrc_mupp.cpp)
|
||||||
endif (APPLE)
|
endif (APPLE)
|
||||||
|
|
||||||
|
#--- add the variable related sources -----------------------------------------
|
||||||
|
add_subdirectory(var)
|
||||||
|
|
||||||
|
#--- add the necessary header includes ----------------------------------------
|
||||||
|
target_include_directories(mupp
|
||||||
|
BEFORE PRIVATE
|
||||||
|
$<BUILD_INTERFACE:${Boost_INCLUDE_DIR}>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/var/include>
|
||||||
|
)
|
||||||
|
|
||||||
#--- use the Widgets and XML modules from Qt5 ---------------------------------
|
#--- use the Widgets and XML modules from Qt5 ---------------------------------
|
||||||
target_link_libraries(mupp Qt5::Widgets Qt5::Xml)
|
target_link_libraries(mupp Qt5::Widgets Qt5::Xml)
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
#include "PmuppAdmin.h"
|
#include "PmuppAdmin.h"
|
||||||
#include "Pmupp.h"
|
#include "Pmupp.h"
|
||||||
|
#include "PVarHandler.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int collIdx;
|
int collIdx;
|
||||||
@ -84,6 +85,8 @@ class PmuppScript : public QObject
|
|||||||
QString fLoadPath;
|
QString fLoadPath;
|
||||||
QString fSavePath;
|
QString fSavePath;
|
||||||
|
|
||||||
|
QVector<PVarHandler> fVarHandler;
|
||||||
|
|
||||||
bool foundLabel(PmuppCollection *coll, const QString label);
|
bool foundLabel(PmuppCollection *coll, const QString label);
|
||||||
void minMax(QVector<double> dvec, double &min, double &max);
|
void minMax(QVector<double> dvec, double &min, double &max);
|
||||||
QString getNicerLabel(const QString label);
|
QString getNicerLabel(const QString label);
|
||||||
|
1
src/musredit_qt5/mupp/var/CMakeLists.txt
Normal file
1
src/musredit_qt5/mupp/var/CMakeLists.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
add_subdirectory(src)
|
197
src/musredit_qt5/mupp/var/include/PAst.hpp
Normal file
197
src/musredit_qt5/mupp/var/include/PAst.hpp
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
PAst.hpp
|
||||||
|
|
||||||
|
Author: Andreas Suter
|
||||||
|
e-mail: andreas.suter@psi.ch
|
||||||
|
|
||||||
|
Based on Joel de Guzman example on calc7,
|
||||||
|
see https://github.com/boostorg/spirit
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2020 by Andreas Suter *
|
||||||
|
* andreas.suter@psi.ch *
|
||||||
|
* *
|
||||||
|
* This program 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 _PAST_HPP_
|
||||||
|
#define _PAST_HPP_
|
||||||
|
|
||||||
|
#include <boost/config/warning_disable.hpp>
|
||||||
|
#include <boost/variant/recursive_variant.hpp>
|
||||||
|
#include <boost/fusion/include/adapt_struct.hpp>
|
||||||
|
#include <boost/fusion/include/io.hpp>
|
||||||
|
#include <boost/optional.hpp>
|
||||||
|
#include <list>
|
||||||
|
|
||||||
|
namespace mupp { namespace ast
|
||||||
|
{
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
// The AST
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
struct tagged
|
||||||
|
{
|
||||||
|
int id; // Used to annotate the AST with the iterator position.
|
||||||
|
// This id is used as a key to a map<int, Iterator>
|
||||||
|
// (not really part of the AST.)
|
||||||
|
};
|
||||||
|
|
||||||
|
enum optoken
|
||||||
|
{
|
||||||
|
op_plus,
|
||||||
|
op_minus,
|
||||||
|
op_times,
|
||||||
|
op_divide,
|
||||||
|
op_positive,
|
||||||
|
op_negative,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum funid
|
||||||
|
{
|
||||||
|
fun_max,
|
||||||
|
fun_min,
|
||||||
|
fun_abs,
|
||||||
|
fun_sin,
|
||||||
|
fun_cos,
|
||||||
|
fun_tan,
|
||||||
|
fun_exp,
|
||||||
|
fun_log,
|
||||||
|
fun_ln
|
||||||
|
};
|
||||||
|
|
||||||
|
struct nil {};
|
||||||
|
struct unary;
|
||||||
|
struct expression;
|
||||||
|
struct function;
|
||||||
|
struct power;
|
||||||
|
|
||||||
|
struct variable : tagged
|
||||||
|
{
|
||||||
|
variable(std::string const& name = "") : name(name) {}
|
||||||
|
std::string name;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef boost::variant<
|
||||||
|
nil
|
||||||
|
, double
|
||||||
|
, variable
|
||||||
|
, boost::recursive_wrapper<function>
|
||||||
|
, boost::recursive_wrapper<power>
|
||||||
|
, boost::recursive_wrapper<unary>
|
||||||
|
, boost::recursive_wrapper<expression>
|
||||||
|
>
|
||||||
|
operand;
|
||||||
|
|
||||||
|
struct unary
|
||||||
|
{
|
||||||
|
optoken operator_;
|
||||||
|
operand operand_;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct operation
|
||||||
|
{
|
||||||
|
optoken operator_;
|
||||||
|
operand operand_;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct expression
|
||||||
|
{
|
||||||
|
operand first;
|
||||||
|
std::list<operation> rest;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct function
|
||||||
|
{
|
||||||
|
funid func_id;
|
||||||
|
expression arg;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct power
|
||||||
|
{
|
||||||
|
expression base;
|
||||||
|
expression pow;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct assignment
|
||||||
|
{
|
||||||
|
variable lhs;
|
||||||
|
expression rhs;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct variable_declaration
|
||||||
|
{
|
||||||
|
variable lhs;
|
||||||
|
boost::optional<expression> rhs;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef boost::variant<
|
||||||
|
variable_declaration
|
||||||
|
, assignment>
|
||||||
|
statement;
|
||||||
|
|
||||||
|
typedef std::list<statement> statement_list;
|
||||||
|
|
||||||
|
// print functions for debugging
|
||||||
|
inline std::ostream& operator<<(std::ostream& out, nil) { out << "nil"; return out; }
|
||||||
|
inline std::ostream& operator<<(std::ostream& out, variable const& var) { out << var.name; return out; }
|
||||||
|
}}
|
||||||
|
|
||||||
|
BOOST_FUSION_ADAPT_STRUCT(
|
||||||
|
mupp::ast::unary,
|
||||||
|
(mupp::ast::optoken, operator_)
|
||||||
|
(mupp::ast::operand, operand_)
|
||||||
|
)
|
||||||
|
|
||||||
|
BOOST_FUSION_ADAPT_STRUCT(
|
||||||
|
mupp::ast::operation,
|
||||||
|
(mupp::ast::optoken, operator_)
|
||||||
|
(mupp::ast::operand, operand_)
|
||||||
|
)
|
||||||
|
|
||||||
|
BOOST_FUSION_ADAPT_STRUCT(
|
||||||
|
mupp::ast::expression,
|
||||||
|
(mupp::ast::operand, first)
|
||||||
|
(std::list<mupp::ast::operation>, rest)
|
||||||
|
)
|
||||||
|
|
||||||
|
BOOST_FUSION_ADAPT_STRUCT(
|
||||||
|
mupp::ast::function,
|
||||||
|
(mupp::ast::funid, func_id)
|
||||||
|
(mupp::ast::expression, arg)
|
||||||
|
)
|
||||||
|
|
||||||
|
BOOST_FUSION_ADAPT_STRUCT(
|
||||||
|
mupp::ast::power,
|
||||||
|
(mupp::ast::expression, base)
|
||||||
|
(mupp::ast::expression, pow)
|
||||||
|
)
|
||||||
|
|
||||||
|
BOOST_FUSION_ADAPT_STRUCT(
|
||||||
|
mupp::ast::variable_declaration,
|
||||||
|
(mupp::ast::variable, lhs)
|
||||||
|
(boost::optional<mupp::ast::expression>, rhs)
|
||||||
|
)
|
||||||
|
|
||||||
|
BOOST_FUSION_ADAPT_STRUCT(
|
||||||
|
mupp::ast::assignment,
|
||||||
|
(mupp::ast::variable, lhs)
|
||||||
|
(mupp::ast::expression, rhs)
|
||||||
|
)
|
||||||
|
|
||||||
|
#endif // _PAST_HPP_
|
55
src/musredit_qt5/mupp/var/include/PVarHandler.h
Normal file
55
src/musredit_qt5/mupp/var/include/PVarHandler.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
PVarHandler.h
|
||||||
|
|
||||||
|
Author: Andreas Suter
|
||||||
|
e-mail: andreas.suter@psi.ch
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2007-2020 by Andreas Suter *
|
||||||
|
* andreas.suter@psi.ch *
|
||||||
|
* *
|
||||||
|
* This program 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 _PVARHANDLER_H_
|
||||||
|
#define _PVARHANDLER_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
#include <PAst.hpp>
|
||||||
|
|
||||||
|
class PVarHandler {
|
||||||
|
public:
|
||||||
|
PVarHandler();
|
||||||
|
|
||||||
|
void setInput(QString &str) { fInput = str.toLatin1().data(); }
|
||||||
|
bool parse();
|
||||||
|
bool semcheck();
|
||||||
|
std::vector<double> getValues();
|
||||||
|
std::vector<double> getErrors();
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string fInput; ///< the variable input to be parsed
|
||||||
|
mupp::ast::statement_list fAst; ///< the AST
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //_PVARHANDLER_H_
|
4
src/musredit_qt5/mupp/var/src/CMakeLists.txt
Normal file
4
src/musredit_qt5/mupp/var/src/CMakeLists.txt
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
target_sources(mupp
|
||||||
|
PRIVATE
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/PVarHandler.cpp
|
||||||
|
)
|
83
src/musredit_qt5/mupp/var/src/PVarHandler.cpp
Normal file
83
src/musredit_qt5/mupp/var/src/PVarHandler.cpp
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
PVarHandler.cpp
|
||||||
|
|
||||||
|
Author: Andreas Suter
|
||||||
|
e-mail: andreas.suter@psi.ch
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (C) 2007-2020 by Andreas Suter *
|
||||||
|
* andreas.suter@psi.ch *
|
||||||
|
* *
|
||||||
|
* This program 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. *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "PVarHandler.h"
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* @brief PVarHandler::PVarHandler
|
||||||
|
*/
|
||||||
|
PVarHandler::PVarHandler()
|
||||||
|
{
|
||||||
|
fInput = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* @brief PVarHandler::parse
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
bool PVarHandler::parse()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* @brief PVarHandler::semcheck
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
bool PVarHandler::semcheck()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* @brief PVarHandler::getValues
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
std::vector<double> PVarHandler::getValues()
|
||||||
|
{
|
||||||
|
std::vector<double> result;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* @brief PVarHandler::getErrors
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
std::vector<double> PVarHandler::getErrors()
|
||||||
|
{
|
||||||
|
std::vector<double> result;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user