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

编译器/解释器

开发平台:

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/SatherCharFormatter.java#1 $
  7.  */
  8. import antlr.collections.impl.BitSet;
  9. class SatherCharFormatter implements CharFormatter 
  10. {
  11.     /** Given a character value, return a string representing the character
  12.      * that can be embedded inside a string literal or character literal
  13.      * This works for Java/C/C++ code-generation and languages with compatible
  14.      * special-character-escapment.
  15.      * Code-generators for languages should override this method.
  16.      * @param c   The character of interest.
  17.      * @param forCharLiteral  true to escape for char literal, false for string literal
  18.      */
  19.     public String escapeChar(int c, boolean forCharLiteral) 
  20.     {
  21. switch (c) {
  22.     // case GrammarAnalyzer.EPSILON_TYPE : return "<end-of-token>";
  23. case 'n' : return "\n";
  24. case 't' : return "\t";
  25. case 'r' : return "\r";
  26. case '\' : return "\\";
  27. case ''' : return forCharLiteral ? "\'" : "'";
  28. case '"' :  return forCharLiteral ? """ : "\"";
  29. default :
  30.     if ( c<' '||c>126 ) {
  31. if (c > 255) {
  32.     System.out.println("warning: Sather does not support 16-bit characters (..yet).");
  33.     return "\u" + Integer.toString(c,16);
  34. }
  35. else {
  36.     return "\" + Integer.toString(c,8);
  37. }
  38.     }
  39.     else {
  40. return String.valueOf((char)c);
  41.     }
  42. }
  43.     }
  44.     /** Converts a String into a representation that can be use as a literal
  45.      * when surrounded by double-quotes.
  46.      * @param s The String to be changed into a literal
  47.      */
  48.     public String escapeString(String s)
  49.     {
  50. String retval = new String();
  51. for (int i = 0; i < s.length(); i++)
  52.     {
  53. retval += escapeChar(s.charAt(i), false);
  54.     }
  55. return retval;
  56.     }
  57.     /** Given a character value, return a string representing the character
  58.      * literal that can be recognized by the target language compiler.
  59.      * This works for languages that use single-quotes for character literals.
  60.      * Code-generators for languages should override this method.
  61.      * @param c   The character of interest.
  62.      */
  63.     public String literalChar(int c) {
  64. return "'"  + escapeChar(c, true) + "'";
  65.     }
  66.     /** Converts a String into a string literal
  67.      * This works for languages that use double-quotes for string literals.
  68.      * Code-generators for languages should override this method.
  69.      * @param s The String to be changed into a literal
  70.      */
  71.     public String literalString(String s)
  72.     {
  73. return """ + escapeString(s) + """;
  74.     }
  75.     public String BitSet2BoolList( BitSet bs, String separator )
  76.     {
  77. String result = new String();
  78. int bs_size = bs.size();
  79. for ( int i = 0 ; i < bs_size ; i++ ) {
  80.     if ( bs.member(i) )
  81. result += "true";
  82.     else
  83. result += "false";
  84.     if ( i < bs_size - 1 )
  85. result += separator;
  86. }
  87. return result;
  88.     }
  89.     public String BitSet2IntList( BitSet bs, String separator )
  90.     {
  91. String result = new String();
  92. boolean first = true;
  93. for ( int i = 0 ; i < bs.size() ; i++ )
  94.     if ( bs.member(i) ) {
  95. if ( !first )
  96.     result += separator;
  97. else
  98.     first = false;
  99. result += i;
  100.     }
  101. return result;
  102.     }
  103. }