-------------------------------- Begin ----------------------------------------- Tokens
slot {-> parent_slot*?* promote_slot*?* container_slot*?* import_slot*?* variable_slot? public_slot*?* private_slot*?*} =
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/