/////////////////////////////
// CondBean parser syntax //
////////////////////////////

		
conditionalBean ::= expression
	;
	
expression ::= assignmentExpression
	;
	
assignmentExpression ::= conditionalExpression
	;
	
conditionalExpression ::= logicalOrExpression
	;

logicalOrExpression ::= 
		logicalAndExpression 
	|	logicalOrExpression orOperator logicalAndExpression
	;

logicalAndExpression ::= 
		equalityExpression 
	|	logicalAndExpression andOperator equalityExpression
	;
	
equalityExpression ::=
		relationalExpression
	|	equalityExpression "==" relationalExpression
	|	equalityExpression "!=" relationalExpression
	;

relationalExpression ::=
		unaryExpression
	|	relationalExpression '<' unaryExpression
	|	relationalExpression '>' unaryExpression
	|	relationalExpression "<=" unaryExpression
	|	relationalExpression ">=" unaryExpression
	;
		
unaryExpression ::=
		'!' unaryExpression
	|	"${" qualifiedType '}'
	|	primaryExpression
	|	"isdef" '(' simpleType ')'
	;

primaryExpression ::=
		literal
	|	'(' expression ')'
	;


orOperator 	 ::=	"||" | "or" ;	
andOperator	 ::=	"&&" | "and" ;

token ::= 	qualifiedName ;
token ::=	simpleName;
token ::=	orOperator;
token ::=	andOperator;
token ::= 	chars;
token ::= 	altStringLiteral;	
	
literal ::=	
		numberType
	|	booleanType
	|	stringType
	;
	
simpleName ::=	Identifier
	;
qualifiedName ::=
		Identifier (dot Identifier)+
	;
	

	
Identifier   ::= `identifier`;


booleanType	::=	booleanLiteral ;
numberType	::= integerLiteral | floatingPointLiteral ;
stringType	::=	stringLiteral | altStringLiteral ;
qualifiedType ::= qualifiedName;
simpleType ::=	simpleName;

	
booleanLiteral        ::= "true" | "false" ;

integerLiteral        ::= `integer` ;
floatingPointLiteral  ::= `float` ;
stringLiteral         ::= `stringdef` ;
altStringLiteral	  ::=  quote chars quote ;

chars	::=		(`char` - "'")* ;

dot			::= '.' ;
quote		::= "'"	;

ignored ::= `whitespaces` ;