Difference between revisions of "CoCoA:Grammar"
From ApCoCoAWiki
Line 4: | Line 4: | ||
(They will slowly get more readable as soon as I get confidence with the wiki) | (They will slowly get more readable as soon as I get confidence with the wiki) | ||
− | [[PROGRAM]] ::= <[[COMMAND]]> | <math>\Lambda</math> | + | [[PROGRAM]] ::= <[[COMMAND]]> | <math>\Lambda</math> |
− | [[COMMAND]] ::= [[HELP_QUERY]] \newline | + | [[COMMAND]] ::= [[HELP_QUERY]] \newline |
− | + | | [[PACKAGE_DECL]] | |
− | + | | [[FUNCTION_DECL]] | |
− | + | | [[STATEMENT]]; | |
− | [[HELP_QUERY]] ::= ? <*> | + | [[HELP_QUERY]] ::= ? <*> |
− | [[PACKAGE_DECL]] ::= Package [[PACKAGE_ID]] <[[FUNCTION_DECL]]> End[Package] | + | [[PACKAGE_DECL]] ::= Package [[PACKAGE_ID]] <[[FUNCTION_DECL]]> End[Package] |
− | [[FUNCTION_DECL]] ::= Define [[IDENTIFIER]]([[PARAMS]]) | + | [[FUNCTION_DECL]] ::= Define [[IDENTIFIER]]([[PARAMS]]) STATEMENTS End[Define] |
− | + | | Define [Internal/External] [[IDENTIFIER]]([[PARAMS]]) | |
− | |||
− | |||
− | [[PARAMS]] ::= <[[PARAM]] ,> | + | [[PARAMS]] ::= <[[PARAM]] ,> |
− | [[PARAM]] ::= [TYPE] IDENTIFIER | + | [[PARAM]] ::= [TYPE] IDENTIFIER |
− | [[STATEMENT]] ::= <math>\Lambda</math> | + | [[STATEMENT]] ::= <math>\Lambda</math> |
| [[ASSIGNMENT]] | | [[ASSIGNMENT]] | ||
| [[EXPRESSION]] | | [[EXPRESSION]] | ||
Line 42: | Line 40: | ||
| Quit | | Quit | ||
− | [[ASSIGNMENT]] ::= [[LEFT_EXPRESSION]] := [[EXPRESSION]] | + | [[ASSIGNMENT]] ::= [[LEFT_EXPRESSION]] := [[EXPRESSION]] |
− | [[LEFT_EXPR]] ::= [[IDENTIFIER]] | + | [[LEFT_EXPR]] ::= [[IDENTIFIER]] |
− | + | | [[LEFT_EXPR]].[[IDENTIFIER]] | |
− | + | | [[LEFT_EXPR]].[<EXPRESSION ,>] | |
− | [[FUNCTION_CALL]] ::= [[FUNCTION_ID]](<EXPRESSION ,>) | + | [[FUNCTION_CALL]] ::= [[FUNCTION_ID]](<EXPRESSION ,>) |
− | [[FUNCTION_ID]] ::= [[IDENTIFIER]] | [[EXPRESSION]].[[IDENTIFIER]] | [[PACKAGE_ID.IDENTIFIER]] | + | [[FUNCTION_ID]] ::= [[IDENTIFIER]] | [[EXPRESSION]].[[IDENTIFIER]] | [[PACKAGE_ID.IDENTIFIER]] |
Revision as of 09:19, 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)
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