summaryrefslogtreecommitdiff
path: root/src/interpreter/parser.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/interpreter/parser.ts')
-rw-r--r--src/interpreter/parser.ts35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/interpreter/parser.ts b/src/interpreter/parser.ts
new file mode 100644
index 0000000..ea07796
--- /dev/null
+++ b/src/interpreter/parser.ts
@@ -0,0 +1,35 @@
+import peggyParser from "./PeggyParser.js";
+
+export type Application = {
+ application: {
+ left: LambdaTerm;
+ args: Array<LambdaTerm>;
+ };
+};
+
+export type Abstraction = {
+ abstraction: {
+ param: Variable;
+ body: LambdaTerm;
+ };
+};
+
+export type Variable = string;
+
+export type LambdaTerm = Application | Abstraction | Variable;
+
+export const isApplication = (term: LambdaTerm): term is Application => {
+ return (term as Application).application !== undefined;
+};
+
+export const isAbstraction = (term: LambdaTerm): term is Abstraction => {
+ return (term as Abstraction).abstraction !== undefined;
+};
+
+export const isVariable = (term: LambdaTerm): term is Variable => {
+ return typeof term === "string";
+};
+
+export const parse = (term: string) => {
+ return peggyParser.parse(term, { library: true });
+};