CoCoA:Grammar

From ApCoCoAWiki

Base grammar

A few rules to start the formal language definition.

PROGRAM ::= COMMAND | Λ
COMMAND ::= HELP_QUERY newline
	| PACKAGE_DECL
	| FUNCTION_DECL
	| STATEMENT;
HELP_QUERY ::= ? *
PACKAGE_DECL ::= Package PACKAGE_ID FUNCTION_DECL End[Package]
FUNCTION_DECL ::= Define IDENTIFIER( PARAMS ) STATEMENTS End[Define]
	| Define Internal IDENTIFIER( PARAMS );
	| Define External IDENTIFIER( PARAMS );
PARAMS ::= PARAM ,
PARAM ::= [TYPE] IDENTIFIER
STATEMENTS ::= STATEMENT ;
STATEMENT ::= Λ
	| ASSIGNMENT
	| EXPRESSION
	| FUNCTION_CALL
	| Return [EXPRESSION]
	| Print EXPRESSIONS
	| PrintLn [EXPRESSIONS]
	| If EXPRESSION Then STATEMENTS [ELSE_LIST] End[If]
	| While EXPRESSION Do STATEMENTS End[While]
	| Repeat STATEMENTS Until EXPRESSION
	| For IDENTIFIER := EXPRESSION To EXPRESSION [Step EXPRESSION]
		Do STATEMENTS End[For]
	| ForEach IDENTIFIER In EXPRESSION Do STATEMENTS End[ForEach]
	| Break
	| Block STATEMENTS End[Block]
	| Declare [TYPE] IDENTIFIER ,
	| Delete IDENTIFIER ,
	| Quit
ASSIGNMENT ::= LEFT_EXPRESSION := EXPRESSION
LEFT_EXPR ::= IDENTIFIER
	| LEFT_EXPR.IDENTIFIER
	| LEFT_EXPR.[EXPRESSION ,]
FUNCTION_CALL ::= FUNCTION_ID( EXPRESSION , )
FUNCTION_ID ::= IDENTIFIER | EXPRESSION.IDENTIFIER | PACKAGE_ID.IDENTIFIER