Grammar StitchParser
ANTLR-generated HTML file from C:\eclipse\data\rainbow\org.sa.rainbow.lang\src\org\sa\rainbow\stitch\parser/stitchP.g

Terence Parr, MageLang Institute
ANTLR Version 2.7.6 (2005-12-22); 1989-2005


Definition of parser StitchParser, which is a subclass of LLkParser.


script
	:	MODULE IDENTIFIER SEMICOLON imports functions tactics strategies EOF 
	;


imports
	:	( importSt )* 
	;


functions
	:	( function )* 
	;


tactics
	:	( tactic )* 
	;


strategies
	:	( strategy )* 
	;


importSt
	:	IMPORT 
		(	LIB 
		|	MODEL 
		|	OP 
		) 
		STRING_LIT 
		(	importRenameClause 
		|	
		) 
		SEMICOLON 
	;


importRenameClause
	:	LBRACE importRenamePhrase ( COMMA importRenamePhrase )* RBRACE 
	;


importRenamePhrase
	:	IDENTIFIER AS IDENTIFIER 
	;


function
	:	DEFINE declaration SEMICOLON 
	;


declaration
	:	dataType varDefinition 
	;


tactic
	:	TACTIC signature LBRACE tacticBody RBRACE 
	;


signature
	:	IDENTIFIER LPAREN parameterList RPAREN 
	;


tacticBody
	:	tacticVars tacticConditionBlock tacticActionBlock tacticEffectBlock 
	;


tacticVars
	:	( declaration SEMICOLON )* 
	;


tacticConditionBlock
	:	CONDITION LBRACE ( expression SEMICOLON )* RBRACE 
	;


tacticActionBlock
	:	ACTION LBRACE ( statement )* RBRACE 
	;


tacticEffectBlock
	:	EFFECT LBRACE ( expression SEMICOLON )* RBRACE 
	;


expression
	:	assignmentExpression 
	;


statement
	:	(	compoundStatement 
		|	declaration SEMICOLON 
		|	expression SEMICOLON 
		|	ifThenElseStatement 
		|	ifThenStatement 
		|	forStatement 
		|	whileStatement 
		|	SEMICOLON 
		) 
	;


strategy
	:	STRATEGY IDENTIFIER LBRACKET expression RBRACKET LBRACE strategyBody RBRACE 
	;


strategyBody
	:	functions ( strategyExpr )* 
	;


strategyExpr
	:	IDENTIFIER COLON strategyCond IMPLIES strategyOutcome 
	;


strategyCond
	:	LPAREN 
		(	strategyProbExpr 
		|	
		) 
		(	expression 
		|	SUCCESS 
		|	FAILURE 
		|	DEFAULT 
		) 
		RPAREN 
	;


strategyOutcome
	:	strategyClosedOutcome SEMICOLON 
	|	strategyOpenOutcome 
		(	strategyTimingExpr 
		|	
		) 
		(	BAR DONE SEMICOLON 
		|	strategyBranchOutcome 
		) 
	;


strategyProbExpr
	:	HASH LBRACKET strategyProbValue RBRACKET 
	;


strategyClosedOutcome
	:	DONE 
	|	NULLTACTIC 
	|	DO LBRACKET 
		(	IDENTIFIER 
		|	INTEGER_LIT 
		|	
		) 
		RBRACKET IDENTIFIER 
	;


strategyOpenOutcome
	:	IDENTIFIER LPAREN argList RPAREN 
	;


strategyTimingExpr
	:	AT LBRACKET strategyTimingValue RBRACKET 
	;


strategyBranchOutcome
	:	LBRACE ( strategyExpr )+ RBRACE 
	;


argList
	:	(	expressionList 
		|	
		) 
	;


strategyProbValue
	:	FLOAT_LIT 
	|	IDENTIFIER 
		(	LBRACE IDENTIFIER RBRACE 
		|	
		) 
	;


strategyTimingValue
	:	expression 
	;


compoundStatement
	:	LBRACE ( statement )* RBRACE 
		(	errorBlock 
		|	
		) 
	;


ifThenElseStatement
	:	IF LPAREN expression RPAREN statement ELSE statement 
	;


ifThenStatement
	:	IF LPAREN expression RPAREN statement 
	;


forStatement
	:	FOR LPAREN 
		(	traditionalForClause 
		|	forEachClause 
		) 
		RPAREN statement 
	;


whileStatement
	:	WHILE LPAREN expression RPAREN statement 
	;


errorBlock
	:	ERROR LBRACE ( LPAREN expression RPAREN statement )* RBRACE 
	;


