DebuggingCharScanner.java
上传用户:afrynkmhm
上传日期:2007-01-06
资源大小:1262k
文件大小:7k
源码类别:

编译器/解释器

开发平台:

Others

  1. package antlr.debug;
  2. import antlr.*;
  3. import antlr.collections.*;
  4. import antlr.collections.impl.*;
  5. import java.io.*;
  6. public abstract class DebuggingCharScanner extends CharScanner implements DebuggingParser {
  7. private ParserEventSupport parserEventSupport = new ParserEventSupport(this);
  8. private boolean _notDebugMode = false;
  9. protected String ruleNames[];
  10. protected String semPredNames[];
  11. public DebuggingCharScanner(InputBuffer cb) {
  12. super(cb);
  13. }
  14. public DebuggingCharScanner(LexerSharedInputState state) {
  15. super(state);
  16. }
  17. public void addMessageListener(MessageListener l) {
  18. parserEventSupport.addMessageListener(l);
  19. }
  20. public void addNewLineListener(NewLineListener l) {
  21. parserEventSupport.addNewLineListener(l);
  22. }
  23. public void addParserListener(ParserListener l) {
  24. parserEventSupport.addParserListener(l);
  25. }
  26. public void addParserMatchListener(ParserMatchListener l) {
  27. parserEventSupport.addParserMatchListener(l);
  28. }
  29. public void addParserTokenListener(ParserTokenListener l) {
  30. parserEventSupport.addParserTokenListener(l);
  31. }
  32. public void addSemanticPredicateListener(SemanticPredicateListener l) {
  33. parserEventSupport.addSemanticPredicateListener(l);
  34. }
  35. public void addSyntacticPredicateListener(SyntacticPredicateListener l) {
  36. parserEventSupport.addSyntacticPredicateListener(l);
  37. }
  38. public void addTraceListener(TraceListener l) {
  39. parserEventSupport.addTraceListener(l);
  40. }
  41. public void consume() throws CharStreamException {
  42. int la_1 = -99;
  43. try {la_1 = LA(1);}
  44. catch (CharStreamException ignoreAnIOException) {}
  45. super.consume();
  46. parserEventSupport.fireConsume(la_1);
  47. }
  48. protected void fireEnterRule(int num, int data) {
  49. if (isDebugMode())
  50. parserEventSupport.fireEnterRule(num,inputState.guessing,data);
  51. }
  52. protected void fireExitRule(int num, int ttype) {
  53. if (isDebugMode())
  54. parserEventSupport.fireExitRule(num,inputState.guessing, ttype);
  55. }
  56. protected boolean fireSemanticPredicateEvaluated(int type, int num, boolean condition) {
  57. if (isDebugMode())
  58. return parserEventSupport.fireSemanticPredicateEvaluated(type,num,condition,inputState.guessing);
  59. else
  60. return condition;
  61. }
  62. protected void fireSyntacticPredicateFailed() {
  63. if (isDebugMode())
  64. parserEventSupport.fireSyntacticPredicateFailed(inputState.guessing);
  65. }
  66. protected void fireSyntacticPredicateStarted() {
  67. if (isDebugMode())
  68. parserEventSupport.fireSyntacticPredicateStarted(inputState.guessing);
  69. }
  70. protected void fireSyntacticPredicateSucceeded() {
  71. if (isDebugMode())
  72. parserEventSupport.fireSyntacticPredicateSucceeded(inputState.guessing);
  73. }
  74. public String getRuleName(int num) {
  75. return ruleNames[num];
  76. }
  77. public String getSemPredName(int num) {
  78. return semPredNames[num];
  79. }
  80. public synchronized void goToSleep() {
  81. try {wait();}
  82. catch (InterruptedException e) { }
  83. }
  84. public boolean isDebugMode() {
  85. return !_notDebugMode;
  86. }
  87. public char LA(int i) throws CharStreamException {
  88. char la = super.LA(i);
  89. parserEventSupport.fireLA(i, la);
  90. return la;
  91. }
  92. protected Token makeToken(int t) {
  93. // do something with char buffer???
  94. // try {
  95. // Token tok = (Token)tokenObjectClass.newInstance();
  96. // tok.setType(t);
  97. // // tok.setText(getText()); done in generated lexer now
  98. // tok.setLine(line);
  99. // return tok;
  100. // }
  101. // catch (InstantiationException ie) {
  102. // panic("can't instantiate a Token");
  103. // }
  104. // catch (IllegalAccessException iae) {
  105. // panic("Token class is not accessible");
  106. // }
  107. return super.makeToken(t);
  108. }
  109. public void match(char c) throws MismatchedCharException, CharStreamException {
  110. char la_1 = LA(1);
  111. try {
  112. super.match(c);
  113. parserEventSupport.fireMatch(c, inputState.guessing);
  114. }
  115. catch (MismatchedCharException e) {
  116. if (inputState.guessing == 0)
  117. parserEventSupport.fireMismatch(la_1, c, inputState.guessing);
  118. throw e;
  119. }
  120. }
  121. public void match(BitSet b) throws MismatchedCharException, CharStreamException {
  122. String text = this.text.toString();
  123. char la_1 = LA(1);
  124. try {
  125. super.match(b);
  126. parserEventSupport.fireMatch(la_1, b, text, inputState.guessing);
  127. }
  128. catch (MismatchedCharException e) {
  129. if (inputState.guessing == 0)
  130. parserEventSupport.fireMismatch(la_1, b, text, inputState.guessing);
  131. throw e;
  132. }
  133. }
  134. public void match(String s) throws MismatchedCharException, CharStreamException {
  135. StringBuffer la_s = new StringBuffer("");
  136. int len = s.length();
  137. // peek at the next len worth of characters
  138. try {
  139. for(int i = 1; i <= len; i++) {
  140. la_s.append(super.LA(i));
  141. }
  142. }
  143. catch(Exception ignoreMe) {}
  144. try {
  145. super.match(s);
  146. parserEventSupport.fireMatch(s, inputState.guessing);
  147. }
  148. catch (MismatchedCharException e) {
  149. if (inputState.guessing == 0)
  150. parserEventSupport.fireMismatch(la_s.toString(), s, inputState.guessing);
  151. throw e;
  152. }
  153. }
  154. public void matchNot(char c) throws MismatchedCharException, CharStreamException {
  155. char la_1 = LA(1);
  156. try {
  157. super.matchNot(c);
  158. parserEventSupport.fireMatchNot(la_1, c, inputState.guessing);
  159. }
  160. catch (MismatchedCharException e) {
  161. if (inputState.guessing == 0)
  162. parserEventSupport.fireMismatchNot(la_1, c, inputState.guessing);
  163. throw e;
  164. }
  165. }
  166. public void matchRange(char c1, char c2) throws MismatchedCharException, CharStreamException {
  167. char la_1 = LA(1);
  168. try {
  169. super.matchRange(c1,c2);
  170. parserEventSupport.fireMatch(la_1, ""+c1+c2, inputState.guessing);
  171. }
  172. catch (MismatchedCharException e) {
  173. if (inputState.guessing == 0)
  174. parserEventSupport.fireMismatch(la_1, ""+c1+c2, inputState.guessing);
  175. throw e;
  176. }
  177. }
  178. public void newline() {
  179. super.newline();
  180. parserEventSupport.fireNewLine(getLine());
  181. }
  182. public void removeMessageListener(MessageListener l) {
  183. parserEventSupport.removeMessageListener(l);
  184. }
  185. public void removeNewLineListener(NewLineListener l) {
  186. parserEventSupport.removeNewLineListener(l);
  187. }
  188. public void removeParserListener(ParserListener l) {
  189. parserEventSupport.removeParserListener(l);
  190. }
  191. public void removeParserMatchListener(ParserMatchListener l) {
  192. parserEventSupport.removeParserMatchListener(l);
  193. }
  194. public void removeParserTokenListener(ParserTokenListener l) {
  195. parserEventSupport.removeParserTokenListener(l);
  196. }
  197. public void removeSemanticPredicateListener(SemanticPredicateListener l) {
  198. parserEventSupport.removeSemanticPredicateListener(l);
  199. }
  200. public void removeSyntacticPredicateListener(SyntacticPredicateListener l) {
  201. parserEventSupport.removeSyntacticPredicateListener(l);
  202. }
  203. public void removeTraceListener(TraceListener l) {
  204. parserEventSupport.removeTraceListener(l);
  205. }
  206. /** Report exception errors caught in nextToken() */
  207. public void reportError(MismatchedCharException e) {
  208. parserEventSupport.fireReportError(e);
  209. super.reportError(e);
  210. }
  211. /** Parser error-reporting function can be overridden in subclass */
  212. public void reportError(String s) {
  213. parserEventSupport.fireReportError(s);
  214. super.reportError(s);
  215. }
  216. /** Parser warning-reporting function can be overridden in subclass */
  217. public void reportWarning(String s) {
  218. parserEventSupport.fireReportWarning(s);
  219. super.reportWarning(s);
  220. }
  221. public void setDebugMode(boolean value) {
  222. _notDebugMode = !value;
  223. }
  224. public void setupDebugging() {
  225. }
  226. public synchronized void wakeUp() {
  227. notify();
  228. }
  229. }