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]]
+
| [[PACKAGE_DECL]]
| [[FUNCTION_DECL]]
+
| [[FUNCTION_DECL]]
| [[STATEMENT]];
+
| [[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]
STATEMENTS
+
| Define [Internal/External] [[IDENTIFIER]]([[PARAMS]])
  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]].[[IDENTIFIER]]
| [[LEFT_EXPR]].[<EXPRESSION ,>]
+
| [[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