001 /**
002 *
003 */
004 package org.meta_environment.eclipse.tokens;
005
006 import java.util.Iterator;
007
008 import aterm.ATermList;
009 import errorapi.Factory;
010 import errorapi.types.Area;
011 import errorapi.types.AreaAreas;
012 import errorapi.types.Slice;
013
014 public class TokenIterator implements Iterator<Token> {
015 private ATermList slices;
016 private AreaAreas areas;
017 private String category;
018 private Factory eFactory;
019
020 public TokenIterator(Factory factory, ATermList slices) {
021 this.eFactory = factory;
022 this.slices = slices;
023 areas = eFactory.makeAreaAreas();
024 }
025
026 public boolean hasNext() {
027 return !slices.isEmpty() || !areas.isEmpty();
028 }
029
030 public Token next() {
031 if (areas.isEmpty() && !slices.isEmpty()) {
032 Slice slice = eFactory.SliceFromTerm(slices.getFirst());
033 slices = slices.getNext();
034 areas = slice.getAreas();
035 category = slice.getId();
036 }
037
038 if (!areas.isEmpty()) {
039 Area area = areas.getHead();
040 areas = areas.getTail();
041 return new Token(category, area);
042 }
043
044 return null;
045 }
046
047 public void remove() {
048 throw new UnsupportedOperationException();
049 }
050 }