ImportVocabTokenManager.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/ImportVocabTokenManager.java#1 $
  7.  */
  8. import java.io.*;
  9. import java.util.Hashtable;
  10. import java.util.Enumeration;
  11. import antlr.collections.impl.Vector;
  12. /** Static implementation of the TokenManager, used for importVocab option  */
  13. class ImportVocabTokenManager extends SimpleTokenManager implements Cloneable {
  14. private String filename;
  15. protected Grammar grammar;
  16. ImportVocabTokenManager(Grammar grammar, String filename_, String name_, Tool tool_) {
  17. // initialize
  18. super(name_, tool_);
  19. this.grammar = grammar;
  20. filename = filename_;
  21. setReadOnly(true);
  22. // Read a file with lines of the form ID=number
  23. try {
  24. // SAS: changed the following for proper text io
  25. FileReader fileIn = new FileReader(filename);
  26. ANTLRTokdefLexer tokdefLexer = new ANTLRTokdefLexer(fileIn);
  27. ANTLRTokdefParser tokdefParser = new ANTLRTokdefParser(tokdefLexer);
  28. tokdefParser.setFilename(filename);
  29. tokdefParser.file(this);
  30. }
  31. catch (FileNotFoundException fnf) {
  32. tool.panic("Cannot find importVocab file '" + filename);
  33. }
  34. catch (RecognitionException ex) {
  35. tool.panic("Error parsing importVocab file '" + filename + "': " + ex.toString());
  36. }
  37. catch (TokenStreamException ex) {
  38. tool.panic("Error reading importVocab file '" + filename + "'");
  39. }
  40. }
  41. public Object clone() {
  42. ImportVocabTokenManager tm;
  43. tm = (ImportVocabTokenManager)super.clone();
  44. tm.filename = this.filename;
  45. tm.grammar = this.grammar;
  46. return tm;
  47. }
  48. /** define a token. */
  49. public void define(TokenSymbol ts) {
  50. super.define(ts);
  51. }
  52. /** define a token.  Intended for use only when reading the importVocab file. */
  53. public void define(String s, int ttype) {
  54. TokenSymbol ts=null;
  55. if ( s.startsWith(""") ) {
  56. ts = new StringLiteralSymbol(s);
  57. }
  58. else {
  59. ts = new TokenSymbol(s);
  60. }
  61. ts.setTokenType(ttype);
  62. super.define(ts);
  63. maxToken = (ttype+1)>maxToken ? (ttype+1) : maxToken; // record maximum token type
  64. }
  65. /** importVocab token manager is read-only if output would be same as input */
  66. public boolean isReadOnly() {
  67. return readOnly;
  68. }
  69. /** Get the next unused token type. */
  70. public int nextTokenType() {
  71. return super.nextTokenType();
  72. }
  73. }