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

编译器/解释器

开发平台:

Others

  1. /**
  2.  * <b>SOFTWARE RIGHTS</b>
  3.  * <p>
  4.  * ANTLR 2.6.0 MageLang Insitute, 1999
  5.  * <p>
  6.  * We reserve no legal rights to the ANTLR--it is fully in the
  7.  * public domain. An individual or company may do whatever
  8.  * they wish with source code distributed with ANTLR or the
  9.  * code generated by ANTLR, including the incorporation of
  10.  * ANTLR, or its output, into commerical software.
  11.  * <p>
  12.  * We encourage users to develop software with ANTLR. However,
  13.  * we do ask that credit is given to us for developing
  14.  * ANTLR. By "credit", we mean that if you use ANTLR or
  15.  * incorporate any source code into one of your programs
  16.  * (commercial product, research project, or otherwise) that
  17.  * you acknowledge this fact somewhere in the documentation,
  18.  * research report, etc... If you like ANTLR and have
  19.  * developed a nice tool with the output, please mention that
  20.  * you developed it using ANTLR. In addition, we ask that the
  21.  * headers remain intact in our source code. As long as these
  22.  * guidelines are kept, we expect to continue enhancing this
  23.  * system and expect to make other tools available as they are
  24.  * completed.
  25.  * <p>
  26.  * The ANTLR gang:
  27.  * @version ANTLR 2.6.0 MageLang Insitute, 1999
  28.  * @author Terence Parr, <a href=http://www.MageLang.com>MageLang Institute</a>
  29.  * @author <br>John Lilley, <a href=http://www.Empathy.com>Empathy Software</a>
  30.  * @author <br><a href="mailto:pete@yamuna.demon.co.uk">Pete Wells</a>
  31.  */
  32. #include "antlr/MismatchedCharException.hpp"
  33. #include "antlr/String.hpp"
  34. ANTLR_BEGIN_NAMESPACE(antlr)
  35. MismatchedCharException::MismatchedCharException()
  36. : RecognitionException("Mismatched char")
  37. {}
  38. // Expected range / not range
  39. MismatchedCharException::MismatchedCharException(
  40. int c,
  41. int lower,
  42. int upper_,
  43. bool matchNot,
  44. CharScanner* scanner_
  45. ) : RecognitionException("Mismatched char")
  46.   , foundChar(c)
  47.   , expecting(lower)
  48.   , upper(upper_)
  49. {
  50. // get instantaneous values of file/line/column
  51. scanner = scanner_;
  52. line = scanner->getLine();
  53. fileName = scanner->getFilename();
  54. column = scanner->getColumn();
  55. mismatchType = matchNot ? NOT_RANGE : RANGE;
  56. }
  57. // Expected token / not token
  58. MismatchedCharException::MismatchedCharException(
  59. int c,
  60. int expecting_,
  61. bool matchNot,
  62. CharScanner* scanner_
  63. ) : RecognitionException("Mismatched char")
  64.   , foundChar(c)
  65.   , expecting(expecting_)
  66. {
  67. // get instantaneous values of file/line/column
  68. scanner = scanner_;
  69. line = scanner->getLine();
  70. fileName = scanner->getFilename();
  71. column = scanner->getColumn();
  72. mismatchType = matchNot ? NOT_CHAR : CHAR;
  73. }
  74. // Expected BitSet / not BitSet
  75. MismatchedCharException::MismatchedCharException(
  76. int c,
  77. BitSet set_,
  78. bool matchNot,
  79. CharScanner* scanner_
  80. ) : RecognitionException("Mismatched char")
  81.   , foundChar(c)
  82.   , set(set_)
  83. {
  84. // get instantaneous values of file/line/column
  85. scanner = scanner_;
  86. line = scanner->getLine();
  87. fileName = scanner->getFilename();
  88. column = scanner->getColumn();
  89. mismatchType = matchNot ? NOT_SET : SET;
  90. }
  91. MismatchedCharException::MismatchedCharException(
  92. const ANTLR_USE_NAMESPACE(std)string& s,
  93. int line
  94. ) : RecognitionException(s)
  95. {
  96. }
  97. /**
  98.  * Returns the error message that happened on the line/col given.
  99.  * Copied from toString().
  100.  */
  101. ANTLR_USE_NAMESPACE(std)string MismatchedCharException::getMessage() const
  102. {
  103. ANTLR_USE_NAMESPACE(std)string s;
  104. switch (mismatchType) {
  105. case CHAR :
  106. s += "expecting '" + charName(expecting) + "', found '" + charName(foundChar) + "'";
  107. break;
  108. case NOT_CHAR :
  109. s += "expecting anything but '" + charName(expecting) + "'; got it anyway";
  110. break;
  111. case RANGE :
  112. s += "expecting token in range: '" + charName(expecting) + "'..'" + charName(upper) + "', found '" + charName(foundChar) + "'";
  113. break;
  114. case NOT_RANGE :
  115. s += "expecting token NOT in range: " + charName(expecting) + "'..'" + charName(upper) + "', found '" + charName(foundChar) + "'";
  116. break;
  117. case SET :
  118. case NOT_SET :
  119. {
  120. s += ANTLR_USE_NAMESPACE(std)string("expecting ") + (mismatchType == NOT_SET ? "NOT " : "") + "one of (";
  121. ANTLR_USE_NAMESPACE(std)vector<int> elems = set.toArray();
  122. for (int i = 0; i < (int) elems.size(); i++) {
  123. s += " '";
  124. s += charName(elems[i]);
  125. s += "'";
  126. }
  127. s += "), found '" + charName(foundChar) + "'";
  128. }
  129. break;
  130. default :
  131. s += RecognitionException::getMessage();
  132. break;
  133. }
  134. return s;
  135. }
  136. ANTLR_END_NAMESPACE