Grammar vcParser
ANTLR-generated HTML file from /usr/src/packages/BUILD/v2/libAhirV2/grammar/vc.g

Terence Parr, MageLang Institute
ANTLR Version 2.7.7 (20220722); 1989-2005


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


vc_System
	:	(	( vc_Module ) 
		|	( vc_MemorySpace ) 
		|	( vc_Pipe ) 
		|	( vc_Wire_Declaration ) 
		|	( vc_SysAttributeSpec ) 
		|	( vc_SysBufferingSpec ) 
		)* 
	;


vc_Module
	:	(	( FOREIGN ) 
		|	( PIPELINE 
				(	DEPTH UINTEGER 
				|	
				) 
				(	BUFFERING UINTEGER 
				|	
				) 
				(	FULLRATE 
				|	
				) 
				(	DETERMINISTIC 
				|	
				) ) 
		|	
		) 
		(	( OPERATOR ) 
		|	( VOLATILE ) 
		|	
		) 
		MODULE vc_Label LBRACE 
		(	vc_Inargs 
		|	
		) 
		(	vc_Outargs 
		|	
		) 
		( vc_MemorySpace )* ( vc_Pipe )* 
		(	vc_Controlpath 
		|	
		) 
		(	vc_Datapath 
		|	
		) 
		( vc_Link )* ( vc_AttributeSpec )* RBRACE 
	;


vc_MemorySpace
	:	MEMORYSPACE 
		(	UNORDERED 
		|	
		) 
		vc_Label LBRACE vc_MemorySpaceParams ( vc_MemoryLocation )* ( vc_AttributeSpec )* RBRACE 
	;


vc_Pipe
	:	(	( LIFO ) 
		|	( NOBLOCK ) 
		|	
		) 
		(	SHIFTREG 
		|	
		) 
		PIPE vc_Label UINTEGER 
		(	DEPTH UINTEGER 
		|	
		) 
		(	IN 
		|	OUT 
		|	
		) 
		(	SIGNAL 
		|	
		) 
		(	P2P 
		|	
		) 
		(	FULLRATE 
		|	
		) 
		(	BYPASS 
		|	
		) 
		
	;


vc_Wire_Declaration
	:	(	( CONSTANT ) 
		|	( INTERMEDIATE ) 
		|	
		) 
		WIRE vc_Object_Declaration_Base 
	;


vc_SysAttributeSpec
	:	ATTRIBUTE 
		(	( MEMORYSPACE 
				(	vc_Identifier DIV_OP 
				|	
				) 
				vc_Identifier ) 
		|	( MODULE vc_Identifier ) 
		) 
		SIMPLE_IDENTIFIER IMPLIES QUOTED_STRING 
	;


vc_SysBufferingSpec
	:	BUFFERING SIMPLE_IDENTIFER 
		(	IN 
		|	( OUT ) 
		) 
		SIMPLE_IDENTIFIER SIMPLE_IDENTIFIER UINTEGER 
	;


vc_Label
	:	LBRACKET ( SIMPLE_IDENTIFIER ) RBRACKET 
	;


vc_MemorySpaceParams
	:	CAPACITY UINTEGER DATAWIDTH UINTEGER ADDRWIDTH UINTEGER MAXACCESSWIDTH UINTEGER 
	;


vc_MemoryLocation
	:	OBJECT vc_Label COLON vc_Type 
	;


vc_AttributeSpec
	:	ATTRIBUTE SIMPLE_IDENTIFIER IMPLIES QUOTED_STRING 
	;


vc_Type
	:	(	( vc_ScalarType ) 
		|	( vc_ArrayType ) 
		|	( vc_RecordType ) 
		) 
	;


vc_Inargs
	:	IN ( vc_Interface_Object_Declaration )* 
	;


vc_Outargs
	:	OUT ( vc_Interface_Object_Declaration )* 
	;


vc_Controlpath
	:	CONTROLPATH LBRACE 
		(	( vc_CPPipelinedForkBlock ( vc_CPPlace )* ( vc_CPBind )* ) 
		|	( ( vc_CPRegion )+ ( vc_AttributeSpec )* ) 
		|	
		) 
		RBRACE 
	;


vc_Datapath
	:	DATAPATH LBRACE 
		(	vc_Wire_Declaration 
		|	vc_Guarded_Operator_Instantiation 
		|	vc_Branch_Instantiation 
		|	vc_Phi_Instantiation 
		|	vc_PhiPipelined_Instantiation 
		|	vc_AttributeSpec 
		|	vc_ModuleBufferingSpec 
		|	vc_ModuleDelaySpec 
		|	vc_PipelineSpec 
		)* 
		RBRACE 
	;


