From 838bb18630c00c66eeb6bc7e6593aa889065dddb Mon Sep 17 00:00:00 2001 From: Joeri Exelmans Date: Wed, 4 Dec 2024 15:49:02 +0100 Subject: [PATCH] extend concrete syntax: edge can be defined as (src -> tgt) OR (tgt <- src) --- concrete_syntax/textual_od/parser.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/concrete_syntax/textual_od/parser.py b/concrete_syntax/textual_od/parser.py index 8f55c15..054f1bf 100644 --- a/concrete_syntax/textual_od/parser.py +++ b/concrete_syntax/textual_od/parser.py @@ -33,9 +33,10 @@ INDENTED_CODE: /```[^`]*```/ type_name: IDENTIFIER # name (optional) type -object: [IDENTIFIER] ":" type_name [link_spec] ["{" slot* "}"] +object: [IDENTIFIER] ":" type_name [link_spec | rev_link_spec] ["{" slot* "}"] -link_spec: "(" IDENTIFIER "->" IDENTIFIER ")" +link_spec: "(" IDENTIFIER "->" IDENTIFIER ")" +rev_link_spec: "(" IDENTIFIER "<-" IDENTIFIER ")" slot: IDENTIFIER "=" literal ";" """ @@ -64,6 +65,10 @@ def parse_od(state, m_text, mm, type_transform=lambda type_name: type_name): [src, tgt] = el return (src, tgt) + def rev_link_spec(self, el): + [tgt, src] = el # <-- reversed :) + return (src, tgt) + def type_name(self, el): type_name = el[0] if type_name in primitive_types: