Make Progressive as option
This commit is contained in:
11
rs.cc
11
rs.cc
@@ -9,6 +9,7 @@ RctSys::RctSys(void)
|
||||
: current_process_defined(false)
|
||||
{
|
||||
ctx_aut = nullptr;
|
||||
gen_ctxaut_progressive_closure = false;
|
||||
}
|
||||
|
||||
bool RctSys::hasEntity(std::string name)
|
||||
@@ -306,6 +307,11 @@ void RctSys::ctxAutEnable(void)
|
||||
ctx_aut = new CtxAut(opts, this);
|
||||
}
|
||||
|
||||
void RctSys::ctxAutEnableProgressiveClosure(void)
|
||||
{
|
||||
gen_ctxaut_progressive_closure = true;
|
||||
}
|
||||
|
||||
void RctSys::ctxAutAddState(std::string stateName)
|
||||
{
|
||||
assert(ctx_aut != nullptr);
|
||||
@@ -355,4 +361,9 @@ void RctSys::ctxAutSaveCurrentContextSet(std::string processName)
|
||||
ctx_aut->saveCurrentContextSet(processID);
|
||||
}
|
||||
|
||||
void RctSys::ctxAutFinalise(void)
|
||||
{
|
||||
ctx_aut->makeProgressive();
|
||||
}
|
||||
|
||||
/** EOF **/
|
||||
|
||||
4
rs.hh
4
rs.hh
@@ -85,12 +85,14 @@ class RctSys
|
||||
void printSystem(void);
|
||||
|
||||
void ctxAutEnable(void);
|
||||
void ctxAutEnableProgressiveClosure(void);
|
||||
void ctxAutAddState(std::string stateName);
|
||||
void ctxAutSetInitState(std::string stateName);
|
||||
void ctxAutAddTransition(std::string srcStateName, std::string dstStateName);
|
||||
void ctxAutAddTransition(std::string srcStateName, std::string dstStateName, StateConstr *stateConstr);
|
||||
void ctxAutPushNamedContextEntity(std::string entity_name);
|
||||
void ctxAutSaveCurrentContextSet(std::string processName);
|
||||
void ctxAutFinalise(void);
|
||||
|
||||
bool initStatesDefined(void)
|
||||
{
|
||||
@@ -116,6 +118,8 @@ class RctSys
|
||||
|
||||
CtxAut *ctx_aut;
|
||||
|
||||
bool gen_ctxaut_progressive_closure;
|
||||
|
||||
EntitiesById entities_ids;
|
||||
EntitiesByName entities_names;
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ void rsin_driver::initialise(void)
|
||||
opts = nullptr;
|
||||
use_ctx_aut = false;
|
||||
use_concentrations = false;
|
||||
use_progressive = false;
|
||||
}
|
||||
|
||||
rsin_driver::~rsin_driver ()
|
||||
@@ -106,3 +107,17 @@ void rsin_driver::useContextAutomaton(void)
|
||||
getReactionSystem()->ctxAutEnable();
|
||||
}
|
||||
|
||||
void rsin_driver::makeProgressive(void)
|
||||
{
|
||||
use_progressive = true;
|
||||
if (use_ctx_aut)
|
||||
{
|
||||
getReactionSystem()->ctxAutEnableProgressiveClosure();
|
||||
}
|
||||
else
|
||||
{
|
||||
FERROR("Context automaton not enabled");
|
||||
}
|
||||
}
|
||||
|
||||
// EOF
|
||||
|
||||
@@ -35,6 +35,7 @@ class rsin_driver
|
||||
// options in configuration file:
|
||||
bool use_ctx_aut;
|
||||
bool use_concentrations;
|
||||
bool use_progressive;
|
||||
|
||||
// Handling the scanner
|
||||
void scan_begin();
|
||||
@@ -60,7 +61,7 @@ class rsin_driver
|
||||
ensureOptionsAllowed();
|
||||
use_concentrations = true;
|
||||
};
|
||||
|
||||
void makeProgressive(void);
|
||||
void ensureReactionSystemReady(void);
|
||||
void setupReactionSystem(void);
|
||||
|
||||
@@ -78,4 +79,3 @@ class rsin_driver
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@ blank [ \t]
|
||||
"options" return token::OPTIONS;
|
||||
"use-context-automaton" return token::USE_CTX_AUT;
|
||||
"use-concentrations" return token::USE_CONCENTRATIONS;
|
||||
"make-progressive" return token::MAKE_PROGRESSIVE;
|
||||
"reactions" return token::REACTIONS;
|
||||
"initial-contexts" return token::INITIALCONTEXTS;
|
||||
"context-entities" return token::CONTEXTENTITIES;
|
||||
@@ -128,4 +129,3 @@ rsin_driver::scan_end()
|
||||
{
|
||||
fclose(yyin);
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ class rsin_driver;
|
||||
#include "rsin_driver.hh"
|
||||
}
|
||||
|
||||
%token OPTIONS USE_CTX_AUT USE_CONCENTRATIONS
|
||||
%token OPTIONS USE_CTX_AUT USE_CONCENTRATIONS MAKE_PROGRESSIVE
|
||||
%token REACTIONS INITIALCONTEXTS CONTEXTENTITIES RSCTLKFORM
|
||||
%token CONTEXTAUTOMATON STATES INITSTATE TRANSITIONS
|
||||
%token EQ LCB RCB LRB RRB LSB RSB LAB RAB COL SEMICOL DOT COMMA RARR
|
||||
@@ -77,34 +77,40 @@ class rsin_driver;
|
||||
|
||||
%start system;
|
||||
|
||||
system:
|
||||
system:
|
||||
| OPTIONS LCB options RCB system
|
||||
| REACTIONS LCB reactionsets RCB system
|
||||
| INITIALCONTEXTS LCB initstates RCB system
|
||||
| CONTEXTENTITIES LCB actionentities RCB system
|
||||
| REACTIONS LCB reactionsets RCB system
|
||||
| INITIALCONTEXTS LCB initstates RCB system
|
||||
| CONTEXTENTITIES LCB actionentities RCB system
|
||||
| CONTEXTAUTOMATON LCB ctxaut RCB system
|
||||
| RSCTLKFORM LCB IDENTIFIER COL rsctlk_form RCB system {
|
||||
driver.addFormRSCTLK(*$3, $5);
|
||||
free($3);
|
||||
}
|
||||
;
|
||||
{
|
||||
driver.getReactionSystem()->ctxAutFinalise();
|
||||
}
|
||||
| RSCTLKFORM LCB IDENTIFIER COL rsctlk_form RCB system {
|
||||
driver.addFormRSCTLK(*$3, $5);
|
||||
free($3);
|
||||
}
|
||||
;
|
||||
|
||||
options:
|
||||
| options option SEMICOL
|
||||
;
|
||||
|
||||
option:
|
||||
| USE_CTX_AUT {
|
||||
driver.useContextAutomaton();
|
||||
| USE_CTX_AUT {
|
||||
driver.useContextAutomaton();
|
||||
}
|
||||
| USE_CONCENTRATIONS {
|
||||
driver.useConcentrations();
|
||||
}
|
||||
| MAKE_PROGRESSIVE {
|
||||
driver.makeProgressive();
|
||||
}
|
||||
;
|
||||
|
||||
/*
|
||||
/*
|
||||
* -------------------------
|
||||
* REACTIONS
|
||||
* REACTIONS
|
||||
* -------------------------
|
||||
*/
|
||||
|
||||
@@ -113,11 +119,11 @@ reactionsets:
|
||||
;
|
||||
|
||||
process_reactions: processname LCB reactions RCB SEMICOL
|
||||
|
||||
|
||||
processname: IDENTIFIER {
|
||||
driver.getReactionSystem()->setCurrentProcess(*$1);
|
||||
free($1);
|
||||
}
|
||||
}
|
||||
|
||||
reactions:
|
||||
| reactions reaction SEMICOL
|
||||
@@ -146,7 +152,7 @@ reactant: IDENTIFIER {
|
||||
|
||||
inhibitors:
|
||||
inhibitor
|
||||
| inhibitors COMMA inhibitor
|
||||
| inhibitors COMMA inhibitor
|
||||
;
|
||||
|
||||
inhibitor:
|
||||
@@ -180,7 +186,7 @@ initstates:
|
||||
|
||||
initstate:
|
||||
| entity
|
||||
| initstate COMMA entity
|
||||
| initstate COMMA entity
|
||||
;
|
||||
|
||||
entity: IDENTIFIER {
|
||||
@@ -191,7 +197,7 @@ entity: IDENTIFIER {
|
||||
|
||||
/*******************************************/
|
||||
|
||||
actionentities:
|
||||
actionentities:
|
||||
| actentity
|
||||
| actionentities COMMA actentity
|
||||
;
|
||||
@@ -201,7 +207,7 @@ actentity: IDENTIFIER {
|
||||
free($1);
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
/*******************************************/
|
||||
|
||||
ctxaut:
|
||||
@@ -226,11 +232,11 @@ autinitstate: IDENTIFIER {
|
||||
free($1);
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
auttransitions:
|
||||
| auttrans
|
||||
| auttrans SEMICOL auttransitions
|
||||
;
|
||||
;
|
||||
|
||||
auttrans: LCB proc_ctxsets RCB COL IDENTIFIER RARR IDENTIFIER {
|
||||
driver.getReactionSystem()->ctxAutAddTransition(*$5, *$7);
|
||||
@@ -243,22 +249,22 @@ auttrans: LCB proc_ctxsets RCB COL IDENTIFIER RARR IDENTIFIER {
|
||||
free($7);
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
proc_ctxsets:
|
||||
| proc_ctxsets single_proc_ctxset
|
||||
;
|
||||
|
||||
|
||||
single_proc_ctxset: IDENTIFIER EQ LCB contextset RCB {
|
||||
driver.getReactionSystem()->ctxAutSaveCurrentContextSet(*$1);
|
||||
free($1);
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
contextset:
|
||||
| ctxentity
|
||||
| contextset COMMA ctxentity
|
||||
;
|
||||
|
||||
|
||||
ctxentity: IDENTIFIER {
|
||||
driver.getReactionSystem()->ctxAutPushNamedContextEntity(*$1);
|
||||
free($1);
|
||||
@@ -266,7 +272,7 @@ ctxentity: IDENTIFIER {
|
||||
;
|
||||
|
||||
/* formulae */
|
||||
|
||||
|
||||
state_constr: IDENTIFIER DOT IDENTIFIER {
|
||||
$$ = new StateConstr(*$1, *$3);
|
||||
free($1);
|
||||
@@ -324,7 +330,7 @@ state_constr: IDENTIFIER DOT IDENTIFIER {
|
||||
// }
|
||||
// ;
|
||||
|
||||
rsctlk_form:
|
||||
rsctlk_form:
|
||||
IDENTIFIER DOT IDENTIFIER {
|
||||
$$ = new FormRSCTLK(*$1, *$3);
|
||||
free($1);
|
||||
@@ -371,7 +377,7 @@ rsctlk_form:
|
||||
}
|
||||
| AG rsctlk_form {
|
||||
$$ = new FormRSCTLK(RSCTLK_AG, $2);
|
||||
}
|
||||
}
|
||||
| UK LSB IDENTIFIER RSB LRB rsctlk_form RRB {
|
||||
Agents_f agents;
|
||||
agents.insert(*$3);
|
||||
@@ -411,7 +417,7 @@ rsctlk_form:
|
||||
// }
|
||||
|
||||
/* contexts as boolean formulae */
|
||||
| E LAB state_constr RAB X rsctlk_form {
|
||||
| E LAB state_constr RAB X rsctlk_form {
|
||||
$$ = new FormRSCTLK(RSCTLK_EX_ACT, $3, $6);
|
||||
}
|
||||
| E LAB state_constr RAB U LRB rsctlk_form COMMA rsctlk_form RRB {
|
||||
@@ -443,4 +449,3 @@ yy::rsin_parser::error(const yy::rsin_parser::location_type &l, const std::strin
|
||||
{
|
||||
driver.error(l, m);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user