Make Progressive as option

This commit is contained in:
Artur Meski
2018-10-13 21:00:06 +01:00
parent 96b0278136
commit e4ab5999aa
7 changed files with 69 additions and 38 deletions

11
rs.cc
View File

@@ -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
View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -34,12 +34,8 @@ SymRS::SymRS(RctSys *rs, Options *opts)
pv_ca_succ = nullptr;
tr_ca = nullptr;
// TODO: this should be triggered by the parser and it should depend
// on an option in the input file
rs->ctx_aut->makeProgressive();
rs->printSystem();
encode();
}