Difference between revisions of "CoCoA:Grammar"
From ApCoCoAWiki
Line 12: | Line 12: | ||
[[HELP_QUERY]] ::= '''?''' {{flist|*}} | [[HELP_QUERY]] ::= '''?''' {{flist|*}} | ||
− | [[PACKAGE_DECL]] ::= Package [[PACKAGE_ID]] {{flist|[[ | + | [[PACKAGE_DECL]] ::= |
+ | Package [[PACKAGE_ID]] | ||
+ | {{opt|{{flist|[[EXPORT_DECL]]}}}} | ||
+ | {{opt|{{flist|[[VARIABLE_DECL]]}}}} | ||
+ | {{opt|{{flist|[[FUNCTION_DECL]]}}}} | ||
+ | EndPackage | ||
− | [[FUNCTION_DECL]] ::= Define [[IDENTIFIER]]'''(''' [[PARAMS]] ''')''' [[STATEMENTS]] | + | [[FUNCTION_DECL]] ::= |
− | + | Define [[IDENTIFIER]]'''(''' [[PARAMS]] ''')''' [[STATEMENTS]] EndDefine | |
− | + | | Define [[IDENTIFIER]]'''(''' [[PARAMS]] ''')''' BuiltIn | |
+ | | Define [[IDENTIFIER]]'''(''' [[PARAMS]] ''')''' PlugIn | ||
[[PARAMS]] ::= {{flist|[[PARAM]] ,}} | [[PARAMS]] ::= {{flist|[[PARAM]] ,}} | ||
Line 31: | Line 37: | ||
| Print [[EXPRESSIONS]] | | Print [[EXPRESSIONS]] | ||
| PrintLn {{fopt|[[EXPRESSIONS]]}} | | PrintLn {{fopt|[[EXPRESSIONS]]}} | ||
− | | If [[EXPRESSION]] Then [[STATEMENTS]] {{fopt|[[ELSE_LIST]]}} | + | | If [[EXPRESSION]] Then [[STATEMENTS]] {{fopt|[[ELSE_LIST]]}} EndIf |
− | | While [[EXPRESSION]] Do [[STATEMENTS]] | + | | While [[EXPRESSION]] Do [[STATEMENTS]] EndWhile |
| Repeat [[STATEMENTS]] Until [[EXPRESSION]] | | Repeat [[STATEMENTS]] Until [[EXPRESSION]] | ||
| For [[IDENTIFIER]] := [[EXPRESSION]] To [[EXPRESSION]] {{fopt|Step [[EXPRESSION]]}} | | For [[IDENTIFIER]] := [[EXPRESSION]] To [[EXPRESSION]] {{fopt|Step [[EXPRESSION]]}} | ||
− | Do [[STATEMENTS]] | + | Do [[STATEMENTS]] EndFor |
− | | ForEach [[IDENTIFIER]] In [[EXPRESSION]] Do [[STATEMENTS]] | + | | ForEach [[IDENTIFIER]] In [[EXPRESSION]] Do [[STATEMENTS]] EndForEach |
| Break | | Break | ||
− | | Block [[STATEMENTS]] | + | | Block [[STATEMENTS]] EndBlock |
| Declare {{fopt|[[TYPE]]}} {{flist|[[IDENTIFIER]] ,}} | | Declare {{fopt|[[TYPE]]}} {{flist|[[IDENTIFIER]] ,}} | ||
| Delete {{flist|[[IDENTIFIER]] ,}} | | Delete {{flist|[[IDENTIFIER]] ,}} |
Revision as of 13:47, 6 June 2007
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 Template:Opt Template:Opt Template:Opt EndPackage
FUNCTION_DECL ::= Define IDENTIFIER( PARAMS ) STATEMENTS EndDefine | Define IDENTIFIER( PARAMS ) BuiltIn | Define IDENTIFIER( PARAMS ) PlugIn
PARAMS ::= PARAM ,
PARAM ::= TYPE IDENTIFIER
STATEMENTS ::= STATEMENT ;
STATEMENT ::= | ASSIGNMENT | EXPRESSION | FUNCTION_CALL | Return EXPRESSION | Print EXPRESSIONS | PrintLn EXPRESSIONS | If EXPRESSION Then STATEMENTS ELSE_LIST EndIf | While EXPRESSION Do STATEMENTS EndWhile | Repeat STATEMENTS Until EXPRESSION | For IDENTIFIER := EXPRESSION To EXPRESSION Step EXPRESSION Do STATEMENTS EndFor | ForEach IDENTIFIER In EXPRESSION Do STATEMENTS EndForEach | Break | Block STATEMENTS EndBlock | 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