CoCoA:Grammar: Difference between revisions
From ApCoCoAWiki
Initial C5 grammar |
|||
Line 24: | Line 24: | ||
[[PARAM]] ::= [TYPE] IDENTIFIER | [[PARAM]] ::= [TYPE] IDENTIFIER | ||
[[STATEMENT]] ::= \ | [[STATEMENT]] ::= <math>\Lambda</math> | ||
| [[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 | | Quit | ||
Revision as of 09:18, 20 May 2006
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)
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)
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