v4 parser.src: added include/Interface.h to handle Scilab version, many files affected
git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@870 ac1d8469-bf42-47a9-8791-bf33cf982152time-shift
parent
ab16c4d181
commit
f1885a6b26
|
@ -50,6 +50,9 @@
|
|||
%right POWER
|
||||
%nonassoc FACTORIAL
|
||||
%token EXP LOG LOG10 LN SIN COS TAN ASIN ACOS ATAN SINH COSH TANH ASINH ACOSH ATANH SQRT
|
||||
/* isn't parsed from the *.mod file, but used to distinguish EQUAL in equation and EQUAL in assignment in operation codes
|
||||
*/
|
||||
%token ASSIGN
|
||||
%%
|
||||
|
||||
statement_list
|
||||
|
|
|
@ -14,6 +14,7 @@ using namespace std;
|
|||
#include "DynareParser.h"
|
||||
#include "DynareScanner.h"
|
||||
#include "OutputFile.h"
|
||||
#include "Interface.h"
|
||||
//------------------------------------------------------------------------------
|
||||
/*! main function
|
||||
\brief Main function of Dynare.
|
||||
|
@ -24,6 +25,11 @@ int main(int argc, char** argv)
|
|||
{
|
||||
OutputFile output_file;
|
||||
ostringstream output;
|
||||
#ifdef SCILAB
|
||||
interfaces interface(eScilab);
|
||||
#else
|
||||
interfaces interface(eMatlab);
|
||||
#endif
|
||||
int retval = 0;
|
||||
try {
|
||||
if (argc <2)
|
||||
|
@ -67,8 +73,8 @@ int main(int argc, char** argv)
|
|||
p.finish();
|
||||
string name = argv[1];
|
||||
name.erase(name.size()-4,4);
|
||||
// Opening and init main Output file (M file)
|
||||
output_file.Open(name+".m");
|
||||
// Opening and init main Output file (.m or .sci file)
|
||||
output_file.Open(name);
|
||||
// Writing remaining string output to output file
|
||||
output_file.Save(output);
|
||||
|
||||
|
|
|
@ -96,6 +96,12 @@ dynare::Objects* dynare::parser::add_variable(Objects* var,Objects* olag)
|
|||
int lag = atoi((olag->symbol).c_str());
|
||||
//cout << "symbol = " << olag->symbol << endl;
|
||||
//cout << "lag = " << lag << endl;
|
||||
if ((var->type == eExogenous) && lag != 0)
|
||||
{
|
||||
std::cout << "Warning: exogenous variable "
|
||||
<< var->symbol
|
||||
<< " has lag " << lag << "\n";
|
||||
}
|
||||
if ((var->type == eEndogenous) || (var->type == eExogenous))
|
||||
variable_table.AddVariable(var->symbol,lag);
|
||||
//cout << "add_model_token : " << var->ID << endl;
|
||||
|
@ -638,7 +644,7 @@ dynare::Objects* dynare::parser::add_equal(Objects* arg1, Objects* arg2)
|
|||
|
||||
dynare::Objects* dynare::parser::init_local_parameter(Objects* arg1, Objects* arg2)
|
||||
{
|
||||
NodeID id = model_tree.AddEqual(arg1->ID, arg2->ID);
|
||||
NodeID id = model_tree.AddAssign(arg1->ID, arg2->ID);
|
||||
return new Objects("", id, eTempResult);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,94 +1,102 @@
|
|||
CPP = c++
|
||||
ifeq ($(DEBUG),yes)
|
||||
CPPFLAGS = -mno-cygwin -ggdb -pg -Wall
|
||||
FLEXFLAGS = -i
|
||||
else
|
||||
ifeq ($(MINGW),yes)
|
||||
CPPFLAGS = -O2
|
||||
FLEXFLAGS = -i -d
|
||||
else
|
||||
CPPFLAGS = -mno-cygwin -O2
|
||||
FLEXFLAGS = -i
|
||||
endif
|
||||
endif
|
||||
OBJ=\
|
||||
DynareFlex.o\
|
||||
DynareBison.o\
|
||||
ComputingTasks.o\
|
||||
DynareMain.o\
|
||||
Expression.o\
|
||||
ModelParameters.o\
|
||||
ModelTree.o\
|
||||
NumericalConstants.o\
|
||||
NumericalInitialization.o\
|
||||
OperatorTable.o\
|
||||
OutputFile.o\
|
||||
Shocks.o\
|
||||
SigmaeInitialization.o\
|
||||
SymbolTable.o\
|
||||
TmpSymbolTable.o\
|
||||
VariableTable.o\
|
||||
DynareParser.o\
|
||||
DataTree.o
|
||||
|
||||
|
||||
################################################################################
|
||||
### Build ######################################################################
|
||||
################################################################################
|
||||
|
||||
all: dynare.exe
|
||||
|
||||
dynare.exe: $(OBJ)
|
||||
$(CPP) $(CPPFLAGS) -o dynare.exe $(OBJ);\
|
||||
cp dynare.exe ../matlab/dynare_m.exe;\
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
### Compile ####################################################################
|
||||
################################################################################
|
||||
|
||||
%.o : %.cc
|
||||
$(CPP) $(CPPFLAGS) -MD -I include -c $<
|
||||
@cp $*.d $*.P; \
|
||||
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
|
||||
-e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P; \
|
||||
rm -f $*.d
|
||||
|
||||
-include $(OBJ:.o=.P)
|
||||
|
||||
DynareFlex.cc: DynareFlex.ll include/DynareScanner.h
|
||||
flex $(FLEXFLAGS) -oDynareFlex.cc DynareFlex.ll
|
||||
|
||||
DynareBison.cc include/DynareBison.h: DynareBison.yy include/DynareParser.h
|
||||
(bison -v -d -b --verbose -o DynareBison.cc DynareBison.yy; mv DynareBison.hh include/DynareBison.h)
|
||||
|
||||
|
||||
################################################################################
|
||||
### Clean ######################################################################
|
||||
################################################################################
|
||||
|
||||
clean:
|
||||
rm "ComputingTasks.o" \
|
||||
"DynareParser.o" \
|
||||
"DynareBison.o" \
|
||||
"DynareFlex.o" \
|
||||
"DynareMain.o" \
|
||||
"Expression.o" \
|
||||
"ModelParameters.o" \
|
||||
"ModelTree.o" \
|
||||
"NumericalConstants.o" \
|
||||
"NumericalInitialization.o" \
|
||||
"OperatorTable.o" \
|
||||
"OutputFile.o" \
|
||||
"Shocks.o" \
|
||||
"SigmaeInitialization.o" \
|
||||
"SymbolTable.o" \
|
||||
"TmpSymbolTable.o" \
|
||||
"VariableTable.o" \
|
||||
"DataTree.o" \
|
||||
"dynare.exe" \
|
||||
"DynareBison.cc" \
|
||||
"include/DynareBison.h" \
|
||||
"DynareFlex.cc"
|
||||
|
||||
CPP = c++
|
||||
ifeq ($(DEBUG),yes)
|
||||
CPPFLAGS = -mno-cygwin -ggdb -pg -Wall
|
||||
FLEXFLAGS = -i
|
||||
else
|
||||
ifeq ($(MINGW),yes)
|
||||
CPPFLAGS = -O2
|
||||
FLEXFLAGS = -i -d
|
||||
else
|
||||
CPPFLAGS = -mno-cygwin -O2
|
||||
FLEXFLAGS = -i
|
||||
endif
|
||||
endif
|
||||
ifeq ($(PROFILE),yes)
|
||||
CPPFLAGS = -mno-cygwin -O2 -pg
|
||||
endif
|
||||
OBJ=\
|
||||
DynareFlex.o\
|
||||
DynareBison.o\
|
||||
ComputingTasks.o\
|
||||
DynareMain.o\
|
||||
Expression.o\
|
||||
ModelParameters.o\
|
||||
ModelTree.o\
|
||||
NumericalConstants.o\
|
||||
NumericalInitialization.o\
|
||||
OperatorTable.o\
|
||||
OutputFile.o\
|
||||
Shocks.o\
|
||||
SigmaeInitialization.o\
|
||||
SymbolTable.o\
|
||||
TmpSymbolTable.o\
|
||||
VariableTable.o\
|
||||
DynareParser.o\
|
||||
DataTree.o\
|
||||
Interface.o
|
||||
|
||||
################################################################################
|
||||
### Build ######################################################################
|
||||
################################################################################
|
||||
|
||||
all: dynare.exe
|
||||
|
||||
dynare.exe: $(OBJ)
|
||||
$(CPP) $(CPPFLAGS) -o dynare.exe $(OBJ);\
|
||||
cp dynare.exe ../matlab/dynare_m.exe;\
|
||||
|
||||
dynare_s.exe: $(OBJ)
|
||||
$(CPP) $(CPPFLAGS) -Iinclude -DSCILAB -o DynareMain.o -c DynareMain.cc
|
||||
$(CPP) $(CPPFLAGS) -o dynare_s.exe $(OBJ);\
|
||||
cp dynare_s.exe ../scilab/dynare_s.exe;\
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
### Compile ####################################################################
|
||||
################################################################################
|
||||
|
||||
%.o : %.cc
|
||||
$(CPP) $(CPPFLAGS) -MD -I include -c $<
|
||||
@cp $*.d $*.P; \
|
||||
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
|
||||
-e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P; \
|
||||
rm -f $*.d
|
||||
|
||||
-include $(OBJ:.o=.P)
|
||||
|
||||
DynareFlex.cc: DynareFlex.ll include/DynareScanner.h
|
||||
flex $(FLEXFLAGS) -oDynareFlex.cc DynareFlex.ll
|
||||
|
||||
DynareBison.cc include/DynareBison.h: DynareBison.yy include/DynareParser.h
|
||||
(bison -v -d -b --verbose -o DynareBison.cc DynareBison.yy; mv DynareBison.hh include/DynareBison.h)
|
||||
|
||||
|
||||
################################################################################
|
||||
### Clean ######################################################################
|
||||
################################################################################
|
||||
|
||||
clean:
|
||||
rm "ComputingTasks.o" \
|
||||
"DynareParser.o" \
|
||||
"DynareBison.o" \
|
||||
"DynareFlex.o" \
|
||||
"DynareMain.o" \
|
||||
"Expression.o" \
|
||||
"ModelParameters.o" \
|
||||
"ModelTree.o" \
|
||||
"NumericalConstants.o" \
|
||||
"NumericalInitialization.o" \
|
||||
"OperatorTable.o" \
|
||||
"OutputFile.o" \
|
||||
"Shocks.o" \
|
||||
"SigmaeInitialization.o" \
|
||||
"SymbolTable.o" \
|
||||
"TmpSymbolTable.o" \
|
||||
"VariableTable.o" \
|
||||
"DataTree.o" \
|
||||
"dynare.exe" \
|
||||
"DynareBison.cc" \
|
||||
"include/DynareBison.h" \
|
||||
"DynareFlex.cc"
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@ using namespace std;
|
|||
#include "NumericalConstants.h"
|
||||
#include "ModelTree.h"
|
||||
#include "ModelParameters.h"
|
||||
#include "Interface.h"
|
||||
//------------------------------------------------------------------------------
|
||||
ostringstream ModelTree::output;
|
||||
//------------------------------------------------------------------------------
|
||||
|
@ -38,7 +39,7 @@ void ModelTree::OpenMFiles(string iModelFileName1, string iModelFileName2)
|
|||
{
|
||||
if (iModelFileName1.size())
|
||||
{
|
||||
iModelFileName1 += ".m";
|
||||
iModelFileName1 += interfaces::function_file_extension();
|
||||
mStaticModelFile.open(iModelFileName1.c_str(),ios::out|ios::binary);
|
||||
if (!mStaticModelFile.is_open())
|
||||
{
|
||||
|
@ -49,12 +50,15 @@ void ModelTree::OpenMFiles(string iModelFileName1, string iModelFileName2)
|
|||
iModelFileName1.erase(iModelFileName1.end()-2,iModelFileName1.end());
|
||||
//Writing comments and function definition command
|
||||
mStaticModelFile << "function [residual, g1] = " << iModelFileName1 << "( y, x )\n";
|
||||
mStaticModelFile << "%\n% Status : Computes static model for Dynare\n%\n";
|
||||
mStaticModelFile << "% Warning : this file is generated automatically by Dynare\n";
|
||||
mStaticModelFile << "% from model file (.mod)\n\n";
|
||||
mStaticModelFile << interfaces::comment()+"\n"+interfaces::comment();
|
||||
mStaticModelFile << "Status : Computes static model for Dynare\n%\n";
|
||||
mStaticModelFile << interfaces::comment();
|
||||
mStaticModelFile << "Warning : this file is generated automatically by Dynare\n";
|
||||
mStaticModelFile << interfaces::comment();
|
||||
mStaticModelFile << " from model file (.mod)\n\n";
|
||||
if (iModelFileName2.size() && (computeJacobian||computeJacobianExo||computeHessian))
|
||||
{
|
||||
iModelFileName2 += ".m";
|
||||
iModelFileName2 += interfaces::function_file_extension();
|
||||
mDynamicModelFile.open(iModelFileName2.c_str(),ios::out|ios::binary);
|
||||
if (!mDynamicModelFile.is_open())
|
||||
{
|
||||
|
@ -64,9 +68,12 @@ void ModelTree::OpenMFiles(string iModelFileName1, string iModelFileName2)
|
|||
}
|
||||
iModelFileName2.erase(iModelFileName2.end()-2,iModelFileName2.end());
|
||||
mDynamicModelFile << "function [residual, g1, g2] = " << iModelFileName2 << "(y, x)\n";
|
||||
mDynamicModelFile << "%\n% Status : Computes dynamic model for Dynare\n%\n";
|
||||
mDynamicModelFile << "%Warning : this file is generated automatically by Dynare\n";
|
||||
mDynamicModelFile << "% from model file (.mod)\n\n";
|
||||
mDynamicModelFile << interfaces::comment()+"\n"+interfaces::comment();
|
||||
mDynamicModelFile << "Status : Computes dynamic model for Dynare\n%\n";
|
||||
mDynamicModelFile << interfaces::comment();
|
||||
mDynamicModelFile << "Warning : this file is generated automatically by Dynare\n";
|
||||
mDynamicModelFile << interfaces::comment();
|
||||
mDynamicModelFile << " from model file (.mod)\n\n";
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -137,11 +144,13 @@ void ModelTree::SaveMFiles()
|
|||
if (mStaticModelFile.is_open())
|
||||
{
|
||||
mStaticModelFile << StaticOutput.str();
|
||||
interfaces::function_close();
|
||||
mStaticModelFile.close();
|
||||
}
|
||||
if (mDynamicModelFile.is_open() && (computeJacobian||computeJacobianExo||computeHessian))
|
||||
{
|
||||
mDynamicModelFile << DynamicOutput.str();
|
||||
interfaces::function_close();
|
||||
mDynamicModelFile.close();
|
||||
}
|
||||
}
|
||||
|
@ -285,6 +294,7 @@ void ModelTree::derive(int iOrder)
|
|||
(*currentIT)->reference_count[0]++;
|
||||
}
|
||||
}
|
||||
std::cout << "size " << EqualTokenIDs.size() << "\n";
|
||||
mDerivativeIndex.resize(iOrder);
|
||||
// Uncomment this to print model tree data
|
||||
/*
|
||||
|
@ -340,6 +350,7 @@ void ModelTree::derive(int iOrder)
|
|||
lArg2 = lToken->id2;
|
||||
lType1 = lToken->type1;
|
||||
lD1 = DeriveArgument(lArg1, lType1, var);
|
||||
lD2 = Zero;
|
||||
if (lArg2 != NullID)
|
||||
lD2 = DeriveArgument(lArg2, eTempResult, var);
|
||||
// Case where token is a final argument
|
||||
|
@ -347,9 +358,12 @@ void ModelTree::derive(int iOrder)
|
|||
{
|
||||
setDerivativeAdress(*currentIT, lD1, var);
|
||||
}
|
||||
else if (lD1 == Zero && lD2 == Zero)
|
||||
{
|
||||
setDerivativeAdress(*currentIT, Zero, var);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
switch (lToken->op_code)
|
||||
{
|
||||
case UMINUS:
|
||||
|
@ -692,7 +706,7 @@ string ModelTree::setStaticModel(void)
|
|||
tree_it = BeginModel;
|
||||
for (; tree_it != mModelTree.end(); tree_it++)
|
||||
{
|
||||
if ((*tree_it)->op_code == EQUAL)
|
||||
if ((*tree_it)->op_code == EQUAL || (*tree_it)->op_code == ASSIGN )
|
||||
{
|
||||
if ((*tree_it)->id1->type1 == eLocalParameter)
|
||||
{
|
||||
|
@ -728,7 +742,9 @@ string ModelTree::setStaticModel(void)
|
|||
// Writing Jacobian for endogenous variables without lag
|
||||
for(; tree_it != mModelTree.end(); tree_it++)
|
||||
{
|
||||
if ((*tree_it)->op_code != NoOpCode && (*tree_it)->op_code != EQUAL)
|
||||
if ((*tree_it)->op_code != NoOpCode
|
||||
&& (*tree_it)->op_code != EQUAL
|
||||
&& (*tree_it)->op_code != ASSIGN)
|
||||
{
|
||||
if (optimize(*tree_it) == 1)
|
||||
{
|
||||
|
@ -766,7 +782,9 @@ string ModelTree::setStaticModel(void)
|
|||
StaticOutput << "if M_.param_nbr > 0\n params = M_.params;\nend\n";
|
||||
|
||||
StaticOutput << " residual = zeros( " << ModelParameters::eq_nbr << ", 1);\n";
|
||||
StaticOutput << "\n\t%\n\t% Model equations\n\t%\n\n";
|
||||
StaticOutput << "\n\t"+interfaces::comment()+"\n\t"+interfaces::comment();
|
||||
StaticOutput << "Model equations\n\t";
|
||||
StaticOutput << interfaces::comment() + "\n\n";
|
||||
StaticOutput << model_output.str();
|
||||
StaticOutput << "if ~isreal(residual)\n";
|
||||
StaticOutput << " residual = real(residual)+imag(residual).^2;\n";
|
||||
|
@ -775,7 +793,9 @@ string ModelTree::setStaticModel(void)
|
|||
StaticOutput << " g1 = " <<
|
||||
"zeros(" << ModelParameters::eq_nbr << ", " <<
|
||||
ModelParameters::endo_nbr << ");\n" ;
|
||||
StaticOutput << "\n\t%\n\t% Jacobian matrix\n\t%\n\n";
|
||||
StaticOutput << "\n\t"+interfaces::comment()+"\n\t"+interfaces::comment();
|
||||
StaticOutput << "Jacobian matrix\n\t";
|
||||
StaticOutput << interfaces::comment() + "\n\n";
|
||||
StaticOutput << jacobian_output.str();
|
||||
StaticOutput << " if ~isreal(g1)\n";
|
||||
StaticOutput << " g1 = real(g1)+2*imag(g1);\n";
|
||||
|
@ -838,7 +858,7 @@ string ModelTree::setDynamicModel(void)
|
|||
tree_it = BeginModel;
|
||||
for (; tree_it != mModelTree.end(); tree_it++)
|
||||
{
|
||||
if ((*tree_it)->op_code == EQUAL)
|
||||
if ((*tree_it)->op_code == EQUAL || (*tree_it)->op_code == ASSIGN)
|
||||
{
|
||||
if ((*tree_it)->id1->type1 == eLocalParameter)
|
||||
{
|
||||
|
@ -873,7 +893,9 @@ string ModelTree::setDynamicModel(void)
|
|||
|
||||
for(; tree_it != mModelTree.end(); tree_it++)
|
||||
{
|
||||
if ((*tree_it)->op_code != NoOpCode && (*tree_it)->op_code != EQUAL)
|
||||
if ((*tree_it)->op_code != NoOpCode
|
||||
&& (*tree_it)->op_code != EQUAL
|
||||
&& (*tree_it)->op_code != ASSIGN)
|
||||
{
|
||||
if (optimize(*tree_it) == 1)
|
||||
{
|
||||
|
@ -893,7 +915,9 @@ string ModelTree::setDynamicModel(void)
|
|||
cout << "\tJacobian .. ";
|
||||
for(; tree_it != mModelTree.end(); tree_it++)
|
||||
{
|
||||
if ((*tree_it)->op_code != NoOpCode && (*tree_it)->op_code != EQUAL)
|
||||
if ((*tree_it)->op_code != NoOpCode
|
||||
&& (*tree_it)->op_code != EQUAL
|
||||
&& (*tree_it)->op_code != ASSIGN)
|
||||
{
|
||||
if (optimize(*tree_it) == 1)
|
||||
{
|
||||
|
@ -961,7 +985,9 @@ string ModelTree::setDynamicModel(void)
|
|||
{
|
||||
DynamicOutput << "global M_ it_\n";
|
||||
DynamicOutput << "if M_.param_nbr > 0\n params = M_.params;\nend\n";
|
||||
DynamicOutput << "\n\t%\n\t% Model equations\n\t%\n\n";
|
||||
DynamicOutput << "\n\t"+interfaces::comment()+"\n\t"+interfaces::comment();
|
||||
DynamicOutput << "Model equations\n\t";
|
||||
DynamicOutput << interfaces::comment() + "\n\n";
|
||||
DynamicOutput << "residual = zeros(" << nrows << ", 1);\n";
|
||||
|
||||
DynamicOutput << model_output.str();
|
||||
|
@ -972,7 +998,9 @@ string ModelTree::setDynamicModel(void)
|
|||
// Writing initialization instruction for matrix g1
|
||||
DynamicOutput << " g1 = " <<
|
||||
"zeros(" << nrows << ", " << VariableTable::size() << ");\n" ;
|
||||
DynamicOutput << "\n\t%\n\t% Jacobian matrix\n\t%\n\n";
|
||||
DynamicOutput << "\n\t"+interfaces::comment()+"\n\t"+interfaces::comment();
|
||||
DynamicOutput << "Jacobian matrix\n\t";
|
||||
DynamicOutput << interfaces::comment()+"\n\n";
|
||||
DynamicOutput << jacobian_output.str();
|
||||
DynamicOutput << "end\n";
|
||||
}
|
||||
|
@ -984,7 +1012,9 @@ string ModelTree::setDynamicModel(void)
|
|||
DynamicOutput << " g2 = " <<
|
||||
"sparse([],[],[]," << nrows << ", " << ncols << ", " <<
|
||||
5*ncols << ");\n";
|
||||
DynamicOutput << "\n\t%\n\t% Hessian matrix\n\t%\n\n";
|
||||
DynamicOutput << "\n\t"+interfaces::comment()+"\n\t"+interfaces::comment();
|
||||
DynamicOutput << "Hessian matrix\n\t";
|
||||
DynamicOutput << interfaces::comment() + "\n\n";
|
||||
DynamicOutput << hessian_output.str() << lsymetric.str();
|
||||
DynamicOutput << "end;\n";
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ using namespace std;
|
|||
#include "OutputFile.h"
|
||||
#include "SymbolTable.h"
|
||||
#include "ModelTree.h"
|
||||
#include "Interface.h"
|
||||
//------------------------------------------------------------------------------
|
||||
OutputFile::OutputFile()
|
||||
{
|
||||
|
@ -24,71 +25,74 @@ OutputFile::~OutputFile()
|
|||
//------------------------------------------------------------------------------
|
||||
void OutputFile::Open(string iFileName)
|
||||
{
|
||||
if (iFileName.size())
|
||||
if (iFileName.size())
|
||||
{
|
||||
string fname(iFileName);
|
||||
fname += interfaces::function_file_extension();
|
||||
mOutputFile.open(fname.c_str(),ios::out|ios::binary);
|
||||
if (!mOutputFile.is_open())
|
||||
{
|
||||
mOutputFile.open(iFileName.c_str(),ios::out|ios::binary);
|
||||
if (!mOutputFile.is_open())
|
||||
{
|
||||
cout << "OutputFile::Open : Error : Can't open file " << iFileName
|
||||
<< " for writing\n";
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "OutputFile::Open : Error : Missing file name\n";
|
||||
exit(-1);
|
||||
}
|
||||
mOutputFile << "%\n% Status : main Dynare file \n%\n";
|
||||
mOutputFile << "% Warning : this file is generated automatically by Dynare\n";
|
||||
mOutputFile << "% from model file (.mod)\n\n";
|
||||
if (clear_all)
|
||||
mOutputFile << "clear all\n";
|
||||
mOutputFile << "tic;\n";
|
||||
mOutputFile << "global M_ oo_ exedet_ exdet_ recur_ recurs_ \n";
|
||||
mOutputFile << "global options_ endval_\n";
|
||||
mOutputFile << "global ys0_ recurs0_ ex0_ ct_\n";
|
||||
mOutputFile << "options_ = [];\n";
|
||||
iFileName.erase(iFileName.size()-2);
|
||||
mOutputFile << "M_.fname = '" << iFileName << "';\n";
|
||||
mOutputFile << "%\n% Some global variables initialisation\n%\n";
|
||||
mOutputFile << "global_initialization;\n";
|
||||
mOutputFile << "diary off;\nwarning off;\n";
|
||||
mOutputFile << "\ndelete " << iFileName << ".log;\n";
|
||||
mOutputFile << "warning on;\nwarning backtrace;\n";
|
||||
mOutputFile << "logname_ = '" << iFileName << ".log';\n";
|
||||
mOutputFile << "diary '" << iFileName << ".log';\n";
|
||||
if (ModelTree::offset == 0)
|
||||
{
|
||||
mOutputFile << "if exist('" << iFileName << "_static.c', 'file') == 2,\n";
|
||||
mOutputFile << " clear " << iFileName << "_static\n";
|
||||
mOutputFile << " mex -O " << iFileName << "_static.c\n";
|
||||
mOutputFile << "end\n";
|
||||
mOutputFile << "if exist('" << iFileName << "_dynamic.c', 'file') == 2,\n";
|
||||
mOutputFile << " clear " << iFileName << "_dynamic\n";
|
||||
mOutputFile << " mex -O " << iFileName << "_dynamic.c\n";
|
||||
mOutputFile << "end\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
mOutputFile << "if exist('" << iFileName << "_static.dll', 'file') == 3,\n";
|
||||
mOutputFile << " clear " << iFileName << "_static\n";
|
||||
mOutputFile << " !del " << iFileName << "_static.dll\n";
|
||||
mOutputFile << "end\n";
|
||||
mOutputFile << "if exist('" << iFileName << "_dynamic.dll', 'file') == 3,\n";
|
||||
mOutputFile << " clear " << iFileName << "_dynamic\n";
|
||||
mOutputFile << " !del " << iFileName << "_dynamic.dll\n";
|
||||
mOutputFile << "end\n";
|
||||
cout << "OutputFile::Open : Error : Can't open file " << iFileName
|
||||
<< " for writing\n";
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cout << "OutputFile::Open : Error : Missing file name\n";
|
||||
exit(-1);
|
||||
}
|
||||
mOutputFile << interfaces::comment() << "\n" << interfaces::comment();
|
||||
mOutputFile << "Status : main Dynare file \n";
|
||||
mOutputFile << interfaces::comment() << "\n" << interfaces::comment();
|
||||
mOutputFile << "Warning : this file is generated automatically by Dynare\n";
|
||||
mOutputFile << interfaces::comment();
|
||||
mOutputFile << " from model file (.mod)\n\n";
|
||||
if (clear_all)
|
||||
mOutputFile << "clear all\n";
|
||||
mOutputFile << "tic;\n";
|
||||
mOutputFile << "global M_ oo_ exedet_ exdet_ recur_ recurs_ \n";
|
||||
mOutputFile << "global options_ endval_\n";
|
||||
mOutputFile << "global ys0_ recurs0_ ex0_ ct_\n";
|
||||
mOutputFile << "options_ = [];\n";
|
||||
mOutputFile << "M_.fname = '" << iFileName << "';\n";
|
||||
mOutputFile << interfaces::comment() << "\n" << interfaces::comment();
|
||||
mOutputFile << "Some global variables initialisation\n";
|
||||
mOutputFile << interfaces::comment() << "\n";
|
||||
mOutputFile << "global_initialization;\n";
|
||||
mOutputFile << "diary off;\nwarning off;\n";
|
||||
mOutputFile << "\n" << interfaces::delete_file(iFileName + ".log;\n");
|
||||
mOutputFile << "warning on;\nwarning backtrace;\n";
|
||||
mOutputFile << "logname_ = '" << iFileName << ".log';\n";
|
||||
mOutputFile << "diary '" << iFileName << ".log';\n";
|
||||
if (ModelTree::offset == 0)
|
||||
{
|
||||
mOutputFile << "if ";
|
||||
mOutputFile << interfaces::file_exist(iFileName + "_static.c)")+"\n";
|
||||
mOutputFile << " clear " << iFileName << "_static\n";
|
||||
mOutputFile << " " + interfaces::compile(iFileName +"_static.c")+"\n";
|
||||
mOutputFile << "end\n";
|
||||
mOutputFile << "if ";
|
||||
mOutputFile << interfaces::file_exist(iFileName + "_dynamic.c)")+"\n";
|
||||
mOutputFile << " clear " << iFileName << "_dynamic\n";
|
||||
mOutputFile << " " + interfaces::compile(iFileName+"_dynamic.c")+"\n";
|
||||
mOutputFile << "end\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
mOutputFile << "erase_compiled_function('" + iFileName +"_static');\n";
|
||||
mOutputFile << "erase_compiled_function('" + iFileName +"_dynamic');\n";
|
||||
mOutputFile << interfaces::load_model_function_files(iFileName);
|
||||
}
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
void OutputFile::Save(ostringstream& iOutput)
|
||||
{
|
||||
mOutputFile << SymbolTable::get();
|
||||
mOutputFile << ModelTree::get();
|
||||
mOutputFile << iOutput.str();
|
||||
mOutputFile << "\ndisp(['Total computing time : ' sec2hms(round(toc)) ]);\n";
|
||||
mOutputFile.close();
|
||||
mOutputFile << SymbolTable::get();
|
||||
mOutputFile << ModelTree::get();
|
||||
mOutputFile << iOutput.str();
|
||||
mOutputFile << "\ndisp(['Total computing time : ' sec2hms(round(toc)) ]);\n";
|
||||
mOutputFile.close();
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
#ifdef TEST_OUTPUTFILE
|
||||
|
@ -100,113 +104,113 @@ void OutputFile::Save(ostringstream& iOutput)
|
|||
#include "TmpSymbolTable.h"
|
||||
int main(void)
|
||||
{
|
||||
OutputFile outputfile;
|
||||
SymbolTable st;
|
||||
Expression exp;
|
||||
NumericalConstants numconst;
|
||||
NumericalInitialization numinit;
|
||||
OutputFile outputfile;
|
||||
SymbolTable st;
|
||||
Expression exp;
|
||||
NumericalConstants numconst;
|
||||
NumericalInitialization numinit;
|
||||
|
||||
outputfile.Open("Test.m");
|
||||
outputfile.Open("Test.m");
|
||||
|
||||
SymbolTable::AddSymbolDeclar("a",eExogenous);//0
|
||||
SymbolTable::AddSymbolDeclar("b",eParameter);//1
|
||||
SymbolTable::AddSymbolDeclar("c",eExogenous);//2
|
||||
SymbolTable::AddSymbolDeclar("d",eExogenousDet);//3
|
||||
SymbolTable::AddSymbolDeclar("x",eParameter);//3
|
||||
SymbolTable::AddSymbolDeclar("y",eExogenous);//3
|
||||
SymbolTable::AddSymbolDeclar("a",eExogenous);//0
|
||||
SymbolTable::AddSymbolDeclar("b",eParameter);//1
|
||||
SymbolTable::AddSymbolDeclar("c",eExogenous);//2
|
||||
SymbolTable::AddSymbolDeclar("d",eExogenousDet);//3
|
||||
SymbolTable::AddSymbolDeclar("x",eParameter);//3
|
||||
SymbolTable::AddSymbolDeclar("y",eExogenous);//3
|
||||
|
||||
|
||||
numconst.AddConstant("alpha");
|
||||
exp.AddToken(0,eExogenous,EXP); //0
|
||||
exp.AddToken(0,eParameter,0,eExogenousDet,PLUS); //1
|
||||
exp.AddToken(0,eTempResult,UMINUS); //2
|
||||
exp.AddToken(1,eExogenous,1,eTempResult,TIMES); //3
|
||||
exp.AddToken(3,eTempResult,0,eNumericalConstant,TIMES); //4
|
||||
exp.AddToken(4,eTempResult,0,eTempResult,COMMA); //5
|
||||
exp.AddToken(5,eTempResult,0,eExogenous,COMMA); //6
|
||||
exp.AddToken(6,eTempResult,"function1"); //6
|
||||
exp.set();
|
||||
//cout << exp.get();
|
||||
numconst.AddConstant("alpha");
|
||||
exp.AddToken(0,eExogenous,EXP); //0
|
||||
exp.AddToken(0,eParameter,0,eExogenousDet,PLUS); //1
|
||||
exp.AddToken(0,eTempResult,UMINUS); //2
|
||||
exp.AddToken(1,eExogenous,1,eTempResult,TIMES); //3
|
||||
exp.AddToken(3,eTempResult,0,eNumericalConstant,TIMES); //4
|
||||
exp.AddToken(4,eTempResult,0,eTempResult,COMMA); //5
|
||||
exp.AddToken(5,eTempResult,0,eExogenous,COMMA); //6
|
||||
exp.AddToken(6,eTempResult,"function1"); //6
|
||||
exp.set();
|
||||
//cout << exp.get();
|
||||
|
||||
|
||||
numinit.SetConstant("x","1");
|
||||
numinit.InitInitval();
|
||||
numinit.SetInit("y",exp.get());
|
||||
numinit.EndInitval();
|
||||
numinit.InitEndval();
|
||||
numinit.EndEndval();
|
||||
numinit.InitHistval();
|
||||
numinit.SetHist("y",3, exp.get());
|
||||
//cout << numinit.get();
|
||||
numinit.SetConstant("x","1");
|
||||
numinit.InitInitval();
|
||||
numinit.SetInit("y",exp.get());
|
||||
numinit.EndInitval();
|
||||
numinit.InitEndval();
|
||||
numinit.EndEndval();
|
||||
numinit.InitHistval();
|
||||
numinit.SetHist("y",3, exp.get());
|
||||
//cout << numinit.get();
|
||||
|
||||
|
||||
SigmaeInitialization siginit;
|
||||
SigmaeInitialization siginit;
|
||||
|
||||
siginit.AddExpression("00");
|
||||
siginit.EndOfRow();
|
||||
siginit.AddExpression("10");
|
||||
siginit.AddExpression("11");
|
||||
siginit.EndOfRow();
|
||||
siginit.AddExpression("20");
|
||||
siginit.AddExpression("21");
|
||||
siginit.AddExpression("22");
|
||||
siginit.EndOfRow();
|
||||
siginit.AddExpression("30");
|
||||
siginit.AddExpression("31");
|
||||
siginit.AddExpression("32");
|
||||
siginit.AddExpression("33");
|
||||
siginit.EndOfRow();
|
||||
siginit.set();
|
||||
siginit.AddExpression("00");
|
||||
siginit.EndOfRow();
|
||||
siginit.AddExpression("10");
|
||||
siginit.AddExpression("11");
|
||||
siginit.EndOfRow();
|
||||
siginit.AddExpression("20");
|
||||
siginit.AddExpression("21");
|
||||
siginit.AddExpression("22");
|
||||
siginit.EndOfRow();
|
||||
siginit.AddExpression("30");
|
||||
siginit.AddExpression("31");
|
||||
siginit.AddExpression("32");
|
||||
siginit.AddExpression("33");
|
||||
siginit.EndOfRow();
|
||||
siginit.set();
|
||||
|
||||
TmpSymbolTable tmp_symbol_table1, tmp_symbol_table2;
|
||||
TmpSymbolTable tmp_symbol_table1, tmp_symbol_table2;
|
||||
|
||||
|
||||
|
||||
ComputingTasks computing_tasks;
|
||||
ComputingTasks computing_tasks;
|
||||
|
||||
computing_tasks.set();
|
||||
computing_tasks.SetSteady();
|
||||
computing_tasks.SetCheck();
|
||||
computing_tasks.SetSimul();
|
||||
computing_tasks.set();
|
||||
computing_tasks.SetSteady();
|
||||
computing_tasks.SetCheck();
|
||||
computing_tasks.SetSimul();
|
||||
|
||||
tmp_symbol_table1.AddTempSymbol("tmp1");
|
||||
tmp_symbol_table1.AddTempSymbol("tmp2");
|
||||
tmp_symbol_table1.AddTempSymbol("tmp3");
|
||||
tmp_symbol_table1.set("var_list_");
|
||||
tmp_symbol_table1.AddTempSymbol("tmp1");
|
||||
tmp_symbol_table1.AddTempSymbol("tmp2");
|
||||
tmp_symbol_table1.AddTempSymbol("tmp3");
|
||||
tmp_symbol_table1.set("var_list_");
|
||||
|
||||
computing_tasks.SetStochSimul(tmp_symbol_table1.get());
|
||||
computing_tasks.SetStochSimul(tmp_symbol_table1.get());
|
||||
|
||||
computing_tasks.SetOption("DROP", "500");
|
||||
computing_tasks.RunEstimation();
|
||||
computing_tasks.SetEstimationInit();
|
||||
computing_tasks.SetEstimation("d", "init_val", "lo_bound", "up_bound", "prior", "p1", "p2", "p3","p4");
|
||||
computing_tasks.SetEstimation("a", "c", "init_val", "lo_bound", "up_bound", "prior", "p1", "p2", "p3", "p4");
|
||||
computing_tasks.SetCalibInit();
|
||||
computing_tasks.SetCalibVariance();
|
||||
computing_tasks.SetCalibCovariance();
|
||||
computing_tasks.SetCalibAutoCorrelation();
|
||||
computing_tasks.SetCalib();
|
||||
computing_tasks.SetOption("DROP", "500");
|
||||
computing_tasks.RunEstimation();
|
||||
computing_tasks.SetEstimationInit();
|
||||
computing_tasks.SetEstimation("d", "init_val", "lo_bound", "up_bound", "prior", "p1", "p2", "p3","p4");
|
||||
computing_tasks.SetEstimation("a", "c", "init_val", "lo_bound", "up_bound", "prior", "p1", "p2", "p3", "p4");
|
||||
computing_tasks.SetCalibInit();
|
||||
computing_tasks.SetCalibVariance();
|
||||
computing_tasks.SetCalibCovariance();
|
||||
computing_tasks.SetCalibAutoCorrelation();
|
||||
computing_tasks.SetCalib();
|
||||
|
||||
tmp_symbol_table1.AddTempSymbol("tmp11");
|
||||
tmp_symbol_table1.AddTempSymbol("tmp22");
|
||||
tmp_symbol_table1.AddTempSymbol("tmp33");
|
||||
tmp_symbol_table1.set("varl_list_");
|
||||
computing_tasks.SetOsr(tmp_symbol_table1.get());
|
||||
tmp_symbol_table1.AddTempSymbol("tmp11");
|
||||
tmp_symbol_table1.AddTempSymbol("tmp22");
|
||||
tmp_symbol_table1.AddTempSymbol("tmp33");
|
||||
tmp_symbol_table1.set("varl_list_");
|
||||
computing_tasks.SetOsr(tmp_symbol_table1.get());
|
||||
|
||||
tmp_symbol_table1.AddTempSymbol("tmp11");
|
||||
tmp_symbol_table1.AddTempSymbol("tmp22");
|
||||
tmp_symbol_table1.AddTempSymbol("tmp33");
|
||||
tmp_symbol_table1.set("var_list_");
|
||||
tmp_symbol_table2.AddTempSymbol("tmp4");
|
||||
tmp_symbol_table2.AddTempSymbol("tmp5");
|
||||
tmp_symbol_table2.AddTempSymbol("tmp6");
|
||||
tmp_symbol_table2.set("olr_inst_");
|
||||
computing_tasks.SetOlr(tmp_symbol_table1.get(), tmp_symbol_table2.get());
|
||||
tmp_symbol_table1.AddTempSymbol("tmp11");
|
||||
tmp_symbol_table1.AddTempSymbol("tmp22");
|
||||
tmp_symbol_table1.AddTempSymbol("tmp33");
|
||||
tmp_symbol_table1.set("var_list_");
|
||||
tmp_symbol_table2.AddTempSymbol("tmp4");
|
||||
tmp_symbol_table2.AddTempSymbol("tmp5");
|
||||
tmp_symbol_table2.AddTempSymbol("tmp6");
|
||||
tmp_symbol_table2.set("olr_inst_");
|
||||
computing_tasks.SetOlr(tmp_symbol_table1.get(), tmp_symbol_table2.get());
|
||||
|
||||
computing_tasks.SetOptimWeightsInit();
|
||||
computing_tasks.SetOptimWeights1();
|
||||
computing_tasks.SetOptimWeights2();
|
||||
outputfile.Save();
|
||||
computing_tasks.SetOptimWeightsInit();
|
||||
computing_tasks.SetOptimWeights1();
|
||||
computing_tasks.SetOptimWeights2();
|
||||
outputfile.Save();
|
||||
}
|
||||
#endif
|
||||
//------------------------------------------------------------------------------
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
#include <algorithm>
|
||||
//------------------------------------------------------------------------------
|
||||
#include "SymbolTable.h"
|
||||
|
||||
#include "Interface.h"
|
||||
using namespace std;
|
||||
//------------------------------------------------------------------------------
|
||||
map<string, Symbol, less<string> > SymbolTable::symboltable;// = *(new symbolmap);
|
||||
|
@ -216,8 +216,8 @@ string SymbolTable::get()
|
|||
output << "M_.exo_names_tex = '" << getTexNameByID(eExogenous, 0) << "';\n";
|
||||
for (int id = 1; id < ModelParameters::exo_nbr; id++)
|
||||
{
|
||||
output << "M_.exo_names = str2mat(M_.exo_names,'" << getNameByID(eExogenous, id) << "');\n";
|
||||
output << "M_.exo_names_tex = str2mat(M_.exo_names_tex,'" << getTexNameByID(eExogenous, id) << "');\n";
|
||||
output << "M_.exo_names = " + interfaces::strvcat("M_.exo_names","'"+getNameByID(eExogenous, id)+"'") + ";\n";
|
||||
output << "M_.exo_names_tex = " + interfaces::strvcat("M_.exo_names_tex","'"+getTexNameByID(eExogenous, id)+"'") + ";\n";
|
||||
}
|
||||
}
|
||||
if (ModelParameters::exo_det_nbr > 0)
|
||||
|
@ -226,8 +226,8 @@ string SymbolTable::get()
|
|||
output << "lgxdet_tex_ = '" << getTexNameByID(eExogenousDet, 0) << "';\n";
|
||||
for (int id = 1; id < ModelParameters::exo_det_nbr; id++)
|
||||
{
|
||||
output << "lgxdet_ = str2mat(lgxdet_,'" << getNameByID(eExogenousDet, id) << "');\n";
|
||||
output << "lgxdet_tex_ = str2mat(lgxdet_tex_,'" << getTexNameByID(eExogenousDet, id) << "');\n";
|
||||
output << "lgxdet_ = " + interfaces::strvcat("lgxdet_","'"+getNameByID(eExogenousDet, id)+"'") + ";\n";
|
||||
output << "lgxdet_tex_ = " + interfaces::strvcat("lgxdet_tex_","'"+getTexNameByID(eExogenousDet, id)+"'") + ";\n";
|
||||
}
|
||||
}
|
||||
if (ModelParameters::endo_nbr > 0)
|
||||
|
@ -236,8 +236,8 @@ string SymbolTable::get()
|
|||
output << "M_.endo_names_tex = '" << getTexNameByID(eEndogenous, 0) << "';\n";
|
||||
for (int id = 1; id < ModelParameters::endo_nbr; id++)
|
||||
{
|
||||
output << "M_.endo_names = str2mat(M_.endo_names,'" << getNameByID(eEndogenous, id) << "');\n";
|
||||
output << "M_.endo_names_tex = str2mat(M_.endo_names_tex,'" << getTexNameByID(eEndogenous, id) << "');\n";
|
||||
output << "M_.endo_names = " + interfaces::strvcat("M_.endo_names","'"+getNameByID(eEndogenous, id)+"'") + ";\n";
|
||||
output << "M_.endo_names_tex = " + interfaces::strvcat("M_.endo_names_tex","'"+getTexNameByID(eEndogenous, id)+"'") + ";\n";
|
||||
}
|
||||
}
|
||||
if (ModelParameters::recur_nbr > 0)
|
||||
|
@ -246,8 +246,8 @@ string SymbolTable::get()
|
|||
output << "M_.recur_names_tex = '" << getTexNameByID(eRecursiveVariable, 0) << "';\n";
|
||||
for (int id = 1; id < ModelParameters::recur_nbr; id++)
|
||||
{
|
||||
output << "M_.recur_names = str2mat(M_.recur_names,'" << getNameByID(eRecursiveVariable, id) << "');\n";
|
||||
output << "M_.recur_names_tex = str2mat(M_.recur_names_tex,'" << getTexNameByID(eRecursiveVariable, id) << "');\n";
|
||||
output << "M_.recur_names = " + interfaces::strvcat("M_.recur_names","'"+getNameByID(eRecursiveVariable, id)+"'") + ";\n";
|
||||
output << "M_.recur_names_tex = " + interfaces::strvcat("M_.recur_names_tex","'"+getTexNameByID(eRecursiveVariable, id)+"'") + ";\n";
|
||||
}
|
||||
}
|
||||
if (ModelParameters::parameter_nbr > 0)
|
||||
|
@ -256,8 +256,8 @@ string SymbolTable::get()
|
|||
output << "M_.param_names_tex = '" << getTexNameByID(eParameter, 0) << "';\n";
|
||||
for (int id = 1; id < ModelParameters::parameter_nbr; id++)
|
||||
{
|
||||
output << "M_.param_names = str2mat(M_.param_names,'" << getNameByID(eParameter, id) << "');\n";
|
||||
output << "M_.param_names_tex = str2mat(M_.param_names_tex,'" << getTexNameByID(eParameter, id) << "');\n";
|
||||
output << "M_.param_names = " + interfaces::strvcat("M_.param_names","'"+getNameByID(eParameter, id)+"'") + ";\n";
|
||||
output << "M_.param_names_tex = " + interfaces::strvcat("M_.param_names_tex","'"+getTexNameByID(eParameter, id)+"'") + ";\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ using namespace std;
|
|||
//------------------------------------------------------------------------------
|
||||
#include "SymbolTable.h"
|
||||
#include "TmpSymbolTable.h"
|
||||
#include "Interface.h"
|
||||
//------------------------------------------------------------------------------
|
||||
TmpSymbolTable::TmpSymbolTable()
|
||||
{
|
||||
|
@ -64,7 +65,8 @@ void TmpSymbolTable::set(string varname)
|
|||
{
|
||||
if (SymbolTable::isReferenced(*it) == eReferenced)
|
||||
{
|
||||
output << varname << " = strvcat(" << varname << ", '" << *it << "');\n";
|
||||
output << varname << " = ";
|
||||
output << interfaces::strvcat(varname,"'"+*it+"'")+";\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -117,6 +117,8 @@ class DataTree
|
|||
inline NodeID AddSqRt(NodeID iArg1);
|
||||
/*! Adds "arg1=arg2" to model tree */
|
||||
inline NodeID AddEqual(NodeID iArg1, NodeID iArg2);
|
||||
/*! Adds "arg1=arg2" as assignment to model tree */
|
||||
inline NodeID AddAssign(NodeID iArg1, NodeID iArg2);
|
||||
public :
|
||||
/*! Constructor */
|
||||
DataTree();
|
||||
|
@ -752,5 +754,16 @@ inline NodeID DataTree::AddEqual(NodeID iArg1, NodeID iArg2=Zero)
|
|||
}
|
||||
return PushToken(iArg1,EQUAL,iArg2);
|
||||
}
|
||||
inline NodeID DataTree::AddAssign(NodeID iArg1, NodeID iArg2=Zero)
|
||||
{
|
||||
MToken lToken(iArg1, eTempResult, iArg2, ASSIGN);
|
||||
|
||||
NodeID ID = getIDOfToken(lToken);
|
||||
if (ID != NullID)
|
||||
{
|
||||
return ID;
|
||||
}
|
||||
return PushToken(iArg1,ASSIGN,iArg2);
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
#include <fstream>
|
||||
enum eInterface{
|
||||
eMatlab = 0,
|
||||
eScilab = 1
|
||||
};
|
||||
|
||||
class interfaces {
|
||||
public:
|
||||
static eInterface type;
|
||||
interfaces(eInterface t){type = t;}
|
||||
static inline void set_interface(eInterface t){type = t;}
|
||||
static inline std::string comment(void){
|
||||
if (type == eMatlab) return "% ";
|
||||
else if (type == eScilab) return "// ";
|
||||
else return "";
|
||||
}
|
||||
static inline std::string delete_file(std::string s)
|
||||
{
|
||||
if (type == eMatlab)
|
||||
return "delete " + s;
|
||||
else if (type == eScilab)
|
||||
return "mdelete " + s;
|
||||
else return "";
|
||||
}
|
||||
static inline std::string file_exist(std::string s)
|
||||
{
|
||||
if (type == eMatlab)
|
||||
return "exist(" + s + ")";
|
||||
else if (type == eScilab)
|
||||
return "file_exist(" + s + ")";
|
||||
else return "";
|
||||
}
|
||||
static inline std::string compile(std::string s)
|
||||
{
|
||||
if (type == eMatlab)
|
||||
return "mex -O" + s + "\n";
|
||||
else return "";
|
||||
}
|
||||
static inline std::string function_close(void){
|
||||
if (type == eScilab) return "endfunction\n";
|
||||
else return "";
|
||||
}
|
||||
static inline std::string function_file_extension(void){
|
||||
if (type == eMatlab) return ".m";
|
||||
else if (type == eScilab) return ".sci";
|
||||
else return "";
|
||||
}
|
||||
static inline std::string strvcat(std::string s1,std::string s2)
|
||||
{
|
||||
if (type == eMatlab) return "strvcat("+s1+","+s2+")";
|
||||
else if (type == eScilab) return "[" + s1 + ";" + s2 + "]";
|
||||
else return "";
|
||||
}
|
||||
static inline std::string load_model_function_files(std::string filename)
|
||||
{
|
||||
if (type == eScilab)
|
||||
return "getf('" + filename + "_static.sci');\ngetf('" + filename + "_dynamic.sci');\n";
|
||||
else return "";
|
||||
}
|
||||
};
|
||||
|
Loading…
Reference in New Issue