strictness, ci
[minfp.git] / grammar.txt
1 prog := (tdef | func)*
2
3 tdef := '::' id id* '=' tcons ';'
4 tcons := id type* ('|' id type*)*
5 type := 'Int'
6 | 'Bool'
7 | id id*
8 | '(' type ')'
9
10 func := funid id* '=' expr ';'
11 funid := id | op ('ifxr' | 'ifxl') num
12 expr := expr expr
13 | expr op expr
14 | num
15 | 'True' | 'False'
16 | '(' (expr | op) ')'
17 | 'code'? id
18 | '\\' id '.' expr
19
20 num := (0 | 1 | .. | 9)*
21 id := (a | b | .. | z | A | B | .. | Z)*
22 op := '!' | '@' | '#' | '$' | '%' | '^' | '&' | '*' | '=' | '+' | '/' | '?'
23 | '-' | '_' | '|' | ''' | '\' | '"' | '<' | '>' | '.' | ':'