[Soot-list] Shimple -> Continuation Passing Style

Chris Pickett chris.pickett at mail.mcgill.ca
Mon Jan 29 23:56:26 EST 2007


J Malcolm wrote:
> Chris Pickett <chris.pickett at mail.mcgill.ca> writes:
> 
>> No, forget about Java, your input files would be a textual
>> representation of the toy SSA IR.
> 
> I'm thinking that, since toy SSA to CPS is seemingly trivial (Kelsey
> 1995 and Appel's texts "Modern Compiler Implementation"), I can go
> directly to getting that basic framework up in Soot.  The toy SSA->CPS
> algorithm is really quite simple.

So then actually just implement it first if it's so simple.  Getting 
your head around that and SableCC in two weeks, well, I'd say that was a 
realistic target.  If it's too easy, try adding some Java-like features 
and then figure out how to deal with them.  At some point it will become 
too cumbersome and then you'll say, OK, I feel like doing this in Soot 
now.  The whole point is just to reduce the complexity by breaking it up 
into manageable pieces.

> Any specific Java stuff you have in mind that I will hit?

I really don't know that much about functional languages, so I'll just 
list all of the Java features I know to be problematic in general:

object allocation
static (class) and dynamic (object) fields
virtual functions
primitive vs. object types
pointers
native methods
exceptions
class loading
threads
finals
volatiles
synchronization

>> example.toy_ssa (written by you)
>>      |
>>      | (SableCC-generated parser)
>>      |
>>      V
>> in-memory toy SSA IR
>>      |
>>      | (your SSA->CPS compiler)
>>      |
>>      V
>> in-memory toy CPS IR
>>      |
>>      | (SableCC-generated printer)
>>      |
>>      V
>> example.toy_cps (which you manually compare against example.toy_ssa)
> 
> Ahh, I see.  The SSA->CPS compiler will be a series of switch
> statements, basically implementing the denotational semantics in
> Kelsey's paper.  The algorithm reproduced in Appel's book for his toy
> language is less than a full page with its maybe 8 or so cases.
> 
> A stripped down Shimple/Java would have the same basic cases.  Starting
> to compile a list of things that will be tricky, I see method invocation
> (virtual, static, etc.) and array access as nontrivial.

For starters.  See above :)

> The printer is obviously trivial since it can be generated in a nested
> fashion with S-expressions.

Well, you'll have this CPS IR, and therefore you'll also have a SableCC 
grammar for that IR (unless for some reason you intend on building your 
CPS IR without a grammar, but I don't recommend that), and so finally 
you'll also have a mechanism to print out something in that 
IR---literally ast.toString() IIRC.  (I possibly don't.)

Cheers,
Chris


More information about the Soot-list mailing list