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 | } |
---|