[PRL] space-saving tricks
Dave Herman
dherman at ccs.neu.edu
Wed Oct 4 22:22:26 EDT 2006
I'm working on a paper where I define the semantics of a language via
translation to a target language which is an extension of the original
language. The target language is almost exactly the same as the source
language, except for one extra syntactic form and a couple new type rules.
When we write papers that describe a language incrementally, we describe
later languages via extension of earlier ones, e.g.:
e ::= ... | new form
This is meant to extend the definition of e. In my case, I want to
define a language that is an extension of the first language, while
still keeping it distinct from the first language. More concretely, it
might look something like this:
Source language:
e ::= x | \x:T.e | e e
Target language:
e ::= ... | <T> e
This defines two different languages, and the latter is defined as an
extension of the former (in the OO sense, i.e., it's an "open
recursion") -- but this doesn't change the definition of the former.
Does that make sense? Does it seem clear enough? It seems a shame to
completely rewrite the definitions, e.g.:
Source language:
e ::= x | \x:T.e | e e
Target language:
t ::= x | \x:T.t | t t | <T> t
Of course, the nice thing about the latter is that it's more honest and
more explicit. Especially if you need to talk about the two languages at
the same time and keep them separate. But in my case I'm really just
talking about a simple translation from source to target language, and
after that point I never deal with the source language.
Thanks,
Dave
More information about the PRL
mailing list