vc_Link
	:	SIMPLE_IDENTIFIER EQUIVALENT LPAREN ( vc_Hierarchical_CP_Ref )+ RPAREN LPAREN 
		(	( vc_Hierarchical_CP_Ref ) 
		|	( OPEN ) 
		)+ 
		RPAREN 
	;


vc_Hierarchical_CP_Ref
	:	( vc_Identifier DIV_OP )* 
		(	( vc_Identifier ) 
		|	( ENTRY ) 
		|	( EXIT ) 
		) 
	;


vc_Identifier
	:	SIMPLE_IDENTIFIER 
	;


vc_CPPipelinedForkBlock
	:	PIPELINEDFORKBLOCK vc_Label LBRACE 
		(	( vc_CPRegion ) 
		|	( vc_CPFork ) 
		|	( vc_CPJoin ) 
		|	( vc_CPMarkedJoin ) 
		|	( vc_CPTransition ) 
		|	( vc_AttributeSpec ) 
		)* 
		RBRACE ( LPAREN ( vc_Identifier )* RPAREN ) ( LPAREN ( vc_Identifier )* RPAREN ) 
	;


vc_CPPlace
	:	PLACE vc_Label 
		(	LEFT_OPEN 
		|	
		) 
	;


vc_CPBind
	:	BIND SIMPLE_IDENTIFIER 
		(	( IMPLIES ) 
		|	( ULE_OP ) 
		) 
		SIMPLE_IDENTIFIER COLON SIMPLE_IDENTIFIER 
	;


vc_CPRegion
	:	vc_CPSeriesBlock 
	|	vc_CPParallelBlock 
	|	vc_CPBranchBlock 
	|	vc_CPForkBlock 
	;


vc_CPElement
	:	( vc_CPPlace ) 
	|	( vc_CPTransition ) 
	;


vc_CPTransition
	:	TRANSITION vc_Label 
		(	( DEAD ) 
		|	( TIED_HIGH ) 
		|	( LEFT_OPEN ) 
		|	( DELAY ) 
		|	
		) 
		
	;


vc_CPAlias
	:	ALIAS vc_Label vc_Label 
	;


vc_CPSeriesBlock
	:	SERIESBLOCK vc_Label LBRACE 
		(	( vc_CPElement ) 
		|	( vc_CPRegion ) 
		|	( vc_AttributeSpec ) 
		)* 
		RBRACE 
	;


vc_CPParallelBlock
	:	PARALLELBLOCK vc_Label LBRACE 
		(	vc_CPRegion 
		|	vc_CPTransition 
		|	( vc_AttributeSpec ) 
		)* 
		RBRACE 
	;


vc_CPBranchBlock
	:	BRANCHBLOCK vc_Label LBRACE 
		(	( vc_CPRegion ) 
		|	( vc_CPBranch ) 
		|	( vc_CPMerge ) 
		|	( vc_CPSimpleLoopBlock ) 
		|	( vc_CPPlace ) 
		|	( vc_AttributeSpec ) 
		)+ 
		RBRACE 
	;


vc_CPForkBlock
	:	FORKBLOCK vc_Label LBRACE 
		(	( vc_CPRegion ) 
		|	( vc_CPFork ) 
		|	( vc_CPJoin ) 
		|	( vc_CPTransition ) 
		|	( vc_AttributeSpec ) 
		)* 
		RBRACE 
	;


vc_CPBranch
	:	vc_Identifier BRANCH LPAREN 
		(	EXIT 
		|	
		) 
		( vc_Identifier )* RPAREN 
	;


vc_CPMerge
	:	vc_Identifier MERGE LPAREN 
		(	ENTRY 
		|	
		) 
		( vc_Identifier )* RPAREN 
	;


vc_CPSimpleLoopBlock
	:	LOOPBLOCK vc_Label DEPTH UINTEGER BUFFERING UINTEGER 
		(	FULLRATE 
		|	
		) 
		LBRACE ( vc_CPPlace )* vc_CPPipelinedLoopBody ( vc_CPSeriesBlock )+ ( vc_CPMerge )+ ( vc_CPBranch )+ ( vc_CPBind )* vc_CPLoopTerminate RBRACE 
	;


vc_CPPipelinedLoopBody
	:	PIPELINE vc_Label LBRACE 
		(	( vc_CPRegion ) 
		|	( vc_CPFork ) 
		|	( vc_CPJoin ) 
		|	( vc_CPMarkedJoin ) 
		|	( vc_CPTransition ) 
		|	( vc_CPPhiSequencer ) 
		|	( vc_CPTransitionMerge ) 
		|	( vc_CPAlias ) 
		|	( vc_AttributeSpec ) 
		)* 
		RBRACE ( LPAREN ( vc_Identifier )* RPAREN ) ( LPAREN ( vc_Identifier )* RPAREN ) 
	;


vc_CPLoopTerminate
	:	TERMINATE LPAREN vc_Identifier vc_Identifier vc_Identifier RPAREN LPAREN vc_Identifier vc_Identifier RPAREN 
	;


