package net.sf.jlinkgrammar;
/**
* TODO add javadoc
* Temporary connectors used while converting expressions into disjunct lists
*
*/
public class TConnector {
boolean multi; /* true if this is a multi-connector */
char dir; /* '-' for left and '+' for right */
TConnector next;
String string;
TConnector(TConnector e) {
multi = e.multi;
dir = e.dir;
next = e.next;
string = e.string;
}
TConnector(Exp e) {
multi = e.multi;
dir = e.dir;
next = null;
string = e.string;
}
static TConnector catenate(TConnector e1, TConnector e2) {
/* Builds a new list of connectors that is the catenation of e1 with e2.
does not effect lists e1 or e2. Order is maintained. */
TConnector e, head;
head = null;
for (; e1 != null; e1 = e1.next) {
e = new TConnector(e1);
e.next = head;
head = e;
}
for (; e2 != null; e2 = e2.next) {
e = new TConnector(e2);
e.next = head;
head = e;
}
return Treverse(head);
}
static private TConnector Treverse(TConnector e) {
/* reverse the order of the list e. destructive */
TConnector head, x;
head = null;
while (e != null) {
x = e.next;
e.next = head;
head = e;
e = x;
}
return head;
}
}