archives

OO type systems and BNFs

I'm looking at a type system that attempts to combine aspects of syntactic and semantic analysis. Say in a BFS, we have a grammar grammar production for a non-terminal like:

statement := block | method-call | assignment | ...

Now, to me, it simply looks like an OO type declaration with a closed set of subtypes; i.e.,

abstract class statement { ... }
class block : statement { ... }
class method-call : statement { ... }
class assignment : statement { ... }

The BNF approach resembles ML datatype declarations, which exhibit sybtyping. The OO approach is more extensible (new sub-classes can be added anytime) but lacks the ability to define other aspects of syntax (adjacent elements). Also, we never really think of a type as something to drive refinement autoamtically (e.g., an automatic specialization from statement to method-call).

So I'm wondering if anyone has ever tried to unify "types" with "grammars" before? I'm sure this isn't an original idea, but I'm not sure what keywords to google (term rewriting, transformational PL, ... haven't gotten me anywhere).