vc_CPPhiSequencer
	:	PHISEQUENCER vc_Label COLON ( vc_Identifier vc_Identifier vc_Identifier vc_Identifier vc_Identifier )+ COLON ( vc_Identifier vc_Identifier vc_Identifier vc_Identifier ) COLON ( vc_Identifier )+ COLON vc_Identifier 
	;


vc_CPTransitionMerge
	:	TRANSITIONMERGE vc_Label LPAREN ( vc_Identifier )+ RPAREN LPAREN vc_Identifier RPAREN 
	;


vc_CPFork
	:	(	( vc_Identifier ) 
		|	( ENTRY ) 
		|	( N_ULL ) 
		) 
		FORK LPAREN 
		(	EXIT 
		|	
		) 
		(	N_ULL 
		|	
		) 
		( vc_Identifier )* RPAREN 
	;


vc_CPJoin
	:	(	( vc_Identifier ) 
		|	( EXIT ) 
		|	( ENTRY ) 
		|	( N_ULL ) 
		) 
		JOIN LPAREN 
		(	ENTRY 
		|	
		) 
		( vc_Identifier )* RPAREN 
	;


vc_CPMarkedJoin
	:	(	( vc_Identifier ) 
		|	( ENTRY ) 
		|	( N_ULL ) 
		) 
		MARKEDJOIN LPAREN 
		(	ENTRY UINTEGER 
		|	
		) 
		( vc_Identifier UINTEGER )* RPAREN 
	;


vc_Guarded_Operator_Instantiation
	:	(	vc_Operator_Instantiation 
		|	vc_Call_Instantiation 
		|	vc_IOPort_Instantiation 
		|	vc_LoadStore_Instantiation 
		) 
		(	GUARD LPAREN 
			(	NOT_OP 
			|	
			) 
			vc_Wire_Connection RPAREN 
		|	
		) 
		
		(	FLOWTHROUGH 
		|	
		) 
		(	FULLRATE 
		|	
		) 
	;


vc_Branch_Instantiation
	:	BRANCH_OP vc_Label LPAREN ( vc_Identifier )+ RPAREN 
		(	FLOWTHROUGH 
		|	
		) 
		
	;


vc_Phi_Instantiation
	:	PHI vc_Label LPAREN ( vc_Identifier )+ RPAREN LPAREN vc_Identifier RPAREN 
		(	FULLRATE 
		|	
		) 
	;


vc_PhiPipelined_Instantiation
	:	HASH PHI vc_Label LPAREN ( vc_Identifier )+ RPAREN LPAREN vc_Identifier RPAREN 
		(	FULLRATE 
		|	
		) 
	;


vc_ModuleBufferingSpec
	:	BUFFERING 
		(	IN 
		|	( OUT ) 
		) 
		SIMPLE_IDENTIFIER SIMPLE_IDENTIFIER UINTEGER 
	;


vc_ModuleDelaySpec
	:	DELAY SIMPLE_IDENTIFIER UINTEGER 
	;


vc_PipelineSpec
	:	PIPELINE SIMPLE_IDENTIFIER LPAREN ( SIMPLE_IDENTIFIER )+ RPAREN 
	;


vc_Wire_Connection
	:	(	WAR 
		|	
		) 
		vc_Identifier 
	;


vc_Operator_Instantiation
	:	(	vc_BinaryOperator_Instantiation 
		|	vc_UnaryOperator_Instantiation 
		|	vc_Select_Instantiation 
		|	vc_Slice_Instantiation 
		|	vc_Register_Instantiation 
		|	vc_Equivalence_Instantiation 
		|	vc_Bitmap_Instantiation 
		|	vc_InterlockBuffer_Instantiation 
		) 
	;


vc_Call_Instantiation
	:	CALL 
		(	INLINE 
		|	
		) 
		vc_Label MODULE vc_Identifier LPAREN ( vc_Wire_Connection )* RPAREN LPAREN ( vc_Identifier )* RPAREN 
	;


vc_IOPort_Instantiation
	:	IOPORT 
		(	( IN ) 
		|	OUT 
		) 
		vc_Label LPAREN vc_Identifier RPAREN LPAREN vc_Identifier RPAREN 
	;


vc_LoadStore_Instantiation
	:	vc_Load_Instantiation 
	|	vc_Store_Instantiation 
	;


