diff --git a/build.gradle b/build.gradle index 8cc8f591aaea1e005591b5faf21caa920cb267af..eb5f665e18afababc1a7d4e8b3e546776af1be56 100644 --- a/build.gradle +++ b/build.gradle @@ -292,7 +292,7 @@ jastadd { parser.genDir = "src/gen/java/de/tudresden/inf/st/pnml/jastadd/parser" // default options are: '--rewrite=cnta', '--safeLazy', '--visitCheck=false', '--cacheCycle=false' - extraJastAddOptions = ['--List=JastAddList'] // '--incremental=param' + extraJastAddOptions = ['--List=JastAddList', '--lineColumnNumbers'] // '--incremental=param' } // publish gitlab project diff --git a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java index 510c863aebdcf016e57e5d893615fe55bac6a2b0..3530895e3097224f6a117ebdf451029e2ad9bd61 100644 --- a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java +++ b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java @@ -35,7 +35,6 @@ public final class PnmlConstants { // service related keys public static final String TRANSITION_TYPE_SERVICE = "serviceTransitionType"; public static final String SERVICE_NAME = "serviceName"; - public static final String SERVICE_INSTANCE = "serviceInstance"; public static final String TRANSITION_SERVICE_SERVER_IN_KEY = "serverInput"; public static final String TRANSITION_SERVICE_SERVER_OUT_KEY = "serverOutput"; public static final String TRANSITION_SERVICE_CHANNELS_KEY = "channels"; diff --git a/src/main/jastadd/base/clauses/ExpressionParser.beaver b/src/main/jastadd/base/clauses/ExpressionParser.beaver index 86cb1da18944b769aaacc4e964a09fdf7a849626..ca42a0fe5637f549fd3cab1ab6fe04b763710d77 100644 --- a/src/main/jastadd/base/clauses/ExpressionParser.beaver +++ b/src/main/jastadd/base/clauses/ExpressionParser.beaver @@ -6,22 +6,34 @@ package de.tudresden.inf.st.pnml.jastadd.parser; %terminals NOT; %terminals LP; %terminals RP; -%terminals VARIABLE; -%typeof goal = "conjunctions"; -%typeof conjunction = "Conjunction"; +%terminals IDENTIFIER; +%typeof goal = "disjunctions"; +%typeof disjunction = "Disjunction"; +%typeof disjunction_list = "JastAddList"; +%typeof literal_list = "JastAddList"; +%typeof literal = "Literal"; %goal goal; goal = - conjunction.conjunction {: return new Symbol(new InputSignalClause(conjunction)); :} + disjunction_list.dl {: return new Symbol(new InputSignalClause(dl)); :} ; -exp = - exp.a AND.AND exp.b {: return new Symbol(new AndExp(a, b)); :} - | exp.a OR.OR exp.b {: return new Symbol(new OrExp(a, b)); :} +disjunction_list = + {: return new Symbol(new JastAddList<Disjunction>()); :} + | disjunction.d {: return new Symbol(new JastAddList<Disjunction>().add(d)); :} + | disjunction.d AND disjunction_list.dl {: return new Symbol(dl.add(d)); :} + ; - | NOT.NOT exp.exp {: return new Symbol(new NotExp(exp)); :} +disjunction = + LP literal_list.ll RP {: return new Symbol(new Disjunction(ll)); :} + ; - | NOT.NOT Literal.Literal {: return new Symbol(new NegativeLiteral(((String)v.value))); :} +literal_list = + literal.l {: return new Symbol(new JastAddList<Literal>().add(l)); :} + | literal.l OR literal_list.ll {: return new Symbol(ll.add(l)); :} + ; - | Literal.Literal {: return new Symbol(new PositiveLiteral(((String)v.value))); :} +literal = + NOT IDENTIFIER.literal {: return new Symbol(new NegativeLiteral(((String)literal.value))); :} + | IDENTIFIER.literal {: return new Symbol(new PositiveLiteral(((String)literal.value))); :} ; diff --git a/src/main/jastadd/base/clauses/expressions.flex b/src/main/jastadd/base/clauses/expressions.flex index 32db549283eb6be57e00adf9941dcbdce5fd028e..ea1d74b9534b98effb072a87f825eeab0a47efdd 100644 --- a/src/main/jastadd/base/clauses/expressions.flex +++ b/src/main/jastadd/base/clauses/expressions.flex @@ -37,5 +37,8 @@ Variable = [:jletter:][:jletterdigit:]* "NOT" { return sym(Terminals.NOT); } "(" { return sym(Terminals.LP); } ")" { return sym(Terminals.RP); } -{Variable} { return sym(Terminals.VARIABLE); } +{Variable} { return sym(Terminals.IDENTIFIER); } <<EOF>> { return sym(Terminals.EOF); } + +/* error fallback */ +[^] { throw new Error("Illegal character '"+ yytext() +"' at line " + (yyline+1) + " column " + (yycolumn+1)); } \ No newline at end of file diff --git a/src/main/jastadd/base/clauses/expressions.jadd b/src/main/jastadd/base/clauses/expressions.jadd index 635601127cae1688ac6a9ab986f33393693ba6cb..0f1967fca191b3c50ec569d7b5240f933737e799 100644 --- a/src/main/jastadd/base/clauses/expressions.jadd +++ b/src/main/jastadd/base/clauses/expressions.jadd @@ -2,28 +2,67 @@ import de.tudresden.inf.st.pnml.base.data.ClauseValuesDefinition; aspect SignalExpressions { - syn String ASTNode.printExp(); - syn boolean Exp.eval(ClauseValuesDefinition defs); + syn boolean Literal.isPositiveLiteral() = false; + eq PositiveLiteral.isPositiveLiteral() = true; - eq ASTNode.printExp() = ""; + syn boolean Literal.isNegativeLiteral() = false; + eq NegativeLiteral.isNegativeLiteral() = true; + + syn String ASTNode.printClause(); + eq ASTNode.printClause() = ""; + eq Literal.printClause() = getName(); + + eq InputSignalClause.printClause() { - eq InputSignalClause.printExp() { String result = ""; + if(getDisjunctionList() != null){ + + int j = 0; + for(Disjunction dj : getDisjunctionList()){ + + int i = 0; + for(Literal l : dj.getLiteralList()){ + result += "("; + if(i < dj.getNumLiteral()){ + result += l.printClause() + " OR "; + } else { + result += l.printClause(); + } + + result += ")"; + i++; + } - if(getExp() != null){ - result+=getExp().printExp(); + if(j < getNumDisjunction()){ + result += " AND "; + } + j++; + } } return result; } - eq AndExp.printExp() = getA().printExp() + " AND " + getB().printExp(); - eq OrExp.printExp() = getA().printExp() + " OR " + getB().printExp(); - eq Var.printExp() = getName(); - eq NotExp.printExp() = "NOT " + getExp().printExp(); + syn boolean ASTNode.evalClause(ClauseValuesDefinition defs); + eq ASTNode.evalClause(ClauseValuesDefinition defs) = false; - eq AndExp.eval(ClauseValuesDefinition defs) = getA().eval(defs) && getB().eval(defs); - eq OrExp.eval(ClauseValuesDefinition defs) = getA().eval(defs) || getB().eval(defs); - eq Var.eval(ClauseValuesDefinition defs) = defs.getDef(this.getName()); - eq NotExp.eval(ClauseValuesDefinition defs) = !getExp().eval(defs); + eq PositiveLiteral.evalClause(ClauseValuesDefinition defs) = defs.getDef(this.getName()); + eq NegativeLiteral.evalClause(ClauseValuesDefinition defs) = !defs.getDef(this.getName()); + eq Disjunction.evalClause(ClauseValuesDefinition defs) { + for(Literal l : getLiteralList()){ + if(l.evalClause(defs) == true){ + return true; + } + } + return false; + } + + eq InputSignalClause.evalClause(ClauseValuesDefinition defs) { + for(Disjunction dj : getDisjunctionList()){ + if(dj.evalClause(defs) == false){ + return false; + } + } + return true; + } } \ No newline at end of file diff --git a/src/main/jastadd/base/clauses/expressions.relast b/src/main/jastadd/base/clauses/expressions.relast index a1aa39b640f7d746c35723804d4d18e8ff81cb95..4597a2c17ffe1be2c30cf5a8e60425e1b06e0e89 100644 --- a/src/main/jastadd/base/clauses/expressions.relast +++ b/src/main/jastadd/base/clauses/expressions.relast @@ -1,8 +1,6 @@ -InputSignalClause ::= Conjuction:Conjunction; - -Conjunction ::= Disjunction:Disjunction* ; +InputSignalClause ::= Disjunction:Disjunction* ; Disjunction ::= Literal:Literal*; abstract Literal ::= <Name:String>; PositiveLiteral : Literal; -NegativeLiteral : Literal; \ No newline at end of file +NegativeLiteral : Literal; diff --git a/src/main/java/de/tudresden/inf/st/pnml/base/Main.java b/src/main/java/de/tudresden/inf/st/pnml/base/Main.java index 23cccf20c741542b4804494ba33f503e1a382670..51b7f38b9ed237894138fdeb5ef6011c577cd45d 100644 --- a/src/main/java/de/tudresden/inf/st/pnml/base/Main.java +++ b/src/main/java/de/tudresden/inf/st/pnml/base/Main.java @@ -5,7 +5,5 @@ public class Main { public static void main(String[] args) { // Nothing to do here - - // TODO: update clauses } }