next up previous contents index
Next: Concepts Up: Random Variables Previous: Visualisations   Contents   Index

Stochastic Expressions

We call the language in which functional random variables can be specified Stochastic Expressions. As said before, the specifications of this kind of expressions is based on mathematical operations like addition or multiplication. The complete grammar is given below.

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



Snowball 2007-03-16