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

编译器/解释器

开发平台:

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/JavaCharFormatter.java#1 $
  7.  */
  8. class JavaCharFormatter implements CharFormatter {
  9. /** Given a character value, return a string representing the character
  10.  * that can be embedded inside a string literal or character literal
  11.  * This works for Java/C/C++ code-generation and languages with compatible
  12.  * special-character-escapment.
  13.  * Code-generators for languages should override this method.
  14.  * @param c   The character of interest.
  15.  * @param forCharLiteral  true to escape for char literal, false for string literal
  16.  */
  17. public String escapeChar(int c, boolean forCharLiteral) {
  18. switch (c) {
  19. // case GrammarAnalyzer.EPSILON_TYPE : return "<end-of-token>";
  20. case 'n' : return "\n";
  21. case 't' : return "\t";
  22. case 'r' : return "\r";
  23. case '\' : return "\\";
  24. case ''' : return forCharLiteral ? "\'" : "'";
  25. case '"' :  return forCharLiteral ? """ : "\"";
  26. default :
  27. if ( c<' '||c>126 ) {
  28. if (c > 255) {
  29. return "\u" + Integer.toString(c,16);
  30. }
  31. else {
  32. return "\" + Integer.toString(c,8);
  33. }
  34. }
  35. else {
  36. return String.valueOf((char)c);
  37. }
  38. }
  39. }
  40. /** Converts a String into a representation that can be use as a literal
  41.  * when surrounded by double-quotes.
  42.  * @param s The String to be changed into a literal
  43.  */
  44. public String escapeString(String s)
  45. {
  46. String retval = new String();
  47. for (int i = 0; i < s.length(); i++)
  48. {
  49. retval += escapeChar(s.charAt(i), false);
  50. }
  51. return retval;
  52. }
  53. /** Given a character value, return a string representing the character
  54.  * literal that can be recognized by the target language compiler.
  55.  * This works for languages that use single-quotes for character literals.
  56.  * Code-generators for languages should override this method.
  57.  * @param c   The character of interest.
  58.  */
  59. public String literalChar(int c) {
  60. return "'"  + escapeChar(c, true) + "'";
  61. }
  62. /** Converts a String into a string literal
  63.  * This works for languages that use double-quotes for string literals.
  64.  * Code-generators for languages should override this method.
  65.  * @param s The String to be changed into a literal
  66.  */
  67. public String literalString(String s)
  68. {
  69. return """ + escapeString(s) + """;
  70. }
  71. }