From e4ab5999aa5874733fb3c60dd1ba993e865a3814 Mon Sep 17 00:00:00 2001 From: Artur Meski Date: Sat, 13 Oct 2018 21:00:06 +0100 Subject: [PATCH] Make Progressive as option --- rs.cc | 11 +++++++++ rs.hh | 4 +++ rsin_driver.cc | 15 +++++++++++ rsin_driver.hh | 4 +-- rsin_parser.ll | 2 +- rsin_parser.yy | 67 +++++++++++++++++++++++++++----------------------- symrs.cc | 4 --- 7 files changed, 69 insertions(+), 38 deletions(-) diff --git a/rs.cc b/rs.cc index 67f734f..b3220e4 100644 --- a/rs.cc +++ b/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 **/ diff --git a/rs.hh b/rs.hh index 66389f2..e872da3 100644 --- a/rs.hh +++ b/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; diff --git a/rsin_driver.cc b/rsin_driver.cc index 66c8403..4cb70b8 100644 --- a/rsin_driver.cc +++ b/rsin_driver.cc @@ -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 diff --git a/rsin_driver.hh b/rsin_driver.hh index 381c3c4..a0c0c8a 100644 --- a/rsin_driver.hh +++ b/rsin_driver.hh @@ -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 - diff --git a/rsin_parser.ll b/rsin_parser.ll index 3750a72..668a117 100644 --- a/rsin_parser.ll +++ b/rsin_parser.ll @@ -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); } - diff --git a/rsin_parser.yy b/rsin_parser.yy index c87bbff..3d1f688 100644 --- a/rsin_parser.yy +++ b/rsin_parser.yy @@ -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); } - diff --git a/symrs.cc b/symrs.cc index d05808c..235bd1f 100644 --- a/symrs.cc +++ b/symrs.cc @@ -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(); }