Grammar RosettaParser
ANTLR-generated HTML file from ./rosetta.g

Terence Parr, MageLang Institute
ANTLR Version 2.7.1; 1989-1999

	
	package org.sldl.rosetta.parser.tarp.antlr;
	// classes for text,file i/o
	import java.io.*;
	import org.sldl.rosetta.parser.tarp.antlr.MyCommonToken;
	import java.util.Vector;
	//import org.sldl.rosetta.rom.*;
	//changed to KU version (Rosetta.tools.src.org.sldl.rosetta.ROM)
	//the following line shouldn't need to be mentioned here anyway
	//import org.sldl.rosetta.ROM.*;
	import org.sldl.rosetta.parser.tarp.misc.SourceReference;
	

class RosettaParser extends LLkParser


design_file
	:	( (	LIBRARY_TOKEN name SEMICOLON_TOKEN 
			|	
			) 
			design_unit )+ EOF 
	;


name
	:	(	( label FULL_STOP_TOKEN ) => qualified_name 
		|	label 
		) 
		
	;


design_unit
	:	optional_use_clause 
		(	facet_declaration 
		|	package_declaration 
		|	component_declaration 
		|	domain_declaration 
		) 
	;


label
	:	(	SIMPLE_LABEL 
		|	OPERATOR_INTERPRETATION_LABEL 
		) 
		
	;


optional_label
	:	(	label 
		|	
		) 
	;


literal
	:	(	real_literal 
		|	character_literal 
		|	string_literal 
		) 
	;


real_literal
	:	(	DECIMAL_LITERAL 
		|	BASED_LITERAL 
		) 
		
	;


character_literal
	:	(	GRAPHIC_CHARACTER_LITERAL 
		|	ENCODED_CHARACTER_LITERAL 
		) 
		
	;


string_literal
	:	( STRING_LITERAL ) 
	;


expression
	:	precedence_0_expression 
	;


precedence_0_expression
	:	precedence_1_expression ( (	GREATER_THAN_SIGN_GREATER_THAN_SIGN_GREATER_THAN_SIGN_TOKEN 
			|	EQUALS_SIGN_GREATER_THAN_SIGN_GREATER_THAN_SIGN_TOKEN 
			) 
			precedence_1_expression )* 
	;


precedence_1_expression
	:	precedence_2_expression ( EQUALS_SIGN_EQUALS_SIGN_TOKEN precedence_2_expression )* 
	;


precedence_2_expression
	:	precedence_3_expression ( (	EQUALS_SIGN_GREATER_THAN_SIGN_TOKEN 
			|	IMPLIES_TOKEN 
			|	LESS_THAN_SIGN_EQUALS_SIGN_TOKEN 
			) 
			precedence_3_expression )* 
	;


precedence_3_expression
	:	precedence_4_expression ( (	OR_TOKEN 
			|	NOR_TOKEN 
			|	XOR_TOKEN 
			|	XNOR_TOKEN 
			|	MAX_TOKEN 
			) 
			precedence_4_expression )* 
	;


precedence_4_expression
	:	precedence_5_expression ( (	AND_TOKEN 
			|	NAND_TOKEN 
			|	MIN_TOKEN 
			) 
			precedence_5_expression )* 
	;


precedence_5_expression
	:	precedence_6_expression ( (	EQUALS_SIGN_TOKEN 
			|	SOLIDUS_EQUALS_SIGN_TOKEN 
			|	LESS_THAN_SIGN_TOKEN 
			|	GREATER_THAN_SIGN_TOKEN 
			|	EQUALS_SIGN_LESS_THAN_SIGN_TOKEN 
			|	GREATER_THAN_SIGN_EQUALS_SIGN_TOKEN 
			|	IN_TOKEN 
			) 
			precedence_6_expression )* 
	;


precedence_6_expression
	:	precedence_7_expression ( SUB_TOKEN precedence_7_expression )* 
	;


precedence_7_expression
	:	precedence_8_expression ( (	PLUS_SIGN_TOKEN 
			|	HYPHEN_MINUS_TOKEN 
			|	PLUS_SIGN_FULL_STOP_FULL_STOP_TOKEN 
			|	AMPERSAND_FULL_STOP_FULL_STOP_TOKEN 
			|	AMPERSAND_TOKEN 
			|	VERTICAL_LINE_TOKEN 
			) 
			precedence_8_expression )* 
	;


precedence_8_expression
	:	precedence_9_expression ( (	ASTERISK_TOKEN 
			|	SOLIDUS_TOKEN 
			|	MOD_TOKEN 
			|	DIV_TOKEN 
			) 
			precedence_9_expression )* 
	;


precedence_9_expression
	:	precedence_10_expression 
		(	CIRCUMFLEX_ACCENT_TOKEN precedence_10_expression 
		|	
		) 
	;


