TreeWalkerGrammar.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/TreeWalkerGrammar.java#1 $
  7.  */
  8. import java.util.Hashtable;
  9. import java.util.Enumeration;
  10. import java.io.IOException;
  11. import antlr.collections.impl.BitSet;
  12. import antlr.collections.impl.Vector;
  13. /** Parser-specific grammar subclass */
  14. class TreeWalkerGrammar extends Grammar {
  15. // true for transform mode
  16. protected boolean transform = false;
  17. TreeWalkerGrammar(String className_, Tool tool_, String superClass) {
  18. super(className_, tool_, superClass);
  19. }
  20. /** Top-level call to generate the code for this grammar */
  21. public void generate() throws IOException {
  22. generator.gen(this);
  23. }
  24. // Get name of class from which generated parser/lexer inherits
  25. protected String getSuperClass() { return "TreeParser"; }
  26. /**Process command line arguments.
  27.  * -trace have all rules call traceIn/traceOut
  28.  * -traceParser have parser rules call traceIn/traceOut
  29.  * -debug generate debugging output for parser debugger
  30.  */
  31. public void processArguments(String[] args) {
  32. for (int i=0; i<args.length; i++) {
  33. if ( args[i].equals("-trace") ) {
  34. traceRules = true;
  35. Tool.setArgOK(i);
  36. }
  37. else if ( args[i].equals("-traceTreeParser") ) {
  38. traceRules = true;
  39. Tool.setArgOK(i);
  40. }
  41. // else if ( args[i].equals("-debug") ) {
  42. // debuggingOutput = true;
  43. // superClass = "parseview.DebuggingTreeWalker";
  44. // Tool.setArgOK(i);
  45. // }
  46. }
  47. }
  48. /** Set tree parser options */
  49. public boolean setOption(String key, Token value) {
  50. if (key.equals("buildAST")) {
  51. if (value.getText().equals("true")) {
  52. buildAST = true;
  53. } else if (value.getText().equals("false")) {
  54. buildAST = false;
  55. } else {
  56. tool.error("buildAST option must be true or false", getFilename(), value.getLine());
  57. }
  58. return true;
  59. }
  60. if (key.equals("ASTLabelType")) {
  61. super.setOption(key, value);
  62. return true;
  63. }
  64. if (super.setOption(key, value)) {
  65. return true;
  66. }
  67. tool.error("Invalid option: " + key, getFilename(), value.getLine());
  68. return false;
  69. }
  70. }