vc_BinaryOperator_Instantiation
	:	(	( PLUS_OP ) 
		|	( MINUS_OP ) 
		|	( MUL_OP ) 
		|	( DIV_OP ) 
		|	( SHL_OP ) 
		|	( SHR_OP ) 
		|	( ROL_OP ) 
		|	( ROR_OP ) 
		|	( UGT_OP ) 
		|	( UGE_OP ) 
		|	( EQ_OP ) 
		|	( ULT_OP ) 
		|	( ULE_OP ) 
		|	( NEQ_OP ) 
		|	( BITSEL_OP ) 
		|	( CONCAT_OP ) 
		|	( UNORDERED_OP ) 
		|	( OR_OP ) 
		|	( AND_OP ) 
		|	( XOR_OP ) 
		|	( NOR_OP ) 
		|	( NAND_OP ) 
		|	( XNOR_OP ) 
		|	( SHRA_OP ) 
		|	( SGT_OP ) 
		|	( SGE_OP ) 
		|	( SLT_OP ) 
		|	( SLE_OP ) 
		) 
		vc_Label LPAREN vc_Wire_Connection vc_Wire_Connection RPAREN LPAREN vc_Identifier RPAREN 
	;


vc_UnaryOperator_Instantiation
	:	(	( NOT_OP ) 
		|	( StoS_ASSIGN_OP ) 
		|	( StoU_ASSIGN_OP ) 
		|	( UtoS_ASSIGN_OP ) 
		|	( FtoS_ASSIGN_OP ) 
		|	( FtoU_ASSIGN_OP ) 
		|	( StoF_ASSIGN_OP ) 
		|	( UtoF_ASSIGN_OP ) 
		|	( FtoF_ASSIGN_OP ) 
		|	( DECODE_OP ) 
		|	( ENCODE_OP ) 
		|	( P_ENCODE_OP ) 
		|	( BITREDUCE_OR_OP ) 
		|	( BITREDUCE_AND_OP ) 
		|	( BITREDUCE_XOR_OP ) 
		|	
		) 
		vc_Label LPAREN vc_Wire_Connection RPAREN LPAREN vc_Identifier RPAREN 
	;


vc_Select_Instantiation
	:	SELECT_OP vc_Label LPAREN vc_Wire_Connection vc_Wire_Connection vc_Wire_Connection RPAREN LPAREN vc_Identifier RPAREN 
	;


vc_Slice_Instantiation
	:	SLICE_OP vc_Label LPAREN vc_Wire_Connection UINTEGER UINTEGER RPAREN LPAREN vc_Identifier RPAREN 
	;


vc_Register_Instantiation
	:	ASSIGN_OP vc_Label LPAREN vc_Wire_Connection RPAREN LPAREN vc_Identifier RPAREN 
	;


vc_Equivalence_Instantiation
	:	EQUIVALENCE_OP vc_Label LPAREN ( vc_Wire_Connection )+ RPAREN LPAREN ( vc_Identifier )+ RPAREN 
	;


vc_Bitmap_Instantiation
	:	PERMUTE_OP vc_Label LPAREN vc_Wire_Connection ( UINTEGER UINTEGER )+ RPAREN LPAREN vc_Identifier RPAREN 
	;


vc_InterlockBuffer_Instantiation
	:	HASH ASSIGN_OP vc_Label LPAREN vc_Wire_Connection RPAREN LPAREN vc_Identifier RPAREN 
	;


vc_Load_Instantiation
	:	LOAD vc_Label FROM 
		(	vc_Identifier DIV_OP 
		|	
		) 
		vc_Identifier LPAREN vc_Identifier RPAREN LPAREN vc_Identifier RPAREN 
	;


vc_Store_Instantiation
	:	STORE vc_Label TO 
		(	vc_Identifier DIV_OP 
		|	
		) 
		vc_Identifier LPAREN vc_Identifier vc_Identifier RPAREN 
	;


vc_Interface_Object_Declaration
	:	SIMPLE_IDENTIFIER COLON vc_Type 
		(	ASSIGN_OP vc_Value 
		|	
		) 
		
	;


vc_Value
	:	( (	( BINARYSTRING ) 
			|	( HEXSTRING ) 
			) 
			) 
	|	( LPAREN vc_Value ( COMMA vc_Value )* RPAREN ) 
	;


vc_Object_Declaration_Base
	:	vc_Label COLON vc_Type 
		(	ASSIGN_OP vc_Value 
		|	
		) 
		
	;


vc_ScalarType
	:	( vc_IntType ) 
	|	( vc_FloatType ) 
	|	( vc_PointerType ) 
	;


vc_ArrayType
	:	ARRAY LBRACKET UINTEGER RBRACKET OF vc_Type 
	;


vc_RecordType
	:	RECORD ( ULT_OP ( vc_Type ) UGT_OP )+ 
	;


vc_IntType
	:	INT ULT_OP UINTEGER UGT_OP 
	;


vc_FloatType
	:	FLOAT ULT_OP UINTEGER COMMA UINTEGER UGT_OP 
	;


vc_PointerType
	:	POINTER ULT_OP 
		(	SIMPLE_IDENTIFIER DIV_OP 
		|	
		) 
		SIMPLE_IDENTIFIER UGT_OP 
	;