SimpleTokenManager.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/SimpleTokenManager.java#1 $
  7.  */
  8. import java.io.*;
  9. import java.util.Hashtable;
  10. import java.util.Enumeration;
  11. import antlr.collections.impl.Vector;
  12. class SimpleTokenManager implements TokenManager, Cloneable {
  13. protected int maxToken = Token.MIN_USER_TYPE;
  14. // Token vocabulary is Vector of String's
  15. protected Vector vocabulary;
  16. // Hash table is a mapping from Strings to TokenSymbol
  17. private Hashtable table;
  18. // the ANTLR tool
  19. protected Tool tool;
  20. // Name of the token manager
  21. protected String name;
  22. protected boolean readOnly = false;
  23. SimpleTokenManager(String name_, Tool tool_) {
  24. tool = tool_;
  25. name = name_;
  26. // Don't make a bigger vector than we need, because it will show up in output sets.
  27. vocabulary = new Vector(1);
  28. table = new Hashtable();
  29. // define EOF symbol
  30. TokenSymbol ts = new TokenSymbol("EOF");
  31. ts.setTokenType(Token.EOF_TYPE);
  32. define(ts);
  33. // define <null-tree-lookahead> but only in the vocabulary vector
  34. vocabulary.ensureCapacity(Token.NULL_TREE_LOOKAHEAD);
  35. vocabulary.setElementAt("NULL_TREE_LOOKAHEAD", Token.NULL_TREE_LOOKAHEAD);
  36. }
  37. public Object clone() {
  38. SimpleTokenManager tm;
  39. try {
  40. tm = (SimpleTokenManager) super.clone();
  41. tm.vocabulary = (Vector) this.vocabulary.clone();
  42. tm.table = (Hashtable) this.table.clone();
  43. tm.maxToken = this.maxToken;
  44. tm.tool = this.tool;
  45. tm.name = this.name;
  46. } catch (CloneNotSupportedException e) {
  47. tool.panic("cannot clone token manager");
  48. return null;
  49. }
  50. return tm;
  51. }
  52. /** define a token */
  53. public void define(TokenSymbol ts) {
  54. // Add the symbol to the vocabulary vector
  55. vocabulary.ensureCapacity(ts.getTokenType());
  56. vocabulary.setElementAt(ts.getId(), ts.getTokenType());
  57. // add the symbol to the hash table
  58. mapToTokenSymbol(ts.getId(), ts);
  59. }
  60. /** Simple token manager doesn't have a name -- must be set externally */
  61. public String getName() { return name; }
  62. /** Get a token symbol by index */
  63. public String getTokenStringAt(int idx) {
  64. return (String)vocabulary.elementAt(idx);
  65. }
  66. /** Get the TokenSymbol for a string */
  67. public TokenSymbol getTokenSymbol(String sym) {
  68. return (TokenSymbol)table.get(sym);
  69. }
  70. /** Get a token symbol by index */
  71. public TokenSymbol getTokenSymbolAt(int idx) {
  72. return getTokenSymbol(getTokenStringAt(idx));
  73. }
  74. /** Get an enumerator over the symbol table */
  75. public Enumeration getTokenSymbolElements() {
  76. return table.elements();
  77. }
  78. public Enumeration getTokenSymbolKeys() {
  79. return table.keys();
  80. }
  81. /** Get the token vocabulary (read-only).
  82.  * @return A Vector of TokenSymbol 
  83.  */
  84. public Vector getVocabulary() {
  85. return vocabulary;
  86. }
  87. /** Simple token manager is not read-only */
  88. public boolean isReadOnly() { return false; }
  89. /** Map a label or string to an existing token symbol */
  90. public void mapToTokenSymbol(String name, TokenSymbol sym) {
  91. table.put(name, sym);
  92. }
  93. /** Get the highest token type in use */
  94. public int maxTokenType() {
  95. return maxToken-1;
  96. }
  97. /** Get the next unused token type */
  98. public int nextTokenType() {
  99. return maxToken++;
  100. }
  101. /** Set the name of the token manager */
  102. public void setName(String name_) { name = name_; }
  103. public void setReadOnly(boolean ro) {
  104. readOnly = ro;
  105. }
  106. /** Is a token symbol defined? */
  107. public boolean tokenDefined(String symbol) {
  108. return table.containsKey(symbol);
  109. }
  110. }