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

编译器/解释器

开发平台:

Others

  1. package antlr.preprocessor;
  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/preprocessor/GrammarFile.java#1 $
  7.  */
  8. import antlr.collections.impl.IndexedVector;
  9. import java.util.Enumeration;
  10. import java.io.*;
  11. /** Stores header action, grammar preamble, file options, and
  12.  *  list of grammars in the file
  13.  */
  14. public class GrammarFile {
  15. protected String fileName;
  16. protected String headerAction="";
  17. protected IndexedVector options;
  18. protected IndexedVector grammars;
  19. protected boolean expanded = false; // any grammars expanded within?
  20. public GrammarFile(String f) {
  21. fileName = f;
  22. grammars = new IndexedVector();
  23. }
  24. public void addGrammar(Grammar g) {
  25. grammars.appendElement(g.getName(), g);
  26. }
  27. public void generateExpandedFile() throws IOException {
  28. if ( !expanded ) {
  29. return; // don't generate if nothing got expanded
  30. }
  31. String expandedFileName = nameForExpandedGrammarFile(this.getName());
  32. // create the new grammar file with expanded grammars
  33. PrintWriter expF = antlr.Tool.openOutputFile(expandedFileName);
  34. expF.println(toString());
  35. expF.close();
  36. }
  37. public IndexedVector getGrammars() {
  38. return grammars;
  39. }
  40. public String getName() {return fileName;}
  41. public String nameForExpandedGrammarFile(String f) {
  42. if ( expanded ) {
  43. // strip path to original input, make expanded file in current dir
  44. return "expanded"+antlr.Tool.fileMinusPath(f);
  45. }
  46. else {
  47. return f;
  48. }
  49. }
  50. public void setExpanded(boolean exp) {
  51. expanded = exp;
  52. }
  53. public void addHeaderAction(String a) {headerAction+=a+System.getProperty("line.separator");}
  54. public void setOptions(IndexedVector o) {options=o;}
  55. public String toString() {
  56. String h = headerAction==null ? "" : headerAction;
  57. String o = options==null ? "" : Hierarchy.optionsToString(options);
  58. String s=h+o;
  59. for (Enumeration e=grammars.elements(); e.hasMoreElements(); ) {
  60. Grammar g = (Grammar)e.nextElement();
  61. s += g;
  62. }
  63. return s;
  64. }
  65. }