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" ) ;