summaryrefslogtreecommitdiff
path: root/src/parser/grammar.pegjs
blob: 48a7564958910d77c55579cdcf5cc38f69a624a7 (plain)
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
LambdaTerm
  = Abstraction
  / Application
  / Variable

Application
  = LPAREN _? left:LambdaTerm _? right:LambdaTerm _? RPAREN {
      return { left, right };
    }

Abstraction
  = LPAREN _? LAMBDA _? param:Variable _? DOT _? body:LambdaTerm _? RPAREN {
      return { param, body };
    }

Variable
  = name:([a-zA-Z][A-Z0-9a-z]*) { return { name: name[0] + name[1].join('') }; }

LAMBDA = "λ"

DOT = "."

LPAREN = "("

RPAREN = ")"

_ = (" " / "\n" / "\t" / "\t\n")+