Grammar hierSysParser
ANTLR-generated HTML file from /usr/src/packages/BUILD/v2/HierSysBuild/grammar/hierSys.g

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


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


sys_Description
	:	( aA_Integer_Parameter_Declaration )* ( hier_system_Pipe_Declaration )* ( hier_System )* 
	;


aA_Integer_Parameter_Declaration
	:	PARAMETER SIMPLE_IDENTIFIER aA_Integer_Parameter_Expression 
	;


hier_system_Pipe_Declaration
	:	(	( LIFO ) 
		|	( NOBLOCK ) 
		|	( SHIFTREG ) 
		|	
		) 
		PIPE ( SIMPLE_IDENTIFIER )+ COLON UINT LESS UINTEGER GREATER 
		(	DEPTH aA_Integer_Parameter_Expression 
		|	
		) 
		(	SIGNAL 
		|	
		) 
		(	P2P 
		|	
		) 
		(	BYPASS 
		|	
		) 
		
	;


hier_System
	:	( SYSTEM SIMPLE_IDENTIFIER 
			(	LIBRARY SIMPLE_IDENTIFIER 
			|	
			) 
			) IN ( hier_system_Pipe_Base )* OUT ( hier_system_Pipe_Base )* LBRACE ( hier_system_Pipe_Base )* 
		(	( hier_System_Instance ) 
		|	( rtl_Thread ) 
		|	( rtl_String ) 
		)* 
		RBRACE 
	;


hier_system_Pipe_Base
	:	(	NOBLOCK 
		|	
		) 
		(	( P2P ) 
		|	( SHIFTREG ) 
		|	
		) 
		(	BYPASS 
		|	
		) 
		(	PIPE 
		|	( SIGNAL ) 
		) 
		SIMPLE_IDENTIFIER 
		(	UINTEGER 
		|	
		) 
		(	DEPTH UINTEGER 
		|	
		) 
		
	;


hier_System_Instance
	:	INSTANCE SIMPLE_IDENTIFIER 
		(	SIMPLE_IDENTIFIER 
		|	
		) 
		COLON SIMPLE_IDENTIFIER ( SIMPLE_IDENTIFIER IMPLIES SIMPLE_IDENTIFIER )* 
	;


rtl_Thread
	:	THREAD SIMPLE_IDENTIFIER ( rtl_ObjectDeclaration )* rtl_DefaultStatementBlock ( rtl_LabeledBlockStatement )+ rtl_ImmediateStatementBlock rtl_TickStatementBlock 
	;


rtl_String
	:	STRING SIMPLE_IDENTIFIER COLON SIMPLE_IDENTIFIER ( SIMPLE_IDENTIFIER IMPLIES SIMPLE_IDENTIFIER )* 
	;


aA_Integer_Parameter_Expression
	:	( UINTEGER ) 
	|	( HEXCSTYLEINTEGER ) 
	|	( SIMPLE_IDENTIFIER ) 
	|	( aA_Integer_Parameter_Expression_Nontrivial ) 
	;


rtl_ObjectDeclaration
	:	(	( VARIABLE ) 
		|	( CONSTANT ) 
		|	( SIGNAL ) 
		|	( IN 
				(	PIPE 
				|	
				) 
				) 
		|	( OUT 
				(	PIPE 
				|	
				) 
				) 
		) 
		( SIMPLE_IDENTIFIER )+ COLON ( rtl_Type_Declaration ) 
		(	ASSIGNEQUAL rtl_Expression 
		|	
		) 
		
	;


rtl_DefaultStatementBlock
	:	DEFAULT ( (	( rtl_SplitStatement ) 
			|	( rtl_AssignStatement ) 
			|	( rtl_LogStatement ) 
			) 
			)* 
	;


rtl_LabeledBlockStatement
	:	rtl_Label LBRACE ( rtl_SimpleStatement )+ RBRACE 
	;


rtl_ImmediateStatementBlock
	:	NOW ( (	( rtl_SplitStatement ) 
			|	( rtl_AssignStatement ) 
			|	( rtl_LogStatement ) 
			|	( rtl_IfStatement ) 
			) 
			)* 
	;


rtl_TickStatementBlock
	:	TICK ( (	( rtl_SplitStatement ) 
			|	( rtl_AssignStatement ) 
			|	( rtl_LogStatement ) 
			|	( rtl_IfStatement ) 
			) 
			)* 
	;


rtl_SplitStatement
	:	SPLIT 
		(	NOW 
		|	
		) 
		LPAREN ( rtl_Expression ) RPAREN LPAREN ( rtl_Object_Reference )+ RPAREN 
	;


rtl_AssignStatement
	:	(	NOW 
		|	
		) 
		( rtl_Expression ) ASSIGNEQUAL ( rtl_Expression ) 
	;


rtl_LogStatement
	:	LOG SIMPLE_IDENTIFIER 
	;


rtl_IfStatement
	:	IF ( rtl_Expression ) rtl_BlockStatement 
		(	ELSE rtl_BlockStatement 
		|	
		) 
		
	;


