in jflex/src/main/java/jflex/core/SemCheck.java [61:99]
public static boolean maybeEmtpy(RegExp re) {
RegExp2 r;
switch (re.type) {
case sym.BAR:
r = (RegExp2) re;
return maybeEmtpy(r.r1) || maybeEmtpy(r.r2);
case sym.CONCAT:
r = (RegExp2) re;
return maybeEmtpy(r.r1) && maybeEmtpy(r.r2);
case sym.STAR:
case sym.QUESTION:
return true;
case sym.PLUS:
RegExp1 r1 = (RegExp1) re;
return maybeEmtpy((RegExp) r1.content);
case sym.CHAR:
case sym.CHAR_I:
case sym.PRIMCLASS:
case sym.TILDE:
return false;
case sym.STRING:
case sym.STRING_I:
String content = (String) ((RegExp1) re).content;
return content.length() == 0;
case sym.BANG:
RegExp1 r3 = (RegExp1) re;
return !maybeEmtpy((RegExp) r3.content);
default:
throw new RegExpException(re);
}
}