1 package org.simantics.scl.compiler.parser.regexp;
3 import java.util.ArrayList;
4 import java.util.Arrays;
6 import org.simantics.scl.compiler.parser.regexp.automata.NFA;
8 public class RSeq extends Regexp {
9 public final Regexp[] exps;
16 protected void buildAutomaton(NFA aut, int inState, int outState) {
17 if(exps.length == 0) {
18 aut.addEpsilonTransition(inState, outState);
21 for(int i=exps.length-1;i>0;--i) {
22 int midState = aut.newState();
23 exps[i].buildAutomaton(aut, midState, outState);
26 exps[0].buildAutomaton(aut, inState, outState);
30 protected void toString(StringBuilder b, int prec) {
33 for(Regexp exp : exps)
40 public void toString(StringBuilder b, Namer grammar, int prec) {
44 for(Regexp exp : exps) {
49 exp.toString(b, grammar, 2);
56 protected int getTypeId() {
61 public boolean equals(Object obj) {
64 if(obj == null || obj.getClass() != getClass())
66 RSeq other = (RSeq)obj;
67 return Arrays.equals(exps, other.exps);
71 public int hashCode() {
73 for(Regexp exp : exps) {
81 public Regexp simplify() {
84 ArrayList<Regexp> l = new ArrayList<Regexp>(exps.length);
85 for(Regexp exp : this.exps) {
93 public boolean isNullable() {
94 for(Regexp exp : exps)