1 package jimm.datavision.source.sql; 2 3 9 public class ParserHelper { 10 11 protected String str; 12 protected int startPos; 13 protected String prevToken; 14 protected int prevTokenStartPos; 15 protected int endBeforeToken; 16 17 public ParserHelper(String s, int pos) { 18 str = s; 19 startPos = pos; 20 21 findPreviousSQLToken(); 22 } 23 24 32 protected void findPreviousSQLToken() { 33 if (startPos == 0) { 34 prevToken = ""; 35 prevTokenStartPos = 0; 36 endBeforeToken = 0; 37 return; 38 } 39 40 prevTokenStartPos = startPos - 1; 42 while (prevTokenStartPos >= 0 43 && Character.isSpaceChar(str.charAt(prevTokenStartPos))) 44 --prevTokenStartPos; 45 46 int tokenEnd = prevTokenStartPos + 1; 47 48 char c = str.charAt(prevTokenStartPos); 49 boolean prevWordIsAlpha = (Character.isLetterOrDigit(c) || c == '_'); 50 51 while (prevTokenStartPos >= 0 54 && !Character.isSpaceChar(c = str.charAt(prevTokenStartPos)) 55 && !(c == '}') && (prevWordIsAlpha 57 ? (Character.isLetterOrDigit(c) || c == '_') 58 : !(Character.isLetterOrDigit(c) || c == '_'))) 59 --prevTokenStartPos; 60 ++prevTokenStartPos; 61 62 66 if (prevTokenStartPos == 0) 70 endBeforeToken = 0; 71 else { 72 endBeforeToken = prevTokenStartPos - 1; 73 while (endBeforeToken >= 0 74 && Character.isSpaceChar(str.charAt(endBeforeToken))) 75 --endBeforeToken; 76 ++endBeforeToken; 77 } 78 79 prevToken = str.substring(prevTokenStartPos, tokenEnd); 81 } 82 83 88 public String getPrevToken() { return prevToken; } 89 90 96 public int getPrevTokenStartPos() { return prevTokenStartPos; } 97 98 public int getEndBeforeToken() { return endBeforeToken; } 99 100 } 101 | Popular Tags |