dataType
	:	(	OBJECT 
		|	INT 
		|	FLOAT 
		|	BOOLEAN 
		|	CHAR 
		|	STRING 
		|	SET 
			(	LBRACE dataType RBRACE 
			|	
			) 
		|	SEQUENCE 
			(	LT dataType GT 
			|	
			) 
		|	RECORD 
			(	LBRACKET ( IDENTIFIER ( COMMA IDENTIFIER )* 
					(	COLON dataType 
					|	
					) 
					SEMICOLON )* RBRACKET 
			|	
			) 
		|	ENUM 
			(	LBRACE 
				(	IDENTIFIER ( COMMA IDENTIFIER )* 
				|	
				) 
				RBRACE 
			|	
			) 
		|	IDENTIFIER 
		) 
		
	;


varDefinition
	:	varDeclarator ( COMMA varDeclarator )* 
	;


varDeclarator
	:	IDENTIFIER varInitializer 
	;


varInitializer
	:	(	ASSIGN initializer 
		|	
		) 
	;


initializer
	:	expression 
	;


forInit
	:	(	declaration 
		|	expressionList 
		|	
		) 
		
	;


traditionalForClause
	:	forInit SEMICOLON forCond SEMICOLON forIter 
	;


forEachClause
	:	parameterDeclaration COLON expression 
	;


forCond
	:	(	expression 
		|	
		) 
		
	;


forIter
	:	(	expressionList 
		|	
		) 
		
	;


expressionList
	:	expression ( COMMA expression )* 
	;


parameterDeclaration
	:	dataType IDENTIFIER 
	;


assignmentExpression
	:	booleanExpression 
		(	(	ASSIGN 
			|	PLUS_ASSIGN 
			|	MINUS_ASSIGN 
			|	STAR_ASSIGN 
			|	DIV_ASSIGN 
			|	MOD_ASSIGN 
			) 
			assignmentExpression 
		|	
		) 
	;


booleanExpression
	:	quantifiedExpression 
	|	impliesExpression 
	;


quantifiedExpression
	:	(	FORALL 
		|	EXISTS 
			(	UNIQUE 
			|	
			) 
		) 
		quantifierDeclaration IN 
		(	setExpression 
		|	identifierPrimary 
		) 
		BAR booleanExpression 
	;


impliesExpression
	:	iffExpression 
		(	IMPLIES impliesExpression 
		|	
		) 
	;


quantifierDeclaration
	:	IDENTIFIER ( COMMA IDENTIFIER )* COLON dataType 
	;


setExpression
	:	setConstructor 
	|	literalSet 
	;


identifierPrimary
	:	IDENTIFIER 
		(	LPAREN argList RPAREN 
		|	
		) 
	;


iffExpression
	:	logicalOrExpression 
		(	IFF iffExpression 
		|	
		) 
	;


logicalOrExpression
	:	logicalAndExpression ( LOGICAL_OR logicalAndExpression )* 
	;


logicalAndExpression
	:	equalityExpression ( LOGICAL_AND equalityExpression )* 
	;


equalityExpression
	:	relationalExpression ( (	NE 
			|	EQ 
			) 
			relationalExpression )* 
	;


relationalExpression
	:	additiveExpression ( (	LT 
			|	LE 
			|	GE 
			|	GT 
			) 
			additiveExpression )* 
	;


additiveExpression
	:	multiplicativeExpression ( (	PLUS 
			|	MINUS 
			) 
			multiplicativeExpression )* 
	;


multiplicativeExpression
	:	unaryExpression ( (	STAR 
			|	SLASH 
			|	MOD 
			) 
			unaryExpression )* 
	;


unaryExpression
	:	INCR unaryExpression 
	|	DECR unaryExpression 
	|	MINUS unaryExpression 
	|	PLUS unaryExpression 
	|	unaryExpressionNotPlusMinus 
	;


unaryExpressionNotPlusMinus
	:	LOGICAL_NOT unaryExpression 
	|	postfixExpression 
	;


postfixExpression
	:	primaryExpression 
		(	INCR 
		|	DECR 
		|	
		) 
	;


primaryExpression
	:	identifierPrimary 
	|	setExpression 
	|	constant 
	|	LPAREN assignmentExpression RPAREN 
	;


constant
	:	INTEGER_LIT 
	|	FLOAT_LIT 
	|	STRING_LIT 
	|	CHAR_LIT 
	|	TRUE 
	|	FALSE 
	|	NULL 
	;


setConstructor
	:	LBRACE SELECT quantifierDeclaration IN 
		(	setExpression 
		|	identifierPrimary 
		) 
		BAR booleanExpression RBRACE 
	;


literalSet
	:	LBRACE 
		(	(	identifierPrimary 
			|	constant 
			) 
			( COMMA 
				(	identifierPrimary 
				|	constant 
				) )* 
		|	
		) 
		RBRACE 
	;


parameterList
	:	(	parameterDeclaration ( COMMA parameterDeclaration )* 
		|	
		) 
		
	;