From bc55606a79820d60bdfb57c62fd692f326d07b46 Mon Sep 17 00:00:00 2001 From: Christoph Stahl Date: Tue, 27 Sep 2022 17:17:59 +0200 Subject: [PATCH] initial commit --- betarules.rules | 5 +++++ lambda.lark | 8 ++++++++ parsetest.py | 11 +++++++++++ termdef.lark | 19 +++++++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 betarules.rules create mode 100644 lambda.lark create mode 100644 parsetest.py create mode 100644 termdef.lark diff --git a/betarules.rules b/betarules.rules new file mode 100644 index 0000000..f41eead --- /dev/null +++ b/betarules.rules @@ -0,0 +1,5 @@ +term := Var | "\\" Var "." term @ label="abstraction" | term " " term @ label="application" | "(" term ")" @ hidden=True +simple_type := Var | simple_type "->" simple_type @ label="arrow" + +assoc "application" left +assoc "arrow" right diff --git a/lambda.lark b/lambda.lark new file mode 100644 index 0000000..f0e8adb --- /dev/null +++ b/lambda.lark @@ -0,0 +1,8 @@ +start: term +abstraction: "\\" VARIABLE "." term +application: term " " term +term: abstraction | application | VARIABLE | "(" term ")" + +VARIABLE: LETTER+ + +%import common.LETTER diff --git a/parsetest.py b/parsetest.py new file mode 100644 index 0000000..1f88b52 --- /dev/null +++ b/parsetest.py @@ -0,0 +1,11 @@ +from lark import Lark + + +with open("termdef.lark") as parse_file: + parser = Lark(parse_file) + +with open("betarules.rules") as b: + rules_text = "\n".join(b.readlines()) + +print(parser.parse(rules_text).pretty()) + diff --git a/termdef.lark b/termdef.lark new file mode 100644 index 0000000..f2dcdc6 --- /dev/null +++ b/termdef.lark @@ -0,0 +1,19 @@ +start: rule+ +rule: ntermdef | assocdef +ntermdef: IDENTIFIER ":=" rhs ("|" rhs)* +rhs: token+ ("@" annotation+)? +token: STRING | IDENTIFIER +annotation: IDENTIFIER "=" value +assocdef: "assoc" STRING lr +lr: LEFT | RIGHT +LEFT: "left" +RIGHT: "right" +WORD: ("a".."z" | "0".."9")+ + +value: STRING | SIGNED_NUMBER | "True" | "False" + +%import common.WS +%import common.SIGNED_NUMBER +%ignore WS +%import common.ESCAPED_STRING -> STRING +%import common.CNAME -> IDENTIFIER