[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re: "alternative1 | alternative2" to " alternative1* alternative2* " ast transformation



Thank you for your help.. tried it out and seems to be almost there, though
still getting an error.
Tried making a little example which replicates the problem.

------------------ code begin ------------------
Tokens

parent = 'parent';

import = 'import';

promote = 'promote';

container = 'container';

variable = 'variable';

public = 'public';

private = 'private';

Productions

object {-> slots} = slot*

{-> New slots([slot.parent_slot], [slot.promote_slot],

[slot.container_slot], [slot.import_slot], [slot.variable_slot],

[slot.public_slot], [slot.private_slot])};

slot {-> parent_slot promote_slot container_slot import_slot variable_slot
public_slot private_slot} =

{parent_slot} parent_slot {-> parent_slot Null Null Null Null Null Null} |

{promote_slot} promote_slot {-> Null promote_slot Null Null Null Null Null}
|

{container_slot} container_slot {-> Null Null container_slot Null Null Null
Null} |

{import_slot} import_slot {-> Null Null Null import_slot Null Null Null} |

{variable_slot} variable_slot {-> Null Null Null Null variable_slot Null
Null} |

{public_slot} public_slot {-> Null Null Null Null Null public_slot Null} |

{private_slot} private_slot {-> Null Null Null Null Null Null private_slot};

parent_slot = parent;

import_slot = import;

promote_slot = promote;

container_slot = container;

variable_slot = variable;

public_slot = public;

private_slot = private;

Abstract Syntax Tree

slots =

parent_slot* promote_slot* container_slot* import_slot*

variable_slot* public_slot* private_slot*;

parent_slot = parent;

import_slot = import;

promote_slot = promote;

container_slot = container;

variable_slot = variable;

public_slot = public;

private_slot = private;

------------------ code end ------------------

terminates with error: "[19,28] expecting PPromoteSlot when Null was found"

----- Original Message ----- 
From: "Etienne Gagnon" <gagnon.etienne_m@uqam.ca>
To: "Søren Andreasen" <sra@mail.dk>
Cc: <sablecc-list@sable.mcgill.ca>
Sent: Friday, April 30, 2004 15:31
Subject: Re: "alternative1 | alternative2" to " alternative1* alternative2*
" ast transformation


> Hi Soeren,
>
> First, your AST should be changed to:
>
> /***********************************************************
> § MI 1.00.00 Abstract Syntax Tree root
> ***********************************************************/
> object = slots;
>
> /***********************************************************
> § MI 2.00.00 Global slots
> ***********************************************************/
> slots =
>    parent_slot* promote_slot* container_slot* import_slot*
>      variable_slot* public_slot* private_slot*;
>
>
> Now, here's alittle trick.
>
>
> object =
>
>    slot*
>      {-> New slots([slot.parent_slot], [slot.promote_slot],
>          [slot.container_slot], ...) };
>
> slot
>      {-> parent_slot promote_slot container_slot ... } =
>
>    {parent_slot} parent_slot
>      [-> parent_slot Null Null ... } |
>
>    {promote_slot} promote_slot
>      [-> Null promote_slot Null ... } |
>
>    {container_slot} container_slot
>      [-> Null Null container_slot ... } |
> ...
>
>
> Have fun!
>
> Etienne
>
> Søren Andreasen wrote:
> > Hi,
> >
> > I have a really big problem. My syntax does not require a bunch of
> > alternatives to appear in a specific order.
> > But I would like to sort them in my AST.
> >
> > Somethin like:
> > -----------------------------------
> > Productions
> >
> > /***********************************************************
> > § MI 1.00.00 Abstract Syntax Tree root
> > ***********************************************************/
> > object = slot*;
> >
> > /***********************************************************
> > § MI 2.00.00 Global slots
> > ***********************************************************/
> > slot =
> >   {import_slot} import_slot |
> >   {variable_slot} variable_slot |
> >   {public_slot} public_slot |
> >   {private_slot} private_slot;
> >
> > <...>
> >
> > Abstract Syntax Tree
> >
> > /***********************************************************
> > § MI 1.00.00 Abstract Syntax Tree root
> > ***********************************************************/
> > object = slot*;
> >
> > /***********************************************************
> > § MI 2.00.00 Global slots
> > ***********************************************************/
> > slot = parent_slot* promote_slot* container_slot* import_slot*
> > variable_slot* public_slot* private_slot*;
> > -----------------------------------
> >
> > No matter how I try I can't get it to work.. Please help!
> >
> > Regards, Soeren
> >
> >
> >
>
> -- 
> Etienne M. Gagnon, Ph.D.             http://www.info.uqam.ca/~egagnon/
> SableVM:                                       http://www.sablevm.org/
> SableCC:                                       http://www.sablecc.org/
>