[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/
>