home *** CD-ROM | disk | FTP | other *** search
- package com.extensibility.util.regexpr;
-
- import com.extensibility.util.Deque;
- import java.util.Enumeration;
- import java.util.Vector;
-
- public class Pattern {
- protected MatchState initialState;
-
- public Pattern(PatternTerm var1) {
- this.initialState = this.makeStateMachine(var1);
- }
-
- public Pattern(String var1) {
- PatternTerm var2 = RegExpr.parse(var1);
- this.initialState = this.makeStateMachine(var2);
- }
-
- private MatchState makeStateMachine(PatternTerm var1) {
- MatchState var2 = new MatchState((PatternTerm)null);
- if (var1 != null) {
- MatchState var3 = this.compile(var1, var2);
- if (var3.getTerm() != null) {
- MatchState var4 = new MatchState((PatternTerm)null);
- var3.addNext(var4);
- }
- }
-
- return var2;
- }
-
- private MatchState compileOne(PatternTerm var1, MatchState var2) {
- MatchState var3;
- if (var1.isSeq()) {
- var3 = var2;
-
- PatternTerm var5;
- for(Enumeration var4 = var1.getPatternTerms(); var4.hasMoreElements(); var3 = this.compile(var5, var3)) {
- var5 = (PatternTerm)var4.nextElement();
- }
- } else if (var1.isChoice()) {
- MatchState var8 = new MatchState((PatternTerm)null);
- Enumeration var10 = var1.getPatternTerms();
-
- while(var10.hasMoreElements()) {
- PatternTerm var6 = (PatternTerm)var10.nextElement();
- var3 = this.compile(var6, var2);
- var3.addNext(var8);
- }
-
- var3 = var8;
- } else {
- MatchState var9 = new MatchState(var1);
- var2.addNext(var9);
- var3 = var9;
- }
-
- return var3;
- }
-
- private MatchState compile(PatternTerm var1, MatchState var2) {
- int var4 = var1.getMinOccurrence();
- int var5 = var1.getMaxOccurrence();
-
- while(var4 > 0) {
- var2 = this.compileOne(var1, var2);
- --var4;
- if (var5 != Integer.MAX_VALUE) {
- --var5;
- }
- }
-
- MatchState var9;
- if (var5 == Integer.MAX_VALUE) {
- MatchState var7 = new MatchState((PatternTerm)null);
- MatchState var8 = new MatchState((PatternTerm)null);
- var2.addNext(var7);
- var9 = this.compileOne(var1, var7);
- var9.addNext(var7);
- var7.addNext(var8);
- var9 = var8;
- } else if (var5 > 0) {
- MatchState var10 = new MatchState((PatternTerm)null);
- var2.addNext(var10);
-
- while(var5 > 0) {
- var2 = this.compileOne(var1, var2);
- var2.addNext(var10);
- --var5;
- }
-
- var9 = var10;
- } else {
- var9 = var2;
- }
-
- return var9;
- }
-
- protected void updateFollowers(Deque var1, Vector var2) {
- if (var2 != null) {
- while(true) {
- MatchState var3 = (MatchState)var1.removeHead();
- if (var3 == null) {
- break;
- }
-
- this.addFollowers(var3, var2, new Vector());
- }
- }
-
- }
-
- public boolean matches(String var1) {
- return this.matches(new CharPatternInput(var1), (Vector)null);
- }
-
- public boolean matches(PatternInput var1) {
- return this.matches(var1, (Vector)null);
- }
-
- public boolean matches(PatternInput var1, Vector var2) {
- Deque var3 = new Deque();
- var3.addHead((Object)null);
- var3.addHead(this.initialState);
- Vector var4 = new Vector();
-
- while(var3.size() != 0) {
- MatchState var5 = (MatchState)var3.removeHead();
- if (var5 == null) {
- if (var3.size() == 0) {
- return false;
- }
-
- if (!var1.hasNext()) {
- this.updateFollowers(var3, var2);
- return false;
- }
-
- var1.next();
- var3.addTail((Object)null);
- var4.removeAllElements();
- if (var2 != null) {
- var2.removeAllElements();
- }
- } else if (var5.isEnd()) {
- if (!var1.hasNext()) {
- this.updateFollowers(var3, var2);
- return true;
- }
- } else if (var5.getTerm() == null) {
- Enumeration var8 = var5.nextStates();
-
- while(var8.hasMoreElements()) {
- Object var7 = var8.nextElement();
- if (var4.indexOf(var7) == -1) {
- var4.addElement(var7);
- var3.addHead((MatchState)var7);
- }
- }
- } else if (var1.hasNext() && var5.getTerm().matches(var1.peekNext())) {
- Enumeration var6 = var5.nextStates();
-
- while(var6.hasMoreElements()) {
- var3.addTail((MatchState)var6.nextElement());
- }
- } else if (var2 != null) {
- var2.addElement(var5.getTerm());
- }
- }
-
- return false;
- }
-
- public Vector getFollowers(String var1) {
- Vector var2 = new Vector();
- if (var1 == null) {
- this.addFollowers(this.initialState, var2, new Vector());
- } else {
- Vector var3 = new Vector();
- this.addStatesToVector(this.initialState, var3);
-
- for(int var4 = 0; var4 < var3.size(); ++var4) {
- MatchState var5 = (MatchState)var3.elementAt(var4);
- if (var5.getTerm() != null && var5.getTerm().matches(var1)) {
- Enumeration var6 = var5.nextStates();
-
- while(var6.hasMoreElements()) {
- this.addFollowers((MatchState)var6.nextElement(), var2, new Vector());
- }
- }
- }
- }
-
- return var2;
- }
-
- protected void addFollowers(MatchState var1, Vector var2, Vector var3) {
- if (var1.getTerm() == null) {
- if (var3.indexOf(var1) == -1) {
- var3.addElement(var1);
- Enumeration var4 = var1.nextStates();
-
- while(var4.hasMoreElements()) {
- this.addFollowers((MatchState)var4.nextElement(), var2, var3);
- }
- }
- } else if (var2.indexOf(var1.getTerm()) == -1) {
- var2.addElement(var1.getTerm());
- }
-
- }
-
- public boolean isDeterministic() {
- Vector var1 = new Vector();
- this.addStatesToVector(this.initialState, var1);
- Vector var2 = new Vector();
-
- for(int var3 = 0; var3 < var1.size(); ++var3) {
- MatchState var4 = (MatchState)var1.elementAt(var3);
- if (var4.getTerm() == null) {
- Vector var5 = new Vector();
- this.addFollowers(var4, var5, var2);
-
- for(int var6 = 0; var6 < var5.size() - 1; ++var6) {
- PatternTerm var7 = (PatternTerm)var5.elementAt(var6);
-
- for(int var8 = var6 + 1; var8 < var5.size(); ++var8) {
- PatternTerm var9 = (PatternTerm)var5.elementAt(var8);
- if (var7.intersects(var9)) {
- return false;
- }
- }
- }
- }
- }
-
- return true;
- }
-
- protected void printStateMachine(String var1) {
- System.out.println(String.valueOf("Name = ").concat(String.valueOf(var1)));
- Vector var2 = new Vector();
- this.addStatesToVector(this.initialState, var2);
-
- for(int var3 = 0; var3 < var2.size(); ++var3) {
- System.out.print(String.valueOf(String.valueOf("#").concat(String.valueOf(var3))).concat(String.valueOf(" ")));
- MatchState var4 = (MatchState)var2.elementAt(var3);
- if (var4.getTerm() != null) {
- System.out.print(var4.getTerm().toString());
- }
-
- System.out.print(" ==> ");
- Enumeration var5 = var4.nextStates();
-
- while(var5.hasMoreElements()) {
- MatchState var6 = (MatchState)var5.nextElement();
- System.out.print(String.valueOf(" ").concat(String.valueOf(var2.indexOf(var6))));
- }
-
- System.out.println();
- }
-
- }
-
- protected void addStatesToVector(MatchState var1, Vector var2) {
- if (var2.indexOf(var1) < 0) {
- var2.addElement(var1);
- Enumeration var3 = var1.nextStates();
-
- while(var3.hasMoreElements()) {
- this.addStatesToVector((MatchState)var3.nextElement(), var2);
- }
-
- }
- }
- }
-