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 }