[1] | 1 | package antlr; |
---|
| 2 | |
---|
| 3 | /* ANTLR Translator Generator |
---|
| 4 | * Project led by Terence Parr at http://www.cs.usfca.edu |
---|
| 5 | * Software rights: http://www.antlr.org/license.html |
---|
| 6 | * |
---|
| 7 | * $Id: //depot/code/org.antlr/release/antlr-2.7.7/antlr/TreeWalkerGrammar.java#2 $ |
---|
| 8 | */ |
---|
| 9 | |
---|
| 10 | import java.util.Hashtable; |
---|
| 11 | import java.util.Enumeration; |
---|
| 12 | import java.io.IOException; |
---|
| 13 | |
---|
| 14 | import antlr.collections.impl.BitSet; |
---|
| 15 | import antlr.collections.impl.Vector; |
---|
| 16 | |
---|
| 17 | |
---|
| 18 | /** Parser-specific grammar subclass */ |
---|
| 19 | class TreeWalkerGrammar extends Grammar { |
---|
| 20 | // true for transform mode |
---|
| 21 | protected boolean transform = false; |
---|
| 22 | |
---|
| 23 | |
---|
| 24 | TreeWalkerGrammar(String className_, Tool tool_, String superClass) { |
---|
| 25 | super(className_, tool_, superClass); |
---|
| 26 | } |
---|
| 27 | |
---|
| 28 | /** Top-level call to generate the code for this grammar */ |
---|
| 29 | public void generate() throws IOException { |
---|
| 30 | generator.gen(this); |
---|
| 31 | } |
---|
| 32 | |
---|
| 33 | // Get name of class from which generated parser/lexer inherits |
---|
| 34 | protected String getSuperClass() { |
---|
| 35 | return "TreeParser"; |
---|
| 36 | } |
---|
| 37 | |
---|
| 38 | /**Process command line arguments. |
---|
| 39 | * -trace have all rules call traceIn/traceOut |
---|
| 40 | * -traceParser have parser rules call traceIn/traceOut |
---|
| 41 | * -debug generate debugging output for parser debugger |
---|
| 42 | */ |
---|
| 43 | public void processArguments(String[] args) { |
---|
| 44 | for (int i = 0; i < args.length; i++) { |
---|
| 45 | if (args[i].equals("-trace")) { |
---|
| 46 | traceRules = true; |
---|
| 47 | antlrTool.setArgOK(i); |
---|
| 48 | } |
---|
| 49 | else if (args[i].equals("-traceTreeParser")) { |
---|
| 50 | traceRules = true; |
---|
| 51 | antlrTool.setArgOK(i); |
---|
| 52 | } |
---|
| 53 | // else if ( args[i].equals("-debug") ) { |
---|
| 54 | // debuggingOutput = true; |
---|
| 55 | // superClass = "parseview.DebuggingTreeWalker"; |
---|
| 56 | // Tool.setArgOK(i); |
---|
| 57 | // } |
---|
| 58 | } |
---|
| 59 | } |
---|
| 60 | |
---|
| 61 | /** Set tree parser options */ |
---|
| 62 | public boolean setOption(String key, Token value) { |
---|
| 63 | if (key.equals("buildAST")) { |
---|
| 64 | if (value.getText().equals("true")) { |
---|
| 65 | buildAST = true; |
---|
| 66 | } |
---|
| 67 | else if (value.getText().equals("false")) { |
---|
| 68 | buildAST = false; |
---|
| 69 | } |
---|
| 70 | else { |
---|
| 71 | antlrTool.error("buildAST option must be true or false", getFilename(), value.getLine(), value.getColumn()); |
---|
| 72 | } |
---|
| 73 | return true; |
---|
| 74 | } |
---|
| 75 | if (key.equals("ASTLabelType")) { |
---|
| 76 | super.setOption(key, value); |
---|
| 77 | return true; |
---|
| 78 | } |
---|
| 79 | if (key.equals("className")) { |
---|
| 80 | super.setOption(key, value); |
---|
| 81 | return true; |
---|
| 82 | } |
---|
| 83 | if (super.setOption(key, value)) { |
---|
| 84 | return true; |
---|
| 85 | } |
---|
| 86 | antlrTool.error("Invalid option: " + key, getFilename(), value.getLine(), value.getColumn()); |
---|
| 87 | return false; |
---|
| 88 | } |
---|
| 89 | } |
---|