import re import lark from lark import Lark import thue.core import thue.prods grammar = r''' program: suite suite: prod* ?prod: _named_prod | _direct_prod _named_prod : alias _direct_prod : _compound_prod | _rule_prod | _literal_prod | _io_prod _io_prod : output | input _compound_prod : cont | sing _rule_prod : full | part _literal_prod : lit | ref alias : name "=" prod // production alias output: "~" prod // output production input: ":::" // input production cont : "{" suite "}" // continual production sing : "[" suite "]" // singular production full : _direct_prod "=>" prod // full application part : ctx "::=" prod // partial application ref : name // production reference lit : STRING // literal production name : CNAME // named production ctx : REGEX CNAME : /[a-z_][a-z0-9_]*/i STRING: /(r)?(['"])(.*?)(?