precedence_10_expression
	:	( (	NOT_TOKEN 
			|	PLUS_SIGN_TOKEN 
			|	HYPHEN_MINUS_TOKEN 
			|	ASTERISK_TOKEN 
			|	NUMBER_SIGN_TOKEN 
			|	PERCENT_SIGN_TOKEN 
			) )* precedence_11_expression 
	;


precedence_11_expression
	:	( name COMMERCIAL_AT_TOKEN ) => at_operation 
	|	( name APOSTROPHE_TOKEN ) => tick_operation 
	|	precedence_12_expression 
	;


at_operation
	:	name COMMERCIAL_AT_TOKEN precedence_12_expression 
	;


tick_operation
	:	name APOSTROPHE_TOKEN 
	;


precedence_12_expression
	:	(	( primary LEFT_SQUARE_BRACKET_TOKEN ) => index_operation 
		|	( primary LEFT_PARENTHESIS_TOKEN ) => function_application_or_facet_instantiation 
		|	primary 
		) 
	;


primary
	:	(	literal 
		|	name 
		|	parenthesized_expression 
		|	( LESS_THAN_SIGN_ASTERISK_TOKEN function_signature IS_TOKEN ) => anonymous_function 
		|	( FACET_TOKEN facet_signature IS_TOKEN ) => anonymous_facet 
		|	curly_bracket_formation 
		|	square_bracket_formation 
		|	type_formation 
		|	let_expression 
		|	if_expression 
		|	case_expression 
		) 
		
	;


index_operation
	:	primary LEFT_SQUARE_BRACKET_TOKEN expression RIGHT_SQUARE_BRACKET_TOKEN 
	;


function_application_or_facet_instantiation
	:	primary LEFT_PARENTHESIS_TOKEN argument_list RIGHT_PARENTHESIS_TOKEN 
	;


argument_list
	:	argument ( COMMA_TOKEN argument )* 
	;


parenthesized_expression
	:	LEFT_PARENTHESIS_TOKEN expression RIGHT_PARENTHESIS_TOKEN 
	;


function_signature
	:	LEFT_PARENTHESIS_TOKEN optional_parameter_list RIGHT_PARENTHESIS_TOKEN COLON_COLON_TOKEN expression 
	;


anonymous_function
	:	LESS_THAN_SIGN_ASTERISK_TOKEN function_signature IS_TOKEN expression ASTERISK_GREATER_THAN_SIGN_TOKEN 
	;


facet_signature
	:	LEFT_PARENTHESIS_TOKEN optional_facet_parameter_list RIGHT_PARENTHESIS_TOKEN COLON_COLON_TOKEN expression 
	;


anonymous_facet
	:	FACET_TOKEN facet_signature IS_TOKEN facet_body END_TOKEN FACET_TOKEN 
	;


curly_bracket_formation
	:	LEFT_CURLY_BRACKET_TOKEN optional_expression_list RIGHT_CURLY_BRACKET_TOKEN 
	;


square_bracket_formation
	:	LEFT_SQUARE_BRACKET_TOKEN optional_expression_list RIGHT_SQUARE_BRACKET_TOKEN 
	;


type_formation
	:	(	universal_or_subtype_formation 
		|	set_type_formation 
		|	array_type_formation 
		|	function_type_formation 
		|	facet_type_formation 
		) 
		
	;


let_expression
	:	LET_TOKEN LEFT_PARENTHESIS_TOKEN let_binding_list RIGHT_PARENTHESIS_TOKEN IN_TOKEN expression END_TOKEN LET_TOKEN 
	;


if_expression
	:	IF_TOKEN expression THEN_TOKEN expression if_expression_tail END_TOKEN IF_TOKEN 
	;


case_expression
	:	CASE_TOKEN expression IS_TOKEN case_alternative_list END_TOKEN CASE_TOKEN 
	;


qualified_name
	:	label ( FULL_STOP_TOKEN label )* 
	;


optional_expression_list
	:	(	expression_list 
		|	
		) 
	;


expression_list
	:	( expression ( COMMA_TOKEN expression )* ) 
	;


universal_or_subtype_formation
	:	(	universal_type_formation 
		|	subtype_formation 
		) 
	;


set_type_formation
	:	SET_TOKEN LEFT_PARENTHESIS_TOKEN expression RIGHT_PARENTHESIS_TOKEN 
	;


array_type_formation
	:	ARRAY_TOKEN LEFT_PARENTHESIS_TOKEN expression RIGHT_PARENTHESIS_TOKEN 
	;


function_type_formation
	:	LESS_THAN_SIGN_ASTERISK_TOKEN function_signature ASTERISK_GREATER_THAN_SIGN_TOKEN 
	;


facet_type_formation
	:	FACET_TOKEN facet_signature END_TOKEN FACET_TOKEN 
	;


universal_type_formation
	:	TYPE_TOKEN 
	;


subtype_formation
	:	SUBTYPE_TOKEN LEFT_PARENTHESIS_TOKEN expression RIGHT_PARENTHESIS_TOKEN 
	;


let_binding_list
	:	( let_binding ( COMMA_TOKEN let_binding )* ) 
	;


let_binding
	:	(	let_function_binding 
		|	let_parameter_binding 
		) 
	;


let_function_binding
	:	label function_signature BE_TOKEN expression 
	;


let_parameter_binding
	:	parameter_definition BE_TOKEN expression 
	;


parameter_definition
	:	label COLON_COLON_TOKEN expression 
	;


if_expression_tail
	:	(	( ELSIF_TOKEN ) => optional_elsif_expression 
		|	optional_else_expression 
		) 
		
	;


optional_elsif_expression
	:	(	elsif_expression 
		|	
		) 
	;


optional_else_expression
	:	(	ELSE_TOKEN expression 
		|	
		) 
	;


elsif_expression
	:	ELSIF_TOKEN expression THEN_TOKEN expression if_expression_tail 
	;


case_alternative_list
	:	case_alternative ( VERTICAL_LINE_TOKEN case_alternative )+ 
	;


case_alternative
	:	LEFT_PARENTHESIS_TOKEN expression HYPHEN_MINUS_GREATER_THAN_SIGN_TOKEN expression RIGHT_PARENTHESIS_TOKEN 
	;


quantified_expression
	:	name LEFT_PARENTHESIS_TOKEN optional_parameter_list VERTICAL_LINE_TOKEN expression RIGHT_PARENTHESIS_TOKEN 
	;


optional_parameter_list
	:	(	parameter_list 
		|	
		) 
	;


constructed_type_declaration
	:	(	simple_constructed_type_declaration 
		|	parameterized_constructed_type_declaration 
		) 
		
	;


simple_constructed_type_declaration
	:	label COLON_COLON_TOKEN universal_or_subtype_formation IS_TOKEN constructed_type_definition 
	;


parameterized_constructed_type_declaration
	:	label parameterized_constructed_type_signature IS_TOKEN constructed_type_definition 
	;


constructed_type_definition
	:	DATA_TOKEN constructed_type_alternative_list 
	;


parameterized_constructed_type_signature
	:	LEFT_PARENTHESIS_TOKEN optional_parameter_list RIGHT_PARENTHESIS_TOKEN COLON_COLON_TOKEN universal_or_subtype_formation 
	;


constructed_type_alternative_list
	:	( constructed_type_alternative ( VERTICAL_LINE_TOKEN constructed_type_alternative )* ) 
	;


constructed_type_alternative
	:	label LEFT_PARENTHESIS_TOKEN optional_observer_definition_list RIGHT_PARENTHESIS_TOKEN COLON_COLON_TOKEN label 
	;


optional_observer_definition_list
	:	(	observer_definition_list 
		|	
		) 
	;


observer_definition_list
	:	( observer_definition ( COMMA_TOKEN observer_definition )* ) 
	;


observer_definition
	:	label COLON_COLON_TOKEN expression 
	;


enumeration_type_declaration
	:	label COLON_COLON_TOKEN expression IS_TOKEN enumeration_type_formation SEMICOLON_TOKEN 
	;


enumeration_type_formation
	:	ENUMERATION_TOKEN LEFT_SQUARE_BRACKET_TOKEN enumeration_list RIGHT_SQUARE_BRACKET_TOKEN 
	;


enumeration_list
	:	( enumeration_value ( COMMA_TOKEN enumeration_value )* ) 
	;


enumeration_value
	:	(	SIMPLE_LABEL 
		|	real_literal 
		|	character_literal 
		) 
	;


optional_declaration_list
	:	(	declaration_list 
		|	
		) 
	;


declaration_list
	:	( declaration_list_element )+ 
	;


declaration_list_element
	:	(	multiple_declaration 
		|	( label COLON_COLON_TOKEN expression optional_is_expression SEMICOLON_TOKEN ) => simple_declaration 
		|	( label COLON_COLON_TOKEN expression ) => enumeration_type_declaration 
		|	( label 
				(	COLON_COLON_TOKEN 
				|	parameterized_constructed_type_signature 
				) ) => constructed_type_declaration 
		|	function_declaration 
		|	design_unit 
		) 
	;


multiple_declaration
	:	label_list COLON_COLON_TOKEN expression optional_is_expression SEMICOLON_TOKEN 
	;


optional_is_expression
	:	(	IS_TOKEN expression 
		|	
		) 
	;


