The lexer of our stochastic expressions parser is generated from the following lexer specification:
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
: ';'
;
mDEFINITION
: '='
;
mEQUAL
: "=="
;
mSQUARE_PAREN_L
: '['
;
mSQUARE_PAREN_R
: ']'
;
protected mDIGIT
: '0'..'9'
;
mNUMBER
: ( mDIGIT )+
( '.' ( mDIGIT )+
|
)
;
protected mALPHA
: 'a'..'z'
| 'A'..'Z'
;
mNOTEQUAL
: "<>"
;
mGREATER
: ">"
;
mLESS
: "<"
;
mGREATEREQUAL
: ">="
;
mLESSEQUAL
: "<="
;
mSTRING_LITERAL
: "\""
( mALPHA
| '_'
)+
"\""
;
mDOT
: '.'
;
mID
: ( mALPHA
| '_'
)+
;
mWS
: ( ' '
| '\t'
| '\r'
| '\n'
)
;
The parser of our stochastic expressions parser is generated from the following extended Bachus-Naur-Grammar:
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" LPAREN ( unit ) RPAREN SQUARE_PAREN_L ( numeric_int_sample )+ SQUARE_PAREN_R | "DoublePMF" LPAREN ( unit ) RPAREN SQUARE_PAREN_L ( numeric_real_sample )+ SQUARE_PAREN_R | "EnumPMF" LPAREN ( unit ) ( SEMI ORDERED_DEF | ) RPAREN SQUARE_PAREN_L ( stringsample )+ SQUARE_PAREN_R | "DoublePDF" LPAREN ( unit ) RPAREN SQUARE_PAREN_L ( real_pdf_sample )+ SQUARE_PAREN_R | "BoolPMF" LPAREN ( bool_unit ) ( SEMI ORDERED_DEF | ) RPAREN SQUARE_PAREN_L ( boolsample )+ SQUARE_PAREN_R ; boolean_keywords : ( "false" | "true" ) ; unit : "unit" DEFINITION STRING_LITERAL ; 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 ; bool_unit : "unit" EQUAL "\"bool\"" ; boolsample : LPAREN boolean_keywords SEMI NUMBER RPAREN ; characterisation_keywords : ( "BYTESIZE" | "STRUCTURE" | "NUMBER_OF_ELEMENTS" | "TYPE" | "VALUE" ) ;