rtl_Type_Declaration
	:	(	( rtl_IntegerType_Declaration ) 
		|	( rtl_UnsignedType_Declaration ) 
		|	( rtl_SignedType_Declaration ) 
		|	( rtl_ArrayType_Declaration ) 
		) 
	;


rtl_Expression
	:	(	( rtl_Constant_Literal_Expression ) 
		|	( rtl_Object_Reference ) 
		|	( rtl_Slice_Expression ) 
		|	( rtl_Unary_Expression ) 
		|	( rtl_Binary_Expression ) 
		|	( rtl_Ternary_Expression ) 
		) 
	;


rtl_SimpleStatement
	:	(	( rtl_AssignStatement ) 
		|	( rtl_SplitStatement ) 
		|	( rtl_NullStatement ) 
		|	( rtl_LogStatement ) 
		|	( rtl_GotoStatement ) 
		|	( rtl_IfStatement ) 
		) 
	;


rtl_NullStatement
	:	NuLL 
	;


rtl_GotoStatement
	:	GOTO SIMPLE_IDENTIFIER 
	;


rtl_Object_Reference
	:	SIMPLE_IDENTIFIER 
		(	( REQ ) 
		|	( ACK ) 
		|	
		) 
		(	LBRACKET ( rtl_Expression )+ RBRACKET 
		|	
		) 
		
	;


rtl_BlockStatement
	:	LBRACE ( rtl_SimpleStatement )+ RBRACE 
	;


rtl_Label
	:	LESS SIMPLE_IDENTIFIER GREATER 
	;


rtl_Constant_Literal_Expression
	:	LPAREN rtl_Type_Declaration RPAREN 
		(	( UINTEGER ) 
		|	( BINARY ) 
		|	( HEXADECIMAL ) 
		) 
		( COMMA 
			(	( UINTEGER ) 
			|	( BINARY ) 
			|	( HEXADECIMAL ) 
			) )* 
	;


rtl_Slice_Expression
	:	LPAREN SLICE rtl_Expression UINTEGER UINTEGER RPAREN 
	;


rtl_Unary_Expression
	:	LPAREN rtl_Unary_Operation rtl_Expression RPAREN 
	;


rtl_Binary_Expression
	:	LPAREN rtl_Expression rtl_Binary_Operation rtl_Expression RPAREN 
	;


rtl_Ternary_Expression
	:	LPAREN MUX rtl_Expression rtl_Expression rtl_Expression RPAREN 
	;


rtl_Unary_Operation
	:	NOT 
	;


rtl_Binary_Operation
	:	( OR ) 
	|	( AND ) 
	|	( NOR ) 
	|	( NAND ) 
	|	( XOR ) 
	|	( XNOR ) 
	|	( SHL ) 
	|	( SHR ) 
	|	( ROL ) 
	|	( ROR ) 
	|	( PLUS ) 
	|	( MINUS ) 
	|	( MUL ) 
	|	( DIV ) 
	|	( EQUAL ) 
	|	( NOTEQUAL ) 
	|	( LESS ) 
	|	( LESSEQUAL ) 
	|	( GREATER ) 
	|	( GREATEREQUAL ) 
	;


rtl_Operation
	:	( rtl_Unary_Operation ) 
	|	( rtl_Binary_Operation ) 
	;


rtl_IntegerType_Declaration
	:	INTEGER 
		(	MINUS 
		|	
		) 
		UINTEGER 
		(	MINUS 
		|	
		) 
		UINTEGER 
	;


rtl_UnsignedType_Declaration
	:	UNSIGNED LESS UINTEGER GREATER 
	;


rtl_SignedType_Declaration
	:	SIGNED LESS UINTEGER GREATER 
	;


rtl_ArrayType_Declaration
	:	ARRAY ( LBRACKET UINTEGER RBRACKET )+ OF rtl_Type_Declaration 
	;


aA_Integer_Parameter_Expression_Nontrivial
	:	LBRACE 
		(	( NOT aA_Integer_Parameter_Expression ) 
		|	( MINUS aA_Integer_Parameter_Expression ) 
		|	( aA_Integer_Parameter_Expression rtl_Binary_Op aA_Integer_Parameter_Expression ) 
		|	( MUX aA_Integer_Parameter_Expression aA_Integer_Parameter_Expression aA_Integer_Parameter_Expression ) 
		) 
		RBRACE 
	;


rtl_Binary_Op
	:	( OR ) 
	|	( AND ) 
	|	( NOR ) 
	|	( NAND ) 
	|	( XOR ) 
	|	( XNOR ) 
	|	( SHL ) 
	|	( SHR ) 
	|	( ROL ) 
	|	( ROR ) 
	|	( PLUS ) 
	|	( MINUS ) 
	|	( DIV ) 
	|	( MUL ) 
	|	( EQUAL ) 
	|	( NOTEQUAL ) 
	|	( LESS ) 
	|	( LESSEQUAL ) 
	|	( GREATER ) 
	|	( GREATEREQUAL ) 
	|	( POWER ) 
	;