rep_lang
rep_lang copied to clipboard
abstract / concrete syntax interface invariant checking
I want to note an issue with interfaces - if folks define their own parsers (via their own concrete syntax crate, an ability which we intend to support later) then we will need to define some invariants for the construction of abstract syntax trees. for one, avoiding reserved keywords. if we expose the Expr
type, then "invalid" names could be inserted into it.
one way around this would be to have a function fn check_expr(expr: &Expr) -> bool
which runs checks on whatever expr is passed in from a concrete syntax module, and asserts that it works with the runtime/abstract syntax machinery.