summaryrefslogtreecommitdiff
path: root/grammar.peggy
diff options
context:
space:
mode:
Diffstat (limited to 'grammar.peggy')
-rw-r--r--grammar.peggy14
1 files changed, 14 insertions, 0 deletions
diff --git a/grammar.peggy b/grammar.peggy
new file mode 100644
index 0000000..c2dd580
--- /dev/null
+++ b/grammar.peggy
@@ -0,0 +1,14 @@
+LambdaTerm = Application / Abstraction / Variable
+
+Application = LPAREN _ left:LambdaTerm _ right:LambdaTerm RPAREN { return { application: { left, right } }; }
+
+Abstraction = LPAREN _ LAMBDA _ param:Variable _ DOT _ body:LambdaTerm RPAREN { return { abstraction: { param, body } }; }
+
+Variable = param:[a-zA-Z0-9]+ { return param.join(""); }
+
+LPAREN = "("
+RPAREN = ")"
+DOT = "."
+LAMBDA = "λ" / "\\"
+
+_ = ("\n" / " " / "\t" / "\r\n")*