package freeboogie.ast.gen;
/**
* A location for {@code Token}-s.
*
* I'll use the convention that an empty token is described by two
* pointers just before it.
*
* @author rgrig
* @author reviewed by TODO
*
* @param <T> the token type.
*/
public class TokenLocation<T extends Token> extends Location<T> {
private CharLocation begin;
private CharLocation end;
/**
* Initializes a {@code TokenLocation}.
*/
public TokenLocation() {
begin = end = new CharLocation();
}
/**
* Copy constructor.
* @param other the object to copy
*/
public TokenLocation(TokenLocation other) {
begin = other.begin;
end = other.end;
}
@Override
public TokenLocation<T> advance(T element) {
TokenLocation<T> r = new TokenLocation<T>(this);
r.begin = r.end;
if (element.rep.length() > 0)
r.begin = r.begin.advance(element.rep.charAt(0));
for (int i = 0; i < element.rep.length(); ++i)
r.end = r.end.advance(element.rep.charAt(i));
return r;
}
@Override
public String toString() {
return "" + begin + "--" + end;
}
}