[plt-scheme] Example of typed lexer/parser

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Tue Mar 10 10:01:40 EDT 2009


So is anyone up to experimenting with macros that would unfold
this into typed scheme? -- Matthias



On Mar 10, 2009, at 8:47 AM, hendrik at topoi.pooq.com wrote:

> On Tue, Mar 10, 2009 at 11:01:28AM +0000, Paulo J. Matos wrote:
>> Hi all,
>>
>> I am trying to type a lexer/parser I have. Are there any examples how
>> there on how to do this?
>
> I don't know if there are any systems already around in PLT Scheme  
> to do
> this, but I suspect not.
>
> The way it ought to be done is:
>
> A parser tree has various constructors, such as constructors for
> subcript expressions, sums, assignments, variable declarations,
> functions, etc.
>
> These tend to group themselves into various kinds, which have similar
> syntactic and semantic possibilities in the language, for example,
> subscripts, sums, and variables are all expressions.
>
> You desgnate (abstract) types for kinds like "expression" and let the
> specific varieties of expressions (such as subscripted expressions,  
> uses
> of variables, etc.) correspond to derived subtypes (in the
> object-oriented inheritance sense).
>
> Nonterminals can be typed with the specific subtypes when the
> productions are that restricted, but usually you'll have to use the  
> more
> generic kind.
>
> These two levels in the inheritance hierarch seem to be enough for
> programming language syntax.  Whether the semantics has enough
> commonality to have further intermediate levels is another matter.
>
> If you translate this to a recursive-descent parser, of course the
> nonterminal will be translated to a function that optionally
> returns a value of the appropriate type.  If subtyping is implemented
> properly for function types, this should go through without a hitch.
> Otherwise you'll be stuck using the wider kinds for all nonterminals
> instead of the more specific ones where the grammar would seem to make
> it possible.
>
> -- hendrik
> _________________________________________________
>   For list-related administrative tasks:
>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme



Posted on the users mailing list.