class Places implements Comparable<Places>{ Label label; int moreinfo; @Override public int compareTo(Places o) { return label.compareTo(o.label); } }
/** Given List<Label>, return a String with a useful representation * of the associated input string. One could show something different * for lexers and parsers, for example. */ public String getInputSequenceDisplay(List<? extends Label> labels) { Grammar g = dfa.nfa.grammar; StringBuilder buf = new StringBuilder(); for (Iterator<? extends Label> it = labels.iterator(); it.hasNext();) { Label label = it.next(); buf.append(label.toString(g)); if ( it.hasNext() && g.type!=Grammar.LEXER ) { buf.append(' '); } } return buf.toString(); }
public Transition(int label, State target) { this.label = new Label(label); this.target = target; }
protected static Integer getTokenType(Label label) { if ( label.isSet() ) { // pick random element of set IntervalSet typeSet = (IntervalSet)label.getSet(); int randomIndex = random.nextInt(typeSet.size()); return typeSet.get(randomIndex); } else { return Utils.integer(label.getAtom()); } //System.out.println(t0.label.toString(g)); }
/** Generate an expression for traversing an edge. */ protected ST genLabelExpr(STGroup templates, Transition edge, int k) { Label label = edge.label; if ( label.isSemanticPredicate() ) { return genSemanticPredicateExpr(templates, edge); } if ( label.isSet() ) { return genSetExpr(templates, label.getSet(), k, true); } // must be simple label ST eST = templates.getInstanceOf("lookaheadTest"); eST.add("atom", getTokenTypeAsTargetLabel(label.getAtom())); eST.add("atomAsInt", Utils.integer(label.getAtom())); eST.add("k", Utils.integer(k)); return eST; }
if ( label.getAtom()==Label.EOT ) { oldTransition.label = new Label(Label.EOT); if ( oldTransition.label.getAtom()!=Label.EOT ) { oldTransition.label.add(label); label = (Label)label.clone(); // clone in case we alter later int transitionIndex = d.addTransition(targetState, label); Transition trans = d.getTransition(transitionIndex);
if ( !(transition0.label.isSemanticPredicate()|| transition0.label.isEpsilon()) ) { return null; SemanticContext p0 = null; SemanticContext p1 = null; if ( transition0.label.isSemanticPredicate() ) { p = transition0.label.getSemanticContext();
buf.append("-{").append(edge.label.getSemanticContext()).append("}?->"); buf.append("-").append(edge.label.toString(grammar)).append(predsStr).append("->");
/** Given a collapsed block of alts (a set of atoms), pull out * the set and return it. */ protected IntSet getCollapsedBlockAsSet(State blk) { State s0 = blk; if ( s0!=null && s0.transition(0)!=null ) { State s1 = s0.transition(0).target; if ( s1!=null && s1.transition(0)!=null ) { Label label = s1.transition(0).label; if ( label.isSet() ) { return label.getSet(); } } } return null; }
protected StringTemplate genSemanticPredicateExpr(StringTemplateGroup templates, Transition edge) { DFA dfa = ((DFAState)edge.target).dfa; // which DFA are we in Label label = edge.label; SemanticContext semCtx = label.getSemanticContext(); return semCtx.genExpr(this,templates,dfa); }
@Override public boolean equals(Object o) { Transition other = (Transition)o; return this.label.equals(other.label) && this.target.equals(other.target); }
@Override public int hashCode() { return label.hashCode() + target.stateNumber; }
/** Return a list of edge labels from start state to targetState. */ public List<IntSet> getEdgeLabels(DFAState targetState) { List<DFAState> dfaStates = getAnyDFAPathToTarget(targetState); List<IntSet> labels = new ArrayList<IntSet>(); for (int i = 0; i < dfaStates.size() - 1; i++) { DFAState d = dfaStates.get(i); DFAState nextState = dfaStates.get(i + 1); // walk looking for edge whose target is next dfa state for (int j = 0; j < d.getNumberOfTransitions(); j++) { Transition e = d.getTransition(j); if (e.target.stateNumber == nextState.stateNumber) { labels.add(e.label.getSet()); } } } return labels; }
/** Generate an expression for traversing an edge. */ protected StringTemplate genLabelExpr(StringTemplateGroup templates, Transition edge, int k) { Label label = edge.label; if ( label.isSemanticPredicate() ) { return genSemanticPredicateExpr(templates, edge); } if ( label.isSet() ) { return genSetExpr(templates, label.getSet(), k, true); } // must be simple label StringTemplate eST = templates.getInstanceOf("lookaheadTest"); eST.setAttribute("atom", getTokenTypeAsTargetLabel(label.getAtom())); eST.setAttribute("atomAsInt", Utils.integer(label.getAtom())); eST.setAttribute("k", Utils.integer(k)); return eST; }
if ( label.getAtom()==Label.EOT ) { oldTransition.label = new Label(Label.EOT); if ( oldTransition.label.getAtom()!=Label.EOT ) { oldTransition.label.add(label); label = (Label)label.clone(); // clone in case we alter later int transitionIndex = d.addTransition(targetState, label); Transition trans = d.getTransition(transitionIndex);
protected static Integer getTokenType(Label label) { if ( label.isSet() ) { // pick random element of set IntervalSet typeSet = (IntervalSet)label.getSet(); int randomIndex = random.nextInt(typeSet.size()); return typeSet.get(randomIndex); } else { return Utils.integer(label.getAtom()); } //System.out.println(t0.label.toString(g)); }