diff options
Diffstat (limited to 'src/interpreter/parser.ts')
-rw-r--r-- | src/interpreter/parser.ts | 35 |
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 }); +}; |