DefaultToolErrorHandlerpublic class DefaultToolErrorHandler extends Object implements ToolErrorHandler
Fields Summary |
---|
private final Tool | antlrTool | CharFormatter | javaCharFormatter |
Constructors Summary |
---|
DefaultToolErrorHandler(Tool tool)
antlrTool = tool;
|
Methods Summary |
---|
private void | dumpSets(java.lang.String[] output, int outputStartIndex, persistence.antlr.Grammar grammar, boolean lexicalAnalysis, int depth, persistence.antlr.Lookahead[] sets)Dump token/character sets to a string array suitable for
{@link persistence.antlr.Tool.warning(String[], String, int, int)
StringBuffer line = new StringBuffer(100);
for (int i = 1; i <= depth; i++) {
line.append("k==").append(i).append(':");
if (lexicalAnalysis) {
String bits = sets[i].fset.toStringWithRanges(",", javaCharFormatter);
if (sets[i].containsEpsilon()) {
line.append("<end-of-token>");
if (bits.length() > 0) {
line.append(',");
}
}
line.append(bits);
} else {
line.append(sets[i].fset.toString(",", grammar.tokenManager.getVocabulary()));
}
output[outputStartIndex++] = line.toString();
line.setLength(0);
}
| public void | warnAltAmbiguity(persistence.antlr.Grammar grammar, persistence.antlr.AlternativeBlock blk, boolean lexicalAnalysis, int depth, persistence.antlr.Lookahead[] sets, int altIdx1, int altIdx2)Issue a warning about ambiguity between a alternates
final StringBuffer line = new StringBuffer(100);
if (blk instanceof RuleBlock && ((RuleBlock)blk).isLexerAutoGenRule()) {
Alternative ai = blk.getAlternativeAt(altIdx1);
Alternative aj = blk.getAlternativeAt(altIdx2);
RuleRefElement rri = (RuleRefElement)ai.head;
RuleRefElement rrj = (RuleRefElement)aj.head;
String ri = CodeGenerator.reverseLexerRuleName(rri.targetRule);
String rj = CodeGenerator.reverseLexerRuleName(rrj.targetRule);
line.append("lexical nondeterminism between rules ");
line.append(ri).append(" and ").append(rj).append(" upon");
}
else {
if (lexicalAnalysis) {
line.append("lexical ");
}
line.append("nondeterminism between alts ");
line.append(altIdx1 + 1).append(" and ");
line.append(altIdx2 + 1).append(" of block upon");
}
final String [] output = new String [depth + 1];;
output[0] = line.toString();
dumpSets(output, 1, grammar, lexicalAnalysis, depth, sets);
antlrTool.warning(output, grammar.getFilename(), blk.getLine(), blk.getColumn());
| public void | warnAltExitAmbiguity(persistence.antlr.Grammar grammar, persistence.antlr.BlockWithImpliedExitPath blk, boolean lexicalAnalysis, int depth, persistence.antlr.Lookahead[] sets, int altIdx)Issue a warning about ambiguity between an alternate and exit path.
String [] output = new String[depth + 2];
output[0] = (lexicalAnalysis ? "lexical " : "") + "nondeterminism upon";
dumpSets(output, 1, grammar, lexicalAnalysis, depth, sets);
output[depth + 1] = "between alt " + (altIdx + 1) + " and exit branch of block";
antlrTool.warning(output, grammar.getFilename(), blk.getLine(), blk.getColumn());
|
|