You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.6 KiB
90 lines
2.6 KiB
package com.fr.third.antlr; |
|
|
|
/* ANTLR Translator Generator |
|
* Project led by Terence Parr at http://www.cs.usfca.edu |
|
* Software rights: http://www.antlr.org/license.html |
|
* |
|
* $Id: //depot/code/org.antlr/release/antlr-2.7.7/antlr/TreeWalkerGrammar.java#2 $ |
|
*/ |
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Parser-specific grammar subclass */ |
|
class TreeWalkerGrammar extends Grammar { |
|
// true for transform mode |
|
protected boolean transform = false; |
|
|
|
|
|
TreeWalkerGrammar(String className_, Tool tool_, String superClass) { |
|
super(className_, tool_, superClass); |
|
} |
|
|
|
/** Top-level call to generate the code for this grammar */ |
|
public void generate() throws IOException { |
|
generator.gen(this); |
|
} |
|
|
|
// Get name of class from which generated parser/lexer inherits |
|
protected String getSuperClass() { |
|
return "TreeParser"; |
|
} |
|
|
|
/**Process command line arguments. |
|
* -trace have all rules call traceIn/traceOut |
|
* -traceParser have parser rules call traceIn/traceOut |
|
* -debug generate debugging output for parser debugger |
|
*/ |
|
public void processArguments(String[] args) { |
|
for (int i = 0; i < args.length; i++) { |
|
if (args[i].equals("-trace")) { |
|
traceRules = true; |
|
antlrTool.setArgOK(i); |
|
} |
|
else if (args[i].equals("-traceTreeParser")) { |
|
traceRules = true; |
|
antlrTool.setArgOK(i); |
|
} |
|
// else if ( args[i].equals("-debug") ) { |
|
// debuggingOutput = true; |
|
// superClass = "parseview.DebuggingTreeWalker"; |
|
// Tool.setArgOK(i); |
|
// } |
|
} |
|
} |
|
|
|
/** Set tree parser options */ |
|
public boolean setOption(String key, Token value) { |
|
if (key.equals("buildAST")) { |
|
if (value.getText().equals("true")) { |
|
buildAST = true; |
|
} |
|
else if (value.getText().equals("false")) { |
|
buildAST = false; |
|
} |
|
else { |
|
antlrTool.error("buildAST option must be true or false", getFilename(), value.getLine(), value.getColumn()); |
|
} |
|
return true; |
|
} |
|
if (key.equals("ASTLabelType")) { |
|
super.setOption(key, value); |
|
return true; |
|
} |
|
if (key.equals("className")) { |
|
super.setOption(key, value); |
|
return true; |
|
} |
|
if (super.setOption(key, value)) { |
|
return true; |
|
} |
|
antlrTool.error("Invalid option: " + key, getFilename(), value.getLine(), value.getColumn()); |
|
return false; |
|
} |
|
}
|
|
|