-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgrammar.ne
More file actions
27 lines (21 loc) · 1.1 KB
/
grammar.ne
File metadata and controls
27 lines (21 loc) · 1.1 KB
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
@{%
const lexer = require('./lexer').lexer;
const util = require('./lexer').util;
%}
@lexer lexer
Main -> _ Syn _ {% util.select1 %}
| _ Id _ ":=" _ Syn _ {% util.create("assign") %}
Id -> %ident {% id %}
Syn3 -> Id {% id %}
| "(" _ Syn _ ")" {% util.select2 %}
| "{" _ "}" {% util.create("unit") %}
| "{" _ Syn _ ("," _ Syn _):* "}" {% util.create("tuple") %}
Syn2 -> Syn3 {% id %}
| Syn2 _ "." Id {% util.create("proj") %}
| Syn2 _ Syn3 {% util.create("app") %}
Syn1 -> Syn2 {% id %}
| Pat _ "=>" _ Syn1 {% util.create("fn") %}
Syn -> Syn1 {% id %}
Pat -> Id {% id %}
| "(" _ Id _ ")" {% util.select2 %}
_ -> %space:? {% id %}