simple_declaration
	:	label COLON_COLON_TOKEN expression optional_is_expression SEMICOLON_TOKEN 
	;


function_declaration
	:	label function_signature optional_is_expression SEMICOLON_TOKEN 
	;


label_list
	:	label ( COMMA_TOKEN label )+ 
	;


facet_declaration
	:	FACET_TOKEN label facet_signature optional_is_facet_body END_TOKEN FACET_TOKEN 
		(	label 
		|	
		) 
		SEMICOLON_TOKEN 
	;


optional_is_facet_body
	:	(	IS_TOKEN facet_body 
		|	
		) 
	;


facet_body
	:	optional_export_clause optional_declaration_list BEGIN_TOKEN optional_term_list 
	;


package_declaration
	:	PACKAGE_TOKEN label facet_signature IS_TOKEN optional_export_clause BEGIN_TOKEN optional_declaration_list END_TOKEN PACKAGE_TOKEN 
		(	label 
		|	
		) 
		SEMICOLON_TOKEN 
	;


optional_export_clause
	:	(	EXPORT_TOKEN export_list SEMICOLON_TOKEN 
		|	
		) 
	;


component_declaration
	:	COMPONENT_TOKEN label facet_signature IS_TOKEN optional_export_clause optional_declaration_list BEGIN_TOKEN assumptions_clause definitions_clause implications_clause END_TOKEN COMPONENT_TOKEN 
		(	label 
		|	
		) 
		SEMICOLON_TOKEN 
	;


assumptions_clause
	:	ASSUMPTION_TOKEN optional_term_list END_TOKEN ASSUMPTION_TOKEN SEMICOLON_TOKEN 
	;


definitions_clause
	:	DEFINITION_TOKEN optional_term_list END_TOKEN DEFINITION_TOKEN SEMICOLON_TOKEN 
	;


implications_clause
	:	IMPLICATION_TOKEN optional_term_list END_TOKEN IMPLICATION_TOKEN SEMICOLON_TOKEN 
	;


optional_term_list
	:	(	term_list 
		|	
		) 
	;


domain_declaration
	:	DOMAIN_TOKEN label facet_signature IS_TOKEN facet_body END_TOKEN DOMAIN_TOKEN 
		(	label 
		|	
		) 
		SEMICOLON_TOKEN 
	;


optional_use_clause
	:	(	multiple_use_clause 
		|	
		) 
	;


multiple_use_clause
	:	( use_clause )+ 
	;


use_clause
	:	USE_TOKEN name_list SEMICOLON_TOKEN 
	;


name_list
	:	name ( COMMA_TOKEN name )* 
	;


term_list
	:	( term_list_element )+ 
	;


term_list_element
	:	(	simple_term 
		|	let_term 
		) 
	;


simple_term
	:	label COLON_TOKEN expression SEMICOLON_TOKEN 
	;


let_term
	:	LET_TOKEN LEFT_PARENTHESIS_TOKEN let_binding_list RIGHT_PARENTHESIS_TOKEN IN_TOKEN optional_term_list END_TOKEN LET_TOKEN SEMICOLON_TOKEN 
	;


parameter_list
	:	parameter_list_element ( SEMICOLON_TOKEN parameter_list_element )* 
	;


parameter_list_element
	:	(	multiple_parameter_definition 
		|	parameter_definition 
		) 
	;


multiple_parameter_definition
	:	label_list COLON_COLON_TOKEN expression 
	;


function_application
	:	precedence_12_expression LEFT_PARENTHESIS_TOKEN argument_list RIGHT_PARENTHESIS_TOKEN 
	;


argument
	:	(	LOW_LINE_TOKEN 
		|	optional_expression 
		) 
	;


optional_expression
	:	(	expression 
		|	
		) 
	;


optional_facet_parameter_list
	:	(	facet_parameter_list 
		|	
		) 
	;


facet_parameter_list
	:	( facet_parameter_list_element ( SEMICOLON_TOKEN facet_parameter_list_element )* ) 
	;


facet_parameter_list_element
	:	(	multiple_facet_parameter_definition 
		|	facet_parameter_definition 
		) 
	;


multiple_facet_parameter_definition
	:	label_list COLON_COLON_TOKEN optional_label expression 
	;


facet_parameter_definition
	:	label COLON_COLON_TOKEN optional_label expression 
	;


optional_simple_label
	:	(	label 
		|	
		) 
	;


export_list
	:	(	label_list 
		|	ALL_TOKEN 
		) 
	;


facet_instantiation
	:	precedence_12_expression LEFT_PARENTHESIS_TOKEN argument_list RIGHT_PARENTHESIS_TOKEN 
	;


library_logical_name
	:	SIMPLE_LABEL 
	;