forked from jasder/antlr
updated command line options.
This commit is contained in:
parent
cdb420fdde
commit
e30627c967
|
@ -31,23 +31,34 @@ package org.antlr.v4;
|
|||
|
||||
import org.antlr.runtime.*;
|
||||
import org.antlr.v4.analysis.AnalysisPipeline;
|
||||
import org.antlr.v4.automata.*;
|
||||
import org.antlr.v4.automata.ATNFactory;
|
||||
import org.antlr.v4.automata.LexerATNFactory;
|
||||
import org.antlr.v4.automata.ParserATNFactory;
|
||||
import org.antlr.v4.codegen.CodeGenPipeline;
|
||||
import org.antlr.v4.parse.*;
|
||||
import org.antlr.v4.runtime.misc.*;
|
||||
import org.antlr.v4.parse.ANTLRLexer;
|
||||
import org.antlr.v4.parse.ANTLRParser;
|
||||
import org.antlr.v4.parse.GrammarASTAdaptor;
|
||||
import org.antlr.v4.parse.ToolANTLRParser;
|
||||
import org.antlr.v4.runtime.misc.LogManager;
|
||||
import org.antlr.v4.runtime.misc.Nullable;
|
||||
import org.antlr.v4.semantics.SemanticPipeline;
|
||||
import org.antlr.v4.tool.*;
|
||||
import org.antlr.v4.tool.ast.*;
|
||||
import org.antlr.v4.tool.ast.GrammarAST;
|
||||
import org.antlr.v4.tool.ast.GrammarASTErrorNode;
|
||||
import org.antlr.v4.tool.ast.GrammarRootAST;
|
||||
import org.stringtemplate.v4.STGroup;
|
||||
|
||||
import java.io.*;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class Tool {
|
||||
public String VERSION = "4.0-"+new Date();
|
||||
|
||||
public static enum OptionArgType { NONE, STRING }
|
||||
public static enum OptionArgType { NONE, STRING } // NONE implies boolean
|
||||
public static class Option {
|
||||
String fieldName;
|
||||
String name;
|
||||
|
@ -84,7 +95,8 @@ public class Tool {
|
|||
public boolean log = false;
|
||||
public boolean verbose_dfa = false;
|
||||
public boolean no_auto_element_labels = false;
|
||||
public boolean no_listener = false;
|
||||
public boolean gen_listener = true;
|
||||
public boolean gen_visitor = false;
|
||||
|
||||
public static Option[] optionDefs = {
|
||||
new Option("outputDirectory", "-o", OptionArgType.STRING, "specify output directory where all output is generated"),
|
||||
|
@ -96,9 +108,10 @@ public class Tool {
|
|||
new Option("generate_ATN_dot", "-atn", "generate rule augmented transition network diagrams"),
|
||||
new Option("grammarEncoding", "-encoding", OptionArgType.STRING, "specify grammar file encoding; e.g., euc-jp"),
|
||||
new Option("msgFormat", "-message-format", OptionArgType.STRING, "specify output style for messages"),
|
||||
new Option("no_listener", "-no-listener", "don't generate parse tree listener"),
|
||||
new Option("no_auto_element_labels",
|
||||
"-no-auto-ctx-labels", "don't auto generate context fields for each rule element"),
|
||||
new Option("gen_listener", "-listener", "generate parse tree listener (default)"),
|
||||
new Option("gen_listener", "-no-listener", "don't generate parse tree listener"),
|
||||
new Option("gen_visitor", "-visitor", "generate parse tree visitor"),
|
||||
new Option("gen_visitor", "-no-visitor", "don't generate parse tree visitor (default)"),
|
||||
|
||||
new Option("saveLexer", "-Xsave-lexer", "save temp lexer file created for combined grammars"),
|
||||
new Option("launch_ST_inspector", "-XdbgST", "launch StringTemplate visualizer on generated code"),
|
||||
|
@ -175,17 +188,20 @@ public class Tool {
|
|||
}
|
||||
for (Option o : optionDefs) {
|
||||
if ( arg.equals(o.name) ) {
|
||||
String value = null;
|
||||
String argValue = null;
|
||||
if ( o.argType==OptionArgType.STRING ) {
|
||||
value = args[i];
|
||||
argValue = args[i];
|
||||
i++;
|
||||
}
|
||||
// use reflection to set field
|
||||
Class c = this.getClass();
|
||||
try {
|
||||
Field f = c.getField(o.fieldName);
|
||||
if ( value==null ) f.setBoolean(this, true);
|
||||
else f.set(this, value);
|
||||
if ( argValue==null ) {
|
||||
if ( o.fieldName.startsWith("-no-") ) f.setBoolean(this, false);
|
||||
else f.setBoolean(this, true);
|
||||
}
|
||||
else f.set(this, argValue);
|
||||
}
|
||||
catch (Exception e) {
|
||||
errMgr.toolError(ErrorType.INTERNAL_ERROR, "can't access field "+o.fieldName);
|
||||
|
|
|
@ -46,7 +46,7 @@ public class CodeGenPipeline {
|
|||
}
|
||||
else {
|
||||
gen.writeRecognizer(gen.generateParser());
|
||||
if ( !g.tool.no_listener) {
|
||||
if ( !g.tool.gen_listener) {
|
||||
gen.writeListener(gen.generateListener());
|
||||
gen.writeBlankListener(gen.generateBlankListener());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue