Difference between revisions of "CoCoA:Grammar"

From ApCoCoAWiki
Line 12: Line 12:
 
  [[HELP_QUERY]] ::= '''?''' {{flist|*}}
 
  [[HELP_QUERY]] ::= '''?''' {{flist|*}}
  
  [[PACKAGE_DECL]] ::= Package [[PACKAGE_ID]] {{flist|[[FUNCTION_DECL]]}} End{{fopt|Package}}
+
  [[PACKAGE_DECL]] ::=
 +
    Package [[PACKAGE_ID]]
 +
      {{opt|{{flist|[[EXPORT_DECL]]}}}}
 +
      {{opt|{{flist|[[VARIABLE_DECL]]}}}}
 +
      {{opt|{{flist|[[FUNCTION_DECL]]}}}}
 +
    EndPackage
  
  [[FUNCTION_DECL]] ::= Define [[IDENTIFIER]]'''(''' [[PARAMS]] ''')''' [[STATEMENTS]] End{{fopt|Define}}
+
  [[FUNCTION_DECL]] ::=
| Define Internal [[IDENTIFIER]]'''(''' [[PARAMS]] ''')''';
+
    Define [[IDENTIFIER]]'''(''' [[PARAMS]] ''')''' [[STATEMENTS]] EndDefine
| Define External [[IDENTIFIER]]'''(''' [[PARAMS]] ''')''';
+
  | 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]]}} End{{fopt|If}}
+
  | If [[EXPRESSION]] Then [[STATEMENTS]] {{fopt|[[ELSE_LIST]]}} EndIf
  | While [[EXPRESSION]] Do [[STATEMENTS]] End{{fopt|While}}
+
  | 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]] End{{fopt|For}}
+
  Do [[STATEMENTS]] EndFor
  | ForEach [[IDENTIFIER]] In [[EXPRESSION]] Do [[STATEMENTS]] End{{fopt|ForEach}}
+
  | ForEach [[IDENTIFIER]] In [[EXPRESSION]] Do [[STATEMENTS]] EndForEach
 
  | Break
 
  | Break
  | Block [[STATEMENTS]] End{{fopt|Block}}
+
  | 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