Methods Summary |
---|
public void | addGrammar(persistence.antlr.preprocessor.Grammar gr)
gr.setHierarchy(this);
// add grammar to hierarchy
symbols.put(gr.getName(), gr);
// add grammar to file.
GrammarFile f = getFile(gr.getFileName());
f.addGrammar(gr);
|
public void | addGrammarFile(persistence.antlr.preprocessor.GrammarFile gf)
files.put(gf.getName(), gf);
|
public void | expandGrammarsInFile(java.lang.String fileName)
GrammarFile f = getFile(fileName);
for (Enumeration e = f.getGrammars().elements(); e.hasMoreElements();) {
Grammar g = (Grammar)e.nextElement();
g.expandInPlace();
}
|
public persistence.antlr.preprocessor.Grammar | findRoot(persistence.antlr.preprocessor.Grammar g)
if (g.getSuperGrammarName() == null) { // at root
return g;
}
// return root of super.
Grammar sg = g.getSuperGrammar();
if (sg == null) return g; // return this grammar if super missing
return findRoot(sg);
|
public persistence.antlr.preprocessor.GrammarFile | getFile(java.lang.String fileName)
return (GrammarFile)files.get(fileName);
|
public persistence.antlr.preprocessor.Grammar | getGrammar(java.lang.String gr)
return (Grammar)symbols.get(gr);
|
public persistence.antlr.Tool | getTool()
return antlrTool;
|
public static java.lang.String | optionsToString(persistence.antlr.collections.impl.IndexedVector options)
String s = "options {" + System.getProperty("line.separator");
for (Enumeration e = options.elements(); e.hasMoreElements();) {
s += (Option)e.nextElement() + System.getProperty("line.separator");
}
s += "}" +
System.getProperty("line.separator") +
System.getProperty("line.separator");
return s;
|
public void | readGrammarFile(java.lang.String file)
Reader grStream = new BufferedReader(new FileReader(file));
addGrammarFile(new GrammarFile(antlrTool, file));
// Create the simplified grammar lexer/parser
PreprocessorLexer ppLexer = new PreprocessorLexer(grStream);
ppLexer.setFilename(file);
Preprocessor pp = new Preprocessor(ppLexer);
pp.setTool(antlrTool);
pp.setFilename(file);
// populate the hierarchy with class(es) read in
try {
pp.grammarFile(this, file);
}
catch (TokenStreamException io) {
antlrTool.toolError("Token stream error reading grammar(s):\n" + io);
}
catch (ANTLRException se) {
antlrTool.toolError("error reading grammar(s):\n" + se);
}
|
public void | setTool(persistence.antlr.Tool antlrTool)
this.antlrTool = antlrTool;
|
public boolean | verifyThatHierarchyIsComplete()Return true if hierarchy is complete, false if not
boolean complete = true;
// Make a pass to ensure all grammars are defined
for (Enumeration e = symbols.elements(); e.hasMoreElements();) {
Grammar c = (Grammar)e.nextElement();
if (c.getSuperGrammarName() == null) {
continue; // at root: ignore predefined roots
}
Grammar superG = c.getSuperGrammar();
if (superG == null) {
antlrTool.toolError("grammar " + c.getSuperGrammarName() + " not defined");
complete = false;
symbols.remove(c.getName()); // super not defined, kill sub
}
}
if (!complete) return false;
// Make another pass to set the 'type' field of each grammar
// This makes it easy later to ask a grammar what its type
// is w/o having to search hierarchy.
for (Enumeration e = symbols.elements(); e.hasMoreElements();) {
Grammar c = (Grammar)e.nextElement();
if (c.getSuperGrammarName() == null) {
continue; // ignore predefined roots
}
c.setType(findRoot(c).getName());
}
return true;
|