-
Notifications
You must be signed in to change notification settings - Fork 0
/
BNF.txt
53 lines (40 loc) · 801 Bytes
/
BNF.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<termBody>
:= <lambdaAbst>
| <typeAbst>
| <generalApp>
| <termIf>
<lambdaAbst>
:= "\" <var> <typeAnnotation>opt <termBody>
<typeAbst>
:= "\" <tyVar> <termBody>
<generalApp>
:= <unit> <appChain>
<appChain>
:= "[" <tyAnnot> "]" <appChain>
| <unit> <appChain>
| EOL
<unit>
:= "true"
| "false"
| <var>
| "(" <termBody> ")"
| <unit> "." <identifier>
| "{" <termRecord> "," .. <termRecord> "}"
<termIf>
:= "if" <termBody> "then" <termBody> "else" <termBody>
<var>
:= lower char
<typeAnnotation>
:= <typeUnit>
| <typeUnit> "->" <typeAnnotation>
<typeUnit>
:= "Bool"
| <tyVar>
| "(" <typeAnnot> ")"
| "{" <typeRecord> "}"
<typeRecords>
:= "{" <typeRecord> ("," <typeRecords>)opt "}"
<typeRecord>
:= <identifier> ":" <typeAnnotation>
<tyVar>
:= upper char