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

编译器/解释器

开发平台:

Others

  1. package antlr;
  2. /* ANTLR Translator Generator
  3.  * Project led by Terence Parr at http://www.jGuru.com
  4.  * Software rights: http://www.antlr.org/RIGHTS.html
  5.  *
  6.  * $Id: //depot/code/org.antlr/release/antlr-2.7.0/antlr/MismatchedCharException.java#1 $
  7.  */
  8. import antlr.collections.impl.BitSet;
  9. public class MismatchedCharException extends RecognitionException {
  10.     // Types of chars
  11.     public static final int CHAR = 1;
  12.     public static final int NOT_CHAR = 2;
  13.     public static final int RANGE = 3;
  14.     public static final int NOT_RANGE = 4;
  15.     public static final int SET = 5;
  16.     public static final int NOT_SET = 6;
  17.     // One of the above
  18.     public int mismatchType;
  19.     // what was found on the input stream
  20.     public char foundChar;
  21.     // For CHAR/NOT_CHAR and RANGE/NOT_RANGE
  22.     public int expecting;
  23.     // For RANGE/NOT_RANGE (expecting is lower bound of range)
  24.     public int upper;
  25.     // For SET/NOT_SET
  26.     public BitSet set;
  27.     // who knows...they may want to ask scanner questions
  28.     public CharScanner scanner;
  29.     /**
  30.      * MismatchedCharException constructor comment.
  31.      */
  32.     public MismatchedCharException() {
  33. super("Mismatched char");
  34.     }
  35.     // Expected range / not range
  36.     public MismatchedCharException(char c, char lower, char upper_, boolean matchNot, CharScanner scanner) {
  37. super("Mismatched char");
  38. foundChar = c;
  39. expecting = lower;
  40. upper = upper_;
  41. // get instantaneous values of file/line/column
  42. this.line = scanner.getLine();
  43. this.fileName = scanner.getFilename();
  44. this.column = scanner.getColumn();
  45. this.scanner = scanner;
  46. mismatchType = matchNot ? NOT_RANGE : RANGE;
  47.     }
  48.     // Expected token / not token
  49.     public MismatchedCharException(char c, char expecting_, boolean matchNot, CharScanner scanner) {
  50. super("Mismatched char");
  51. foundChar = c;
  52. expecting = expecting_;
  53. // get instantaneous values of file/line/column
  54. this.line = scanner.getLine();
  55. this.fileName = scanner.getFilename();
  56. this.column = scanner.getColumn();
  57. this.scanner = scanner;
  58. mismatchType = matchNot ? NOT_CHAR : CHAR;
  59.     }
  60.     // Expected BitSet / not BitSet
  61.     public MismatchedCharException(char c, BitSet set_, boolean matchNot, CharScanner scanner) {
  62. super("Mismatched char");
  63. foundChar = c;
  64. set = set_;
  65. // get instantaneous values of file/line/column
  66. this.line = scanner.getLine();
  67. this.fileName = scanner.getFilename();
  68. this.column = scanner.getColumn();
  69. this.scanner = scanner;
  70. mismatchType = matchNot ? NOT_SET : SET;
  71.     }
  72.     /**
  73.      * MismatchedCharException constructor comment.
  74.      * @param s java.lang.String
  75.      */
  76.     public MismatchedCharException(String s, int line) {
  77. super(s);
  78.     }
  79.     /**
  80.      * Returns the error message that happened on the line/col given.
  81.      * Copied from toString().
  82.      */
  83.     public String getMessage() {
  84. StringBuffer sb = new StringBuffer();
  85. switch (mismatchType) {
  86. case CHAR :
  87.     sb.append("expecting '" + (char)expecting + "', found '" + (char)foundChar + "'");
  88.     break;
  89. case NOT_CHAR :
  90.     sb.append("expecting anything but '" + (char)expecting + "'; got it anyway");
  91.     break;
  92. case RANGE :
  93.     sb.append("expecting token in range: '" + (char)expecting + "'..'" + (char)upper + "', found '" + (char)foundChar + "'");
  94.     break;
  95. case NOT_RANGE :
  96.     sb.append("expecting token NOT in range: " + (char)expecting + "'..'" + (char)upper + "', found '" + (char)foundChar + "'");
  97.     break;
  98. case SET :
  99. case NOT_SET :
  100.     sb.append("expecting " + (mismatchType == NOT_SET ? "NOT " : "") + "one of (");
  101.     int[] elems = set.toArray();
  102.     for (int i = 0; i < elems.length; i++) {
  103. sb.append(" '");
  104. sb.append((char)elems[i]);
  105. sb.append("'");
  106.     }
  107.     sb.append("), found '" + (char)foundChar + "'");
  108.     break;
  109. default :
  110.     sb.append(super.getMessage());
  111.     break;
  112. }
  113. return sb.toString();
  114.     }
  115. }