|
|
|
@ -514,10 +514,10 @@ TOKEN : |
|
|
|
| < QMARK: "?" > |
|
|
|
| < CARET: "^" > |
|
|
|
// Accumulation |
|
|
|
| < ACCDIAPLUS: "<+>" > |
|
|
|
| < ACCDIAMINUS: "<->" > |
|
|
|
| < ACCBOXPLUS: "[+]" > |
|
|
|
| < ACCBOXMINUS: "[-]" > |
|
|
|
| < ACCDIAPLUS: "<+>"|"F+" > |
|
|
|
| < ACCDIAMINUS: "<->"|"F-" > |
|
|
|
| < ACCBOXPLUS: "[+]"|"G+" > |
|
|
|
| < ACCBOXMINUS: "[-]"|"G-" > |
|
|
|
| < ACCUNTIL: "U+" > |
|
|
|
// Regular expressions |
|
|
|
| < REG_INT: (["1"-"9"](["0"-"9"])*)|("0") > |
|
|
|
@ -1180,26 +1180,26 @@ Expression ExpressionTemporalBinary(boolean prop, boolean pathprop) : |
|
|
|
// Accumulation symbol |
|
|
|
<ACCUNTIL> { accexp = new ExpressionAccumulation(AccumulationSymbol.ACCUNTIL); accexp.setOperand1(ret); } |
|
|
|
// Regular expression, should be star-free |
|
|
|
<LPARENTH> |
|
|
|
<LBRACE> |
|
|
|
( |
|
|
|
( <REGEXP_MARKER> reg = ExpressionRegularUnary(prop, false) { accexp.setRegularExpression((ExpressionRegular)reg); } ) |
|
|
|
| ( bound = BoundExpression() { accexp.setBoundExpression(bound); } ) |
|
|
|
) |
|
|
|
<RPARENTH> |
|
|
|
<RBRACE> |
|
|
|
// Weight constraint |
|
|
|
<LPARENTH> |
|
|
|
<LBRACE> |
|
|
|
( |
|
|
|
constr = ExpressionAccumulationConstraint() |
|
|
|
{ accexp.setConstraint(constr); } |
|
|
|
) |
|
|
|
<RPARENTH> |
|
|
|
// Fire set (= !StutterSet) |
|
|
|
(<LPARENTH> |
|
|
|
<RBRACE> |
|
|
|
// Record set (= !StutterSet) |
|
|
|
(<LBRACE> |
|
|
|
( |
|
|
|
fireOn = ExpressionAccumulationFire() |
|
|
|
{ accexp.setFireOn(fireOn); } |
|
|
|
{ accexp.setRecordSet(fireOn); } |
|
|
|
) |
|
|
|
<RPARENTH>)? |
|
|
|
<RBRACE>)? |
|
|
|
ret = ExpressionTemporalUnary(prop, pathprop) |
|
|
|
{ accexp.setOperand2(ret); ret = accexp; } |
|
|
|
// END ACCUMULATION |
|
|
|
@ -1231,20 +1231,21 @@ Expression ExpressionTemporalUnary(boolean prop, boolean pathprop) : |
|
|
|
| |
|
|
|
ret = ExpressionITE(prop, pathprop) |
|
|
|
| |
|
|
|
ret = ExpressionAccumulationNullary(prop, pathprop) |
|
|
|
ret = ExpressionAccumulationUnary(prop, pathprop) |
|
|
|
) |
|
|
|
{ return ret; } |
|
|
|
} |
|
|
|
|
|
|
|
/* START |
|
|
|
Accumulation Specification */ |
|
|
|
ExpressionAccumulation ExpressionAccumulationNullary(boolean prop, boolean pathprop) : |
|
|
|
ExpressionAccumulation ExpressionAccumulationUnary(boolean prop, boolean pathprop) : |
|
|
|
{ |
|
|
|
ExpressionAccumulation ret; |
|
|
|
AccumulationConstraint constr; |
|
|
|
TemporalOperatorBound bound; |
|
|
|
Expression reg; |
|
|
|
ArrayList<Expression> fireOn; |
|
|
|
Expression tmp; |
|
|
|
} |
|
|
|
{ |
|
|
|
// Accumulation symbol |
|
|
|
@ -1255,26 +1256,30 @@ ExpressionAccumulation ExpressionAccumulationNullary(boolean prop, boolean pathp |
|
|
|
| ( <ACCBOXMINUS> { ret = new ExpressionAccumulation(AccumulationSymbol.ACCBOXMINUS); } ) |
|
|
|
) |
|
|
|
// Regular expression, should be star-free |
|
|
|
<LPARENTH> |
|
|
|
<LBRACE> |
|
|
|
( |
|
|
|
( <REGEXP_MARKER> reg = ExpressionRegularUnary(prop, false) { ret.setRegularExpression((ExpressionRegular)reg); } ) |
|
|
|
| ( bound = BoundExpression() { ret.setBoundExpression(bound); } ) |
|
|
|
) |
|
|
|
<RPARENTH> |
|
|
|
<RBRACE> |
|
|
|
// Weight constraint |
|
|
|
<LPARENTH> |
|
|
|
<LBRACE> |
|
|
|
( |
|
|
|
constr = ExpressionAccumulationConstraint() |
|
|
|
{ ret.setConstraint(constr); } |
|
|
|
) |
|
|
|
<RPARENTH> |
|
|
|
// Fire set (= !StutterSet) |
|
|
|
(<LPARENTH> |
|
|
|
<RBRACE> |
|
|
|
// Record set (= !StutterSet) |
|
|
|
(<LBRACE> |
|
|
|
( |
|
|
|
fireOn = ExpressionAccumulationFire() |
|
|
|
{ ret.setFireOn(fireOn); } |
|
|
|
{ ret.setRecordSet(fireOn); } |
|
|
|
) |
|
|
|
<RPARENTH>)? |
|
|
|
<RBRACE>)? |
|
|
|
( |
|
|
|
tmp = ExpressionTemporalUnary(prop, pathprop) |
|
|
|
{ ret.setOperand2(tmp); } |
|
|
|
)? |
|
|
|
{ return ret; } |
|
|
|
} |
|
|
|
|
|
|
|
|