diff --git a/.bzrignore b/.bzrignore
index 6e4e32b9a82793a418aab0ea43411d7f1cb12ef1..0e898a1d90654a6287c295470ca29175a3742cdc 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -19,9 +19,3 @@ examples/x3d/X3DAST
 GeneratedAspects.jrag
 Parser.java
 PrettyPrint.java
-xdf.ast
-xdf.jjt
-examples/actors/xdf/xdfAST
-examples/actors/xlim/xlimAST
-examples/actors/xlimAST
-examples/actors/xdfAST
diff --git a/examples/actors/xdf/MergeActors.jrag b/examples/actors/xdf/MergeActors.jrag
index 4dcf792c6ddea69747ebc7edd8b8245a388dd869..5849d6859660e7484cc24d7f67b8095598c1cca5 100644
--- a/examples/actors/xdf/MergeActors.jrag
+++ b/examples/actors/xdf/MergeActors.jrag
@@ -45,6 +45,8 @@ aspect MergeActors {
 				i.next = i.next.next;
 			}
 		}
+		// Now generate files for the newly merged actor instances.
+		for (Instance i : getInstances()) {}
 	}
 // 	void Connection.mergeActors() {
 // 		Instance src = getSource();
@@ -72,6 +74,11 @@ aspect Misc {
 		set.add(this);
 		return set;
 	}
+
+	public HashSet<Instance> XDF.getInstances() {
+		return getInstances(new HashSet<Instance>());
+	}
+	syn HashSet<Instance> Element.getInstances(HashSet<Instance> inst) = inst;
 }
 
 aspect Rewrites {
@@ -82,7 +89,7 @@ aspect Rewrites {
 			return new ComplexElement();
 		}
 	}
-	rewrite Instance
+	rewrite Instance {
 		when (remove_me) to ComplexElement {
 			return new ComplexElement();
 		}
diff --git a/examples/actors/xdf/SSR.jrag b/examples/actors/xdf/SSR.jrag
index 9f972178f30a927aa372e383b1f31e1ab8d731f2..6038b7fabc1d1e72e7d28f88107c326656e81ecb 100644
--- a/examples/actors/xdf/SSR.jrag
+++ b/examples/actors/xdf/SSR.jrag
@@ -30,15 +30,15 @@ aspect SSR {
 aspect SDF {
 	syn boolean Instance.isSDF() = xlimInstance().isSDF();
 
-	syn xlimAST.design Instance.xlimInstance() {
+	syn xlimAST.Start Instance.xlimInstance() {
 		try {
  			System.out.println("Trying to open: "+name());
 			xlimAST.XmlParser parser = new xlimAST.XmlParser(new FileReader(name()+".xlim"));
-			return (xlimAST.design) parser.Start().getSpecification().getElement(0);
+			return parser.Start();
 		} catch (Exception e) {
 			System.out.println( name()+".xlim not found");
 // 			e.printStackTrace();
-			return new xlimAST.design();
+			return new xlimAST.Start();
 		}
 	}
 }
diff --git a/examples/actors/xdf/xdf.ast b/examples/actors/xdf/xdf.ast
new file mode 100644
index 0000000000000000000000000000000000000000..a340e597ed28fca467acf44a18c4167c76b90714
--- /dev/null
+++ b/examples/actors/xdf/xdf.ast
@@ -0,0 +1,68 @@
+// -*-Java-*- 
+
+// Automatically generated JastAdd abstract grammar file 
+// Predefined types
+Start ::= Specification;
+Specification ::= XmlHeader [DocType] Element*;
+XmlHeader ::= Attribute*;
+DocType ::= <STRING>;
+abstract Thing : ComplexElement ::=;
+abstract Element;
+ComplexElement : Element ::=  Attribute* Element*;
+ValueElement : ComplexElement;
+abstract SimpleElement : Element;
+StringElement : SimpleElement ::= <LITERAL>;
+IntElement : SimpleElement ::= <LITERAL>;
+FloatElement : SimpleElement ::= <LITERAL>;
+Attribute ::= AttrValue;
+AttrValue ::= <LITERAL>;
+Encoding : Attribute ::=;
+Version : Attribute ::=;
+XmlnsXsi : Attribute ::=;
+XsiNoNamespaceSchemaLocation : Attribute ::=;
+
+// Generated types
+Output : ComplexElement ::= ;
+Class : ComplexElement ::= ;
+Op : ComplexElement ::= ;
+Parameter : ComplexElement ::= ;
+QID : ComplexElement ::= ;
+text_end_line : Attribute ::= ;
+Connection : ComplexElement ::= ;
+Note : ComplexElement ::= ;
+text_begin_line : Attribute ::= ;
+name : Attribute ::= ;
+from : Attribute ::= ;
+Instance : ComplexElement ::= ;
+Entry : ComplexElement ::= ;
+dst_port : Attribute ::= ;
+Guards : ComplexElement ::= ;
+src : Attribute ::= ;
+ID : ComplexElement ::= ;
+Action : ComplexElement ::= ;
+Import : ComplexElement ::= ;
+Port : ComplexElement ::= ;
+literal_kind : Attribute ::= ;
+Transition : ComplexElement ::= ;
+assignable : Attribute ::= ;
+initial_state : Attribute ::= ;
+ActionTags : ComplexElement ::= ;
+Args : ComplexElement ::= ;
+dst : Attribute ::= ;
+id : Attribute ::= ;
+Expr : ComplexElement ::= ;
+port : Attribute ::= ;
+text_begin_col : Attribute ::= ;
+src_port : Attribute ::= ;
+text_end_col : Attribute ::= ;
+value : Attribute ::= ;
+Decl : ComplexElement ::= ;
+Input : ComplexElement ::= ;
+kind : Attribute ::= ;
+Stmt : ComplexElement ::= ;
+Type : ComplexElement ::= ;
+XDF : ComplexElement ::= ;
+_Attribute : ComplexElement ::= ;
+Schedule : ComplexElement ::= ;
+_to : Attribute ::= ;
+Actor : ComplexElement ::= ;
diff --git a/examples/actors/xdf/xdf.jjt b/examples/actors/xdf/xdf.jjt
new file mode 100644
index 0000000000000000000000000000000000000000..543d1e7daa4a3640dea3a7ab428c0ec67e785f51
--- /dev/null
+++ b/examples/actors/xdf/xdf.jjt
@@ -0,0 +1,589 @@
+/* -*-Java-*- */
+
+options {
+    MULTI                       = true;
+    VISITOR                     = true;
+    NODE_DEFAULT_VOID           = true;
+    NODE_SCOPE_HOOK             = false;
+    NODE_PREFIX                 = "";
+    JAVA_UNICODE_ESCAPE         = true;
+    STATIC                      = false;
+} 
+
+PARSER_BEGIN(XmlParser)
+    package xdfAST;
+    public class XmlParser {
+}
+PARSER_END(XmlParser)
+
+//----------------------------------------------//
+//                LEXICAL TOKENS                //
+//----------------------------------------------//
+<DEFAULT,BOUNDS> SPECIAL_TOKEN : /* WHITE SPACE */
+{
+    " "
+    |
+    "\t"
+    |
+    "\n"
+    |
+    "\r"
+    |
+    "\f"
+}// WHITE SPACE
+
+<DEFAULT,BOUNDS> SPECIAL_TOKEN : /* COMMENTS */ 
+{
+    < "<!--" ( ~["-"] | ( "-" ~["-"] ) )* "-->">
+}// COMMENTS
+
+<DEFAULT> TOKEN : /* Reserved Words */
+{
+   <XML		: "xml">
+ | <DOCTYPE : "DOCTYPE">
+ | <PUBLIC : "PUBLIC">
+ | <encoding		: "encoding">
+ | <version		: "version">
+ | <XsiNoNamespaceSchemaLocation		: "xsi:noNamespaceSchemaLocation">
+ | <XmlnsXsi		: "xmlns:xsi">
+ | <Output		: "Output" >
+ | <Class		: "Class" >
+ | <Op		: "Op" >
+ | <Parameter		: "Parameter" >
+ | <QID		: "QID" >
+ | <text_end_line		: "text-end-line" >
+ | <Connection		: "Connection" >
+ | <Note		: "Note" >
+ | <text_begin_line		: "text-begin-line" >
+ | <name		: "name" >
+ | <from		: "from" >
+ | <Instance		: "Instance" >
+ | <Entry		: "Entry" >
+ | <dst_port		: "dst-port" >
+ | <Guards		: "Guards" >
+ | <src		: "src" >
+ | <ID		: "ID" >
+ | <Action		: "Action" >
+ | <Import		: "Import" >
+ | <Port		: "Port" >
+ | <literal_kind		: "literal-kind" >
+ | <Transition		: "Transition" >
+ | <assignable		: "assignable" >
+ | <initial_state		: "initial-state" >
+ | <ActionTags		: "ActionTags" >
+ | <Args		: "Args" >
+ | <dst		: "dst" >
+ | <id		: "id" >
+ | <Expr		: "Expr" >
+ | <port		: "port" >
+ | <text_begin_col		: "text-begin-col" >
+ | <src_port		: "src-port" >
+ | <text_end_col		: "text-end-col" >
+ | <value		: "value" >
+ | <Decl		: "Decl" >
+ | <Input		: "Input" >
+ | <kind		: "kind" >
+ | <Stmt		: "Stmt" >
+ | <Type		: "Type" >
+ | <XDF		: "XDF" >
+ | <_Attribute		: "Attribute" >
+ | <Schedule		: "Schedule" >
+ | <_to		: "to" >
+ | <Actor		: "Actor" >
+}// Reserved Words
+
+<DEFAULT, BOUNDS> TOKEN : /* LITERALS */
+{
+    < INTEGER_LITERAL:
+        <DECIMAL_LITERAL> (["l","L"])?
+        |
+        <HEX_LITERAL> (["l","L"])?
+        |
+        <OCTAL_LITERAL> (["l","L"])?
+    >
+    |
+    < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* >
+    |
+    < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ >
+    |
+    < #OCTAL_LITERAL: "0" (["0"-"7"])* >
+    |
+    < FLOAT_LITERAL:
+        (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? (["f","F","d","D"])?
+        |
+        "." (["0"-"9"])+ (<EXPONENT>)? (["f","F","d","D"])?
+        |
+        (["0"-"9"])+ <EXPONENT> (["f","F","d","D"])?
+        |
+        (["0"-"9"])+ (<EXPONENT>)? ["f","F","d","D"]
+    >
+    |
+    < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
+    |
+    < CHARACTER_LITERAL:
+        "'"
+        (   (~["'","\\","\n","\r"])
+            |
+            ("\\"
+                (   ["n","t","b","r","f","\\","'","\""]
+                    |
+                    ["0"-"7"] ( ["0"-"7"] )?
+                    |
+                    ["0"-"3"] ["0"-"7"] ["0"-"7"]
+                )
+            )
+        )
+        "'"
+    >
+    |
+    < STRING_LITERAL:
+        ("\""
+        (   (~["\"","\n","\r"])
+        )*
+        "\"")
+       | ("\'"
+        (   (~["\'","\n","\r"])
+        )*
+        "\'")
+    >
+}// LITERALS
+<DEFAULT, BOUNDS> TOKEN : /* IDENTIFIERS */
+{
+    < IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>|"-")* >
+    |
+    < #LETTER:
+        [
+        "\u0024",
+        "\u0041"-"\u005a",
+        "\u005f",
+        "\u0061"-"\u007a",
+        "\u00c0"-"\u00d6",
+        "\u00d8"-"\u00f6",
+        "\u00f8"-"\u00ff",
+        "\u0100"-"\u1fff",
+        "\u3040"-"\u318f",
+        "\u3300"-"\u337f",
+        "\u3400"-"\u3d2d",
+        "\u4e00"-"\u9fff",
+        "\uf900"-"\ufaff"
+        ]
+    >
+    |
+    < #DIGIT:
+        [
+        "\u0030"-"\u0039",
+        "\u0660"-"\u0669",
+        "\u06f0"-"\u06f9",
+        "\u0966"-"\u096f",
+        "\u09e6"-"\u09ef",
+        "\u0a66"-"\u0a6f",
+        "\u0ae6"-"\u0aef",
+        "\u0b66"-"\u0b6f",
+        "\u0be7"-"\u0bef",
+        "\u0c66"-"\u0c6f",
+        "\u0ce6"-"\u0cef",
+        "\u0d66"-"\u0d6f",
+        "\u0e50"-"\u0e59",
+        "\u0ed0"-"\u0ed9",
+        "\u1040"-"\u1049"
+        ]
+    >
+}// IDENTIFIERS
+<DEFAULT,BOUNDS> TOKEN : /* SEPARATORS */
+{
+     < LBRACE               : "{"    >
+    | < RBRACE               : "}"    >
+    | < LBRACKET             : "["    >
+    | < RBRACKET             : "]"    >
+    | < SEMICOLON            : ";"    >
+    | < LTSLASH              : "</"    > : DEFAULT
+    | < LTBANG               : "<!"    > : DEFAULT
+    | < LT                   : "<"    > : DEFAULT
+    | < LTQ                  : "<?"    > : DEFAULT
+    | < GT                   : ">"    > : BOUNDS
+    | < QGT                  : "?>"    > : BOUNDS
+}// SEPARATORS
+<DEFAULT,BOUNDS> TOKEN : /* OPERATORS */
+{
+      < ASSIGN               : "="    >
+}// OPERATORS
+Start Start() #Start : {}
+{
+  Specification()
+  { return jjtThis; }
+}
+
+void Specification() #Specification : {}
+{
+  XmlHeader()
+  ( [DocType()] ) #Opt(true)
+  ElementList()
+}
+
+void DocType() #DocType : {String s;}
+{
+  <LTBANG>
+  {
+		s = new String();
+		if (getToken(1).kind != GT ) {
+		   s += getData();
+        } 
+  }       
+     {jjtThis.setSTRING(s);}
+}
+
+JAVACODE
+String getData() {
+	StringBuffer s = new StringBuffer();
+//     jjtThis.someData = true;
+    while ((getToken(1)).kind != LT && (getToken(1)).kind != LTSLASH) {
+		Token t = getNextToken();
+		if (t.specialToken != null) {
+			Token tmp_t = t.specialToken;
+			while (tmp_t.specialToken != null) {
+				tmp_t = tmp_t.specialToken;
+			}
+			while (tmp_t != null) {
+				s.append(tmp_t.image);
+				tmp_t = tmp_t.next;
+			}
+		}
+		s.append(t.image);
+       s.append(" ");
+	}
+	return s.toString();
+}
+
+void XmlHeader() #XmlHeader : {}
+{
+  <LTQ> <XML> AttributeList() <QGT>
+}
+
+void ElementList() #List : {}
+{
+  (Element())*
+}
+
+void AttributeList() #List : {}
+{
+  (Attribute())*
+}
+
+void AttrValue() #AttrValue : { Token t; }
+{
+    t = <STRING_LITERAL>
+        {jjtThis.setLITERAL(t.image);}
+}
+
+void Encoding() #Encoding : {}
+{
+  <encoding> "=" AttrValue()
+}
+
+void Version() #Version : {}
+{
+  <version> "=" AttrValue()
+}
+
+void XsiNoNamespaceSchemaLocation() #XsiNoNamespaceSchemaLocation : {}
+{
+  <XsiNoNamespaceSchemaLocation> "=" AttrValue()
+}
+
+void XmlnsXsi() #XmlnsXsi : {}
+{
+  <XmlnsXsi> "=" AttrValue()
+}
+
+void Element()  : {}
+{
+ ( <LT> (
+  ActionTags()
+  | Stmt()
+  | _Attribute()
+  | Action()
+  | QID()
+  | Transition()
+  | Output()
+  | Parameter()
+  | XDF()
+  | Args()
+  | Entry()
+  | Expr()
+  | Note()
+  | Guards()
+  | Actor()
+  | Decl()
+  | ID()
+  | Type()
+  | Import()
+  | Op()
+  | Port()
+  | Input()
+  | Class()
+  | Schedule()
+  | Connection()
+  | Instance()
+ )) 
+ | SimpleElement()
+}
+
+void SimpleElement() : {}
+{
+    IntElement()
+	| FloatElement()
+  	| StringElement()
+}
+
+void IntElement() #IntElement : { Token t; }
+{
+    t = <INTEGER_LITERAL>
+	{jjtThis.setLITERAL(t.image);}
+}
+
+void FloatElement() #FloatElement : { Token t; }
+{
+    t = <FLOAT_LITERAL>
+	{jjtThis.setLITERAL(t.image);}
+}
+
+void StringElement() #StringElement : { Token t;String s; }
+{
+	t = <IDENTIFIER>
+	{
+		s = t.image;
+		if (getToken(1).kind != GT ) {
+		s += getData();
+	}
+	}
+        {jjtThis.setLITERAL(s);}
+}
+void Attribute()  : {}
+{
+  Encoding()
+ | Version()
+ | XsiNoNamespaceSchemaLocation()
+ | XmlnsXsi()
+  | _to()
+  | literal_kind()
+  | src()
+  | kind()
+  | text_begin_col()
+  | port()
+  | dst_port()
+  | initial_state()
+  | id()
+  | value()
+  | from()
+  | text_end_line()
+  | text_end_col()
+  | src_port()
+  | assignable()
+  | text_begin_line()
+  | dst()
+  | name()
+  
+}
+
+void Output() #Output : {}
+{
+   <Output> AttributeList()
+  ( <GT> ElementList()  "</" <Output>  ">" | ElementList() "/>" )
+}
+void Class() #Class : {}
+{
+   <Class> AttributeList()
+  ( <GT> ElementList()  "</" <Class>  ">" | ElementList() "/>" )
+}
+void Op() #Op : {}
+{
+   <Op> AttributeList()
+  ( <GT> ElementList()  "</" <Op>  ">" | ElementList() "/>" )
+}
+void Parameter() #Parameter : {}
+{
+   <Parameter> AttributeList()
+  ( <GT> ElementList()  "</" <Parameter>  ">" | ElementList() "/>" )
+}
+void QID() #QID : {}
+{
+   <QID> AttributeList()
+  ( <GT> ElementList()  "</" <QID>  ">" | ElementList() "/>" )
+}
+void text_end_line() #text_end_line : {}
+{
+  <text_end_line> "=" AttrValue()
+}
+void Connection() #Connection : {}
+{
+   <Connection> AttributeList()
+  ( <GT> ElementList()  "</" <Connection>  ">" | ElementList() "/>" )
+}
+void Note() #Note : {}
+{
+   <Note> AttributeList()
+  ( <GT> ElementList()  "</" <Note>  ">" | ElementList() "/>" )
+}
+void text_begin_line() #text_begin_line : {}
+{
+  <text_begin_line> "=" AttrValue()
+}
+void name() #name : {}
+{
+  <name> "=" AttrValue()
+}
+void from() #from : {}
+{
+  <from> "=" AttrValue()
+}
+void Instance() #Instance : {}
+{
+   <Instance> AttributeList()
+  ( <GT> ElementList()  "</" <Instance>  ">" | ElementList() "/>" )
+}
+void Entry() #Entry : {}
+{
+   <Entry> AttributeList()
+  ( <GT> ElementList()  "</" <Entry>  ">" | ElementList() "/>" )
+}
+void dst_port() #dst_port : {}
+{
+  <dst_port> "=" AttrValue()
+}
+void Guards() #Guards : {}
+{
+   <Guards> AttributeList()
+  ( <GT> ElementList()  "</" <Guards>  ">" | ElementList() "/>" )
+}
+void src() #src : {}
+{
+  <src> "=" AttrValue()
+}
+void ID() #ID : {}
+{
+   <ID> AttributeList()
+  ( <GT> ElementList()  "</" <ID>  ">" | ElementList() "/>" )
+}
+void Action() #Action : {}
+{
+   <Action> AttributeList()
+  ( <GT> ElementList()  "</" <Action>  ">" | ElementList() "/>" )
+}
+void Import() #Import : {}
+{
+   <Import> AttributeList()
+  ( <GT> ElementList()  "</" <Import>  ">" | ElementList() "/>" )
+}
+void Port() #Port : {}
+{
+   <Port> AttributeList()
+  ( <GT> ElementList()  "</" <Port>  ">" | ElementList() "/>" )
+}
+void literal_kind() #literal_kind : {}
+{
+  <literal_kind> "=" AttrValue()
+}
+void Transition() #Transition : {}
+{
+   <Transition> AttributeList()
+  ( <GT> ElementList()  "</" <Transition>  ">" | ElementList() "/>" )
+}
+void assignable() #assignable : {}
+{
+  <assignable> "=" AttrValue()
+}
+void initial_state() #initial_state : {}
+{
+  <initial_state> "=" AttrValue()
+}
+void ActionTags() #ActionTags : {}
+{
+   <ActionTags> AttributeList()
+  ( <GT> ElementList()  "</" <ActionTags>  ">" | ElementList() "/>" )
+}
+void Args() #Args : {}
+{
+   <Args> AttributeList()
+  ( <GT> ElementList()  "</" <Args>  ">" | ElementList() "/>" )
+}
+void dst() #dst : {}
+{
+  <dst> "=" AttrValue()
+}
+void id() #id : {}
+{
+  <id> "=" AttrValue()
+}
+void Expr() #Expr : {}
+{
+   <Expr> AttributeList()
+  ( <GT> ElementList()  "</" <Expr>  ">" | ElementList() "/>" )
+}
+void port() #port : {}
+{
+  <port> "=" AttrValue()
+}
+void text_begin_col() #text_begin_col : {}
+{
+  <text_begin_col> "=" AttrValue()
+}
+void src_port() #src_port : {}
+{
+  <src_port> "=" AttrValue()
+}
+void text_end_col() #text_end_col : {}
+{
+  <text_end_col> "=" AttrValue()
+}
+void value() #value : {}
+{
+  <value> "=" AttrValue()
+}
+void Decl() #Decl : {}
+{
+   <Decl> AttributeList()
+  ( <GT> ElementList()  "</" <Decl>  ">" | ElementList() "/>" )
+}
+void Input() #Input : {}
+{
+   <Input> AttributeList()
+  ( <GT> ElementList()  "</" <Input>  ">" | ElementList() "/>" )
+}
+void kind() #kind : {}
+{
+  <kind> "=" AttrValue()
+}
+void Stmt() #Stmt : {}
+{
+   <Stmt> AttributeList()
+  ( <GT> ElementList()  "</" <Stmt>  ">" | ElementList() "/>" )
+}
+void Type() #Type : {}
+{
+   <Type> AttributeList()
+  ( <GT> ElementList()  "</" <Type>  ">" | ElementList() "/>" )
+}
+void XDF() #XDF : {}
+{
+   <XDF> AttributeList()
+  ( <GT> ElementList()  "</" <XDF>  ">" | ElementList() "/>" )
+}
+void _Attribute() #_Attribute : {}
+{
+   <_Attribute> AttributeList()
+  ( <GT> ElementList()  "</" <_Attribute>  ">" | ElementList() "/>" )
+}
+void Schedule() #Schedule : {}
+{
+   <Schedule> AttributeList()
+  ( <GT> ElementList()  "</" <Schedule>  ">" | ElementList() "/>" )
+}
+void _to() #_to : {}
+{
+  <_to> "=" AttrValue()
+}
+void Actor() #Actor : {}
+{
+   <Actor> AttributeList()
+  ( <GT> ElementList()  "</" <Actor>  ">" | ElementList() "/>" )
+}
diff --git a/examples/actors/xdfAST/ASTNode$State.java b/examples/actors/xdfAST/ASTNode$State.java
new file mode 100644
index 0000000000000000000000000000000000000000..04d990fd0a998785a72d716dcd861e7aaa951b39
--- /dev/null
+++ b/examples/actors/xdfAST/ASTNode$State.java
@@ -0,0 +1,51 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+class ASTNode$State extends java.lang.Object {
+    // Declared in ASTNode.ast at line 46
+
+   private int[] stack;
+
+    // Declared in ASTNode.ast at line 47
+
+   private int pos;
+
+    // Declared in ASTNode.ast at line 48
+
+   public ASTNode$State() {
+     stack = new int[64];
+     pos = 0;
+   }
+
+    // Declared in ASTNode.ast at line 52
+
+   private void ensureSize(int size) {
+     if(size < stack.length)
+       return;
+     int[] newStack = new int[stack.length * 2];
+     System.arraycopy(stack, 0, newStack, 0, stack.length);
+     stack = newStack;
+   }
+
+    // Declared in ASTNode.ast at line 59
+
+   public void push(int i) {
+     ensureSize(pos+1);
+     stack[pos++] = i;
+   }
+
+    // Declared in ASTNode.ast at line 63
+
+   public int pop() {
+     return stack[--pos];
+   }
+
+    // Declared in ASTNode.ast at line 66
+
+   public int peek() {
+     return stack[pos-1];
+   }
+
+
+}
diff --git a/examples/actors/xdfAST/ASTNode.java b/examples/actors/xdfAST/ASTNode.java
new file mode 100644
index 0000000000000000000000000000000000000000..30dd6dfb86f55dbc69f7f1aba73db17831de4e46
--- /dev/null
+++ b/examples/actors/xdfAST/ASTNode.java
@@ -0,0 +1,459 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+// Generated with JastAdd II (http://jastadd.cs.lth.se) version R20090428
+
+public class ASTNode<T extends ASTNode> extends SimpleNode  implements Cloneable, Iterable<T> {
+    public void flushCache() {
+        genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+        root_visited = -1;
+        getInstance_String_visited = new java.util.HashMap(4);
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ASTNode<T> clone() throws CloneNotSupportedException {
+        ASTNode node = (ASTNode)super.clone();
+        node.genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+        node.root_visited = -1;
+        node.getInstance_String_visited = new java.util.HashMap(4);
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ASTNode<T> copy() {
+      try {
+          ASTNode node = (ASTNode)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ASTNode<T> fullCopy() {
+        ASTNode res = (ASTNode)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 9
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    for (int i=0; i<getNumChild(); i++) {
+      getChild(i).prettyPrint(indent,pStream);
+    }
+  }
+
+    // Declared in SSR.jrag at line 16
+
+
+	void genSSR(java.io.PrintStream out) {
+		
+	}
+
+    // Declared in SSR.jrag at line 205
+
+
+	static String fix(String s) {
+		if (s.indexOf('"') == 0) {
+			return s.substring(1,s.length()-1);
+		}
+		return s;
+	}
+
+    // Declared in SSR.jrag at line 211
+
+	static String unfix(String s) {
+		if (s.indexOf('"') != 0) {
+			return "\""+s+"\"";
+		}
+		return s;
+	}
+
+    // Declared in SSR.jrag at line 221
+
+	int numChildren;
+
+    // Declared in SSR.jrag at line 222
+
+	int numChildren() {return jjtGetNumChildren();}
+
+    // Declared in ASTNode.ast at line 3
+    // Declared in ASTNode.ast line 0
+
+    public ASTNode(int i) {
+        super(i);
+    }
+
+    // Declared in ASTNode.ast at line 6
+
+    public ASTNode(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in ASTNode.ast at line 10
+
+    public ASTNode() {
+        this(0);
+
+
+    }
+
+    // Declared in ASTNode.ast at line 16
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "ASTNode");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in ASTNode.ast at line 23
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in ASTNode.ast at line 27
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in ASTNode.ast at line 32
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in ASTNode.ast at line 35
+
+
+   static public boolean generatedWithCircularEnabled = true;
+
+    // Declared in ASTNode.ast at line 36
+
+   static public boolean generatedWithCacheCycle = true;
+
+    // Declared in ASTNode.ast at line 37
+
+   static public boolean generatedWithComponentCheck = false;
+
+    // Declared in ASTNode.ast at line 38
+
+  static public boolean IN_CIRCLE = false;
+
+    // Declared in ASTNode.ast at line 39
+
+  static public int CIRCLE_INDEX;
+
+    // Declared in ASTNode.ast at line 40
+
+  static public boolean CHANGE = false;
+
+    // Declared in ASTNode.ast at line 41
+
+  static public boolean LAST_CYCLE = false;
+
+    // Declared in ASTNode.ast at line 42
+
+  static public boolean RESET_CYCLE = false;
+
+    // Declared in ASTNode.ast at line 43
+
+  public static int boundariesCrossed = 0;
+
+    // Declared in ASTNode.ast at line 70
+
+  protected static ASTNode$State state = new ASTNode$State();
+
+    // Declared in ASTNode.ast at line 71
+
+  public boolean in$Circle = false;
+
+    // Declared in ASTNode.ast at line 72
+
+  public boolean in$Circle() { return in$Circle; }
+
+    // Declared in ASTNode.ast at line 73
+
+  public void in$Circle(boolean b) { in$Circle = b; }
+
+    // Declared in ASTNode.ast at line 74
+
+  public boolean is$Final = false;
+
+    // Declared in ASTNode.ast at line 75
+
+  public boolean is$Final() { return is$Final; }
+
+    // Declared in ASTNode.ast at line 76
+
+  public void is$Final(boolean b) { is$Final = b; }
+
+    // Declared in ASTNode.ast at line 77
+
+  protected static final int REWRITE_CHANGE = 1;
+
+    // Declared in ASTNode.ast at line 78
+
+  protected static final int REWRITE_NOCHANGE = 2;
+
+    // Declared in ASTNode.ast at line 79
+
+  protected static final int REWRITE_INTERRUPT = 3;
+
+    // Declared in ASTNode.ast at line 80
+
+  @SuppressWarnings("cast") public T getChild(int i) {
+    return (T)ASTNode.getChild(this, i);
+  }
+
+    // Declared in ASTNode.ast at line 83
+
+  public static ASTNode getChild(ASTNode that, int i) {
+    ASTNode node = that.getChildNoTransform(i);
+    if(node.is$Final()) return node;
+    if(!node.mayHaveRewrite()) {
+      node.is$Final(that.is$Final());
+      return node;
+    }
+    if(!node.in$Circle()) {
+      int rewriteState;
+      int num = ASTNode.boundariesCrossed;
+      do {
+        ASTNode.state.push(ASTNode.REWRITE_CHANGE);
+        ASTNode oldNode = node;
+        oldNode.in$Circle(true);
+        node = node.rewriteTo();
+        if(node != oldNode)
+          that.setChild(node, i);
+        oldNode.in$Circle(false);
+        rewriteState = state.pop();
+      } while(rewriteState == ASTNode.REWRITE_CHANGE);
+      if(rewriteState == ASTNode.REWRITE_NOCHANGE && that.is$Final()) {
+        node.is$Final(true);
+        ASTNode.boundariesCrossed = num;
+      }
+    }
+    else if(that.is$Final() != node.is$Final()) boundariesCrossed++;
+    return node;
+  }
+
+    // Declared in ASTNode.ast at line 111
+
+  private int childIndex;
+
+    // Declared in ASTNode.ast at line 112
+
+  public int getIndexOfChild(ASTNode node) {
+    if(node != null && node.childIndex < getNumChildNoTransform() && node == getChildNoTransform(node.childIndex))
+      return node.childIndex;
+    for(int i = 0; i < getNumChildNoTransform(); i++)
+      if(getChildNoTransform(i) == node) {
+        node.childIndex = i;
+        return i;
+      }
+    return -1;
+  }
+
+    // Declared in ASTNode.ast at line 123
+
+
+  public void addChild(T node) {
+    setChild(node, getNumChildNoTransform());
+  }
+
+    // Declared in ASTNode.ast at line 126
+
+  @SuppressWarnings("cast") public final T getChildNoTransform(int i) {
+    return (T)children[i];
+  }
+
+    // Declared in ASTNode.ast at line 129
+
+  public final int getNumChildNoTransform() {
+    return numChildren();
+  }
+
+    // Declared in ASTNode.ast at line 132
+
+  public int getNumChild() {
+    return (children == null) ? 0 : children.length;
+  }
+
+    // Declared in ASTNode.ast at line 135
+
+  public void setChild(T node, int i) {
+    if(children == null) {
+      children = new ASTNode[i + 1];
+    } else if (i >= children.length) {
+      ASTNode c[] = new ASTNode[i + 1];
+      System.arraycopy(children, 0, c, 0, children.length);
+      children = c;
+    }
+    children[i] = node;
+    if(node != null) { node.setParent(this); node.childIndex = i; }
+  }
+
+    // Declared in ASTNode.ast at line 146
+
+  public void insertChild(T node, int i) {
+    if(children == null) {
+      children = new ASTNode[i + 1];
+      children[i] = node;
+    } else {
+      ASTNode c[] = new ASTNode[children.length + 1];
+      System.arraycopy(children, 0, c, 0, i);
+      c[i] = node;
+      if(i < children.length)
+        System.arraycopy(children, i, c, i+1, children.length-i);
+      children = c;
+    }
+    if(node != null) { node.setParent(this); node.childIndex = i; }
+  }
+
+    // Declared in ASTNode.ast at line 160
+
+  public void removeChild(int i) {
+    if(children != null) {
+      ASTNode child = (ASTNode) children[i];
+      if(child != null) {
+        child.setParent(null);
+        child.childIndex = -1;
+      }
+      System.arraycopy(children, i+1, children, i, children.length-i-1);
+      numChildren--;
+    }
+  }
+
+    // Declared in ASTNode.ast at line 171
+
+  public ASTNode getParent() {
+    if(parent != null && ((ASTNode)parent).is$Final() != is$Final()) {
+      boundariesCrossed++;
+    }
+    return (ASTNode)parent;
+  }
+
+    // Declared in ASTNode.ast at line 177
+
+  public void setParent(ASTNode node) {
+    parent = node;
+  }
+
+    // Declared in ASTNode.ast at line 180
+
+    protected static int duringMergeActors = 0;
+
+    // Declared in ASTNode.ast at line 181
+
+    protected static boolean duringMergeActors() {
+        if(duringMergeActors == 0) {
+            return false;
+        }
+        else {
+            state.pop();
+            state.push(ASTNode.REWRITE_INTERRUPT);
+            return true;
+        }
+    }
+
+    // Declared in ASTNode.ast at line 191
+
+    public static void reset() {
+        IN_CIRCLE = false;
+        CIRCLE_INDEX = 0;
+        CHANGE = false;
+        LAST_CYCLE = false;
+        boundariesCrossed = 0;
+        state = new ASTNode$State();
+        if(duringMergeActors != 0) {
+            System.out.println("Warning: resetting duringMergeActors");
+            duringMergeActors = 0;
+        }
+    }
+
+    // Declared in ASTNode.ast at line 203
+
+    public java.util.Iterator<T> iterator() {
+        return new java.util.Iterator<T>() {
+            private int counter = 0;
+            public boolean hasNext() {
+                return counter < getNumChild();
+            }
+            @SuppressWarnings("unchecked") public T next() {
+                if(hasNext())
+                    return (T)getChild(counter++);
+                else
+                    return null;
+            }
+            public void remove() {
+                throw new UnsupportedOperationException();
+            }
+        };
+    }
+
+    // Declared in ASTNode.ast at line 220
+
+  public boolean mayHaveRewrite() { return false; }
+
+    protected java.util.Map genStaticSchedule_HashSet_Instance__visited;
+    // Declared in SSR.jrag at line 51
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<Instance> genStaticSchedule(HashSet<Instance> l) {
+        Object _parameters = l;
+if(genStaticSchedule_HashSet_Instance__visited == null) genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(genStaticSchedule_HashSet_Instance__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: genStaticSchedule in class: ");
+        genStaticSchedule_HashSet_Instance__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<Instance> genStaticSchedule_HashSet_Instance__value = genStaticSchedule_compute(l);
+        genStaticSchedule_HashSet_Instance__visited.remove(_parameters);
+        return genStaticSchedule_HashSet_Instance__value;
+    }
+
+    private HashSet<Instance> genStaticSchedule_compute(HashSet<Instance> l) {  return l;  }
+
+    protected int root_visited = -1;
+    // Declared in SSR.jrag at line 118
+ @SuppressWarnings({"unchecked", "cast"})     public XDF root() {
+        if(root_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: root in class: ");
+        root_visited = boundariesCrossed;
+        XDF root_value = root_compute();
+        root_visited = -1;
+        return root_value;
+    }
+
+    private XDF root_compute() {  return getParent().root();  }
+
+    protected java.util.Map getInstance_String_visited;
+    // Declared in SSR.jrag at line 121
+ @SuppressWarnings({"unchecked", "cast"})     public Instance getInstance(String s) {
+        Object _parameters = s;
+if(getInstance_String_visited == null) getInstance_String_visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(getInstance_String_visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: getInstance in class: ");
+        getInstance_String_visited.put(_parameters, new Integer(boundariesCrossed));
+        Instance getInstance_String_value = getInstance_compute(s);
+        getInstance_String_visited.remove(_parameters);
+        return getInstance_String_value;
+    }
+
+    private Instance getInstance_compute(String s) {  return null;  }
+
+public ASTNode rewriteTo() {
+    if(state.peek() == ASTNode.REWRITE_CHANGE) {
+        state.pop();
+        state.push(ASTNode.REWRITE_NOCHANGE);
+    }
+    return this;
+}
+
+}
diff --git a/examples/actors/xdfAST/Action.java b/examples/actors/xdfAST/Action.java
new file mode 100644
index 0000000000000000000000000000000000000000..25895643e5686878ef023bcab214032b75301ecd
--- /dev/null
+++ b/examples/actors/xdfAST/Action.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Action extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Action clone() throws CloneNotSupportedException {
+        Action node = (Action)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Action copy() {
+      try {
+          Action node = (Action)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Action fullCopy() {
+        Action res = (Action)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 270
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Action ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Action> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 42
+
+    public Action(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Action(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Action() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 42
+    public Action(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Action");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/ActionTags.java b/examples/actors/xdfAST/ActionTags.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb16043e3910e0164ae08f6bd01c5ba7671bef90
--- /dev/null
+++ b/examples/actors/xdfAST/ActionTags.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class ActionTags extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ActionTags clone() throws CloneNotSupportedException {
+        ActionTags node = (ActionTags)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ActionTags copy() {
+      try {
+          ActionTags node = (ActionTags)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ActionTags fullCopy() {
+        ActionTags res = (ActionTags)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 353
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<ActionTags ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</ActionTags> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 49
+
+    public ActionTags(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public ActionTags(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public ActionTags() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 49
+    public ActionTags(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "ActionTags");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Actor.java b/examples/actors/xdfAST/Actor.java
new file mode 100644
index 0000000000000000000000000000000000000000..9e9b6783a6266ec285f7d02236896f1cea970593
--- /dev/null
+++ b/examples/actors/xdfAST/Actor.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Actor extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Actor clone() throws CloneNotSupportedException {
+        Actor node = (Actor)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Actor copy() {
+      try {
+          Actor node = (Actor)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Actor fullCopy() {
+        Actor res = (Actor)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 568
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Actor ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Actor> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 68
+
+    public Actor(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Actor(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Actor() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 68
+    public Actor(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Actor");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Args.java b/examples/actors/xdfAST/Args.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3ddaa626f4b221a63d2d2d9092ac200a2588222
--- /dev/null
+++ b/examples/actors/xdfAST/Args.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Args extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Args clone() throws CloneNotSupportedException {
+        Args node = (Args)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Args copy() {
+      try {
+          Args node = (Args)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Args fullCopy() {
+        Args res = (Args)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 370
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Args ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Args> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 50
+
+    public Args(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Args(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Args() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 50
+    public Args(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Args");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/AttrValue.java b/examples/actors/xdfAST/AttrValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e4cdc71d76fe90a1d3fa1e1d0c3bbeb82496bc0
--- /dev/null
+++ b/examples/actors/xdfAST/AttrValue.java
@@ -0,0 +1,134 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class AttrValue extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public AttrValue clone() throws CloneNotSupportedException {
+        AttrValue node = (AttrValue)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public AttrValue copy() {
+      try {
+          AttrValue node = (AttrValue)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public AttrValue fullCopy() {
+        AttrValue res = (AttrValue)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 29
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(getLITERAL());
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 18
+
+    public AttrValue(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public AttrValue(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public AttrValue() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 18
+    public AttrValue(String p0) {
+        setLITERAL(p0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "AttrValue"+ "\"" + getLITERAL() + "\"");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xdf.ast at line 40
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xdf.ast at line 43
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 18
+    protected String tokenString_LITERAL;
+
+    // Declared in xdf.ast at line 3
+
+    public void setLITERAL(String value) {
+        tokenString_LITERAL = value;
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public String getLITERAL() {
+        return tokenString_LITERAL != null ? tokenString_LITERAL : "";
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Attribute.java b/examples/actors/xdfAST/Attribute.java
new file mode 100644
index 0000000000000000000000000000000000000000..060fd6d676cabf38ea24fd73a72c7a6e739eae31
--- /dev/null
+++ b/examples/actors/xdfAST/Attribute.java
@@ -0,0 +1,146 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Attribute extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        isKind_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute clone() throws CloneNotSupportedException {
+        Attribute node = (Attribute)super.clone();
+        node.isKind_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute copy() {
+      try {
+          Attribute node = (Attribute)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute fullCopy() {
+        Attribute res = (Attribute)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 17
+
+    public Attribute(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Attribute(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Attribute() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 17
+    public Attribute(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Attribute");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+    protected int isKind_visited = -1;
+    // Declared in SSR.jrag at line 173
+ @SuppressWarnings({"unchecked", "cast"})     public boolean isKind() {
+        if(isKind_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: isKind in class: ");
+        isKind_visited = boundariesCrossed;
+        boolean isKind_value = isKind_compute();
+        isKind_visited = -1;
+        return isKind_value;
+    }
+
+    private boolean isKind_compute() {  return false;  }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Class.java b/examples/actors/xdfAST/Class.java
new file mode 100644
index 0000000000000000000000000000000000000000..a2c018fc5e7c4f6f9851aa36c63871bb3972e8f8
--- /dev/null
+++ b/examples/actors/xdfAST/Class.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Class extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Class clone() throws CloneNotSupportedException {
+        Class node = (Class)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Class copy() {
+      try {
+          Class node = (Class)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Class fullCopy() {
+        Class res = (Class)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 70
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Class ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Class> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 26
+
+    public Class(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Class(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Class() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 26
+    public Class(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Class");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/ComplexElement.java b/examples/actors/xdfAST/ComplexElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..48883d99a3df4a899d6d5615349afd215b00330f
--- /dev/null
+++ b/examples/actors/xdfAST/ComplexElement.java
@@ -0,0 +1,316 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class ComplexElement extends Element implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        getInstance_String_visited = new java.util.HashMap(4);
+        name_visited = -1;
+        id_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ComplexElement clone() throws CloneNotSupportedException {
+        ComplexElement node = (ComplexElement)super.clone();
+        node.getInstance_String_visited = new java.util.HashMap(4);
+        node.name_visited = -1;
+        node.id_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ComplexElement copy() {
+      try {
+          ComplexElement node = (ComplexElement)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ComplexElement fullCopy() {
+        ComplexElement res = (ComplexElement)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in MergeActors.jrag at line 85
+
+	boolean remove_me = false;
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 11
+
+    public ComplexElement(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public ComplexElement(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public ComplexElement() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 11
+    public ComplexElement(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "ComplexElement");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+    protected java.util.Map getInstance_String_visited;
+    // Declared in SSR.jrag at line 122
+ @SuppressWarnings({"unchecked", "cast"})     public Instance getInstance(String s) {
+        Object _parameters = s;
+if(getInstance_String_visited == null) getInstance_String_visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(getInstance_String_visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: getInstance in class: ");
+        getInstance_String_visited.put(_parameters, new Integer(boundariesCrossed));
+        Instance getInstance_String_value = getInstance_compute(s);
+        getInstance_String_visited.remove(_parameters);
+        return getInstance_String_value;
+    }
+
+    private Instance getInstance_compute(String s) {
+		Instance inst = null;
+		for (Element e : getElements()){
+			inst = e.getInstance(s);
+			if (inst!=null) {
+				return inst;
+			}
+		}
+		return null;
+	}
+
+    protected int name_visited = -1;
+    // Declared in SSR.jrag at line 141
+ @SuppressWarnings({"unchecked", "cast"})     public String name() {
+        if(name_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: name in class: ");
+        name_visited = boundariesCrossed;
+        String name_value = name_compute();
+        name_visited = -1;
+        return name_value;
+    }
+
+    private String name_compute() {  return "";  }
+
+    protected int id_visited = -1;
+    // Declared in SSR.jrag at line 194
+ @SuppressWarnings({"unchecked", "cast"})     public String id() {
+        if(id_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: id in class: ");
+        id_visited = boundariesCrossed;
+        String id_value = id_compute();
+        id_visited = -1;
+        return id_value;
+    }
+
+    private String id_compute() {  return "";  }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Connection.java b/examples/actors/xdfAST/Connection.java
new file mode 100644
index 0000000000000000000000000000000000000000..9be7b3ad95af3a2c9e39ac397096f4423eee0245
--- /dev/null
+++ b/examples/actors/xdfAST/Connection.java
@@ -0,0 +1,408 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Connection extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        getConnections_HashSet_Connection__visited = new java.util.HashMap(4);
+        genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+        getSource_visited = -1;
+        getDest_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Connection clone() throws CloneNotSupportedException {
+        Connection node = (Connection)super.clone();
+        node.getConnections_HashSet_Connection__visited = new java.util.HashMap(4);
+        node.genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+        node.getSource_visited = -1;
+        node.getDest_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Connection copy() {
+      try {
+          Connection node = (Connection)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Connection fullCopy() {
+        Connection res = (Connection)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 143
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Connection ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Connection> ");
+    }
+  }
+
+    // Declared in SSR.jrag at line 88
+
+	
+	String source() {
+		for (Attribute a : getAttributes()) {
+			if (a instanceof src) {
+				return fix(a.getAttrValue().getLITERAL());
+			}
+		}
+		return "";
+	}
+
+    // Declared in SSR.jrag at line 97
+
+
+	void setSource(String src) {
+		for (Attribute a : getAttributes()) {
+			if (a instanceof src) {
+				a.getAttrValue().setLITERAL(src);
+			}
+		}		
+	}
+
+    // Declared in SSR.jrag at line 107
+
+	
+	String dest() {
+		for (Attribute a : getAttributes()) {
+			if (a instanceof dst) {
+				return fix(a.getAttrValue().getLITERAL());
+			}
+		}
+		return "";
+	}
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 31
+
+    public Connection(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Connection(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Connection() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 31
+    public Connection(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Connection");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return true; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+    protected java.util.Map getConnections_HashSet_Connection__visited;
+    // Declared in MergeActors.jrag at line 73
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<Connection> getConnections(HashSet<Connection> set) {
+        Object _parameters = set;
+if(getConnections_HashSet_Connection__visited == null) getConnections_HashSet_Connection__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(getConnections_HashSet_Connection__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: getConnections in class: ");
+        getConnections_HashSet_Connection__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<Connection> getConnections_HashSet_Connection__value = getConnections_compute(set);
+        getConnections_HashSet_Connection__visited.remove(_parameters);
+        return getConnections_HashSet_Connection__value;
+    }
+
+    private HashSet<Connection> getConnections_compute(HashSet<Connection> set) {
+		set.add(this);
+		return set;
+	}
+
+    protected java.util.Map genStaticSchedule_HashSet_Instance__visited;
+    // Declared in SSR.jrag at line 65
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<Instance> genStaticSchedule(HashSet<Instance> l) {
+        Object _parameters = l;
+if(genStaticSchedule_HashSet_Instance__visited == null) genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(genStaticSchedule_HashSet_Instance__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: genStaticSchedule in class: ");
+        genStaticSchedule_HashSet_Instance__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<Instance> genStaticSchedule_HashSet_Instance__value = genStaticSchedule_compute(l);
+        genStaticSchedule_HashSet_Instance__visited.remove(_parameters);
+        return genStaticSchedule_HashSet_Instance__value;
+    }
+
+    private HashSet<Instance> genStaticSchedule_compute(HashSet<Instance> l) {
+		Instance src = getSource();
+		Instance dest = getDest();
+		if (dest.isSDF() && src.isSDF()) {
+			src.next = dest;
+			dest.prev = src;
+			l.remove(dest);
+		}
+		if (src.prev == null) {
+			l.add(src);
+		}
+		if (dest.prev == null) {
+			l.add(dest);
+		}
+ 		System.out.println(src.name());
+		return l;
+// 		Instance dest = getDest();
+	}
+
+    protected int getSource_visited = -1;
+    // Declared in SSR.jrag at line 86
+ @SuppressWarnings({"unchecked", "cast"})     public Instance getSource() {
+        if(getSource_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: getSource in class: ");
+        getSource_visited = boundariesCrossed;
+        Instance getSource_value = getSource_compute();
+        getSource_visited = -1;
+        return getSource_value;
+    }
+
+    private Instance getSource_compute() {  return root().getInstance(source());  }
+
+    protected int getDest_visited = -1;
+    // Declared in SSR.jrag at line 105
+ @SuppressWarnings({"unchecked", "cast"})     public Instance getDest() {
+        if(getDest_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: getDest in class: ");
+        getDest_visited = boundariesCrossed;
+        Instance getDest_value = getDest_compute();
+        getDest_visited = -1;
+        return getDest_value;
+    }
+
+    private Instance getDest_compute() {  return root().getInstance(dest());  }
+
+public ASTNode rewriteTo() {
+    // Declared in MergeActors.jrag at line 88
+    if(remove_me) {
+        duringMergeActors++;
+        ASTNode result = rewriteRule0();
+        duringMergeActors--;
+        return result;
+    }
+
+    return super.rewriteTo();
+}
+
+    // Declared in MergeActors.jrag at line 88
+    private ComplexElement rewriteRule0() {
+{
+			return new ComplexElement();
+		}    }
+}
diff --git a/examples/actors/xdfAST/Decl.java b/examples/actors/xdfAST/Decl.java
new file mode 100644
index 0000000000000000000000000000000000000000..f511c127df1d742f46e5215698879a349c4d77a5
--- /dev/null
+++ b/examples/actors/xdfAST/Decl.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Decl extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Decl clone() throws CloneNotSupportedException {
+        Decl node = (Decl)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Decl copy() {
+      try {
+          Decl node = (Decl)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Decl fullCopy() {
+        Decl res = (Decl)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 439
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Decl ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Decl> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 59
+
+    public Decl(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Decl(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Decl() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 59
+    public Decl(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Decl");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/DocType.java b/examples/actors/xdfAST/DocType.java
new file mode 100644
index 0000000000000000000000000000000000000000..6bae364e57640140e0541b69974994c1743e098a
--- /dev/null
+++ b/examples/actors/xdfAST/DocType.java
@@ -0,0 +1,136 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class DocType extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public DocType clone() throws CloneNotSupportedException {
+        DocType node = (DocType)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public DocType copy() {
+      try {
+          DocType node = (DocType)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public DocType fullCopy() {
+        DocType res = (DocType)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 23
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print("<!");
+    pStream.print(getSTRING());
+    pStream.println();
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 8
+
+    public DocType(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public DocType(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public DocType() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 8
+    public DocType(String p0) {
+        setSTRING(p0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "DocType"+ "\"" + getSTRING() + "\"");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xdf.ast at line 40
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xdf.ast at line 43
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 8
+    protected String tokenString_STRING;
+
+    // Declared in xdf.ast at line 3
+
+    public void setSTRING(String value) {
+        tokenString_STRING = value;
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public String getSTRING() {
+        return tokenString_STRING != null ? tokenString_STRING : "";
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Element.java b/examples/actors/xdfAST/Element.java
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe4196eb08aab34fe2d2001ae9d2d078272405
--- /dev/null
+++ b/examples/actors/xdfAST/Element.java
@@ -0,0 +1,152 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public abstract class Element extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        getConnections_HashSet_Connection__visited = new java.util.HashMap(4);
+        getInstances_HashSet_Instance__visited = new java.util.HashMap(4);
+        kind_visited = -1;
+        value_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Element clone() throws CloneNotSupportedException {
+        Element node = (Element)super.clone();
+        node.getConnections_HashSet_Connection__visited = new java.util.HashMap(4);
+        node.getInstances_HashSet_Instance__visited = new java.util.HashMap(4);
+        node.kind_visited = -1;
+        node.value_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+    // Declared in MergeActors.jrag at line 12
+
+	void mergeActors() {}
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 10
+
+    public Element(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Element(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Element() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 16
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Element");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 23
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 27
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 32
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xdf.ast at line 35
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xdf.ast at line 38
+
+  public boolean mayHaveRewrite() { return false; }
+
+    protected java.util.Map getConnections_HashSet_Connection__visited;
+    // Declared in MergeActors.jrag at line 66
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<Connection> getConnections(HashSet<Connection> set) {
+        Object _parameters = set;
+if(getConnections_HashSet_Connection__visited == null) getConnections_HashSet_Connection__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(getConnections_HashSet_Connection__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: getConnections in class: ");
+        getConnections_HashSet_Connection__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<Connection> getConnections_HashSet_Connection__value = getConnections_compute(set);
+        getConnections_HashSet_Connection__visited.remove(_parameters);
+        return getConnections_HashSet_Connection__value;
+    }
+
+    private HashSet<Connection> getConnections_compute(HashSet<Connection> set) {  return set;  }
+
+    protected java.util.Map getInstances_HashSet_Instance__visited;
+    // Declared in MergeActors.jrag at line 81
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<Instance> getInstances(HashSet<Instance> inst) {
+        Object _parameters = inst;
+if(getInstances_HashSet_Instance__visited == null) getInstances_HashSet_Instance__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(getInstances_HashSet_Instance__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: getInstances in class: ");
+        getInstances_HashSet_Instance__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<Instance> getInstances_HashSet_Instance__value = getInstances_compute(inst);
+        getInstances_HashSet_Instance__visited.remove(_parameters);
+        return getInstances_HashSet_Instance__value;
+    }
+
+    private HashSet<Instance> getInstances_compute(HashSet<Instance> inst) {  return inst;  }
+
+    protected int kind_visited = -1;
+    // Declared in SSR.jrag at line 161
+ @SuppressWarnings({"unchecked", "cast"})     public String kind() {
+        if(kind_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: kind in class: ");
+        kind_visited = boundariesCrossed;
+        String kind_value = kind_compute();
+        kind_visited = -1;
+        return kind_value;
+    }
+
+    private String kind_compute() {  return "";  }
+
+    protected int value_visited = -1;
+    // Declared in SSR.jrag at line 176
+ @SuppressWarnings({"unchecked", "cast"})     public String value() {
+        if(value_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: value in class: ");
+        value_visited = boundariesCrossed;
+        String value_value = value_compute();
+        value_visited = -1;
+        return value_value;
+    }
+
+    private String value_compute() {  return "";  }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Encoding.java b/examples/actors/xdfAST/Encoding.java
new file mode 100644
index 0000000000000000000000000000000000000000..07c593101f3aa00820dcc65fee6734dd0e861f9b
--- /dev/null
+++ b/examples/actors/xdfAST/Encoding.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Encoding extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Encoding clone() throws CloneNotSupportedException {
+        Encoding node = (Encoding)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Encoding copy() {
+      try {
+          Encoding node = (Encoding)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Encoding fullCopy() {
+        Encoding res = (Encoding)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 33
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" encoding=");
+    getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 19
+
+    public Encoding(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Encoding(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Encoding() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 19
+    public Encoding(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Encoding");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Entry.java b/examples/actors/xdfAST/Entry.java
new file mode 100644
index 0000000000000000000000000000000000000000..10c5e288971e7d626db4a43033d492478da78e70
--- /dev/null
+++ b/examples/actors/xdfAST/Entry.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Entry extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Entry clone() throws CloneNotSupportedException {
+        Entry node = (Entry)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Entry copy() {
+      try {
+          Entry node = (Entry)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Entry fullCopy() {
+        Entry res = (Entry)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 209
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Entry ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Entry> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 37
+
+    public Entry(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Entry(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Entry() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 37
+    public Entry(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Entry");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Expr.java b/examples/actors/xdfAST/Expr.java
new file mode 100644
index 0000000000000000000000000000000000000000..0a4f06d05188d2758da6b92fe0928ed636d00bbd
--- /dev/null
+++ b/examples/actors/xdfAST/Expr.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Expr extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Expr clone() throws CloneNotSupportedException {
+        Expr node = (Expr)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Expr copy() {
+      try {
+          Expr node = (Expr)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Expr fullCopy() {
+        Expr res = (Expr)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 397
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Expr ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Expr> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 53
+
+    public Expr(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Expr(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Expr() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 53
+    public Expr(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Expr");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/FloatElement.java b/examples/actors/xdfAST/FloatElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..910e464588c04d401126dac0b86b3c9e60b3e7e8
--- /dev/null
+++ b/examples/actors/xdfAST/FloatElement.java
@@ -0,0 +1,127 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class FloatElement extends SimpleElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public FloatElement clone() throws CloneNotSupportedException {
+        FloatElement node = (FloatElement)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public FloatElement copy() {
+      try {
+          FloatElement node = (FloatElement)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public FloatElement fullCopy() {
+        FloatElement res = (FloatElement)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 16
+
+    public FloatElement(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public FloatElement(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public FloatElement() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 16
+    public FloatElement(String p0) {
+        setLITERAL(p0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "FloatElement"+ "\"" + getLITERAL() + "\"");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xdf.ast at line 40
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xdf.ast at line 43
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 16
+    protected String tokenString_LITERAL;
+
+    // Declared in xdf.ast at line 3
+
+    public void setLITERAL(String value) {
+        tokenString_LITERAL = value;
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public String getLITERAL() {
+        return tokenString_LITERAL != null ? tokenString_LITERAL : "";
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Guards.java b/examples/actors/xdfAST/Guards.java
new file mode 100644
index 0000000000000000000000000000000000000000..7588857814b4f3871f5c61679ea4b99928b6ec93
--- /dev/null
+++ b/examples/actors/xdfAST/Guards.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Guards extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Guards clone() throws CloneNotSupportedException {
+        Guards node = (Guards)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Guards copy() {
+      try {
+          Guards node = (Guards)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Guards fullCopy() {
+        Guards res = (Guards)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 231
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Guards ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Guards> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 39
+
+    public Guards(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Guards(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Guards() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 39
+    public Guards(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Guards");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/ID.java b/examples/actors/xdfAST/ID.java
new file mode 100644
index 0000000000000000000000000000000000000000..7663875d068a5ec7c14338d8ce6bac8ed6d7aeb6
--- /dev/null
+++ b/examples/actors/xdfAST/ID.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class ID extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ID clone() throws CloneNotSupportedException {
+        ID node = (ID)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ID copy() {
+      try {
+          ID node = (ID)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ID fullCopy() {
+        ID res = (ID)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 253
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<ID ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</ID> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 41
+
+    public ID(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public ID(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public ID() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 41
+    public ID(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "ID");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Import.java b/examples/actors/xdfAST/Import.java
new file mode 100644
index 0000000000000000000000000000000000000000..d8655dc7fb0fc9b37515a6c52a78d118673d6037
--- /dev/null
+++ b/examples/actors/xdfAST/Import.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Import extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Import clone() throws CloneNotSupportedException {
+        Import node = (Import)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Import copy() {
+      try {
+          Import node = (Import)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Import fullCopy() {
+        Import res = (Import)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 287
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Import ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Import> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 43
+
+    public Import(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Import(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Import() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 43
+    public Import(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Import");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Input.java b/examples/actors/xdfAST/Input.java
new file mode 100644
index 0000000000000000000000000000000000000000..384d3f8a8a05a972e5393ab80e137f5afbee5e41
--- /dev/null
+++ b/examples/actors/xdfAST/Input.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Input extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Input clone() throws CloneNotSupportedException {
+        Input node = (Input)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Input copy() {
+      try {
+          Input node = (Input)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Input fullCopy() {
+        Input res = (Input)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 456
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Input ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Input> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 60
+
+    public Input(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Input(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Input() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 60
+    public Input(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Input");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Instance.java b/examples/actors/xdfAST/Instance.java
new file mode 100644
index 0000000000000000000000000000000000000000..4bc480862bfc4b9976bf23a0e9e78c26d73cbef1
--- /dev/null
+++ b/examples/actors/xdfAST/Instance.java
@@ -0,0 +1,437 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Instance extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        isSDF_visited = -1;
+        xlimInstance_visited = -1;
+        getInstance_String_visited = new java.util.HashMap(4);
+        name_visited = -1;
+        id_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Instance clone() throws CloneNotSupportedException {
+        Instance node = (Instance)super.clone();
+        node.isSDF_visited = -1;
+        node.xlimInstance_visited = -1;
+        node.getInstance_String_visited = new java.util.HashMap(4);
+        node.name_visited = -1;
+        node.id_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Instance copy() {
+      try {
+          Instance node = (Instance)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Instance fullCopy() {
+        Instance res = (Instance)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 192
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Instance ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Instance> ");
+    }
+  }
+
+    // Declared in MergeActors.jrag at line 60
+
+// 	void Connection.mergeActors() {
+// 		Instance src = getSource();
+// 		Instance dest = getDest();
+// 		if (dest.isSDF() && src.isSDF()) {		
+// 			src.merge(dest);
+// 			src.setName(src.name()+"_"+dest.name());
+// 		}
+// 	}
+
+	void merge(Instance inst) {
+		xlimInstance().merge(inst.xlimInstance());
+	}
+
+    // Declared in SSR.jrag at line 47
+
+	public Instance next;
+
+    // Declared in SSR.jrag at line 48
+
+	public Instance prev;
+
+    // Declared in SSR.jrag at line 144
+
+
+	Note getUIDNote() {
+		for (Element e : getElements()) {
+			if (e instanceof Note) {
+// 				System.out.println("Checking "+e.kind());
+				if (e.kind().equals("UID")) {
+// 					System.out.println("  Yes");
+					return (Note) e;
+				}
+			}
+		}
+		return new Note(); // Probably better than returning null
+	}
+
+    // Declared in SSR.jrag at line 157
+
+
+	void setName(String s) {
+		getUIDNote().setValue(s);
+	}
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 36
+
+    public Instance(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Instance(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Instance() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 36
+    public Instance(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Instance");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return true; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+    protected int isSDF_visited = -1;
+    // Declared in SSR.jrag at line 31
+ @SuppressWarnings({"unchecked", "cast"})     public boolean isSDF() {
+        if(isSDF_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: isSDF in class: ");
+        isSDF_visited = boundariesCrossed;
+        boolean isSDF_value = isSDF_compute();
+        isSDF_visited = -1;
+        return isSDF_value;
+    }
+
+    private boolean isSDF_compute() {  return xlimInstance().isSDF();  }
+
+    protected int xlimInstance_visited = -1;
+    // Declared in SSR.jrag at line 33
+ @SuppressWarnings({"unchecked", "cast"})     public xlimAST.Start xlimInstance() {
+        if(xlimInstance_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: xlimInstance in class: ");
+        xlimInstance_visited = boundariesCrossed;
+        xlimAST.Start xlimInstance_value = xlimInstance_compute();
+        xlimInstance_visited = -1;
+        return xlimInstance_value;
+    }
+
+    private xlimAST.Start xlimInstance_compute() {
+		try {
+ 			System.out.println("Trying to open: "+name());
+			xlimAST.XmlParser parser = new xlimAST.XmlParser(new FileReader(name()+".xlim"));
+			return parser.Start();
+		} catch (Exception e) {
+			System.out.println( name()+".xlim not found");
+// 			e.printStackTrace();
+			return new xlimAST.Start();
+		}
+	}
+
+    protected java.util.Map getInstance_String_visited;
+    // Declared in SSR.jrag at line 132
+ @SuppressWarnings({"unchecked", "cast"})     public Instance getInstance(String s) {
+        Object _parameters = s;
+if(getInstance_String_visited == null) getInstance_String_visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(getInstance_String_visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: getInstance in class: ");
+        getInstance_String_visited.put(_parameters, new Integer(boundariesCrossed));
+        Instance getInstance_String_value = getInstance_compute(s);
+        getInstance_String_visited.remove(_parameters);
+        return getInstance_String_value;
+    }
+
+    private Instance getInstance_compute(String s) {
+// 		System.out.println(name()+" == "+s);
+		if (id().equals(s)) {
+			return this;
+		} else {
+			return super.getInstance(s);
+		}
+	}
+
+    protected int name_visited = -1;
+    // Declared in SSR.jrag at line 142
+ @SuppressWarnings({"unchecked", "cast"})     public String name() {
+        if(name_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: name in class: ");
+        name_visited = boundariesCrossed;
+        String name_value = name_compute();
+        name_visited = -1;
+        return name_value;
+    }
+
+    private String name_compute() {  return getUIDNote().value();  }
+
+    protected int id_visited = -1;
+    // Declared in SSR.jrag at line 195
+ @SuppressWarnings({"unchecked", "cast"})     public String id() {
+        if(id_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: id in class: ");
+        id_visited = boundariesCrossed;
+        String id_value = id_compute();
+        id_visited = -1;
+        return id_value;
+    }
+
+    private String id_compute() {
+		for (int i=0; i<getNumAttribute(); i++) {
+			Attribute a = getAttribute(i);
+			if (a instanceof id) {
+				return fix(a.getAttrValue().getLITERAL());
+			}
+		}
+		return "";
+	}
+
+public ASTNode rewriteTo() {
+    // Declared in MergeActors.jrag at line 93
+    if(remove_me) {
+        duringMergeActors++;
+        ASTNode result = rewriteRule0();
+        duringMergeActors--;
+        return result;
+    }
+
+    return super.rewriteTo();
+}
+
+    // Declared in MergeActors.jrag at line 93
+    private ComplexElement rewriteRule0() {
+{
+			return new ComplexElement();
+		}    }
+}
diff --git a/examples/actors/xdfAST/IntElement.java b/examples/actors/xdfAST/IntElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1cbafb2f2c4d5562a00c7a537163aea134a32c8
--- /dev/null
+++ b/examples/actors/xdfAST/IntElement.java
@@ -0,0 +1,127 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class IntElement extends SimpleElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public IntElement clone() throws CloneNotSupportedException {
+        IntElement node = (IntElement)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public IntElement copy() {
+      try {
+          IntElement node = (IntElement)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public IntElement fullCopy() {
+        IntElement res = (IntElement)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 15
+
+    public IntElement(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public IntElement(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public IntElement() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 15
+    public IntElement(String p0) {
+        setLITERAL(p0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "IntElement"+ "\"" + getLITERAL() + "\"");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xdf.ast at line 40
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xdf.ast at line 43
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 15
+    protected String tokenString_LITERAL;
+
+    // Declared in xdf.ast at line 3
+
+    public void setLITERAL(String value) {
+        tokenString_LITERAL = value;
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public String getLITERAL() {
+        return tokenString_LITERAL != null ? tokenString_LITERAL : "";
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/JJTXmlParserState.java b/examples/actors/xdfAST/JJTXmlParserState.java
new file mode 100644
index 0000000000000000000000000000000000000000..14456d52ced8bf2226eaf195014a8a0b3bec1394
--- /dev/null
+++ b/examples/actors/xdfAST/JJTXmlParserState.java
@@ -0,0 +1,123 @@
+/* Generated By:JJTree: Do not edit this line. /home/csandersn/work/actors/xmlSchemCompiler/examples/actors/xdfAST/JJTXmlParserState.java */
+
+package xdfAST;
+
+class JJTXmlParserState {
+  private java.util.Stack nodes;
+  private java.util.Stack marks;
+
+  private int sp;		// number of nodes on stack
+  private int mk;		// current mark
+  private boolean node_created;
+
+  JJTXmlParserState() {
+    nodes = new java.util.Stack();
+    marks = new java.util.Stack();
+    sp = 0;
+    mk = 0;
+  }
+
+  /* Determines whether the current node was actually closed and
+     pushed.  This should only be called in the final user action of a
+     node scope.  */
+  boolean nodeCreated() {
+    return node_created;
+  }
+
+  /* Call this to reinitialize the node stack.  It is called
+     automatically by the parser's ReInit() method. */
+  void reset() {
+    nodes.removeAllElements();
+    marks.removeAllElements();
+    sp = 0;
+    mk = 0;
+  }
+
+  /* Returns the root node of the AST.  It only makes sense to call
+     this after a successful parse. */
+  Node rootNode() {
+    return (Node)nodes.elementAt(0);
+  }
+
+  /* Pushes a node on to the stack. */
+  void pushNode(Node n) {
+    nodes.push(n);
+    ++sp;
+  }
+
+  /* Returns the node on the top of the stack, and remove it from the
+     stack.  */
+  Node popNode() {
+    if (--sp < mk) {
+      mk = ((Integer)marks.pop()).intValue();
+    }
+    return (Node)nodes.pop();
+  }
+
+  /* Returns the node currently on the top of the stack. */
+  Node peekNode() {
+    return (Node)nodes.peek();
+  }
+
+  /* Returns the number of children on the stack in the current node
+     scope. */
+  int nodeArity() {
+    return sp - mk;
+  }
+
+
+  void clearNodeScope(Node n) {
+    while (sp > mk) {
+      popNode();
+    }
+    mk = ((Integer)marks.pop()).intValue();
+  }
+
+
+  void openNodeScope(Node n) {
+    marks.push(new Integer(mk));
+    mk = sp;
+    n.jjtOpen();
+  }
+
+
+  /* A definite node is constructed from a specified number of
+     children.  That number of nodes are popped from the stack and
+     made the children of the definite node.  Then the definite node
+     is pushed on to the stack. */
+  void closeNodeScope(Node n, int num) {
+    mk = ((Integer)marks.pop()).intValue();
+    while (num-- > 0) {
+      Node c = popNode();
+      c.jjtSetParent(n);
+      n.jjtAddChild(c, num);
+    }
+    n.jjtClose();
+    pushNode(n);
+    node_created = true;
+  }
+
+
+  /* A conditional node is constructed if its condition is true.  All
+     the nodes that have been pushed since the node was opened are
+     made children of the the conditional node, which is then pushed
+     on to the stack.  If the condition is false the node is not
+     constructed and they are left on the stack. */
+  void closeNodeScope(Node n, boolean condition) {
+    if (condition) {
+      int a = nodeArity();
+      mk = ((Integer)marks.pop()).intValue();
+      while (a-- > 0) {
+	Node c = popNode();
+	c.jjtSetParent(n);
+	n.jjtAddChild(c, a);
+      }
+      n.jjtClose();
+      pushNode(n);
+      node_created = true;
+    } else {
+      mk = ((Integer)marks.pop()).intValue();
+      node_created = false;
+    }
+  }
+}
diff --git a/examples/actors/xdfAST/JavaCharStream.java b/examples/actors/xdfAST/JavaCharStream.java
new file mode 100644
index 0000000000000000000000000000000000000000..eb05d6bcf8fede340cb8a35490701a8d6137cff2
--- /dev/null
+++ b/examples/actors/xdfAST/JavaCharStream.java
@@ -0,0 +1,584 @@
+/* Generated By:JavaCC: Do not edit this line. JavaCharStream.java Version 4.0 */
+package xdfAST;
+
+/**
+ * An implementation of interface CharStream, where the stream is assumed to
+ * contain only ASCII characters (with java-like unicode escape processing).
+ */
+
+public class JavaCharStream
+{
+  public static final boolean staticFlag = false;
+  static final int hexval(char c) throws java.io.IOException {
+    switch(c)
+    {
+       case '0' :
+          return 0;
+       case '1' :
+          return 1;
+       case '2' :
+          return 2;
+       case '3' :
+          return 3;
+       case '4' :
+          return 4;
+       case '5' :
+          return 5;
+       case '6' :
+          return 6;
+       case '7' :
+          return 7;
+       case '8' :
+          return 8;
+       case '9' :
+          return 9;
+
+       case 'a' :
+       case 'A' :
+          return 10;
+       case 'b' :
+       case 'B' :
+          return 11;
+       case 'c' :
+       case 'C' :
+          return 12;
+       case 'd' :
+       case 'D' :
+          return 13;
+       case 'e' :
+       case 'E' :
+          return 14;
+       case 'f' :
+       case 'F' :
+          return 15;
+    }
+
+    throw new java.io.IOException(); // Should never come here
+  }
+
+  public int bufpos = -1;
+  int bufsize;
+  int available;
+  int tokenBegin;
+  protected int bufline[];
+  protected int bufcolumn[];
+
+  protected int column = 0;
+  protected int line = 1;
+
+  protected boolean prevCharIsCR = false;
+  protected boolean prevCharIsLF = false;
+
+  protected java.io.Reader inputStream;
+
+  protected char[] nextCharBuf;
+  protected char[] buffer;
+  protected int maxNextCharInd = 0;
+  protected int nextCharInd = -1;
+  protected int inBuf = 0;
+  protected int tabSize = 8;
+
+  protected void setTabSize(int i) { tabSize = i; }
+  protected int getTabSize(int i) { return tabSize; }
+
+  protected void ExpandBuff(boolean wrapAround)
+  {
+     char[] newbuffer = new char[bufsize + 2048];
+     int newbufline[] = new int[bufsize + 2048];
+     int newbufcolumn[] = new int[bufsize + 2048];
+
+     try
+     {
+        if (wrapAround)
+        {
+           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+           System.arraycopy(buffer, 0, newbuffer,
+                                             bufsize - tokenBegin, bufpos);
+           buffer = newbuffer;
+
+           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+           System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
+           bufline = newbufline;
+
+           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+           System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
+           bufcolumn = newbufcolumn;
+
+           bufpos += (bufsize - tokenBegin);
+        }
+        else
+        {
+           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+           buffer = newbuffer;
+
+           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+           bufline = newbufline;
+
+           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+           bufcolumn = newbufcolumn;
+
+           bufpos -= tokenBegin;
+        }
+     }
+     catch (Throwable t)
+     {
+        throw new Error(t.getMessage());
+     }
+
+     available = (bufsize += 2048);
+     tokenBegin = 0;
+  }
+
+  protected void FillBuff() throws java.io.IOException
+  {
+     int i;
+     if (maxNextCharInd == 4096)
+        maxNextCharInd = nextCharInd = 0;
+
+     try {
+        if ((i = inputStream.read(nextCharBuf, maxNextCharInd,
+                                            4096 - maxNextCharInd)) == -1)
+        {
+           inputStream.close();
+           throw new java.io.IOException();
+        }
+        else
+           maxNextCharInd += i;
+        return;
+     }
+     catch(java.io.IOException e) {
+        if (bufpos != 0)
+        {
+           --bufpos;
+           backup(0);
+        }
+        else
+        {
+           bufline[bufpos] = line;
+           bufcolumn[bufpos] = column;
+        }
+        throw e;
+     }
+  }
+
+  protected char ReadByte() throws java.io.IOException
+  {
+     if (++nextCharInd >= maxNextCharInd)
+        FillBuff();
+
+     return nextCharBuf[nextCharInd];
+  }
+
+  public char BeginToken() throws java.io.IOException
+  {     
+     if (inBuf > 0)
+     {
+        --inBuf;
+
+        if (++bufpos == bufsize)
+           bufpos = 0;
+
+        tokenBegin = bufpos;
+        return buffer[bufpos];
+     }
+
+     tokenBegin = 0;
+     bufpos = -1;
+
+     return readChar();
+  }     
+
+  protected void AdjustBuffSize()
+  {
+     if (available == bufsize)
+     {
+        if (tokenBegin > 2048)
+        {
+           bufpos = 0;
+           available = tokenBegin;
+        }
+        else
+           ExpandBuff(false);
+     }
+     else if (available > tokenBegin)
+        available = bufsize;
+     else if ((tokenBegin - available) < 2048)
+        ExpandBuff(true);
+     else
+        available = tokenBegin;
+  }
+
+  protected void UpdateLineColumn(char c)
+  {
+     column++;
+
+     if (prevCharIsLF)
+     {
+        prevCharIsLF = false;
+        line += (column = 1);
+     }
+     else if (prevCharIsCR)
+     {
+        prevCharIsCR = false;
+        if (c == '\n')
+        {
+           prevCharIsLF = true;
+        }
+        else
+           line += (column = 1);
+     }
+
+     switch (c)
+     {
+        case '\r' :
+           prevCharIsCR = true;
+           break;
+        case '\n' :
+           prevCharIsLF = true;
+           break;
+        case '\t' :
+           column--;
+           column += (tabSize - (column % tabSize));
+           break;
+        default :
+           break;
+     }
+
+     bufline[bufpos] = line;
+     bufcolumn[bufpos] = column;
+  }
+
+  public char readChar() throws java.io.IOException
+  {
+     if (inBuf > 0)
+     {
+        --inBuf;
+
+        if (++bufpos == bufsize)
+           bufpos = 0;
+
+        return buffer[bufpos];
+     }
+
+     char c;
+
+     if (++bufpos == available)
+        AdjustBuffSize();
+
+     if ((buffer[bufpos] = c = ReadByte()) == '\\')
+     {
+        UpdateLineColumn(c);
+
+        int backSlashCnt = 1;
+
+        for (;;) // Read all the backslashes
+        {
+           if (++bufpos == available)
+              AdjustBuffSize();
+
+           try
+           {
+              if ((buffer[bufpos] = c = ReadByte()) != '\\')
+              {
+                 UpdateLineColumn(c);
+                 // found a non-backslash char.
+                 if ((c == 'u') && ((backSlashCnt & 1) == 1))
+                 {
+                    if (--bufpos < 0)
+                       bufpos = bufsize - 1;
+
+                    break;
+                 }
+
+                 backup(backSlashCnt);
+                 return '\\';
+              }
+           }
+           catch(java.io.IOException e)
+           {
+              if (backSlashCnt > 1)
+                 backup(backSlashCnt);
+
+              return '\\';
+           }
+
+           UpdateLineColumn(c);
+           backSlashCnt++;
+        }
+
+        // Here, we have seen an odd number of backslash's followed by a 'u'
+        try
+        {
+           while ((c = ReadByte()) == 'u')
+              ++column;
+
+           buffer[bufpos] = c = (char)(hexval(c) << 12 |
+                                       hexval(ReadByte()) << 8 |
+                                       hexval(ReadByte()) << 4 |
+                                       hexval(ReadByte()));
+
+           column += 4;
+        }
+        catch(java.io.IOException e)
+        {
+           throw new Error("Invalid escape character at line " + line +
+                                         " column " + column + ".");
+        }
+
+        if (backSlashCnt == 1)
+           return c;
+        else
+        {
+           backup(backSlashCnt - 1);
+           return '\\';
+        }
+     }
+     else
+     {
+        UpdateLineColumn(c);
+        return (c);
+     }
+  }
+
+  /**
+   * @deprecated 
+   * @see #getEndColumn
+   */
+
+  public int getColumn() {
+     return bufcolumn[bufpos];
+  }
+
+  /**
+   * @deprecated 
+   * @see #getEndLine
+   */
+
+  public int getLine() {
+     return bufline[bufpos];
+  }
+
+  public int getEndColumn() {
+     return bufcolumn[bufpos];
+  }
+
+  public int getEndLine() {
+     return bufline[bufpos];
+  }
+
+  public int getBeginColumn() {
+     return bufcolumn[tokenBegin];
+  }
+
+  public int getBeginLine() {
+     return bufline[tokenBegin];
+  }
+
+  public void backup(int amount) {
+
+    inBuf += amount;
+    if ((bufpos -= amount) < 0)
+       bufpos += bufsize;
+  }
+
+  public JavaCharStream(java.io.Reader dstream,
+                 int startline, int startcolumn, int buffersize)
+  {
+    inputStream = dstream;
+    line = startline;
+    column = startcolumn - 1;
+
+    available = bufsize = buffersize;
+    buffer = new char[buffersize];
+    bufline = new int[buffersize];
+    bufcolumn = new int[buffersize];
+    nextCharBuf = new char[4096];
+  }
+
+  public JavaCharStream(java.io.Reader dstream,
+                                        int startline, int startcolumn)
+  {
+     this(dstream, startline, startcolumn, 4096);
+  }
+
+  public JavaCharStream(java.io.Reader dstream)
+  {
+     this(dstream, 1, 1, 4096);
+  }
+  public void ReInit(java.io.Reader dstream,
+                 int startline, int startcolumn, int buffersize)
+  {
+    inputStream = dstream;
+    line = startline;
+    column = startcolumn - 1;
+
+    if (buffer == null || buffersize != buffer.length)
+    {
+      available = bufsize = buffersize;
+      buffer = new char[buffersize];
+      bufline = new int[buffersize];
+      bufcolumn = new int[buffersize];
+      nextCharBuf = new char[4096];
+    }
+    prevCharIsLF = prevCharIsCR = false;
+    tokenBegin = inBuf = maxNextCharInd = 0;
+    nextCharInd = bufpos = -1;
+  }
+
+  public void ReInit(java.io.Reader dstream,
+                                        int startline, int startcolumn)
+  {
+     ReInit(dstream, startline, startcolumn, 4096);
+  }
+
+  public void ReInit(java.io.Reader dstream)
+  {
+     ReInit(dstream, 1, 1, 4096);
+  }
+  public JavaCharStream(java.io.InputStream dstream, String encoding, int startline,
+  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
+  {
+     this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
+  }
+
+  public JavaCharStream(java.io.InputStream dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+     this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
+  }
+
+  public JavaCharStream(java.io.InputStream dstream, String encoding, int startline,
+                        int startcolumn) throws java.io.UnsupportedEncodingException
+  {
+     this(dstream, encoding, startline, startcolumn, 4096);
+  }
+
+  public JavaCharStream(java.io.InputStream dstream, int startline,
+                        int startcolumn)
+  {
+     this(dstream, startline, startcolumn, 4096);
+  }
+
+  public JavaCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
+  {
+     this(dstream, encoding, 1, 1, 4096);
+  }
+
+  public JavaCharStream(java.io.InputStream dstream)
+  {
+     this(dstream, 1, 1, 4096);
+  }
+
+  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
+  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
+  {
+     ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
+  }
+
+  public void ReInit(java.io.InputStream dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+     ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
+  }
+  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
+                     int startcolumn) throws java.io.UnsupportedEncodingException
+  {
+     ReInit(dstream, encoding, startline, startcolumn, 4096);
+  }
+  public void ReInit(java.io.InputStream dstream, int startline,
+                     int startcolumn)
+  {
+     ReInit(dstream, startline, startcolumn, 4096);
+  }
+  public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
+  {
+     ReInit(dstream, encoding, 1, 1, 4096);
+  }
+
+  public void ReInit(java.io.InputStream dstream)
+  {
+     ReInit(dstream, 1, 1, 4096);
+  }
+
+  public String GetImage()
+  {
+     if (bufpos >= tokenBegin)
+        return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
+     else
+        return new String(buffer, tokenBegin, bufsize - tokenBegin) +
+                              new String(buffer, 0, bufpos + 1);
+  }
+
+  public char[] GetSuffix(int len)
+  {
+     char[] ret = new char[len];
+
+     if ((bufpos + 1) >= len)
+        System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
+     else
+     {
+        System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
+                                                          len - bufpos - 1);
+        System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
+     }
+
+     return ret;
+  }
+
+  public void Done()
+  {
+     nextCharBuf = null;
+     buffer = null;
+     bufline = null;
+     bufcolumn = null;
+  }
+
+  /**
+   * Method to adjust line and column numbers for the start of a token.
+   */
+  public void adjustBeginLineColumn(int newLine, int newCol)
+  {
+     int start = tokenBegin;
+     int len;
+
+     if (bufpos >= tokenBegin)
+     {
+        len = bufpos - tokenBegin + inBuf + 1;
+     }
+     else
+     {
+        len = bufsize - tokenBegin + bufpos + 1 + inBuf;
+     }
+
+     int i = 0, j = 0, k = 0;
+     int nextColDiff = 0, columnDiff = 0;
+
+     while (i < len &&
+            bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
+     {
+        bufline[j] = newLine;
+        nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
+        bufcolumn[j] = newCol + columnDiff;
+        columnDiff = nextColDiff;
+        i++;
+     } 
+
+     if (i < len)
+     {
+        bufline[j] = newLine++;
+        bufcolumn[j] = newCol + columnDiff;
+
+        while (i++ < len)
+        {
+           if (bufline[j = start % bufsize] != bufline[++start % bufsize])
+              bufline[j] = newLine++;
+           else
+              bufline[j] = newLine;
+        }
+     }
+
+     line = bufline[j];
+     column = bufcolumn[j];
+  }
+
+}
diff --git a/examples/actors/xdfAST/List.java b/examples/actors/xdfAST/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..3afc68edc5e8b5116e6c8155e20f0923ff64121a
--- /dev/null
+++ b/examples/actors/xdfAST/List.java
@@ -0,0 +1,144 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+public class List<T extends ASTNode> extends ASTNode<T> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public List<T> clone() throws CloneNotSupportedException {
+        List node = (List)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public List<T> copy() {
+      try {
+          List node = (List)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public List<T> fullCopy() {
+        List res = (List)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in SSR.jrag at line 223
+
+	int getNumNoTransformChild() {return getNumChildNoTransform();}
+
+    // Declared in List.ast at line 3
+    // Declared in List.ast line 0
+
+    public List(int i) {
+        super(i);
+    }
+
+    // Declared in List.ast at line 6
+
+    public List(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in List.ast at line 10
+
+    public List() {
+        this(0);
+
+
+    }
+
+    // Declared in List.ast at line 16
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "List");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in List.ast at line 23
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in List.ast at line 27
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in List.ast at line 32
+
+
+public void checkChild(Node n, int i) {
+  if(!(n instanceof ASTNode)) throw new Error("The node type of child " + i + " must be an instance of ASTNode");
+}
+
+    // Declared in List.ast at line 36
+
+
+     public List<T> add(T node) {
+          addChild(node);
+          return this;
+     }
+
+    // Declared in List.ast at line 41
+
+
+     public void insertChild(T node, int i) {
+          list$touched = true;
+          super.insertChild(node, i);
+     }
+
+    // Declared in List.ast at line 45
+
+     public void addChild(T node) {
+          list$touched = true;
+          super.addChild(node);
+     }
+
+    // Declared in List.ast at line 49
+
+     public void removeChild(int i) {
+          list$touched = true;
+          super.removeChild(i);
+     }
+
+    // Declared in List.ast at line 53
+
+     public int getNumChild() {
+          if(list$touched) {
+              for(int i = 0; i < getNumChildNoTransform(); i++)
+                  getChild(i);
+              list$touched = false;
+          }
+          return getNumChildNoTransform();
+     }
+
+    // Declared in List.ast at line 61
+
+     private boolean list$touched = true;
+
+    // Declared in List.ast at line 62
+
+  public boolean mayHaveRewrite() { return false; }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Node.java b/examples/actors/xdfAST/Node.java
new file mode 100644
index 0000000000000000000000000000000000000000..bd693711dd7a6a6326937992bbe9d20d71350e9e
--- /dev/null
+++ b/examples/actors/xdfAST/Node.java
@@ -0,0 +1,37 @@
+/* Generated By:JJTree: Do not edit this line. Node.java */
+
+package xdfAST;
+
+/* All AST nodes must implement this interface.  It provides basic
+   machinery for constructing the parent and child relationships
+   between nodes. */
+
+public interface Node {
+
+  /** This method is called after the node has been made the current
+    node.  It indicates that child nodes can now be added to it. */
+  public void jjtOpen();
+
+  /** This method is called after all the child nodes have been
+    added. */
+  public void jjtClose();
+
+  /** This pair of methods are used to inform the node of its
+    parent. */
+  public void jjtSetParent(Node n);
+  public Node jjtGetParent();
+
+  /** This method tells the node to add its argument to the node's
+    list of children.  */
+  public void jjtAddChild(Node n, int i);
+
+  /** This method returns a child node.  The children are numbered
+     from zero, left to right. */
+  public Node jjtGetChild(int i);
+
+  /** Return the number of children the node has. */
+  public int jjtGetNumChildren();
+
+  /** Accept the visitor. **/
+  public Object jjtAccept(XmlParserVisitor visitor, Object data);
+}
diff --git a/examples/actors/xdfAST/Note.java b/examples/actors/xdfAST/Note.java
new file mode 100644
index 0000000000000000000000000000000000000000..d0820b439e1e49e3c248e54d587062f1971af7df
--- /dev/null
+++ b/examples/actors/xdfAST/Note.java
@@ -0,0 +1,333 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Note extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        kind_visited = -1;
+        value_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Note clone() throws CloneNotSupportedException {
+        Note node = (Note)super.clone();
+        node.kind_visited = -1;
+        node.value_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Note copy() {
+      try {
+          Note node = (Note)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Note fullCopy() {
+        Note res = (Note)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 160
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Note ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Note> ");
+    }
+  }
+
+    // Declared in SSR.jrag at line 186
+
+
+	void setValue(String s) {
+		for (Attribute a : getAttributes()) {
+			if (a instanceof value) {
+				a.getAttrValue().setLITERAL(unfix(s));
+			}
+		}		
+	}
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 32
+
+    public Note(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Note(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Note() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 32
+    public Note(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Note");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+    protected int kind_visited = -1;
+    // Declared in SSR.jrag at line 162
+ @SuppressWarnings({"unchecked", "cast"})     public String kind() {
+        if(kind_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: kind in class: ");
+        kind_visited = boundariesCrossed;
+        String kind_value = kind_compute();
+        kind_visited = -1;
+        return kind_value;
+    }
+
+    private String kind_compute() {
+		for (Attribute a : getAttributes()) {
+// 			System.out.println("   checking: "+a);
+			if (a.isKind()) {
+// 				System.out.println("    found "+fix(a.getAttrValue().getLITERAL()));
+				return fix(a.getAttrValue().getLITERAL());
+			}
+		}
+		return "";
+	}
+
+    protected int value_visited = -1;
+    // Declared in SSR.jrag at line 177
+ @SuppressWarnings({"unchecked", "cast"})     public String value() {
+        if(value_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: value in class: ");
+        value_visited = boundariesCrossed;
+        String value_value = value_compute();
+        value_visited = -1;
+        return value_value;
+    }
+
+    private String value_compute() {
+		for (Attribute a : getAttributes()) {
+			if (a instanceof value) {
+				return fix(a.getAttrValue().getLITERAL());
+			}
+		}
+		return "";
+	}
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Op.java b/examples/actors/xdfAST/Op.java
new file mode 100644
index 0000000000000000000000000000000000000000..bca6d10b5e1aea7121981e097c4ec99c842ebf5a
--- /dev/null
+++ b/examples/actors/xdfAST/Op.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Op extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Op clone() throws CloneNotSupportedException {
+        Op node = (Op)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Op copy() {
+      try {
+          Op node = (Op)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Op fullCopy() {
+        Op res = (Op)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 87
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Op ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Op> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 27
+
+    public Op(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Op(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Op() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 27
+    public Op(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Op");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Opt.java b/examples/actors/xdfAST/Opt.java
new file mode 100644
index 0000000000000000000000000000000000000000..2a84a280c515664b68fa017b47b6660fd19f9150
--- /dev/null
+++ b/examples/actors/xdfAST/Opt.java
@@ -0,0 +1,108 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+public class Opt<T extends ASTNode> extends ASTNode<T> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Opt<T> clone() throws CloneNotSupportedException {
+        Opt node = (Opt)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Opt<T> copy() {
+      try {
+          Opt node = (Opt)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Opt<T> fullCopy() {
+        Opt res = (Opt)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in SSR.jrag at line 224
+
+	int getNumChildNoTransfrom() {return getNumChildNoTransform();}
+
+    // Declared in Opt.ast at line 3
+    // Declared in Opt.ast line 0
+
+    public Opt(int i) {
+        super(i);
+    }
+
+    // Declared in Opt.ast at line 6
+
+    public Opt(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in Opt.ast at line 10
+
+    public Opt() {
+        this(0);
+
+
+    }
+
+    // Declared in Opt.ast at line 16
+
+
+     public Opt(T opt) {
+         setChild(opt, 0);
+     }
+
+    // Declared in Opt.ast at line 20
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Opt");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in Opt.ast at line 27
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in Opt.ast at line 31
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in Opt.ast at line 36
+
+
+public void checkChild(Node n, int i) {
+  if(i > 0) throw new Error("Optional nodes can only have one child");
+  if(!(n instanceof ASTNode)) throw new Error("Node type must be an instance of ASTNode");
+}
+
+    // Declared in Opt.ast at line 41
+
+
+  public boolean mayHaveRewrite() { return false; }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Output.java b/examples/actors/xdfAST/Output.java
new file mode 100644
index 0000000000000000000000000000000000000000..81c1938aca2d7edbfcf3216382ec935ca06d211f
--- /dev/null
+++ b/examples/actors/xdfAST/Output.java
@@ -0,0 +1,278 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+// Generated types
+
+public class Output extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Output clone() throws CloneNotSupportedException {
+        Output node = (Output)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Output copy() {
+      try {
+          Output node = (Output)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Output fullCopy() {
+        Output res = (Output)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 53
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Output ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Output> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 25
+
+    public Output(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Output(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Output() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 25
+    public Output(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Output");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Parameter.java b/examples/actors/xdfAST/Parameter.java
new file mode 100644
index 0000000000000000000000000000000000000000..25cd0200b2d1e8cb1827f29581f6c4d24358af03
--- /dev/null
+++ b/examples/actors/xdfAST/Parameter.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Parameter extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Parameter clone() throws CloneNotSupportedException {
+        Parameter node = (Parameter)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Parameter copy() {
+      try {
+          Parameter node = (Parameter)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Parameter fullCopy() {
+        Parameter res = (Parameter)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 104
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Parameter ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Parameter> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 28
+
+    public Parameter(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Parameter(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Parameter() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 28
+    public Parameter(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Parameter");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/ParseException.java b/examples/actors/xdfAST/ParseException.java
new file mode 100644
index 0000000000000000000000000000000000000000..895bb5d702b88faef669265282ade7e5a0c4d2c8
--- /dev/null
+++ b/examples/actors/xdfAST/ParseException.java
@@ -0,0 +1,192 @@
+/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */
+package xdfAST;
+
+/**
+ * This exception is thrown when parse errors are encountered.
+ * You can explicitly create objects of this exception type by
+ * calling the method generateParseException in the generated
+ * parser.
+ *
+ * You can modify this class to customize your error reporting
+ * mechanisms so long as you retain the public fields.
+ */
+public class ParseException extends Exception {
+
+  /**
+   * This constructor is used by the method "generateParseException"
+   * in the generated parser.  Calling this constructor generates
+   * a new object of this type with the fields "currentToken",
+   * "expectedTokenSequences", and "tokenImage" set.  The boolean
+   * flag "specialConstructor" is also set to true to indicate that
+   * this constructor was used to create this object.
+   * This constructor calls its super class with the empty string
+   * to force the "toString" method of parent class "Throwable" to
+   * print the error message in the form:
+   *     ParseException: <result of getMessage>
+   */
+  public ParseException(Token currentTokenVal,
+                        int[][] expectedTokenSequencesVal,
+                        String[] tokenImageVal
+                       )
+  {
+    super("");
+    specialConstructor = true;
+    currentToken = currentTokenVal;
+    expectedTokenSequences = expectedTokenSequencesVal;
+    tokenImage = tokenImageVal;
+  }
+
+  /**
+   * The following constructors are for use by you for whatever
+   * purpose you can think of.  Constructing the exception in this
+   * manner makes the exception behave in the normal way - i.e., as
+   * documented in the class "Throwable".  The fields "errorToken",
+   * "expectedTokenSequences", and "tokenImage" do not contain
+   * relevant information.  The JavaCC generated code does not use
+   * these constructors.
+   */
+
+  public ParseException() {
+    super();
+    specialConstructor = false;
+  }
+
+  public ParseException(String message) {
+    super(message);
+    specialConstructor = false;
+  }
+
+  /**
+   * This variable determines which constructor was used to create
+   * this object and thereby affects the semantics of the
+   * "getMessage" method (see below).
+   */
+  protected boolean specialConstructor;
+
+  /**
+   * This is the last token that has been consumed successfully.  If
+   * this object has been created due to a parse error, the token
+   * followng this token will (therefore) be the first error token.
+   */
+  public Token currentToken;
+
+  /**
+   * Each entry in this array is an array of integers.  Each array
+   * of integers represents a sequence of tokens (by their ordinal
+   * values) that is expected at this point of the parse.
+   */
+  public int[][] expectedTokenSequences;
+
+  /**
+   * This is a reference to the "tokenImage" array of the generated
+   * parser within which the parse error occurred.  This array is
+   * defined in the generated ...Constants interface.
+   */
+  public String[] tokenImage;
+
+  /**
+   * This method has the standard behavior when this object has been
+   * created using the standard constructors.  Otherwise, it uses
+   * "currentToken" and "expectedTokenSequences" to generate a parse
+   * error message and returns it.  If this object has been created
+   * due to a parse error, and you do not catch it (it gets thrown
+   * from the parser), then this method is called during the printing
+   * of the final stack trace, and hence the correct error message
+   * gets displayed.
+   */
+  public String getMessage() {
+    if (!specialConstructor) {
+      return super.getMessage();
+    }
+    StringBuffer expected = new StringBuffer();
+    int maxSize = 0;
+    for (int i = 0; i < expectedTokenSequences.length; i++) {
+      if (maxSize < expectedTokenSequences[i].length) {
+        maxSize = expectedTokenSequences[i].length;
+      }
+      for (int j = 0; j < expectedTokenSequences[i].length; j++) {
+        expected.append(tokenImage[expectedTokenSequences[i][j]]).append(" ");
+      }
+      if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
+        expected.append("...");
+      }
+      expected.append(eol).append("    ");
+    }
+    String retval = "Encountered \"";
+    Token tok = currentToken.next;
+    for (int i = 0; i < maxSize; i++) {
+      if (i != 0) retval += " ";
+      if (tok.kind == 0) {
+        retval += tokenImage[0];
+        break;
+      }
+      retval += add_escapes(tok.image);
+      tok = tok.next; 
+    }
+    retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
+    retval += "." + eol;
+    if (expectedTokenSequences.length == 1) {
+      retval += "Was expecting:" + eol + "    ";
+    } else {
+      retval += "Was expecting one of:" + eol + "    ";
+    }
+    retval += expected.toString();
+    return retval;
+  }
+
+  /**
+   * The end of line string for this machine.
+   */
+  protected String eol = System.getProperty("line.separator", "\n");
+ 
+  /**
+   * Used to convert raw characters to their escaped version
+   * when these raw version cannot be used as part of an ASCII
+   * string literal.
+   */
+  protected String add_escapes(String str) {
+      StringBuffer retval = new StringBuffer();
+      char ch;
+      for (int i = 0; i < str.length(); i++) {
+        switch (str.charAt(i))
+        {
+           case 0 :
+              continue;
+           case '\b':
+              retval.append("\\b");
+              continue;
+           case '\t':
+              retval.append("\\t");
+              continue;
+           case '\n':
+              retval.append("\\n");
+              continue;
+           case '\f':
+              retval.append("\\f");
+              continue;
+           case '\r':
+              retval.append("\\r");
+              continue;
+           case '\"':
+              retval.append("\\\"");
+              continue;
+           case '\'':
+              retval.append("\\\'");
+              continue;
+           case '\\':
+              retval.append("\\\\");
+              continue;
+           default:
+              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
+                 String s = "0000" + Integer.toString(ch, 16);
+                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
+              } else {
+                 retval.append(ch);
+              }
+              continue;
+        }
+      }
+      return retval.toString();
+   }
+
+}
diff --git a/examples/actors/xdfAST/Port.java b/examples/actors/xdfAST/Port.java
new file mode 100644
index 0000000000000000000000000000000000000000..ee868b6e5aa7d0d434d336d943093c5c67813a88
--- /dev/null
+++ b/examples/actors/xdfAST/Port.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Port extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Port clone() throws CloneNotSupportedException {
+        Port node = (Port)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Port copy() {
+      try {
+          Port node = (Port)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Port fullCopy() {
+        Port res = (Port)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 304
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Port ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Port> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 44
+
+    public Port(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Port(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Port() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 44
+    public Port(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Port");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/QID.java b/examples/actors/xdfAST/QID.java
new file mode 100644
index 0000000000000000000000000000000000000000..154c082a7ea8b4f2c84acb1dcb0e765871aa7399
--- /dev/null
+++ b/examples/actors/xdfAST/QID.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class QID extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public QID clone() throws CloneNotSupportedException {
+        QID node = (QID)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public QID copy() {
+      try {
+          QID node = (QID)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public QID fullCopy() {
+        QID res = (QID)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 121
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<QID ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</QID> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 29
+
+    public QID(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public QID(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public QID() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 29
+    public QID(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "QID");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Schedule.java b/examples/actors/xdfAST/Schedule.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b638bc103ea262662f1276e079beb927a2972f9
--- /dev/null
+++ b/examples/actors/xdfAST/Schedule.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Schedule extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Schedule clone() throws CloneNotSupportedException {
+        Schedule node = (Schedule)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Schedule copy() {
+      try {
+          Schedule node = (Schedule)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Schedule fullCopy() {
+        Schedule res = (Schedule)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 546
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Schedule ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Schedule> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 66
+
+    public Schedule(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Schedule(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Schedule() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 66
+    public Schedule(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Schedule");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/SimpleElement.java b/examples/actors/xdfAST/SimpleElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..064657405777d3f8315667aabb6e637407b7e029
--- /dev/null
+++ b/examples/actors/xdfAST/SimpleElement.java
@@ -0,0 +1,84 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public abstract class SimpleElement extends Element implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public SimpleElement clone() throws CloneNotSupportedException {
+        SimpleElement node = (SimpleElement)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 13
+
+    public SimpleElement(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public SimpleElement(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public SimpleElement() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 16
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "SimpleElement");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 23
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 27
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 32
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xdf.ast at line 35
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xdf.ast at line 38
+
+  public boolean mayHaveRewrite() { return false; }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/SimpleNode.java b/examples/actors/xdfAST/SimpleNode.java
new file mode 100644
index 0000000000000000000000000000000000000000..7b482078b1a1ae48efd8cc3d9201cccce5dd7f60
--- /dev/null
+++ b/examples/actors/xdfAST/SimpleNode.java
@@ -0,0 +1,87 @@
+/* Generated By:JJTree: Do not edit this line. SimpleNode.java */
+
+package xdfAST;
+
+public class SimpleNode implements Node {
+  protected Node parent;
+  protected Node[] children;
+  protected int id;
+  protected XmlParser parser;
+
+  public SimpleNode(int i) {
+    id = i;
+  }
+
+  public SimpleNode(XmlParser p, int i) {
+    this(i);
+    parser = p;
+  }
+
+  public void jjtOpen() {
+  }
+
+  public void jjtClose() {
+  }
+  
+  public void jjtSetParent(Node n) { parent = n; }
+  public Node jjtGetParent() { return parent; }
+
+  public void jjtAddChild(Node n, int i) {
+    if (children == null) {
+      children = new Node[i + 1];
+    } else if (i >= children.length) {
+      Node c[] = new Node[i + 1];
+      System.arraycopy(children, 0, c, 0, children.length);
+      children = c;
+    }
+    children[i] = n;
+  }
+
+  public Node jjtGetChild(int i) {
+    return children[i];
+  }
+
+  public int jjtGetNumChildren() {
+    return (children == null) ? 0 : children.length;
+  }
+
+  /** Accept the visitor. **/
+  public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+    return visitor.visit(this, data);
+  }
+
+  /** Accept the visitor. **/
+  public Object childrenAccept(XmlParserVisitor visitor, Object data) {
+    if (children != null) {
+      for (int i = 0; i < children.length; ++i) {
+        children[i].jjtAccept(visitor, data);
+      }
+    }
+    return data;
+  }
+
+  /* You can override these two methods in subclasses of SimpleNode to
+     customize the way the node appears when the tree is dumped.  If
+     your output uses more than one line you should override
+     toString(String), otherwise overriding toString() is probably all
+     you need to do. */
+
+  public String toString() { return XmlParserTreeConstants.jjtNodeName[id]; }
+  public String toString(String prefix) { return prefix + toString(); }
+
+  /* Override this method if you want to customize how the node dumps
+     out its children. */
+
+  public void dump(String prefix) {
+    System.out.println(toString(prefix));
+    if (children != null) {
+      for (int i = 0; i < children.length; ++i) {
+	SimpleNode n = (SimpleNode)children[i];
+	if (n != null) {
+	  n.dump(prefix + " ");
+	}
+      }
+    }
+  }
+}
+
diff --git a/examples/actors/xdfAST/Specification.java b/examples/actors/xdfAST/Specification.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3a8e87f7e8bcf80b4bcfe0a726aa07405303fbc
--- /dev/null
+++ b/examples/actors/xdfAST/Specification.java
@@ -0,0 +1,287 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Specification extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Specification clone() throws CloneNotSupportedException {
+        Specification node = (Specification)super.clone();
+        node.genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Specification copy() {
+      try {
+          Specification node = (Specification)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Specification fullCopy() {
+        Specification res = (Specification)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in MergeActors.jrag at line 16
+
+	void mergeActors() {
+		for (Element e : getElements()) {
+			e.mergeActors();
+		}
+	}
+
+    // Declared in SSR.jrag at line 24
+
+
+	void genSSR(java.io.PrintStream out) {
+		
+	}
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 6
+
+    public Specification(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Specification(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Specification() {
+        this(0);
+
+        setChild(new Opt(), 1);
+        setChild(new List(), 2);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 6
+    public Specification(XmlHeader p0, Opt<DocType> p1, List<Element> p2) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+        setChild(p2, 2);
+    }
+
+    // Declared in xdf.ast at line 25
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Specification");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 36
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 41
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof XmlHeader))  throw new Error("Child number 0 of Specification has the type " + n.getClass().getName() + " which is not an instance of XmlHeader");
+  if(i == 1) {
+    if(!(n instanceof Opt)) throw new Error("Child number 1 of Specification has the type " + n.getClass().getName() + " which is not an instance of Opt");
+    if(((Opt)n).getNumChildNoTransfrom() != 0 && !(((Opt)n).getChildNoTransform(0) instanceof DocType)) throw new Error("Optional DocType has the type " + ((Opt)n).getChildNoTransform(0).getClass().getName() + " which is not an instance of DocType");
+  }
+  if(i == 2) {
+    if(!(n instanceof List)) throw new Error("Child number 2 of Specification has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 54
+
+
+  public int getNumChild() {
+    return 3;
+  }
+
+    // Declared in xdf.ast at line 57
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 6
+    public void setXmlHeader(XmlHeader node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public XmlHeader getXmlHeader() {
+        return (XmlHeader)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public XmlHeader getXmlHeaderNoTransform() {
+        return (XmlHeader)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 6
+    public void setDocTypeOpt(Opt<DocType> opt) {
+        setChild(opt, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    public boolean hasDocType() {
+        return getDocTypeOpt().getNumChild() != 0;
+    }
+
+    // Declared in xdf.ast at line 10
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public DocType getDocType() {
+        return (DocType)getDocTypeOpt().getChild(0);
+    }
+
+    // Declared in xdf.ast at line 14
+
+
+    public void setDocType(DocType node) {
+        getDocTypeOpt().setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 17
+
+     @SuppressWarnings({"unchecked", "cast"})  public Opt<DocType> getDocTypeOpt() {
+        return (Opt<DocType>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Opt<DocType> getDocTypeOptNoTransform() {
+        return (Opt<DocType>)getChildNoTransform(1);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 6
+    public void setElementList(List<Element> list) {
+        setChild(list, 2);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(2);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(2);
+    }
+
+    protected java.util.Map genStaticSchedule_HashSet_Instance__visited;
+    // Declared in SSR.jrag at line 53
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<Instance> genStaticSchedule(HashSet<Instance> l) {
+        Object _parameters = l;
+if(genStaticSchedule_HashSet_Instance__visited == null) genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(genStaticSchedule_HashSet_Instance__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: genStaticSchedule in class: ");
+        genStaticSchedule_HashSet_Instance__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<Instance> genStaticSchedule_HashSet_Instance__value = genStaticSchedule_compute(l);
+        genStaticSchedule_HashSet_Instance__visited.remove(_parameters);
+        return genStaticSchedule_HashSet_Instance__value;
+    }
+
+    private HashSet<Instance> genStaticSchedule_compute(HashSet<Instance> l) {
+		for (int i=0; i<getNumElement(); i++) {
+			l = getElement(i).genStaticSchedule(l);
+		}
+		return l;
+	}
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Start.java b/examples/actors/xdfAST/Start.java
new file mode 100644
index 0000000000000000000000000000000000000000..585d6c50aa2d922e98e4f194aa9b911aef1c0eb3
--- /dev/null
+++ b/examples/actors/xdfAST/Start.java
@@ -0,0 +1,168 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+// -*-Java-*- 
+
+// Automatically generated JastAdd abstract grammar file 
+// Predefined types
+
+public class Start extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Start clone() throws CloneNotSupportedException {
+        Start node = (Start)super.clone();
+        node.genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Start copy() {
+      try {
+          Start node = (Start)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Start fullCopy() {
+        Start res = (Start)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in MergeActors.jrag at line 13
+
+	public void mergeActors() {
+		getSpecification().mergeActors();
+	}
+
+    // Declared in SSR.jrag at line 20
+
+
+	public void genSSR(java.io.PrintStream out) {
+		getSpecification().genSSR(out);
+	}
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 5
+
+    public Start(int i) {
+        super(i);
+        is$Final(true);
+    }
+
+    // Declared in xdf.ast at line 7
+
+    public Start(XmlParser p, int i) {
+        this(i);
+        parser = p;
+        is$Final(true);
+    }
+
+    // Declared in xdf.ast at line 12
+
+    public Start() {
+        this(0);
+
+        is$Final(true);
+
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    // Declared in xdf.ast line 5
+    public Start(Specification p0) {
+        setChild(p0, 0);
+        is$Final(true);
+    }
+
+    // Declared in xdf.ast at line 25
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Start");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 36
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 41
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof Specification))  throw new Error("Child number 0 of Start has the type " + n.getClass().getName() + " which is not an instance of Specification");
+}
+
+    // Declared in xdf.ast at line 45
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 48
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 5
+    public void setSpecification(Specification node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public Specification getSpecification() {
+        return (Specification)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public Specification getSpecificationNoTransform() {
+        return (Specification)getChildNoTransform(0);
+    }
+
+    protected java.util.Map genStaticSchedule_HashSet_Instance__visited;
+    // Declared in SSR.jrag at line 52
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<Instance> genStaticSchedule(HashSet<Instance> l) {
+        Object _parameters = l;
+if(genStaticSchedule_HashSet_Instance__visited == null) genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(genStaticSchedule_HashSet_Instance__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: genStaticSchedule in class: ");
+        genStaticSchedule_HashSet_Instance__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<Instance> genStaticSchedule_HashSet_Instance__value = genStaticSchedule_compute(l);
+        genStaticSchedule_HashSet_Instance__visited.remove(_parameters);
+        return genStaticSchedule_HashSet_Instance__value;
+    }
+
+    private HashSet<Instance> genStaticSchedule_compute(HashSet<Instance> l) {  return getSpecification().genStaticSchedule(l);  }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Stmt.java b/examples/actors/xdfAST/Stmt.java
new file mode 100644
index 0000000000000000000000000000000000000000..0aa6f2334eabc8213894daf84648883adff27690
--- /dev/null
+++ b/examples/actors/xdfAST/Stmt.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Stmt extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Stmt clone() throws CloneNotSupportedException {
+        Stmt node = (Stmt)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Stmt copy() {
+      try {
+          Stmt node = (Stmt)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Stmt fullCopy() {
+        Stmt res = (Stmt)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 478
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Stmt ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Stmt> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 62
+
+    public Stmt(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Stmt(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Stmt() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 62
+    public Stmt(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Stmt");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/StringElement.java b/examples/actors/xdfAST/StringElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e4be35c9a06a4301fa3d0ee44b166c46d5e5cbd
--- /dev/null
+++ b/examples/actors/xdfAST/StringElement.java
@@ -0,0 +1,127 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class StringElement extends SimpleElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public StringElement clone() throws CloneNotSupportedException {
+        StringElement node = (StringElement)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public StringElement copy() {
+      try {
+          StringElement node = (StringElement)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public StringElement fullCopy() {
+        StringElement res = (StringElement)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 14
+
+    public StringElement(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public StringElement(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public StringElement() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 14
+    public StringElement(String p0) {
+        setLITERAL(p0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "StringElement"+ "\"" + getLITERAL() + "\"");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xdf.ast at line 40
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xdf.ast at line 43
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 14
+    protected String tokenString_LITERAL;
+
+    // Declared in xdf.ast at line 3
+
+    public void setLITERAL(String value) {
+        tokenString_LITERAL = value;
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public String getLITERAL() {
+        return tokenString_LITERAL != null ? tokenString_LITERAL : "";
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Thing.java b/examples/actors/xdfAST/Thing.java
new file mode 100644
index 0000000000000000000000000000000000000000..c77e5823772a944295c3c95cb0ac0215835b7f85
--- /dev/null
+++ b/examples/actors/xdfAST/Thing.java
@@ -0,0 +1,237 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public abstract class Thing extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Thing clone() throws CloneNotSupportedException {
+        Thing node = (Thing)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 9
+
+    public Thing(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Thing(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Thing() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 9
+    public Thing(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Thing");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Token.java b/examples/actors/xdfAST/Token.java
new file mode 100644
index 0000000000000000000000000000000000000000..4e9fcd16c04d798ddd3e5f24492f24f8024c9ea0
--- /dev/null
+++ b/examples/actors/xdfAST/Token.java
@@ -0,0 +1,81 @@
+/* Generated By:JavaCC: Do not edit this line. Token.java Version 3.0 */
+package xdfAST;
+
+/**
+ * Describes the input token stream.
+ */
+
+public class Token {
+
+  /**
+   * An integer that describes the kind of this token.  This numbering
+   * system is determined by JavaCCParser, and a table of these numbers is
+   * stored in the file ...Constants.java.
+   */
+  public int kind;
+
+  /**
+   * beginLine and beginColumn describe the position of the first character
+   * of this token; endLine and endColumn describe the position of the
+   * last character of this token.
+   */
+  public int beginLine, beginColumn, endLine, endColumn;
+
+  /**
+   * The string image of the token.
+   */
+  public String image;
+
+  /**
+   * A reference to the next regular (non-special) token from the input
+   * stream.  If this is the last token from the input stream, or if the
+   * token manager has not read tokens beyond this one, this field is
+   * set to null.  This is true only if this token is also a regular
+   * token.  Otherwise, see below for a description of the contents of
+   * this field.
+   */
+  public Token next;
+
+  /**
+   * This field is used to access special tokens that occur prior to this
+   * token, but after the immediately preceding regular (non-special) token.
+   * If there are no such special tokens, this field is set to null.
+   * When there are more than one such special token, this field refers
+   * to the last of these special tokens, which in turn refers to the next
+   * previous special token through its specialToken field, and so on
+   * until the first special token (whose specialToken field is null).
+   * The next fields of special tokens refer to other special tokens that
+   * immediately follow it (without an intervening regular token).  If there
+   * is no such token, this field is null.
+   */
+  public Token specialToken;
+
+  /**
+   * Returns the image.
+   */
+  public String toString()
+  {
+     return image;
+  }
+
+  /**
+   * Returns a new Token object, by default. However, if you want, you
+   * can create and return subclass objects based on the value of ofKind.
+   * Simply add the cases to the switch for all those special cases.
+   * For example, if you have a subclass of Token called IDToken that
+   * you want to create if ofKind is ID, simlpy add something like :
+   *
+   *    case MyParserConstants.ID : return new IDToken();
+   *
+   * to the following switch statement. Then you can cast matchedToken
+   * variable to the appropriate type and use it in your lexical actions.
+   */
+  public static final Token newToken(int ofKind)
+  {
+     switch(ofKind)
+     {
+       default : return new Token();
+     }
+  }
+
+}
diff --git a/examples/actors/xdfAST/TokenMgrError.java b/examples/actors/xdfAST/TokenMgrError.java
new file mode 100644
index 0000000000000000000000000000000000000000..18eba1bd1c9b12d63bf55b646f261fe199f7c908
--- /dev/null
+++ b/examples/actors/xdfAST/TokenMgrError.java
@@ -0,0 +1,133 @@
+/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 */
+package xdfAST;
+
+public class TokenMgrError extends Error
+{
+   /*
+    * Ordinals for various reasons why an Error of this type can be thrown.
+    */
+
+   /**
+    * Lexical error occured.
+    */
+   static final int LEXICAL_ERROR = 0;
+
+   /**
+    * An attempt wass made to create a second instance of a static token manager.
+    */
+   static final int STATIC_LEXER_ERROR = 1;
+
+   /**
+    * Tried to change to an invalid lexical state.
+    */
+   static final int INVALID_LEXICAL_STATE = 2;
+
+   /**
+    * Detected (and bailed out of) an infinite loop in the token manager.
+    */
+   static final int LOOP_DETECTED = 3;
+
+   /**
+    * Indicates the reason why the exception is thrown. It will have
+    * one of the above 4 values.
+    */
+   int errorCode;
+
+   /**
+    * Replaces unprintable characters by their espaced (or unicode escaped)
+    * equivalents in the given string
+    */
+   protected static final String addEscapes(String str) {
+      StringBuffer retval = new StringBuffer();
+      char ch;
+      for (int i = 0; i < str.length(); i++) {
+        switch (str.charAt(i))
+        {
+           case 0 :
+              continue;
+           case '\b':
+              retval.append("\\b");
+              continue;
+           case '\t':
+              retval.append("\\t");
+              continue;
+           case '\n':
+              retval.append("\\n");
+              continue;
+           case '\f':
+              retval.append("\\f");
+              continue;
+           case '\r':
+              retval.append("\\r");
+              continue;
+           case '\"':
+              retval.append("\\\"");
+              continue;
+           case '\'':
+              retval.append("\\\'");
+              continue;
+           case '\\':
+              retval.append("\\\\");
+              continue;
+           default:
+              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
+                 String s = "0000" + Integer.toString(ch, 16);
+                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
+              } else {
+                 retval.append(ch);
+              }
+              continue;
+        }
+      }
+      return retval.toString();
+   }
+
+   /**
+    * Returns a detailed message for the Error when it is thrown by the
+    * token manager to indicate a lexical error.
+    * Parameters : 
+    *    EOFSeen     : indicates if EOF caused the lexicl error
+    *    curLexState : lexical state in which this error occured
+    *    errorLine   : line number when the error occured
+    *    errorColumn : column number when the error occured
+    *    errorAfter  : prefix that was seen before this error occured
+    *    curchar     : the offending character
+    * Note: You can customize the lexical error message by modifying this method.
+    */
+   protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
+      return("Lexical error at line " +
+           errorLine + ", column " +
+           errorColumn + ".  Encountered: " +
+           (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
+           "after : \"" + addEscapes(errorAfter) + "\"");
+   }
+
+   /**
+    * You can also modify the body of this method to customize your error messages.
+    * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
+    * of end-users concern, so you can return something like : 
+    *
+    *     "Internal Error : Please file a bug report .... "
+    *
+    * from this method for such cases in the release version of your parser.
+    */
+   public String getMessage() {
+      return super.getMessage();
+   }
+
+   /*
+    * Constructors of various flavors follow.
+    */
+
+   public TokenMgrError() {
+   }
+
+   public TokenMgrError(String message, int reason) {
+      super(message);
+      errorCode = reason;
+   }
+
+   public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
+      this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
+   }
+}
diff --git a/examples/actors/xdfAST/Transition.java b/examples/actors/xdfAST/Transition.java
new file mode 100644
index 0000000000000000000000000000000000000000..c9a57af4690c8bc3c2f52574f506b1facaef5a3c
--- /dev/null
+++ b/examples/actors/xdfAST/Transition.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Transition extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Transition clone() throws CloneNotSupportedException {
+        Transition node = (Transition)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Transition copy() {
+      try {
+          Transition node = (Transition)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Transition fullCopy() {
+        Transition res = (Transition)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 326
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Transition ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Transition> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 46
+
+    public Transition(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Transition(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Transition() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 46
+    public Transition(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Transition");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Type.java b/examples/actors/xdfAST/Type.java
new file mode 100644
index 0000000000000000000000000000000000000000..b096ddaccda2d6ebce21563045a6d49f8e114e3b
--- /dev/null
+++ b/examples/actors/xdfAST/Type.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Type extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Type clone() throws CloneNotSupportedException {
+        Type node = (Type)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Type copy() {
+      try {
+          Type node = (Type)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Type fullCopy() {
+        Type res = (Type)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 495
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<Type ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</Type> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 63
+
+    public Type(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Type(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Type() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 63
+    public Type(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Type");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/ValueElement.java b/examples/actors/xdfAST/ValueElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..74ae9c02cd2d0eb9c28a6ac2b4c138c456052046
--- /dev/null
+++ b/examples/actors/xdfAST/ValueElement.java
@@ -0,0 +1,256 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class ValueElement extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ValueElement clone() throws CloneNotSupportedException {
+        ValueElement node = (ValueElement)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ValueElement copy() {
+      try {
+          ValueElement node = (ValueElement)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ValueElement fullCopy() {
+        ValueElement res = (ValueElement)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 12
+
+    public ValueElement(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public ValueElement(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public ValueElement() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 12
+    public ValueElement(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "ValueElement");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/Version.java b/examples/actors/xdfAST/Version.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc6f45f607b918d9d620ee7d8569057a02430e23
--- /dev/null
+++ b/examples/actors/xdfAST/Version.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class Version extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Version clone() throws CloneNotSupportedException {
+        Version node = (Version)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Version copy() {
+      try {
+          Version node = (Version)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Version fullCopy() {
+        Version res = (Version)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 38
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" version=");
+    getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 20
+
+    public Version(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public Version(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public Version() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 20
+    public Version(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Version");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/XDF.java b/examples/actors/xdfAST/XDF.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f0fa82b0e20513b72d73a33961fd17d73333ebc
--- /dev/null
+++ b/examples/actors/xdfAST/XDF.java
@@ -0,0 +1,375 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class XDF extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        getConnections_HashSet_Connection__visited = new java.util.HashMap(4);
+        genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+        root_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XDF clone() throws CloneNotSupportedException {
+        XDF node = (XDF)super.clone();
+        node.getConnections_HashSet_Connection__visited = new java.util.HashMap(4);
+        node.genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+        node.root_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XDF copy() {
+      try {
+          XDF node = (XDF)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XDF fullCopy() {
+        XDF res = (XDF)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 512
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<XDF ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</XDF> ");
+    }
+  }
+
+    // Declared in MergeActors.jrag at line 21
+
+	void mergeActors() {
+		HashSet<Instance> schedule = genStaticSchedule(new HashSet<Instance>());
+		HashSet<Connection> cons = getConnections(new HashSet<Connection>());
+		for (Instance i : schedule) {
+			while (i.next != null) {
+// 				System.out.println("Searching connections for: "+i.name()+" "+i.next.name());
+				for (Connection c : cons) {
+					System.out.println("  "+c.getSource().name()+" "+c.getDest().name());
+					if (c.getSource() == i && c.getDest() == i.next) {
+// 						System.out.println("   Found");
+						// Check port names and perform actual actor
+						// merge. Then set remove_me flag so that this
+						// connection will be removed from the actor
+						// network.
+						c.remove_me = true;
+						c.is$Final(false);
+					} else if (c.getSource() == i.next) {
+						c.setSource(i.id());
+					}
+				}
+				i.merge(i.next);
+				i.setName(i.name()+"_"+i.next.name());
+				i.next.remove_me = true;
+				i.next.is$Final(false);
+				i.next = i.next.next;
+			}
+		}
+		// Now generate files for the newly merged actor instances.
+		for (Instance i : getInstances()) {}
+	}
+
+    // Declared in MergeActors.jrag at line 78
+
+
+	public HashSet<Instance> getInstances() {
+		return getInstances(new HashSet<Instance>());
+	}
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 64
+
+    public XDF(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public XDF(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public XDF() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 64
+    public XDF(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "XDF");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+    protected java.util.Map getConnections_HashSet_Connection__visited;
+    // Declared in MergeActors.jrag at line 67
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<Connection> getConnections(HashSet<Connection> set) {
+        Object _parameters = set;
+if(getConnections_HashSet_Connection__visited == null) getConnections_HashSet_Connection__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(getConnections_HashSet_Connection__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: getConnections in class: ");
+        getConnections_HashSet_Connection__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<Connection> getConnections_HashSet_Connection__value = getConnections_compute(set);
+        getConnections_HashSet_Connection__visited.remove(_parameters);
+        return getConnections_HashSet_Connection__value;
+    }
+
+    private HashSet<Connection> getConnections_compute(HashSet<Connection> set) {		
+		for (Element e : getElements()) {
+			set = e.getConnections(set);
+		}
+		return set;
+	}
+
+    protected java.util.Map genStaticSchedule_HashSet_Instance__visited;
+    // Declared in SSR.jrag at line 59
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<Instance> genStaticSchedule(HashSet<Instance> l) {
+        Object _parameters = l;
+if(genStaticSchedule_HashSet_Instance__visited == null) genStaticSchedule_HashSet_Instance__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(genStaticSchedule_HashSet_Instance__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: genStaticSchedule in class: ");
+        genStaticSchedule_HashSet_Instance__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<Instance> genStaticSchedule_HashSet_Instance__value = genStaticSchedule_compute(l);
+        genStaticSchedule_HashSet_Instance__visited.remove(_parameters);
+        return genStaticSchedule_HashSet_Instance__value;
+    }
+
+    private HashSet<Instance> genStaticSchedule_compute(HashSet<Instance> l) {
+		for (int i=0; i<getNumElement(); i++) {
+			l = getElement(i).genStaticSchedule(l);
+		}
+		return l;		
+	}
+
+    protected int root_visited = -1;
+    // Declared in SSR.jrag at line 119
+ @SuppressWarnings({"unchecked", "cast"})     public XDF root() {
+        if(root_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: root in class: ");
+        root_visited = boundariesCrossed;
+        XDF root_value = root_compute();
+        root_visited = -1;
+        return root_value;
+    }
+
+    private XDF root_compute() {  return this;  }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/XmlHeader.java b/examples/actors/xdfAST/XmlHeader.java
new file mode 100644
index 0000000000000000000000000000000000000000..c8de4cf30acac2dfe1fc5469916b5dcf045f197f
--- /dev/null
+++ b/examples/actors/xdfAST/XmlHeader.java
@@ -0,0 +1,194 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class XmlHeader extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XmlHeader clone() throws CloneNotSupportedException {
+        XmlHeader node = (XmlHeader)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XmlHeader copy() {
+      try {
+          XmlHeader node = (XmlHeader)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XmlHeader fullCopy() {
+        XmlHeader res = (XmlHeader)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 15
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print("<?xml ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(indent,pStream);
+    }
+    pStream.println("?> ");
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 7
+
+    public XmlHeader(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public XmlHeader(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public XmlHeader() {
+        this(0);
+
+        setChild(new List(), 0);
+
+    }
+
+    // Declared in xdf.ast at line 18
+
+
+    // Declared in xdf.ast line 7
+    public XmlHeader(List<Attribute> p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 22
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "XmlHeader");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 29
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 33
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 38
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of XmlHeader has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+}
+
+    // Declared in xdf.ast at line 46
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 49
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 7
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/XmlParser.java b/examples/actors/xdfAST/XmlParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3e7a668a2fb5caffea0ce23ff69f4bd13baa799
--- /dev/null
+++ b/examples/actors/xdfAST/XmlParser.java
@@ -0,0 +1,2672 @@
+/* Generated By:JJTree&JavaCC: Do not edit this line. XmlParser.java */
+    package xdfAST;
+    public class XmlParser/*@bgen(jjtree)*/implements XmlParserTreeConstants, XmlParserConstants {/*@bgen(jjtree)*/
+  protected JJTXmlParserState jjtree = new JJTXmlParserState();
+
+ // OPERATORS
+  final public Start Start() throws ParseException {
+                        /*@bgen(jjtree) Start */
+  Start jjtn000 = new Start(JJTSTART);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      Specification();
+    jjtree.closeNodeScope(jjtn000, true);
+    jjtc000 = false;
+    {if (true) return jjtn000;}
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+    throw new Error("Missing return statement in function");
+  }
+
+  final public void Specification() throws ParseException {
+                                       /*@bgen(jjtree) Specification */
+  Specification jjtn000 = new Specification(JJTSPECIFICATION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      XmlHeader();
+    Opt jjtn001 = new Opt(JJTOPT);
+    boolean jjtc001 = true;
+    jjtree.openNodeScope(jjtn001);
+      try {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case LTBANG:
+          DocType();
+          break;
+        default:
+          jj_la1[0] = jj_gen;
+          ;
+        }
+      } catch (Throwable jjte001) {
+    if (jjtc001) {
+      jjtree.clearNodeScope(jjtn001);
+      jjtc001 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte001 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte001;}
+    }
+    if (jjte001 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte001;}
+    }
+    {if (true) throw (Error)jjte001;}
+      } finally {
+    if (jjtc001) {
+      jjtree.closeNodeScope(jjtn001,  true);
+    }
+      }
+      ElementList();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void DocType() throws ParseException {
+                           /*@bgen(jjtree) DocType */
+                           DocType jjtn000 = new DocType(JJTDOCTYPE);
+                           boolean jjtc000 = true;
+                           jjtree.openNodeScope(jjtn000);String s;
+    try {
+      jj_consume_token(LTBANG);
+                s = new String();
+                if (getToken(1).kind != GT ) {
+                   s += getData();
+        }
+       jjtree.closeNodeScope(jjtn000, true);
+       jjtc000 = false;
+      jjtn000.setSTRING(s);
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  String getData() throws ParseException {
+        StringBuffer s = new StringBuffer();
+//     jjtThis.someData = true;
+    while ((getToken(1)).kind != LT && (getToken(1)).kind != LTSLASH) {
+                Token t = getNextToken();
+                if (t.specialToken != null) {
+                        Token tmp_t = t.specialToken;
+                        while (tmp_t.specialToken != null) {
+                                tmp_t = tmp_t.specialToken;
+                        }
+                        while (tmp_t != null) {
+                                s.append(tmp_t.image);
+                                tmp_t = tmp_t.next;
+                        }
+                }
+                s.append(t.image);
+       s.append(" ");
+        }
+        return s.toString();
+  }
+
+  final public void XmlHeader() throws ParseException {
+                               /*@bgen(jjtree) XmlHeader */
+  XmlHeader jjtn000 = new XmlHeader(JJTXMLHEADER);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(LTQ);
+      jj_consume_token(XML);
+      AttributeList();
+      jj_consume_token(QGT);
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void ElementList() throws ParseException {
+                            /*@bgen(jjtree) List */
+  List jjtn000 = new List(JJTLIST);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      label_1:
+      while (true) {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case INTEGER_LITERAL:
+        case FLOAT_LITERAL:
+        case IDENTIFIER:
+        case LT:
+          ;
+          break;
+        default:
+          jj_la1[1] = jj_gen;
+          break label_1;
+        }
+        Element();
+      }
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void AttributeList() throws ParseException {
+                              /*@bgen(jjtree) List */
+  List jjtn000 = new List(JJTLIST);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      label_2:
+      while (true) {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case encoding:
+        case version:
+        case XsiNoNamespaceSchemaLocation:
+        case XmlnsXsi:
+        case text_end_line:
+        case text_begin_line:
+        case name:
+        case from:
+        case dst_port:
+        case src:
+        case literal_kind:
+        case assignable:
+        case initial_state:
+        case dst:
+        case id:
+        case port:
+        case text_begin_col:
+        case src_port:
+        case text_end_col:
+        case value:
+        case kind:
+        case _to:
+          ;
+          break;
+        default:
+          jj_la1[2] = jj_gen;
+          break label_2;
+        }
+        Attribute();
+      }
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void AttrValue() throws ParseException {
+                               /*@bgen(jjtree) AttrValue */
+                                AttrValue jjtn000 = new AttrValue(JJTATTRVALUE);
+                                boolean jjtc000 = true;
+                                jjtree.openNodeScope(jjtn000);Token t;
+    try {
+      t = jj_consume_token(STRING_LITERAL);
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+         jjtn000.setLITERAL(t.image);
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
+    }
+  }
+
+  final public void Encoding() throws ParseException {
+                             /*@bgen(jjtree) Encoding */
+  Encoding jjtn000 = new Encoding(JJTENCODING);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(encoding);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void Version() throws ParseException {
+                           /*@bgen(jjtree) Version */
+  Version jjtn000 = new Version(JJTVERSION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(version);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void XsiNoNamespaceSchemaLocation() throws ParseException {
+                                                                     /*@bgen(jjtree) XsiNoNamespaceSchemaLocation */
+  XsiNoNamespaceSchemaLocation jjtn000 = new XsiNoNamespaceSchemaLocation(JJTXSINONAMESPACESCHEMALOCATION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(XsiNoNamespaceSchemaLocation);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void XmlnsXsi() throws ParseException {
+                             /*@bgen(jjtree) XmlnsXsi */
+  XmlnsXsi jjtn000 = new XmlnsXsi(JJTXMLNSXSI);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(XmlnsXsi);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void Element() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case LT:
+      jj_consume_token(LT);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case ActionTags:
+        ActionTags();
+        break;
+      case Stmt:
+        Stmt();
+        break;
+      case _Attribute:
+        _Attribute();
+        break;
+      case Action:
+        Action();
+        break;
+      case QID:
+        QID();
+        break;
+      case Transition:
+        Transition();
+        break;
+      case Output:
+        Output();
+        break;
+      case Parameter:
+        Parameter();
+        break;
+      case XDF:
+        XDF();
+        break;
+      case Args:
+        Args();
+        break;
+      case Entry:
+        Entry();
+        break;
+      case Expr:
+        Expr();
+        break;
+      case Note:
+        Note();
+        break;
+      case Guards:
+        Guards();
+        break;
+      case Actor:
+        Actor();
+        break;
+      case Decl:
+        Decl();
+        break;
+      case ID:
+        ID();
+        break;
+      case Type:
+        Type();
+        break;
+      case Import:
+        Import();
+        break;
+      case Op:
+        Op();
+        break;
+      case Port:
+        Port();
+        break;
+      case Input:
+        Input();
+        break;
+      case Class:
+        Class();
+        break;
+      case Schedule:
+        Schedule();
+        break;
+      case Connection:
+        Connection();
+        break;
+      case Instance:
+        Instance();
+        break;
+      default:
+        jj_la1[3] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      break;
+    case INTEGER_LITERAL:
+    case FLOAT_LITERAL:
+    case IDENTIFIER:
+      SimpleElement();
+      break;
+    default:
+      jj_la1[4] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void SimpleElement() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTEGER_LITERAL:
+      IntElement();
+      break;
+    case FLOAT_LITERAL:
+      FloatElement();
+      break;
+    case IDENTIFIER:
+      StringElement();
+      break;
+    default:
+      jj_la1[5] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void IntElement() throws ParseException {
+                                 /*@bgen(jjtree) IntElement */
+                                  IntElement jjtn000 = new IntElement(JJTINTELEMENT);
+                                  boolean jjtc000 = true;
+                                  jjtree.openNodeScope(jjtn000);Token t;
+    try {
+      t = jj_consume_token(INTEGER_LITERAL);
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+         jjtn000.setLITERAL(t.image);
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
+    }
+  }
+
+  final public void FloatElement() throws ParseException {
+                                     /*@bgen(jjtree) FloatElement */
+                                      FloatElement jjtn000 = new FloatElement(JJTFLOATELEMENT);
+                                      boolean jjtc000 = true;
+                                      jjtree.openNodeScope(jjtn000);Token t;
+    try {
+      t = jj_consume_token(FLOAT_LITERAL);
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+         jjtn000.setLITERAL(t.image);
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
+    }
+  }
+
+  final public void StringElement() throws ParseException {
+                                       /*@bgen(jjtree) StringElement */
+                                        StringElement jjtn000 = new StringElement(JJTSTRINGELEMENT);
+                                        boolean jjtc000 = true;
+                                        jjtree.openNodeScope(jjtn000);Token t;String s;
+    try {
+      t = jj_consume_token(IDENTIFIER);
+                s = t.image;
+                if (getToken(1).kind != GT ) {
+                s += getData();
+        }
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+         jjtn000.setLITERAL(s);
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+          }
+    }
+  }
+
+  final public void Attribute() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case encoding:
+      Encoding();
+      break;
+    case version:
+      Version();
+      break;
+    case XsiNoNamespaceSchemaLocation:
+      XsiNoNamespaceSchemaLocation();
+      break;
+    case XmlnsXsi:
+      XmlnsXsi();
+      break;
+    case _to:
+      _to();
+      break;
+    case literal_kind:
+      literal_kind();
+      break;
+    case src:
+      src();
+      break;
+    case kind:
+      kind();
+      break;
+    case text_begin_col:
+      text_begin_col();
+      break;
+    case port:
+      port();
+      break;
+    case dst_port:
+      dst_port();
+      break;
+    case initial_state:
+      initial_state();
+      break;
+    case id:
+      id();
+      break;
+    case value:
+      value();
+      break;
+    case from:
+      from();
+      break;
+    case text_end_line:
+      text_end_line();
+      break;
+    case text_end_col:
+      text_end_col();
+      break;
+    case src_port:
+      src_port();
+      break;
+    case assignable:
+      assignable();
+      break;
+    case text_begin_line:
+      text_begin_line();
+      break;
+    case dst:
+      dst();
+      break;
+    case name:
+      name();
+      break;
+    default:
+      jj_la1[6] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void Output() throws ParseException {
+                         /*@bgen(jjtree) Output */
+  Output jjtn000 = new Output(JJTOUTPUT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Output);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Output);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[7] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void Class() throws ParseException {
+                       /*@bgen(jjtree) Class */
+  Class jjtn000 = new Class(JJTCLASS);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Class);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Class);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[8] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void Op() throws ParseException {
+                 /*@bgen(jjtree) Op */
+  Op jjtn000 = new Op(JJTOP);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Op);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Op);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[9] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void Parameter() throws ParseException {
+                               /*@bgen(jjtree) Parameter */
+  Parameter jjtn000 = new Parameter(JJTPARAMETER);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Parameter);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Parameter);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[10] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void QID() throws ParseException {
+                   /*@bgen(jjtree) QID */
+  QID jjtn000 = new QID(JJTQID);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(QID);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(QID);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[11] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void text_end_line() throws ParseException {
+                                       /*@bgen(jjtree) text_end_line */
+  text_end_line jjtn000 = new text_end_line(JJTTEXT_END_LINE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(text_end_line);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void Connection() throws ParseException {
+                                 /*@bgen(jjtree) Connection */
+  Connection jjtn000 = new Connection(JJTCONNECTION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Connection);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Connection);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[12] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void Note() throws ParseException {
+                     /*@bgen(jjtree) Note */
+  Note jjtn000 = new Note(JJTNOTE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Note);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Note);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[13] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void text_begin_line() throws ParseException {
+                                           /*@bgen(jjtree) text_begin_line */
+  text_begin_line jjtn000 = new text_begin_line(JJTTEXT_BEGIN_LINE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(text_begin_line);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void name() throws ParseException {
+                     /*@bgen(jjtree) name */
+  name jjtn000 = new name(JJTNAME);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(name);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void from() throws ParseException {
+                     /*@bgen(jjtree) from */
+  from jjtn000 = new from(JJTFROM);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(from);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void Instance() throws ParseException {
+                             /*@bgen(jjtree) Instance */
+  Instance jjtn000 = new Instance(JJTINSTANCE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Instance);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Instance);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[14] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void Entry() throws ParseException {
+                       /*@bgen(jjtree) Entry */
+  Entry jjtn000 = new Entry(JJTENTRY);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Entry);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Entry);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[15] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void dst_port() throws ParseException {
+                             /*@bgen(jjtree) dst_port */
+  dst_port jjtn000 = new dst_port(JJTDST_PORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(dst_port);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void Guards() throws ParseException {
+                         /*@bgen(jjtree) Guards */
+  Guards jjtn000 = new Guards(JJTGUARDS);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Guards);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Guards);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[16] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void src() throws ParseException {
+                   /*@bgen(jjtree) src */
+  src jjtn000 = new src(JJTSRC);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(src);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void ID() throws ParseException {
+                 /*@bgen(jjtree) ID */
+  ID jjtn000 = new ID(JJTID);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(ID);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(ID);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[17] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void Action() throws ParseException {
+                         /*@bgen(jjtree) Action */
+  Action jjtn000 = new Action(JJTACTION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Action);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Action);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[18] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void Import() throws ParseException {
+                         /*@bgen(jjtree) Import */
+  Import jjtn000 = new Import(JJTIMPORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Import);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Import);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[19] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void Port() throws ParseException {
+                     /*@bgen(jjtree) Port */
+  Port jjtn000 = new Port(JJTPORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Port);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Port);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[20] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void literal_kind() throws ParseException {
+                                     /*@bgen(jjtree) literal_kind */
+  literal_kind jjtn000 = new literal_kind(JJTLITERAL_KIND);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(literal_kind);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void Transition() throws ParseException {
+                                 /*@bgen(jjtree) Transition */
+  Transition jjtn000 = new Transition(JJTTRANSITION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Transition);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Transition);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[21] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void assignable() throws ParseException {
+                                 /*@bgen(jjtree) assignable */
+  assignable jjtn000 = new assignable(JJTASSIGNABLE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(assignable);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void initial_state() throws ParseException {
+                                       /*@bgen(jjtree) initial_state */
+  initial_state jjtn000 = new initial_state(JJTINITIAL_STATE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(initial_state);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void ActionTags() throws ParseException {
+                                 /*@bgen(jjtree) ActionTags */
+  ActionTags jjtn000 = new ActionTags(JJTACTIONTAGS);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(ActionTags);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(ActionTags);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[22] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void Args() throws ParseException {
+                     /*@bgen(jjtree) Args */
+  Args jjtn000 = new Args(JJTARGS);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Args);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Args);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[23] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void dst() throws ParseException {
+                   /*@bgen(jjtree) dst */
+  dst jjtn000 = new dst(JJTDST);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(dst);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void id() throws ParseException {
+                 /*@bgen(jjtree) id */
+  id jjtn000 = new id(JJTID);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(id);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void Expr() throws ParseException {
+                     /*@bgen(jjtree) Expr */
+  Expr jjtn000 = new Expr(JJTEXPR);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Expr);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Expr);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[24] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void port() throws ParseException {
+                     /*@bgen(jjtree) port */
+  port jjtn000 = new port(JJTPORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(port);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void text_begin_col() throws ParseException {
+                                         /*@bgen(jjtree) text_begin_col */
+  text_begin_col jjtn000 = new text_begin_col(JJTTEXT_BEGIN_COL);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(text_begin_col);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void src_port() throws ParseException {
+                             /*@bgen(jjtree) src_port */
+  src_port jjtn000 = new src_port(JJTSRC_PORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(src_port);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void text_end_col() throws ParseException {
+                                     /*@bgen(jjtree) text_end_col */
+  text_end_col jjtn000 = new text_end_col(JJTTEXT_END_COL);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(text_end_col);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void value() throws ParseException {
+                       /*@bgen(jjtree) value */
+  value jjtn000 = new value(JJTVALUE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(value);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void Decl() throws ParseException {
+                     /*@bgen(jjtree) Decl */
+  Decl jjtn000 = new Decl(JJTDECL);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Decl);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Decl);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[25] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void Input() throws ParseException {
+                       /*@bgen(jjtree) Input */
+  Input jjtn000 = new Input(JJTINPUT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Input);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Input);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[26] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void kind() throws ParseException {
+                     /*@bgen(jjtree) kind */
+  kind jjtn000 = new kind(JJTKIND);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(kind);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void Stmt() throws ParseException {
+                     /*@bgen(jjtree) Stmt */
+  Stmt jjtn000 = new Stmt(JJTSTMT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Stmt);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Stmt);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[27] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void Type() throws ParseException {
+                     /*@bgen(jjtree) Type */
+  Type jjtn000 = new Type(JJTTYPE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Type);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Type);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[28] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void XDF() throws ParseException {
+                   /*@bgen(jjtree) XDF */
+  XDF jjtn000 = new XDF(JJTXDF);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(XDF);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(XDF);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[29] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void _Attribute() throws ParseException {
+                                 /*@bgen(jjtree) _Attribute */
+  _Attribute jjtn000 = new _Attribute(JJT_ATTRIBUTE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(_Attribute);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(_Attribute);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[30] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void Schedule() throws ParseException {
+                             /*@bgen(jjtree) Schedule */
+  Schedule jjtn000 = new Schedule(JJTSCHEDULE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Schedule);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Schedule);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[31] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void _to() throws ParseException {
+                   /*@bgen(jjtree) _to */
+  _to jjtn000 = new _to(JJT_TO);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(_to);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void Actor() throws ParseException {
+                       /*@bgen(jjtree) Actor */
+  Actor jjtn000 = new Actor(JJTACTOR);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(Actor);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(Actor);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 81:
+        ElementList();
+        jj_consume_token(81);
+        break;
+      default:
+        jj_la1[32] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  public XmlParserTokenManager token_source;
+  JavaCharStream jj_input_stream;
+  public Token token, jj_nt;
+  private int jj_ntk;
+  private int jj_gen;
+  final private int[] jj_la1 = new int[33];
+  static private int[] jj_la1_0;
+  static private int[] jj_la1_1;
+  static private int[] jj_la1_2;
+  static {
+      jj_la1_0();
+      jj_la1_1();
+      jj_la1_2();
+   }
+   private static void jj_la1_0() {
+      jj_la1_0 = new int[] {0x0,0x0,0x29c83c00,0xd637c000,0x0,0x0,0x29c83c00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+   }
+   private static void jj_la1_1() {
+      jj_la1_1 = new int[] {0x0,0x44000000,0x104fb34,0x2fb04cb,0x44000000,0x44000000,0x104fb34,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000,};
+   }
+   private static void jj_la1_2() {
+      jj_la1_2 = new int[] {0x800,0x1004,0x0,0x0,0x1004,0x4,0x0,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,0x25004,};
+   }
+
+  public XmlParser(java.io.InputStream stream) {
+     this(stream, null);
+  }
+  public XmlParser(java.io.InputStream stream, String encoding) {
+    try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+    token_source = new XmlParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 33; i++) jj_la1[i] = -1;
+  }
+
+  public void ReInit(java.io.InputStream stream) {
+     ReInit(stream, null);
+  }
+  public void ReInit(java.io.InputStream stream, String encoding) {
+    try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jjtree.reset();
+    jj_gen = 0;
+    for (int i = 0; i < 33; i++) jj_la1[i] = -1;
+  }
+
+  public XmlParser(java.io.Reader stream) {
+    jj_input_stream = new JavaCharStream(stream, 1, 1);
+    token_source = new XmlParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 33; i++) jj_la1[i] = -1;
+  }
+
+  public void ReInit(java.io.Reader stream) {
+    jj_input_stream.ReInit(stream, 1, 1);
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jjtree.reset();
+    jj_gen = 0;
+    for (int i = 0; i < 33; i++) jj_la1[i] = -1;
+  }
+
+  public XmlParser(XmlParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 33; i++) jj_la1[i] = -1;
+  }
+
+  public void ReInit(XmlParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jjtree.reset();
+    jj_gen = 0;
+    for (int i = 0; i < 33; i++) jj_la1[i] = -1;
+  }
+
+  final private Token jj_consume_token(int kind) throws ParseException {
+    Token oldToken;
+    if ((oldToken = token).next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    if (token.kind == kind) {
+      jj_gen++;
+      return token;
+    }
+    token = oldToken;
+    jj_kind = kind;
+    throw generateParseException();
+  }
+
+  final public Token getNextToken() {
+    if (token.next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    jj_gen++;
+    return token;
+  }
+
+  final public Token getToken(int index) {
+    Token t = token;
+    for (int i = 0; i < index; i++) {
+      if (t.next != null) t = t.next;
+      else t = t.next = token_source.getNextToken();
+    }
+    return t;
+  }
+
+  final private int jj_ntk() {
+    if ((jj_nt=token.next) == null)
+      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
+    else
+      return (jj_ntk = jj_nt.kind);
+  }
+
+  private java.util.Vector jj_expentries = new java.util.Vector();
+  private int[] jj_expentry;
+  private int jj_kind = -1;
+
+  public ParseException generateParseException() {
+    jj_expentries.removeAllElements();
+    boolean[] la1tokens = new boolean[82];
+    for (int i = 0; i < 82; i++) {
+      la1tokens[i] = false;
+    }
+    if (jj_kind >= 0) {
+      la1tokens[jj_kind] = true;
+      jj_kind = -1;
+    }
+    for (int i = 0; i < 33; i++) {
+      if (jj_la1[i] == jj_gen) {
+        for (int j = 0; j < 32; j++) {
+          if ((jj_la1_0[i] & (1<<j)) != 0) {
+            la1tokens[j] = true;
+          }
+          if ((jj_la1_1[i] & (1<<j)) != 0) {
+            la1tokens[32+j] = true;
+          }
+          if ((jj_la1_2[i] & (1<<j)) != 0) {
+            la1tokens[64+j] = true;
+          }
+        }
+      }
+    }
+    for (int i = 0; i < 82; i++) {
+      if (la1tokens[i]) {
+        jj_expentry = new int[1];
+        jj_expentry[0] = i;
+        jj_expentries.addElement(jj_expentry);
+      }
+    }
+    int[][] exptokseq = new int[jj_expentries.size()][];
+    for (int i = 0; i < jj_expentries.size(); i++) {
+      exptokseq[i] = (int[])jj_expentries.elementAt(i);
+    }
+    return new ParseException(token, exptokseq, tokenImage);
+  }
+
+  final public void enable_tracing() {
+  }
+
+  final public void disable_tracing() {
+  }
+
+}
diff --git a/examples/actors/xdfAST/XmlParserConstants.java b/examples/actors/xdfAST/XmlParserConstants.java
new file mode 100644
index 0000000000000000000000000000000000000000..e427e86af84f6548555c14475649e95147d85f1a
--- /dev/null
+++ b/examples/actors/xdfAST/XmlParserConstants.java
@@ -0,0 +1,170 @@
+/* Generated By:JJTree&JavaCC: Do not edit this line. XmlParserConstants.java */
+package xdfAST;
+
+public interface XmlParserConstants {
+
+  int EOF = 0;
+  int XML = 7;
+  int DOCTYPE = 8;
+  int PUBLIC = 9;
+  int encoding = 10;
+  int version = 11;
+  int XsiNoNamespaceSchemaLocation = 12;
+  int XmlnsXsi = 13;
+  int Output = 14;
+  int Class = 15;
+  int Op = 16;
+  int Parameter = 17;
+  int QID = 18;
+  int text_end_line = 19;
+  int Connection = 20;
+  int Note = 21;
+  int text_begin_line = 22;
+  int name = 23;
+  int from = 24;
+  int Instance = 25;
+  int Entry = 26;
+  int dst_port = 27;
+  int Guards = 28;
+  int src = 29;
+  int ID = 30;
+  int Action = 31;
+  int Import = 32;
+  int Port = 33;
+  int literal_kind = 34;
+  int Transition = 35;
+  int assignable = 36;
+  int initial_state = 37;
+  int ActionTags = 38;
+  int Args = 39;
+  int dst = 40;
+  int id = 41;
+  int Expr = 42;
+  int port = 43;
+  int text_begin_col = 44;
+  int src_port = 45;
+  int text_end_col = 46;
+  int value = 47;
+  int Decl = 48;
+  int Input = 49;
+  int kind = 50;
+  int Stmt = 51;
+  int Type = 52;
+  int XDF = 53;
+  int _Attribute = 54;
+  int Schedule = 55;
+  int _to = 56;
+  int Actor = 57;
+  int INTEGER_LITERAL = 58;
+  int DECIMAL_LITERAL = 59;
+  int HEX_LITERAL = 60;
+  int OCTAL_LITERAL = 61;
+  int FLOAT_LITERAL = 62;
+  int EXPONENT = 63;
+  int CHARACTER_LITERAL = 64;
+  int STRING_LITERAL = 65;
+  int IDENTIFIER = 66;
+  int LETTER = 67;
+  int DIGIT = 68;
+  int LBRACE = 69;
+  int RBRACE = 70;
+  int LBRACKET = 71;
+  int RBRACKET = 72;
+  int SEMICOLON = 73;
+  int LTSLASH = 74;
+  int LTBANG = 75;
+  int LT = 76;
+  int LTQ = 77;
+  int GT = 78;
+  int QGT = 79;
+  int ASSIGN = 80;
+
+  int DEFAULT = 0;
+  int BOUNDS = 1;
+
+  String[] tokenImage = {
+    "<EOF>",
+    "\" \"",
+    "\"\\t\"",
+    "\"\\n\"",
+    "\"\\r\"",
+    "\"\\f\"",
+    "<token of kind 6>",
+    "\"xml\"",
+    "\"DOCTYPE\"",
+    "\"PUBLIC\"",
+    "\"encoding\"",
+    "\"version\"",
+    "\"xsi:noNamespaceSchemaLocation\"",
+    "\"xmlns:xsi\"",
+    "\"Output\"",
+    "\"Class\"",
+    "\"Op\"",
+    "\"Parameter\"",
+    "\"QID\"",
+    "\"text-end-line\"",
+    "\"Connection\"",
+    "\"Note\"",
+    "\"text-begin-line\"",
+    "\"name\"",
+    "\"from\"",
+    "\"Instance\"",
+    "\"Entry\"",
+    "\"dst-port\"",
+    "\"Guards\"",
+    "\"src\"",
+    "\"ID\"",
+    "\"Action\"",
+    "\"Import\"",
+    "\"Port\"",
+    "\"literal-kind\"",
+    "\"Transition\"",
+    "\"assignable\"",
+    "\"initial-state\"",
+    "\"ActionTags\"",
+    "\"Args\"",
+    "\"dst\"",
+    "\"id\"",
+    "\"Expr\"",
+    "\"port\"",
+    "\"text-begin-col\"",
+    "\"src-port\"",
+    "\"text-end-col\"",
+    "\"value\"",
+    "\"Decl\"",
+    "\"Input\"",
+    "\"kind\"",
+    "\"Stmt\"",
+    "\"Type\"",
+    "\"XDF\"",
+    "\"Attribute\"",
+    "\"Schedule\"",
+    "\"to\"",
+    "\"Actor\"",
+    "<INTEGER_LITERAL>",
+    "<DECIMAL_LITERAL>",
+    "<HEX_LITERAL>",
+    "<OCTAL_LITERAL>",
+    "<FLOAT_LITERAL>",
+    "<EXPONENT>",
+    "<CHARACTER_LITERAL>",
+    "<STRING_LITERAL>",
+    "<IDENTIFIER>",
+    "<LETTER>",
+    "<DIGIT>",
+    "\"{\"",
+    "\"}\"",
+    "\"[\"",
+    "\"]\"",
+    "\";\"",
+    "\"</\"",
+    "\"<!\"",
+    "\"<\"",
+    "\"<?\"",
+    "\">\"",
+    "\"?>\"",
+    "\"=\"",
+    "\"/>\"",
+  };
+
+}
diff --git a/examples/actors/xdfAST/XmlParserTokenManager.java b/examples/actors/xdfAST/XmlParserTokenManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..daab5cf1a8e89cdad8126c7a677018e27fc61967
--- /dev/null
+++ b/examples/actors/xdfAST/XmlParserTokenManager.java
@@ -0,0 +1,2612 @@
+/* Generated By:JJTree&JavaCC: Do not edit this line. XmlParserTokenManager.java */
+package xdfAST;
+
+public class XmlParserTokenManager implements XmlParserConstants
+{
+  public  java.io.PrintStream debugStream = System.out;
+  public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
+private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1)
+{
+   switch (pos)
+   {
+      case 0:
+         if ((active0 & 0x3ffffffffffff80L) != 0L)
+         {
+            jjmatchedKind = 66;
+            return 22;
+         }
+         if ((active1 & 0x3c00L) != 0L)
+            return 7;
+         return -1;
+      case 1:
+         if ((active0 & 0x100020040010000L) != 0L)
+            return 22;
+         if ((active1 & 0x800L) != 0L)
+            return 6;
+         if ((active0 & 0x2fffdffbffeff80L) != 0L)
+         {
+            jjmatchedKind = 66;
+            jjmatchedPos = 1;
+            return 22;
+         }
+         return -1;
+      case 2:
+         if ((active0 & 0x20210028042080L) != 0L)
+            return 22;
+         if ((active0 & 0x2dfdcff97fadf00L) != 0L)
+         {
+            if (jjmatchedPos != 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return 22;
+         }
+         return -1;
+      case 3:
+         if ((active0 & 0x1d0c8201a00000L) != 0L)
+            return 22;
+         if ((active0 & 0x2c2f07d9e5aef00L) != 0L)
+         {
+            jjmatchedKind = 66;
+            jjmatchedPos = 3;
+            return 22;
+         }
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 4:
+         if ((active0 & 0x202800004008000L) != 0L)
+            return 22;
+         if ((active0 & 0xc0707d9a5a6f00L) != 0L)
+         {
+            jjmatchedKind = 66;
+            jjmatchedPos = 4;
+            return 22;
+         }
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 5:
+         if ((active0 & 0x4190004200L) != 0L)
+            return 22;
+         if ((active0 & 0x2000L) != 0L)
+         {
+            if (jjmatchedPos < 4)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 4;
+            }
+            return -1;
+         }
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         if ((active0 & 0xc0703c0a5a0d00L) != 0L)
+         {
+            if (jjmatchedPos != 5)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 5;
+            }
+            return 22;
+         }
+         return -1;
+      case 6:
+         if ((active0 & 0x900L) != 0L)
+            return 22;
+         if ((active0 & 0x2000L) != 0L)
+         {
+            if (jjmatchedPos < 4)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 4;
+            }
+            return -1;
+         }
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         if ((active0 & 0xc0707c0a5a0400L) != 0L)
+         {
+            jjmatchedKind = 66;
+            jjmatchedPos = 6;
+            return 22;
+         }
+         return -1;
+      case 7:
+         if ((active0 & 0x8020000a000400L) != 0L)
+            return 22;
+         if ((active0 & 0x40507c005a0000L) != 0L)
+         {
+            jjmatchedKind = 66;
+            jjmatchedPos = 7;
+            return 22;
+         }
+         if ((active0 & 0x2000L) != 0L)
+         {
+            if (jjmatchedPos < 4)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 4;
+            }
+            return -1;
+         }
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 8:
+         if ((active0 & 0x40000000020000L) != 0L)
+            return 22;
+         if ((active0 & 0x2000L) != 0L)
+         {
+            if (jjmatchedPos < 4)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 4;
+            }
+            return -1;
+         }
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         if ((active0 & 0x507c00580000L) != 0L)
+         {
+            jjmatchedKind = 66;
+            jjmatchedPos = 8;
+            return 22;
+         }
+         return -1;
+      case 9:
+         if ((active0 & 0x5800100000L) != 0L)
+            return 22;
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         if ((active0 & 0x502400480000L) != 0L)
+         {
+            jjmatchedKind = 66;
+            jjmatchedPos = 9;
+            return 22;
+         }
+         return -1;
+      case 10:
+         if ((active0 & 0x502400480000L) != 0L)
+         {
+            jjmatchedKind = 66;
+            jjmatchedPos = 10;
+            return 22;
+         }
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 11:
+         if ((active0 & 0x400400000000L) != 0L)
+            return 22;
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         if ((active0 & 0x102000480000L) != 0L)
+         {
+            jjmatchedKind = 66;
+            jjmatchedPos = 11;
+            return 22;
+         }
+         return -1;
+      case 12:
+         if ((active0 & 0x100000400000L) != 0L)
+         {
+            jjmatchedKind = 66;
+            jjmatchedPos = 12;
+            return 22;
+         }
+         if ((active0 & 0x2000080000L) != 0L)
+            return 22;
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 13:
+         if ((active0 & 0x100000000000L) != 0L)
+            return 22;
+         if ((active0 & 0x400000L) != 0L)
+         {
+            jjmatchedKind = 66;
+            jjmatchedPos = 13;
+            return 22;
+         }
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 14:
+         if ((active0 & 0x400000L) != 0L)
+            return 22;
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 15:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 16:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 17:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 18:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 19:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 20:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 21:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 22:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 23:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 24:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 25:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 26:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 27:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 66;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      default :
+         return -1;
+   }
+}
+private final int jjStartNfa_0(int pos, long active0, long active1)
+{
+   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0, active1), pos + 1);
+}
+private final int jjStopAtPos(int pos, int kind)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   return pos + 1;
+}
+private final int jjStartNfaWithStates_0(int pos, int kind, int state)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) { return pos + 1; }
+   return jjMoveNfa_0(state, pos + 1);
+}
+private final int jjMoveStringLiteralDfa0_0()
+{
+   switch(curChar)
+   {
+      case 9:
+         return jjStopAtPos(0, 2);
+      case 10:
+         return jjStopAtPos(0, 3);
+      case 12:
+         return jjStopAtPos(0, 5);
+      case 13:
+         return jjStopAtPos(0, 4);
+      case 32:
+         return jjStopAtPos(0, 1);
+      case 47:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x20000L);
+      case 59:
+         return jjStopAtPos(0, 73);
+      case 60:
+         jjmatchedKind = 76;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x2c00L);
+      case 61:
+         return jjStopAtPos(0, 80);
+      case 62:
+         return jjStopAtPos(0, 78);
+      case 63:
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x8000L);
+      case 65:
+         return jjMoveStringLiteralDfa1_0(0x24000c080000000L, 0x0L);
+      case 67:
+         return jjMoveStringLiteralDfa1_0(0x108000L, 0x0L);
+      case 68:
+         return jjMoveStringLiteralDfa1_0(0x1000000000100L, 0x0L);
+      case 69:
+         return jjMoveStringLiteralDfa1_0(0x40004000000L, 0x0L);
+      case 71:
+         return jjMoveStringLiteralDfa1_0(0x10000000L, 0x0L);
+      case 73:
+         return jjMoveStringLiteralDfa1_0(0x2000142000000L, 0x0L);
+      case 78:
+         return jjMoveStringLiteralDfa1_0(0x200000L, 0x0L);
+      case 79:
+         return jjMoveStringLiteralDfa1_0(0x14000L, 0x0L);
+      case 80:
+         return jjMoveStringLiteralDfa1_0(0x200020200L, 0x0L);
+      case 81:
+         return jjMoveStringLiteralDfa1_0(0x40000L, 0x0L);
+      case 83:
+         return jjMoveStringLiteralDfa1_0(0x88000000000000L, 0x0L);
+      case 84:
+         return jjMoveStringLiteralDfa1_0(0x10000800000000L, 0x0L);
+      case 88:
+         return jjMoveStringLiteralDfa1_0(0x20000000000000L, 0x0L);
+      case 91:
+         return jjStopAtPos(0, 71);
+      case 93:
+         return jjStopAtPos(0, 72);
+      case 97:
+         return jjMoveStringLiteralDfa1_0(0x1000000000L, 0x0L);
+      case 100:
+         return jjMoveStringLiteralDfa1_0(0x10008000000L, 0x0L);
+      case 101:
+         return jjMoveStringLiteralDfa1_0(0x400L, 0x0L);
+      case 102:
+         return jjMoveStringLiteralDfa1_0(0x1000000L, 0x0L);
+      case 105:
+         return jjMoveStringLiteralDfa1_0(0x22000000000L, 0x0L);
+      case 107:
+         return jjMoveStringLiteralDfa1_0(0x4000000000000L, 0x0L);
+      case 108:
+         return jjMoveStringLiteralDfa1_0(0x400000000L, 0x0L);
+      case 110:
+         return jjMoveStringLiteralDfa1_0(0x800000L, 0x0L);
+      case 112:
+         return jjMoveStringLiteralDfa1_0(0x80000000000L, 0x0L);
+      case 115:
+         return jjMoveStringLiteralDfa1_0(0x200020000000L, 0x0L);
+      case 116:
+         return jjMoveStringLiteralDfa1_0(0x100500000480000L, 0x0L);
+      case 118:
+         return jjMoveStringLiteralDfa1_0(0x800000000800L, 0x0L);
+      case 120:
+         return jjMoveStringLiteralDfa1_0(0x3080L, 0x0L);
+      case 123:
+         return jjStopAtPos(0, 69);
+      case 125:
+         return jjStopAtPos(0, 70);
+      default :
+         return jjMoveNfa_0(8, 0);
+   }
+}
+private final int jjMoveStringLiteralDfa1_0(long active0, long active1)
+{
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(0, active0, active1);
+      return 1;
+   }
+   switch(curChar)
+   {
+      case 33:
+         if ((active1 & 0x800L) != 0L)
+            return jjStartNfaWithStates_0(1, 75, 6);
+         break;
+      case 47:
+         if ((active1 & 0x400L) != 0L)
+            return jjStopAtPos(1, 74);
+         break;
+      case 62:
+         if ((active1 & 0x8000L) != 0L)
+            return jjStopAtPos(1, 79);
+         else if ((active1 & 0x20000L) != 0L)
+            return jjStopAtPos(1, 81);
+         break;
+      case 63:
+         if ((active1 & 0x2000L) != 0L)
+            return jjStopAtPos(1, 77);
+         break;
+      case 68:
+         if ((active0 & 0x40000000L) != 0L)
+            return jjStartNfaWithStates_0(1, 30, 22);
+         return jjMoveStringLiteralDfa2_0(active0, 0x20000000000000L, active1, 0L);
+      case 73:
+         return jjMoveStringLiteralDfa2_0(active0, 0x40000L, active1, 0L);
+      case 79:
+         return jjMoveStringLiteralDfa2_0(active0, 0x100L, active1, 0L);
+      case 85:
+         return jjMoveStringLiteralDfa2_0(active0, 0x200L, active1, 0L);
+      case 97:
+         return jjMoveStringLiteralDfa2_0(active0, 0x800000820000L, active1, 0L);
+      case 99:
+         return jjMoveStringLiteralDfa2_0(active0, 0x280004080000000L, active1, 0L);
+      case 100:
+         if ((active0 & 0x20000000000L) != 0L)
+            return jjStartNfaWithStates_0(1, 41, 22);
+         break;
+      case 101:
+         return jjMoveStringLiteralDfa2_0(active0, 0x1500000480800L, active1, 0L);
+      case 105:
+         return jjMoveStringLiteralDfa2_0(active0, 0x4000400000000L, active1, 0L);
+      case 108:
+         return jjMoveStringLiteralDfa2_0(active0, 0x8000L, active1, 0L);
+      case 109:
+         return jjMoveStringLiteralDfa2_0(active0, 0x100002080L, active1, 0L);
+      case 110:
+         return jjMoveStringLiteralDfa2_0(active0, 0x2002006000400L, active1, 0L);
+      case 111:
+         if ((active0 & 0x100000000000000L) != 0L)
+            return jjStartNfaWithStates_0(1, 56, 22);
+         return jjMoveStringLiteralDfa2_0(active0, 0x80200300000L, active1, 0L);
+      case 112:
+         if ((active0 & 0x10000L) != 0L)
+            return jjStartNfaWithStates_0(1, 16, 22);
+         break;
+      case 114:
+         return jjMoveStringLiteralDfa2_0(active0, 0x208821000000L, active1, 0L);
+      case 115:
+         return jjMoveStringLiteralDfa2_0(active0, 0x11008001000L, active1, 0L);
+      case 116:
+         return jjMoveStringLiteralDfa2_0(active0, 0x48000000000000L, active1, 0L);
+      case 117:
+         return jjMoveStringLiteralDfa2_0(active0, 0x10004000L, active1, 0L);
+      case 120:
+         return jjMoveStringLiteralDfa2_0(active0, 0x40000000000L, active1, 0L);
+      case 121:
+         return jjMoveStringLiteralDfa2_0(active0, 0x10000000000000L, active1, 0L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(0, active0, active1);
+}
+private final int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long active1)
+{
+   if (((active0 &= old0) | (active1 &= old1)) == 0L)
+      return jjStartNfa_0(0, old0, old1); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(1, active0, 0L);
+      return 2;
+   }
+   switch(curChar)
+   {
+      case 66:
+         return jjMoveStringLiteralDfa3_0(active0, 0x200L);
+      case 67:
+         return jjMoveStringLiteralDfa3_0(active0, 0x100L);
+      case 68:
+         if ((active0 & 0x40000L) != 0L)
+            return jjStartNfaWithStates_0(2, 18, 22);
+         break;
+      case 70:
+         if ((active0 & 0x20000000000000L) != 0L)
+            return jjStartNfaWithStates_0(2, 53, 22);
+         break;
+      case 97:
+         return jjMoveStringLiteralDfa3_0(active0, 0x810008000L);
+      case 99:
+         if ((active0 & 0x20000000L) != 0L)
+         {
+            jjmatchedKind = 29;
+            jjmatchedPos = 2;
+         }
+         return jjMoveStringLiteralDfa3_0(active0, 0x1200000000400L);
+      case 103:
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000000000L);
+      case 104:
+         return jjMoveStringLiteralDfa3_0(active0, 0x80000000000000L);
+      case 105:
+         return jjMoveStringLiteralDfa3_0(active0, 0x2000001000L);
+      case 108:
+         if ((active0 & 0x80L) != 0L)
+         {
+            jjmatchedKind = 7;
+            jjmatchedPos = 2;
+         }
+         return jjMoveStringLiteralDfa3_0(active0, 0x800000002000L);
+      case 109:
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000000800000L);
+      case 110:
+         return jjMoveStringLiteralDfa3_0(active0, 0x4000000100000L);
+      case 111:
+         return jjMoveStringLiteralDfa3_0(active0, 0x1000000L);
+      case 112:
+         return jjMoveStringLiteralDfa3_0(active0, 0x12040100000000L);
+      case 114:
+         return jjMoveStringLiteralDfa3_0(active0, 0x80200020800L);
+      case 115:
+         return jjMoveStringLiteralDfa3_0(active0, 0x1002000000L);
+      case 116:
+         if ((active0 & 0x10000000000L) != 0L)
+         {
+            jjmatchedKind = 40;
+            jjmatchedPos = 2;
+         }
+         return jjMoveStringLiteralDfa3_0(active0, 0x24000448c204000L);
+      case 120:
+         return jjMoveStringLiteralDfa3_0(active0, 0x500000480000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(1, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa3_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(1, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(2, active0, 0L);
+      return 3;
+   }
+   switch(curChar)
+   {
+      case 45:
+         return jjMoveStringLiteralDfa4_0(active0, 0x200008000000L);
+      case 58:
+         return jjMoveStringLiteralDfa4_0(active0, 0x1000L);
+      case 76:
+         return jjMoveStringLiteralDfa4_0(active0, 0x200L);
+      case 84:
+         return jjMoveStringLiteralDfa4_0(active0, 0x100L);
+      case 97:
+         return jjMoveStringLiteralDfa4_0(active0, 0x20000L);
+      case 100:
+         if ((active0 & 0x4000000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 50, 22);
+         break;
+      case 101:
+         if ((active0 & 0x200000L) != 0L)
+            return jjStartNfaWithStates_0(3, 21, 22);
+         else if ((active0 & 0x800000L) != 0L)
+            return jjStartNfaWithStates_0(3, 23, 22);
+         else if ((active0 & 0x10000000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 52, 22);
+         return jjMoveStringLiteralDfa4_0(active0, 0x80000400000000L);
+      case 105:
+         return jjMoveStringLiteralDfa4_0(active0, 0x5080000000L);
+      case 108:
+         if ((active0 & 0x1000000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 48, 22);
+         break;
+      case 109:
+         if ((active0 & 0x1000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 24, 22);
+         break;
+      case 110:
+         return jjMoveStringLiteralDfa4_0(active0, 0x800102000L);
+      case 111:
+         return jjMoveStringLiteralDfa4_0(active0, 0x200000100000400L);
+      case 112:
+         return jjMoveStringLiteralDfa4_0(active0, 0x4000L);
+      case 114:
+         if ((active0 & 0x40000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 42, 22);
+         return jjMoveStringLiteralDfa4_0(active0, 0x40000014000000L);
+      case 115:
+         if ((active0 & 0x8000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 39, 22);
+         return jjMoveStringLiteralDfa4_0(active0, 0x8800L);
+      case 116:
+         if ((active0 & 0x200000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 33, 22);
+         else if ((active0 & 0x80000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 43, 22);
+         else if ((active0 & 0x8000000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 51, 22);
+         return jjMoveStringLiteralDfa4_0(active0, 0x502002480000L);
+      case 117:
+         return jjMoveStringLiteralDfa4_0(active0, 0x2800000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(2, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa4_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(2, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(3, active0, 0L);
+      return 4;
+   }
+   switch(curChar)
+   {
+      case 45:
+         return jjMoveStringLiteralDfa5_0(active0, 0x500000480000L);
+      case 73:
+         return jjMoveStringLiteralDfa5_0(active0, 0x200L);
+      case 89:
+         return jjMoveStringLiteralDfa5_0(active0, 0x100L);
+      case 97:
+         return jjMoveStringLiteralDfa5_0(active0, 0x2000000L);
+      case 100:
+         return jjMoveStringLiteralDfa5_0(active0, 0x80000010000400L);
+      case 101:
+         if ((active0 & 0x800000000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 47, 22);
+         return jjMoveStringLiteralDfa5_0(active0, 0x100000L);
+      case 103:
+         return jjMoveStringLiteralDfa5_0(active0, 0x1000000000L);
+      case 105:
+         return jjMoveStringLiteralDfa5_0(active0, 0x40002000000800L);
+      case 109:
+         return jjMoveStringLiteralDfa5_0(active0, 0x20000L);
+      case 110:
+         return jjMoveStringLiteralDfa5_0(active0, 0x1000L);
+      case 111:
+         return jjMoveStringLiteralDfa5_0(active0, 0x4080000000L);
+      case 112:
+         return jjMoveStringLiteralDfa5_0(active0, 0x200008000000L);
+      case 114:
+         if ((active0 & 0x200000000000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 57, 22);
+         return jjMoveStringLiteralDfa5_0(active0, 0x500000000L);
+      case 115:
+         if ((active0 & 0x8000L) != 0L)
+            return jjStartNfaWithStates_0(4, 15, 22);
+         return jjMoveStringLiteralDfa5_0(active0, 0x800002000L);
+      case 116:
+         if ((active0 & 0x2000000000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 49, 22);
+         break;
+      case 117:
+         return jjMoveStringLiteralDfa5_0(active0, 0x4000L);
+      case 121:
+         if ((active0 & 0x4000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 26, 22);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(3, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa5_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(3, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(4, active0, 0L);
+      return 5;
+   }
+   switch(curChar)
+   {
+      case 58:
+         return jjMoveStringLiteralDfa6_0(active0, 0x2000L);
+      case 67:
+         if ((active0 & 0x200L) != 0L)
+            return jjStartNfaWithStates_0(5, 9, 22);
+         break;
+      case 80:
+         return jjMoveStringLiteralDfa6_0(active0, 0x100L);
+      case 97:
+         return jjMoveStringLiteralDfa6_0(active0, 0x2400000000L);
+      case 98:
+         return jjMoveStringLiteralDfa6_0(active0, 0x40100000400000L);
+      case 99:
+         return jjMoveStringLiteralDfa6_0(active0, 0x100000L);
+      case 101:
+         return jjMoveStringLiteralDfa6_0(active0, 0x4000000a0000L);
+      case 105:
+         return jjMoveStringLiteralDfa6_0(active0, 0x800000400L);
+      case 110:
+         if ((active0 & 0x80000000L) != 0L)
+         {
+            jjmatchedKind = 31;
+            jjmatchedPos = 5;
+         }
+         return jjMoveStringLiteralDfa6_0(active0, 0x5002000000L);
+      case 111:
+         return jjMoveStringLiteralDfa6_0(active0, 0x200008001800L);
+      case 115:
+         if ((active0 & 0x10000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 28, 22);
+         break;
+      case 116:
+         if ((active0 & 0x4000L) != 0L)
+            return jjStartNfaWithStates_0(5, 14, 22);
+         else if ((active0 & 0x100000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 32, 22);
+         break;
+      case 117:
+         return jjMoveStringLiteralDfa6_0(active0, 0x80000000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(4, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa6_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(4, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(5, active0, 0L);
+      return 6;
+   }
+   switch(curChar)
+   {
+      case 69:
+         if ((active0 & 0x100L) != 0L)
+            return jjStartNfaWithStates_0(6, 8, 22);
+         break;
+      case 78:
+         return jjMoveStringLiteralDfa7_0(active0, 0x1000L);
+      case 84:
+         return jjMoveStringLiteralDfa7_0(active0, 0x4000000000L);
+      case 97:
+         return jjMoveStringLiteralDfa7_0(active0, 0x1000000000L);
+      case 99:
+         return jjMoveStringLiteralDfa7_0(active0, 0x2000000L);
+      case 101:
+         return jjMoveStringLiteralDfa7_0(active0, 0x100000400000L);
+      case 108:
+         return jjMoveStringLiteralDfa7_0(active0, 0x80002400000000L);
+      case 110:
+         if ((active0 & 0x800L) != 0L)
+            return jjStartNfaWithStates_0(6, 11, 22);
+         return jjMoveStringLiteralDfa7_0(active0, 0x400000080400L);
+      case 114:
+         return jjMoveStringLiteralDfa7_0(active0, 0x200008000000L);
+      case 116:
+         return jjMoveStringLiteralDfa7_0(active0, 0x800120000L);
+      case 117:
+         return jjMoveStringLiteralDfa7_0(active0, 0x40000000000000L);
+      case 120:
+         return jjMoveStringLiteralDfa7_0(active0, 0x2000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(5, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa7_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(5, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(6, active0, 0L);
+      return 7;
+   }
+   switch(curChar)
+   {
+      case 45:
+         return jjMoveStringLiteralDfa8_0(active0, 0x2400000000L);
+      case 97:
+         return jjMoveStringLiteralDfa8_0(active0, 0x4000001000L);
+      case 98:
+         return jjMoveStringLiteralDfa8_0(active0, 0x1000000000L);
+      case 100:
+         return jjMoveStringLiteralDfa8_0(active0, 0x400000080000L);
+      case 101:
+         if ((active0 & 0x2000000L) != 0L)
+            return jjStartNfaWithStates_0(7, 25, 22);
+         else if ((active0 & 0x80000000000000L) != 0L)
+            return jjStartNfaWithStates_0(7, 55, 22);
+         return jjMoveStringLiteralDfa8_0(active0, 0x20000L);
+      case 103:
+         if ((active0 & 0x400L) != 0L)
+            return jjStartNfaWithStates_0(7, 10, 22);
+         return jjMoveStringLiteralDfa8_0(active0, 0x100000400000L);
+      case 105:
+         return jjMoveStringLiteralDfa8_0(active0, 0x800100000L);
+      case 115:
+         return jjMoveStringLiteralDfa8_0(active0, 0x2000L);
+      case 116:
+         if ((active0 & 0x8000000L) != 0L)
+            return jjStartNfaWithStates_0(7, 27, 22);
+         else if ((active0 & 0x200000000000L) != 0L)
+            return jjStartNfaWithStates_0(7, 45, 22);
+         return jjMoveStringLiteralDfa8_0(active0, 0x40000000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(6, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa8_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(6, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(7, active0, 0L);
+      return 8;
+   }
+   switch(curChar)
+   {
+      case 45:
+         return jjMoveStringLiteralDfa9_0(active0, 0x400000080000L);
+      case 101:
+         if ((active0 & 0x40000000000000L) != 0L)
+            return jjStartNfaWithStates_0(8, 54, 22);
+         break;
+      case 103:
+         return jjMoveStringLiteralDfa9_0(active0, 0x4000000000L);
+      case 105:
+         if ((active0 & 0x2000L) != 0L)
+            return jjStopAtPos(8, 13);
+         return jjMoveStringLiteralDfa9_0(active0, 0x100000400000L);
+      case 107:
+         return jjMoveStringLiteralDfa9_0(active0, 0x400000000L);
+      case 108:
+         return jjMoveStringLiteralDfa9_0(active0, 0x1000000000L);
+      case 109:
+         return jjMoveStringLiteralDfa9_0(active0, 0x1000L);
+      case 111:
+         return jjMoveStringLiteralDfa9_0(active0, 0x800100000L);
+      case 114:
+         if ((active0 & 0x20000L) != 0L)
+            return jjStartNfaWithStates_0(8, 17, 22);
+         break;
+      case 115:
+         return jjMoveStringLiteralDfa9_0(active0, 0x2000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(7, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa9_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(7, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(8, active0, 0L);
+      return 9;
+   }
+   switch(curChar)
+   {
+      case 99:
+         return jjMoveStringLiteralDfa10_0(active0, 0x400000000000L);
+      case 101:
+         if ((active0 & 0x1000000000L) != 0L)
+            return jjStartNfaWithStates_0(9, 36, 22);
+         return jjMoveStringLiteralDfa10_0(active0, 0x1000L);
+      case 105:
+         return jjMoveStringLiteralDfa10_0(active0, 0x400000000L);
+      case 108:
+         return jjMoveStringLiteralDfa10_0(active0, 0x80000L);
+      case 110:
+         if ((active0 & 0x100000L) != 0L)
+            return jjStartNfaWithStates_0(9, 20, 22);
+         else if ((active0 & 0x800000000L) != 0L)
+            return jjStartNfaWithStates_0(9, 35, 22);
+         return jjMoveStringLiteralDfa10_0(active0, 0x100000400000L);
+      case 115:
+         if ((active0 & 0x4000000000L) != 0L)
+            return jjStartNfaWithStates_0(9, 38, 22);
+         break;
+      case 116:
+         return jjMoveStringLiteralDfa10_0(active0, 0x2000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(8, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa10_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(8, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(9, active0, 0L);
+      return 10;
+   }
+   switch(curChar)
+   {
+      case 45:
+         return jjMoveStringLiteralDfa11_0(active0, 0x100000400000L);
+      case 97:
+         return jjMoveStringLiteralDfa11_0(active0, 0x2000000000L);
+      case 105:
+         return jjMoveStringLiteralDfa11_0(active0, 0x80000L);
+      case 110:
+         return jjMoveStringLiteralDfa11_0(active0, 0x400000000L);
+      case 111:
+         return jjMoveStringLiteralDfa11_0(active0, 0x400000000000L);
+      case 115:
+         return jjMoveStringLiteralDfa11_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(9, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa11_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(9, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(10, active0, 0L);
+      return 11;
+   }
+   switch(curChar)
+   {
+      case 99:
+         return jjMoveStringLiteralDfa12_0(active0, 0x100000000000L);
+      case 100:
+         if ((active0 & 0x400000000L) != 0L)
+            return jjStartNfaWithStates_0(11, 34, 22);
+         break;
+      case 108:
+         if ((active0 & 0x400000000000L) != 0L)
+            return jjStartNfaWithStates_0(11, 46, 22);
+         return jjMoveStringLiteralDfa12_0(active0, 0x400000L);
+      case 110:
+         return jjMoveStringLiteralDfa12_0(active0, 0x80000L);
+      case 112:
+         return jjMoveStringLiteralDfa12_0(active0, 0x1000L);
+      case 116:
+         return jjMoveStringLiteralDfa12_0(active0, 0x2000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(10, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa12_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(10, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(11, active0, 0L);
+      return 12;
+   }
+   switch(curChar)
+   {
+      case 97:
+         return jjMoveStringLiteralDfa13_0(active0, 0x1000L);
+      case 101:
+         if ((active0 & 0x80000L) != 0L)
+            return jjStartNfaWithStates_0(12, 19, 22);
+         else if ((active0 & 0x2000000000L) != 0L)
+            return jjStartNfaWithStates_0(12, 37, 22);
+         break;
+      case 105:
+         return jjMoveStringLiteralDfa13_0(active0, 0x400000L);
+      case 111:
+         return jjMoveStringLiteralDfa13_0(active0, 0x100000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(11, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa13_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(11, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(12, active0, 0L);
+      return 13;
+   }
+   switch(curChar)
+   {
+      case 99:
+         return jjMoveStringLiteralDfa14_0(active0, 0x1000L);
+      case 108:
+         if ((active0 & 0x100000000000L) != 0L)
+            return jjStartNfaWithStates_0(13, 44, 22);
+         break;
+      case 110:
+         return jjMoveStringLiteralDfa14_0(active0, 0x400000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(12, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa14_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(12, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(13, active0, 0L);
+      return 14;
+   }
+   switch(curChar)
+   {
+      case 101:
+         if ((active0 & 0x400000L) != 0L)
+            return jjStartNfaWithStates_0(14, 22, 22);
+         return jjMoveStringLiteralDfa15_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(13, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa15_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(13, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(14, active0, 0L);
+      return 15;
+   }
+   switch(curChar)
+   {
+      case 83:
+         return jjMoveStringLiteralDfa16_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(14, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa16_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(14, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(15, active0, 0L);
+      return 16;
+   }
+   switch(curChar)
+   {
+      case 99:
+         return jjMoveStringLiteralDfa17_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(15, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa17_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(15, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(16, active0, 0L);
+      return 17;
+   }
+   switch(curChar)
+   {
+      case 104:
+         return jjMoveStringLiteralDfa18_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(16, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa18_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(16, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(17, active0, 0L);
+      return 18;
+   }
+   switch(curChar)
+   {
+      case 101:
+         return jjMoveStringLiteralDfa19_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(17, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa19_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(17, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(18, active0, 0L);
+      return 19;
+   }
+   switch(curChar)
+   {
+      case 109:
+         return jjMoveStringLiteralDfa20_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(18, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa20_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(18, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(19, active0, 0L);
+      return 20;
+   }
+   switch(curChar)
+   {
+      case 97:
+         return jjMoveStringLiteralDfa21_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(19, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa21_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(19, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(20, active0, 0L);
+      return 21;
+   }
+   switch(curChar)
+   {
+      case 76:
+         return jjMoveStringLiteralDfa22_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(20, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa22_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(20, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(21, active0, 0L);
+      return 22;
+   }
+   switch(curChar)
+   {
+      case 111:
+         return jjMoveStringLiteralDfa23_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(21, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa23_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(21, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(22, active0, 0L);
+      return 23;
+   }
+   switch(curChar)
+   {
+      case 99:
+         return jjMoveStringLiteralDfa24_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(22, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa24_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(22, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(23, active0, 0L);
+      return 24;
+   }
+   switch(curChar)
+   {
+      case 97:
+         return jjMoveStringLiteralDfa25_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(23, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa25_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(23, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(24, active0, 0L);
+      return 25;
+   }
+   switch(curChar)
+   {
+      case 116:
+         return jjMoveStringLiteralDfa26_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(24, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa26_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(24, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(25, active0, 0L);
+      return 26;
+   }
+   switch(curChar)
+   {
+      case 105:
+         return jjMoveStringLiteralDfa27_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(25, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa27_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(25, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(26, active0, 0L);
+      return 27;
+   }
+   switch(curChar)
+   {
+      case 111:
+         return jjMoveStringLiteralDfa28_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(26, active0, 0L);
+}
+private final int jjMoveStringLiteralDfa28_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(26, old0, 0L);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(27, active0, 0L);
+      return 28;
+   }
+   switch(curChar)
+   {
+      case 110:
+         if ((active0 & 0x1000L) != 0L)
+            return jjStopAtPos(28, 12);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(27, active0, 0L);
+}
+private final void jjCheckNAdd(int state)
+{
+   if (jjrounds[state] != jjround)
+   {
+      jjstateSet[jjnewStateCnt++] = state;
+      jjrounds[state] = jjround;
+   }
+}
+private final void jjAddStates(int start, int end)
+{
+   do {
+      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
+   } while (start++ != end);
+}
+private final void jjCheckNAddTwoStates(int state1, int state2)
+{
+   jjCheckNAdd(state1);
+   jjCheckNAdd(state2);
+}
+private final void jjCheckNAddStates(int start, int end)
+{
+   do {
+      jjCheckNAdd(jjnextStates[start]);
+   } while (start++ != end);
+}
+private final void jjCheckNAddStates(int start)
+{
+   jjCheckNAdd(jjnextStates[start]);
+   jjCheckNAdd(jjnextStates[start + 1]);
+}
+static final long[] jjbitVec0 = {
+   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+static final long[] jjbitVec2 = {
+   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+static final long[] jjbitVec3 = {
+   0x1ff00000fffffffeL, 0xffffffffffffc000L, 0xffffffffL, 0x600000000000000L
+};
+static final long[] jjbitVec4 = {
+   0x0L, 0x0L, 0x0L, 0xff7fffffff7fffffL
+};
+static final long[] jjbitVec5 = {
+   0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+static final long[] jjbitVec6 = {
+   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffL, 0x0L
+};
+static final long[] jjbitVec7 = {
+   0xffffffffffffffffL, 0xffffffffffffffffL, 0x0L, 0x0L
+};
+static final long[] jjbitVec8 = {
+   0x3fffffffffffL, 0x0L, 0x0L, 0x0L
+};
+private final int jjMoveNfa_0(int startState, int curPos)
+{
+   int[] nextStates;
+   int startsAt = 0;
+   jjnewStateCnt = 53;
+   int i = 1;
+   jjstateSet[0] = startState;
+   int j, kind = 0x7fffffff;
+   for (;;)
+   {
+      if (++jjround == 0x7fffffff)
+         ReInitRounds();
+      if (curChar < 64)
+      {
+         long l = 1L << curChar;
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 8:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(0, 6);
+                  else if (curChar == 39)
+                     jjCheckNAddStates(7, 10);
+                  else if (curChar == 36)
+                  {
+                     if (kind > 66)
+                        kind = 66;
+                     jjCheckNAdd(22);
+                  }
+                  else if (curChar == 34)
+                     jjCheckNAddTwoStates(19, 20);
+                  else if (curChar == 46)
+                     jjCheckNAdd(13);
+                  else if (curChar == 60)
+                     jjstateSet[jjnewStateCnt++] = 7;
+                  if ((0x3fe000000000000L & l) != 0L)
+                  {
+                     if (kind > 58)
+                        kind = 58;
+                     jjCheckNAddTwoStates(10, 11);
+                  }
+                  else if (curChar == 48)
+                  {
+                     if (kind > 58)
+                        kind = 58;
+                     jjCheckNAddStates(11, 13);
+                  }
+                  break;
+               case 0:
+                  if (curChar == 45)
+                     jjCheckNAddStates(14, 16);
+                  break;
+               case 1:
+                  if ((0xffffdfffffffffffL & l) != 0L)
+                     jjCheckNAddStates(14, 16);
+                  break;
+               case 2:
+                  if (curChar == 45)
+                     jjCheckNAdd(1);
+                  break;
+               case 3:
+                  if (curChar == 62 && kind > 6)
+                     kind = 6;
+                  break;
+               case 4:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 3;
+                  break;
+               case 5:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 4;
+                  break;
+               case 6:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 0;
+                  break;
+               case 7:
+                  if (curChar == 33)
+                     jjstateSet[jjnewStateCnt++] = 6;
+                  break;
+               case 9:
+                  if ((0x3fe000000000000L & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAddTwoStates(10, 11);
+                  break;
+               case 10:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAddTwoStates(10, 11);
+                  break;
+               case 12:
+                  if (curChar == 46)
+                     jjCheckNAdd(13);
+                  break;
+               case 13:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 62)
+                     kind = 62;
+                  jjCheckNAddStates(17, 19);
+                  break;
+               case 15:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(16);
+                  break;
+               case 16:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 62)
+                     kind = 62;
+                  jjCheckNAddTwoStates(16, 17);
+                  break;
+               case 18:
+                  if (curChar == 34)
+                     jjCheckNAddTwoStates(19, 20);
+                  break;
+               case 19:
+                  if ((0xfffffffbffffdbffL & l) != 0L)
+                     jjCheckNAddTwoStates(19, 20);
+                  break;
+               case 20:
+                  if (curChar == 34 && kind > 65)
+                     kind = 65;
+                  break;
+               case 21:
+                  if (curChar != 36)
+                     break;
+                  if (kind > 66)
+                     kind = 66;
+                  jjCheckNAdd(22);
+                  break;
+               case 22:
+                  if ((0x3ff201000000000L & l) == 0L)
+                     break;
+                  if (kind > 66)
+                     kind = 66;
+                  jjCheckNAdd(22);
+                  break;
+               case 23:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(0, 6);
+                  break;
+               case 24:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(24, 25);
+                  break;
+               case 25:
+                  if (curChar != 46)
+                     break;
+                  if (kind > 62)
+                     kind = 62;
+                  jjCheckNAddStates(20, 22);
+                  break;
+               case 26:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 62)
+                     kind = 62;
+                  jjCheckNAddStates(20, 22);
+                  break;
+               case 28:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(29);
+                  break;
+               case 29:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 62)
+                     kind = 62;
+                  jjCheckNAddTwoStates(29, 17);
+                  break;
+               case 30:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(30, 31);
+                  break;
+               case 32:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(33);
+                  break;
+               case 33:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 62)
+                     kind = 62;
+                  jjCheckNAddTwoStates(33, 17);
+                  break;
+               case 34:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 36:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(37);
+                  break;
+               case 37:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(37, 17);
+                  break;
+               case 38:
+                  if (curChar != 48)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAddStates(11, 13);
+                  break;
+               case 40:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAddTwoStates(40, 11);
+                  break;
+               case 41:
+                  if ((0xff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAddTwoStates(41, 11);
+                  break;
+               case 42:
+                  if (curChar == 39)
+                     jjCheckNAddStates(7, 10);
+                  break;
+               case 43:
+                  if ((0xffffff7fffffdbffL & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 44:
+                  if (curChar == 39 && kind > 64)
+                     kind = 64;
+                  break;
+               case 46:
+                  if ((0x8400000000L & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 47:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(48, 44);
+                  break;
+               case 48:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 49:
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 50;
+                  break;
+               case 50:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAdd(48);
+                  break;
+               case 51:
+                  if ((0xffffff7fffffdbffL & l) != 0L)
+                     jjCheckNAddTwoStates(51, 52);
+                  break;
+               case 52:
+                  if (curChar == 39 && kind > 65)
+                     kind = 65;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 8:
+               case 22:
+                  if ((0x7fffffe87fffffeL & l) == 0L)
+                     break;
+                  if (kind > 66)
+                     kind = 66;
+                  jjCheckNAdd(22);
+                  break;
+               case 1:
+                  jjAddStates(14, 16);
+                  break;
+               case 11:
+                  if ((0x100000001000L & l) != 0L && kind > 58)
+                     kind = 58;
+                  break;
+               case 14:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(26, 27);
+                  break;
+               case 17:
+                  if ((0x5000000050L & l) != 0L && kind > 62)
+                     kind = 62;
+                  break;
+               case 19:
+                  jjAddStates(28, 29);
+                  break;
+               case 27:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(30, 31);
+                  break;
+               case 31:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(32, 33);
+                  break;
+               case 35:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(34, 35);
+                  break;
+               case 39:
+                  if ((0x100000001000000L & l) != 0L)
+                     jjCheckNAdd(40);
+                  break;
+               case 40:
+                  if ((0x7e0000007eL & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAddTwoStates(40, 11);
+                  break;
+               case 43:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 45:
+                  if (curChar == 92)
+                     jjAddStates(36, 38);
+                  break;
+               case 46:
+                  if ((0x14404410000000L & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 51:
+                  jjAddStates(39, 40);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else
+      {
+         int hiByte = (int)(curChar >> 8);
+         int i1 = hiByte >> 6;
+         long l1 = 1L << (hiByte & 077);
+         int i2 = (curChar & 0xff) >> 6;
+         long l2 = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 8:
+               case 22:
+                  if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 66)
+                     kind = 66;
+                  jjCheckNAdd(22);
+                  break;
+               case 1:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(14, 16);
+                  break;
+               case 19:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(28, 29);
+                  break;
+               case 43:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjstateSet[jjnewStateCnt++] = 44;
+                  break;
+               case 51:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(39, 40);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 53 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
+private final int jjStopStringLiteralDfa_1(int pos, long active0, long active1)
+{
+   switch (pos)
+   {
+      case 0:
+         if ((active1 & 0x3c00L) != 0L)
+            return 7;
+         return -1;
+      default :
+         return -1;
+   }
+}
+private final int jjStartNfa_1(int pos, long active0, long active1)
+{
+   return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0, active1), pos + 1);
+}
+private final int jjStartNfaWithStates_1(int pos, int kind, int state)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) { return pos + 1; }
+   return jjMoveNfa_1(state, pos + 1);
+}
+private final int jjMoveStringLiteralDfa0_1()
+{
+   switch(curChar)
+   {
+      case 9:
+         return jjStopAtPos(0, 2);
+      case 10:
+         return jjStopAtPos(0, 3);
+      case 12:
+         return jjStopAtPos(0, 5);
+      case 13:
+         return jjStopAtPos(0, 4);
+      case 32:
+         return jjStopAtPos(0, 1);
+      case 59:
+         return jjStopAtPos(0, 73);
+      case 60:
+         jjmatchedKind = 76;
+         return jjMoveStringLiteralDfa1_1(0x2c00L);
+      case 61:
+         return jjStopAtPos(0, 80);
+      case 62:
+         return jjStopAtPos(0, 78);
+      case 63:
+         return jjMoveStringLiteralDfa1_1(0x8000L);
+      case 91:
+         return jjStopAtPos(0, 71);
+      case 93:
+         return jjStopAtPos(0, 72);
+      case 123:
+         return jjStopAtPos(0, 69);
+      case 125:
+         return jjStopAtPos(0, 70);
+      default :
+         return jjMoveNfa_1(8, 0);
+   }
+}
+private final int jjMoveStringLiteralDfa1_1(long active1)
+{
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_1(0, 0L, active1);
+      return 1;
+   }
+   switch(curChar)
+   {
+      case 33:
+         if ((active1 & 0x800L) != 0L)
+            return jjStartNfaWithStates_1(1, 75, 6);
+         break;
+      case 47:
+         if ((active1 & 0x400L) != 0L)
+            return jjStopAtPos(1, 74);
+         break;
+      case 62:
+         if ((active1 & 0x8000L) != 0L)
+            return jjStopAtPos(1, 79);
+         break;
+      case 63:
+         if ((active1 & 0x2000L) != 0L)
+            return jjStopAtPos(1, 77);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_1(0, 0L, active1);
+}
+private final int jjMoveNfa_1(int startState, int curPos)
+{
+   int[] nextStates;
+   int startsAt = 0;
+   jjnewStateCnt = 53;
+   int i = 1;
+   jjstateSet[0] = startState;
+   int j, kind = 0x7fffffff;
+   for (;;)
+   {
+      if (++jjround == 0x7fffffff)
+         ReInitRounds();
+      if (curChar < 64)
+      {
+         long l = 1L << curChar;
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 8:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(0, 6);
+                  else if (curChar == 39)
+                     jjCheckNAddStates(7, 10);
+                  else if (curChar == 36)
+                  {
+                     if (kind > 66)
+                        kind = 66;
+                     jjCheckNAdd(22);
+                  }
+                  else if (curChar == 34)
+                     jjCheckNAddTwoStates(19, 20);
+                  else if (curChar == 46)
+                     jjCheckNAdd(13);
+                  else if (curChar == 60)
+                     jjstateSet[jjnewStateCnt++] = 7;
+                  if ((0x3fe000000000000L & l) != 0L)
+                  {
+                     if (kind > 58)
+                        kind = 58;
+                     jjCheckNAddTwoStates(10, 11);
+                  }
+                  else if (curChar == 48)
+                  {
+                     if (kind > 58)
+                        kind = 58;
+                     jjCheckNAddStates(11, 13);
+                  }
+                  break;
+               case 0:
+                  if (curChar == 45)
+                     jjCheckNAddStates(14, 16);
+                  break;
+               case 1:
+                  if ((0xffffdfffffffffffL & l) != 0L)
+                     jjCheckNAddStates(14, 16);
+                  break;
+               case 2:
+                  if (curChar == 45)
+                     jjCheckNAdd(1);
+                  break;
+               case 3:
+                  if (curChar == 62 && kind > 6)
+                     kind = 6;
+                  break;
+               case 4:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 3;
+                  break;
+               case 5:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 4;
+                  break;
+               case 6:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 0;
+                  break;
+               case 7:
+                  if (curChar == 33)
+                     jjstateSet[jjnewStateCnt++] = 6;
+                  break;
+               case 9:
+                  if ((0x3fe000000000000L & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAddTwoStates(10, 11);
+                  break;
+               case 10:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAddTwoStates(10, 11);
+                  break;
+               case 12:
+                  if (curChar == 46)
+                     jjCheckNAdd(13);
+                  break;
+               case 13:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 62)
+                     kind = 62;
+                  jjCheckNAddStates(17, 19);
+                  break;
+               case 15:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(16);
+                  break;
+               case 16:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 62)
+                     kind = 62;
+                  jjCheckNAddTwoStates(16, 17);
+                  break;
+               case 18:
+                  if (curChar == 34)
+                     jjCheckNAddTwoStates(19, 20);
+                  break;
+               case 19:
+                  if ((0xfffffffbffffdbffL & l) != 0L)
+                     jjCheckNAddTwoStates(19, 20);
+                  break;
+               case 20:
+                  if (curChar == 34 && kind > 65)
+                     kind = 65;
+                  break;
+               case 21:
+                  if (curChar != 36)
+                     break;
+                  if (kind > 66)
+                     kind = 66;
+                  jjCheckNAdd(22);
+                  break;
+               case 22:
+                  if ((0x3ff201000000000L & l) == 0L)
+                     break;
+                  if (kind > 66)
+                     kind = 66;
+                  jjCheckNAdd(22);
+                  break;
+               case 23:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(0, 6);
+                  break;
+               case 24:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(24, 25);
+                  break;
+               case 25:
+                  if (curChar != 46)
+                     break;
+                  if (kind > 62)
+                     kind = 62;
+                  jjCheckNAddStates(20, 22);
+                  break;
+               case 26:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 62)
+                     kind = 62;
+                  jjCheckNAddStates(20, 22);
+                  break;
+               case 28:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(29);
+                  break;
+               case 29:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 62)
+                     kind = 62;
+                  jjCheckNAddTwoStates(29, 17);
+                  break;
+               case 30:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(30, 31);
+                  break;
+               case 32:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(33);
+                  break;
+               case 33:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 62)
+                     kind = 62;
+                  jjCheckNAddTwoStates(33, 17);
+                  break;
+               case 34:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 36:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(37);
+                  break;
+               case 37:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(37, 17);
+                  break;
+               case 38:
+                  if (curChar != 48)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAddStates(11, 13);
+                  break;
+               case 40:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAddTwoStates(40, 11);
+                  break;
+               case 41:
+                  if ((0xff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAddTwoStates(41, 11);
+                  break;
+               case 42:
+                  if (curChar == 39)
+                     jjCheckNAddStates(7, 10);
+                  break;
+               case 43:
+                  if ((0xffffff7fffffdbffL & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 44:
+                  if (curChar == 39 && kind > 64)
+                     kind = 64;
+                  break;
+               case 46:
+                  if ((0x8400000000L & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 47:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(48, 44);
+                  break;
+               case 48:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 49:
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 50;
+                  break;
+               case 50:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAdd(48);
+                  break;
+               case 51:
+                  if ((0xffffff7fffffdbffL & l) != 0L)
+                     jjCheckNAddTwoStates(51, 52);
+                  break;
+               case 52:
+                  if (curChar == 39 && kind > 65)
+                     kind = 65;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 8:
+               case 22:
+                  if ((0x7fffffe87fffffeL & l) == 0L)
+                     break;
+                  if (kind > 66)
+                     kind = 66;
+                  jjCheckNAdd(22);
+                  break;
+               case 1:
+                  jjAddStates(14, 16);
+                  break;
+               case 11:
+                  if ((0x100000001000L & l) != 0L && kind > 58)
+                     kind = 58;
+                  break;
+               case 14:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(26, 27);
+                  break;
+               case 17:
+                  if ((0x5000000050L & l) != 0L && kind > 62)
+                     kind = 62;
+                  break;
+               case 19:
+                  jjAddStates(28, 29);
+                  break;
+               case 27:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(30, 31);
+                  break;
+               case 31:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(32, 33);
+                  break;
+               case 35:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(34, 35);
+                  break;
+               case 39:
+                  if ((0x100000001000000L & l) != 0L)
+                     jjCheckNAdd(40);
+                  break;
+               case 40:
+                  if ((0x7e0000007eL & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAddTwoStates(40, 11);
+                  break;
+               case 43:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 45:
+                  if (curChar == 92)
+                     jjAddStates(36, 38);
+                  break;
+               case 46:
+                  if ((0x14404410000000L & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 51:
+                  jjAddStates(39, 40);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else
+      {
+         int hiByte = (int)(curChar >> 8);
+         int i1 = hiByte >> 6;
+         long l1 = 1L << (hiByte & 077);
+         int i2 = (curChar & 0xff) >> 6;
+         long l2 = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 8:
+               case 22:
+                  if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 66)
+                     kind = 66;
+                  jjCheckNAdd(22);
+                  break;
+               case 1:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(14, 16);
+                  break;
+               case 19:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(28, 29);
+                  break;
+               case 43:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjstateSet[jjnewStateCnt++] = 44;
+                  break;
+               case 51:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(39, 40);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 53 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
+static final int[] jjnextStates = {
+   24, 25, 30, 31, 34, 35, 17, 43, 45, 51, 52, 39, 41, 11, 1, 2, 
+   5, 13, 14, 17, 26, 27, 17, 34, 35, 17, 15, 16, 19, 20, 28, 29, 
+   32, 33, 36, 37, 46, 47, 49, 51, 52, 
+};
+private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
+{
+   switch(hiByte)
+   {
+      case 0:
+         return ((jjbitVec2[i2] & l2) != 0L);
+      default : 
+         if ((jjbitVec0[i1] & l1) != 0L)
+            return true;
+         return false;
+   }
+}
+private static final boolean jjCanMove_1(int hiByte, int i1, int i2, long l1, long l2)
+{
+   switch(hiByte)
+   {
+      case 0:
+         return ((jjbitVec4[i2] & l2) != 0L);
+      case 48:
+         return ((jjbitVec5[i2] & l2) != 0L);
+      case 49:
+         return ((jjbitVec6[i2] & l2) != 0L);
+      case 51:
+         return ((jjbitVec7[i2] & l2) != 0L);
+      case 61:
+         return ((jjbitVec8[i2] & l2) != 0L);
+      default : 
+         if ((jjbitVec3[i1] & l1) != 0L)
+            return true;
+         return false;
+   }
+}
+public static final String[] jjstrLiteralImages = {
+"", null, null, null, null, null, null, "\170\155\154", 
+"\104\117\103\124\131\120\105", "\120\125\102\114\111\103", "\145\156\143\157\144\151\156\147", 
+"\166\145\162\163\151\157\156", 
+"\170\163\151\72\156\157\116\141\155\145\163\160\141\143\145\123\143\150\145\155\141\114\157\143\141\164\151\157\156", "\170\155\154\156\163\72\170\163\151", "\117\165\164\160\165\164", 
+"\103\154\141\163\163", "\117\160", "\120\141\162\141\155\145\164\145\162", "\121\111\104", 
+"\164\145\170\164\55\145\156\144\55\154\151\156\145", "\103\157\156\156\145\143\164\151\157\156", "\116\157\164\145", 
+"\164\145\170\164\55\142\145\147\151\156\55\154\151\156\145", "\156\141\155\145", "\146\162\157\155", "\111\156\163\164\141\156\143\145", 
+"\105\156\164\162\171", "\144\163\164\55\160\157\162\164", "\107\165\141\162\144\163", "\163\162\143", 
+"\111\104", "\101\143\164\151\157\156", "\111\155\160\157\162\164", "\120\157\162\164", 
+"\154\151\164\145\162\141\154\55\153\151\156\144", "\124\162\141\156\163\151\164\151\157\156", 
+"\141\163\163\151\147\156\141\142\154\145", "\151\156\151\164\151\141\154\55\163\164\141\164\145", 
+"\101\143\164\151\157\156\124\141\147\163", "\101\162\147\163", "\144\163\164", "\151\144", "\105\170\160\162", 
+"\160\157\162\164", "\164\145\170\164\55\142\145\147\151\156\55\143\157\154", 
+"\163\162\143\55\160\157\162\164", "\164\145\170\164\55\145\156\144\55\143\157\154", "\166\141\154\165\145", 
+"\104\145\143\154", "\111\156\160\165\164", "\153\151\156\144", "\123\164\155\164", 
+"\124\171\160\145", "\130\104\106", "\101\164\164\162\151\142\165\164\145", 
+"\123\143\150\145\144\165\154\145", "\164\157", "\101\143\164\157\162", null, null, null, null, null, null, null, 
+null, null, null, null, "\173", "\175", "\133", "\135", "\73", "\74\57", "\74\41", 
+"\74", "\74\77", "\76", "\77\76", "\75", "\57\76", };
+public static final String[] lexStateNames = {
+   "DEFAULT", 
+   "BOUNDS", 
+};
+public static final int[] jjnewLexState = {
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 
+   0, 0, 0, 1, 1, -1, -1, 
+};
+static final long[] jjtoToken = {
+   0x47ffffffffffff81L, 0x3ffe7L, 
+};
+static final long[] jjtoSkip = {
+   0x7eL, 0x0L, 
+};
+static final long[] jjtoSpecial = {
+   0x7eL, 0x0L, 
+};
+protected JavaCharStream input_stream;
+private final int[] jjrounds = new int[53];
+private final int[] jjstateSet = new int[106];
+protected char curChar;
+public XmlParserTokenManager(JavaCharStream stream){
+   if (JavaCharStream.staticFlag)
+      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
+   input_stream = stream;
+}
+public XmlParserTokenManager(JavaCharStream stream, int lexState){
+   this(stream);
+   SwitchTo(lexState);
+}
+public void ReInit(JavaCharStream stream)
+{
+   jjmatchedPos = jjnewStateCnt = 0;
+   curLexState = defaultLexState;
+   input_stream = stream;
+   ReInitRounds();
+}
+private final void ReInitRounds()
+{
+   int i;
+   jjround = 0x80000001;
+   for (i = 53; i-- > 0;)
+      jjrounds[i] = 0x80000000;
+}
+public void ReInit(JavaCharStream stream, int lexState)
+{
+   ReInit(stream);
+   SwitchTo(lexState);
+}
+public void SwitchTo(int lexState)
+{
+   if (lexState >= 2 || lexState < 0)
+      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
+   else
+      curLexState = lexState;
+}
+
+protected Token jjFillToken()
+{
+   Token t = Token.newToken(jjmatchedKind);
+   t.kind = jjmatchedKind;
+   String im = jjstrLiteralImages[jjmatchedKind];
+   t.image = (im == null) ? input_stream.GetImage() : im;
+   t.beginLine = input_stream.getBeginLine();
+   t.beginColumn = input_stream.getBeginColumn();
+   t.endLine = input_stream.getEndLine();
+   t.endColumn = input_stream.getEndColumn();
+   return t;
+}
+
+int curLexState = 0;
+int defaultLexState = 0;
+int jjnewStateCnt;
+int jjround;
+int jjmatchedPos;
+int jjmatchedKind;
+
+public Token getNextToken() 
+{
+  int kind;
+  Token specialToken = null;
+  Token matchedToken;
+  int curPos = 0;
+
+  EOFLoop :
+  for (;;)
+  {   
+   try   
+   {     
+      curChar = input_stream.BeginToken();
+   }     
+   catch(java.io.IOException e)
+   {        
+      jjmatchedKind = 0;
+      matchedToken = jjFillToken();
+      matchedToken.specialToken = specialToken;
+      return matchedToken;
+   }
+
+   switch(curLexState)
+   {
+     case 0:
+       jjmatchedKind = 0x7fffffff;
+       jjmatchedPos = 0;
+       curPos = jjMoveStringLiteralDfa0_0();
+       break;
+     case 1:
+       jjmatchedKind = 0x7fffffff;
+       jjmatchedPos = 0;
+       curPos = jjMoveStringLiteralDfa0_1();
+       break;
+   }
+     if (jjmatchedKind != 0x7fffffff)
+     {
+        if (jjmatchedPos + 1 < curPos)
+           input_stream.backup(curPos - jjmatchedPos - 1);
+        if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
+        {
+           matchedToken = jjFillToken();
+           matchedToken.specialToken = specialToken;
+       if (jjnewLexState[jjmatchedKind] != -1)
+         curLexState = jjnewLexState[jjmatchedKind];
+           return matchedToken;
+        }
+        else
+        {
+           if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
+           {
+              matchedToken = jjFillToken();
+              if (specialToken == null)
+                 specialToken = matchedToken;
+              else
+              {
+                 matchedToken.specialToken = specialToken;
+                 specialToken = (specialToken.next = matchedToken);
+              }
+           }
+         if (jjnewLexState[jjmatchedKind] != -1)
+           curLexState = jjnewLexState[jjmatchedKind];
+           continue EOFLoop;
+        }
+     }
+     int error_line = input_stream.getEndLine();
+     int error_column = input_stream.getEndColumn();
+     String error_after = null;
+     boolean EOFSeen = false;
+     try { input_stream.readChar(); input_stream.backup(1); }
+     catch (java.io.IOException e1) {
+        EOFSeen = true;
+        error_after = curPos <= 1 ? "" : input_stream.GetImage();
+        if (curChar == '\n' || curChar == '\r') {
+           error_line++;
+           error_column = 0;
+        }
+        else
+           error_column++;
+     }
+     if (!EOFSeen) {
+        input_stream.backup(1);
+        error_after = curPos <= 1 ? "" : input_stream.GetImage();
+     }
+     throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
+  }
+}
+
+}
diff --git a/examples/actors/xdfAST/XmlParserTreeConstants.java b/examples/actors/xdfAST/XmlParserTreeConstants.java
new file mode 100644
index 0000000000000000000000000000000000000000..34372b5fe6dedf49485615465b726cd64b4c0d54
--- /dev/null
+++ b/examples/actors/xdfAST/XmlParserTreeConstants.java
@@ -0,0 +1,125 @@
+/* Generated By:JJTree: Do not edit this line. /work/csandersn/actors/xmlSchemCompiler/examples/actors/xdfAST/XmlParserTreeConstants.java */
+
+package xdfAST;
+
+public interface XmlParserTreeConstants
+{
+  public int JJTSTART = 0;
+  public int JJTSPECIFICATION = 1;
+  public int JJTOPT = 2;
+  public int JJTDOCTYPE = 3;
+  public int JJTVOID = 4;
+  public int JJTXMLHEADER = 5;
+  public int JJTLIST = 6;
+  public int JJTATTRVALUE = 7;
+  public int JJTENCODING = 8;
+  public int JJTVERSION = 9;
+  public int JJTXSINONAMESPACESCHEMALOCATION = 10;
+  public int JJTXMLNSXSI = 11;
+  public int JJTINTELEMENT = 12;
+  public int JJTFLOATELEMENT = 13;
+  public int JJTSTRINGELEMENT = 14;
+  public int JJTOUTPUT = 15;
+  public int JJTCLASS = 16;
+  public int JJTOP = 17;
+  public int JJTPARAMETER = 18;
+  public int JJTQID = 19;
+  public int JJTTEXT_END_LINE = 20;
+  public int JJTCONNECTION = 21;
+  public int JJTNOTE = 22;
+  public int JJTTEXT_BEGIN_LINE = 23;
+  public int JJTNAME = 24;
+  public int JJTFROM = 25;
+  public int JJTINSTANCE = 26;
+  public int JJTENTRY = 27;
+  public int JJTDST_PORT = 28;
+  public int JJTGUARDS = 29;
+  public int JJTSRC = 30;
+  public int JJTID = 31;
+  public int JJTACTION = 32;
+  public int JJTIMPORT = 33;
+  public int JJTPORT = 34;
+  public int JJTLITERAL_KIND = 35;
+  public int JJTTRANSITION = 36;
+  public int JJTASSIGNABLE = 37;
+  public int JJTINITIAL_STATE = 38;
+  public int JJTACTIONTAGS = 39;
+  public int JJTARGS = 40;
+  public int JJTDST = 41;
+  public int JJTEXPR = 42;
+  public int JJTTEXT_BEGIN_COL = 43;
+  public int JJTSRC_PORT = 44;
+  public int JJTTEXT_END_COL = 45;
+  public int JJTVALUE = 46;
+  public int JJTDECL = 47;
+  public int JJTINPUT = 48;
+  public int JJTKIND = 49;
+  public int JJTSTMT = 50;
+  public int JJTTYPE = 51;
+  public int JJTXDF = 52;
+  public int JJT_ATTRIBUTE = 53;
+  public int JJTSCHEDULE = 54;
+  public int JJT_TO = 55;
+  public int JJTACTOR = 56;
+
+
+  public String[] jjtNodeName = {
+    "Start",
+    "Specification",
+    "Opt",
+    "DocType",
+    "void",
+    "XmlHeader",
+    "List",
+    "AttrValue",
+    "Encoding",
+    "Version",
+    "XsiNoNamespaceSchemaLocation",
+    "XmlnsXsi",
+    "IntElement",
+    "FloatElement",
+    "StringElement",
+    "Output",
+    "Class",
+    "Op",
+    "Parameter",
+    "QID",
+    "text_end_line",
+    "Connection",
+    "Note",
+    "text_begin_line",
+    "name",
+    "from",
+    "Instance",
+    "Entry",
+    "dst_port",
+    "Guards",
+    "src",
+    "ID",
+    "Action",
+    "Import",
+    "Port",
+    "literal_kind",
+    "Transition",
+    "assignable",
+    "initial_state",
+    "ActionTags",
+    "Args",
+    "dst",
+    "Expr",
+    "text_begin_col",
+    "src_port",
+    "text_end_col",
+    "value",
+    "Decl",
+    "Input",
+    "kind",
+    "Stmt",
+    "Type",
+    "XDF",
+    "_Attribute",
+    "Schedule",
+    "_to",
+    "Actor",
+  };
+}
diff --git a/examples/actors/xdfAST/XmlParserVisitor.java b/examples/actors/xdfAST/XmlParserVisitor.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ddebafc4c1f580ed41306eac63f651edf9f1dc6
--- /dev/null
+++ b/examples/actors/xdfAST/XmlParserVisitor.java
@@ -0,0 +1,64 @@
+/* Generated By:JJTree: Do not edit this line. /work/csandersn/actors/xmlSchemCompiler/examples/actors/xdfAST/XmlParserVisitor.java */
+
+package xdfAST;
+
+public interface XmlParserVisitor
+{
+  public Object visit(SimpleNode node, Object data);
+  public Object visit(Start node, Object data);
+  public Object visit(Specification node, Object data);
+  public Object visit(Opt node, Object data);
+  public Object visit(DocType node, Object data);
+  public Object visit(XmlHeader node, Object data);
+  public Object visit(List node, Object data);
+  public Object visit(AttrValue node, Object data);
+  public Object visit(Encoding node, Object data);
+  public Object visit(Version node, Object data);
+  public Object visit(XsiNoNamespaceSchemaLocation node, Object data);
+  public Object visit(XmlnsXsi node, Object data);
+  public Object visit(IntElement node, Object data);
+  public Object visit(FloatElement node, Object data);
+  public Object visit(StringElement node, Object data);
+  public Object visit(Output node, Object data);
+  public Object visit(Class node, Object data);
+  public Object visit(Op node, Object data);
+  public Object visit(Parameter node, Object data);
+  public Object visit(QID node, Object data);
+  public Object visit(text_end_line node, Object data);
+  public Object visit(Connection node, Object data);
+  public Object visit(Note node, Object data);
+  public Object visit(text_begin_line node, Object data);
+  public Object visit(name node, Object data);
+  public Object visit(from node, Object data);
+  public Object visit(Instance node, Object data);
+  public Object visit(Entry node, Object data);
+  public Object visit(dst_port node, Object data);
+  public Object visit(Guards node, Object data);
+  public Object visit(src node, Object data);
+  public Object visit(ID node, Object data);
+  public Object visit(Action node, Object data);
+  public Object visit(Import node, Object data);
+  public Object visit(Port node, Object data);
+  public Object visit(literal_kind node, Object data);
+  public Object visit(Transition node, Object data);
+  public Object visit(assignable node, Object data);
+  public Object visit(initial_state node, Object data);
+  public Object visit(ActionTags node, Object data);
+  public Object visit(Args node, Object data);
+  public Object visit(dst node, Object data);
+  public Object visit(Expr node, Object data);
+  public Object visit(text_begin_col node, Object data);
+  public Object visit(src_port node, Object data);
+  public Object visit(text_end_col node, Object data);
+  public Object visit(value node, Object data);
+  public Object visit(Decl node, Object data);
+  public Object visit(Input node, Object data);
+  public Object visit(kind node, Object data);
+  public Object visit(Stmt node, Object data);
+  public Object visit(Type node, Object data);
+  public Object visit(XDF node, Object data);
+  public Object visit(_Attribute node, Object data);
+  public Object visit(Schedule node, Object data);
+  public Object visit(_to node, Object data);
+  public Object visit(Actor node, Object data);
+}
diff --git a/examples/actors/xdfAST/XmlnsXsi.java b/examples/actors/xdfAST/XmlnsXsi.java
new file mode 100644
index 0000000000000000000000000000000000000000..670d8c691a18c2cfa226b70af04980e9ef2e053f
--- /dev/null
+++ b/examples/actors/xdfAST/XmlnsXsi.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class XmlnsXsi extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XmlnsXsi clone() throws CloneNotSupportedException {
+        XmlnsXsi node = (XmlnsXsi)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XmlnsXsi copy() {
+      try {
+          XmlnsXsi node = (XmlnsXsi)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XmlnsXsi fullCopy() {
+        XmlnsXsi res = (XmlnsXsi)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 43
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" xmlns:xsi=");
+    getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 21
+
+    public XmlnsXsi(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public XmlnsXsi(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public XmlnsXsi() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 21
+    public XmlnsXsi(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "XmlnsXsi");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/XsiNoNamespaceSchemaLocation.java b/examples/actors/xdfAST/XsiNoNamespaceSchemaLocation.java
new file mode 100644
index 0000000000000000000000000000000000000000..c790f3b12dd16603c69cb91f1e672e57f5676ecf
--- /dev/null
+++ b/examples/actors/xdfAST/XsiNoNamespaceSchemaLocation.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class XsiNoNamespaceSchemaLocation extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XsiNoNamespaceSchemaLocation clone() throws CloneNotSupportedException {
+        XsiNoNamespaceSchemaLocation node = (XsiNoNamespaceSchemaLocation)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XsiNoNamespaceSchemaLocation copy() {
+      try {
+          XsiNoNamespaceSchemaLocation node = (XsiNoNamespaceSchemaLocation)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XsiNoNamespaceSchemaLocation fullCopy() {
+        XsiNoNamespaceSchemaLocation res = (XsiNoNamespaceSchemaLocation)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 48
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" xsi:NoNamespaceSchemaLocation=");
+    getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 22
+
+    public XsiNoNamespaceSchemaLocation(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public XsiNoNamespaceSchemaLocation(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public XsiNoNamespaceSchemaLocation() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 22
+    public XsiNoNamespaceSchemaLocation(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "XsiNoNamespaceSchemaLocation");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/_Attribute.java b/examples/actors/xdfAST/_Attribute.java
new file mode 100644
index 0000000000000000000000000000000000000000..f2fb8b80e6036ced02f3071240fcd991a632a953
--- /dev/null
+++ b/examples/actors/xdfAST/_Attribute.java
@@ -0,0 +1,276 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class _Attribute extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public _Attribute clone() throws CloneNotSupportedException {
+        _Attribute node = (_Attribute)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public _Attribute copy() {
+      try {
+          _Attribute node = (_Attribute)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public _Attribute fullCopy() {
+        _Attribute res = (_Attribute)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 529
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<_Attribute ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</_Attribute> ");
+    }
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 65
+
+    public _Attribute(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public _Attribute(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public _Attribute() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xdf.ast at line 19
+
+
+    // Declared in xdf.ast line 65
+    public _Attribute(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xdf.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "_Attribute");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xdf.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xdf.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xdf.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xdf.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xdf.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xdf.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xdf.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xdf.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xdf.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xdf.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xdf.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/_to.java b/examples/actors/xdfAST/_to.java
new file mode 100644
index 0000000000000000000000000000000000000000..c405fe33a7bdc1186f04beef08132d82975749c7
--- /dev/null
+++ b/examples/actors/xdfAST/_to.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class _to extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public _to clone() throws CloneNotSupportedException {
+        _to node = (_to)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public _to copy() {
+      try {
+          _to node = (_to)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public _to fullCopy() {
+        _to res = (_to)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 563
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" to=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 67
+
+    public _to(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public _to(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public _to() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 67
+    public _to(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "_to");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/assignable.java b/examples/actors/xdfAST/assignable.java
new file mode 100644
index 0000000000000000000000000000000000000000..8bee93084187ca8a363aff72dc21a4dbb71df219
--- /dev/null
+++ b/examples/actors/xdfAST/assignable.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class assignable extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public assignable clone() throws CloneNotSupportedException {
+        assignable node = (assignable)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public assignable copy() {
+      try {
+          assignable node = (assignable)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public assignable fullCopy() {
+        assignable res = (assignable)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 343
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" assignable=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 47
+
+    public assignable(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public assignable(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public assignable() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 47
+    public assignable(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "assignable");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/dst.java b/examples/actors/xdfAST/dst.java
new file mode 100644
index 0000000000000000000000000000000000000000..35221e4af3ccd25023b378c7d335c2163f3857d3
--- /dev/null
+++ b/examples/actors/xdfAST/dst.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class dst extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public dst clone() throws CloneNotSupportedException {
+        dst node = (dst)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public dst copy() {
+      try {
+          dst node = (dst)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public dst fullCopy() {
+        dst res = (dst)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 387
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" dst=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 51
+
+    public dst(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public dst(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public dst() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 51
+    public dst(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "dst");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/dst_port.java b/examples/actors/xdfAST/dst_port.java
new file mode 100644
index 0000000000000000000000000000000000000000..df8e72996793650d7c195af6683b006dd502cd79
--- /dev/null
+++ b/examples/actors/xdfAST/dst_port.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class dst_port extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public dst_port clone() throws CloneNotSupportedException {
+        dst_port node = (dst_port)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public dst_port copy() {
+      try {
+          dst_port node = (dst_port)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public dst_port fullCopy() {
+        dst_port res = (dst_port)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 226
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" dst-port=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 38
+
+    public dst_port(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public dst_port(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public dst_port() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 38
+    public dst_port(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "dst_port");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/from.java b/examples/actors/xdfAST/from.java
new file mode 100644
index 0000000000000000000000000000000000000000..4e256070a9197bb2034158dd4dece9100dcf5e37
--- /dev/null
+++ b/examples/actors/xdfAST/from.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class from extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public from clone() throws CloneNotSupportedException {
+        from node = (from)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public from copy() {
+      try {
+          from node = (from)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public from fullCopy() {
+        from res = (from)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 187
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" from=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 35
+
+    public from(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public from(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public from() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 35
+    public from(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "from");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/id.java b/examples/actors/xdfAST/id.java
new file mode 100644
index 0000000000000000000000000000000000000000..d77bf0b0080f941628f35c2ebf595402c8844ba6
--- /dev/null
+++ b/examples/actors/xdfAST/id.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class id extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public id clone() throws CloneNotSupportedException {
+        id node = (id)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public id copy() {
+      try {
+          id node = (id)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public id fullCopy() {
+        id res = (id)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 392
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" id=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 52
+
+    public id(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public id(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public id() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 52
+    public id(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "id");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/initial_state.java b/examples/actors/xdfAST/initial_state.java
new file mode 100644
index 0000000000000000000000000000000000000000..1bc05175664eaeb24cfb0efa0b4307dbbf46f8f9
--- /dev/null
+++ b/examples/actors/xdfAST/initial_state.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class initial_state extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public initial_state clone() throws CloneNotSupportedException {
+        initial_state node = (initial_state)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public initial_state copy() {
+      try {
+          initial_state node = (initial_state)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public initial_state fullCopy() {
+        initial_state res = (initial_state)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 348
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" initial-state=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 48
+
+    public initial_state(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public initial_state(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public initial_state() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 48
+    public initial_state(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "initial_state");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/kind.java b/examples/actors/xdfAST/kind.java
new file mode 100644
index 0000000000000000000000000000000000000000..671bc95d3313881eda74d3d50002505cdfc1e856
--- /dev/null
+++ b/examples/actors/xdfAST/kind.java
@@ -0,0 +1,154 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class kind extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        isKind_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public kind clone() throws CloneNotSupportedException {
+        kind node = (kind)super.clone();
+        node.isKind_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public kind copy() {
+      try {
+          kind node = (kind)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public kind fullCopy() {
+        kind res = (kind)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 473
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" kind=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 61
+
+    public kind(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public kind(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public kind() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 61
+    public kind(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "kind");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+    protected int isKind_visited = -1;
+    // Declared in SSR.jrag at line 174
+ @SuppressWarnings({"unchecked", "cast"})     public boolean isKind() {
+        if(isKind_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: isKind in class: ");
+        isKind_visited = boundariesCrossed;
+        boolean isKind_value = isKind_compute();
+        isKind_visited = -1;
+        return isKind_value;
+    }
+
+    private boolean isKind_compute() {  return true;  }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/literal_kind.java b/examples/actors/xdfAST/literal_kind.java
new file mode 100644
index 0000000000000000000000000000000000000000..c6745cfdbe21779dd9d7db5e4cebb239973a3ac1
--- /dev/null
+++ b/examples/actors/xdfAST/literal_kind.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class literal_kind extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public literal_kind clone() throws CloneNotSupportedException {
+        literal_kind node = (literal_kind)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public literal_kind copy() {
+      try {
+          literal_kind node = (literal_kind)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public literal_kind fullCopy() {
+        literal_kind res = (literal_kind)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 321
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" literal-kind=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 45
+
+    public literal_kind(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public literal_kind(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public literal_kind() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 45
+    public literal_kind(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "literal_kind");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/name.java b/examples/actors/xdfAST/name.java
new file mode 100644
index 0000000000000000000000000000000000000000..f2eb15e11a24b429801d9375fed762d0188bd4b4
--- /dev/null
+++ b/examples/actors/xdfAST/name.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class name extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public name clone() throws CloneNotSupportedException {
+        name node = (name)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public name copy() {
+      try {
+          name node = (name)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public name fullCopy() {
+        name res = (name)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 182
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" name=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 34
+
+    public name(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public name(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public name() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 34
+    public name(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "name");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/port.java b/examples/actors/xdfAST/port.java
new file mode 100644
index 0000000000000000000000000000000000000000..1dfe1cab32ab41a2d80194a1280202535fc3269e
--- /dev/null
+++ b/examples/actors/xdfAST/port.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class port extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public port clone() throws CloneNotSupportedException {
+        port node = (port)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public port copy() {
+      try {
+          port node = (port)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public port fullCopy() {
+        port res = (port)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 414
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" port=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 54
+
+    public port(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public port(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public port() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 54
+    public port(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "port");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/src.java b/examples/actors/xdfAST/src.java
new file mode 100644
index 0000000000000000000000000000000000000000..bac865c36d0119b675667317ad1e588a98c148a9
--- /dev/null
+++ b/examples/actors/xdfAST/src.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class src extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public src clone() throws CloneNotSupportedException {
+        src node = (src)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public src copy() {
+      try {
+          src node = (src)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public src fullCopy() {
+        src res = (src)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 248
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" src=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 40
+
+    public src(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public src(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public src() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 40
+    public src(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "src");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/src_port.java b/examples/actors/xdfAST/src_port.java
new file mode 100644
index 0000000000000000000000000000000000000000..8272bc9966ae6044acc8364e0ca7a1596b48e02e
--- /dev/null
+++ b/examples/actors/xdfAST/src_port.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class src_port extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public src_port clone() throws CloneNotSupportedException {
+        src_port node = (src_port)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public src_port copy() {
+      try {
+          src_port node = (src_port)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public src_port fullCopy() {
+        src_port res = (src_port)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 424
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" src-port=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 56
+
+    public src_port(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public src_port(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public src_port() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 56
+    public src_port(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "src_port");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/text_begin_col.java b/examples/actors/xdfAST/text_begin_col.java
new file mode 100644
index 0000000000000000000000000000000000000000..bd07e70f62ce3734de990d811643847fe8eff2bd
--- /dev/null
+++ b/examples/actors/xdfAST/text_begin_col.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class text_begin_col extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public text_begin_col clone() throws CloneNotSupportedException {
+        text_begin_col node = (text_begin_col)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public text_begin_col copy() {
+      try {
+          text_begin_col node = (text_begin_col)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public text_begin_col fullCopy() {
+        text_begin_col res = (text_begin_col)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 419
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" text-begin-col=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 55
+
+    public text_begin_col(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public text_begin_col(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public text_begin_col() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 55
+    public text_begin_col(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "text_begin_col");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/text_begin_line.java b/examples/actors/xdfAST/text_begin_line.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac658f000f5033cb24ba6a69cf956b2a20ea2e61
--- /dev/null
+++ b/examples/actors/xdfAST/text_begin_line.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class text_begin_line extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public text_begin_line clone() throws CloneNotSupportedException {
+        text_begin_line node = (text_begin_line)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public text_begin_line copy() {
+      try {
+          text_begin_line node = (text_begin_line)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public text_begin_line fullCopy() {
+        text_begin_line res = (text_begin_line)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 177
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" text-begin-line=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 33
+
+    public text_begin_line(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public text_begin_line(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public text_begin_line() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 33
+    public text_begin_line(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "text_begin_line");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/text_end_col.java b/examples/actors/xdfAST/text_end_col.java
new file mode 100644
index 0000000000000000000000000000000000000000..e50cd11f36e0e2da93128e4ce6ed6982ec5c1db2
--- /dev/null
+++ b/examples/actors/xdfAST/text_end_col.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class text_end_col extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public text_end_col clone() throws CloneNotSupportedException {
+        text_end_col node = (text_end_col)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public text_end_col copy() {
+      try {
+          text_end_col node = (text_end_col)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public text_end_col fullCopy() {
+        text_end_col res = (text_end_col)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 429
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" text-end-col=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 57
+
+    public text_end_col(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public text_end_col(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public text_end_col() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 57
+    public text_end_col(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "text_end_col");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/text_end_line.java b/examples/actors/xdfAST/text_end_line.java
new file mode 100644
index 0000000000000000000000000000000000000000..f1cd5e5303cffae13cc6390576d13ff0891aa520
--- /dev/null
+++ b/examples/actors/xdfAST/text_end_line.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class text_end_line extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public text_end_line clone() throws CloneNotSupportedException {
+        text_end_line node = (text_end_line)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public text_end_line copy() {
+      try {
+          text_end_line node = (text_end_line)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public text_end_line fullCopy() {
+        text_end_line res = (text_end_line)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 138
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" text-end-line=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 30
+
+    public text_end_line(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public text_end_line(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public text_end_line() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 30
+    public text_end_line(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "text_end_line");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/value.java b/examples/actors/xdfAST/value.java
new file mode 100644
index 0000000000000000000000000000000000000000..d530c0c02db4c108f193db3a4a0b2c827ede147d
--- /dev/null
+++ b/examples/actors/xdfAST/value.java
@@ -0,0 +1,139 @@
+
+package xdfAST;
+import java.io.PrintStream;import java.util.HashSet;import java.io.FileReader;
+
+
+public class value extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public value clone() throws CloneNotSupportedException {
+        value node = (value)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public value copy() {
+      try {
+          value node = (value)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public value fullCopy() {
+        value res = (value)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 434
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" value=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xdf.ast at line 3
+    // Declared in xdf.ast line 58
+
+    public value(int i) {
+        super(i);
+    }
+
+    // Declared in xdf.ast at line 6
+
+    public value(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xdf.ast at line 10
+
+    public value() {
+        this(0);
+
+
+    }
+
+    // Declared in xdf.ast at line 17
+
+
+    // Declared in xdf.ast line 58
+    public value(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xdf.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "value");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xdf.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xdf.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xdf.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xdf.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xdf.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xdf.ast at line 2
+    // Declared in xdf.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xdf.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xdf.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xdfAST/xdf.jj b/examples/actors/xdfAST/xdf.jj
new file mode 100644
index 0000000000000000000000000000000000000000..dd81c9ced3fe10a5d2504b077ae7bb6e528239bc
--- /dev/null
+++ b/examples/actors/xdfAST/xdf.jj
@@ -0,0 +1,2083 @@
+/*@bgen(jjtree) Generated By:JJTree: Do not edit this line. /work/csandersn/actors/xmlSchemCompiler/examples/actors/xdfAST/xdf.jj */
+/*@egen*//* -*-Java-*- */
+
+options {                                                                                                                                                                                                       
+    JAVA_UNICODE_ESCAPE         = true;
+    STATIC                      = false;
+} 
+
+PARSER_BEGIN(XmlParser)
+    package xdfAST;
+    public class XmlParser/*@bgen(jjtree)*/implements XmlParserTreeConstants/*@egen*/ {/*@bgen(jjtree)*/
+  protected JJTXmlParserState jjtree = new JJTXmlParserState();
+
+/*@egen*/
+}
+PARSER_END(XmlParser)
+
+//----------------------------------------------//
+//                LEXICAL TOKENS                //
+//----------------------------------------------//
+<DEFAULT,BOUNDS> SPECIAL_TOKEN : /* WHITE SPACE */
+{
+    " "
+    |
+    "\t"
+    |
+    "\n"
+    |
+    "\r"
+    |
+    "\f"
+}// WHITE SPACE
+
+<DEFAULT,BOUNDS> SPECIAL_TOKEN : /* COMMENTS */ 
+{
+    < "<!--" ( ~["-"] | ( "-" ~["-"] ) )* "-->">
+}// COMMENTS
+
+<DEFAULT> TOKEN : /* Reserved Words */
+{
+   <XML		: "xml">
+ | <DOCTYPE : "DOCTYPE">
+ | <PUBLIC : "PUBLIC">
+ | <encoding		: "encoding">
+ | <version		: "version">
+ | <XsiNoNamespaceSchemaLocation		: "xsi:noNamespaceSchemaLocation">
+ | <XmlnsXsi		: "xmlns:xsi">
+ | <Output		: "Output" >
+ | <Class		: "Class" >
+ | <Op		: "Op" >
+ | <Parameter		: "Parameter" >
+ | <QID		: "QID" >
+ | <text_end_line		: "text-end-line" >
+ | <Connection		: "Connection" >
+ | <Note		: "Note" >
+ | <text_begin_line		: "text-begin-line" >
+ | <name		: "name" >
+ | <from		: "from" >
+ | <Instance		: "Instance" >
+ | <Entry		: "Entry" >
+ | <dst_port		: "dst-port" >
+ | <Guards		: "Guards" >
+ | <src		: "src" >
+ | <ID		: "ID" >
+ | <Action		: "Action" >
+ | <Import		: "Import" >
+ | <Port		: "Port" >
+ | <literal_kind		: "literal-kind" >
+ | <Transition		: "Transition" >
+ | <assignable		: "assignable" >
+ | <initial_state		: "initial-state" >
+ | <ActionTags		: "ActionTags" >
+ | <Args		: "Args" >
+ | <dst		: "dst" >
+ | <id		: "id" >
+ | <Expr		: "Expr" >
+ | <port		: "port" >
+ | <text_begin_col		: "text-begin-col" >
+ | <src_port		: "src-port" >
+ | <text_end_col		: "text-end-col" >
+ | <value		: "value" >
+ | <Decl		: "Decl" >
+ | <Input		: "Input" >
+ | <kind		: "kind" >
+ | <Stmt		: "Stmt" >
+ | <Type		: "Type" >
+ | <XDF		: "XDF" >
+ | <_Attribute		: "Attribute" >
+ | <Schedule		: "Schedule" >
+ | <_to		: "to" >
+ | <Actor		: "Actor" >
+}// Reserved Words
+
+<DEFAULT, BOUNDS> TOKEN : /* LITERALS */
+{
+    < INTEGER_LITERAL:
+        <DECIMAL_LITERAL> (["l","L"])?
+        |
+        <HEX_LITERAL> (["l","L"])?
+        |
+        <OCTAL_LITERAL> (["l","L"])?
+    >
+    |
+    < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* >
+    |
+    < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ >
+    |
+    < #OCTAL_LITERAL: "0" (["0"-"7"])* >
+    |
+    < FLOAT_LITERAL:
+        (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? (["f","F","d","D"])?
+        |
+        "." (["0"-"9"])+ (<EXPONENT>)? (["f","F","d","D"])?
+        |
+        (["0"-"9"])+ <EXPONENT> (["f","F","d","D"])?
+        |
+        (["0"-"9"])+ (<EXPONENT>)? ["f","F","d","D"]
+    >
+    |
+    < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
+    |
+    < CHARACTER_LITERAL:
+        "'"
+        (   (~["'","\\","\n","\r"])
+            |
+            ("\\"
+                (   ["n","t","b","r","f","\\","'","\""]
+                    |
+                    ["0"-"7"] ( ["0"-"7"] )?
+                    |
+                    ["0"-"3"] ["0"-"7"] ["0"-"7"]
+                )
+            )
+        )
+        "'"
+    >
+    |
+    < STRING_LITERAL:
+        ("\""
+        (   (~["\"","\n","\r"])
+        )*
+        "\"")
+       | ("\'"
+        (   (~["\'","\n","\r"])
+        )*
+        "\'")
+    >
+}// LITERALS
+<DEFAULT, BOUNDS> TOKEN : /* IDENTIFIERS */
+{
+    < IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>|"-")* >
+    |
+    < #LETTER:
+        [
+        "$",
+        "A"-"Z",
+        "_",
+        "a"-"z",
+        "\u00c0"-"\u00d6",
+        "\u00d8"-"\u00f6",
+        "\u00f8"-"\u00ff",
+        "\u0100"-"\u1fff",
+        "\u3040"-"\u318f",
+        "\u3300"-"\u337f",
+        "\u3400"-"\u3d2d",
+        "\u4e00"-"\u9fff",
+        "\uf900"-"\ufaff"
+        ]
+    >
+    |
+    < #DIGIT:
+        [
+        "0"-"9",
+        "\u0660"-"\u0669",
+        "\u06f0"-"\u06f9",
+        "\u0966"-"\u096f",
+        "\u09e6"-"\u09ef",
+        "\u0a66"-"\u0a6f",
+        "\u0ae6"-"\u0aef",
+        "\u0b66"-"\u0b6f",
+        "\u0be7"-"\u0bef",
+        "\u0c66"-"\u0c6f",
+        "\u0ce6"-"\u0cef",
+        "\u0d66"-"\u0d6f",
+        "\u0e50"-"\u0e59",
+        "\u0ed0"-"\u0ed9",
+        "\u1040"-"\u1049"
+        ]
+    >
+}// IDENTIFIERS
+<DEFAULT,BOUNDS> TOKEN : /* SEPARATORS */
+{
+     < LBRACE               : "{"    >
+    | < RBRACE               : "}"    >
+    | < LBRACKET             : "["    >
+    | < RBRACKET             : "]"    >
+    | < SEMICOLON            : ";"    >
+    | < LTSLASH              : "</"    > : DEFAULT
+    | < LTBANG               : "<!"    > : DEFAULT
+    | < LT                   : "<"    > : DEFAULT
+    | < LTQ                  : "<?"    > : DEFAULT
+    | < GT                   : ">"    > : BOUNDS
+    | < QGT                  : "?>"    > : BOUNDS
+}// SEPARATORS
+<DEFAULT,BOUNDS> TOKEN : /* OPERATORS */
+{
+      < ASSIGN               : "="    >
+}// OPERATORS
+Start Start()        : {/*@bgen(jjtree) Start */
+  Start jjtn000 = new Start(JJTSTART);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Start */
+  try {
+/*@egen*/
+  Specification()/*@bgen(jjtree)*/
+  {
+    jjtree.closeNodeScope(jjtn000, true);
+    jjtc000 = false;
+  }
+/*@egen*/
+  { return jjtn000; }/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void Specification()                : {/*@bgen(jjtree) Specification */
+  Specification jjtn000 = new Specification(JJTSPECIFICATION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Specification */
+  try {
+/*@egen*/
+  XmlHeader()/*@bgen(jjtree) #Opt( true) */
+  {
+    Opt jjtn001 = new Opt(JJTOPT);
+    boolean jjtc001 = true;
+    jjtree.openNodeScope(jjtn001);
+  }
+  try {
+/*@egen*/
+  ( [DocType()] )/*@bgen(jjtree)*/
+  } catch (Throwable jjte001) {
+    if (jjtc001) {
+      jjtree.clearNodeScope(jjtn001);
+      jjtc001 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte001 instanceof RuntimeException) {
+      throw (RuntimeException)jjte001;
+    }
+    if (jjte001 instanceof ParseException) {
+      throw (ParseException)jjte001;
+    }
+    throw (Error)jjte001;
+  } finally {
+    if (jjtc001) {
+      jjtree.closeNodeScope(jjtn001,  true);
+    }
+  }
+/*@egen*/
+  ElementList()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void DocType()          : {/*@bgen(jjtree) DocType */
+                           DocType jjtn000 = new DocType(JJTDOCTYPE);
+                           boolean jjtc000 = true;
+                           jjtree.openNodeScope(jjtn000);
+/*@egen*/String s;}
+{/*@bgen(jjtree) DocType */
+  try {
+/*@egen*/
+  <LTBANG>
+  {
+		s = new String();
+		if (getToken(1).kind != GT ) {
+		   s += getData();
+        } 
+  }/*@bgen(jjtree)*/
+     {
+       jjtree.closeNodeScope(jjtn000, true);
+       jjtc000 = false;
+     }
+/*@egen*/       
+     {jjtn000.setSTRING(s);}/*@bgen(jjtree)*/
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+JAVACODE
+String getData() {
+	StringBuffer s = new StringBuffer();
+//     jjtThis.someData = true;
+    while ((getToken(1)).kind != LT && (getToken(1)).kind != LTSLASH) {
+		Token t = getNextToken();
+		if (t.specialToken != null) {
+			Token tmp_t = t.specialToken;
+			while (tmp_t.specialToken != null) {
+				tmp_t = tmp_t.specialToken;
+			}
+			while (tmp_t != null) {
+				s.append(tmp_t.image);
+				tmp_t = tmp_t.next;
+			}
+		}
+		s.append(t.image);
+       s.append(" ");
+	}
+	return s.toString();
+}
+
+void XmlHeader()            : {/*@bgen(jjtree) XmlHeader */
+  XmlHeader jjtn000 = new XmlHeader(JJTXMLHEADER);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) XmlHeader */
+  try {
+/*@egen*/
+  <LTQ> <XML> AttributeList() <QGT>/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void ElementList()       : {/*@bgen(jjtree) List */
+  List jjtn000 = new List(JJTLIST);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) List */
+  try {
+/*@egen*/
+  (Element())*/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void AttributeList()       : {/*@bgen(jjtree) List */
+  List jjtn000 = new List(JJTLIST);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) List */
+  try {
+/*@egen*/
+  (Attribute())*/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void AttrValue()            : {/*@bgen(jjtree) AttrValue */
+                                AttrValue jjtn000 = new AttrValue(JJTATTRVALUE);
+                                boolean jjtc000 = true;
+                                jjtree.openNodeScope(jjtn000);
+/*@egen*/ Token t; }
+{/*@bgen(jjtree) AttrValue */
+    try {
+/*@egen*/
+    t = <STRING_LITERAL>/*@bgen(jjtree)*/
+        {
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+        }
+/*@egen*/
+        {jjtn000.setLITERAL(t.image);}/*@bgen(jjtree)*/
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
+    }
+/*@egen*/
+}
+
+void Encoding()           : {/*@bgen(jjtree) Encoding */
+  Encoding jjtn000 = new Encoding(JJTENCODING);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Encoding */
+  try {
+/*@egen*/
+  <encoding> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void Version()          : {/*@bgen(jjtree) Version */
+  Version jjtn000 = new Version(JJTVERSION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Version */
+  try {
+/*@egen*/
+  <version> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void XsiNoNamespaceSchemaLocation()                               : {/*@bgen(jjtree) XsiNoNamespaceSchemaLocation */
+  XsiNoNamespaceSchemaLocation jjtn000 = new XsiNoNamespaceSchemaLocation(JJTXSINONAMESPACESCHEMALOCATION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) XsiNoNamespaceSchemaLocation */
+  try {
+/*@egen*/
+  <XsiNoNamespaceSchemaLocation> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void XmlnsXsi()           : {/*@bgen(jjtree) XmlnsXsi */
+  XmlnsXsi jjtn000 = new XmlnsXsi(JJTXMLNSXSI);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) XmlnsXsi */
+  try {
+/*@egen*/
+  <XmlnsXsi> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void Element()  : {}
+{
+ ( <LT> (
+  ActionTags()
+  | Stmt()
+  | _Attribute()
+  | Action()
+  | QID()
+  | Transition()
+  | Output()
+  | Parameter()
+  | XDF()
+  | Args()
+  | Entry()
+  | Expr()
+  | Note()
+  | Guards()
+  | Actor()
+  | Decl()
+  | ID()
+  | Type()
+  | Import()
+  | Op()
+  | Port()
+  | Input()
+  | Class()
+  | Schedule()
+  | Connection()
+  | Instance()
+ )) 
+ | SimpleElement()
+}
+
+void SimpleElement() : {}
+{
+    IntElement()
+	| FloatElement()
+  	| StringElement()
+}
+
+void IntElement()             : {/*@bgen(jjtree) IntElement */
+                                  IntElement jjtn000 = new IntElement(JJTINTELEMENT);
+                                  boolean jjtc000 = true;
+                                  jjtree.openNodeScope(jjtn000);
+/*@egen*/ Token t; }
+{/*@bgen(jjtree) IntElement */
+    try {
+/*@egen*/
+    t = <INTEGER_LITERAL>/*@bgen(jjtree)*/
+        {
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+        }
+/*@egen*/
+	{jjtn000.setLITERAL(t.image);}/*@bgen(jjtree)*/
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
+    }
+/*@egen*/
+}
+
+void FloatElement()               : {/*@bgen(jjtree) FloatElement */
+                                      FloatElement jjtn000 = new FloatElement(JJTFLOATELEMENT);
+                                      boolean jjtc000 = true;
+                                      jjtree.openNodeScope(jjtn000);
+/*@egen*/ Token t; }
+{/*@bgen(jjtree) FloatElement */
+    try {
+/*@egen*/
+    t = <FLOAT_LITERAL>/*@bgen(jjtree)*/
+        {
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+        }
+/*@egen*/
+	{jjtn000.setLITERAL(t.image);}/*@bgen(jjtree)*/
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
+    }
+/*@egen*/
+}
+
+void StringElement()                : {/*@bgen(jjtree) StringElement */
+                                        StringElement jjtn000 = new StringElement(JJTSTRINGELEMENT);
+                                        boolean jjtc000 = true;
+                                        jjtree.openNodeScope(jjtn000);
+/*@egen*/ Token t;String s; }
+{/*@bgen(jjtree) StringElement */
+        try {
+/*@egen*/
+	t = <IDENTIFIER>
+	{
+		s = t.image;
+		if (getToken(1).kind != GT ) {
+		s += getData();
+	}
+	}/*@bgen(jjtree)*/
+        {
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+        }
+/*@egen*/
+        {jjtn000.setLITERAL(s);}/*@bgen(jjtree)*/
+        } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+          }
+        }
+/*@egen*/
+}
+void Attribute()  : {}
+{
+  Encoding()
+ | Version()
+ | XsiNoNamespaceSchemaLocation()
+ | XmlnsXsi()
+  | _to()
+  | literal_kind()
+  | src()
+  | kind()
+  | text_begin_col()
+  | port()
+  | dst_port()
+  | initial_state()
+  | id()
+  | value()
+  | from()
+  | text_end_line()
+  | text_end_col()
+  | src_port()
+  | assignable()
+  | text_begin_line()
+  | dst()
+  | name()
+  
+}
+
+void Output()         : {/*@bgen(jjtree) Output */
+  Output jjtn000 = new Output(JJTOUTPUT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Output */
+   try {
+/*@egen*/
+   <Output> AttributeList()
+  ( <GT> ElementList()  "</" <Output>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void Class()        : {/*@bgen(jjtree) Class */
+  Class jjtn000 = new Class(JJTCLASS);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Class */
+   try {
+/*@egen*/
+   <Class> AttributeList()
+  ( <GT> ElementList()  "</" <Class>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void Op()     : {/*@bgen(jjtree) Op */
+  Op jjtn000 = new Op(JJTOP);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Op */
+   try {
+/*@egen*/
+   <Op> AttributeList()
+  ( <GT> ElementList()  "</" <Op>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void Parameter()            : {/*@bgen(jjtree) Parameter */
+  Parameter jjtn000 = new Parameter(JJTPARAMETER);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Parameter */
+   try {
+/*@egen*/
+   <Parameter> AttributeList()
+  ( <GT> ElementList()  "</" <Parameter>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void QID()      : {/*@bgen(jjtree) QID */
+  QID jjtn000 = new QID(JJTQID);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) QID */
+   try {
+/*@egen*/
+   <QID> AttributeList()
+  ( <GT> ElementList()  "</" <QID>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void text_end_line()                : {/*@bgen(jjtree) text_end_line */
+  text_end_line jjtn000 = new text_end_line(JJTTEXT_END_LINE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) text_end_line */
+  try {
+/*@egen*/
+  <text_end_line> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void Connection()             : {/*@bgen(jjtree) Connection */
+  Connection jjtn000 = new Connection(JJTCONNECTION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Connection */
+   try {
+/*@egen*/
+   <Connection> AttributeList()
+  ( <GT> ElementList()  "</" <Connection>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void Note()       : {/*@bgen(jjtree) Note */
+  Note jjtn000 = new Note(JJTNOTE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Note */
+   try {
+/*@egen*/
+   <Note> AttributeList()
+  ( <GT> ElementList()  "</" <Note>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void text_begin_line()                  : {/*@bgen(jjtree) text_begin_line */
+  text_begin_line jjtn000 = new text_begin_line(JJTTEXT_BEGIN_LINE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) text_begin_line */
+  try {
+/*@egen*/
+  <text_begin_line> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void name()       : {/*@bgen(jjtree) name */
+  name jjtn000 = new name(JJTNAME);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) name */
+  try {
+/*@egen*/
+  <name> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void from()       : {/*@bgen(jjtree) from */
+  from jjtn000 = new from(JJTFROM);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) from */
+  try {
+/*@egen*/
+  <from> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void Instance()           : {/*@bgen(jjtree) Instance */
+  Instance jjtn000 = new Instance(JJTINSTANCE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Instance */
+   try {
+/*@egen*/
+   <Instance> AttributeList()
+  ( <GT> ElementList()  "</" <Instance>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void Entry()        : {/*@bgen(jjtree) Entry */
+  Entry jjtn000 = new Entry(JJTENTRY);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Entry */
+   try {
+/*@egen*/
+   <Entry> AttributeList()
+  ( <GT> ElementList()  "</" <Entry>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void dst_port()           : {/*@bgen(jjtree) dst_port */
+  dst_port jjtn000 = new dst_port(JJTDST_PORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) dst_port */
+  try {
+/*@egen*/
+  <dst_port> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void Guards()         : {/*@bgen(jjtree) Guards */
+  Guards jjtn000 = new Guards(JJTGUARDS);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Guards */
+   try {
+/*@egen*/
+   <Guards> AttributeList()
+  ( <GT> ElementList()  "</" <Guards>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void src()      : {/*@bgen(jjtree) src */
+  src jjtn000 = new src(JJTSRC);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) src */
+  try {
+/*@egen*/
+  <src> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void ID()     : {/*@bgen(jjtree) ID */
+  ID jjtn000 = new ID(JJTID);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) ID */
+   try {
+/*@egen*/
+   <ID> AttributeList()
+  ( <GT> ElementList()  "</" <ID>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void Action()         : {/*@bgen(jjtree) Action */
+  Action jjtn000 = new Action(JJTACTION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Action */
+   try {
+/*@egen*/
+   <Action> AttributeList()
+  ( <GT> ElementList()  "</" <Action>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void Import()         : {/*@bgen(jjtree) Import */
+  Import jjtn000 = new Import(JJTIMPORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Import */
+   try {
+/*@egen*/
+   <Import> AttributeList()
+  ( <GT> ElementList()  "</" <Import>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void Port()       : {/*@bgen(jjtree) Port */
+  Port jjtn000 = new Port(JJTPORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Port */
+   try {
+/*@egen*/
+   <Port> AttributeList()
+  ( <GT> ElementList()  "</" <Port>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void literal_kind()               : {/*@bgen(jjtree) literal_kind */
+  literal_kind jjtn000 = new literal_kind(JJTLITERAL_KIND);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) literal_kind */
+  try {
+/*@egen*/
+  <literal_kind> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void Transition()             : {/*@bgen(jjtree) Transition */
+  Transition jjtn000 = new Transition(JJTTRANSITION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Transition */
+   try {
+/*@egen*/
+   <Transition> AttributeList()
+  ( <GT> ElementList()  "</" <Transition>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void assignable()             : {/*@bgen(jjtree) assignable */
+  assignable jjtn000 = new assignable(JJTASSIGNABLE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) assignable */
+  try {
+/*@egen*/
+  <assignable> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void initial_state()                : {/*@bgen(jjtree) initial_state */
+  initial_state jjtn000 = new initial_state(JJTINITIAL_STATE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) initial_state */
+  try {
+/*@egen*/
+  <initial_state> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void ActionTags()             : {/*@bgen(jjtree) ActionTags */
+  ActionTags jjtn000 = new ActionTags(JJTACTIONTAGS);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) ActionTags */
+   try {
+/*@egen*/
+   <ActionTags> AttributeList()
+  ( <GT> ElementList()  "</" <ActionTags>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void Args()       : {/*@bgen(jjtree) Args */
+  Args jjtn000 = new Args(JJTARGS);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Args */
+   try {
+/*@egen*/
+   <Args> AttributeList()
+  ( <GT> ElementList()  "</" <Args>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void dst()      : {/*@bgen(jjtree) dst */
+  dst jjtn000 = new dst(JJTDST);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) dst */
+  try {
+/*@egen*/
+  <dst> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void id()     : {/*@bgen(jjtree) id */
+  id jjtn000 = new id(JJTID);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) id */
+  try {
+/*@egen*/
+  <id> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void Expr()       : {/*@bgen(jjtree) Expr */
+  Expr jjtn000 = new Expr(JJTEXPR);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Expr */
+   try {
+/*@egen*/
+   <Expr> AttributeList()
+  ( <GT> ElementList()  "</" <Expr>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void port()       : {/*@bgen(jjtree) port */
+  port jjtn000 = new port(JJTPORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) port */
+  try {
+/*@egen*/
+  <port> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void text_begin_col()                 : {/*@bgen(jjtree) text_begin_col */
+  text_begin_col jjtn000 = new text_begin_col(JJTTEXT_BEGIN_COL);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) text_begin_col */
+  try {
+/*@egen*/
+  <text_begin_col> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void src_port()           : {/*@bgen(jjtree) src_port */
+  src_port jjtn000 = new src_port(JJTSRC_PORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) src_port */
+  try {
+/*@egen*/
+  <src_port> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void text_end_col()               : {/*@bgen(jjtree) text_end_col */
+  text_end_col jjtn000 = new text_end_col(JJTTEXT_END_COL);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) text_end_col */
+  try {
+/*@egen*/
+  <text_end_col> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void value()        : {/*@bgen(jjtree) value */
+  value jjtn000 = new value(JJTVALUE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) value */
+  try {
+/*@egen*/
+  <value> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void Decl()       : {/*@bgen(jjtree) Decl */
+  Decl jjtn000 = new Decl(JJTDECL);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Decl */
+   try {
+/*@egen*/
+   <Decl> AttributeList()
+  ( <GT> ElementList()  "</" <Decl>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void Input()        : {/*@bgen(jjtree) Input */
+  Input jjtn000 = new Input(JJTINPUT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Input */
+   try {
+/*@egen*/
+   <Input> AttributeList()
+  ( <GT> ElementList()  "</" <Input>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void kind()       : {/*@bgen(jjtree) kind */
+  kind jjtn000 = new kind(JJTKIND);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) kind */
+  try {
+/*@egen*/
+  <kind> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void Stmt()       : {/*@bgen(jjtree) Stmt */
+  Stmt jjtn000 = new Stmt(JJTSTMT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Stmt */
+   try {
+/*@egen*/
+   <Stmt> AttributeList()
+  ( <GT> ElementList()  "</" <Stmt>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void Type()       : {/*@bgen(jjtree) Type */
+  Type jjtn000 = new Type(JJTTYPE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Type */
+   try {
+/*@egen*/
+   <Type> AttributeList()
+  ( <GT> ElementList()  "</" <Type>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void XDF()      : {/*@bgen(jjtree) XDF */
+  XDF jjtn000 = new XDF(JJTXDF);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) XDF */
+   try {
+/*@egen*/
+   <XDF> AttributeList()
+  ( <GT> ElementList()  "</" <XDF>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void _Attribute()             : {/*@bgen(jjtree) _Attribute */
+  _Attribute jjtn000 = new _Attribute(JJT_ATTRIBUTE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) _Attribute */
+   try {
+/*@egen*/
+   <_Attribute> AttributeList()
+  ( <GT> ElementList()  "</" <_Attribute>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void Schedule()           : {/*@bgen(jjtree) Schedule */
+  Schedule jjtn000 = new Schedule(JJTSCHEDULE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Schedule */
+   try {
+/*@egen*/
+   <Schedule> AttributeList()
+  ( <GT> ElementList()  "</" <Schedule>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void _to()      : {/*@bgen(jjtree) _to */
+  _to jjtn000 = new _to(JJT_TO);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) _to */
+  try {
+/*@egen*/
+  <_to> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void Actor()        : {/*@bgen(jjtree) Actor */
+  Actor jjtn000 = new Actor(JJTACTOR);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Actor */
+   try {
+/*@egen*/
+   <Actor> AttributeList()
+  ( <GT> ElementList()  "</" <Actor>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
diff --git a/examples/actors/xlim/Merge.jrag b/examples/actors/xlim/Merge.jrag
index 2edcdb3e20789a69ea8f78994d6958316dd937d2..76d199c5632d3a1d782f0a3308fa44748e05d2cc 100644
--- a/examples/actors/xlim/Merge.jrag
+++ b/examples/actors/xlim/Merge.jrag
@@ -9,6 +9,9 @@
 import java.util.HashSet;
 
 aspect Merge {
+	public void Start.merge(Start dest) {
+		getSpecification().getDesign().merge(dest.getSpecification().getDesign());
+	}
 	public void design.merge(design dest) {
 		HashSet<operation> ops = getOperations(new HashSet<operation>());
 		for (Element e : getElements()) {
@@ -22,7 +25,15 @@ aspect Merge {
 }
 
 aspect Operations {
-	syn HashSet<operation> Element.getOperations(HashSet<operation> ops) = ops;
+	syn HashSet<operation> ASTNode.getOperations(HashSet<operation> ops) = ops;
+	eq Start.getOperations(HashSet<operation> ops) = 
+		getSpecification().getOperations(ops);
+	eq Specification.getOperations(HashSet<operation> ops) {
+		for (Element e : getElements()) {
+			ops = e.getOperations(ops);
+		}
+		return ops;
+	}
 	eq ComplexElement.getOperations(HashSet<operation> ops) {
 		for (Element e : getElements()) {
 			ops = e.getOperations(ops);
diff --git a/examples/actors/xlim/SDF.jrag b/examples/actors/xlim/SDF.jrag
index cb54f9d04fbfdb1b1d2886300c1e8edfded144f1..fbe90d8cf5a0146bad22cb4ed4a36215b082013e 100644
--- a/examples/actors/xlim/SDF.jrag
+++ b/examples/actors/xlim/SDF.jrag
@@ -52,6 +52,8 @@ aspect Misc {
 		return s;
 	}
 
+	syn design Specification.getDesign() = (design) getElement(0);
+
 }
 
 aspect Fixes {
diff --git a/examples/actors/xlimAST/ASTNode$State.java b/examples/actors/xlimAST/ASTNode$State.java
new file mode 100644
index 0000000000000000000000000000000000000000..e53446672b898e52f187f5ac53fb6b264af53f8c
--- /dev/null
+++ b/examples/actors/xlimAST/ASTNode$State.java
@@ -0,0 +1,51 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+class ASTNode$State extends java.lang.Object {
+    // Declared in ASTNode.ast at line 46
+
+   private int[] stack;
+
+    // Declared in ASTNode.ast at line 47
+
+   private int pos;
+
+    // Declared in ASTNode.ast at line 48
+
+   public ASTNode$State() {
+     stack = new int[64];
+     pos = 0;
+   }
+
+    // Declared in ASTNode.ast at line 52
+
+   private void ensureSize(int size) {
+     if(size < stack.length)
+       return;
+     int[] newStack = new int[stack.length * 2];
+     System.arraycopy(stack, 0, newStack, 0, stack.length);
+     stack = newStack;
+   }
+
+    // Declared in ASTNode.ast at line 59
+
+   public void push(int i) {
+     ensureSize(pos+1);
+     stack[pos++] = i;
+   }
+
+    // Declared in ASTNode.ast at line 63
+
+   public int pop() {
+     return stack[--pos];
+   }
+
+    // Declared in ASTNode.ast at line 66
+
+   public int peek() {
+     return stack[pos-1];
+   }
+
+
+}
diff --git a/examples/actors/xlimAST/ASTNode.java b/examples/actors/xlimAST/ASTNode.java
new file mode 100644
index 0000000000000000000000000000000000000000..b8329a994dd2ebdbd0adfc11b351868b9e46d2f7
--- /dev/null
+++ b/examples/actors/xlimAST/ASTNode.java
@@ -0,0 +1,405 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+// Generated with JastAdd II (http://jastadd.cs.lth.se) version R20090428
+
+public class ASTNode<T extends ASTNode> extends SimpleNode  implements Cloneable, Iterable<T> {
+    public void flushCache() {
+        getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+        isSDF_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ASTNode<T> clone() throws CloneNotSupportedException {
+        ASTNode node = (ASTNode)super.clone();
+        node.getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+        node.isSDF_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ASTNode<T> copy() {
+      try {
+          ASTNode node = (ASTNode)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ASTNode<T> fullCopy() {
+        ASTNode res = (ASTNode)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 9
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    for (int i=0; i<getNumChild(); i++) {
+      getChild(i).prettyPrint(indent,pStream);
+    }
+  }
+
+    // Declared in SDF.jrag at line 48
+
+
+	static String fix(String s) {
+		if (s.indexOf('"') == 0) {
+			return s.substring(1,s.length()-1);
+		}
+		return s;
+	}
+
+    // Declared in SDF.jrag at line 60
+
+	int numChildren;
+
+    // Declared in SDF.jrag at line 61
+
+	int numChildren() {return jjtGetNumChildren();}
+
+    // Declared in ASTNode.ast at line 3
+    // Declared in ASTNode.ast line 0
+
+    public ASTNode(int i) {
+        super(i);
+    }
+
+    // Declared in ASTNode.ast at line 6
+
+    public ASTNode(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in ASTNode.ast at line 10
+
+    public ASTNode() {
+        this(0);
+
+
+    }
+
+    // Declared in ASTNode.ast at line 16
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "ASTNode");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in ASTNode.ast at line 23
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in ASTNode.ast at line 27
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in ASTNode.ast at line 32
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in ASTNode.ast at line 35
+
+
+   static public boolean generatedWithCircularEnabled = true;
+
+    // Declared in ASTNode.ast at line 36
+
+   static public boolean generatedWithCacheCycle = true;
+
+    // Declared in ASTNode.ast at line 37
+
+   static public boolean generatedWithComponentCheck = false;
+
+    // Declared in ASTNode.ast at line 38
+
+  static public boolean IN_CIRCLE = false;
+
+    // Declared in ASTNode.ast at line 39
+
+  static public int CIRCLE_INDEX;
+
+    // Declared in ASTNode.ast at line 40
+
+  static public boolean CHANGE = false;
+
+    // Declared in ASTNode.ast at line 41
+
+  static public boolean LAST_CYCLE = false;
+
+    // Declared in ASTNode.ast at line 42
+
+  static public boolean RESET_CYCLE = false;
+
+    // Declared in ASTNode.ast at line 43
+
+  public static int boundariesCrossed = 0;
+
+    // Declared in ASTNode.ast at line 70
+
+  protected static ASTNode$State state = new ASTNode$State();
+
+    // Declared in ASTNode.ast at line 71
+
+  public boolean in$Circle = false;
+
+    // Declared in ASTNode.ast at line 72
+
+  public boolean in$Circle() { return in$Circle; }
+
+    // Declared in ASTNode.ast at line 73
+
+  public void in$Circle(boolean b) { in$Circle = b; }
+
+    // Declared in ASTNode.ast at line 74
+
+  public boolean is$Final = false;
+
+    // Declared in ASTNode.ast at line 75
+
+  public boolean is$Final() { return is$Final; }
+
+    // Declared in ASTNode.ast at line 76
+
+  public void is$Final(boolean b) { is$Final = b; }
+
+    // Declared in ASTNode.ast at line 77
+
+  protected static final int REWRITE_CHANGE = 1;
+
+    // Declared in ASTNode.ast at line 78
+
+  protected static final int REWRITE_NOCHANGE = 2;
+
+    // Declared in ASTNode.ast at line 79
+
+  protected static final int REWRITE_INTERRUPT = 3;
+
+    // Declared in ASTNode.ast at line 80
+
+  @SuppressWarnings("cast") public T getChild(int i) {
+    return (T)ASTNode.getChild(this, i);
+  }
+
+    // Declared in ASTNode.ast at line 83
+
+  public static ASTNode getChild(ASTNode that, int i) {
+    ASTNode node = that.getChildNoTransform(i);
+    if(node.is$Final()) return node;
+    if(!node.mayHaveRewrite()) {
+      node.is$Final(that.is$Final());
+      return node;
+    }
+    if(!node.in$Circle()) {
+      int rewriteState;
+      int num = ASTNode.boundariesCrossed;
+      do {
+        ASTNode.state.push(ASTNode.REWRITE_CHANGE);
+        ASTNode oldNode = node;
+        oldNode.in$Circle(true);
+        node = node.rewriteTo();
+        if(node != oldNode)
+          that.setChild(node, i);
+        oldNode.in$Circle(false);
+        rewriteState = state.pop();
+      } while(rewriteState == ASTNode.REWRITE_CHANGE);
+      if(rewriteState == ASTNode.REWRITE_NOCHANGE && that.is$Final()) {
+        node.is$Final(true);
+        ASTNode.boundariesCrossed = num;
+      }
+    }
+    else if(that.is$Final() != node.is$Final()) boundariesCrossed++;
+    return node;
+  }
+
+    // Declared in ASTNode.ast at line 111
+
+  private int childIndex;
+
+    // Declared in ASTNode.ast at line 112
+
+  public int getIndexOfChild(ASTNode node) {
+    if(node != null && node.childIndex < getNumChildNoTransform() && node == getChildNoTransform(node.childIndex))
+      return node.childIndex;
+    for(int i = 0; i < getNumChildNoTransform(); i++)
+      if(getChildNoTransform(i) == node) {
+        node.childIndex = i;
+        return i;
+      }
+    return -1;
+  }
+
+    // Declared in ASTNode.ast at line 123
+
+
+  public void addChild(T node) {
+    setChild(node, getNumChildNoTransform());
+  }
+
+    // Declared in ASTNode.ast at line 126
+
+  @SuppressWarnings("cast") public final T getChildNoTransform(int i) {
+    return (T)children[i];
+  }
+
+    // Declared in ASTNode.ast at line 129
+
+  public final int getNumChildNoTransform() {
+    return numChildren();
+  }
+
+    // Declared in ASTNode.ast at line 132
+
+  public int getNumChild() {
+    return (children == null) ? 0 : children.length;
+  }
+
+    // Declared in ASTNode.ast at line 135
+
+  public void setChild(T node, int i) {
+    if(children == null) {
+      children = new ASTNode[i + 1];
+    } else if (i >= children.length) {
+      ASTNode c[] = new ASTNode[i + 1];
+      System.arraycopy(children, 0, c, 0, children.length);
+      children = c;
+    }
+    children[i] = node;
+    if(node != null) { node.setParent(this); node.childIndex = i; }
+  }
+
+    // Declared in ASTNode.ast at line 146
+
+  public void insertChild(T node, int i) {
+    if(children == null) {
+      children = new ASTNode[i + 1];
+      children[i] = node;
+    } else {
+      ASTNode c[] = new ASTNode[children.length + 1];
+      System.arraycopy(children, 0, c, 0, i);
+      c[i] = node;
+      if(i < children.length)
+        System.arraycopy(children, i, c, i+1, children.length-i);
+      children = c;
+    }
+    if(node != null) { node.setParent(this); node.childIndex = i; }
+  }
+
+    // Declared in ASTNode.ast at line 160
+
+  public void removeChild(int i) {
+    if(children != null) {
+      ASTNode child = (ASTNode) children[i];
+      if(child != null) {
+        child.setParent(null);
+        child.childIndex = -1;
+      }
+      System.arraycopy(children, i+1, children, i, children.length-i-1);
+      numChildren--;
+    }
+  }
+
+    // Declared in ASTNode.ast at line 171
+
+  public ASTNode getParent() {
+    if(parent != null && ((ASTNode)parent).is$Final() != is$Final()) {
+      boundariesCrossed++;
+    }
+    return (ASTNode)parent;
+  }
+
+    // Declared in ASTNode.ast at line 177
+
+  public void setParent(ASTNode node) {
+    parent = node;
+  }
+
+    // Declared in ASTNode.ast at line 180
+
+    public static void reset() {
+        IN_CIRCLE = false;
+        CIRCLE_INDEX = 0;
+        CHANGE = false;
+        LAST_CYCLE = false;
+        boundariesCrossed = 0;
+        state = new ASTNode$State();
+    }
+
+    // Declared in ASTNode.ast at line 188
+
+    public java.util.Iterator<T> iterator() {
+        return new java.util.Iterator<T>() {
+            private int counter = 0;
+            public boolean hasNext() {
+                return counter < getNumChild();
+            }
+            @SuppressWarnings("unchecked") public T next() {
+                if(hasNext())
+                    return (T)getChild(counter++);
+                else
+                    return null;
+            }
+            public void remove() {
+                throw new UnsupportedOperationException();
+            }
+        };
+    }
+
+    // Declared in ASTNode.ast at line 205
+
+  public boolean mayHaveRewrite() { return false; }
+
+    protected java.util.Map getOperations_HashSet_operation__visited;
+    // Declared in Merge.jrag at line 28
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<operation> getOperations(HashSet<operation> ops) {
+        Object _parameters = ops;
+if(getOperations_HashSet_operation__visited == null) getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(getOperations_HashSet_operation__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: getOperations in class: ");
+        getOperations_HashSet_operation__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<operation> getOperations_HashSet_operation__value = getOperations_compute(ops);
+        getOperations_HashSet_operation__visited.remove(_parameters);
+        return getOperations_HashSet_operation__value;
+    }
+
+    private HashSet<operation> getOperations_compute(HashSet<operation> ops) {  return ops;  }
+
+    protected int isSDF_visited = -1;
+    // Declared in SDF.jrag at line 10
+ @SuppressWarnings({"unchecked", "cast"})     public boolean isSDF() {
+        if(isSDF_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: isSDF in class: ");
+        isSDF_visited = boundariesCrossed;
+        boolean isSDF_value = isSDF_compute();
+        isSDF_visited = -1;
+        return isSDF_value;
+    }
+
+    private boolean isSDF_compute() {  return false;  }
+
+public ASTNode rewriteTo() {
+    if(state.peek() == ASTNode.REWRITE_CHANGE) {
+        state.pop();
+        state.push(ASTNode.REWRITE_NOCHANGE);
+    }
+    return this;
+}
+
+}
diff --git a/examples/actors/xlimAST/AttrValue.java b/examples/actors/xlimAST/AttrValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..bc4f86c22e7964a0319cbc777dfcf018d0aee75b
--- /dev/null
+++ b/examples/actors/xlimAST/AttrValue.java
@@ -0,0 +1,134 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class AttrValue extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public AttrValue clone() throws CloneNotSupportedException {
+        AttrValue node = (AttrValue)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public AttrValue copy() {
+      try {
+          AttrValue node = (AttrValue)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public AttrValue fullCopy() {
+        AttrValue res = (AttrValue)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 29
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(getLITERAL());
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 18
+
+    public AttrValue(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public AttrValue(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public AttrValue() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 18
+    public AttrValue(String p0) {
+        setLITERAL(p0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "AttrValue"+ "\"" + getLITERAL() + "\"");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xlim.ast at line 40
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xlim.ast at line 43
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 18
+    protected String tokenString_LITERAL;
+
+    // Declared in xlim.ast at line 3
+
+    public void setLITERAL(String value) {
+        tokenString_LITERAL = value;
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public String getLITERAL() {
+        return tokenString_LITERAL != null ? tokenString_LITERAL : "";
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/Attribute.java b/examples/actors/xlimAST/Attribute.java
new file mode 100644
index 0000000000000000000000000000000000000000..7ba3c2c20567d3d21fe13cd080cd9ab194b51133
--- /dev/null
+++ b/examples/actors/xlimAST/Attribute.java
@@ -0,0 +1,131 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class Attribute extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute clone() throws CloneNotSupportedException {
+        Attribute node = (Attribute)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute copy() {
+      try {
+          Attribute node = (Attribute)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute fullCopy() {
+        Attribute res = (Attribute)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 17
+
+    public Attribute(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public Attribute(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public Attribute() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 17
+    public Attribute(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Attribute");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/ComplexElement.java b/examples/actors/xlimAST/ComplexElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..cda458649c6001303eea6afdbf9d22e6a1fd784d
--- /dev/null
+++ b/examples/actors/xlimAST/ComplexElement.java
@@ -0,0 +1,278 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class ComplexElement extends Element implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ComplexElement clone() throws CloneNotSupportedException {
+        ComplexElement node = (ComplexElement)super.clone();
+        node.getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ComplexElement copy() {
+      try {
+          ComplexElement node = (ComplexElement)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ComplexElement fullCopy() {
+        ComplexElement res = (ComplexElement)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 11
+
+    public ComplexElement(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public ComplexElement(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public ComplexElement() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xlim.ast at line 19
+
+
+    // Declared in xlim.ast line 11
+    public ComplexElement(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xlim.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "ComplexElement");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xlim.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xlim.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+    protected java.util.Map getOperations_HashSet_operation__visited;
+    // Declared in Merge.jrag at line 37
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<operation> getOperations(HashSet<operation> ops) {
+        Object _parameters = ops;
+if(getOperations_HashSet_operation__visited == null) getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(getOperations_HashSet_operation__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: getOperations in class: ");
+        getOperations_HashSet_operation__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<operation> getOperations_HashSet_operation__value = getOperations_compute(ops);
+        getOperations_HashSet_operation__visited.remove(_parameters);
+        return getOperations_HashSet_operation__value;
+    }
+
+    private HashSet<operation> getOperations_compute(HashSet<operation> ops) {
+		for (Element e : getElements()) {
+			ops = e.getOperations(ops);
+		}
+		return ops;
+	}
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/DocType.java b/examples/actors/xlimAST/DocType.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3aa6f9c6380ad0290b688c17bfa26f8175e254a
--- /dev/null
+++ b/examples/actors/xlimAST/DocType.java
@@ -0,0 +1,136 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class DocType extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public DocType clone() throws CloneNotSupportedException {
+        DocType node = (DocType)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public DocType copy() {
+      try {
+          DocType node = (DocType)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public DocType fullCopy() {
+        DocType res = (DocType)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 23
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print("<!");
+    pStream.print(getSTRING());
+    pStream.println();
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 8
+
+    public DocType(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public DocType(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public DocType() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 8
+    public DocType(String p0) {
+        setSTRING(p0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "DocType"+ "\"" + getSTRING() + "\"");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xlim.ast at line 40
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xlim.ast at line 43
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 8
+    protected String tokenString_STRING;
+
+    // Declared in xlim.ast at line 3
+
+    public void setSTRING(String value) {
+        tokenString_STRING = value;
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public String getSTRING() {
+        return tokenString_STRING != null ? tokenString_STRING : "";
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/Element.java b/examples/actors/xlimAST/Element.java
new file mode 100644
index 0000000000000000000000000000000000000000..94a1e3a6c9ee2a0cda5d7af1e4767ee9a182f7c5
--- /dev/null
+++ b/examples/actors/xlimAST/Element.java
@@ -0,0 +1,99 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public abstract class Element extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        isAction_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Element clone() throws CloneNotSupportedException {
+        Element node = (Element)super.clone();
+        node.isAction_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 10
+
+    public Element(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public Element(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public Element() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 16
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Element");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 23
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 27
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 32
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xlim.ast at line 35
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xlim.ast at line 38
+
+  public boolean mayHaveRewrite() { return false; }
+
+    protected int isAction_visited = -1;
+    // Declared in SDF.jrag at line 33
+ @SuppressWarnings({"unchecked", "cast"})     public boolean isAction() {
+        if(isAction_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: isAction in class: ");
+        isAction_visited = boundariesCrossed;
+        boolean isAction_value = isAction_compute();
+        isAction_visited = -1;
+        return isAction_value;
+    }
+
+    private boolean isAction_compute() {  return false;  }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/Encoding.java b/examples/actors/xlimAST/Encoding.java
new file mode 100644
index 0000000000000000000000000000000000000000..477241add83c2d18515981870e87af9a7f38034a
--- /dev/null
+++ b/examples/actors/xlimAST/Encoding.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class Encoding extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Encoding clone() throws CloneNotSupportedException {
+        Encoding node = (Encoding)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Encoding copy() {
+      try {
+          Encoding node = (Encoding)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Encoding fullCopy() {
+        Encoding res = (Encoding)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 33
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" encoding=");
+    getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 19
+
+    public Encoding(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public Encoding(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public Encoding() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 19
+    public Encoding(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Encoding");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/FloatElement.java b/examples/actors/xlimAST/FloatElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..8f74462d2bec090714e6916460fd4a26eb1be7d2
--- /dev/null
+++ b/examples/actors/xlimAST/FloatElement.java
@@ -0,0 +1,127 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class FloatElement extends SimpleElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public FloatElement clone() throws CloneNotSupportedException {
+        FloatElement node = (FloatElement)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public FloatElement copy() {
+      try {
+          FloatElement node = (FloatElement)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public FloatElement fullCopy() {
+        FloatElement res = (FloatElement)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 16
+
+    public FloatElement(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public FloatElement(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public FloatElement() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 16
+    public FloatElement(String p0) {
+        setLITERAL(p0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "FloatElement"+ "\"" + getLITERAL() + "\"");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xlim.ast at line 40
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xlim.ast at line 43
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 16
+    protected String tokenString_LITERAL;
+
+    // Declared in xlim.ast at line 3
+
+    public void setLITERAL(String value) {
+        tokenString_LITERAL = value;
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public String getLITERAL() {
+        return tokenString_LITERAL != null ? tokenString_LITERAL : "";
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/IntElement.java b/examples/actors/xlimAST/IntElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..7269411efc13badc66cedc2a251d585cd046dd71
--- /dev/null
+++ b/examples/actors/xlimAST/IntElement.java
@@ -0,0 +1,127 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class IntElement extends SimpleElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public IntElement clone() throws CloneNotSupportedException {
+        IntElement node = (IntElement)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public IntElement copy() {
+      try {
+          IntElement node = (IntElement)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public IntElement fullCopy() {
+        IntElement res = (IntElement)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 15
+
+    public IntElement(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public IntElement(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public IntElement() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 15
+    public IntElement(String p0) {
+        setLITERAL(p0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "IntElement"+ "\"" + getLITERAL() + "\"");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xlim.ast at line 40
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xlim.ast at line 43
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 15
+    protected String tokenString_LITERAL;
+
+    // Declared in xlim.ast at line 3
+
+    public void setLITERAL(String value) {
+        tokenString_LITERAL = value;
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public String getLITERAL() {
+        return tokenString_LITERAL != null ? tokenString_LITERAL : "";
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/JJTXmlParserState.java b/examples/actors/xlimAST/JJTXmlParserState.java
new file mode 100644
index 0000000000000000000000000000000000000000..5a86d8932181b61ada5429613f77b25054d71242
--- /dev/null
+++ b/examples/actors/xlimAST/JJTXmlParserState.java
@@ -0,0 +1,123 @@
+/* Generated By:JJTree: Do not edit this line. /home/csandersn/work/actors/xmlSchemCompiler/examples/actors/xlimAST/JJTXmlParserState.java */
+
+package xlimAST;
+
+class JJTXmlParserState {
+  private java.util.Stack nodes;
+  private java.util.Stack marks;
+
+  private int sp;		// number of nodes on stack
+  private int mk;		// current mark
+  private boolean node_created;
+
+  JJTXmlParserState() {
+    nodes = new java.util.Stack();
+    marks = new java.util.Stack();
+    sp = 0;
+    mk = 0;
+  }
+
+  /* Determines whether the current node was actually closed and
+     pushed.  This should only be called in the final user action of a
+     node scope.  */
+  boolean nodeCreated() {
+    return node_created;
+  }
+
+  /* Call this to reinitialize the node stack.  It is called
+     automatically by the parser's ReInit() method. */
+  void reset() {
+    nodes.removeAllElements();
+    marks.removeAllElements();
+    sp = 0;
+    mk = 0;
+  }
+
+  /* Returns the root node of the AST.  It only makes sense to call
+     this after a successful parse. */
+  Node rootNode() {
+    return (Node)nodes.elementAt(0);
+  }
+
+  /* Pushes a node on to the stack. */
+  void pushNode(Node n) {
+    nodes.push(n);
+    ++sp;
+  }
+
+  /* Returns the node on the top of the stack, and remove it from the
+     stack.  */
+  Node popNode() {
+    if (--sp < mk) {
+      mk = ((Integer)marks.pop()).intValue();
+    }
+    return (Node)nodes.pop();
+  }
+
+  /* Returns the node currently on the top of the stack. */
+  Node peekNode() {
+    return (Node)nodes.peek();
+  }
+
+  /* Returns the number of children on the stack in the current node
+     scope. */
+  int nodeArity() {
+    return sp - mk;
+  }
+
+
+  void clearNodeScope(Node n) {
+    while (sp > mk) {
+      popNode();
+    }
+    mk = ((Integer)marks.pop()).intValue();
+  }
+
+
+  void openNodeScope(Node n) {
+    marks.push(new Integer(mk));
+    mk = sp;
+    n.jjtOpen();
+  }
+
+
+  /* A definite node is constructed from a specified number of
+     children.  That number of nodes are popped from the stack and
+     made the children of the definite node.  Then the definite node
+     is pushed on to the stack. */
+  void closeNodeScope(Node n, int num) {
+    mk = ((Integer)marks.pop()).intValue();
+    while (num-- > 0) {
+      Node c = popNode();
+      c.jjtSetParent(n);
+      n.jjtAddChild(c, num);
+    }
+    n.jjtClose();
+    pushNode(n);
+    node_created = true;
+  }
+
+
+  /* A conditional node is constructed if its condition is true.  All
+     the nodes that have been pushed since the node was opened are
+     made children of the the conditional node, which is then pushed
+     on to the stack.  If the condition is false the node is not
+     constructed and they are left on the stack. */
+  void closeNodeScope(Node n, boolean condition) {
+    if (condition) {
+      int a = nodeArity();
+      mk = ((Integer)marks.pop()).intValue();
+      while (a-- > 0) {
+	Node c = popNode();
+	c.jjtSetParent(n);
+	n.jjtAddChild(c, a);
+      }
+      n.jjtClose();
+      pushNode(n);
+      node_created = true;
+    } else {
+      mk = ((Integer)marks.pop()).intValue();
+      node_created = false;
+    }
+  }
+}
diff --git a/examples/actors/xlimAST/JavaCharStream.java b/examples/actors/xlimAST/JavaCharStream.java
new file mode 100644
index 0000000000000000000000000000000000000000..cc87e1d1a36273d13a28f41745d6ca6a13aa0342
--- /dev/null
+++ b/examples/actors/xlimAST/JavaCharStream.java
@@ -0,0 +1,584 @@
+/* Generated By:JavaCC: Do not edit this line. JavaCharStream.java Version 4.0 */
+package xlimAST;
+
+/**
+ * An implementation of interface CharStream, where the stream is assumed to
+ * contain only ASCII characters (with java-like unicode escape processing).
+ */
+
+public class JavaCharStream
+{
+  public static final boolean staticFlag = false;
+  static final int hexval(char c) throws java.io.IOException {
+    switch(c)
+    {
+       case '0' :
+          return 0;
+       case '1' :
+          return 1;
+       case '2' :
+          return 2;
+       case '3' :
+          return 3;
+       case '4' :
+          return 4;
+       case '5' :
+          return 5;
+       case '6' :
+          return 6;
+       case '7' :
+          return 7;
+       case '8' :
+          return 8;
+       case '9' :
+          return 9;
+
+       case 'a' :
+       case 'A' :
+          return 10;
+       case 'b' :
+       case 'B' :
+          return 11;
+       case 'c' :
+       case 'C' :
+          return 12;
+       case 'd' :
+       case 'D' :
+          return 13;
+       case 'e' :
+       case 'E' :
+          return 14;
+       case 'f' :
+       case 'F' :
+          return 15;
+    }
+
+    throw new java.io.IOException(); // Should never come here
+  }
+
+  public int bufpos = -1;
+  int bufsize;
+  int available;
+  int tokenBegin;
+  protected int bufline[];
+  protected int bufcolumn[];
+
+  protected int column = 0;
+  protected int line = 1;
+
+  protected boolean prevCharIsCR = false;
+  protected boolean prevCharIsLF = false;
+
+  protected java.io.Reader inputStream;
+
+  protected char[] nextCharBuf;
+  protected char[] buffer;
+  protected int maxNextCharInd = 0;
+  protected int nextCharInd = -1;
+  protected int inBuf = 0;
+  protected int tabSize = 8;
+
+  protected void setTabSize(int i) { tabSize = i; }
+  protected int getTabSize(int i) { return tabSize; }
+
+  protected void ExpandBuff(boolean wrapAround)
+  {
+     char[] newbuffer = new char[bufsize + 2048];
+     int newbufline[] = new int[bufsize + 2048];
+     int newbufcolumn[] = new int[bufsize + 2048];
+
+     try
+     {
+        if (wrapAround)
+        {
+           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+           System.arraycopy(buffer, 0, newbuffer,
+                                             bufsize - tokenBegin, bufpos);
+           buffer = newbuffer;
+
+           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+           System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
+           bufline = newbufline;
+
+           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+           System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
+           bufcolumn = newbufcolumn;
+
+           bufpos += (bufsize - tokenBegin);
+        }
+        else
+        {
+           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+           buffer = newbuffer;
+
+           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+           bufline = newbufline;
+
+           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+           bufcolumn = newbufcolumn;
+
+           bufpos -= tokenBegin;
+        }
+     }
+     catch (Throwable t)
+     {
+        throw new Error(t.getMessage());
+     }
+
+     available = (bufsize += 2048);
+     tokenBegin = 0;
+  }
+
+  protected void FillBuff() throws java.io.IOException
+  {
+     int i;
+     if (maxNextCharInd == 4096)
+        maxNextCharInd = nextCharInd = 0;
+
+     try {
+        if ((i = inputStream.read(nextCharBuf, maxNextCharInd,
+                                            4096 - maxNextCharInd)) == -1)
+        {
+           inputStream.close();
+           throw new java.io.IOException();
+        }
+        else
+           maxNextCharInd += i;
+        return;
+     }
+     catch(java.io.IOException e) {
+        if (bufpos != 0)
+        {
+           --bufpos;
+           backup(0);
+        }
+        else
+        {
+           bufline[bufpos] = line;
+           bufcolumn[bufpos] = column;
+        }
+        throw e;
+     }
+  }
+
+  protected char ReadByte() throws java.io.IOException
+  {
+     if (++nextCharInd >= maxNextCharInd)
+        FillBuff();
+
+     return nextCharBuf[nextCharInd];
+  }
+
+  public char BeginToken() throws java.io.IOException
+  {     
+     if (inBuf > 0)
+     {
+        --inBuf;
+
+        if (++bufpos == bufsize)
+           bufpos = 0;
+
+        tokenBegin = bufpos;
+        return buffer[bufpos];
+     }
+
+     tokenBegin = 0;
+     bufpos = -1;
+
+     return readChar();
+  }     
+
+  protected void AdjustBuffSize()
+  {
+     if (available == bufsize)
+     {
+        if (tokenBegin > 2048)
+        {
+           bufpos = 0;
+           available = tokenBegin;
+        }
+        else
+           ExpandBuff(false);
+     }
+     else if (available > tokenBegin)
+        available = bufsize;
+     else if ((tokenBegin - available) < 2048)
+        ExpandBuff(true);
+     else
+        available = tokenBegin;
+  }
+
+  protected void UpdateLineColumn(char c)
+  {
+     column++;
+
+     if (prevCharIsLF)
+     {
+        prevCharIsLF = false;
+        line += (column = 1);
+     }
+     else if (prevCharIsCR)
+     {
+        prevCharIsCR = false;
+        if (c == '\n')
+        {
+           prevCharIsLF = true;
+        }
+        else
+           line += (column = 1);
+     }
+
+     switch (c)
+     {
+        case '\r' :
+           prevCharIsCR = true;
+           break;
+        case '\n' :
+           prevCharIsLF = true;
+           break;
+        case '\t' :
+           column--;
+           column += (tabSize - (column % tabSize));
+           break;
+        default :
+           break;
+     }
+
+     bufline[bufpos] = line;
+     bufcolumn[bufpos] = column;
+  }
+
+  public char readChar() throws java.io.IOException
+  {
+     if (inBuf > 0)
+     {
+        --inBuf;
+
+        if (++bufpos == bufsize)
+           bufpos = 0;
+
+        return buffer[bufpos];
+     }
+
+     char c;
+
+     if (++bufpos == available)
+        AdjustBuffSize();
+
+     if ((buffer[bufpos] = c = ReadByte()) == '\\')
+     {
+        UpdateLineColumn(c);
+
+        int backSlashCnt = 1;
+
+        for (;;) // Read all the backslashes
+        {
+           if (++bufpos == available)
+              AdjustBuffSize();
+
+           try
+           {
+              if ((buffer[bufpos] = c = ReadByte()) != '\\')
+              {
+                 UpdateLineColumn(c);
+                 // found a non-backslash char.
+                 if ((c == 'u') && ((backSlashCnt & 1) == 1))
+                 {
+                    if (--bufpos < 0)
+                       bufpos = bufsize - 1;
+
+                    break;
+                 }
+
+                 backup(backSlashCnt);
+                 return '\\';
+              }
+           }
+           catch(java.io.IOException e)
+           {
+              if (backSlashCnt > 1)
+                 backup(backSlashCnt);
+
+              return '\\';
+           }
+
+           UpdateLineColumn(c);
+           backSlashCnt++;
+        }
+
+        // Here, we have seen an odd number of backslash's followed by a 'u'
+        try
+        {
+           while ((c = ReadByte()) == 'u')
+              ++column;
+
+           buffer[bufpos] = c = (char)(hexval(c) << 12 |
+                                       hexval(ReadByte()) << 8 |
+                                       hexval(ReadByte()) << 4 |
+                                       hexval(ReadByte()));
+
+           column += 4;
+        }
+        catch(java.io.IOException e)
+        {
+           throw new Error("Invalid escape character at line " + line +
+                                         " column " + column + ".");
+        }
+
+        if (backSlashCnt == 1)
+           return c;
+        else
+        {
+           backup(backSlashCnt - 1);
+           return '\\';
+        }
+     }
+     else
+     {
+        UpdateLineColumn(c);
+        return (c);
+     }
+  }
+
+  /**
+   * @deprecated 
+   * @see #getEndColumn
+   */
+
+  public int getColumn() {
+     return bufcolumn[bufpos];
+  }
+
+  /**
+   * @deprecated 
+   * @see #getEndLine
+   */
+
+  public int getLine() {
+     return bufline[bufpos];
+  }
+
+  public int getEndColumn() {
+     return bufcolumn[bufpos];
+  }
+
+  public int getEndLine() {
+     return bufline[bufpos];
+  }
+
+  public int getBeginColumn() {
+     return bufcolumn[tokenBegin];
+  }
+
+  public int getBeginLine() {
+     return bufline[tokenBegin];
+  }
+
+  public void backup(int amount) {
+
+    inBuf += amount;
+    if ((bufpos -= amount) < 0)
+       bufpos += bufsize;
+  }
+
+  public JavaCharStream(java.io.Reader dstream,
+                 int startline, int startcolumn, int buffersize)
+  {
+    inputStream = dstream;
+    line = startline;
+    column = startcolumn - 1;
+
+    available = bufsize = buffersize;
+    buffer = new char[buffersize];
+    bufline = new int[buffersize];
+    bufcolumn = new int[buffersize];
+    nextCharBuf = new char[4096];
+  }
+
+  public JavaCharStream(java.io.Reader dstream,
+                                        int startline, int startcolumn)
+  {
+     this(dstream, startline, startcolumn, 4096);
+  }
+
+  public JavaCharStream(java.io.Reader dstream)
+  {
+     this(dstream, 1, 1, 4096);
+  }
+  public void ReInit(java.io.Reader dstream,
+                 int startline, int startcolumn, int buffersize)
+  {
+    inputStream = dstream;
+    line = startline;
+    column = startcolumn - 1;
+
+    if (buffer == null || buffersize != buffer.length)
+    {
+      available = bufsize = buffersize;
+      buffer = new char[buffersize];
+      bufline = new int[buffersize];
+      bufcolumn = new int[buffersize];
+      nextCharBuf = new char[4096];
+    }
+    prevCharIsLF = prevCharIsCR = false;
+    tokenBegin = inBuf = maxNextCharInd = 0;
+    nextCharInd = bufpos = -1;
+  }
+
+  public void ReInit(java.io.Reader dstream,
+                                        int startline, int startcolumn)
+  {
+     ReInit(dstream, startline, startcolumn, 4096);
+  }
+
+  public void ReInit(java.io.Reader dstream)
+  {
+     ReInit(dstream, 1, 1, 4096);
+  }
+  public JavaCharStream(java.io.InputStream dstream, String encoding, int startline,
+  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
+  {
+     this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
+  }
+
+  public JavaCharStream(java.io.InputStream dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+     this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
+  }
+
+  public JavaCharStream(java.io.InputStream dstream, String encoding, int startline,
+                        int startcolumn) throws java.io.UnsupportedEncodingException
+  {
+     this(dstream, encoding, startline, startcolumn, 4096);
+  }
+
+  public JavaCharStream(java.io.InputStream dstream, int startline,
+                        int startcolumn)
+  {
+     this(dstream, startline, startcolumn, 4096);
+  }
+
+  public JavaCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
+  {
+     this(dstream, encoding, 1, 1, 4096);
+  }
+
+  public JavaCharStream(java.io.InputStream dstream)
+  {
+     this(dstream, 1, 1, 4096);
+  }
+
+  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
+  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
+  {
+     ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
+  }
+
+  public void ReInit(java.io.InputStream dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+     ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
+  }
+  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
+                     int startcolumn) throws java.io.UnsupportedEncodingException
+  {
+     ReInit(dstream, encoding, startline, startcolumn, 4096);
+  }
+  public void ReInit(java.io.InputStream dstream, int startline,
+                     int startcolumn)
+  {
+     ReInit(dstream, startline, startcolumn, 4096);
+  }
+  public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
+  {
+     ReInit(dstream, encoding, 1, 1, 4096);
+  }
+
+  public void ReInit(java.io.InputStream dstream)
+  {
+     ReInit(dstream, 1, 1, 4096);
+  }
+
+  public String GetImage()
+  {
+     if (bufpos >= tokenBegin)
+        return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
+     else
+        return new String(buffer, tokenBegin, bufsize - tokenBegin) +
+                              new String(buffer, 0, bufpos + 1);
+  }
+
+  public char[] GetSuffix(int len)
+  {
+     char[] ret = new char[len];
+
+     if ((bufpos + 1) >= len)
+        System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
+     else
+     {
+        System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
+                                                          len - bufpos - 1);
+        System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
+     }
+
+     return ret;
+  }
+
+  public void Done()
+  {
+     nextCharBuf = null;
+     buffer = null;
+     bufline = null;
+     bufcolumn = null;
+  }
+
+  /**
+   * Method to adjust line and column numbers for the start of a token.
+   */
+  public void adjustBeginLineColumn(int newLine, int newCol)
+  {
+     int start = tokenBegin;
+     int len;
+
+     if (bufpos >= tokenBegin)
+     {
+        len = bufpos - tokenBegin + inBuf + 1;
+     }
+     else
+     {
+        len = bufsize - tokenBegin + bufpos + 1 + inBuf;
+     }
+
+     int i = 0, j = 0, k = 0;
+     int nextColDiff = 0, columnDiff = 0;
+
+     while (i < len &&
+            bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
+     {
+        bufline[j] = newLine;
+        nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
+        bufcolumn[j] = newCol + columnDiff;
+        columnDiff = nextColDiff;
+        i++;
+     } 
+
+     if (i < len)
+     {
+        bufline[j] = newLine++;
+        bufcolumn[j] = newCol + columnDiff;
+
+        while (i++ < len)
+        {
+           if (bufline[j = start % bufsize] != bufline[++start % bufsize])
+              bufline[j] = newLine++;
+           else
+              bufline[j] = newLine;
+        }
+     }
+
+     line = bufline[j];
+     column = bufcolumn[j];
+  }
+
+}
diff --git a/examples/actors/xlimAST/List.java b/examples/actors/xlimAST/List.java
new file mode 100644
index 0000000000000000000000000000000000000000..a1ea1008389be8d1c0407e3f35f01d7a52c792d6
--- /dev/null
+++ b/examples/actors/xlimAST/List.java
@@ -0,0 +1,144 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+public class List<T extends ASTNode> extends ASTNode<T> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public List<T> clone() throws CloneNotSupportedException {
+        List node = (List)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public List<T> copy() {
+      try {
+          List node = (List)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public List<T> fullCopy() {
+        List res = (List)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in SDF.jrag at line 62
+
+	int getNumNoTransformChild() {return getNumChildNoTransform();}
+
+    // Declared in List.ast at line 3
+    // Declared in List.ast line 0
+
+    public List(int i) {
+        super(i);
+    }
+
+    // Declared in List.ast at line 6
+
+    public List(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in List.ast at line 10
+
+    public List() {
+        this(0);
+
+
+    }
+
+    // Declared in List.ast at line 16
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "List");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in List.ast at line 23
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in List.ast at line 27
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in List.ast at line 32
+
+
+public void checkChild(Node n, int i) {
+  if(!(n instanceof ASTNode)) throw new Error("The node type of child " + i + " must be an instance of ASTNode");
+}
+
+    // Declared in List.ast at line 36
+
+
+     public List<T> add(T node) {
+          addChild(node);
+          return this;
+     }
+
+    // Declared in List.ast at line 41
+
+
+     public void insertChild(T node, int i) {
+          list$touched = true;
+          super.insertChild(node, i);
+     }
+
+    // Declared in List.ast at line 45
+
+     public void addChild(T node) {
+          list$touched = true;
+          super.addChild(node);
+     }
+
+    // Declared in List.ast at line 49
+
+     public void removeChild(int i) {
+          list$touched = true;
+          super.removeChild(i);
+     }
+
+    // Declared in List.ast at line 53
+
+     public int getNumChild() {
+          if(list$touched) {
+              for(int i = 0; i < getNumChildNoTransform(); i++)
+                  getChild(i);
+              list$touched = false;
+          }
+          return getNumChildNoTransform();
+     }
+
+    // Declared in List.ast at line 61
+
+     private boolean list$touched = true;
+
+    // Declared in List.ast at line 62
+
+  public boolean mayHaveRewrite() { return false; }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/Node.java b/examples/actors/xlimAST/Node.java
new file mode 100644
index 0000000000000000000000000000000000000000..a85d16a68600acfe9440abe38fa669642b714118
--- /dev/null
+++ b/examples/actors/xlimAST/Node.java
@@ -0,0 +1,37 @@
+/* Generated By:JJTree: Do not edit this line. Node.java */
+
+package xlimAST;
+
+/* All AST nodes must implement this interface.  It provides basic
+   machinery for constructing the parent and child relationships
+   between nodes. */
+
+public interface Node {
+
+  /** This method is called after the node has been made the current
+    node.  It indicates that child nodes can now be added to it. */
+  public void jjtOpen();
+
+  /** This method is called after all the child nodes have been
+    added. */
+  public void jjtClose();
+
+  /** This pair of methods are used to inform the node of its
+    parent. */
+  public void jjtSetParent(Node n);
+  public Node jjtGetParent();
+
+  /** This method tells the node to add its argument to the node's
+    list of children.  */
+  public void jjtAddChild(Node n, int i);
+
+  /** This method returns a child node.  The children are numbered
+     from zero, left to right. */
+  public Node jjtGetChild(int i);
+
+  /** Return the number of children the node has. */
+  public int jjtGetNumChildren();
+
+  /** Accept the visitor. **/
+  public Object jjtAccept(XmlParserVisitor visitor, Object data);
+}
diff --git a/examples/actors/xlimAST/Opt.java b/examples/actors/xlimAST/Opt.java
new file mode 100644
index 0000000000000000000000000000000000000000..ae1cd0a4f567887f7209db14e5a4ed327f06b6df
--- /dev/null
+++ b/examples/actors/xlimAST/Opt.java
@@ -0,0 +1,108 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+public class Opt<T extends ASTNode> extends ASTNode<T> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Opt<T> clone() throws CloneNotSupportedException {
+        Opt node = (Opt)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Opt<T> copy() {
+      try {
+          Opt node = (Opt)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Opt<T> fullCopy() {
+        Opt res = (Opt)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in SDF.jrag at line 63
+
+	int getNumChildNoTransfrom() {return getNumChildNoTransform();}
+
+    // Declared in Opt.ast at line 3
+    // Declared in Opt.ast line 0
+
+    public Opt(int i) {
+        super(i);
+    }
+
+    // Declared in Opt.ast at line 6
+
+    public Opt(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in Opt.ast at line 10
+
+    public Opt() {
+        this(0);
+
+
+    }
+
+    // Declared in Opt.ast at line 16
+
+
+     public Opt(T opt) {
+         setChild(opt, 0);
+     }
+
+    // Declared in Opt.ast at line 20
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Opt");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in Opt.ast at line 27
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in Opt.ast at line 31
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in Opt.ast at line 36
+
+
+public void checkChild(Node n, int i) {
+  if(i > 0) throw new Error("Optional nodes can only have one child");
+  if(!(n instanceof ASTNode)) throw new Error("Node type must be an instance of ASTNode");
+}
+
+    // Declared in Opt.ast at line 41
+
+
+  public boolean mayHaveRewrite() { return false; }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/PHI.java b/examples/actors/xlimAST/PHI.java
new file mode 100644
index 0000000000000000000000000000000000000000..d3b4ab7154bda7660ee4bf98dfbe723343747e89
--- /dev/null
+++ b/examples/actors/xlimAST/PHI.java
@@ -0,0 +1,276 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class PHI extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public PHI clone() throws CloneNotSupportedException {
+        PHI node = (PHI)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public PHI copy() {
+      try {
+          PHI node = (PHI)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public PHI fullCopy() {
+        PHI res = (PHI)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 80
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<PHI ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</PHI> ");
+    }
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 28
+
+    public PHI(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public PHI(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public PHI() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xlim.ast at line 19
+
+
+    // Declared in xlim.ast line 28
+    public PHI(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xlim.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "PHI");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xlim.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xlim.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/ParseException.java b/examples/actors/xlimAST/ParseException.java
new file mode 100644
index 0000000000000000000000000000000000000000..f68d3a5970fd2de9330c76b3af37b5e27abebef7
--- /dev/null
+++ b/examples/actors/xlimAST/ParseException.java
@@ -0,0 +1,192 @@
+/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 3.0 */
+package xlimAST;
+
+/**
+ * This exception is thrown when parse errors are encountered.
+ * You can explicitly create objects of this exception type by
+ * calling the method generateParseException in the generated
+ * parser.
+ *
+ * You can modify this class to customize your error reporting
+ * mechanisms so long as you retain the public fields.
+ */
+public class ParseException extends Exception {
+
+  /**
+   * This constructor is used by the method "generateParseException"
+   * in the generated parser.  Calling this constructor generates
+   * a new object of this type with the fields "currentToken",
+   * "expectedTokenSequences", and "tokenImage" set.  The boolean
+   * flag "specialConstructor" is also set to true to indicate that
+   * this constructor was used to create this object.
+   * This constructor calls its super class with the empty string
+   * to force the "toString" method of parent class "Throwable" to
+   * print the error message in the form:
+   *     ParseException: <result of getMessage>
+   */
+  public ParseException(Token currentTokenVal,
+                        int[][] expectedTokenSequencesVal,
+                        String[] tokenImageVal
+                       )
+  {
+    super("");
+    specialConstructor = true;
+    currentToken = currentTokenVal;
+    expectedTokenSequences = expectedTokenSequencesVal;
+    tokenImage = tokenImageVal;
+  }
+
+  /**
+   * The following constructors are for use by you for whatever
+   * purpose you can think of.  Constructing the exception in this
+   * manner makes the exception behave in the normal way - i.e., as
+   * documented in the class "Throwable".  The fields "errorToken",
+   * "expectedTokenSequences", and "tokenImage" do not contain
+   * relevant information.  The JavaCC generated code does not use
+   * these constructors.
+   */
+
+  public ParseException() {
+    super();
+    specialConstructor = false;
+  }
+
+  public ParseException(String message) {
+    super(message);
+    specialConstructor = false;
+  }
+
+  /**
+   * This variable determines which constructor was used to create
+   * this object and thereby affects the semantics of the
+   * "getMessage" method (see below).
+   */
+  protected boolean specialConstructor;
+
+  /**
+   * This is the last token that has been consumed successfully.  If
+   * this object has been created due to a parse error, the token
+   * followng this token will (therefore) be the first error token.
+   */
+  public Token currentToken;
+
+  /**
+   * Each entry in this array is an array of integers.  Each array
+   * of integers represents a sequence of tokens (by their ordinal
+   * values) that is expected at this point of the parse.
+   */
+  public int[][] expectedTokenSequences;
+
+  /**
+   * This is a reference to the "tokenImage" array of the generated
+   * parser within which the parse error occurred.  This array is
+   * defined in the generated ...Constants interface.
+   */
+  public String[] tokenImage;
+
+  /**
+   * This method has the standard behavior when this object has been
+   * created using the standard constructors.  Otherwise, it uses
+   * "currentToken" and "expectedTokenSequences" to generate a parse
+   * error message and returns it.  If this object has been created
+   * due to a parse error, and you do not catch it (it gets thrown
+   * from the parser), then this method is called during the printing
+   * of the final stack trace, and hence the correct error message
+   * gets displayed.
+   */
+  public String getMessage() {
+    if (!specialConstructor) {
+      return super.getMessage();
+    }
+    StringBuffer expected = new StringBuffer();
+    int maxSize = 0;
+    for (int i = 0; i < expectedTokenSequences.length; i++) {
+      if (maxSize < expectedTokenSequences[i].length) {
+        maxSize = expectedTokenSequences[i].length;
+      }
+      for (int j = 0; j < expectedTokenSequences[i].length; j++) {
+        expected.append(tokenImage[expectedTokenSequences[i][j]]).append(" ");
+      }
+      if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {
+        expected.append("...");
+      }
+      expected.append(eol).append("    ");
+    }
+    String retval = "Encountered \"";
+    Token tok = currentToken.next;
+    for (int i = 0; i < maxSize; i++) {
+      if (i != 0) retval += " ";
+      if (tok.kind == 0) {
+        retval += tokenImage[0];
+        break;
+      }
+      retval += add_escapes(tok.image);
+      tok = tok.next; 
+    }
+    retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;
+    retval += "." + eol;
+    if (expectedTokenSequences.length == 1) {
+      retval += "Was expecting:" + eol + "    ";
+    } else {
+      retval += "Was expecting one of:" + eol + "    ";
+    }
+    retval += expected.toString();
+    return retval;
+  }
+
+  /**
+   * The end of line string for this machine.
+   */
+  protected String eol = System.getProperty("line.separator", "\n");
+ 
+  /**
+   * Used to convert raw characters to their escaped version
+   * when these raw version cannot be used as part of an ASCII
+   * string literal.
+   */
+  protected String add_escapes(String str) {
+      StringBuffer retval = new StringBuffer();
+      char ch;
+      for (int i = 0; i < str.length(); i++) {
+        switch (str.charAt(i))
+        {
+           case 0 :
+              continue;
+           case '\b':
+              retval.append("\\b");
+              continue;
+           case '\t':
+              retval.append("\\t");
+              continue;
+           case '\n':
+              retval.append("\\n");
+              continue;
+           case '\f':
+              retval.append("\\f");
+              continue;
+           case '\r':
+              retval.append("\\r");
+              continue;
+           case '\"':
+              retval.append("\\\"");
+              continue;
+           case '\'':
+              retval.append("\\\'");
+              continue;
+           case '\\':
+              retval.append("\\\\");
+              continue;
+           default:
+              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
+                 String s = "0000" + Integer.toString(ch, 16);
+                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
+              } else {
+                 retval.append(ch);
+              }
+              continue;
+        }
+      }
+      return retval.toString();
+   }
+
+}
diff --git a/examples/actors/xlimAST/SimpleElement.java b/examples/actors/xlimAST/SimpleElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..de5656500ab05bc42751c302ec4214724afe53dd
--- /dev/null
+++ b/examples/actors/xlimAST/SimpleElement.java
@@ -0,0 +1,84 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public abstract class SimpleElement extends Element implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public SimpleElement clone() throws CloneNotSupportedException {
+        SimpleElement node = (SimpleElement)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 13
+
+    public SimpleElement(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public SimpleElement(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public SimpleElement() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 16
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "SimpleElement");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 23
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 27
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 32
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xlim.ast at line 35
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xlim.ast at line 38
+
+  public boolean mayHaveRewrite() { return false; }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/SimpleNode.java b/examples/actors/xlimAST/SimpleNode.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1b9aeecab0d2db7cb570dbebe5cbaa33428a588
--- /dev/null
+++ b/examples/actors/xlimAST/SimpleNode.java
@@ -0,0 +1,87 @@
+/* Generated By:JJTree: Do not edit this line. SimpleNode.java */
+
+package xlimAST;
+
+public class SimpleNode implements Node {
+  protected Node parent;
+  protected Node[] children;
+  protected int id;
+  protected XmlParser parser;
+
+  public SimpleNode(int i) {
+    id = i;
+  }
+
+  public SimpleNode(XmlParser p, int i) {
+    this(i);
+    parser = p;
+  }
+
+  public void jjtOpen() {
+  }
+
+  public void jjtClose() {
+  }
+  
+  public void jjtSetParent(Node n) { parent = n; }
+  public Node jjtGetParent() { return parent; }
+
+  public void jjtAddChild(Node n, int i) {
+    if (children == null) {
+      children = new Node[i + 1];
+    } else if (i >= children.length) {
+      Node c[] = new Node[i + 1];
+      System.arraycopy(children, 0, c, 0, children.length);
+      children = c;
+    }
+    children[i] = n;
+  }
+
+  public Node jjtGetChild(int i) {
+    return children[i];
+  }
+
+  public int jjtGetNumChildren() {
+    return (children == null) ? 0 : children.length;
+  }
+
+  /** Accept the visitor. **/
+  public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+    return visitor.visit(this, data);
+  }
+
+  /** Accept the visitor. **/
+  public Object childrenAccept(XmlParserVisitor visitor, Object data) {
+    if (children != null) {
+      for (int i = 0; i < children.length; ++i) {
+        children[i].jjtAccept(visitor, data);
+      }
+    }
+    return data;
+  }
+
+  /* You can override these two methods in subclasses of SimpleNode to
+     customize the way the node appears when the tree is dumped.  If
+     your output uses more than one line you should override
+     toString(String), otherwise overriding toString() is probably all
+     you need to do. */
+
+  public String toString() { return XmlParserTreeConstants.jjtNodeName[id]; }
+  public String toString(String prefix) { return prefix + toString(); }
+
+  /* Override this method if you want to customize how the node dumps
+     out its children. */
+
+  public void dump(String prefix) {
+    System.out.println(toString(prefix));
+    if (children != null) {
+      for (int i = 0; i < children.length; ++i) {
+	SimpleNode n = (SimpleNode)children[i];
+	if (n != null) {
+	  n.dump(prefix + " ");
+	}
+      }
+    }
+  }
+}
+
diff --git a/examples/actors/xlimAST/Specification.java b/examples/actors/xlimAST/Specification.java
new file mode 100644
index 0000000000000000000000000000000000000000..31dad297086b0539d12d2186ab6f4d86882d0cfa
--- /dev/null
+++ b/examples/actors/xlimAST/Specification.java
@@ -0,0 +1,308 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class Specification extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+        isSDF_visited = -1;
+        getDesign_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Specification clone() throws CloneNotSupportedException {
+        Specification node = (Specification)super.clone();
+        node.getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+        node.isSDF_visited = -1;
+        node.getDesign_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Specification copy() {
+      try {
+          Specification node = (Specification)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Specification fullCopy() {
+        Specification res = (Specification)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 6
+
+    public Specification(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public Specification(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public Specification() {
+        this(0);
+
+        setChild(new Opt(), 1);
+        setChild(new List(), 2);
+
+    }
+
+    // Declared in xlim.ast at line 19
+
+
+    // Declared in xlim.ast line 6
+    public Specification(XmlHeader p0, Opt<DocType> p1, List<Element> p2) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+        setChild(p2, 2);
+    }
+
+    // Declared in xlim.ast at line 25
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Specification");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 36
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 41
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof XmlHeader))  throw new Error("Child number 0 of Specification has the type " + n.getClass().getName() + " which is not an instance of XmlHeader");
+  if(i == 1) {
+    if(!(n instanceof Opt)) throw new Error("Child number 1 of Specification has the type " + n.getClass().getName() + " which is not an instance of Opt");
+    if(((Opt)n).getNumChildNoTransfrom() != 0 && !(((Opt)n).getChildNoTransform(0) instanceof DocType)) throw new Error("Optional DocType has the type " + ((Opt)n).getChildNoTransform(0).getClass().getName() + " which is not an instance of DocType");
+  }
+  if(i == 2) {
+    if(!(n instanceof List)) throw new Error("Child number 2 of Specification has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xlim.ast at line 54
+
+
+  public int getNumChild() {
+    return 3;
+  }
+
+    // Declared in xlim.ast at line 57
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 6
+    public void setXmlHeader(XmlHeader node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public XmlHeader getXmlHeader() {
+        return (XmlHeader)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public XmlHeader getXmlHeaderNoTransform() {
+        return (XmlHeader)getChildNoTransform(0);
+    }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 6
+    public void setDocTypeOpt(Opt<DocType> opt) {
+        setChild(opt, 1);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    public boolean hasDocType() {
+        return getDocTypeOpt().getNumChild() != 0;
+    }
+
+    // Declared in xlim.ast at line 10
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public DocType getDocType() {
+        return (DocType)getDocTypeOpt().getChild(0);
+    }
+
+    // Declared in xlim.ast at line 14
+
+
+    public void setDocType(DocType node) {
+        getDocTypeOpt().setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 17
+
+     @SuppressWarnings({"unchecked", "cast"})  public Opt<DocType> getDocTypeOpt() {
+        return (Opt<DocType>)getChild(1);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Opt<DocType> getDocTypeOptNoTransform() {
+        return (Opt<DocType>)getChildNoTransform(1);
+    }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 6
+    public void setElementList(List<Element> list) {
+        setChild(list, 2);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(2);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(2);
+    }
+
+    protected java.util.Map getOperations_HashSet_operation__visited;
+    // Declared in Merge.jrag at line 31
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<operation> getOperations(HashSet<operation> ops) {
+        Object _parameters = ops;
+if(getOperations_HashSet_operation__visited == null) getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(getOperations_HashSet_operation__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: getOperations in class: ");
+        getOperations_HashSet_operation__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<operation> getOperations_HashSet_operation__value = getOperations_compute(ops);
+        getOperations_HashSet_operation__visited.remove(_parameters);
+        return getOperations_HashSet_operation__value;
+    }
+
+    private HashSet<operation> getOperations_compute(HashSet<operation> ops) {
+		for (Element e : getElements()) {
+			ops = e.getOperations(ops);
+		}
+		return ops;
+	}
+
+    protected int isSDF_visited = -1;
+    // Declared in SDF.jrag at line 12
+ @SuppressWarnings({"unchecked", "cast"})     public boolean isSDF() {
+        if(isSDF_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: isSDF in class: ");
+        isSDF_visited = boundariesCrossed;
+        boolean isSDF_value = isSDF_compute();
+        isSDF_visited = -1;
+        return isSDF_value;
+    }
+
+    private boolean isSDF_compute() {
+		boolean result = false;
+		for (Element e : getElements()) {
+			result |= e.isSDF();
+		}
+		return result;
+	}
+
+    protected int getDesign_visited = -1;
+    // Declared in SDF.jrag at line 55
+ @SuppressWarnings({"unchecked", "cast"})     public design getDesign() {
+        if(getDesign_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: getDesign in class: ");
+        getDesign_visited = boundariesCrossed;
+        design getDesign_value = getDesign_compute();
+        getDesign_visited = -1;
+        return getDesign_value;
+    }
+
+    private design getDesign_compute() {  return (design) getElement(0);  }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/Start.java b/examples/actors/xlimAST/Start.java
new file mode 100644
index 0000000000000000000000000000000000000000..093a2d2af1b693ce06b884a076e38831ed6c418a
--- /dev/null
+++ b/examples/actors/xlimAST/Start.java
@@ -0,0 +1,176 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+// -*-Java-*- 
+
+// Automatically generated JastAdd abstract grammar file 
+// Predefined types
+
+public class Start extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+        isSDF_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Start clone() throws CloneNotSupportedException {
+        Start node = (Start)super.clone();
+        node.getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+        node.isSDF_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Start copy() {
+      try {
+          Start node = (Start)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Start fullCopy() {
+        Start res = (Start)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in Merge.jrag at line 12
+
+	public void merge(Start dest) {
+		getSpecification().getDesign().merge(dest.getSpecification().getDesign());
+	}
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 5
+
+    public Start(int i) {
+        super(i);
+        is$Final(true);
+    }
+
+    // Declared in xlim.ast at line 7
+
+    public Start(XmlParser p, int i) {
+        this(i);
+        parser = p;
+        is$Final(true);
+    }
+
+    // Declared in xlim.ast at line 12
+
+    public Start() {
+        this(0);
+
+        is$Final(true);
+
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    // Declared in xlim.ast line 5
+    public Start(Specification p0) {
+        setChild(p0, 0);
+        is$Final(true);
+    }
+
+    // Declared in xlim.ast at line 25
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Start");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 36
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 41
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof Specification))  throw new Error("Child number 0 of Start has the type " + n.getClass().getName() + " which is not an instance of Specification");
+}
+
+    // Declared in xlim.ast at line 45
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 48
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 5
+    public void setSpecification(Specification node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public Specification getSpecification() {
+        return (Specification)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public Specification getSpecificationNoTransform() {
+        return (Specification)getChildNoTransform(0);
+    }
+
+    protected java.util.Map getOperations_HashSet_operation__visited;
+    // Declared in Merge.jrag at line 29
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<operation> getOperations(HashSet<operation> ops) {
+        Object _parameters = ops;
+if(getOperations_HashSet_operation__visited == null) getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(getOperations_HashSet_operation__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: getOperations in class: ");
+        getOperations_HashSet_operation__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<operation> getOperations_HashSet_operation__value = getOperations_compute(ops);
+        getOperations_HashSet_operation__visited.remove(_parameters);
+        return getOperations_HashSet_operation__value;
+    }
+
+    private HashSet<operation> getOperations_compute(HashSet<operation> ops) {  return getSpecification().getOperations(ops);  }
+
+    protected int isSDF_visited = -1;
+    // Declared in SDF.jrag at line 11
+ @SuppressWarnings({"unchecked", "cast"})     public boolean isSDF() {
+        if(isSDF_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: isSDF in class: ");
+        isSDF_visited = boundariesCrossed;
+        boolean isSDF_value = isSDF_compute();
+        isSDF_visited = -1;
+        return isSDF_value;
+    }
+
+    private boolean isSDF_compute() {  return getSpecification().isSDF();  }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/StringElement.java b/examples/actors/xlimAST/StringElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..e1d7ff8cadfac77ababbd5eb71e4cf353c597621
--- /dev/null
+++ b/examples/actors/xlimAST/StringElement.java
@@ -0,0 +1,127 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class StringElement extends SimpleElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public StringElement clone() throws CloneNotSupportedException {
+        StringElement node = (StringElement)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public StringElement copy() {
+      try {
+          StringElement node = (StringElement)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public StringElement fullCopy() {
+        StringElement res = (StringElement)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 14
+
+    public StringElement(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public StringElement(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public StringElement() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 14
+    public StringElement(String p0) {
+        setLITERAL(p0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "StringElement"+ "\"" + getLITERAL() + "\"");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+}
+
+    // Declared in xlim.ast at line 40
+
+
+  public int getNumChild() {
+    return 0;
+  }
+
+    // Declared in xlim.ast at line 43
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 14
+    protected String tokenString_LITERAL;
+
+    // Declared in xlim.ast at line 3
+
+    public void setLITERAL(String value) {
+        tokenString_LITERAL = value;
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public String getLITERAL() {
+        return tokenString_LITERAL != null ? tokenString_LITERAL : "";
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/Thing.java b/examples/actors/xlimAST/Thing.java
new file mode 100644
index 0000000000000000000000000000000000000000..449ae5de4cb4bd4c46ebab9864605eb75186ca4d
--- /dev/null
+++ b/examples/actors/xlimAST/Thing.java
@@ -0,0 +1,237 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public abstract class Thing extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Thing clone() throws CloneNotSupportedException {
+        Thing node = (Thing)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 9
+
+    public Thing(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public Thing(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public Thing() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xlim.ast at line 19
+
+
+    // Declared in xlim.ast line 9
+    public Thing(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xlim.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Thing");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xlim.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xlim.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/Token.java b/examples/actors/xlimAST/Token.java
new file mode 100644
index 0000000000000000000000000000000000000000..8be820376a3faf434a719775907eb2fa02e3ce6c
--- /dev/null
+++ b/examples/actors/xlimAST/Token.java
@@ -0,0 +1,81 @@
+/* Generated By:JavaCC: Do not edit this line. Token.java Version 3.0 */
+package xlimAST;
+
+/**
+ * Describes the input token stream.
+ */
+
+public class Token {
+
+  /**
+   * An integer that describes the kind of this token.  This numbering
+   * system is determined by JavaCCParser, and a table of these numbers is
+   * stored in the file ...Constants.java.
+   */
+  public int kind;
+
+  /**
+   * beginLine and beginColumn describe the position of the first character
+   * of this token; endLine and endColumn describe the position of the
+   * last character of this token.
+   */
+  public int beginLine, beginColumn, endLine, endColumn;
+
+  /**
+   * The string image of the token.
+   */
+  public String image;
+
+  /**
+   * A reference to the next regular (non-special) token from the input
+   * stream.  If this is the last token from the input stream, or if the
+   * token manager has not read tokens beyond this one, this field is
+   * set to null.  This is true only if this token is also a regular
+   * token.  Otherwise, see below for a description of the contents of
+   * this field.
+   */
+  public Token next;
+
+  /**
+   * This field is used to access special tokens that occur prior to this
+   * token, but after the immediately preceding regular (non-special) token.
+   * If there are no such special tokens, this field is set to null.
+   * When there are more than one such special token, this field refers
+   * to the last of these special tokens, which in turn refers to the next
+   * previous special token through its specialToken field, and so on
+   * until the first special token (whose specialToken field is null).
+   * The next fields of special tokens refer to other special tokens that
+   * immediately follow it (without an intervening regular token).  If there
+   * is no such token, this field is null.
+   */
+  public Token specialToken;
+
+  /**
+   * Returns the image.
+   */
+  public String toString()
+  {
+     return image;
+  }
+
+  /**
+   * Returns a new Token object, by default. However, if you want, you
+   * can create and return subclass objects based on the value of ofKind.
+   * Simply add the cases to the switch for all those special cases.
+   * For example, if you have a subclass of Token called IDToken that
+   * you want to create if ofKind is ID, simlpy add something like :
+   *
+   *    case MyParserConstants.ID : return new IDToken();
+   *
+   * to the following switch statement. Then you can cast matchedToken
+   * variable to the appropriate type and use it in your lexical actions.
+   */
+  public static final Token newToken(int ofKind)
+  {
+     switch(ofKind)
+     {
+       default : return new Token();
+     }
+  }
+
+}
diff --git a/examples/actors/xlimAST/TokenMgrError.java b/examples/actors/xlimAST/TokenMgrError.java
new file mode 100644
index 0000000000000000000000000000000000000000..aeb87caab6c52901dfdbea655237ad74af5d64f8
--- /dev/null
+++ b/examples/actors/xlimAST/TokenMgrError.java
@@ -0,0 +1,133 @@
+/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 3.0 */
+package xlimAST;
+
+public class TokenMgrError extends Error
+{
+   /*
+    * Ordinals for various reasons why an Error of this type can be thrown.
+    */
+
+   /**
+    * Lexical error occured.
+    */
+   static final int LEXICAL_ERROR = 0;
+
+   /**
+    * An attempt wass made to create a second instance of a static token manager.
+    */
+   static final int STATIC_LEXER_ERROR = 1;
+
+   /**
+    * Tried to change to an invalid lexical state.
+    */
+   static final int INVALID_LEXICAL_STATE = 2;
+
+   /**
+    * Detected (and bailed out of) an infinite loop in the token manager.
+    */
+   static final int LOOP_DETECTED = 3;
+
+   /**
+    * Indicates the reason why the exception is thrown. It will have
+    * one of the above 4 values.
+    */
+   int errorCode;
+
+   /**
+    * Replaces unprintable characters by their espaced (or unicode escaped)
+    * equivalents in the given string
+    */
+   protected static final String addEscapes(String str) {
+      StringBuffer retval = new StringBuffer();
+      char ch;
+      for (int i = 0; i < str.length(); i++) {
+        switch (str.charAt(i))
+        {
+           case 0 :
+              continue;
+           case '\b':
+              retval.append("\\b");
+              continue;
+           case '\t':
+              retval.append("\\t");
+              continue;
+           case '\n':
+              retval.append("\\n");
+              continue;
+           case '\f':
+              retval.append("\\f");
+              continue;
+           case '\r':
+              retval.append("\\r");
+              continue;
+           case '\"':
+              retval.append("\\\"");
+              continue;
+           case '\'':
+              retval.append("\\\'");
+              continue;
+           case '\\':
+              retval.append("\\\\");
+              continue;
+           default:
+              if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
+                 String s = "0000" + Integer.toString(ch, 16);
+                 retval.append("\\u" + s.substring(s.length() - 4, s.length()));
+              } else {
+                 retval.append(ch);
+              }
+              continue;
+        }
+      }
+      return retval.toString();
+   }
+
+   /**
+    * Returns a detailed message for the Error when it is thrown by the
+    * token manager to indicate a lexical error.
+    * Parameters : 
+    *    EOFSeen     : indicates if EOF caused the lexicl error
+    *    curLexState : lexical state in which this error occured
+    *    errorLine   : line number when the error occured
+    *    errorColumn : column number when the error occured
+    *    errorAfter  : prefix that was seen before this error occured
+    *    curchar     : the offending character
+    * Note: You can customize the lexical error message by modifying this method.
+    */
+   protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
+      return("Lexical error at line " +
+           errorLine + ", column " +
+           errorColumn + ".  Encountered: " +
+           (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
+           "after : \"" + addEscapes(errorAfter) + "\"");
+   }
+
+   /**
+    * You can also modify the body of this method to customize your error messages.
+    * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
+    * of end-users concern, so you can return something like : 
+    *
+    *     "Internal Error : Please file a bug report .... "
+    *
+    * from this method for such cases in the release version of your parser.
+    */
+   public String getMessage() {
+      return super.getMessage();
+   }
+
+   /*
+    * Constructors of various flavors follow.
+    */
+
+   public TokenMgrError() {
+   }
+
+   public TokenMgrError(String message, int reason) {
+      super(message);
+      errorCode = reason;
+   }
+
+   public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
+      this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
+   }
+}
diff --git a/examples/actors/xlimAST/ValueElement.java b/examples/actors/xlimAST/ValueElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..d524325a03d01494d289202bd6d7873db865e646
--- /dev/null
+++ b/examples/actors/xlimAST/ValueElement.java
@@ -0,0 +1,256 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class ValueElement extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ValueElement clone() throws CloneNotSupportedException {
+        ValueElement node = (ValueElement)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ValueElement copy() {
+      try {
+          ValueElement node = (ValueElement)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public ValueElement fullCopy() {
+        ValueElement res = (ValueElement)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 12
+
+    public ValueElement(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public ValueElement(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public ValueElement() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xlim.ast at line 19
+
+
+    // Declared in xlim.ast line 12
+    public ValueElement(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xlim.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "ValueElement");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xlim.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xlim.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/Version.java b/examples/actors/xlimAST/Version.java
new file mode 100644
index 0000000000000000000000000000000000000000..45f073d7234e3e53e4f05ce16f30736046371361
--- /dev/null
+++ b/examples/actors/xlimAST/Version.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class Version extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Version clone() throws CloneNotSupportedException {
+        Version node = (Version)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Version copy() {
+      try {
+          Version node = (Version)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public Version fullCopy() {
+        Version res = (Version)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 38
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" version=");
+    getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 20
+
+    public Version(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public Version(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public Version() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 20
+    public Version(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "Version");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/XmlHeader.java b/examples/actors/xlimAST/XmlHeader.java
new file mode 100644
index 0000000000000000000000000000000000000000..f2b123900c9921f8b0ba000fc06198554d4b8a48
--- /dev/null
+++ b/examples/actors/xlimAST/XmlHeader.java
@@ -0,0 +1,194 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class XmlHeader extends ASTNode<ASTNode> implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XmlHeader clone() throws CloneNotSupportedException {
+        XmlHeader node = (XmlHeader)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XmlHeader copy() {
+      try {
+          XmlHeader node = (XmlHeader)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XmlHeader fullCopy() {
+        XmlHeader res = (XmlHeader)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 15
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print("<?xml ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(indent,pStream);
+    }
+    pStream.println("?> ");
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 7
+
+    public XmlHeader(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public XmlHeader(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public XmlHeader() {
+        this(0);
+
+        setChild(new List(), 0);
+
+    }
+
+    // Declared in xlim.ast at line 18
+
+
+    // Declared in xlim.ast line 7
+    public XmlHeader(List<Attribute> p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 22
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "XmlHeader");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 29
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 33
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 38
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of XmlHeader has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+}
+
+    // Declared in xlim.ast at line 46
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 49
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 7
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/XmlParser.java b/examples/actors/xlimAST/XmlParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..dd4c7d71fcadcd88fa4fb18ed174786e99b6fd12
--- /dev/null
+++ b/examples/actors/xlimAST/XmlParser.java
@@ -0,0 +1,1608 @@
+/* Generated By:JJTree&JavaCC: Do not edit this line. XmlParser.java */
+    package xlimAST;
+    public class XmlParser/*@bgen(jjtree)*/implements XmlParserTreeConstants, XmlParserConstants {/*@bgen(jjtree)*/
+  protected JJTXmlParserState jjtree = new JJTXmlParserState();
+
+ // OPERATORS
+  final public Start Start() throws ParseException {
+                        /*@bgen(jjtree) Start */
+  Start jjtn000 = new Start(JJTSTART);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      Specification();
+    jjtree.closeNodeScope(jjtn000, true);
+    jjtc000 = false;
+    {if (true) return jjtn000;}
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+    throw new Error("Missing return statement in function");
+  }
+
+  final public void Specification() throws ParseException {
+                                       /*@bgen(jjtree) Specification */
+  Specification jjtn000 = new Specification(JJTSPECIFICATION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      XmlHeader();
+    Opt jjtn001 = new Opt(JJTOPT);
+    boolean jjtc001 = true;
+    jjtree.openNodeScope(jjtn001);
+      try {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case LTBANG:
+          DocType();
+          break;
+        default:
+          jj_la1[0] = jj_gen;
+          ;
+        }
+      } catch (Throwable jjte001) {
+    if (jjtc001) {
+      jjtree.clearNodeScope(jjtn001);
+      jjtc001 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte001 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte001;}
+    }
+    if (jjte001 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte001;}
+    }
+    {if (true) throw (Error)jjte001;}
+      } finally {
+    if (jjtc001) {
+      jjtree.closeNodeScope(jjtn001,  true);
+    }
+      }
+      ElementList();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void DocType() throws ParseException {
+                           /*@bgen(jjtree) DocType */
+                           DocType jjtn000 = new DocType(JJTDOCTYPE);
+                           boolean jjtc000 = true;
+                           jjtree.openNodeScope(jjtn000);String s;
+    try {
+      jj_consume_token(LTBANG);
+                s = new String();
+                if (getToken(1).kind != GT ) {
+                   s += getData();
+        }
+       jjtree.closeNodeScope(jjtn000, true);
+       jjtc000 = false;
+      jjtn000.setSTRING(s);
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  String getData() throws ParseException {
+        StringBuffer s = new StringBuffer();
+//     jjtThis.someData = true;
+    while ((getToken(1)).kind != LT && (getToken(1)).kind != LTSLASH) {
+                Token t = getNextToken();
+                if (t.specialToken != null) {
+                        Token tmp_t = t.specialToken;
+                        while (tmp_t.specialToken != null) {
+                                tmp_t = tmp_t.specialToken;
+                        }
+                        while (tmp_t != null) {
+                                s.append(tmp_t.image);
+                                tmp_t = tmp_t.next;
+                        }
+                }
+                s.append(t.image);
+       s.append(" ");
+        }
+        return s.toString();
+  }
+
+  final public void XmlHeader() throws ParseException {
+                               /*@bgen(jjtree) XmlHeader */
+  XmlHeader jjtn000 = new XmlHeader(JJTXMLHEADER);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(LTQ);
+      jj_consume_token(XML);
+      AttributeList();
+      jj_consume_token(QGT);
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void ElementList() throws ParseException {
+                            /*@bgen(jjtree) List */
+  List jjtn000 = new List(JJTLIST);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      label_1:
+      while (true) {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case INTEGER_LITERAL:
+        case FLOAT_LITERAL:
+        case IDENTIFIER:
+        case LT:
+          ;
+          break;
+        default:
+          jj_la1[1] = jj_gen;
+          break label_1;
+        }
+        Element();
+      }
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void AttributeList() throws ParseException {
+                              /*@bgen(jjtree) List */
+  List jjtn000 = new List(JJTLIST);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      label_2:
+      while (true) {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case encoding:
+        case version:
+        case XsiNoNamespaceSchemaLocation:
+        case XmlnsXsi:
+        case portName:
+        case sourceName:
+        case kind:
+        case typeName:
+        case decision:
+        case size:
+        case dir:
+        case source:
+        case value:
+        case qualifier:
+        case style:
+        case removable:
+        case autostart:
+        case target:
+        case name:
+          ;
+          break;
+        default:
+          jj_la1[2] = jj_gen;
+          break label_2;
+        }
+        Attribute();
+      }
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void AttrValue() throws ParseException {
+                               /*@bgen(jjtree) AttrValue */
+                                AttrValue jjtn000 = new AttrValue(JJTATTRVALUE);
+                                boolean jjtc000 = true;
+                                jjtree.openNodeScope(jjtn000);Token t;
+    try {
+      t = jj_consume_token(STRING_LITERAL);
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+         jjtn000.setLITERAL(t.image);
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
+    }
+  }
+
+  final public void Encoding() throws ParseException {
+                             /*@bgen(jjtree) Encoding */
+  Encoding jjtn000 = new Encoding(JJTENCODING);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(encoding);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void Version() throws ParseException {
+                           /*@bgen(jjtree) Version */
+  Version jjtn000 = new Version(JJTVERSION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(version);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void XsiNoNamespaceSchemaLocation() throws ParseException {
+                                                                     /*@bgen(jjtree) XsiNoNamespaceSchemaLocation */
+  XsiNoNamespaceSchemaLocation jjtn000 = new XsiNoNamespaceSchemaLocation(JJTXSINONAMESPACESCHEMALOCATION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(XsiNoNamespaceSchemaLocation);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void XmlnsXsi() throws ParseException {
+                             /*@bgen(jjtree) XmlnsXsi */
+  XmlnsXsi jjtn000 = new XmlnsXsi(JJTXMLNSXSI);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(XmlnsXsi);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void Element() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case LT:
+      jj_consume_token(LT);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case port:
+        port();
+        break;
+      case operation:
+        operation();
+        break;
+      case actor_port:
+        actor_port();
+        break;
+      case PHI:
+        PHI();
+        break;
+      case design:
+        design();
+        break;
+      case module:
+        module();
+        break;
+      case initValue:
+        initValue();
+        break;
+      case stateVar:
+        stateVar();
+        break;
+      default:
+        jj_la1[3] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      break;
+    case INTEGER_LITERAL:
+    case FLOAT_LITERAL:
+    case IDENTIFIER:
+      SimpleElement();
+      break;
+    default:
+      jj_la1[4] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void SimpleElement() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTEGER_LITERAL:
+      IntElement();
+      break;
+    case FLOAT_LITERAL:
+      FloatElement();
+      break;
+    case IDENTIFIER:
+      StringElement();
+      break;
+    default:
+      jj_la1[5] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void IntElement() throws ParseException {
+                                 /*@bgen(jjtree) IntElement */
+                                  IntElement jjtn000 = new IntElement(JJTINTELEMENT);
+                                  boolean jjtc000 = true;
+                                  jjtree.openNodeScope(jjtn000);Token t;
+    try {
+      t = jj_consume_token(INTEGER_LITERAL);
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+         jjtn000.setLITERAL(t.image);
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
+    }
+  }
+
+  final public void FloatElement() throws ParseException {
+                                     /*@bgen(jjtree) FloatElement */
+                                      FloatElement jjtn000 = new FloatElement(JJTFLOATELEMENT);
+                                      boolean jjtc000 = true;
+                                      jjtree.openNodeScope(jjtn000);Token t;
+    try {
+      t = jj_consume_token(FLOAT_LITERAL);
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+         jjtn000.setLITERAL(t.image);
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
+    }
+  }
+
+  final public void StringElement() throws ParseException {
+                                       /*@bgen(jjtree) StringElement */
+                                        StringElement jjtn000 = new StringElement(JJTSTRINGELEMENT);
+                                        boolean jjtc000 = true;
+                                        jjtree.openNodeScope(jjtn000);Token t;String s;
+    try {
+      t = jj_consume_token(IDENTIFIER);
+                s = t.image;
+                if (getToken(1).kind != GT ) {
+                s += getData();
+        }
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+         jjtn000.setLITERAL(s);
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+          }
+    }
+  }
+
+  final public void Attribute() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case encoding:
+      Encoding();
+      break;
+    case version:
+      Version();
+      break;
+    case XsiNoNamespaceSchemaLocation:
+      XsiNoNamespaceSchemaLocation();
+      break;
+    case XmlnsXsi:
+      XmlnsXsi();
+      break;
+    case source:
+      source();
+      break;
+    case style:
+      style();
+      break;
+    case name:
+      name();
+      break;
+    case removable:
+      removable();
+      break;
+    case sourceName:
+      sourceName();
+      break;
+    case dir:
+      dir();
+      break;
+    case kind:
+      kind();
+      break;
+    case portName:
+      portName();
+      break;
+    case decision:
+      decision();
+      break;
+    case target:
+      target();
+      break;
+    case qualifier:
+      qualifier();
+      break;
+    case typeName:
+      typeName();
+      break;
+    case value:
+      value();
+      break;
+    case autostart:
+      autostart();
+      break;
+    case size:
+      size();
+      break;
+    default:
+      jj_la1[6] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+  final public void portName() throws ParseException {
+                             /*@bgen(jjtree) portName */
+  portName jjtn000 = new portName(JJTPORTNAME);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(portName);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void module() throws ParseException {
+                         /*@bgen(jjtree) module */
+  module jjtn000 = new module(JJTMODULE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(module);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(module);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 60:
+        ElementList();
+        jj_consume_token(60);
+        break;
+      default:
+        jj_la1[7] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void sourceName() throws ParseException {
+                                 /*@bgen(jjtree) sourceName */
+  sourceName jjtn000 = new sourceName(JJTSOURCENAME);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(sourceName);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void PHI() throws ParseException {
+                   /*@bgen(jjtree) PHI */
+  PHI jjtn000 = new PHI(JJTPHI);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(PHI);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(PHI);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 60:
+        ElementList();
+        jj_consume_token(60);
+        break;
+      default:
+        jj_la1[8] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void kind() throws ParseException {
+                     /*@bgen(jjtree) kind */
+  kind jjtn000 = new kind(JJTKIND);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(kind);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void initValue() throws ParseException {
+                               /*@bgen(jjtree) initValue */
+  initValue jjtn000 = new initValue(JJTINITVALUE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(initValue);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(initValue);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 60:
+        ElementList();
+        jj_consume_token(60);
+        break;
+      default:
+        jj_la1[9] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void typeName() throws ParseException {
+                             /*@bgen(jjtree) typeName */
+  typeName jjtn000 = new typeName(JJTTYPENAME);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(typeName);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void port() throws ParseException {
+                     /*@bgen(jjtree) port */
+  port jjtn000 = new port(JJTPORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(port);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(port);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 60:
+        ElementList();
+        jj_consume_token(60);
+        break;
+      default:
+        jj_la1[10] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void decision() throws ParseException {
+                             /*@bgen(jjtree) decision */
+  decision jjtn000 = new decision(JJTDECISION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(decision);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void operation() throws ParseException {
+                               /*@bgen(jjtree) operation */
+  operation jjtn000 = new operation(JJTOPERATION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(operation);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(operation);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 60:
+        ElementList();
+        jj_consume_token(60);
+        break;
+      default:
+        jj_la1[11] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void design() throws ParseException {
+                         /*@bgen(jjtree) design */
+  design jjtn000 = new design(JJTDESIGN);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(design);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(design);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 60:
+        ElementList();
+        jj_consume_token(60);
+        break;
+      default:
+        jj_la1[12] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void stateVar() throws ParseException {
+                             /*@bgen(jjtree) stateVar */
+  stateVar jjtn000 = new stateVar(JJTSTATEVAR);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(stateVar);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(stateVar);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 60:
+        ElementList();
+        jj_consume_token(60);
+        break;
+      default:
+        jj_la1[13] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void size() throws ParseException {
+                     /*@bgen(jjtree) size */
+  size jjtn000 = new size(JJTSIZE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(size);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void dir() throws ParseException {
+                   /*@bgen(jjtree) dir */
+  dir jjtn000 = new dir(JJTDIR);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(dir);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void source() throws ParseException {
+                         /*@bgen(jjtree) source */
+  source jjtn000 = new source(JJTSOURCE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(source);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void value() throws ParseException {
+                       /*@bgen(jjtree) value */
+  value jjtn000 = new value(JJTVALUE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(value);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void actor_port() throws ParseException {
+                                 /*@bgen(jjtree) actor_port */
+  actor_port jjtn000 = new actor_port(JJTACTOR_PORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(actor_port);
+      AttributeList();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT:
+        jj_consume_token(GT);
+        ElementList();
+        jj_consume_token(LTSLASH);
+        jj_consume_token(actor_port);
+        jj_consume_token(GT);
+        break;
+      case INTEGER_LITERAL:
+      case FLOAT_LITERAL:
+      case IDENTIFIER:
+      case LT:
+      case 60:
+        ElementList();
+        jj_consume_token(60);
+        break;
+      default:
+        jj_la1[14] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       {if (true) throw (RuntimeException)jjte000;}
+     }
+     if (jjte000 instanceof ParseException) {
+       {if (true) throw (ParseException)jjte000;}
+     }
+     {if (true) throw (Error)jjte000;}
+    } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+    }
+  }
+
+  final public void qualifier() throws ParseException {
+                               /*@bgen(jjtree) qualifier */
+  qualifier jjtn000 = new qualifier(JJTQUALIFIER);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(qualifier);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void style() throws ParseException {
+                       /*@bgen(jjtree) style */
+  style jjtn000 = new style(JJTSTYLE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(style);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void removable() throws ParseException {
+                               /*@bgen(jjtree) removable */
+  removable jjtn000 = new removable(JJTREMOVABLE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(removable);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void autostart() throws ParseException {
+                               /*@bgen(jjtree) autostart */
+  autostart jjtn000 = new autostart(JJTAUTOSTART);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(autostart);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void target() throws ParseException {
+                         /*@bgen(jjtree) target */
+  target jjtn000 = new target(JJTTARGET);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(target);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  final public void name() throws ParseException {
+                     /*@bgen(jjtree) name */
+  name jjtn000 = new name(JJTNAME);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(name);
+      jj_consume_token(ASSIGN);
+      AttrValue();
+    } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      {if (true) throw (RuntimeException)jjte000;}
+    }
+    if (jjte000 instanceof ParseException) {
+      {if (true) throw (ParseException)jjte000;}
+    }
+    {if (true) throw (Error)jjte000;}
+    } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+    }
+  }
+
+  public XmlParserTokenManager token_source;
+  JavaCharStream jj_input_stream;
+  public Token token, jj_nt;
+  private int jj_ntk;
+  private int jj_gen;
+  final private int[] jj_la1 = new int[15];
+  static private int[] jj_la1_0;
+  static private int[] jj_la1_1;
+  static {
+      jj_la1_0();
+      jj_la1_1();
+   }
+   private static void jj_la1_0() {
+      jj_la1_0 = new int[] {0x0,0x0,0xbc557c00,0x43aa8000,0x0,0x0,0xbc557c00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+   }
+   private static void jj_la1_1() {
+      jj_la1_1 = new int[] {0x400000,0x802220,0x1f,0x0,0x802220,0x2220,0x1f,0x12802220,0x12802220,0x12802220,0x12802220,0x12802220,0x12802220,0x12802220,0x12802220,};
+   }
+
+  public XmlParser(java.io.InputStream stream) {
+     this(stream, null);
+  }
+  public XmlParser(java.io.InputStream stream, String encoding) {
+    try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+    token_source = new XmlParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 15; i++) jj_la1[i] = -1;
+  }
+
+  public void ReInit(java.io.InputStream stream) {
+     ReInit(stream, null);
+  }
+  public void ReInit(java.io.InputStream stream, String encoding) {
+    try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jjtree.reset();
+    jj_gen = 0;
+    for (int i = 0; i < 15; i++) jj_la1[i] = -1;
+  }
+
+  public XmlParser(java.io.Reader stream) {
+    jj_input_stream = new JavaCharStream(stream, 1, 1);
+    token_source = new XmlParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 15; i++) jj_la1[i] = -1;
+  }
+
+  public void ReInit(java.io.Reader stream) {
+    jj_input_stream.ReInit(stream, 1, 1);
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jjtree.reset();
+    jj_gen = 0;
+    for (int i = 0; i < 15; i++) jj_la1[i] = -1;
+  }
+
+  public XmlParser(XmlParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 15; i++) jj_la1[i] = -1;
+  }
+
+  public void ReInit(XmlParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jjtree.reset();
+    jj_gen = 0;
+    for (int i = 0; i < 15; i++) jj_la1[i] = -1;
+  }
+
+  final private Token jj_consume_token(int kind) throws ParseException {
+    Token oldToken;
+    if ((oldToken = token).next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    if (token.kind == kind) {
+      jj_gen++;
+      return token;
+    }
+    token = oldToken;
+    jj_kind = kind;
+    throw generateParseException();
+  }
+
+  final public Token getNextToken() {
+    if (token.next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    jj_gen++;
+    return token;
+  }
+
+  final public Token getToken(int index) {
+    Token t = token;
+    for (int i = 0; i < index; i++) {
+      if (t.next != null) t = t.next;
+      else t = t.next = token_source.getNextToken();
+    }
+    return t;
+  }
+
+  final private int jj_ntk() {
+    if ((jj_nt=token.next) == null)
+      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
+    else
+      return (jj_ntk = jj_nt.kind);
+  }
+
+  private java.util.Vector jj_expentries = new java.util.Vector();
+  private int[] jj_expentry;
+  private int jj_kind = -1;
+
+  public ParseException generateParseException() {
+    jj_expentries.removeAllElements();
+    boolean[] la1tokens = new boolean[61];
+    for (int i = 0; i < 61; i++) {
+      la1tokens[i] = false;
+    }
+    if (jj_kind >= 0) {
+      la1tokens[jj_kind] = true;
+      jj_kind = -1;
+    }
+    for (int i = 0; i < 15; i++) {
+      if (jj_la1[i] == jj_gen) {
+        for (int j = 0; j < 32; j++) {
+          if ((jj_la1_0[i] & (1<<j)) != 0) {
+            la1tokens[j] = true;
+          }
+          if ((jj_la1_1[i] & (1<<j)) != 0) {
+            la1tokens[32+j] = true;
+          }
+        }
+      }
+    }
+    for (int i = 0; i < 61; i++) {
+      if (la1tokens[i]) {
+        jj_expentry = new int[1];
+        jj_expentry[0] = i;
+        jj_expentries.addElement(jj_expentry);
+      }
+    }
+    int[][] exptokseq = new int[jj_expentries.size()][];
+    for (int i = 0; i < jj_expentries.size(); i++) {
+      exptokseq[i] = (int[])jj_expentries.elementAt(i);
+    }
+    return new ParseException(token, exptokseq, tokenImage);
+  }
+
+  final public void enable_tracing() {
+  }
+
+  final public void disable_tracing() {
+  }
+
+}
diff --git a/examples/actors/xlimAST/XmlParserConstants.java b/examples/actors/xlimAST/XmlParserConstants.java
new file mode 100644
index 0000000000000000000000000000000000000000..b2a627748f5150039bde5e4d34e9d9a2f4088457
--- /dev/null
+++ b/examples/actors/xlimAST/XmlParserConstants.java
@@ -0,0 +1,128 @@
+/* Generated By:JJTree&JavaCC: Do not edit this line. XmlParserConstants.java */
+package xlimAST;
+
+public interface XmlParserConstants {
+
+  int EOF = 0;
+  int XML = 7;
+  int DOCTYPE = 8;
+  int PUBLIC = 9;
+  int encoding = 10;
+  int version = 11;
+  int XsiNoNamespaceSchemaLocation = 12;
+  int XmlnsXsi = 13;
+  int portName = 14;
+  int module = 15;
+  int sourceName = 16;
+  int PHI = 17;
+  int kind = 18;
+  int initValue = 19;
+  int typeName = 20;
+  int port = 21;
+  int decision = 22;
+  int operation = 23;
+  int design = 24;
+  int stateVar = 25;
+  int size = 26;
+  int dir = 27;
+  int source = 28;
+  int value = 29;
+  int actor_port = 30;
+  int qualifier = 31;
+  int style = 32;
+  int removable = 33;
+  int autostart = 34;
+  int target = 35;
+  int name = 36;
+  int INTEGER_LITERAL = 37;
+  int DECIMAL_LITERAL = 38;
+  int HEX_LITERAL = 39;
+  int OCTAL_LITERAL = 40;
+  int FLOAT_LITERAL = 41;
+  int EXPONENT = 42;
+  int CHARACTER_LITERAL = 43;
+  int STRING_LITERAL = 44;
+  int IDENTIFIER = 45;
+  int LETTER = 46;
+  int DIGIT = 47;
+  int LBRACE = 48;
+  int RBRACE = 49;
+  int LBRACKET = 50;
+  int RBRACKET = 51;
+  int SEMICOLON = 52;
+  int LTSLASH = 53;
+  int LTBANG = 54;
+  int LT = 55;
+  int LTQ = 56;
+  int GT = 57;
+  int QGT = 58;
+  int ASSIGN = 59;
+
+  int DEFAULT = 0;
+  int BOUNDS = 1;
+
+  String[] tokenImage = {
+    "<EOF>",
+    "\" \"",
+    "\"\\t\"",
+    "\"\\n\"",
+    "\"\\r\"",
+    "\"\\f\"",
+    "<token of kind 6>",
+    "\"xml\"",
+    "\"DOCTYPE\"",
+    "\"PUBLIC\"",
+    "\"encoding\"",
+    "\"version\"",
+    "\"xsi:noNamespaceSchemaLocation\"",
+    "\"xmlns:xsi\"",
+    "\"portName\"",
+    "\"module\"",
+    "\"sourceName\"",
+    "\"PHI\"",
+    "\"kind\"",
+    "\"initValue\"",
+    "\"typeName\"",
+    "\"port\"",
+    "\"decision\"",
+    "\"operation\"",
+    "\"design\"",
+    "\"stateVar\"",
+    "\"size\"",
+    "\"dir\"",
+    "\"source\"",
+    "\"value\"",
+    "\"actor-port\"",
+    "\"qualifier\"",
+    "\"style\"",
+    "\"removable\"",
+    "\"autostart\"",
+    "\"target\"",
+    "\"name\"",
+    "<INTEGER_LITERAL>",
+    "<DECIMAL_LITERAL>",
+    "<HEX_LITERAL>",
+    "<OCTAL_LITERAL>",
+    "<FLOAT_LITERAL>",
+    "<EXPONENT>",
+    "<CHARACTER_LITERAL>",
+    "<STRING_LITERAL>",
+    "<IDENTIFIER>",
+    "<LETTER>",
+    "<DIGIT>",
+    "\"{\"",
+    "\"}\"",
+    "\"[\"",
+    "\"]\"",
+    "\";\"",
+    "\"</\"",
+    "\"<!\"",
+    "\"<\"",
+    "\"<?\"",
+    "\">\"",
+    "\"?>\"",
+    "\"=\"",
+    "\"/>\"",
+  };
+
+}
diff --git a/examples/actors/xlimAST/XmlParserTokenManager.java b/examples/actors/xlimAST/XmlParserTokenManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..84f31066b2a7276c5fe773f3028e52a736f2f3e0
--- /dev/null
+++ b/examples/actors/xlimAST/XmlParserTokenManager.java
@@ -0,0 +1,2433 @@
+/* Generated By:JJTree&JavaCC: Do not edit this line. XmlParserTokenManager.java */
+package xlimAST;
+
+public class XmlParserTokenManager implements XmlParserConstants
+{
+  public  java.io.PrintStream debugStream = System.out;
+  public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
+private final int jjStopStringLiteralDfa_0(int pos, long active0)
+{
+   switch (pos)
+   {
+      case 0:
+         if ((active0 & 0x1e0000000000000L) != 0L)
+            return 7;
+         if ((active0 & 0x1fffffff80L) != 0L)
+         {
+            jjmatchedKind = 45;
+            return 22;
+         }
+         return -1;
+      case 1:
+         if ((active0 & 0x1fffffff80L) != 0L)
+         {
+            jjmatchedKind = 45;
+            jjmatchedPos = 1;
+            return 22;
+         }
+         if ((active0 & 0x40000000000000L) != 0L)
+            return 6;
+         return -1;
+      case 2:
+         if ((active0 & 0x8022080L) != 0L)
+            return 22;
+         if ((active0 & 0x1ff7fddf00L) != 0L)
+         {
+            if (jjmatchedPos != 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return 22;
+         }
+         return -1;
+      case 3:
+         if ((active0 & 0x1004244000L) != 0L)
+            return 22;
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         if ((active0 & 0xff3d9af00L) != 0L)
+         {
+            if (jjmatchedPos != 3)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 3;
+            }
+            return 22;
+         }
+         return -1;
+      case 4:
+         if ((active0 & 0x120000000L) != 0L)
+            return 22;
+         if ((active0 & 0xed3d9ef00L) != 0L)
+         {
+            jjmatchedKind = 45;
+            jjmatchedPos = 4;
+            return 22;
+         }
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 5:
+         if ((active0 & 0x811018200L) != 0L)
+            return 22;
+         if ((active0 & 0x2000L) != 0L)
+         {
+            if (jjmatchedPos < 4)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 4;
+            }
+            return -1;
+         }
+         if ((active0 & 0x6c2d84d00L) != 0L)
+         {
+            if (jjmatchedPos != 5)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 5;
+            }
+            return 22;
+         }
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 6:
+         if ((active0 & 0x900L) != 0L)
+            return 22;
+         if ((active0 & 0x2000L) != 0L)
+         {
+            if (jjmatchedPos < 4)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 4;
+            }
+            return -1;
+         }
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         if ((active0 & 0x6c2d94400L) != 0L)
+         {
+            jjmatchedKind = 45;
+            jjmatchedPos = 6;
+            return 22;
+         }
+         return -1;
+      case 7:
+         if ((active0 & 0x2504400L) != 0L)
+            return 22;
+         if ((active0 & 0x2000L) != 0L)
+         {
+            if (jjmatchedPos < 4)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 4;
+            }
+            return -1;
+         }
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         if ((active0 & 0x6c0890000L) != 0L)
+         {
+            jjmatchedKind = 45;
+            jjmatchedPos = 7;
+            return 22;
+         }
+         return -1;
+      case 8:
+         if ((active0 & 0x680880000L) != 0L)
+            return 22;
+         if ((active0 & 0x40010000L) != 0L)
+         {
+            jjmatchedKind = 45;
+            jjmatchedPos = 8;
+            return 22;
+         }
+         if ((active0 & 0x2000L) != 0L)
+         {
+            if (jjmatchedPos < 4)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 4;
+            }
+            return -1;
+         }
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 9:
+         if ((active0 & 0x40010000L) != 0L)
+            return 22;
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 10:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 11:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 12:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 13:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 14:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 15:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 16:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 17:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 18:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 19:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 20:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 21:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 22:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 23:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 24:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 25:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 26:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      case 27:
+         if ((active0 & 0x1000L) != 0L)
+         {
+            if (jjmatchedPos < 2)
+            {
+               jjmatchedKind = 45;
+               jjmatchedPos = 2;
+            }
+            return -1;
+         }
+         return -1;
+      default :
+         return -1;
+   }
+}
+private final int jjStartNfa_0(int pos, long active0)
+{
+   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
+}
+private final int jjStopAtPos(int pos, int kind)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   return pos + 1;
+}
+private final int jjStartNfaWithStates_0(int pos, int kind, int state)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) { return pos + 1; }
+   return jjMoveNfa_0(state, pos + 1);
+}
+private final int jjMoveStringLiteralDfa0_0()
+{
+   switch(curChar)
+   {
+      case 9:
+         return jjStopAtPos(0, 2);
+      case 10:
+         return jjStopAtPos(0, 3);
+      case 12:
+         return jjStopAtPos(0, 5);
+      case 13:
+         return jjStopAtPos(0, 4);
+      case 32:
+         return jjStopAtPos(0, 1);
+      case 47:
+         return jjMoveStringLiteralDfa1_0(0x1000000000000000L);
+      case 59:
+         return jjStopAtPos(0, 52);
+      case 60:
+         jjmatchedKind = 55;
+         return jjMoveStringLiteralDfa1_0(0x160000000000000L);
+      case 61:
+         return jjStopAtPos(0, 59);
+      case 62:
+         return jjStopAtPos(0, 57);
+      case 63:
+         return jjMoveStringLiteralDfa1_0(0x400000000000000L);
+      case 68:
+         return jjMoveStringLiteralDfa1_0(0x100L);
+      case 80:
+         return jjMoveStringLiteralDfa1_0(0x20200L);
+      case 91:
+         return jjStopAtPos(0, 50);
+      case 93:
+         return jjStopAtPos(0, 51);
+      case 97:
+         return jjMoveStringLiteralDfa1_0(0x440000000L);
+      case 100:
+         return jjMoveStringLiteralDfa1_0(0x9400000L);
+      case 101:
+         return jjMoveStringLiteralDfa1_0(0x400L);
+      case 105:
+         return jjMoveStringLiteralDfa1_0(0x80000L);
+      case 107:
+         return jjMoveStringLiteralDfa1_0(0x40000L);
+      case 109:
+         return jjMoveStringLiteralDfa1_0(0x8000L);
+      case 110:
+         return jjMoveStringLiteralDfa1_0(0x1000000000L);
+      case 111:
+         return jjMoveStringLiteralDfa1_0(0x800000L);
+      case 112:
+         return jjMoveStringLiteralDfa1_0(0x204000L);
+      case 113:
+         return jjMoveStringLiteralDfa1_0(0x80000000L);
+      case 114:
+         return jjMoveStringLiteralDfa1_0(0x200000000L);
+      case 115:
+         return jjMoveStringLiteralDfa1_0(0x116010000L);
+      case 116:
+         return jjMoveStringLiteralDfa1_0(0x800100000L);
+      case 118:
+         return jjMoveStringLiteralDfa1_0(0x20000800L);
+      case 120:
+         return jjMoveStringLiteralDfa1_0(0x3080L);
+      case 123:
+         return jjStopAtPos(0, 48);
+      case 125:
+         return jjStopAtPos(0, 49);
+      default :
+         return jjMoveNfa_0(8, 0);
+   }
+}
+private final int jjMoveStringLiteralDfa1_0(long active0)
+{
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(0, active0);
+      return 1;
+   }
+   switch(curChar)
+   {
+      case 33:
+         if ((active0 & 0x40000000000000L) != 0L)
+            return jjStartNfaWithStates_0(1, 54, 6);
+         break;
+      case 47:
+         if ((active0 & 0x20000000000000L) != 0L)
+            return jjStopAtPos(1, 53);
+         break;
+      case 62:
+         if ((active0 & 0x400000000000000L) != 0L)
+            return jjStopAtPos(1, 58);
+         else if ((active0 & 0x1000000000000000L) != 0L)
+            return jjStopAtPos(1, 60);
+         break;
+      case 63:
+         if ((active0 & 0x100000000000000L) != 0L)
+            return jjStopAtPos(1, 56);
+         break;
+      case 72:
+         return jjMoveStringLiteralDfa2_0(active0, 0x20000L);
+      case 79:
+         return jjMoveStringLiteralDfa2_0(active0, 0x100L);
+      case 85:
+         return jjMoveStringLiteralDfa2_0(active0, 0x200L);
+      case 97:
+         return jjMoveStringLiteralDfa2_0(active0, 0x1820000000L);
+      case 99:
+         return jjMoveStringLiteralDfa2_0(active0, 0x40000000L);
+      case 101:
+         return jjMoveStringLiteralDfa2_0(active0, 0x201400800L);
+      case 105:
+         return jjMoveStringLiteralDfa2_0(active0, 0xc040000L);
+      case 109:
+         return jjMoveStringLiteralDfa2_0(active0, 0x2080L);
+      case 110:
+         return jjMoveStringLiteralDfa2_0(active0, 0x80400L);
+      case 111:
+         return jjMoveStringLiteralDfa2_0(active0, 0x1021c000L);
+      case 112:
+         return jjMoveStringLiteralDfa2_0(active0, 0x800000L);
+      case 115:
+         return jjMoveStringLiteralDfa2_0(active0, 0x1000L);
+      case 116:
+         return jjMoveStringLiteralDfa2_0(active0, 0x102000000L);
+      case 117:
+         return jjMoveStringLiteralDfa2_0(active0, 0x480000000L);
+      case 121:
+         return jjMoveStringLiteralDfa2_0(active0, 0x100000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(0, active0);
+}
+private final int jjMoveStringLiteralDfa2_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(0, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(1, active0);
+      return 2;
+   }
+   switch(curChar)
+   {
+      case 66:
+         return jjMoveStringLiteralDfa3_0(active0, 0x200L);
+      case 67:
+         return jjMoveStringLiteralDfa3_0(active0, 0x100L);
+      case 73:
+         if ((active0 & 0x20000L) != 0L)
+            return jjStartNfaWithStates_0(2, 17, 22);
+         break;
+      case 97:
+         return jjMoveStringLiteralDfa3_0(active0, 0x82000000L);
+      case 99:
+         return jjMoveStringLiteralDfa3_0(active0, 0x400400L);
+      case 100:
+         return jjMoveStringLiteralDfa3_0(active0, 0x8000L);
+      case 101:
+         return jjMoveStringLiteralDfa3_0(active0, 0x800000L);
+      case 105:
+         return jjMoveStringLiteralDfa3_0(active0, 0x81000L);
+      case 108:
+         if ((active0 & 0x80L) != 0L)
+         {
+            jjmatchedKind = 7;
+            jjmatchedPos = 2;
+         }
+         return jjMoveStringLiteralDfa3_0(active0, 0x20002000L);
+      case 109:
+         return jjMoveStringLiteralDfa3_0(active0, 0x1200000000L);
+      case 110:
+         return jjMoveStringLiteralDfa3_0(active0, 0x40000L);
+      case 112:
+         return jjMoveStringLiteralDfa3_0(active0, 0x100000L);
+      case 114:
+         if ((active0 & 0x8000000L) != 0L)
+            return jjStartNfaWithStates_0(2, 27, 22);
+         return jjMoveStringLiteralDfa3_0(active0, 0x800204800L);
+      case 115:
+         return jjMoveStringLiteralDfa3_0(active0, 0x1000000L);
+      case 116:
+         return jjMoveStringLiteralDfa3_0(active0, 0x440000000L);
+      case 117:
+         return jjMoveStringLiteralDfa3_0(active0, 0x10010000L);
+      case 121:
+         return jjMoveStringLiteralDfa3_0(active0, 0x100000000L);
+      case 122:
+         return jjMoveStringLiteralDfa3_0(active0, 0x4000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(1, active0);
+}
+private final int jjMoveStringLiteralDfa3_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(1, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(2, active0);
+      return 3;
+   }
+   switch(curChar)
+   {
+      case 58:
+         return jjMoveStringLiteralDfa4_0(active0, 0x1000L);
+      case 76:
+         return jjMoveStringLiteralDfa4_0(active0, 0x200L);
+      case 84:
+         return jjMoveStringLiteralDfa4_0(active0, 0x100L);
+      case 100:
+         if ((active0 & 0x40000L) != 0L)
+            return jjStartNfaWithStates_0(3, 18, 22);
+         break;
+      case 101:
+         if ((active0 & 0x4000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 26, 22);
+         else if ((active0 & 0x1000000000L) != 0L)
+            return jjStartNfaWithStates_0(3, 36, 22);
+         return jjMoveStringLiteralDfa4_0(active0, 0x100000L);
+      case 103:
+         return jjMoveStringLiteralDfa4_0(active0, 0x800000000L);
+      case 105:
+         return jjMoveStringLiteralDfa4_0(active0, 0x1400000L);
+      case 108:
+         return jjMoveStringLiteralDfa4_0(active0, 0x180000000L);
+      case 110:
+         return jjMoveStringLiteralDfa4_0(active0, 0x2000L);
+      case 111:
+         return jjMoveStringLiteralDfa4_0(active0, 0x640000400L);
+      case 114:
+         return jjMoveStringLiteralDfa4_0(active0, 0x10810000L);
+      case 115:
+         return jjMoveStringLiteralDfa4_0(active0, 0x800L);
+      case 116:
+         if ((active0 & 0x200000L) != 0L)
+         {
+            jjmatchedKind = 21;
+            jjmatchedPos = 3;
+         }
+         return jjMoveStringLiteralDfa4_0(active0, 0x2084000L);
+      case 117:
+         return jjMoveStringLiteralDfa4_0(active0, 0x20008000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(2, active0);
+}
+private final int jjMoveStringLiteralDfa4_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(2, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(3, active0);
+      return 4;
+   }
+   switch(curChar)
+   {
+      case 73:
+         return jjMoveStringLiteralDfa5_0(active0, 0x200L);
+      case 78:
+         return jjMoveStringLiteralDfa5_0(active0, 0x104000L);
+      case 86:
+         return jjMoveStringLiteralDfa5_0(active0, 0x80000L);
+      case 89:
+         return jjMoveStringLiteralDfa5_0(active0, 0x100L);
+      case 97:
+         return jjMoveStringLiteralDfa5_0(active0, 0x800000L);
+      case 99:
+         return jjMoveStringLiteralDfa5_0(active0, 0x10010000L);
+      case 100:
+         return jjMoveStringLiteralDfa5_0(active0, 0x400L);
+      case 101:
+         if ((active0 & 0x20000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 29, 22);
+         else if ((active0 & 0x100000000L) != 0L)
+            return jjStartNfaWithStates_0(4, 32, 22);
+         return jjMoveStringLiteralDfa5_0(active0, 0x802000000L);
+      case 103:
+         return jjMoveStringLiteralDfa5_0(active0, 0x1000000L);
+      case 105:
+         return jjMoveStringLiteralDfa5_0(active0, 0x80000800L);
+      case 108:
+         return jjMoveStringLiteralDfa5_0(active0, 0x8000L);
+      case 110:
+         return jjMoveStringLiteralDfa5_0(active0, 0x1000L);
+      case 114:
+         return jjMoveStringLiteralDfa5_0(active0, 0x40000000L);
+      case 115:
+         return jjMoveStringLiteralDfa5_0(active0, 0x400402000L);
+      case 118:
+         return jjMoveStringLiteralDfa5_0(active0, 0x200000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(3, active0);
+}
+private final int jjMoveStringLiteralDfa5_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(3, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(4, active0);
+      return 5;
+   }
+   switch(curChar)
+   {
+      case 45:
+         return jjMoveStringLiteralDfa6_0(active0, 0x40000000L);
+      case 58:
+         return jjMoveStringLiteralDfa6_0(active0, 0x2000L);
+      case 67:
+         if ((active0 & 0x200L) != 0L)
+            return jjStartNfaWithStates_0(5, 9, 22);
+         break;
+      case 80:
+         return jjMoveStringLiteralDfa6_0(active0, 0x100L);
+      case 86:
+         return jjMoveStringLiteralDfa6_0(active0, 0x2000000L);
+      case 97:
+         return jjMoveStringLiteralDfa6_0(active0, 0x200184000L);
+      case 101:
+         if ((active0 & 0x8000L) != 0L)
+            return jjStartNfaWithStates_0(5, 15, 22);
+         else if ((active0 & 0x10000000L) != 0L)
+         {
+            jjmatchedKind = 28;
+            jjmatchedPos = 5;
+         }
+         return jjMoveStringLiteralDfa6_0(active0, 0x10000L);
+      case 102:
+         return jjMoveStringLiteralDfa6_0(active0, 0x80000000L);
+      case 105:
+         return jjMoveStringLiteralDfa6_0(active0, 0x400400L);
+      case 110:
+         if ((active0 & 0x1000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 24, 22);
+         break;
+      case 111:
+         return jjMoveStringLiteralDfa6_0(active0, 0x1800L);
+      case 116:
+         if ((active0 & 0x800000000L) != 0L)
+            return jjStartNfaWithStates_0(5, 35, 22);
+         return jjMoveStringLiteralDfa6_0(active0, 0x400800000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(4, active0);
+}
+private final int jjMoveStringLiteralDfa6_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(4, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(5, active0);
+      return 6;
+   }
+   switch(curChar)
+   {
+      case 69:
+         if ((active0 & 0x100L) != 0L)
+            return jjStartNfaWithStates_0(6, 8, 22);
+         break;
+      case 78:
+         return jjMoveStringLiteralDfa7_0(active0, 0x11000L);
+      case 97:
+         return jjMoveStringLiteralDfa7_0(active0, 0x402000000L);
+      case 98:
+         return jjMoveStringLiteralDfa7_0(active0, 0x200000000L);
+      case 105:
+         return jjMoveStringLiteralDfa7_0(active0, 0x80800000L);
+      case 108:
+         return jjMoveStringLiteralDfa7_0(active0, 0x80000L);
+      case 109:
+         return jjMoveStringLiteralDfa7_0(active0, 0x104000L);
+      case 110:
+         if ((active0 & 0x800L) != 0L)
+            return jjStartNfaWithStates_0(6, 11, 22);
+         return jjMoveStringLiteralDfa7_0(active0, 0x400L);
+      case 111:
+         return jjMoveStringLiteralDfa7_0(active0, 0x400000L);
+      case 112:
+         return jjMoveStringLiteralDfa7_0(active0, 0x40000000L);
+      case 120:
+         return jjMoveStringLiteralDfa7_0(active0, 0x2000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(5, active0);
+}
+private final int jjMoveStringLiteralDfa7_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(5, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(6, active0);
+      return 7;
+   }
+   switch(curChar)
+   {
+      case 97:
+         return jjMoveStringLiteralDfa8_0(active0, 0x11000L);
+      case 101:
+         if ((active0 & 0x4000L) != 0L)
+            return jjStartNfaWithStates_0(7, 14, 22);
+         else if ((active0 & 0x100000L) != 0L)
+            return jjStartNfaWithStates_0(7, 20, 22);
+         return jjMoveStringLiteralDfa8_0(active0, 0x80000000L);
+      case 103:
+         if ((active0 & 0x400L) != 0L)
+            return jjStartNfaWithStates_0(7, 10, 22);
+         break;
+      case 108:
+         return jjMoveStringLiteralDfa8_0(active0, 0x200000000L);
+      case 110:
+         if ((active0 & 0x400000L) != 0L)
+            return jjStartNfaWithStates_0(7, 22, 22);
+         break;
+      case 111:
+         return jjMoveStringLiteralDfa8_0(active0, 0x40800000L);
+      case 114:
+         if ((active0 & 0x2000000L) != 0L)
+            return jjStartNfaWithStates_0(7, 25, 22);
+         return jjMoveStringLiteralDfa8_0(active0, 0x400000000L);
+      case 115:
+         return jjMoveStringLiteralDfa8_0(active0, 0x2000L);
+      case 117:
+         return jjMoveStringLiteralDfa8_0(active0, 0x80000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(6, active0);
+}
+private final int jjMoveStringLiteralDfa8_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(6, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(7, active0);
+      return 8;
+   }
+   switch(curChar)
+   {
+      case 101:
+         if ((active0 & 0x80000L) != 0L)
+            return jjStartNfaWithStates_0(8, 19, 22);
+         else if ((active0 & 0x200000000L) != 0L)
+            return jjStartNfaWithStates_0(8, 33, 22);
+         break;
+      case 105:
+         if ((active0 & 0x2000L) != 0L)
+            return jjStopAtPos(8, 13);
+         break;
+      case 109:
+         return jjMoveStringLiteralDfa9_0(active0, 0x11000L);
+      case 110:
+         if ((active0 & 0x800000L) != 0L)
+            return jjStartNfaWithStates_0(8, 23, 22);
+         break;
+      case 114:
+         if ((active0 & 0x80000000L) != 0L)
+            return jjStartNfaWithStates_0(8, 31, 22);
+         return jjMoveStringLiteralDfa9_0(active0, 0x40000000L);
+      case 116:
+         if ((active0 & 0x400000000L) != 0L)
+            return jjStartNfaWithStates_0(8, 34, 22);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(7, active0);
+}
+private final int jjMoveStringLiteralDfa9_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(7, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(8, active0);
+      return 9;
+   }
+   switch(curChar)
+   {
+      case 101:
+         if ((active0 & 0x10000L) != 0L)
+            return jjStartNfaWithStates_0(9, 16, 22);
+         return jjMoveStringLiteralDfa10_0(active0, 0x1000L);
+      case 116:
+         if ((active0 & 0x40000000L) != 0L)
+            return jjStartNfaWithStates_0(9, 30, 22);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(8, active0);
+}
+private final int jjMoveStringLiteralDfa10_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(8, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(9, active0);
+      return 10;
+   }
+   switch(curChar)
+   {
+      case 115:
+         return jjMoveStringLiteralDfa11_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(9, active0);
+}
+private final int jjMoveStringLiteralDfa11_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(9, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(10, active0);
+      return 11;
+   }
+   switch(curChar)
+   {
+      case 112:
+         return jjMoveStringLiteralDfa12_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(10, active0);
+}
+private final int jjMoveStringLiteralDfa12_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(10, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(11, active0);
+      return 12;
+   }
+   switch(curChar)
+   {
+      case 97:
+         return jjMoveStringLiteralDfa13_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(11, active0);
+}
+private final int jjMoveStringLiteralDfa13_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(11, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(12, active0);
+      return 13;
+   }
+   switch(curChar)
+   {
+      case 99:
+         return jjMoveStringLiteralDfa14_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(12, active0);
+}
+private final int jjMoveStringLiteralDfa14_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(12, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(13, active0);
+      return 14;
+   }
+   switch(curChar)
+   {
+      case 101:
+         return jjMoveStringLiteralDfa15_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(13, active0);
+}
+private final int jjMoveStringLiteralDfa15_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(13, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(14, active0);
+      return 15;
+   }
+   switch(curChar)
+   {
+      case 83:
+         return jjMoveStringLiteralDfa16_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(14, active0);
+}
+private final int jjMoveStringLiteralDfa16_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(14, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(15, active0);
+      return 16;
+   }
+   switch(curChar)
+   {
+      case 99:
+         return jjMoveStringLiteralDfa17_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(15, active0);
+}
+private final int jjMoveStringLiteralDfa17_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(15, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(16, active0);
+      return 17;
+   }
+   switch(curChar)
+   {
+      case 104:
+         return jjMoveStringLiteralDfa18_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(16, active0);
+}
+private final int jjMoveStringLiteralDfa18_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(16, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(17, active0);
+      return 18;
+   }
+   switch(curChar)
+   {
+      case 101:
+         return jjMoveStringLiteralDfa19_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(17, active0);
+}
+private final int jjMoveStringLiteralDfa19_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(17, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(18, active0);
+      return 19;
+   }
+   switch(curChar)
+   {
+      case 109:
+         return jjMoveStringLiteralDfa20_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(18, active0);
+}
+private final int jjMoveStringLiteralDfa20_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(18, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(19, active0);
+      return 20;
+   }
+   switch(curChar)
+   {
+      case 97:
+         return jjMoveStringLiteralDfa21_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(19, active0);
+}
+private final int jjMoveStringLiteralDfa21_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(19, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(20, active0);
+      return 21;
+   }
+   switch(curChar)
+   {
+      case 76:
+         return jjMoveStringLiteralDfa22_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(20, active0);
+}
+private final int jjMoveStringLiteralDfa22_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(20, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(21, active0);
+      return 22;
+   }
+   switch(curChar)
+   {
+      case 111:
+         return jjMoveStringLiteralDfa23_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(21, active0);
+}
+private final int jjMoveStringLiteralDfa23_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(21, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(22, active0);
+      return 23;
+   }
+   switch(curChar)
+   {
+      case 99:
+         return jjMoveStringLiteralDfa24_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(22, active0);
+}
+private final int jjMoveStringLiteralDfa24_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(22, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(23, active0);
+      return 24;
+   }
+   switch(curChar)
+   {
+      case 97:
+         return jjMoveStringLiteralDfa25_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(23, active0);
+}
+private final int jjMoveStringLiteralDfa25_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(23, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(24, active0);
+      return 25;
+   }
+   switch(curChar)
+   {
+      case 116:
+         return jjMoveStringLiteralDfa26_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(24, active0);
+}
+private final int jjMoveStringLiteralDfa26_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(24, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(25, active0);
+      return 26;
+   }
+   switch(curChar)
+   {
+      case 105:
+         return jjMoveStringLiteralDfa27_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(25, active0);
+}
+private final int jjMoveStringLiteralDfa27_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(25, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(26, active0);
+      return 27;
+   }
+   switch(curChar)
+   {
+      case 111:
+         return jjMoveStringLiteralDfa28_0(active0, 0x1000L);
+      default :
+         break;
+   }
+   return jjStartNfa_0(26, active0);
+}
+private final int jjMoveStringLiteralDfa28_0(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_0(26, old0); 
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(27, active0);
+      return 28;
+   }
+   switch(curChar)
+   {
+      case 110:
+         if ((active0 & 0x1000L) != 0L)
+            return jjStopAtPos(28, 12);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(27, active0);
+}
+private final void jjCheckNAdd(int state)
+{
+   if (jjrounds[state] != jjround)
+   {
+      jjstateSet[jjnewStateCnt++] = state;
+      jjrounds[state] = jjround;
+   }
+}
+private final void jjAddStates(int start, int end)
+{
+   do {
+      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
+   } while (start++ != end);
+}
+private final void jjCheckNAddTwoStates(int state1, int state2)
+{
+   jjCheckNAdd(state1);
+   jjCheckNAdd(state2);
+}
+private final void jjCheckNAddStates(int start, int end)
+{
+   do {
+      jjCheckNAdd(jjnextStates[start]);
+   } while (start++ != end);
+}
+private final void jjCheckNAddStates(int start)
+{
+   jjCheckNAdd(jjnextStates[start]);
+   jjCheckNAdd(jjnextStates[start + 1]);
+}
+static final long[] jjbitVec0 = {
+   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+static final long[] jjbitVec2 = {
+   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+static final long[] jjbitVec3 = {
+   0x1ff00000fffffffeL, 0xffffffffffffc000L, 0xffffffffL, 0x600000000000000L
+};
+static final long[] jjbitVec4 = {
+   0x0L, 0x0L, 0x0L, 0xff7fffffff7fffffL
+};
+static final long[] jjbitVec5 = {
+   0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+static final long[] jjbitVec6 = {
+   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffL, 0x0L
+};
+static final long[] jjbitVec7 = {
+   0xffffffffffffffffL, 0xffffffffffffffffL, 0x0L, 0x0L
+};
+static final long[] jjbitVec8 = {
+   0x3fffffffffffL, 0x0L, 0x0L, 0x0L
+};
+private final int jjMoveNfa_0(int startState, int curPos)
+{
+   int[] nextStates;
+   int startsAt = 0;
+   jjnewStateCnt = 53;
+   int i = 1;
+   jjstateSet[0] = startState;
+   int j, kind = 0x7fffffff;
+   for (;;)
+   {
+      if (++jjround == 0x7fffffff)
+         ReInitRounds();
+      if (curChar < 64)
+      {
+         long l = 1L << curChar;
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 8:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(0, 6);
+                  else if (curChar == 39)
+                     jjCheckNAddStates(7, 10);
+                  else if (curChar == 36)
+                  {
+                     if (kind > 45)
+                        kind = 45;
+                     jjCheckNAdd(22);
+                  }
+                  else if (curChar == 34)
+                     jjCheckNAddTwoStates(19, 20);
+                  else if (curChar == 46)
+                     jjCheckNAdd(13);
+                  else if (curChar == 60)
+                     jjstateSet[jjnewStateCnt++] = 7;
+                  if ((0x3fe000000000000L & l) != 0L)
+                  {
+                     if (kind > 37)
+                        kind = 37;
+                     jjCheckNAddTwoStates(10, 11);
+                  }
+                  else if (curChar == 48)
+                  {
+                     if (kind > 37)
+                        kind = 37;
+                     jjCheckNAddStates(11, 13);
+                  }
+                  break;
+               case 0:
+                  if (curChar == 45)
+                     jjCheckNAddStates(14, 16);
+                  break;
+               case 1:
+                  if ((0xffffdfffffffffffL & l) != 0L)
+                     jjCheckNAddStates(14, 16);
+                  break;
+               case 2:
+                  if (curChar == 45)
+                     jjCheckNAdd(1);
+                  break;
+               case 3:
+                  if (curChar == 62 && kind > 6)
+                     kind = 6;
+                  break;
+               case 4:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 3;
+                  break;
+               case 5:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 4;
+                  break;
+               case 6:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 0;
+                  break;
+               case 7:
+                  if (curChar == 33)
+                     jjstateSet[jjnewStateCnt++] = 6;
+                  break;
+               case 9:
+                  if ((0x3fe000000000000L & l) == 0L)
+                     break;
+                  if (kind > 37)
+                     kind = 37;
+                  jjCheckNAddTwoStates(10, 11);
+                  break;
+               case 10:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 37)
+                     kind = 37;
+                  jjCheckNAddTwoStates(10, 11);
+                  break;
+               case 12:
+                  if (curChar == 46)
+                     jjCheckNAdd(13);
+                  break;
+               case 13:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 41)
+                     kind = 41;
+                  jjCheckNAddStates(17, 19);
+                  break;
+               case 15:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(16);
+                  break;
+               case 16:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 41)
+                     kind = 41;
+                  jjCheckNAddTwoStates(16, 17);
+                  break;
+               case 18:
+                  if (curChar == 34)
+                     jjCheckNAddTwoStates(19, 20);
+                  break;
+               case 19:
+                  if ((0xfffffffbffffdbffL & l) != 0L)
+                     jjCheckNAddTwoStates(19, 20);
+                  break;
+               case 20:
+                  if (curChar == 34 && kind > 44)
+                     kind = 44;
+                  break;
+               case 21:
+                  if (curChar != 36)
+                     break;
+                  if (kind > 45)
+                     kind = 45;
+                  jjCheckNAdd(22);
+                  break;
+               case 22:
+                  if ((0x3ff201000000000L & l) == 0L)
+                     break;
+                  if (kind > 45)
+                     kind = 45;
+                  jjCheckNAdd(22);
+                  break;
+               case 23:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(0, 6);
+                  break;
+               case 24:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(24, 25);
+                  break;
+               case 25:
+                  if (curChar != 46)
+                     break;
+                  if (kind > 41)
+                     kind = 41;
+                  jjCheckNAddStates(20, 22);
+                  break;
+               case 26:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 41)
+                     kind = 41;
+                  jjCheckNAddStates(20, 22);
+                  break;
+               case 28:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(29);
+                  break;
+               case 29:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 41)
+                     kind = 41;
+                  jjCheckNAddTwoStates(29, 17);
+                  break;
+               case 30:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(30, 31);
+                  break;
+               case 32:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(33);
+                  break;
+               case 33:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 41)
+                     kind = 41;
+                  jjCheckNAddTwoStates(33, 17);
+                  break;
+               case 34:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 36:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(37);
+                  break;
+               case 37:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(37, 17);
+                  break;
+               case 38:
+                  if (curChar != 48)
+                     break;
+                  if (kind > 37)
+                     kind = 37;
+                  jjCheckNAddStates(11, 13);
+                  break;
+               case 40:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 37)
+                     kind = 37;
+                  jjCheckNAddTwoStates(40, 11);
+                  break;
+               case 41:
+                  if ((0xff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 37)
+                     kind = 37;
+                  jjCheckNAddTwoStates(41, 11);
+                  break;
+               case 42:
+                  if (curChar == 39)
+                     jjCheckNAddStates(7, 10);
+                  break;
+               case 43:
+                  if ((0xffffff7fffffdbffL & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 44:
+                  if (curChar == 39 && kind > 43)
+                     kind = 43;
+                  break;
+               case 46:
+                  if ((0x8400000000L & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 47:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(48, 44);
+                  break;
+               case 48:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 49:
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 50;
+                  break;
+               case 50:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAdd(48);
+                  break;
+               case 51:
+                  if ((0xffffff7fffffdbffL & l) != 0L)
+                     jjCheckNAddTwoStates(51, 52);
+                  break;
+               case 52:
+                  if (curChar == 39 && kind > 44)
+                     kind = 44;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 8:
+               case 22:
+                  if ((0x7fffffe87fffffeL & l) == 0L)
+                     break;
+                  if (kind > 45)
+                     kind = 45;
+                  jjCheckNAdd(22);
+                  break;
+               case 1:
+                  jjAddStates(14, 16);
+                  break;
+               case 11:
+                  if ((0x100000001000L & l) != 0L && kind > 37)
+                     kind = 37;
+                  break;
+               case 14:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(26, 27);
+                  break;
+               case 17:
+                  if ((0x5000000050L & l) != 0L && kind > 41)
+                     kind = 41;
+                  break;
+               case 19:
+                  jjAddStates(28, 29);
+                  break;
+               case 27:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(30, 31);
+                  break;
+               case 31:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(32, 33);
+                  break;
+               case 35:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(34, 35);
+                  break;
+               case 39:
+                  if ((0x100000001000000L & l) != 0L)
+                     jjCheckNAdd(40);
+                  break;
+               case 40:
+                  if ((0x7e0000007eL & l) == 0L)
+                     break;
+                  if (kind > 37)
+                     kind = 37;
+                  jjCheckNAddTwoStates(40, 11);
+                  break;
+               case 43:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 45:
+                  if (curChar == 92)
+                     jjAddStates(36, 38);
+                  break;
+               case 46:
+                  if ((0x14404410000000L & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 51:
+                  jjAddStates(39, 40);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else
+      {
+         int hiByte = (int)(curChar >> 8);
+         int i1 = hiByte >> 6;
+         long l1 = 1L << (hiByte & 077);
+         int i2 = (curChar & 0xff) >> 6;
+         long l2 = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 8:
+               case 22:
+                  if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 45)
+                     kind = 45;
+                  jjCheckNAdd(22);
+                  break;
+               case 1:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(14, 16);
+                  break;
+               case 19:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(28, 29);
+                  break;
+               case 43:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjstateSet[jjnewStateCnt++] = 44;
+                  break;
+               case 51:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(39, 40);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 53 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
+private final int jjStopStringLiteralDfa_1(int pos, long active0)
+{
+   switch (pos)
+   {
+      case 0:
+         if ((active0 & 0x1e0000000000000L) != 0L)
+            return 7;
+         return -1;
+      default :
+         return -1;
+   }
+}
+private final int jjStartNfa_1(int pos, long active0)
+{
+   return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1);
+}
+private final int jjStartNfaWithStates_1(int pos, int kind, int state)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) { return pos + 1; }
+   return jjMoveNfa_1(state, pos + 1);
+}
+private final int jjMoveStringLiteralDfa0_1()
+{
+   switch(curChar)
+   {
+      case 9:
+         return jjStopAtPos(0, 2);
+      case 10:
+         return jjStopAtPos(0, 3);
+      case 12:
+         return jjStopAtPos(0, 5);
+      case 13:
+         return jjStopAtPos(0, 4);
+      case 32:
+         return jjStopAtPos(0, 1);
+      case 59:
+         return jjStopAtPos(0, 52);
+      case 60:
+         jjmatchedKind = 55;
+         return jjMoveStringLiteralDfa1_1(0x160000000000000L);
+      case 61:
+         return jjStopAtPos(0, 59);
+      case 62:
+         return jjStopAtPos(0, 57);
+      case 63:
+         return jjMoveStringLiteralDfa1_1(0x400000000000000L);
+      case 91:
+         return jjStopAtPos(0, 50);
+      case 93:
+         return jjStopAtPos(0, 51);
+      case 123:
+         return jjStopAtPos(0, 48);
+      case 125:
+         return jjStopAtPos(0, 49);
+      default :
+         return jjMoveNfa_1(8, 0);
+   }
+}
+private final int jjMoveStringLiteralDfa1_1(long active0)
+{
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_1(0, active0);
+      return 1;
+   }
+   switch(curChar)
+   {
+      case 33:
+         if ((active0 & 0x40000000000000L) != 0L)
+            return jjStartNfaWithStates_1(1, 54, 6);
+         break;
+      case 47:
+         if ((active0 & 0x20000000000000L) != 0L)
+            return jjStopAtPos(1, 53);
+         break;
+      case 62:
+         if ((active0 & 0x400000000000000L) != 0L)
+            return jjStopAtPos(1, 58);
+         break;
+      case 63:
+         if ((active0 & 0x100000000000000L) != 0L)
+            return jjStopAtPos(1, 56);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_1(0, active0);
+}
+private final int jjMoveNfa_1(int startState, int curPos)
+{
+   int[] nextStates;
+   int startsAt = 0;
+   jjnewStateCnt = 53;
+   int i = 1;
+   jjstateSet[0] = startState;
+   int j, kind = 0x7fffffff;
+   for (;;)
+   {
+      if (++jjround == 0x7fffffff)
+         ReInitRounds();
+      if (curChar < 64)
+      {
+         long l = 1L << curChar;
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 8:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(0, 6);
+                  else if (curChar == 39)
+                     jjCheckNAddStates(7, 10);
+                  else if (curChar == 36)
+                  {
+                     if (kind > 45)
+                        kind = 45;
+                     jjCheckNAdd(22);
+                  }
+                  else if (curChar == 34)
+                     jjCheckNAddTwoStates(19, 20);
+                  else if (curChar == 46)
+                     jjCheckNAdd(13);
+                  else if (curChar == 60)
+                     jjstateSet[jjnewStateCnt++] = 7;
+                  if ((0x3fe000000000000L & l) != 0L)
+                  {
+                     if (kind > 37)
+                        kind = 37;
+                     jjCheckNAddTwoStates(10, 11);
+                  }
+                  else if (curChar == 48)
+                  {
+                     if (kind > 37)
+                        kind = 37;
+                     jjCheckNAddStates(11, 13);
+                  }
+                  break;
+               case 0:
+                  if (curChar == 45)
+                     jjCheckNAddStates(14, 16);
+                  break;
+               case 1:
+                  if ((0xffffdfffffffffffL & l) != 0L)
+                     jjCheckNAddStates(14, 16);
+                  break;
+               case 2:
+                  if (curChar == 45)
+                     jjCheckNAdd(1);
+                  break;
+               case 3:
+                  if (curChar == 62 && kind > 6)
+                     kind = 6;
+                  break;
+               case 4:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 3;
+                  break;
+               case 5:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 4;
+                  break;
+               case 6:
+                  if (curChar == 45)
+                     jjstateSet[jjnewStateCnt++] = 0;
+                  break;
+               case 7:
+                  if (curChar == 33)
+                     jjstateSet[jjnewStateCnt++] = 6;
+                  break;
+               case 9:
+                  if ((0x3fe000000000000L & l) == 0L)
+                     break;
+                  if (kind > 37)
+                     kind = 37;
+                  jjCheckNAddTwoStates(10, 11);
+                  break;
+               case 10:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 37)
+                     kind = 37;
+                  jjCheckNAddTwoStates(10, 11);
+                  break;
+               case 12:
+                  if (curChar == 46)
+                     jjCheckNAdd(13);
+                  break;
+               case 13:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 41)
+                     kind = 41;
+                  jjCheckNAddStates(17, 19);
+                  break;
+               case 15:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(16);
+                  break;
+               case 16:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 41)
+                     kind = 41;
+                  jjCheckNAddTwoStates(16, 17);
+                  break;
+               case 18:
+                  if (curChar == 34)
+                     jjCheckNAddTwoStates(19, 20);
+                  break;
+               case 19:
+                  if ((0xfffffffbffffdbffL & l) != 0L)
+                     jjCheckNAddTwoStates(19, 20);
+                  break;
+               case 20:
+                  if (curChar == 34 && kind > 44)
+                     kind = 44;
+                  break;
+               case 21:
+                  if (curChar != 36)
+                     break;
+                  if (kind > 45)
+                     kind = 45;
+                  jjCheckNAdd(22);
+                  break;
+               case 22:
+                  if ((0x3ff201000000000L & l) == 0L)
+                     break;
+                  if (kind > 45)
+                     kind = 45;
+                  jjCheckNAdd(22);
+                  break;
+               case 23:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(0, 6);
+                  break;
+               case 24:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(24, 25);
+                  break;
+               case 25:
+                  if (curChar != 46)
+                     break;
+                  if (kind > 41)
+                     kind = 41;
+                  jjCheckNAddStates(20, 22);
+                  break;
+               case 26:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 41)
+                     kind = 41;
+                  jjCheckNAddStates(20, 22);
+                  break;
+               case 28:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(29);
+                  break;
+               case 29:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 41)
+                     kind = 41;
+                  jjCheckNAddTwoStates(29, 17);
+                  break;
+               case 30:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(30, 31);
+                  break;
+               case 32:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(33);
+                  break;
+               case 33:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 41)
+                     kind = 41;
+                  jjCheckNAddTwoStates(33, 17);
+                  break;
+               case 34:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(23, 25);
+                  break;
+               case 36:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(37);
+                  break;
+               case 37:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(37, 17);
+                  break;
+               case 38:
+                  if (curChar != 48)
+                     break;
+                  if (kind > 37)
+                     kind = 37;
+                  jjCheckNAddStates(11, 13);
+                  break;
+               case 40:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 37)
+                     kind = 37;
+                  jjCheckNAddTwoStates(40, 11);
+                  break;
+               case 41:
+                  if ((0xff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 37)
+                     kind = 37;
+                  jjCheckNAddTwoStates(41, 11);
+                  break;
+               case 42:
+                  if (curChar == 39)
+                     jjCheckNAddStates(7, 10);
+                  break;
+               case 43:
+                  if ((0xffffff7fffffdbffL & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 44:
+                  if (curChar == 39 && kind > 43)
+                     kind = 43;
+                  break;
+               case 46:
+                  if ((0x8400000000L & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 47:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(48, 44);
+                  break;
+               case 48:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 49:
+                  if ((0xf000000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 50;
+                  break;
+               case 50:
+                  if ((0xff000000000000L & l) != 0L)
+                     jjCheckNAdd(48);
+                  break;
+               case 51:
+                  if ((0xffffff7fffffdbffL & l) != 0L)
+                     jjCheckNAddTwoStates(51, 52);
+                  break;
+               case 52:
+                  if (curChar == 39 && kind > 44)
+                     kind = 44;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 8:
+               case 22:
+                  if ((0x7fffffe87fffffeL & l) == 0L)
+                     break;
+                  if (kind > 45)
+                     kind = 45;
+                  jjCheckNAdd(22);
+                  break;
+               case 1:
+                  jjAddStates(14, 16);
+                  break;
+               case 11:
+                  if ((0x100000001000L & l) != 0L && kind > 37)
+                     kind = 37;
+                  break;
+               case 14:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(26, 27);
+                  break;
+               case 17:
+                  if ((0x5000000050L & l) != 0L && kind > 41)
+                     kind = 41;
+                  break;
+               case 19:
+                  jjAddStates(28, 29);
+                  break;
+               case 27:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(30, 31);
+                  break;
+               case 31:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(32, 33);
+                  break;
+               case 35:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(34, 35);
+                  break;
+               case 39:
+                  if ((0x100000001000000L & l) != 0L)
+                     jjCheckNAdd(40);
+                  break;
+               case 40:
+                  if ((0x7e0000007eL & l) == 0L)
+                     break;
+                  if (kind > 37)
+                     kind = 37;
+                  jjCheckNAddTwoStates(40, 11);
+                  break;
+               case 43:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 45:
+                  if (curChar == 92)
+                     jjAddStates(36, 38);
+                  break;
+               case 46:
+                  if ((0x14404410000000L & l) != 0L)
+                     jjCheckNAdd(44);
+                  break;
+               case 51:
+                  jjAddStates(39, 40);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else
+      {
+         int hiByte = (int)(curChar >> 8);
+         int i1 = hiByte >> 6;
+         long l1 = 1L << (hiByte & 077);
+         int i2 = (curChar & 0xff) >> 6;
+         long l2 = 1L << (curChar & 077);
+         MatchLoop: do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 8:
+               case 22:
+                  if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 45)
+                     kind = 45;
+                  jjCheckNAdd(22);
+                  break;
+               case 1:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(14, 16);
+                  break;
+               case 19:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(28, 29);
+                  break;
+               case 43:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjstateSet[jjnewStateCnt++] = 44;
+                  break;
+               case 51:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(39, 40);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 53 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
+static final int[] jjnextStates = {
+   24, 25, 30, 31, 34, 35, 17, 43, 45, 51, 52, 39, 41, 11, 1, 2, 
+   5, 13, 14, 17, 26, 27, 17, 34, 35, 17, 15, 16, 19, 20, 28, 29, 
+   32, 33, 36, 37, 46, 47, 49, 51, 52, 
+};
+private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
+{
+   switch(hiByte)
+   {
+      case 0:
+         return ((jjbitVec2[i2] & l2) != 0L);
+      default : 
+         if ((jjbitVec0[i1] & l1) != 0L)
+            return true;
+         return false;
+   }
+}
+private static final boolean jjCanMove_1(int hiByte, int i1, int i2, long l1, long l2)
+{
+   switch(hiByte)
+   {
+      case 0:
+         return ((jjbitVec4[i2] & l2) != 0L);
+      case 48:
+         return ((jjbitVec5[i2] & l2) != 0L);
+      case 49:
+         return ((jjbitVec6[i2] & l2) != 0L);
+      case 51:
+         return ((jjbitVec7[i2] & l2) != 0L);
+      case 61:
+         return ((jjbitVec8[i2] & l2) != 0L);
+      default : 
+         if ((jjbitVec3[i1] & l1) != 0L)
+            return true;
+         return false;
+   }
+}
+public static final String[] jjstrLiteralImages = {
+"", null, null, null, null, null, null, "\170\155\154", 
+"\104\117\103\124\131\120\105", "\120\125\102\114\111\103", "\145\156\143\157\144\151\156\147", 
+"\166\145\162\163\151\157\156", 
+"\170\163\151\72\156\157\116\141\155\145\163\160\141\143\145\123\143\150\145\155\141\114\157\143\141\164\151\157\156", "\170\155\154\156\163\72\170\163\151", "\160\157\162\164\116\141\155\145", 
+"\155\157\144\165\154\145", "\163\157\165\162\143\145\116\141\155\145", "\120\110\111", 
+"\153\151\156\144", "\151\156\151\164\126\141\154\165\145", "\164\171\160\145\116\141\155\145", 
+"\160\157\162\164", "\144\145\143\151\163\151\157\156", "\157\160\145\162\141\164\151\157\156", 
+"\144\145\163\151\147\156", "\163\164\141\164\145\126\141\162", "\163\151\172\145", "\144\151\162", 
+"\163\157\165\162\143\145", "\166\141\154\165\145", "\141\143\164\157\162\55\160\157\162\164", 
+"\161\165\141\154\151\146\151\145\162", "\163\164\171\154\145", "\162\145\155\157\166\141\142\154\145", 
+"\141\165\164\157\163\164\141\162\164", "\164\141\162\147\145\164", "\156\141\155\145", null, null, null, null, null, 
+null, null, null, null, null, null, "\173", "\175", "\133", "\135", "\73", "\74\57", 
+"\74\41", "\74", "\74\77", "\76", "\77\76", "\75", "\57\76", };
+public static final String[] lexStateNames = {
+   "DEFAULT", 
+   "BOUNDS", 
+};
+public static final int[] jjnewLexState = {
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, 0, 0, 0, 0, 1, 1, -1, -1, 
+};
+static final long[] jjtoToken = {
+   0x1fff3a3fffffff81L, 
+};
+static final long[] jjtoSkip = {
+   0x7eL, 
+};
+static final long[] jjtoSpecial = {
+   0x7eL, 
+};
+protected JavaCharStream input_stream;
+private final int[] jjrounds = new int[53];
+private final int[] jjstateSet = new int[106];
+protected char curChar;
+public XmlParserTokenManager(JavaCharStream stream){
+   if (JavaCharStream.staticFlag)
+      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
+   input_stream = stream;
+}
+public XmlParserTokenManager(JavaCharStream stream, int lexState){
+   this(stream);
+   SwitchTo(lexState);
+}
+public void ReInit(JavaCharStream stream)
+{
+   jjmatchedPos = jjnewStateCnt = 0;
+   curLexState = defaultLexState;
+   input_stream = stream;
+   ReInitRounds();
+}
+private final void ReInitRounds()
+{
+   int i;
+   jjround = 0x80000001;
+   for (i = 53; i-- > 0;)
+      jjrounds[i] = 0x80000000;
+}
+public void ReInit(JavaCharStream stream, int lexState)
+{
+   ReInit(stream);
+   SwitchTo(lexState);
+}
+public void SwitchTo(int lexState)
+{
+   if (lexState >= 2 || lexState < 0)
+      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
+   else
+      curLexState = lexState;
+}
+
+protected Token jjFillToken()
+{
+   Token t = Token.newToken(jjmatchedKind);
+   t.kind = jjmatchedKind;
+   String im = jjstrLiteralImages[jjmatchedKind];
+   t.image = (im == null) ? input_stream.GetImage() : im;
+   t.beginLine = input_stream.getBeginLine();
+   t.beginColumn = input_stream.getBeginColumn();
+   t.endLine = input_stream.getEndLine();
+   t.endColumn = input_stream.getEndColumn();
+   return t;
+}
+
+int curLexState = 0;
+int defaultLexState = 0;
+int jjnewStateCnt;
+int jjround;
+int jjmatchedPos;
+int jjmatchedKind;
+
+public Token getNextToken() 
+{
+  int kind;
+  Token specialToken = null;
+  Token matchedToken;
+  int curPos = 0;
+
+  EOFLoop :
+  for (;;)
+  {   
+   try   
+   {     
+      curChar = input_stream.BeginToken();
+   }     
+   catch(java.io.IOException e)
+   {        
+      jjmatchedKind = 0;
+      matchedToken = jjFillToken();
+      matchedToken.specialToken = specialToken;
+      return matchedToken;
+   }
+
+   switch(curLexState)
+   {
+     case 0:
+       jjmatchedKind = 0x7fffffff;
+       jjmatchedPos = 0;
+       curPos = jjMoveStringLiteralDfa0_0();
+       break;
+     case 1:
+       jjmatchedKind = 0x7fffffff;
+       jjmatchedPos = 0;
+       curPos = jjMoveStringLiteralDfa0_1();
+       break;
+   }
+     if (jjmatchedKind != 0x7fffffff)
+     {
+        if (jjmatchedPos + 1 < curPos)
+           input_stream.backup(curPos - jjmatchedPos - 1);
+        if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
+        {
+           matchedToken = jjFillToken();
+           matchedToken.specialToken = specialToken;
+       if (jjnewLexState[jjmatchedKind] != -1)
+         curLexState = jjnewLexState[jjmatchedKind];
+           return matchedToken;
+        }
+        else
+        {
+           if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
+           {
+              matchedToken = jjFillToken();
+              if (specialToken == null)
+                 specialToken = matchedToken;
+              else
+              {
+                 matchedToken.specialToken = specialToken;
+                 specialToken = (specialToken.next = matchedToken);
+              }
+           }
+         if (jjnewLexState[jjmatchedKind] != -1)
+           curLexState = jjnewLexState[jjmatchedKind];
+           continue EOFLoop;
+        }
+     }
+     int error_line = input_stream.getEndLine();
+     int error_column = input_stream.getEndColumn();
+     String error_after = null;
+     boolean EOFSeen = false;
+     try { input_stream.readChar(); input_stream.backup(1); }
+     catch (java.io.IOException e1) {
+        EOFSeen = true;
+        error_after = curPos <= 1 ? "" : input_stream.GetImage();
+        if (curChar == '\n' || curChar == '\r') {
+           error_line++;
+           error_column = 0;
+        }
+        else
+           error_column++;
+     }
+     if (!EOFSeen) {
+        input_stream.backup(1);
+        error_after = curPos <= 1 ? "" : input_stream.GetImage();
+     }
+     throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
+  }
+}
+
+}
diff --git a/examples/actors/xlimAST/XmlParserTreeConstants.java b/examples/actors/xlimAST/XmlParserTreeConstants.java
new file mode 100644
index 0000000000000000000000000000000000000000..8ebe1245dc13a95c95a4482c8ccf90210aeb76b9
--- /dev/null
+++ b/examples/actors/xlimAST/XmlParserTreeConstants.java
@@ -0,0 +1,87 @@
+/* Generated By:JJTree: Do not edit this line. /work/csandersn/actors/xmlSchemCompiler/examples/actors/xlimAST/XmlParserTreeConstants.java */
+
+package xlimAST;
+
+public interface XmlParserTreeConstants
+{
+  public int JJTSTART = 0;
+  public int JJTSPECIFICATION = 1;
+  public int JJTOPT = 2;
+  public int JJTDOCTYPE = 3;
+  public int JJTVOID = 4;
+  public int JJTXMLHEADER = 5;
+  public int JJTLIST = 6;
+  public int JJTATTRVALUE = 7;
+  public int JJTENCODING = 8;
+  public int JJTVERSION = 9;
+  public int JJTXSINONAMESPACESCHEMALOCATION = 10;
+  public int JJTXMLNSXSI = 11;
+  public int JJTINTELEMENT = 12;
+  public int JJTFLOATELEMENT = 13;
+  public int JJTSTRINGELEMENT = 14;
+  public int JJTPORTNAME = 15;
+  public int JJTMODULE = 16;
+  public int JJTSOURCENAME = 17;
+  public int JJTPHI = 18;
+  public int JJTKIND = 19;
+  public int JJTINITVALUE = 20;
+  public int JJTTYPENAME = 21;
+  public int JJTPORT = 22;
+  public int JJTDECISION = 23;
+  public int JJTOPERATION = 24;
+  public int JJTDESIGN = 25;
+  public int JJTSTATEVAR = 26;
+  public int JJTSIZE = 27;
+  public int JJTDIR = 28;
+  public int JJTSOURCE = 29;
+  public int JJTVALUE = 30;
+  public int JJTACTOR_PORT = 31;
+  public int JJTQUALIFIER = 32;
+  public int JJTSTYLE = 33;
+  public int JJTREMOVABLE = 34;
+  public int JJTAUTOSTART = 35;
+  public int JJTTARGET = 36;
+  public int JJTNAME = 37;
+
+
+  public String[] jjtNodeName = {
+    "Start",
+    "Specification",
+    "Opt",
+    "DocType",
+    "void",
+    "XmlHeader",
+    "List",
+    "AttrValue",
+    "Encoding",
+    "Version",
+    "XsiNoNamespaceSchemaLocation",
+    "XmlnsXsi",
+    "IntElement",
+    "FloatElement",
+    "StringElement",
+    "portName",
+    "module",
+    "sourceName",
+    "PHI",
+    "kind",
+    "initValue",
+    "typeName",
+    "port",
+    "decision",
+    "operation",
+    "design",
+    "stateVar",
+    "size",
+    "dir",
+    "source",
+    "value",
+    "actor_port",
+    "qualifier",
+    "style",
+    "removable",
+    "autostart",
+    "target",
+    "name",
+  };
+}
diff --git a/examples/actors/xlimAST/XmlParserVisitor.java b/examples/actors/xlimAST/XmlParserVisitor.java
new file mode 100644
index 0000000000000000000000000000000000000000..e42b0d77221fae77953d92236071da0bc4b63874
--- /dev/null
+++ b/examples/actors/xlimAST/XmlParserVisitor.java
@@ -0,0 +1,45 @@
+/* Generated By:JJTree: Do not edit this line. /work/csandersn/actors/xmlSchemCompiler/examples/actors/xlimAST/XmlParserVisitor.java */
+
+package xlimAST;
+
+public interface XmlParserVisitor
+{
+  public Object visit(SimpleNode node, Object data);
+  public Object visit(Start node, Object data);
+  public Object visit(Specification node, Object data);
+  public Object visit(Opt node, Object data);
+  public Object visit(DocType node, Object data);
+  public Object visit(XmlHeader node, Object data);
+  public Object visit(List node, Object data);
+  public Object visit(AttrValue node, Object data);
+  public Object visit(Encoding node, Object data);
+  public Object visit(Version node, Object data);
+  public Object visit(XsiNoNamespaceSchemaLocation node, Object data);
+  public Object visit(XmlnsXsi node, Object data);
+  public Object visit(IntElement node, Object data);
+  public Object visit(FloatElement node, Object data);
+  public Object visit(StringElement node, Object data);
+  public Object visit(portName node, Object data);
+  public Object visit(module node, Object data);
+  public Object visit(sourceName node, Object data);
+  public Object visit(PHI node, Object data);
+  public Object visit(kind node, Object data);
+  public Object visit(initValue node, Object data);
+  public Object visit(typeName node, Object data);
+  public Object visit(port node, Object data);
+  public Object visit(decision node, Object data);
+  public Object visit(operation node, Object data);
+  public Object visit(design node, Object data);
+  public Object visit(stateVar node, Object data);
+  public Object visit(size node, Object data);
+  public Object visit(dir node, Object data);
+  public Object visit(source node, Object data);
+  public Object visit(value node, Object data);
+  public Object visit(actor_port node, Object data);
+  public Object visit(qualifier node, Object data);
+  public Object visit(style node, Object data);
+  public Object visit(removable node, Object data);
+  public Object visit(autostart node, Object data);
+  public Object visit(target node, Object data);
+  public Object visit(name node, Object data);
+}
diff --git a/examples/actors/xlimAST/XmlnsXsi.java b/examples/actors/xlimAST/XmlnsXsi.java
new file mode 100644
index 0000000000000000000000000000000000000000..11abf230fb677e3f73d7ec5aaadb1a839820b828
--- /dev/null
+++ b/examples/actors/xlimAST/XmlnsXsi.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class XmlnsXsi extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XmlnsXsi clone() throws CloneNotSupportedException {
+        XmlnsXsi node = (XmlnsXsi)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XmlnsXsi copy() {
+      try {
+          XmlnsXsi node = (XmlnsXsi)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XmlnsXsi fullCopy() {
+        XmlnsXsi res = (XmlnsXsi)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 43
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" xmlns:xsi=");
+    getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 21
+
+    public XmlnsXsi(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public XmlnsXsi(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public XmlnsXsi() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 21
+    public XmlnsXsi(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "XmlnsXsi");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/XsiNoNamespaceSchemaLocation.java b/examples/actors/xlimAST/XsiNoNamespaceSchemaLocation.java
new file mode 100644
index 0000000000000000000000000000000000000000..dbc024196c728e3dbdf3877c7d2f8ac79e1b0c59
--- /dev/null
+++ b/examples/actors/xlimAST/XsiNoNamespaceSchemaLocation.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class XsiNoNamespaceSchemaLocation extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XsiNoNamespaceSchemaLocation clone() throws CloneNotSupportedException {
+        XsiNoNamespaceSchemaLocation node = (XsiNoNamespaceSchemaLocation)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XsiNoNamespaceSchemaLocation copy() {
+      try {
+          XsiNoNamespaceSchemaLocation node = (XsiNoNamespaceSchemaLocation)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public XsiNoNamespaceSchemaLocation fullCopy() {
+        XsiNoNamespaceSchemaLocation res = (XsiNoNamespaceSchemaLocation)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 48
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" xsi:NoNamespaceSchemaLocation=");
+    getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 22
+
+    public XsiNoNamespaceSchemaLocation(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public XsiNoNamespaceSchemaLocation(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public XsiNoNamespaceSchemaLocation() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 22
+    public XsiNoNamespaceSchemaLocation(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "XsiNoNamespaceSchemaLocation");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/actor_port.java b/examples/actors/xlimAST/actor_port.java
new file mode 100644
index 0000000000000000000000000000000000000000..ed6025a81b63f341c08f87331388830c0ce87036
--- /dev/null
+++ b/examples/actors/xlimAST/actor_port.java
@@ -0,0 +1,276 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class actor_port extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public actor_port clone() throws CloneNotSupportedException {
+        actor_port node = (actor_port)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public actor_port copy() {
+      try {
+          actor_port node = (actor_port)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public actor_port fullCopy() {
+        actor_port res = (actor_port)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 217
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<actor_port ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</actor_port> ");
+    }
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 41
+
+    public actor_port(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public actor_port(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public actor_port() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xlim.ast at line 19
+
+
+    // Declared in xlim.ast line 41
+    public actor_port(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xlim.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "actor_port");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xlim.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xlim.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/autostart.java b/examples/actors/xlimAST/autostart.java
new file mode 100644
index 0000000000000000000000000000000000000000..0182d508a2f221f36013d98e1a989eee262521c2
--- /dev/null
+++ b/examples/actors/xlimAST/autostart.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class autostart extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public autostart clone() throws CloneNotSupportedException {
+        autostart node = (autostart)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public autostart copy() {
+      try {
+          autostart node = (autostart)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public autostart fullCopy() {
+        autostart res = (autostart)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 249
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" autostart=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 45
+
+    public autostart(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public autostart(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public autostart() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 45
+    public autostart(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "autostart");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/decision.java b/examples/actors/xlimAST/decision.java
new file mode 100644
index 0000000000000000000000000000000000000000..622eeee17e26223d08fe004684b8d011cf2ab827
--- /dev/null
+++ b/examples/actors/xlimAST/decision.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class decision extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public decision clone() throws CloneNotSupportedException {
+        decision node = (decision)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public decision copy() {
+      try {
+          decision node = (decision)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public decision fullCopy() {
+        decision res = (decision)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 141
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" decision=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 33
+
+    public decision(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public decision(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public decision() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 33
+    public decision(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "decision");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/design.java b/examples/actors/xlimAST/design.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b7b4dade301f1eee5337d8dec5e00b0fdb88f43
--- /dev/null
+++ b/examples/actors/xlimAST/design.java
@@ -0,0 +1,327 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class design extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        isSDF_visited = -1;
+        nbrOfActions_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public design clone() throws CloneNotSupportedException {
+        design node = (design)super.clone();
+        node.isSDF_visited = -1;
+        node.nbrOfActions_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public design copy() {
+      try {
+          design node = (design)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public design fullCopy() {
+        design res = (design)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 163
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<design ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</design> ");
+    }
+  }
+
+    // Declared in Merge.jrag at line 15
+
+	public void merge(design dest) {
+		HashSet<operation> ops = getOperations(new HashSet<operation>());
+		for (Element e : getElements()) {
+			if (e.isAction()) {
+				for (operation o : ops) {
+					((module) e).addElement(o);
+				}
+			}
+		}
+	}
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 35
+
+    public design(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public design(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public design() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xlim.ast at line 19
+
+
+    // Declared in xlim.ast line 35
+    public design(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xlim.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "design");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xlim.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xlim.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+    protected int isSDF_visited = -1;
+    // Declared in SDF.jrag at line 19
+ @SuppressWarnings({"unchecked", "cast"})     public boolean isSDF() {
+        if(isSDF_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: isSDF in class: ");
+        isSDF_visited = boundariesCrossed;
+        boolean isSDF_value = isSDF_compute();
+        isSDF_visited = -1;
+        return isSDF_value;
+    }
+
+    private boolean isSDF_compute() {  return nbrOfActions() == 1;  }
+
+    protected int nbrOfActions_visited = -1;
+    // Declared in SDF.jrag at line 23
+ @SuppressWarnings({"unchecked", "cast"})     public int nbrOfActions() {
+        if(nbrOfActions_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: nbrOfActions in class: ");
+        nbrOfActions_visited = boundariesCrossed;
+        int nbrOfActions_value = nbrOfActions_compute();
+        nbrOfActions_visited = -1;
+        return nbrOfActions_value;
+    }
+
+    private int nbrOfActions_compute() {
+		int nbrActions = 0;
+		for (Element e : getElements()) {
+			if (e.isAction()) {
+				nbrActions++;
+			}
+		}
+		return nbrActions;
+	}
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/dir.java b/examples/actors/xlimAST/dir.java
new file mode 100644
index 0000000000000000000000000000000000000000..8667bfd7b82c3e7946e3a16e98f7fb39d7864820
--- /dev/null
+++ b/examples/actors/xlimAST/dir.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class dir extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public dir clone() throws CloneNotSupportedException {
+        dir node = (dir)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public dir copy() {
+      try {
+          dir node = (dir)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public dir fullCopy() {
+        dir res = (dir)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 202
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" dir=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 38
+
+    public dir(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public dir(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public dir() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 38
+    public dir(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "dir");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/initValue.java b/examples/actors/xlimAST/initValue.java
new file mode 100644
index 0000000000000000000000000000000000000000..eefe8d30517b11ff679caa957e86c1cbbb3e04f9
--- /dev/null
+++ b/examples/actors/xlimAST/initValue.java
@@ -0,0 +1,276 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class initValue extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public initValue clone() throws CloneNotSupportedException {
+        initValue node = (initValue)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public initValue copy() {
+      try {
+          initValue node = (initValue)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public initValue fullCopy() {
+        initValue res = (initValue)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 102
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<initValue ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</initValue> ");
+    }
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 30
+
+    public initValue(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public initValue(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public initValue() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xlim.ast at line 19
+
+
+    // Declared in xlim.ast line 30
+    public initValue(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xlim.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "initValue");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xlim.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xlim.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/kind.java b/examples/actors/xlimAST/kind.java
new file mode 100644
index 0000000000000000000000000000000000000000..1670ba3d4e2ae6d4e7f40492c0318dedbc2d948a
--- /dev/null
+++ b/examples/actors/xlimAST/kind.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class kind extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public kind clone() throws CloneNotSupportedException {
+        kind node = (kind)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public kind copy() {
+      try {
+          kind node = (kind)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public kind fullCopy() {
+        kind res = (kind)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 97
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" kind=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 29
+
+    public kind(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public kind(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public kind() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 29
+    public kind(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "kind");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/module.java b/examples/actors/xlimAST/module.java
new file mode 100644
index 0000000000000000000000000000000000000000..72f582de6c96c6e6e9c60be4ec1c199c3061f476
--- /dev/null
+++ b/examples/actors/xlimAST/module.java
@@ -0,0 +1,316 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class module extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        isAction_visited = -1;
+        kind_visited = -1;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public module clone() throws CloneNotSupportedException {
+        module node = (module)super.clone();
+        node.isAction_visited = -1;
+        node.kind_visited = -1;
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public module copy() {
+      try {
+          module node = (module)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public module fullCopy() {
+        module res = (module)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 58
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<module ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</module> ");
+    }
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 26
+
+    public module(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public module(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public module() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xlim.ast at line 19
+
+
+    // Declared in xlim.ast line 26
+    public module(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xlim.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "module");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xlim.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xlim.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+    protected int isAction_visited = -1;
+    // Declared in SDF.jrag at line 34
+ @SuppressWarnings({"unchecked", "cast"})     public boolean isAction() {
+        if(isAction_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: isAction in class: ");
+        isAction_visited = boundariesCrossed;
+        boolean isAction_value = isAction_compute();
+        isAction_visited = -1;
+        return isAction_value;
+    }
+
+    private boolean isAction_compute() {
+		return kind().equals("action");
+	}
+
+    protected int kind_visited = -1;
+    // Declared in SDF.jrag at line 38
+ @SuppressWarnings({"unchecked", "cast"})     public String kind() {
+        if(kind_visited == boundariesCrossed)
+            throw new RuntimeException("Circular definition of attr: kind in class: ");
+        kind_visited = boundariesCrossed;
+        String kind_value = kind_compute();
+        kind_visited = -1;
+        return kind_value;
+    }
+
+    private String kind_compute() {
+		for (int i=0; i<getNumAttribute(); i++) {
+			Attribute a = getAttribute(i);
+			if (a instanceof kind) {
+				return fix(a.getAttrValue().getLITERAL());
+			}
+		}
+		return "";
+	}
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/name.java b/examples/actors/xlimAST/name.java
new file mode 100644
index 0000000000000000000000000000000000000000..99899eb3dd47d4422286e79f3105e72cc46f550d
--- /dev/null
+++ b/examples/actors/xlimAST/name.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class name extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public name clone() throws CloneNotSupportedException {
+        name node = (name)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public name copy() {
+      try {
+          name node = (name)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public name fullCopy() {
+        name res = (name)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 259
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" name=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 47
+
+    public name(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public name(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public name() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 47
+    public name(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "name");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/operation.java b/examples/actors/xlimAST/operation.java
new file mode 100644
index 0000000000000000000000000000000000000000..3860a843250457bfbef8e34c3c34d371a5b22c05
--- /dev/null
+++ b/examples/actors/xlimAST/operation.java
@@ -0,0 +1,296 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class operation extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+        getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public operation clone() throws CloneNotSupportedException {
+        operation node = (operation)super.clone();
+        node.getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public operation copy() {
+      try {
+          operation node = (operation)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public operation fullCopy() {
+        operation res = (operation)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 146
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<operation ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</operation> ");
+    }
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 34
+
+    public operation(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public operation(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public operation() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xlim.ast at line 19
+
+
+    // Declared in xlim.ast line 34
+    public operation(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xlim.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "operation");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xlim.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xlim.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+    protected java.util.Map getOperations_HashSet_operation__visited;
+    // Declared in Merge.jrag at line 43
+ @SuppressWarnings({"unchecked", "cast"})     public HashSet<operation> getOperations(HashSet<operation> ops) {
+        Object _parameters = ops;
+if(getOperations_HashSet_operation__visited == null) getOperations_HashSet_operation__visited = new java.util.HashMap(4);
+        if(new Integer(boundariesCrossed).equals(getOperations_HashSet_operation__visited.get(_parameters)))
+            throw new RuntimeException("Circular definition of attr: getOperations in class: ");
+        getOperations_HashSet_operation__visited.put(_parameters, new Integer(boundariesCrossed));
+        HashSet<operation> getOperations_HashSet_operation__value = getOperations_compute(ops);
+        getOperations_HashSet_operation__visited.remove(_parameters);
+        return getOperations_HashSet_operation__value;
+    }
+
+    private HashSet<operation> getOperations_compute(HashSet<operation> ops) {
+		ops.add(this);
+		return ops;
+	}
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/port.java b/examples/actors/xlimAST/port.java
new file mode 100644
index 0000000000000000000000000000000000000000..554f755fb35142b29198953f6b2ec95f8f5afb6e
--- /dev/null
+++ b/examples/actors/xlimAST/port.java
@@ -0,0 +1,276 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class port extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public port clone() throws CloneNotSupportedException {
+        port node = (port)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public port copy() {
+      try {
+          port node = (port)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public port fullCopy() {
+        port res = (port)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 124
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<port ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</port> ");
+    }
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 32
+
+    public port(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public port(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public port() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xlim.ast at line 19
+
+
+    // Declared in xlim.ast line 32
+    public port(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xlim.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "port");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xlim.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xlim.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/portName.java b/examples/actors/xlimAST/portName.java
new file mode 100644
index 0000000000000000000000000000000000000000..8524adeaeb433dbefe7dab267851569dfd3128c8
--- /dev/null
+++ b/examples/actors/xlimAST/portName.java
@@ -0,0 +1,141 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+// Generated types
+
+public class portName extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public portName clone() throws CloneNotSupportedException {
+        portName node = (portName)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public portName copy() {
+      try {
+          portName node = (portName)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public portName fullCopy() {
+        portName res = (portName)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 53
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" portName=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 25
+
+    public portName(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public portName(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public portName() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 25
+    public portName(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "portName");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/qualifier.java b/examples/actors/xlimAST/qualifier.java
new file mode 100644
index 0000000000000000000000000000000000000000..43f962b68a7cbe8ee2bff587ae6ab2e2a9d5cf8e
--- /dev/null
+++ b/examples/actors/xlimAST/qualifier.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class qualifier extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public qualifier clone() throws CloneNotSupportedException {
+        qualifier node = (qualifier)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public qualifier copy() {
+      try {
+          qualifier node = (qualifier)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public qualifier fullCopy() {
+        qualifier res = (qualifier)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 234
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" qualifier=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 42
+
+    public qualifier(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public qualifier(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public qualifier() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 42
+    public qualifier(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "qualifier");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/removable.java b/examples/actors/xlimAST/removable.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1cbad45ac006d63d0f6999d24ce954c44c625b4
--- /dev/null
+++ b/examples/actors/xlimAST/removable.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class removable extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public removable clone() throws CloneNotSupportedException {
+        removable node = (removable)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public removable copy() {
+      try {
+          removable node = (removable)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public removable fullCopy() {
+        removable res = (removable)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 244
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" removable=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 44
+
+    public removable(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public removable(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public removable() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 44
+    public removable(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "removable");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/size.java b/examples/actors/xlimAST/size.java
new file mode 100644
index 0000000000000000000000000000000000000000..39cfd8cf74df636f4d7d16acf79bb69d6bb11336
--- /dev/null
+++ b/examples/actors/xlimAST/size.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class size extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public size clone() throws CloneNotSupportedException {
+        size node = (size)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public size copy() {
+      try {
+          size node = (size)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public size fullCopy() {
+        size res = (size)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 197
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" size=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 37
+
+    public size(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public size(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public size() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 37
+    public size(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "size");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/source.java b/examples/actors/xlimAST/source.java
new file mode 100644
index 0000000000000000000000000000000000000000..91078d35d4c330b2d62e9c15b012d5a9999e8b2e
--- /dev/null
+++ b/examples/actors/xlimAST/source.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class source extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public source clone() throws CloneNotSupportedException {
+        source node = (source)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public source copy() {
+      try {
+          source node = (source)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public source fullCopy() {
+        source res = (source)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 207
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" source=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 39
+
+    public source(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public source(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public source() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 39
+    public source(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "source");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/sourceName.java b/examples/actors/xlimAST/sourceName.java
new file mode 100644
index 0000000000000000000000000000000000000000..59111d541b9a2216ab18dc277f9f5041d12accca
--- /dev/null
+++ b/examples/actors/xlimAST/sourceName.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class sourceName extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public sourceName clone() throws CloneNotSupportedException {
+        sourceName node = (sourceName)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public sourceName copy() {
+      try {
+          sourceName node = (sourceName)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public sourceName fullCopy() {
+        sourceName res = (sourceName)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 75
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" sourceName=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 27
+
+    public sourceName(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public sourceName(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public sourceName() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 27
+    public sourceName(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "sourceName");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/stateVar.java b/examples/actors/xlimAST/stateVar.java
new file mode 100644
index 0000000000000000000000000000000000000000..bdccf1f9dd38397f2d760a8199ea1eb94bc3b6ea
--- /dev/null
+++ b/examples/actors/xlimAST/stateVar.java
@@ -0,0 +1,276 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class stateVar extends ComplexElement implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public stateVar clone() throws CloneNotSupportedException {
+        stateVar node = (stateVar)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public stateVar copy() {
+      try {
+          stateVar node = (stateVar)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public stateVar fullCopy() {
+        stateVar res = (stateVar)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 180
+
+
+  public void prettyPrint(String ind, PrintStream pStream) {
+    pStream.print(ind+"<stateVar ");
+    for (int i=0; i<getNumAttribute(); i++) {
+      getAttribute(i).prettyPrint(ind,pStream);
+    }
+    if (getNumElement() == 0) {
+       pStream.println("/> ");
+    } else {
+       pStream.println("> ");
+       String newInd = ind+"  ";
+       for (int i=0; i<getNumElement(); i++) {
+          getElement(i).prettyPrint(newInd,pStream);
+       }
+       pStream.println(ind+"</stateVar> ");
+    }
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 36
+
+    public stateVar(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public stateVar(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public stateVar() {
+        this(0);
+
+        setChild(new List(), 0);
+        setChild(new List(), 1);
+
+    }
+
+    // Declared in xlim.ast at line 19
+
+
+    // Declared in xlim.ast line 36
+    public stateVar(List<Attribute> p0, List<Element> p1) {
+        setChild(p0, 0);
+        setChild(p1, 1);
+    }
+
+    // Declared in xlim.ast at line 24
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "stateVar");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 40
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0) {
+    if(!(n instanceof List)) throw new Error("Child number 0 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Attribute)) throw new Error("Child number " + k + " in AttributeList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Attribute");
+  }
+  if(i == 1) {
+    if(!(n instanceof List)) throw new Error("Child number 1 of ComplexElement has the type " + n.getClass().getName() + " which is not an instance of List");
+    for(int k = 0; k < ((List)n).getNumNoTransformChild(); k++)
+      if(!(((List)n).getChildNoTransform(k) instanceof Element)) throw new Error("Child number " + k + " in ElementList has the type " + ((List)n).getChildNoTransform(k).getClass().getName() + " which is not an instance of Element");
+  }
+}
+
+    // Declared in xlim.ast at line 53
+
+
+  public int getNumChild() {
+    return 2;
+  }
+
+    // Declared in xlim.ast at line 56
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setAttributeList(List<Attribute> list) {
+        setChild(list, 0);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumAttribute = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumAttribute() {
+        return getAttributeList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Attribute getAttribute(int i) {
+        return (Attribute)getAttributeList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addAttribute(Attribute node) {
+        List<Attribute> list = getAttributeList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setAttribute(Attribute node, int i) {
+        List<Attribute> list = getAttributeList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Attribute> getAttributes() {
+        return getAttributeList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Attribute> getAttributesNoTransform() {
+        return getAttributeListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeList() {
+        return (List<Attribute>)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Attribute> getAttributeListNoTransform() {
+        return (List<Attribute>)getChildNoTransform(0);
+    }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 11
+    public void setElementList(List<Element> list) {
+        setChild(list, 1);
+    }
+
+    // Declared in xlim.ast at line 6
+
+
+    private int getNumElement = 0;
+
+    // Declared in xlim.ast at line 7
+
+    public int getNumElement() {
+        return getElementList().getNumChild();
+    }
+
+    // Declared in xlim.ast at line 11
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public Element getElement(int i) {
+        return (Element)getElementList().getChild(i);
+    }
+
+    // Declared in xlim.ast at line 15
+
+
+    public void addElement(Element node) {
+        List<Element> list = getElementList();
+        list.addChild(node);
+    }
+
+    // Declared in xlim.ast at line 20
+
+
+    public void setElement(Element node, int i) {
+        List<Element> list = getElementList();
+        list.setChild(node, i);
+    }
+
+    // Declared in xlim.ast at line 24
+
+    public List<Element> getElements() {
+        return getElementList();
+    }
+
+    // Declared in xlim.ast at line 27
+
+    public List<Element> getElementsNoTransform() {
+        return getElementListNoTransform();
+    }
+
+    // Declared in xlim.ast at line 31
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementList() {
+        return (List<Element>)getChild(1);
+    }
+
+    // Declared in xlim.ast at line 35
+
+
+     @SuppressWarnings({"unchecked", "cast"})  public List<Element> getElementListNoTransform() {
+        return (List<Element>)getChildNoTransform(1);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/style.java b/examples/actors/xlimAST/style.java
new file mode 100644
index 0000000000000000000000000000000000000000..144ffa25f3d334a51f0f6737b4de042c0bda1d77
--- /dev/null
+++ b/examples/actors/xlimAST/style.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class style extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public style clone() throws CloneNotSupportedException {
+        style node = (style)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public style copy() {
+      try {
+          style node = (style)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public style fullCopy() {
+        style res = (style)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 239
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" style=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 43
+
+    public style(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public style(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public style() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 43
+    public style(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "style");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/target.java b/examples/actors/xlimAST/target.java
new file mode 100644
index 0000000000000000000000000000000000000000..e9e1e37bb0bb2b9644aae0720e203610f7c5cbc3
--- /dev/null
+++ b/examples/actors/xlimAST/target.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class target extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public target clone() throws CloneNotSupportedException {
+        target node = (target)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public target copy() {
+      try {
+          target node = (target)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public target fullCopy() {
+        target res = (target)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 254
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" target=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 46
+
+    public target(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public target(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public target() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 46
+    public target(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "target");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/typeName.java b/examples/actors/xlimAST/typeName.java
new file mode 100644
index 0000000000000000000000000000000000000000..bdc69a682085bfcfb14155cef4b77386e9c01b03
--- /dev/null
+++ b/examples/actors/xlimAST/typeName.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class typeName extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public typeName clone() throws CloneNotSupportedException {
+        typeName node = (typeName)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public typeName copy() {
+      try {
+          typeName node = (typeName)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public typeName fullCopy() {
+        typeName res = (typeName)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 119
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" typeName=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 31
+
+    public typeName(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public typeName(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public typeName() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 31
+    public typeName(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "typeName");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/value.java b/examples/actors/xlimAST/value.java
new file mode 100644
index 0000000000000000000000000000000000000000..46363e490f5237383bb98389af5eb6496b4901c9
--- /dev/null
+++ b/examples/actors/xlimAST/value.java
@@ -0,0 +1,139 @@
+
+package xlimAST;
+import java.io.PrintStream;import java.util.HashSet;
+
+
+public class value extends Attribute implements Cloneable {
+    public void flushCache() {
+        super.flushCache();
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public value clone() throws CloneNotSupportedException {
+        value node = (value)super.clone();
+        node.in$Circle(false);
+        node.is$Final(false);
+    return node;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public value copy() {
+      try {
+          value node = (value)clone();
+          if(children != null) node.children = (ASTNode[])children.clone();
+          return node;
+      } catch (CloneNotSupportedException e) {
+      }
+      System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
+      return null;
+    }
+     @SuppressWarnings({"unchecked", "cast"})  public value fullCopy() {
+        value res = (value)copy();
+        for(int i = 0; i < getNumChildNoTransform(); i++) {
+          ASTNode node = getChildNoTransform(i);
+          if(node != null) node = node.fullCopy();
+          res.setChild(node, i);
+        }
+        return res;
+    }
+    // Declared in GeneratedAspects.jrag at line 212
+
+
+  public void prettyPrint(String indent, PrintStream pStream) {
+    pStream.print(" value=");
+       getAttrValue().prettyPrint(indent,pStream);
+  }
+
+    // Declared in xlim.ast at line 3
+    // Declared in xlim.ast line 40
+
+    public value(int i) {
+        super(i);
+    }
+
+    // Declared in xlim.ast at line 6
+
+    public value(XmlParser p, int i) {
+        this(i);
+        parser = p;
+    }
+
+    // Declared in xlim.ast at line 10
+
+    public value() {
+        this(0);
+
+
+    }
+
+    // Declared in xlim.ast at line 17
+
+
+    // Declared in xlim.ast line 40
+    public value(AttrValue p0) {
+        setChild(p0, 0);
+    }
+
+    // Declared in xlim.ast at line 21
+
+
+    public void dumpTree(String indent, java.io.PrintStream pStream) {
+        pStream.println(indent + "value");
+        String childIndent = indent + "  ";
+        for(int i = 0; i < getNumChild(); i++)
+            getChild(i).dumpTree(childIndent, pStream);
+    }
+
+    // Declared in xlim.ast at line 28
+
+
+    public Object jjtAccept(XmlParserVisitor visitor, Object data) {
+        return visitor.visit(this, data);
+    }
+
+    // Declared in xlim.ast at line 32
+
+
+public void jjtAddChild(Node n, int i) {
+  checkChild(n, i);
+  super.jjtAddChild(n, i);
+}
+
+    // Declared in xlim.ast at line 37
+
+
+public void checkChild(Node n, int i) {
+  if(i == 0 && !(n instanceof AttrValue))  throw new Error("Child number 0 of Attribute has the type " + n.getClass().getName() + " which is not an instance of AttrValue");
+}
+
+    // Declared in xlim.ast at line 41
+
+
+  public int getNumChild() {
+    return 1;
+  }
+
+    // Declared in xlim.ast at line 44
+
+  public boolean mayHaveRewrite() { return false; }
+
+    // Declared in xlim.ast at line 2
+    // Declared in xlim.ast line 17
+    public void setAttrValue(AttrValue node) {
+        setChild(node, 0);
+    }
+
+    // Declared in xlim.ast at line 5
+
+    public AttrValue getAttrValue() {
+        return (AttrValue)getChild(0);
+    }
+
+    // Declared in xlim.ast at line 9
+
+
+    public AttrValue getAttrValueNoTransform() {
+        return (AttrValue)getChildNoTransform(0);
+    }
+
+public ASTNode rewriteTo() {
+    return super.rewriteTo();
+}
+
+}
diff --git a/examples/actors/xlimAST/xlim.jj b/examples/actors/xlimAST/xlim.jj
new file mode 100644
index 0000000000000000000000000000000000000000..b8c85803012824acf920a9832e625d6f3fb0a4d8
--- /dev/null
+++ b/examples/actors/xlimAST/xlim.jj
@@ -0,0 +1,1393 @@
+/*@bgen(jjtree) Generated By:JJTree: Do not edit this line. /work/csandersn/actors/xmlSchemCompiler/examples/actors/xlimAST/xlim.jj */
+/*@egen*//* -*-Java-*- */
+
+options {                                                                                                                                                                                                       
+    JAVA_UNICODE_ESCAPE         = true;
+    STATIC                      = false;
+} 
+
+PARSER_BEGIN(XmlParser)
+    package xlimAST;
+    public class XmlParser/*@bgen(jjtree)*/implements XmlParserTreeConstants/*@egen*/ {/*@bgen(jjtree)*/
+  protected JJTXmlParserState jjtree = new JJTXmlParserState();
+
+/*@egen*/
+}
+PARSER_END(XmlParser)
+
+//----------------------------------------------//
+//                LEXICAL TOKENS                //
+//----------------------------------------------//
+<DEFAULT,BOUNDS> SPECIAL_TOKEN : /* WHITE SPACE */
+{
+    " "
+    |
+    "\t"
+    |
+    "\n"
+    |
+    "\r"
+    |
+    "\f"
+}// WHITE SPACE
+
+<DEFAULT,BOUNDS> SPECIAL_TOKEN : /* COMMENTS */ 
+{
+    < "<!--" ( ~["-"] | ( "-" ~["-"] ) )* "-->">
+}// COMMENTS
+
+<DEFAULT> TOKEN : /* Reserved Words */
+{
+   <XML		: "xml">
+ | <DOCTYPE : "DOCTYPE">
+ | <PUBLIC : "PUBLIC">
+ | <encoding		: "encoding">
+ | <version		: "version">
+ | <XsiNoNamespaceSchemaLocation		: "xsi:noNamespaceSchemaLocation">
+ | <XmlnsXsi		: "xmlns:xsi">
+ | <portName		: "portName" >
+ | <module		: "module" >
+ | <sourceName		: "sourceName" >
+ | <PHI		: "PHI" >
+ | <kind		: "kind" >
+ | <initValue		: "initValue" >
+ | <typeName		: "typeName" >
+ | <port		: "port" >
+ | <decision		: "decision" >
+ | <operation		: "operation" >
+ | <design		: "design" >
+ | <stateVar		: "stateVar" >
+ | <size		: "size" >
+ | <dir		: "dir" >
+ | <source		: "source" >
+ | <value		: "value" >
+ | <actor_port		: "actor-port" >
+ | <qualifier		: "qualifier" >
+ | <style		: "style" >
+ | <removable		: "removable" >
+ | <autostart		: "autostart" >
+ | <target		: "target" >
+ | <name		: "name" >
+}// Reserved Words
+
+<DEFAULT, BOUNDS> TOKEN : /* LITERALS */
+{
+    < INTEGER_LITERAL:
+        <DECIMAL_LITERAL> (["l","L"])?
+        |
+        <HEX_LITERAL> (["l","L"])?
+        |
+        <OCTAL_LITERAL> (["l","L"])?
+    >
+    |
+    < #DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* >
+    |
+    < #HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ >
+    |
+    < #OCTAL_LITERAL: "0" (["0"-"7"])* >
+    |
+    < FLOAT_LITERAL:
+        (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? (["f","F","d","D"])?
+        |
+        "." (["0"-"9"])+ (<EXPONENT>)? (["f","F","d","D"])?
+        |
+        (["0"-"9"])+ <EXPONENT> (["f","F","d","D"])?
+        |
+        (["0"-"9"])+ (<EXPONENT>)? ["f","F","d","D"]
+    >
+    |
+    < #EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+ >
+    |
+    < CHARACTER_LITERAL:
+        "'"
+        (   (~["'","\\","\n","\r"])
+            |
+            ("\\"
+                (   ["n","t","b","r","f","\\","'","\""]
+                    |
+                    ["0"-"7"] ( ["0"-"7"] )?
+                    |
+                    ["0"-"3"] ["0"-"7"] ["0"-"7"]
+                )
+            )
+        )
+        "'"
+    >
+    |
+    < STRING_LITERAL:
+        ("\""
+        (   (~["\"","\n","\r"])
+        )*
+        "\"")
+       | ("\'"
+        (   (~["\'","\n","\r"])
+        )*
+        "\'")
+    >
+}// LITERALS
+<DEFAULT, BOUNDS> TOKEN : /* IDENTIFIERS */
+{
+    < IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>|"-")* >
+    |
+    < #LETTER:
+        [
+        "$",
+        "A"-"Z",
+        "_",
+        "a"-"z",
+        "\u00c0"-"\u00d6",
+        "\u00d8"-"\u00f6",
+        "\u00f8"-"\u00ff",
+        "\u0100"-"\u1fff",
+        "\u3040"-"\u318f",
+        "\u3300"-"\u337f",
+        "\u3400"-"\u3d2d",
+        "\u4e00"-"\u9fff",
+        "\uf900"-"\ufaff"
+        ]
+    >
+    |
+    < #DIGIT:
+        [
+        "0"-"9",
+        "\u0660"-"\u0669",
+        "\u06f0"-"\u06f9",
+        "\u0966"-"\u096f",
+        "\u09e6"-"\u09ef",
+        "\u0a66"-"\u0a6f",
+        "\u0ae6"-"\u0aef",
+        "\u0b66"-"\u0b6f",
+        "\u0be7"-"\u0bef",
+        "\u0c66"-"\u0c6f",
+        "\u0ce6"-"\u0cef",
+        "\u0d66"-"\u0d6f",
+        "\u0e50"-"\u0e59",
+        "\u0ed0"-"\u0ed9",
+        "\u1040"-"\u1049"
+        ]
+    >
+}// IDENTIFIERS
+<DEFAULT,BOUNDS> TOKEN : /* SEPARATORS */
+{
+     < LBRACE               : "{"    >
+    | < RBRACE               : "}"    >
+    | < LBRACKET             : "["    >
+    | < RBRACKET             : "]"    >
+    | < SEMICOLON            : ";"    >
+    | < LTSLASH              : "</"    > : DEFAULT
+    | < LTBANG               : "<!"    > : DEFAULT
+    | < LT                   : "<"    > : DEFAULT
+    | < LTQ                  : "<?"    > : DEFAULT
+    | < GT                   : ">"    > : BOUNDS
+    | < QGT                  : "?>"    > : BOUNDS
+}// SEPARATORS
+<DEFAULT,BOUNDS> TOKEN : /* OPERATORS */
+{
+      < ASSIGN               : "="    >
+}// OPERATORS
+Start Start()        : {/*@bgen(jjtree) Start */
+  Start jjtn000 = new Start(JJTSTART);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Start */
+  try {
+/*@egen*/
+  Specification()/*@bgen(jjtree)*/
+  {
+    jjtree.closeNodeScope(jjtn000, true);
+    jjtc000 = false;
+  }
+/*@egen*/
+  { return jjtn000; }/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void Specification()                : {/*@bgen(jjtree) Specification */
+  Specification jjtn000 = new Specification(JJTSPECIFICATION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Specification */
+  try {
+/*@egen*/
+  XmlHeader()/*@bgen(jjtree) #Opt( true) */
+  {
+    Opt jjtn001 = new Opt(JJTOPT);
+    boolean jjtc001 = true;
+    jjtree.openNodeScope(jjtn001);
+  }
+  try {
+/*@egen*/
+  ( [DocType()] )/*@bgen(jjtree)*/
+  } catch (Throwable jjte001) {
+    if (jjtc001) {
+      jjtree.clearNodeScope(jjtn001);
+      jjtc001 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte001 instanceof RuntimeException) {
+      throw (RuntimeException)jjte001;
+    }
+    if (jjte001 instanceof ParseException) {
+      throw (ParseException)jjte001;
+    }
+    throw (Error)jjte001;
+  } finally {
+    if (jjtc001) {
+      jjtree.closeNodeScope(jjtn001,  true);
+    }
+  }
+/*@egen*/
+  ElementList()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void DocType()          : {/*@bgen(jjtree) DocType */
+                           DocType jjtn000 = new DocType(JJTDOCTYPE);
+                           boolean jjtc000 = true;
+                           jjtree.openNodeScope(jjtn000);
+/*@egen*/String s;}
+{/*@bgen(jjtree) DocType */
+  try {
+/*@egen*/
+  <LTBANG>
+  {
+		s = new String();
+		if (getToken(1).kind != GT ) {
+		   s += getData();
+        } 
+  }/*@bgen(jjtree)*/
+     {
+       jjtree.closeNodeScope(jjtn000, true);
+       jjtc000 = false;
+     }
+/*@egen*/       
+     {jjtn000.setSTRING(s);}/*@bgen(jjtree)*/
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+JAVACODE
+String getData() {
+	StringBuffer s = new StringBuffer();
+//     jjtThis.someData = true;
+    while ((getToken(1)).kind != LT && (getToken(1)).kind != LTSLASH) {
+		Token t = getNextToken();
+		if (t.specialToken != null) {
+			Token tmp_t = t.specialToken;
+			while (tmp_t.specialToken != null) {
+				tmp_t = tmp_t.specialToken;
+			}
+			while (tmp_t != null) {
+				s.append(tmp_t.image);
+				tmp_t = tmp_t.next;
+			}
+		}
+		s.append(t.image);
+       s.append(" ");
+	}
+	return s.toString();
+}
+
+void XmlHeader()            : {/*@bgen(jjtree) XmlHeader */
+  XmlHeader jjtn000 = new XmlHeader(JJTXMLHEADER);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) XmlHeader */
+  try {
+/*@egen*/
+  <LTQ> <XML> AttributeList() <QGT>/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void ElementList()       : {/*@bgen(jjtree) List */
+  List jjtn000 = new List(JJTLIST);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) List */
+  try {
+/*@egen*/
+  (Element())*/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void AttributeList()       : {/*@bgen(jjtree) List */
+  List jjtn000 = new List(JJTLIST);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) List */
+  try {
+/*@egen*/
+  (Attribute())*/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void AttrValue()            : {/*@bgen(jjtree) AttrValue */
+                                AttrValue jjtn000 = new AttrValue(JJTATTRVALUE);
+                                boolean jjtc000 = true;
+                                jjtree.openNodeScope(jjtn000);
+/*@egen*/ Token t; }
+{/*@bgen(jjtree) AttrValue */
+    try {
+/*@egen*/
+    t = <STRING_LITERAL>/*@bgen(jjtree)*/
+        {
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+        }
+/*@egen*/
+        {jjtn000.setLITERAL(t.image);}/*@bgen(jjtree)*/
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
+    }
+/*@egen*/
+}
+
+void Encoding()           : {/*@bgen(jjtree) Encoding */
+  Encoding jjtn000 = new Encoding(JJTENCODING);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Encoding */
+  try {
+/*@egen*/
+  <encoding> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void Version()          : {/*@bgen(jjtree) Version */
+  Version jjtn000 = new Version(JJTVERSION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) Version */
+  try {
+/*@egen*/
+  <version> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void XsiNoNamespaceSchemaLocation()                               : {/*@bgen(jjtree) XsiNoNamespaceSchemaLocation */
+  XsiNoNamespaceSchemaLocation jjtn000 = new XsiNoNamespaceSchemaLocation(JJTXSINONAMESPACESCHEMALOCATION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) XsiNoNamespaceSchemaLocation */
+  try {
+/*@egen*/
+  <XsiNoNamespaceSchemaLocation> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void XmlnsXsi()           : {/*@bgen(jjtree) XmlnsXsi */
+  XmlnsXsi jjtn000 = new XmlnsXsi(JJTXMLNSXSI);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) XmlnsXsi */
+  try {
+/*@egen*/
+  <XmlnsXsi> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+
+void Element()  : {}
+{
+ ( <LT> (
+  port()
+  | operation()
+  | actor_port()
+  | PHI()
+  | design()
+  | module()
+  | initValue()
+  | stateVar()
+ )) 
+ | SimpleElement()
+}
+
+void SimpleElement() : {}
+{
+    IntElement()
+	| FloatElement()
+  	| StringElement()
+}
+
+void IntElement()             : {/*@bgen(jjtree) IntElement */
+                                  IntElement jjtn000 = new IntElement(JJTINTELEMENT);
+                                  boolean jjtc000 = true;
+                                  jjtree.openNodeScope(jjtn000);
+/*@egen*/ Token t; }
+{/*@bgen(jjtree) IntElement */
+    try {
+/*@egen*/
+    t = <INTEGER_LITERAL>/*@bgen(jjtree)*/
+        {
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+        }
+/*@egen*/
+	{jjtn000.setLITERAL(t.image);}/*@bgen(jjtree)*/
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
+    }
+/*@egen*/
+}
+
+void FloatElement()               : {/*@bgen(jjtree) FloatElement */
+                                      FloatElement jjtn000 = new FloatElement(JJTFLOATELEMENT);
+                                      boolean jjtc000 = true;
+                                      jjtree.openNodeScope(jjtn000);
+/*@egen*/ Token t; }
+{/*@bgen(jjtree) FloatElement */
+    try {
+/*@egen*/
+    t = <FLOAT_LITERAL>/*@bgen(jjtree)*/
+        {
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+        }
+/*@egen*/
+	{jjtn000.setLITERAL(t.image);}/*@bgen(jjtree)*/
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
+    }
+/*@egen*/
+}
+
+void StringElement()                : {/*@bgen(jjtree) StringElement */
+                                        StringElement jjtn000 = new StringElement(JJTSTRINGELEMENT);
+                                        boolean jjtc000 = true;
+                                        jjtree.openNodeScope(jjtn000);
+/*@egen*/ Token t;String s; }
+{/*@bgen(jjtree) StringElement */
+        try {
+/*@egen*/
+	t = <IDENTIFIER>
+	{
+		s = t.image;
+		if (getToken(1).kind != GT ) {
+		s += getData();
+	}
+	}/*@bgen(jjtree)*/
+        {
+          jjtree.closeNodeScope(jjtn000, true);
+          jjtc000 = false;
+        }
+/*@egen*/
+        {jjtn000.setLITERAL(s);}/*@bgen(jjtree)*/
+        } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+          }
+        }
+/*@egen*/
+}
+void Attribute()  : {}
+{
+  Encoding()
+ | Version()
+ | XsiNoNamespaceSchemaLocation()
+ | XmlnsXsi()
+  | source()
+  | style()
+  | name()
+  | removable()
+  | sourceName()
+  | dir()
+  | kind()
+  | portName()
+  | decision()
+  | target()
+  | qualifier()
+  | typeName()
+  | value()
+  | autostart()
+  | size()
+  
+}
+
+void portName()           : {/*@bgen(jjtree) portName */
+  portName jjtn000 = new portName(JJTPORTNAME);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) portName */
+  try {
+/*@egen*/
+  <portName> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void module()         : {/*@bgen(jjtree) module */
+  module jjtn000 = new module(JJTMODULE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) module */
+   try {
+/*@egen*/
+   <module> AttributeList()
+  ( <GT> ElementList()  "</" <module>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void sourceName()             : {/*@bgen(jjtree) sourceName */
+  sourceName jjtn000 = new sourceName(JJTSOURCENAME);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) sourceName */
+  try {
+/*@egen*/
+  <sourceName> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void PHI()      : {/*@bgen(jjtree) PHI */
+  PHI jjtn000 = new PHI(JJTPHI);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) PHI */
+   try {
+/*@egen*/
+   <PHI> AttributeList()
+  ( <GT> ElementList()  "</" <PHI>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void kind()       : {/*@bgen(jjtree) kind */
+  kind jjtn000 = new kind(JJTKIND);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) kind */
+  try {
+/*@egen*/
+  <kind> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void initValue()            : {/*@bgen(jjtree) initValue */
+  initValue jjtn000 = new initValue(JJTINITVALUE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) initValue */
+   try {
+/*@egen*/
+   <initValue> AttributeList()
+  ( <GT> ElementList()  "</" <initValue>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void typeName()           : {/*@bgen(jjtree) typeName */
+  typeName jjtn000 = new typeName(JJTTYPENAME);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) typeName */
+  try {
+/*@egen*/
+  <typeName> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void port()       : {/*@bgen(jjtree) port */
+  port jjtn000 = new port(JJTPORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) port */
+   try {
+/*@egen*/
+   <port> AttributeList()
+  ( <GT> ElementList()  "</" <port>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void decision()           : {/*@bgen(jjtree) decision */
+  decision jjtn000 = new decision(JJTDECISION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) decision */
+  try {
+/*@egen*/
+  <decision> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void operation()            : {/*@bgen(jjtree) operation */
+  operation jjtn000 = new operation(JJTOPERATION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) operation */
+   try {
+/*@egen*/
+   <operation> AttributeList()
+  ( <GT> ElementList()  "</" <operation>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void design()         : {/*@bgen(jjtree) design */
+  design jjtn000 = new design(JJTDESIGN);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) design */
+   try {
+/*@egen*/
+   <design> AttributeList()
+  ( <GT> ElementList()  "</" <design>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void stateVar()           : {/*@bgen(jjtree) stateVar */
+  stateVar jjtn000 = new stateVar(JJTSTATEVAR);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) stateVar */
+   try {
+/*@egen*/
+   <stateVar> AttributeList()
+  ( <GT> ElementList()  "</" <stateVar>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void size()       : {/*@bgen(jjtree) size */
+  size jjtn000 = new size(JJTSIZE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) size */
+  try {
+/*@egen*/
+  <size> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void dir()      : {/*@bgen(jjtree) dir */
+  dir jjtn000 = new dir(JJTDIR);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) dir */
+  try {
+/*@egen*/
+  <dir> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void source()         : {/*@bgen(jjtree) source */
+  source jjtn000 = new source(JJTSOURCE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) source */
+  try {
+/*@egen*/
+  <source> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void value()        : {/*@bgen(jjtree) value */
+  value jjtn000 = new value(JJTVALUE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) value */
+  try {
+/*@egen*/
+  <value> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void actor_port()             : {/*@bgen(jjtree) actor_port */
+  actor_port jjtn000 = new actor_port(JJTACTOR_PORT);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) actor_port */
+   try {
+/*@egen*/
+   <actor_port> AttributeList()
+  ( <GT> ElementList()  "</" <actor_port>  ">" | ElementList() "/>" )/*@bgen(jjtree)*/
+   } catch (Throwable jjte000) {
+     if (jjtc000) {
+       jjtree.clearNodeScope(jjtn000);
+       jjtc000 = false;
+     } else {
+       jjtree.popNode();
+     }
+     if (jjte000 instanceof RuntimeException) {
+       throw (RuntimeException)jjte000;
+     }
+     if (jjte000 instanceof ParseException) {
+       throw (ParseException)jjte000;
+     }
+     throw (Error)jjte000;
+   } finally {
+     if (jjtc000) {
+       jjtree.closeNodeScope(jjtn000, true);
+     }
+   }
+/*@egen*/
+}
+void qualifier()            : {/*@bgen(jjtree) qualifier */
+  qualifier jjtn000 = new qualifier(JJTQUALIFIER);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) qualifier */
+  try {
+/*@egen*/
+  <qualifier> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void style()        : {/*@bgen(jjtree) style */
+  style jjtn000 = new style(JJTSTYLE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) style */
+  try {
+/*@egen*/
+  <style> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void removable()            : {/*@bgen(jjtree) removable */
+  removable jjtn000 = new removable(JJTREMOVABLE);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) removable */
+  try {
+/*@egen*/
+  <removable> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void autostart()            : {/*@bgen(jjtree) autostart */
+  autostart jjtn000 = new autostart(JJTAUTOSTART);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) autostart */
+  try {
+/*@egen*/
+  <autostart> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void target()         : {/*@bgen(jjtree) target */
+  target jjtn000 = new target(JJTTARGET);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) target */
+  try {
+/*@egen*/
+  <target> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}
+void name()       : {/*@bgen(jjtree) name */
+  name jjtn000 = new name(JJTNAME);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+/*@egen*/}
+{/*@bgen(jjtree) name */
+  try {
+/*@egen*/
+  <name> "=" AttrValue()/*@bgen(jjtree)*/
+  } catch (Throwable jjte000) {
+    if (jjtc000) {
+      jjtree.clearNodeScope(jjtn000);
+      jjtc000 = false;
+    } else {
+      jjtree.popNode();
+    }
+    if (jjte000 instanceof RuntimeException) {
+      throw (RuntimeException)jjte000;
+    }
+    if (jjte000 instanceof ParseException) {
+      throw (ParseException)jjte000;
+    }
+    throw (Error)jjte000;
+  } finally {
+    if (jjtc000) {
+      jjtree.closeNodeScope(jjtn000, true);
+    }
+  }
+/*@egen*/
+}