package com.plectix.simulator.staticanalysis; import java.util.LinkedList; import java.util.List; import com.plectix.simulator.parser.DocumentFormatException; import com.plectix.simulator.parser.IncompletesDisabledException; import com.plectix.simulator.parser.KappaFileLine; import com.plectix.simulator.parser.ParseErrorException; import com.plectix.simulator.parser.abstractmodel.ModelRule; import com.plectix.simulator.parser.abstractmodel.reader.RulesParagraphReader; import com.plectix.simulator.parser.builders.RuleBuilder; import com.plectix.simulator.parser.util.AgentFactory; import com.plectix.simulator.simulator.KappaSystemInterface; import com.plectix.simulator.simulator.MockKappaSystemForRules; public final class LibraryOfRules { private List<String> elementaryRules; private List<String> rulesForCompression; private List<String> rules; private final RulesParagraphReader ruleStringReader; private final KappaSystemInterface mockKappaSystem; private final RuleBuilder ruleBuilder; public LibraryOfRules() { ruleStringReader = new RulesParagraphReader(null, new AgentFactory(true)); mockKappaSystem = new MockKappaSystemForRules(); ruleBuilder = new RuleBuilder(mockKappaSystem); fullElementaryRules(); fullCompressionRules(); fullRules(); } public final Rule getRuleByString(String ruleStr) throws IncompletesDisabledException, ParseErrorException, DocumentFormatException { KappaFileLine kl = new KappaFileLine(0, ruleStr); List<ModelRule> rules = new LinkedList<ModelRule>(); ruleStringReader.fullRule(rules, 0, false, kl); return ruleBuilder.convert(rules.iterator().next()); } public final List<String> getElementaryRules() { return elementaryRules; } public final List<String> getRulesForCompress() { return rulesForCompression; } private final void fullCompressionRules() { String[] list = { "R(Y68~p!1),G(a!1,b),So(d)->R(Y68~p!1),G(a!1,b!2),So(d!2)", "Ras(S1S2~gtp),Raf(x~u)->Ras(S1S2~gtp!1),Raf(x~u!1)", "Ras(S1S2~gtp!1),Raf(x!1) -> Ras(S1S2~gtp),Raf(x)", "Ras(S1S2~gtp),Raf(x~u) -> Ras(S1S2~gtp!1),Raf(x~u!1)", "Ras(S1S2~gtp!1),Raf(x~u!1) -> Ras(S1S2~gtp!1),Raf(x~p!1)", "Ras(S1S2~gtp!1),Raf(x!1) -> Ras(S1S2~gtp),Raf(x)", "PP2A1(s),Raf(x~p) -> PP2A1(s!1),Raf(x~p!1)", "PP2A1(s!1),Raf(x~p!1) -> PP2A1(s!1),Raf(x~u!1)", "PP2A1(s!1),Raf(x!1) -> PP2A1(s),Raf(x)", "Raf(x~p),MEK(S222~u) -> Raf(x~p!1),MEK(S222~u!1)", "Raf(x~p),MEK(s) -> Raf(x~p!1),MEK(s!1)", "Raf(x~p!1),MEK(S222~u!1) -> Raf(x~p!1),MEK(S222~p!1)", "Raf(x~p!1),MEK(S222!1) -> Raf(x~p),MEK(S222)", "Raf(x~p),MEK(S218~u) -> Raf(x~p!1),MEK(S218~u!1)", "Raf(x~p!1),MEK(S218~u!1) -> Raf(x~p!1),MEK(S218~p!1)", "Raf(x~p!1),MEK(s!1) -> Raf(x~p),MEK(s)", "Raf(x~p!1),MEK(S218!1) -> Raf(x~p),MEK(S218)", "PP2A2(s),MEK(S222~p) -> PP2A2(s!1),MEK(S222~p!1)", "PP2A2(s!1),MEK(S222~p!1) -> PP2A2(s!1),MEK(S222~u!1)", "PP2A2(s!1),MEK(S222!1) -> PP2A2(s),MEK(S222)", "PP2A2(s),MEK(S218~p) -> PP2A2(s!1),MEK(S218~p!1)", "PP2A2(s!1),MEK(S218~p!1) -> PP2A2(s!1),MEK(S218~u!1)", "PP2A2(s!1),MEK(S218!1) -> PP2A2(s),MEK(S218)", "MEK(s,S218~p,S222~p),ERK(T185~u) -> MEK(s!1,S218~p,S222~p),ERK(T185~u!1)", "MEK(s!1,S218~p,S222~p),ERK(T185~u!1) -> MEK(s!1,S218~p,S222~p),ERK(T185~p!1)", "MEK(s!1,S218~p,S222~p),ERK(T185!1) -> MEK(s,S218~p,S222~p),ERK(T185)", "MEK(s,S218~p,S222~p),ERK(Y187~u) -> MEK(s!1,S218~p,S222~p),ERK(Y187~u!1)", "MEK(s!1,S218~p,S222~p),ERK(Y187~u!1) -> MEK(s!1,S218~p,S222~p),ERK(Y187~p!1)", "MEK(s!1,S218~p,S222~p),ERK(Y187!1) -> MEK(s,S218~p,S222~p),ERK(Y187)", "MKP3(s),ERK(T185~p) -> MKP3(s!1),ERK(T185~p!1)", "MKP3(s!1),ERK(T185~p!1) -> MKP3(s!1),ERK(T185~u!1)", "MKP3(s!1),ERK(T185!1) -> MKP3(s),ERK(T185)", "MKP3(s),ERK(Y187~p) -> MKP3(s!1),ERK(Y187~p!1)", "MKP3(s!1),ERK(Y187~p!1) -> MKP3(s!1),ERK(Y187~u!1)", "MKP3(s!1),ERK(Y187!1) -> MKP3(s),ERK(Y187)", "A(x)->B(x)" }; rulesForCompression = new LinkedList<String>(); for (int i = 0; i < list.length; i++) { rulesForCompression.add(list[i]); } } private final void fullRules() { String[] list = { "R(l,r) , E(r) ->R(l!1,r) , E(r!1)", "R(l!1,r) , E(r!1) ->R(l,r) , E(r)", // "#R(l!1,r) , E(r!1) -> R(l,r) , E(r)", "E(r!1) , E(r!2) , R(l!1,r) , R(l!2,r) ->E(r!1) , E(r!2) , R(l!1,r!3) , R(l!2,r!3)", "E(r!1) , E(r!2) , R(l!1,r!3) , R(l!2,r!3) -> E(r!1) , E(r!2) , R(l!1,r) , R(l!2,r)", "E(r!1) , E(r!2) , R(l!1,r!3,Y68~u) , R(l!2,r!3) -> E(r!1) , E(r!2) , R(l!1,r!3,Y68~p) , R(l!2,r!3)", "R(Y68~p) -> R(Y68~u)", "E(r!1) , E(r!2) , R(l!1,r!3,Y48~u) , R(l!2,r!3) -> E(r!1) , E(r!2) , R(l!1,r!3,Y48~p) , R(l!2,r!3)", "R(Y48~p) -> R(Y48~u)", "R(r!_,Y48~p!1) , Sh(pi!1,Y7~u) -> R(r!_,Y48~p!1), Sh(pi!1,Y7~p)", "Sh(pi!_,Y7~p) -> Sh(pi!_,Y7~u)", "Sh(pi,Y7~p) -> Sh(pi,Y7~u)", "R(Y68~p) , G(a,b) -> R(Y68~p!1) , G(a!1,b)", "R(Y68~p!1) , G (a!1,b) -> R(Y68~p) , G(a,b)", "R(Y68~p) , G(a,b!_) -> R(Y68~p!1) , G(a!1,b!_)", "R(Y68~p!1) , G(a!1,b!_) -> R(Y68~p) , G(a,b!_)", "R(Y68~p!1) , G(a!1,b) , So(d) -> R(Y68~p!1) , G(a!1,b!2) , So(d!2)", "R(Y68~p!1) , G(a!1,b!2) , So(d!2) -> R(Y68~p!1) , G(a!1,b) , So(d) ", "G(a,b) , So(d) -> G(a,b!1) , So(d!1)", "G(a,b!1) , So(d!1) -> G(a,b) , So(d)", "Sh(pi,Y7~p!2) , G(a!2,b) , So(d) -> Sh(pi,Y7~p!2) , G(a!2,b!1) , So(d!1)", "Sh(pi,Y7~p!2) , G(a!2,b!1) , So(d!1) -> Sh(pi,Y7~p!2) , G(a!2,b) , So(d)", "Sh(pi!_,Y7~p!2) , G(a!2,b) , So(d) -> Sh(pi!_,Y7~p!2) , G(a!2,b!3) , So(d!3)", "Sh(pi!_,Y7~p!2) , G(a!2,b!3) , So(d!3) -> Sh(pi!_,Y7~p!2) , G(a!2,b) , So(d)", "R(Y48~p) , Sh(pi,Y7~u) -> R(Y48~p!1) , Sh(pi!1,Y7~u)", "R(Y48~p!1) , Sh(pi!1,Y7~u) -> R(Y48~p) , Sh(pi,Y7~u)", "R(Y48~p) , Sh(pi,Y7~p) -> R(Y48~p!1) , Sh(pi!1,Y7~p)", "R(Y48~p!1) , Sh(pi!1,Y7~p) -> R(Y48~p) , Sh(pi,Y7~p)", "R(Y48~p) , Sh(pi,Y7~p!1) , G(a!1,b) -> R(Y48~p!2) , Sh(pi!2,Y7~p!1) , G(a!1,b)", "R(Y48~p!2) , Sh(pi!2,Y7~p!1) , G(a!1,b) -> R(Y48~p) , Sh(pi,Y7~p!1) , G(a!1,b)", "R(Y48~p) , Sh(pi,Y7~p!1) , G(a!1,b!3) , So(d!3) -> R(Y48~p!2) , Sh(pi!2,Y7~p!1) , G(a!1,b!3) , So(d!3)", "R(Y48~p!2) , Sh(pi!2,Y7~p!1) , G(a!1,b!3) , So(d!3) -> R(Y48~p) , Sh(pi,Y7~p!1) , G(a!1,b!3) , So(d!3)", "R(Y48~p!1) , Sh(pi!1,Y7~p) , G(a,b) -> R(Y48~p!1) , Sh(pi!1,Y7~p!2) , G(a!2,b)", "R(Y48~p!1) , Sh(pi!1,Y7~p!2) , G(a!2,b) -> R(Y48~p!1) , Sh(pi!1,Y7~p) , G(a,b)", "Sh(pi,Y7~p) , G(a,b) -> Sh(pi,Y7~p!1) , G(a!1,b)", "Sh(pi,Y7~p!1) , G(a!1,b) -> Sh(pi,Y7~p) , G(a,b)", "Sh(pi,Y7~p) , G(a,b!_) -> Sh(pi,Y7~p!1) , G(a!1,b!_)", "Sh(pi,Y7~p!1) , G(a!1,b!_) -> Sh(pi,Y7~p) , G(a,b!_)", "R(Y48~p!1) , Sh(pi!1,Y7~p) , G(a,b!3) , So(d!3) -> R(Y48~p!1) , Sh(pi!1,Y7~p!2) , G(a!2,b!3) , So(d!3)", "R(Y48~p!1) , Sh(pi!1,Y7~p!2) , G(a!2,b!3) , So(d!3) -> R(Y48~p!1) , Sh(pi!1,Y7~p) , G(a,b!3) , So(d!3)", "R(r!_,l) -> R(r,l)", "Sh(Y7~u!_) -> Sh(Y7~t)" }; rules = new LinkedList<String>(); for (int i = 0; i < list.length; i++) { rules.add(list[i]); } } private final void fullElementaryRules() { elementaryRules = new LinkedList<String>(); elementaryRules.add(" -> A(x)"); elementaryRules.add("A(x) ->"); elementaryRules.add("A(x),B(x) -> A(x!1),b(x!1)"); elementaryRules.add("A(x!1),B(x!1)->A(x),B(x)"); elementaryRules.add("A(x~u) ->A(x~p)"); elementaryRules.add("A(x!_) ->A(x)"); } public final List<String> getRules() { return rules; } }