- public final HashMap<Element,Boolean> possiblyEpsilon = new HashMap<Element,Boolean>();
- public HashMap<Element,Boolean> eof = new HashMap<Element,Boolean>();
- public HashMap<Element,Topology> follow = new HashMap<Element,Topology>();
- //public HashMap<Element,HashSet<Element>> ys = new HashMap<Element,HashSet<Element>>();
- public HashMapBag<Element,Element> ys = new HashMapBag<Element,Element>();
- public HashMap<Element,Topology> atoms = new HashMap<Element,Topology>();
+ public final HashMap<SequenceOrElement,Boolean> possiblyEpsilon = new HashMap<SequenceOrElement,Boolean>();
+ public HashMap<SequenceOrElement,Boolean> eof = new HashMap<SequenceOrElement,Boolean>();
+ public HashMap<SequenceOrElement,Topology> follow = new HashMap<SequenceOrElement,Topology>();
+ public HashMapBag<SequenceOrElement,SequenceOrElement> ys = new HashMapBag<SequenceOrElement,SequenceOrElement>();
+ public HashMap<SequenceOrElement,Topology> atoms = new HashMap<SequenceOrElement,Topology>();
+ public <Tok extends Input> Topology<Tok> first(SequenceOrElement e, Topology<Tok> empty) {
+ return new Walk.First<Tok>(empty, this).walk(e);
+ }
+ final boolean possiblyEpsilon(SequenceOrElement e) {
+ Walk.Cache cache = this;
+ Boolean ret = possiblyEpsilon.get(e);
+ if (ret != null) return ret.booleanValue();
+ ret = new Walk.PossiblyEpsilon().walk(e) ? Boolean.TRUE : Boolean.FALSE;
+ possiblyEpsilon.put(e, ret);
+ return ret;
+ }