When modelling with the Palladio Component Model, you can use stochastical expression to specify
Stochastical Expressions can include
DoublePDF[(1.0;0.3)(1.5;0.2)(2.0;0.5)] |
|
IntPMF[(27;0.1)(28;0.2)(29;0.6)(30;0.1)] |
|
DoublePMF[(22.3;0.4)(24.8;0.6)] |
|
EnumPMF[("circle";0.2) ("rectangle";0.3)("triangle";0.5)] |
|
BoolPMF[(false;0.3)(true;0.7)] |
|
23 |
|
42.5 |
|
"Hello World!" |
|
number.VALUE |
|
graphic.TYPE |
|
file.BYTESIZE |
|
array.NUMBER_OF_ELEMENTS |
|
set.STRUCTURE |
|
2+4, 34.3-1, 88.2*1.2, 14/2, 60%12 number.VALUE * 15, file.BYTESIZE / 2 |
|
DoublePDF[(1.0;0.3)(1.5;0.2)(2.0;0.5)] * 15 IntPMF[(1124.0;0.3)(1125.5;0.7)] + 2.5 DoublePDF[(12.0;0.9)(15;0.1)] - DoublePDF[(128.0;0.3)(256;0.2)(512.0;0.5)] |
|
number.VALUE < 20, foo.NUMBER_OF_ELEMENT == 12, blah.VALUE >= 108.3 AND fasel.TYPE == "mytype" |
|
expression : compareExpr;
compareExpr : sumExpr( ( GREATER | LESS | EQUAL | NOTEQUAL | GREATEREQUAL | LESSEQUAL) sumExpr | );
sumExpr : prodExpr ( ( PLUS | MINUS ) prodExpr )*;
prodExpr : powExpr ( ( MUL | DIV | MOD ) powExpr )*;
powExpr : atom( POW atom|);
atom: ( NUMBER | scoped_id | definition | STRING_LITERAL | boolean_keywords | LPAREN compareExpr RPAREN);
scoped_id : ID ( DOT ( ID | "INNER") )*;
definition : "IntPMF" SQUARE_PAREN_L ( numeric_int_sample )+ SQUARE_PAREN_R
| "DoublePMF" SQUARE_PAREN_L ( numeric_real_sample )+ SQUARE_PAREN_R
| "EnumPMF" SQUARE_PAREN_L ( stringsample )+ SQUARE_PAREN_R
| "DoublePDF" SQUARE_PAREN_L( real_pdf_sample )+ SQUARE_PAREN_R
| "BoolPMF" SQUARE_PAREN_L ( boolsample )+
SQUARE_PAREN_R;
boolean_keywords: ( "false"| "true");
numeric_int_sample: LPAREN NUMBER SEMI NUMBER RPAREN;
numeric_real_sample: LPAREN NUMBER SEMI NUMBER RPAREN;
stringsample: LPAREN STRING_LITERAL SEMI NUMBER RPAREN;
real_pdf_sample: LPAREN NUMBER SEMI NUMBER RPAREN;
boolsample: LPAREN boolean_keywords SEMI NUMBER RPAREN;
characterisation_keywords: ( "BYTESIZE" | "STRUCTURE" | "NUMBER_OF_ELEMENTS" | TYPE" | "VALUE");
mPLUS | mMINUS | mMUL | mDIV | mMOD | mPOW | mLPAREN | mRPAREN | mSEMI | mDEFINITION | mEQUAL | mSQUARE_PAREN_L | mSQUARE_PAREN_R | mNUMBER | mNOTEQUAL | mGREATER | mLESS | mGREATEREQUAL | mLESSEQUAL | mSTRING_LITERAL | mDOT | mID | mWS
mPLUS:’+’; mMINUS:’-’; mMUL:’*’; mDIV:’/’; mMOD:’%’; mPOW:’ˆ’; mLPAREN:’(’; mRPAREN:’)’; mSEMI:’;’; DEFINITION:’=’; mEQUAL:"=="; mSQUARE_PAREN_L:’[’; mSQUARE_PAREN_R:’]’;
mDIGIT:’0’..’9’;
mNUMBER: ( mDIGIT )+( ’.’ ( mDIGIT )+ | );
mALPHA: ’a’..’z’| ’A’..’Z’;
mNOTEQUAL:"<>"; mGREATER:">"; mLESS:"<"; mGREATEREQUAL:">="; mLESSEQUAL:"<=";
mSTRING_LITERAL:"\""( mALPHA | ’_’ )+ "\"";
mDOT: ’.’;
mID:( mALPHA | ’_’)+; // variable ids
mWS: ( ’ ’| ’\t’| ’\r’| ’\n’); // whitespace