aboutsummaryrefslogtreecommitdiff
path: root/docs/SYNTAX.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/SYNTAX.md')
-rw-r--r--docs/SYNTAX.md51
1 files changed, 25 insertions, 26 deletions
diff --git a/docs/SYNTAX.md b/docs/SYNTAX.md
index 8f6edb2..49fdd59 100644
--- a/docs/SYNTAX.md
+++ b/docs/SYNTAX.md
@@ -8,7 +8,7 @@ We now shall take a look at a more formal description of Puck's syntax. Syntax r
### Identifiers
```
-IDENT ::= LETTER (LETTER | DIGIT | '_')*
+IDENT ::= LETTER (LETTER | DIGIT | '_')* # todo: support _
LETTER ::= 'A'..'Z' | 'a'..'z' | '\x80'..'\xff' # todo
DIGIT ::= '0'..'9'
```
@@ -94,19 +94,19 @@ INTERFACE ::= 'interface' '[' SIGNATURE (',' SIGNATURE)* ('for' TYPE_DESC)? ']
## Control Flow
```
-IF_EXPR ::= 'if' EXPR ':' EXPR ('elif' EXPR ':' EXPR)* 'else' ':' EXPR
-IF_STMT ::= 'if' EXPR ':' STMT ('elif' EXPR ':' STMT)* ('else' ':' STMT)?
-WHEN_EXPR ::= 'when' EXPR ':' EXPR ('else' ':' EXPR)?
-WHEN_STMT ::= 'when' EXPR ':' STMT ('else' ':' STMT)?
-BLOCK_EXPR ::= 'block' IDENT? ':' EXPR
-BLOCK_STMT ::= 'block' IDENT? ':' STMT
-MATCH_EXPR ::= 'match' EXPR ':'
- ('case' EXPR ('where' EXPR)? (',' EXPR ('where' EXPR)?)* ':' EXPR)+
-MATCH_STMT ::= 'match' EXPR ':'
- ('case' EXPR ('where' EXPR)? (',' EXPR ('where' EXPR)?)* ':' STMT)+
-LOOP_STMT ::= 'loop' ':' STMT
-WHILE_STMT ::= 'while' EXPR ':' STMT
-FOR_STMT ::= 'for' GROUP 'in' EXPR ':' STMT
+IF_EXPR ::= 'if' EXPR '{' EXPR '}' ('elif' EXPR '{' EXPR '}')* 'else' '{' EXPR '}'
+IF_STMT ::= 'if' EXPR '{' STMT '}' ('elif' EXPR '{' STMT '}')* ('else' '{' STMT '}')?
+WHEN_EXPR ::= 'when' EXPR '{' EXPR '}' ('elif' EXPR '{' EXPR '}')* 'else' '{' EXPR '}'
+WHEN_STMT ::= 'when' EXPR '{' STMT '}' ('elif' EXPR '{' EXPR '}')* ('else' '{' STMT '}')?
+BLOCK_EXPR ::= 'block' IDENT? '{' EXPR '}'
+BLOCK_STMT ::= 'block' IDENT? '{' STMT '}'
+MATCH_EXPR ::= 'match' EXPR '{'
+ ('case' EXPR ('where' EXPR)? (',' EXPR ('where' EXPR)?)* '{' EXPR '}')+ '}'
+MATCH_STMT ::= 'match' EXPR '{'
+ ('case' EXPR ('where' EXPR)? (',' EXPR ('where' EXPR)?)* '{' STMT '}')+ '}'
+LOOP_STMT ::= 'loop' '{' STMT '}'
+WHILE_STMT ::= 'while' EXPR '{' STMT '}'
+FOR_STMT ::= 'for' GROUP 'in' EXPR '{' STMT '}'
```
## Modules
@@ -115,14 +115,14 @@ IMPORT_STMT ::= 'import' IDENT_AS?
('/' (IDENT_AS | '[' (IDENT_AS (',' IDENT_AS)*)? ']'))*
EXPORT_STMT ::= 'export' IDENT_AS?
('/' (IDENT_AS | '[' (IDENT_AS (',' IDENT_AS)*)? ']'))*
-MODULE_STMT ::= 'module' IDENT ':' STMT
+MODULE_STMT ::= 'module' IDENT '{' STMT '}'
IDENT_AS ::= IDENT ('as' IDENT)?
```
## Macros
```
MACRO_FUNC ::= IDENT '(' EXPR ')'
-MACRO_BLOCK ::= IDENT ':' EXPR # todo
+MACRO_BLOCK ::= IDENT '{' EXPR '}' # todo
```
## Calls, Statements, and Expressions
@@ -130,18 +130,17 @@ MACRO_BLOCK ::= IDENT ':' EXPR # todo
OPERATION ::= EXPR OPERATOR EXPR
PREFIX ::= OPERATOR EXPR
SUFFIX ::= EXPR OPERATOR
-APPLICATION ::= IDENT EXPR | IDENT PARAMS? | (IDENT | APPLICATION) '.' IDENT PARAMS?
+APPLICATION ::= IDENT PARAMS? | IDENT EXPR | (APPLICATION | PREFIX | SUFFIX) '.' IDENT PARAMS?
PARAMS ::= '(' ((IDENT '=')? EXPR (',' (IDENT '=')? EXPR)*)? ')'
```
```
-STMT ::= SINGLE_STMT | STMT+
-SINGLE_STMT ::= IF_STMT | WHEN_STMT | BLOCK_STMT | MATCH_STMT |
- LOOP_STMT | WHILE_STMT | FOR_STMT |
- IMPORT_STMT | EXPORT_STMT | MODULE_STMT |
- DECL | (EXPR ';')
-EXPR ::= IF_EXPR | WHEN_EXPR | BLOCK_EXPR | MATCH_EXPR |
- MACRO_FUNC | MACRO_BLOCK |
- APPLICATION | OPERATION | PREFIX | SUFFIX |
- VALUE | (STMT EXPR)
+EXPR ::= IF_EXPR | WHEN_EXPR | BLOCK_EXPR | MATCH_EXPR |
+ MACRO_FUNC | MACRO_BLOCK |
+ APPLICATION | OPERATION | PREFIX | SUFFIX |
+ VALUE | (STMT EXPR) # todo
+STMT ::= IF_STMT | WHEN_STMT | BLOCK_STMT | MATCH_STMT |
+ LOOP_STMT | WHILE_STMT | FOR_STMT |
+ IMPORT_STMT | EXPORT_STMT | MODULE_STMT |
+ ((APPLICATION | OPERATION | PREFIX | SUFFIX | DECL) ';') | (STMT+ STMT)
```