[Baypiggies] puzzle: binding invocation context for a function call during a class declaration

Bill Janssen janssen at parc.com
Wed Jan 5 18:41:50 CET 2011


Bill Janssen <janssen at parc.com> wrote:

> I'm puzzling out how one would ape a declarative language in Python.
> For instance, take a language that has declarations like
> 
>   concept Foo {
>     is-a A;
>     is-a B;
>     part-of X;
> 
>     public int counter;
>     public analogue bar;
>   }
> 
>   expression Bletch {
> 
>     expresses Foo;
> 
>     counter = 3;
>   }
> 
> where "concept", "public", "is-a", "part-of", "int", "analogue",
> "expression", and "expresses" are all keywords.
> 
> Since it's largely declarative, I'd naturally express it in Python as a
> set of class declarations:
> 
>   from mylang import is_a, part_of, Concept, Expression, attribute, public, analogue, expresses
> 
>   class Foo (Concept):
> 
>     is_a(A);
>     is_a(B);
>     part_of(X);
> 
>     counter = attribute(public, int)
>     bar = attribute(public, analogue)
> 
>   class Bletch (Expression):
> 
>     expresses(Foo)
>     counter = 3

I think I've figured out what I need here.

First of all, I'm not going to execute this "code", so I don't need
things to work at execution time.  What I need is the compiler, and
the resulting AST.  If you look at the AST for the following:

   class Foo (Bar):

      is_a(Bletch)

you get this:

  Module(None,
    Stmt([Class('Foo', [Name('Bar')],
      None,
      Stmt([Discard(CallFunc(Name('is_a'), [Name('Bletch')], None, None))])
    )]
  ))

So the interpreter for "mylang" could just run the compiler, and
interpret the AST here, and it would have the info I want to pass.

Thanks for the discussion!

Bill


More information about the Baypiggies mailing list