CoCoA:Grammar
From ApCoCoAWiki
Base grammar
A few rules to start the formal language definition. (They will slowly get more readable as soon as I get confidence with the wiki)
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/External] IDENTIFIER(PARAMS)
PARAMS ::= <PARAM ,>
PARAM ::= [ TYPE ] IDENTIFIER
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